]> git.openstreetmap.org Git - rails.git/blob - vendor/assets/iD/iD.js
Merge remote-tracking branch 'upstream/pull/2412'
[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                 __proto__: null
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                 __proto__: null,
23009                 version: version,
23010                 cluster: cluster,
23011                 hierarchy: hierarchy,
23012                 pack: index$1,
23013                 packSiblings: siblings,
23014                 packEnclose: enclose,
23015                 partition: partition,
23016                 stratify: stratify,
23017                 tree: tree,
23018                 treemap: index$2,
23019                 treemapBinary: binary,
23020                 treemapDice: treemapDice,
23021                 treemapSlice: treemapSlice,
23022                 treemapSliceDice: sliceDice,
23023                 treemapSquarify: squarify,
23024                 treemapResquarify: resquarify,
23025                 bisect: bisectRight,
23026                 bisectRight: bisectRight,
23027                 bisectLeft: bisectLeft,
23028                 ascending: d3_ascending,
23029                 bisector: d3_bisector,
23030                 cross: cross,
23031                 descending: d3_descending,
23032                 deviation: deviation,
23033                 extent: extent,
23034                 histogram: histogram,
23035                 thresholdFreedmanDiaconis: freedmanDiaconis,
23036                 thresholdScott: scott,
23037                 thresholdSturges: thresholdSturges,
23038                 max: max$2,
23039                 mean: mean,
23040                 median: d3_median,
23041                 merge: merge,
23042                 min: min,
23043                 pairs: pairs,
23044                 permute: permute,
23045                 quantile: threshold,
23046                 range: d3_range,
23047                 scan: scan,
23048                 shuffle: shuffle,
23049                 sum: sum,
23050                 ticks: ticks,
23051                 tickIncrement: tickIncrement,
23052                 tickStep: tickStep,
23053                 transpose: transpose,
23054                 variance: variance,
23055                 zip: zip,
23056                 brush: brush,
23057                 brushX: brushX,
23058                 brushY: brushY,
23059                 brushSelection: brushSelection,
23060                 chord: chord,
23061                 ribbon: ribbon,
23062                 nest: nest,
23063                 set: set$2,
23064                 map: map$3,
23065                 keys: keys$3,
23066                 values: values,
23067                 entries: entries,
23068                 color: color,
23069                 rgb: rgb,
23070                 hsl: hsl,
23071                 lab: lab,
23072                 hcl: hcl,
23073                 lch: lch,
23074                 gray: gray,
23075                 cubehelix: cubehelix,
23076                 contours: contours,
23077                 contourDensity: density,
23078                 dispatch: dispatch,
23079                 drag: d3_drag,
23080                 dragDisable: dragDisable,
23081                 dragEnable: yesdrag,
23082                 dsvFormat: dsvFormat,
23083                 csvParse: csvParse,
23084                 csvParseRows: csvParseRows,
23085                 csvFormat: csvFormat,
23086                 csvFormatBody: csvFormatBody,
23087                 csvFormatRows: csvFormatRows,
23088                 tsvParse: tsvParse,
23089                 tsvParseRows: tsvParseRows,
23090                 tsvFormat: tsvFormat,
23091                 tsvFormatBody: tsvFormatBody,
23092                 tsvFormatRows: tsvFormatRows,
23093                 autoType: autoType,
23094                 easeLinear: linear$1,
23095                 easeQuad: quadInOut,
23096                 easeQuadIn: quadIn,
23097                 easeQuadOut: quadOut,
23098                 easeQuadInOut: quadInOut,
23099                 easeCubic: cubicInOut,
23100                 easeCubicIn: cubicIn,
23101                 easeCubicOut: cubicOut,
23102                 easeCubicInOut: cubicInOut,
23103                 easePoly: polyInOut,
23104                 easePolyIn: polyIn,
23105                 easePolyOut: polyOut,
23106                 easePolyInOut: polyInOut,
23107                 easeSin: sinInOut,
23108                 easeSinIn: sinIn,
23109                 easeSinOut: sinOut,
23110                 easeSinInOut: sinInOut,
23111                 easeExp: expInOut,
23112                 easeExpIn: expIn,
23113                 easeExpOut: expOut,
23114                 easeExpInOut: expInOut,
23115                 easeCircle: circleInOut,
23116                 easeCircleIn: circleIn,
23117                 easeCircleOut: circleOut,
23118                 easeCircleInOut: circleInOut,
23119                 easeBounce: bounceOut,
23120                 easeBounceIn: bounceIn,
23121                 easeBounceOut: bounceOut,
23122                 easeBounceInOut: bounceInOut,
23123                 easeBack: backInOut,
23124                 easeBackIn: backIn,
23125                 easeBackOut: backOut,
23126                 easeBackInOut: backInOut,
23127                 easeElastic: elasticOut,
23128                 easeElasticIn: elasticIn,
23129                 easeElasticOut: elasticOut,
23130                 easeElasticInOut: elasticInOut,
23131                 blob: blob,
23132                 buffer: buffer,
23133                 dsv: dsv,
23134                 csv: csv$1,
23135                 tsv: tsv$1,
23136                 image: image,
23137                 json: d3_json,
23138                 text: d3_text,
23139                 xml: d3_xml,
23140                 html: html,
23141                 svg: svg,
23142                 forceCenter: center$1,
23143                 forceCollide: collide,
23144                 forceLink: link,
23145                 forceManyBody: manyBody,
23146                 forceRadial: radial,
23147                 forceSimulation: simulation,
23148                 forceX: x$2,
23149                 forceY: y$2,
23150                 formatDefaultLocale: defaultLocale,
23151                 get format () { return format; },
23152                 get formatPrefix () { return formatPrefix; },
23153                 formatLocale: formatLocale,
23154                 formatSpecifier: formatSpecifier,
23155                 precisionFixed: precisionFixed,
23156                 precisionPrefix: precisionPrefix,
23157                 precisionRound: precisionRound,
23158                 geoArea: d3_geoArea,
23159                 geoBounds: d3_geoBounds,
23160                 geoCentroid: d3_geoCentroid,
23161                 geoCircle: circle,
23162                 geoClipAntimeridian: clipAntimeridian,
23163                 geoClipCircle: clipCircle,
23164                 geoClipExtent: extent$1,
23165                 geoClipRectangle: clipRectangle,
23166                 geoContains: contains$2,
23167                 geoDistance: distance,
23168                 geoGraticule: graticule,
23169                 geoGraticule10: graticule10,
23170                 geoInterpolate: interpolate$1,
23171                 geoLength: d3_geoLength,
23172                 geoPath: d3_geoPath,
23173                 geoAlbers: albers,
23174                 geoAlbersUsa: albersUsa,
23175                 geoAzimuthalEqualArea: azimuthalEqualArea,
23176                 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
23177                 geoAzimuthalEquidistant: azimuthalEquidistant,
23178                 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
23179                 geoConicConformal: conicConformal,
23180                 geoConicConformalRaw: conicConformalRaw,
23181                 geoConicEqualArea: conicEqualArea,
23182                 geoConicEqualAreaRaw: conicEqualAreaRaw,
23183                 geoConicEquidistant: conicEquidistant,
23184                 geoConicEquidistantRaw: conicEquidistantRaw,
23185                 geoEqualEarth: equalEarth,
23186                 geoEqualEarthRaw: equalEarthRaw,
23187                 geoEquirectangular: equirectangular,
23188                 geoEquirectangularRaw: equirectangularRaw,
23189                 geoGnomonic: gnomonic,
23190                 geoGnomonicRaw: gnomonicRaw,
23191                 geoIdentity: d3_geoIdentity,
23192                 geoProjection: projection,
23193                 geoProjectionMutator: projectionMutator,
23194                 geoMercator: mercator,
23195                 geoMercatorRaw: mercatorRaw,
23196                 geoNaturalEarth1: naturalEarth1,
23197                 geoNaturalEarth1Raw: naturalEarth1Raw,
23198                 geoOrthographic: orthographic,
23199                 geoOrthographicRaw: orthographicRaw,
23200                 geoStereographic: stereographic,
23201                 geoStereographicRaw: stereographicRaw,
23202                 geoTransverseMercator: transverseMercator,
23203                 geoTransverseMercatorRaw: transverseMercatorRaw,
23204                 geoRotation: rotation,
23205                 geoStream: d3_geoStream,
23206                 geoTransform: d3_geoTransform,
23207                 axisTop: axisTop,
23208                 axisRight: axisRight,
23209                 axisBottom: axisBottom,
23210                 axisLeft: axisLeft,
23211                 interpolate: d3_interpolate,
23212                 interpolateArray: array$2,
23213                 interpolateBasis: basis$1,
23214                 interpolateBasisClosed: basisClosed,
23215                 interpolateDate: date,
23216                 interpolateDiscrete: discrete,
23217                 interpolateHue: hue$1,
23218                 interpolateNumber: d3_interpolateNumber,
23219                 interpolateObject: object,
23220                 interpolateRound: interpolateRound,
23221                 interpolateString: interpolateString,
23222                 interpolateTransformCss: interpolateTransformCss,
23223                 interpolateTransformSvg: interpolateTransformSvg,
23224                 interpolateZoom: interpolateZoom,
23225                 interpolateRgb: d3_interpolateRgb,
23226                 interpolateRgbBasis: rgbBasis,
23227                 interpolateRgbBasisClosed: rgbBasisClosed,
23228                 interpolateHsl: hsl$2,
23229                 interpolateHslLong: hslLong,
23230                 interpolateLab: lab$1,
23231                 interpolateHcl: hcl$2,
23232                 interpolateHclLong: hclLong,
23233                 interpolateCubehelix: cubehelix$2,
23234                 interpolateCubehelixLong: cubehelixLong,
23235                 piecewise: piecewise,
23236                 quantize: d3_quantize,
23237                 path: path,
23238                 polygonArea: d3_polygonArea,
23239                 polygonCentroid: d3_polygonCentroid,
23240                 polygonHull: d3_polygonHull,
23241                 polygonContains: contains$3,
23242                 polygonLength: length$1,
23243                 quadtree: quadtree,
23244                 randomUniform: uniform,
23245                 randomNormal: normal,
23246                 randomLogNormal: logNormal,
23247                 randomBates: bates,
23248                 randomIrwinHall: irwinHall,
23249                 randomExponential: exponential$1,
23250                 scaleBand: band,
23251                 scalePoint: point$1,
23252                 scaleIdentity: identity$6,
23253                 scaleLinear: linear$2,
23254                 scaleLog: log$1,
23255                 scaleSymlog: symlog,
23256                 scaleOrdinal: ordinal,
23257                 scaleImplicit: implicit,
23258                 scalePow: pow$1,
23259                 scaleSqrt: sqrt$1,
23260                 scaleQuantile: quantile,
23261                 scaleQuantize: quantize,
23262                 scaleThreshold: threshold$1,
23263                 scaleTime: time,
23264                 scaleUtc: utcTime,
23265                 scaleSequential: sequential,
23266                 scaleSequentialLog: sequentialLog,
23267                 scaleSequentialPow: sequentialPow,
23268                 scaleSequentialSqrt: sequentialSqrt,
23269                 scaleSequentialSymlog: sequentialSymlog,
23270                 scaleSequentialQuantile: sequentialQuantile,
23271                 scaleDiverging: diverging,
23272                 scaleDivergingLog: divergingLog,
23273                 scaleDivergingPow: divergingPow,
23274                 scaleDivergingSqrt: divergingSqrt,
23275                 scaleDivergingSymlog: divergingSymlog,
23276                 tickFormat: tickFormat,
23277                 schemeCategory10: category10,
23278                 schemeAccent: Accent,
23279                 schemeDark2: Dark2,
23280                 schemePaired: Paired,
23281                 schemePastel1: Pastel1,
23282                 schemePastel2: Pastel2,
23283                 schemeSet1: Set1,
23284                 schemeSet2: Set2,
23285                 schemeSet3: Set3,
23286                 interpolateBrBG: BrBG,
23287                 schemeBrBG: scheme,
23288                 interpolatePRGn: PRGn,
23289                 schemePRGn: scheme$1,
23290                 interpolatePiYG: PiYG,
23291                 schemePiYG: scheme$2,
23292                 interpolatePuOr: PuOr,
23293                 schemePuOr: scheme$3,
23294                 interpolateRdBu: RdBu,
23295                 schemeRdBu: scheme$4,
23296                 interpolateRdGy: RdGy,
23297                 schemeRdGy: scheme$5,
23298                 interpolateRdYlBu: RdYlBu,
23299                 schemeRdYlBu: scheme$6,
23300                 interpolateRdYlGn: RdYlGn,
23301                 schemeRdYlGn: scheme$7,
23302                 interpolateSpectral: Spectral,
23303                 schemeSpectral: scheme$8,
23304                 interpolateBuGn: BuGn,
23305                 schemeBuGn: scheme$9,
23306                 interpolateBuPu: BuPu,
23307                 schemeBuPu: scheme$a,
23308                 interpolateGnBu: GnBu,
23309                 schemeGnBu: scheme$b,
23310                 interpolateOrRd: OrRd,
23311                 schemeOrRd: scheme$c,
23312                 interpolatePuBuGn: PuBuGn,
23313                 schemePuBuGn: scheme$d,
23314                 interpolatePuBu: PuBu,
23315                 schemePuBu: scheme$e,
23316                 interpolatePuRd: PuRd,
23317                 schemePuRd: scheme$f,
23318                 interpolateRdPu: RdPu,
23319                 schemeRdPu: scheme$g,
23320                 interpolateYlGnBu: YlGnBu,
23321                 schemeYlGnBu: scheme$h,
23322                 interpolateYlGn: YlGn,
23323                 schemeYlGn: scheme$i,
23324                 interpolateYlOrBr: YlOrBr,
23325                 schemeYlOrBr: scheme$j,
23326                 interpolateYlOrRd: YlOrRd,
23327                 schemeYlOrRd: scheme$k,
23328                 interpolateBlues: Blues,
23329                 schemeBlues: scheme$l,
23330                 interpolateGreens: Greens,
23331                 schemeGreens: scheme$m,
23332                 interpolateGreys: Greys,
23333                 schemeGreys: scheme$n,
23334                 interpolatePurples: Purples,
23335                 schemePurples: scheme$o,
23336                 interpolateReds: Reds,
23337                 schemeReds: scheme$p,
23338                 interpolateOranges: Oranges,
23339                 schemeOranges: scheme$q,
23340                 interpolateCubehelixDefault: cubehelix$3,
23341                 interpolateRainbow: rainbow,
23342                 interpolateWarm: warm,
23343                 interpolateCool: cool,
23344                 interpolateSinebow: sinebow,
23345                 interpolateViridis: viridis,
23346                 interpolateMagma: magma,
23347                 interpolateInferno: inferno,
23348                 interpolatePlasma: plasma,
23349                 create: create$5,
23350                 creator: creator,
23351                 local: local,
23352                 matcher: matcher,
23353                 mouse: d3_mouse,
23354                 namespace: namespace,
23355                 namespaces: namespaces,
23356                 clientPoint: point,
23357                 select: d3_select,
23358                 selectAll: d3_selectAll,
23359                 selection: selection,
23360                 selector: selector,
23361                 selectorAll: selectorAll,
23362                 style: styleValue,
23363                 touch: touch,
23364                 touches: d3_touches,
23365                 window: defaultView,
23366                 get event () { return event; },
23367                 customEvent: customEvent,
23368                 arc: arc,
23369                 area: area$1,
23370                 line: line,
23371                 pie: pie,
23372                 areaRadial: areaRadial,
23373                 radialArea: areaRadial,
23374                 lineRadial: lineRadial$1,
23375                 radialLine: lineRadial$1,
23376                 pointRadial: pointRadial,
23377                 linkHorizontal: linkHorizontal,
23378                 linkVertical: linkVertical,
23379                 linkRadial: linkRadial,
23380                 symbol: symbol,
23381                 symbols: symbols,
23382                 symbolCircle: circle$2,
23383                 symbolCross: cross$2,
23384                 symbolDiamond: diamond,
23385                 symbolSquare: square,
23386                 symbolStar: star,
23387                 symbolTriangle: triangle,
23388                 symbolWye: wye,
23389                 curveBasisClosed: basisClosed$1,
23390                 curveBasisOpen: basisOpen,
23391                 curveBasis: basis$2,
23392                 curveBundle: bundle,
23393                 curveCardinalClosed: cardinalClosed,
23394                 curveCardinalOpen: cardinalOpen,
23395                 curveCardinal: cardinal,
23396                 curveCatmullRomClosed: catmullRomClosed,
23397                 curveCatmullRomOpen: catmullRomOpen,
23398                 curveCatmullRom: catmullRom,
23399                 curveLinearClosed: linearClosed,
23400                 curveLinear: curveLinear,
23401                 curveMonotoneX: monotoneX,
23402                 curveMonotoneY: monotoneY,
23403                 curveNatural: natural,
23404                 curveStep: step,
23405                 curveStepAfter: stepAfter,
23406                 curveStepBefore: stepBefore,
23407                 stack: stack,
23408                 stackOffsetExpand: expand,
23409                 stackOffsetDiverging: diverging$1,
23410                 stackOffsetNone: none$1,
23411                 stackOffsetSilhouette: silhouette,
23412                 stackOffsetWiggle: wiggle,
23413                 stackOrderAppearance: appearance,
23414                 stackOrderAscending: ascending$2,
23415                 stackOrderDescending: descending$1,
23416                 stackOrderInsideOut: insideOut,
23417                 stackOrderNone: none$2,
23418                 stackOrderReverse: reverse,
23419                 timeInterval: newInterval,
23420                 timeMillisecond: millisecond,
23421                 timeMilliseconds: milliseconds,
23422                 utcMillisecond: millisecond,
23423                 utcMilliseconds: milliseconds,
23424                 timeSecond: second,
23425                 timeSeconds: seconds,
23426                 utcSecond: second,
23427                 utcSeconds: seconds,
23428                 timeMinute: minute,
23429                 timeMinutes: minutes,
23430                 timeHour: hour,
23431                 timeHours: hours,
23432                 timeDay: day,
23433                 timeDays: days,
23434                 timeWeek: sunday,
23435                 timeWeeks: sundays,
23436                 timeSunday: sunday,
23437                 timeSundays: sundays,
23438                 timeMonday: monday,
23439                 timeMondays: mondays,
23440                 timeTuesday: tuesday,
23441                 timeTuesdays: tuesdays,
23442                 timeWednesday: wednesday,
23443                 timeWednesdays: wednesdays,
23444                 timeThursday: thursday,
23445                 timeThursdays: thursdays,
23446                 timeFriday: friday,
23447                 timeFridays: fridays,
23448                 timeSaturday: saturday,
23449                 timeSaturdays: saturdays,
23450                 timeMonth: month,
23451                 timeMonths: months,
23452                 timeYear: year,
23453                 timeYears: years,
23454                 utcMinute: utcMinute,
23455                 utcMinutes: utcMinutes,
23456                 utcHour: utcHour,
23457                 utcHours: utcHours,
23458                 utcDay: utcDay,
23459                 utcDays: utcDays,
23460                 utcWeek: utcSunday,
23461                 utcWeeks: utcSundays,
23462                 utcSunday: utcSunday,
23463                 utcSundays: utcSundays,
23464                 utcMonday: utcMonday,
23465                 utcMondays: utcMondays,
23466                 utcTuesday: utcTuesday,
23467                 utcTuesdays: utcTuesdays,
23468                 utcWednesday: utcWednesday,
23469                 utcWednesdays: utcWednesdays,
23470                 utcThursday: utcThursday,
23471                 utcThursdays: utcThursdays,
23472                 utcFriday: utcFriday,
23473                 utcFridays: utcFridays,
23474                 utcSaturday: utcSaturday,
23475                 utcSaturdays: utcSaturdays,
23476                 utcMonth: utcMonth,
23477                 utcMonths: utcMonths,
23478                 utcYear: utcYear,
23479                 utcYears: utcYears,
23480                 timeFormatDefaultLocale: defaultLocale$1,
23481                 get timeFormat () { return timeFormat; },
23482                 get timeParse () { return timeParse; },
23483                 get utcFormat () { return utcFormat; },
23484                 get utcParse () { return utcParse; },
23485                 timeFormatLocale: formatLocale$1,
23486                 isoFormat: formatIso,
23487                 isoParse: parseIso,
23488                 now: now,
23489                 timer: timer,
23490                 timerFlush: timerFlush,
23491                 timeout: d3_timeout,
23492                 interval: interval$1,
23493                 transition: transition,
23494                 active: active,
23495                 interrupt: interrupt,
23496                 voronoi: voronoi,
23497                 zoom: d3_zoom,
23498                 zoomTransform: transform,
23499                 zoomIdentity: identity$8
23500         });
23501
23502         function actionAddEntity(way) {
23503             return function(graph) {
23504                 return graph.replace(way);
23505             };
23506         }
23507
23508         /*
23509         Order the nodes of a way in reverse order and reverse any direction dependent tags
23510         other than `oneway`. (We assume that correcting a backwards oneway is the primary
23511         reason for reversing a way.)
23512
23513         In addition, numeric-valued `incline` tags are negated.
23514
23515         The JOSM implementation was used as a guide, but transformations that were of unclear benefit
23516         or adjusted tags that don't seem to be used in practice were omitted.
23517
23518         References:
23519             http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
23520             http://wiki.openstreetmap.org/wiki/Key:direction#Steps
23521             http://wiki.openstreetmap.org/wiki/Key:incline
23522             http://wiki.openstreetmap.org/wiki/Route#Members
23523             http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
23524             http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
23525             http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
23526         */
23527         function actionReverse(entityID, options) {
23528             var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
23529             var numeric = /^([+\-]?)(?=[\d.])/;
23530             var directionKey = /direction$/;
23531             var turn_lanes = /^turn:lanes:?/;
23532             var keyReplacements = [
23533                 [/:right$/, ':left'],
23534                 [/:left$/, ':right'],
23535                 [/:forward$/, ':backward'],
23536                 [/:backward$/, ':forward'],
23537                 [/:right:/, ':left:'],
23538                 [/:left:/, ':right:'],
23539                 [/:forward:/, ':backward:'],
23540                 [/:backward:/, ':forward:']
23541             ];
23542             var valueReplacements = {
23543                 left: 'right',
23544                 right: 'left',
23545                 up: 'down',
23546                 down: 'up',
23547                 forward: 'backward',
23548                 backward: 'forward',
23549                 forwards: 'backward',
23550                 backwards: 'forward',
23551             };
23552             var roleReplacements = {
23553                 forward: 'backward',
23554                 backward: 'forward',
23555                 forwards: 'backward',
23556                 backwards: 'forward'
23557             };
23558             var onewayReplacements = {
23559                 yes: '-1',
23560                 '1': '-1',
23561                 '-1': 'yes'
23562             };
23563
23564             var compassReplacements = {
23565                 N: 'S',
23566                 NNE: 'SSW',
23567                 NE: 'SW',
23568                 ENE: 'WSW',
23569                 E: 'W',
23570                 ESE: 'WNW',
23571                 SE: 'NW',
23572                 SSE: 'NNW',
23573                 S: 'N',
23574                 SSW: 'NNE',
23575                 SW: 'NE',
23576                 WSW: 'ENE',
23577                 W: 'E',
23578                 WNW: 'ESE',
23579                 NW: 'SE',
23580                 NNW: 'SSE'
23581             };
23582
23583
23584             function reverseKey(key) {
23585                 for (var i = 0; i < keyReplacements.length; ++i) {
23586                     var replacement = keyReplacements[i];
23587                     if (replacement[0].test(key)) {
23588                         return key.replace(replacement[0], replacement[1]);
23589                     }
23590                 }
23591                 return key;
23592             }
23593
23594
23595             function reverseValue(key, value, includeAbsolute) {
23596                 if (ignoreKey.test(key)) return value;
23597
23598                 // Turn lanes are left/right to key (not way) direction - #5674
23599                 if (turn_lanes.test(key)) {
23600                     return value;
23601
23602                 } else if (key === 'incline' && numeric.test(value)) {
23603                     return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
23604
23605                 } else if (options && options.reverseOneway && key === 'oneway') {
23606                     return onewayReplacements[value] || value;
23607
23608                 } else if (includeAbsolute && directionKey.test(key)) {
23609                     if (compassReplacements[value]) return compassReplacements[value];
23610
23611                     var degrees = parseFloat(value);
23612                     if (typeof degrees === 'number' && !isNaN(degrees)) {
23613                         if (degrees < 180) {
23614                             degrees += 180;
23615                         } else {
23616                             degrees -= 180;
23617                         }
23618                         return degrees.toString();
23619                     }
23620                 }
23621
23622                 return valueReplacements[value] || value;
23623             }
23624
23625
23626             // Reverse the direction of tags attached to the nodes - #3076
23627             function reverseNodeTags(graph, nodeIDs) {
23628                 for (var i = 0; i < nodeIDs.length; i++) {
23629                     var node = graph.hasEntity(nodeIDs[i]);
23630                     if (!node || !Object.keys(node.tags).length) continue;
23631
23632                     var tags = {};
23633                     for (var key in node.tags) {
23634                         tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID);
23635                     }
23636                     graph = graph.replace(node.update({tags: tags}));
23637                 }
23638                 return graph;
23639             }
23640
23641
23642             function reverseWay(graph, way) {
23643                 var nodes = way.nodes.slice().reverse();
23644                 var tags = {};
23645                 var role;
23646
23647                 for (var key in way.tags) {
23648                     tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
23649                 }
23650
23651                 graph.parentRelations(way).forEach(function(relation) {
23652                     relation.members.forEach(function(member, index) {
23653                         if (member.id === way.id && (role = roleReplacements[member.role])) {
23654                             relation = relation.updateMember({role: role}, index);
23655                             graph = graph.replace(relation);
23656                         }
23657                     });
23658                 });
23659
23660                 // Reverse any associated directions on nodes on the way and then replace
23661                 // the way itself with the reversed node ids and updated way tags
23662                 return reverseNodeTags(graph, nodes)
23663                     .replace(way.update({nodes: nodes, tags: tags}));
23664             }
23665
23666
23667             var action = function(graph) {
23668                 var entity = graph.entity(entityID);
23669                 if (entity.type === 'way') {
23670                     return reverseWay(graph, entity);
23671                 }
23672                 return reverseNodeTags(graph, [entityID]);
23673             };
23674
23675             action.disabled = function(graph) {
23676                 var entity = graph.hasEntity(entityID);
23677                 if (!entity || entity.type === 'way') return false;
23678
23679                 for (var key in entity.tags) {
23680                     var value = entity.tags[key];
23681                     if (reverseKey(key) !== key || reverseValue(key, value, true) !== value) {
23682                         return false;
23683                     }
23684                 }
23685                 return 'nondirectional_node';
23686             };
23687
23688             action.entityID = function() {
23689                 return entityID;
23690             };
23691
23692             return action;
23693         }
23694
23695         function osmIsInterestingTag(key) {
23696             return key !== 'attribution' &&
23697                 key !== 'created_by' &&
23698                 key !== 'source' &&
23699                 key !== 'odbl' &&
23700                 key.indexOf('tiger:') !== 0;
23701         }
23702
23703         var osmAreaKeys = {};
23704         function osmSetAreaKeys(value) {
23705             osmAreaKeys = value;
23706         }
23707
23708         // Tags that indicate a node can be a standalone point
23709         // e.g. { amenity: { bar: true, parking: true, ... } ... }
23710         var osmPointTags = {};
23711         function osmSetPointTags(value) {
23712             osmPointTags = value;
23713         }
23714         // Tags that indicate a node can be part of a way
23715         // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
23716         var osmVertexTags = {};
23717         function osmSetVertexTags(value) {
23718             osmVertexTags = value;
23719         }
23720
23721         function osmNodeGeometriesForTags(nodeTags) {
23722             var geometries = {};
23723             for (var key in nodeTags) {
23724                 if (osmPointTags[key] &&
23725                     (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
23726                     geometries.point = true;
23727                 }
23728                 if (osmVertexTags[key] &&
23729                     (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
23730                     geometries.vertex = true;
23731                 }
23732                 // break early if both are already supported
23733                 if (geometries.point && geometries.vertex) break;
23734             }
23735             return geometries;
23736         }
23737
23738         var osmOneWayTags = {
23739             'aerialway': {
23740                 'chair_lift': true,
23741                 'drag_lift': true,
23742                 'j-bar': true,
23743                 'magic_carpet': true,
23744                 'mixed_lift': true,
23745                 'platter': true,
23746                 'rope_tow': true,
23747                 't-bar': true,
23748                 'zip_line': true
23749             },
23750             'highway': {
23751                 'motorway': true
23752             },
23753             'junction': {
23754                 'circular': true,
23755                 'roundabout': true
23756             },
23757             'man_made': {
23758                 'piste:halfpipe': true
23759             },
23760             'piste:type': {
23761                 'downhill': true,
23762                 'sled': true,
23763                 'yes': true
23764             },
23765             'waterway': {
23766                 'canal': true,
23767                 'ditch': true,
23768                 'drain': true,
23769                 'river': true,
23770                 'stream': true
23771             }
23772         };
23773
23774
23775         var osmPavedTags = {
23776             'surface': {
23777                 'paved': true,
23778                 'asphalt': true,
23779                 'concrete': true,
23780                 'concrete:lanes': true,
23781                 'concrete:plates': true
23782             },
23783             'tracktype': {
23784                 'grade1': true
23785             }
23786         };
23787
23788         var osmRightSideIsInsideTags = {
23789             'natural': {
23790                 'cliff': true,
23791                 'coastline': 'coastline',
23792             },
23793             'barrier': {
23794                 'retaining_wall': true,
23795                 'kerb': true,
23796                 'guard_rail': true,
23797                 'city_wall': true,
23798             },
23799             'man_made': {
23800                 'embankment': true
23801             },
23802             'waterway': {
23803                 'weir': true
23804             }
23805         };
23806
23807         // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
23808         // (does not include `raceway`)
23809         var osmRoutableHighwayTagValues = {
23810             motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
23811             motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
23812             unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
23813             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23814         };
23815         // "highway" tag values that generally do not allow motor vehicles
23816         var osmPathHighwayTagValues = {
23817             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
23818         };
23819
23820         // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
23821         var osmRailwayTrackTagValues = {
23822             rail: true, light_rail: true, tram: true, subway: true,
23823             monorail: true, funicular: true, miniature: true, narrow_gauge: true,
23824             disused: true, preserved: true
23825         };
23826
23827         // "waterway" tag values for line features representing water flow
23828         var osmFlowingWaterwayTagValues = {
23829             canal: true, ditch: true, drain: true, river: true, stream: true
23830         };
23831
23832         // constants
23833         var TAU = 2 * Math.PI;
23834         var EQUATORIAL_RADIUS = 6356752.314245179;
23835         var POLAR_RADIUS = 6378137.0;
23836
23837
23838         function geoLatToMeters(dLat) {
23839             return dLat * (TAU * POLAR_RADIUS / 360);
23840         }
23841
23842
23843         function geoLonToMeters(dLon, atLat) {
23844             return Math.abs(atLat) >= 90 ? 0 :
23845                 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
23846         }
23847
23848
23849         function geoMetersToLat(m) {
23850             return m / (TAU * POLAR_RADIUS / 360);
23851         }
23852
23853
23854         function geoMetersToLon(m, atLat) {
23855             return Math.abs(atLat) >= 90 ? 0 :
23856                 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
23857         }
23858
23859
23860         function geoMetersToOffset(meters, tileSize) {
23861             tileSize = tileSize || 256;
23862             return [
23863                 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
23864                 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
23865             ];
23866         }
23867
23868
23869         function geoOffsetToMeters(offset, tileSize) {
23870             tileSize = tileSize || 256;
23871             return [
23872                 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
23873                 -offset[1] * TAU * POLAR_RADIUS / tileSize
23874             ];
23875         }
23876
23877
23878         // Equirectangular approximation of spherical distances on Earth
23879         function geoSphericalDistance(a, b) {
23880             var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
23881             var y = geoLatToMeters(a[1] - b[1]);
23882             return Math.sqrt((x * x) + (y * y));
23883         }
23884
23885
23886         // scale to zoom
23887         function geoScaleToZoom(k, tileSize) {
23888             tileSize = tileSize || 256;
23889             var log2ts = Math.log(tileSize) * Math.LOG2E;
23890             return Math.log(k * TAU) / Math.LN2 - log2ts;
23891         }
23892
23893
23894         // zoom to scale
23895         function geoZoomToScale(z, tileSize) {
23896             tileSize = tileSize || 256;
23897             return tileSize * Math.pow(2, z) / TAU;
23898         }
23899
23900
23901         // returns info about the node from `nodes` closest to the given `point`
23902         function geoSphericalClosestNode(nodes, point) {
23903             var minDistance = Infinity, distance;
23904             var indexOfMin;
23905
23906             for (var i in nodes) {
23907                 distance = geoSphericalDistance(nodes[i].loc, point);
23908                 if (distance < minDistance) {
23909                     minDistance = distance;
23910                     indexOfMin = i;
23911                 }
23912             }
23913
23914             if (indexOfMin !== undefined) {
23915                 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
23916             } else {
23917                 return null;
23918             }
23919         }
23920
23921         function geoExtent(min, max) {
23922             if (!(this instanceof geoExtent)) {
23923                 return new geoExtent(min, max);
23924             } else if (min instanceof geoExtent) {
23925                 return min;
23926             } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
23927                 this[0] = min[0];
23928                 this[1] = min[1];
23929             } else {
23930                 this[0] = min        || [ Infinity,  Infinity];
23931                 this[1] = max || min || [-Infinity, -Infinity];
23932             }
23933         }
23934
23935         geoExtent.prototype = new Array(2);
23936
23937         Object.assign(geoExtent.prototype, {
23938
23939             equals: function (obj) {
23940                 return this[0][0] === obj[0][0] &&
23941                     this[0][1] === obj[0][1] &&
23942                     this[1][0] === obj[1][0] &&
23943                     this[1][1] === obj[1][1];
23944             },
23945
23946
23947             extend: function(obj) {
23948                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23949                 return geoExtent(
23950                     [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
23951                     [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
23952                 );
23953             },
23954
23955
23956             _extend: function(extent) {
23957                 this[0][0] = Math.min(extent[0][0], this[0][0]);
23958                 this[0][1] = Math.min(extent[0][1], this[0][1]);
23959                 this[1][0] = Math.max(extent[1][0], this[1][0]);
23960                 this[1][1] = Math.max(extent[1][1], this[1][1]);
23961             },
23962
23963
23964             area: function() {
23965                 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
23966             },
23967
23968
23969             center: function() {
23970                 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
23971             },
23972
23973
23974             rectangle: function() {
23975                 return [this[0][0], this[0][1], this[1][0], this[1][1]];
23976             },
23977
23978
23979             bbox: function() {
23980                 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
23981             },
23982
23983
23984             polygon: function() {
23985                 return [
23986                     [this[0][0], this[0][1]],
23987                     [this[0][0], this[1][1]],
23988                     [this[1][0], this[1][1]],
23989                     [this[1][0], this[0][1]],
23990                     [this[0][0], this[0][1]]
23991                 ];
23992             },
23993
23994
23995             contains: function(obj) {
23996                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
23997                 return obj[0][0] >= this[0][0] &&
23998                        obj[0][1] >= this[0][1] &&
23999                        obj[1][0] <= this[1][0] &&
24000                        obj[1][1] <= this[1][1];
24001             },
24002
24003
24004             intersects: function(obj) {
24005                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
24006                 return obj[0][0] <= this[1][0] &&
24007                        obj[0][1] <= this[1][1] &&
24008                        obj[1][0] >= this[0][0] &&
24009                        obj[1][1] >= this[0][1];
24010             },
24011
24012
24013             intersection: function(obj) {
24014                 if (!this.intersects(obj)) return new geoExtent();
24015                 return new geoExtent(
24016                     [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
24017                     [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
24018                 );
24019             },
24020
24021
24022             percentContainedIn: function(obj) {
24023                 if (!(obj instanceof geoExtent)) obj = new geoExtent(obj);
24024                 var a1 = this.intersection(obj).area();
24025                 var a2 = this.area();
24026
24027                 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
24028                     return 0;
24029                 } else {
24030                     return a1 / a2;
24031                 }
24032             },
24033
24034
24035             padByMeters: function(meters) {
24036                 var dLat = geoMetersToLat(meters);
24037                 var dLon = geoMetersToLon(meters, this.center()[1]);
24038                 return geoExtent(
24039                     [this[0][0] - dLon, this[0][1] - dLat],
24040                     [this[1][0] + dLon, this[1][1] + dLat]
24041                 );
24042             },
24043
24044
24045             toParam: function() {
24046                 return this.rectangle().join(',');
24047             }
24048
24049         });
24050
24051         // vector equals
24052         function geoVecEqual(a, b, epsilon) {
24053             if (epsilon) {
24054                 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
24055             } else {
24056                 return (a[0] === b[0]) && (a[1] === b[1]);
24057             }
24058         }
24059
24060         // vector addition
24061         function geoVecAdd(a, b) {
24062             return [ a[0] + b[0], a[1] + b[1] ];
24063         }
24064
24065         // vector subtraction
24066         function geoVecSubtract(a, b) {
24067             return [ a[0] - b[0], a[1] - b[1] ];
24068         }
24069
24070         // vector scaling
24071         function geoVecScale(a, mag) {
24072             return [ a[0] * mag, a[1] * mag ];
24073         }
24074
24075         // vector rounding (was: geoRoundCoordinates)
24076         function geoVecFloor(a) {
24077             return [ Math.floor(a[0]), Math.floor(a[1]) ];
24078         }
24079
24080         // linear interpolation
24081         function geoVecInterp(a, b, t) {
24082             return [
24083                 a[0] + (b[0] - a[0]) * t,
24084                 a[1] + (b[1] - a[1]) * t
24085             ];
24086         }
24087
24088         // http://jsperf.com/id-dist-optimization
24089         function geoVecLength(a, b) {
24090             b = b || [0, 0];
24091             var x = a[0] - b[0];
24092             var y = a[1] - b[1];
24093             return Math.sqrt((x * x) + (y * y));
24094         }
24095
24096         // get a unit vector
24097         function geoVecNormalize(a) {
24098             var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
24099             if (length !== 0) {
24100                 return geoVecScale(a, 1 / length);
24101             }
24102             return [0, 0];
24103         }
24104
24105         // Return the counterclockwise angle in the range (-pi, pi)
24106         // between the positive X axis and the line intersecting a and b.
24107         function geoVecAngle(a, b) {
24108             return Math.atan2(b[1] - a[1], b[0] - a[0]);
24109         }
24110
24111         // dot product
24112         function geoVecDot(a, b, origin) {
24113             origin = origin || [0, 0];
24114             var p = geoVecSubtract(a, origin);
24115             var q = geoVecSubtract(b, origin);
24116             return (p[0]) * (q[0]) + (p[1]) * (q[1]);
24117         }
24118
24119         // normalized dot product
24120         function geoVecNormalizedDot(a, b, origin) {
24121             origin = origin || [0, 0];
24122             var p = geoVecNormalize(geoVecSubtract(a, origin));
24123             var q = geoVecNormalize(geoVecSubtract(b, origin));
24124             return geoVecDot(p, q);
24125         }
24126
24127         // 2D cross product of OA and OB vectors, returns magnitude of Z vector
24128         // Returns a positive value, if OAB makes a counter-clockwise turn,
24129         // negative for clockwise turn, and zero if the points are collinear.
24130         function geoVecCross(a, b, origin) {
24131             origin = origin || [0, 0];
24132             var p = geoVecSubtract(a, origin);
24133             var q = geoVecSubtract(b, origin);
24134             return (p[0]) * (q[1]) - (p[1]) * (q[0]);
24135         }
24136
24137
24138         // find closest orthogonal projection of point onto points array
24139         function geoVecProject(a, points) {
24140             var min = Infinity;
24141             var idx;
24142             var target;
24143
24144             for (var i = 0; i < points.length - 1; i++) {
24145                 var o = points[i];
24146                 var s = geoVecSubtract(points[i + 1], o);
24147                 var v = geoVecSubtract(a, o);
24148                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24149                 var p;
24150
24151                 if (proj < 0) {
24152                     p = o;
24153                 } else if (proj > 1) {
24154                     p = points[i + 1];
24155                 } else {
24156                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24157                 }
24158
24159                 var dist = geoVecLength(p, a);
24160                 if (dist < min) {
24161                     min = dist;
24162                     idx = i + 1;
24163                     target = p;
24164                 }
24165             }
24166
24167             if (idx !== undefined) {
24168                 return { index: idx, distance: min, target: target };
24169             } else {
24170                 return null;
24171             }
24172         }
24173
24174         // Return the counterclockwise angle in the range (-pi, pi)
24175         // between the positive X axis and the line intersecting a and b.
24176         function geoAngle(a, b, projection) {
24177             return geoVecAngle(projection(a.loc), projection(b.loc));
24178         }
24179
24180
24181         function geoEdgeEqual(a, b) {
24182             return (a[0] === b[0] && a[1] === b[1]) ||
24183                 (a[0] === b[1] && a[1] === b[0]);
24184         }
24185
24186
24187         // Rotate all points counterclockwise around a pivot point by given angle
24188         function geoRotate(points, angle, around) {
24189             return points.map(function(point) {
24190                 var radial = geoVecSubtract(point, around);
24191                 return [
24192                     radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
24193                     radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
24194                 ];
24195             });
24196         }
24197
24198
24199         // Choose the edge with the minimal distance from `point` to its orthogonal
24200         // projection onto that edge, if such a projection exists, or the distance to
24201         // the closest vertex on that edge. Returns an object with the `index` of the
24202         // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
24203         function geoChooseEdge(nodes, point, projection, activeID) {
24204             var dist = geoVecLength;
24205             var points = nodes.map(function(n) { return projection(n.loc); });
24206             var ids = nodes.map(function(n) { return n.id; });
24207             var min = Infinity;
24208             var idx;
24209             var loc;
24210
24211             for (var i = 0; i < points.length - 1; i++) {
24212                 if (ids[i] === activeID || ids[i + 1] === activeID) continue;
24213
24214                 var o = points[i];
24215                 var s = geoVecSubtract(points[i + 1], o);
24216                 var v = geoVecSubtract(point, o);
24217                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
24218                 var p;
24219
24220                 if (proj < 0) {
24221                     p = o;
24222                 } else if (proj > 1) {
24223                     p = points[i + 1];
24224                 } else {
24225                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
24226                 }
24227
24228                 var d = dist(p, point);
24229                 if (d < min) {
24230                     min = d;
24231                     idx = i + 1;
24232                     loc = projection.invert(p);
24233                 }
24234             }
24235
24236             if (idx !== undefined) {
24237                 return { index: idx, distance: min, loc: loc };
24238             } else {
24239                 return null;
24240             }
24241         }
24242
24243
24244         // Test active (dragged or drawing) segments against inactive segments
24245         // This is used to test e.g. multipolygon rings that cross
24246         // `activeNodes` is the ring containing the activeID being dragged.
24247         // `inactiveNodes` is the other ring to test against
24248         function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
24249             var actives = [];
24250             var inactives = [];
24251             var j, k, n1, n2, segment;
24252
24253             // gather active segments (only segments in activeNodes that contain the activeID)
24254             for (j = 0; j < activeNodes.length - 1; j++) {
24255                 n1 = activeNodes[j];
24256                 n2 = activeNodes[j+1];
24257                 segment = [n1.loc, n2.loc];
24258                 if (n1.id === activeID || n2.id === activeID) {
24259                     actives.push(segment);
24260                 }
24261             }
24262
24263             // gather inactive segments
24264             for (j = 0; j < inactiveNodes.length - 1; j++) {
24265                 n1 = inactiveNodes[j];
24266                 n2 = inactiveNodes[j+1];
24267                 segment = [n1.loc, n2.loc];
24268                 inactives.push(segment);
24269             }
24270
24271             // test
24272             for (j = 0; j < actives.length; j++) {
24273                 for (k = 0; k < inactives.length; k++) {
24274                     var p = actives[j];
24275                     var q = inactives[k];
24276                     var hit = geoLineIntersection(p, q);
24277                     if (hit) {
24278                         return true;
24279                     }
24280                 }
24281             }
24282
24283             return false;
24284         }
24285
24286
24287         // Test active (dragged or drawing) segments against inactive segments
24288         // This is used to test whether a way intersects with itself.
24289         function geoHasSelfIntersections(nodes, activeID) {
24290             var actives = [];
24291             var inactives = [];
24292             var j, k;
24293
24294             // group active and passive segments along the nodes
24295             for (j = 0; j < nodes.length - 1; j++) {
24296                 var n1 = nodes[j];
24297                 var n2 = nodes[j+1];
24298                 var segment = [n1.loc, n2.loc];
24299                 if (n1.id === activeID || n2.id === activeID) {
24300                     actives.push(segment);
24301                 } else {
24302                     inactives.push(segment);
24303                 }
24304             }
24305
24306             // test
24307             for (j = 0; j < actives.length; j++) {
24308                 for (k = 0; k < inactives.length; k++) {
24309                     var p = actives[j];
24310                     var q = inactives[k];
24311                     // skip if segments share an endpoint
24312                     if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
24313                         geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
24314                         continue;
24315                     }
24316
24317                     var hit = geoLineIntersection(p, q);
24318                     if (hit) {
24319                         var epsilon = 1e-8;
24320                         // skip if the hit is at the segment's endpoint
24321                         if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
24322                             geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
24323                             continue;
24324                         } else {
24325                             return true;
24326                         }
24327                     }
24328                 }
24329             }
24330
24331             return false;
24332         }
24333
24334
24335         // Return the intersection point of 2 line segments.
24336         // From https://github.com/pgkelley4/line-segments-intersect
24337         // This uses the vector cross product approach described below:
24338         //  http://stackoverflow.com/a/565282/786339
24339         function geoLineIntersection(a, b) {
24340             var p = [a[0][0], a[0][1]];
24341             var p2 = [a[1][0], a[1][1]];
24342             var q = [b[0][0], b[0][1]];
24343             var q2 = [b[1][0], b[1][1]];
24344             var r = geoVecSubtract(p2, p);
24345             var s = geoVecSubtract(q2, q);
24346             var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
24347             var denominator = geoVecCross(r, s);
24348
24349             if (uNumerator && denominator) {
24350                 var u = uNumerator / denominator;
24351                 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
24352
24353                 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
24354                     return geoVecInterp(p, p2, t);
24355                 }
24356             }
24357
24358             return null;
24359         }
24360
24361
24362         function geoPathIntersections(path1, path2) {
24363             var intersections = [];
24364             for (var i = 0; i < path1.length - 1; i++) {
24365                 for (var j = 0; j < path2.length - 1; j++) {
24366                     var a = [ path1[i], path1[i+1] ];
24367                     var b = [ path2[j], path2[j+1] ];
24368                     var hit = geoLineIntersection(a, b);
24369                     if (hit) {
24370                         intersections.push(hit);
24371                     }
24372                 }
24373             }
24374             return intersections;
24375         }
24376
24377         function geoPathHasIntersections(path1, path2) {
24378             for (var i = 0; i < path1.length - 1; i++) {
24379                 for (var j = 0; j < path2.length - 1; j++) {
24380                     var a = [ path1[i], path1[i+1] ];
24381                     var b = [ path2[j], path2[j+1] ];
24382                     var hit = geoLineIntersection(a, b);
24383                     if (hit) {
24384                         return true;
24385                     }
24386                 }
24387             }
24388             return false;
24389         }
24390
24391
24392         // Return whether point is contained in polygon.
24393         //
24394         // `point` should be a 2-item array of coordinates.
24395         // `polygon` should be an array of 2-item arrays of coordinates.
24396         //
24397         // From https://github.com/substack/point-in-polygon.
24398         // ray-casting algorithm based on
24399         // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
24400         //
24401         function geoPointInPolygon(point, polygon) {
24402             var x = point[0];
24403             var y = point[1];
24404             var inside = false;
24405
24406             for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
24407                 var xi = polygon[i][0];
24408                 var yi = polygon[i][1];
24409                 var xj = polygon[j][0];
24410                 var yj = polygon[j][1];
24411
24412                 var intersect = ((yi > y) !== (yj > y)) &&
24413                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
24414                 if (intersect) inside = !inside;
24415             }
24416
24417             return inside;
24418         }
24419
24420
24421         function geoPolygonContainsPolygon(outer, inner) {
24422             return inner.every(function(point) {
24423                 return geoPointInPolygon(point, outer);
24424             });
24425         }
24426
24427
24428         function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
24429             function testPoints(outer, inner) {
24430                 return inner.some(function(point) {
24431                     return geoPointInPolygon(point, outer);
24432                 });
24433             }
24434
24435            return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
24436         }
24437
24438
24439         // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
24440         // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
24441         function geoGetSmallestSurroundingRectangle(points) {
24442             var hull = d3_polygonHull(points);
24443             var centroid = d3_polygonCentroid(hull);
24444             var minArea = Infinity;
24445             var ssrExtent = [];
24446             var ssrAngle = 0;
24447             var c1 = hull[0];
24448
24449             for (var i = 0; i <= hull.length - 1; i++) {
24450                 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
24451                 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
24452                 var poly = geoRotate(hull, -angle, centroid);
24453                 var extent = poly.reduce(function(extent, point) {
24454                     return extent.extend(geoExtent(point));
24455                 }, geoExtent());
24456
24457                 var area = extent.area();
24458                 if (area < minArea) {
24459                     minArea = area;
24460                     ssrExtent = extent;
24461                     ssrAngle = angle;
24462                 }
24463                 c1 = c2;
24464             }
24465
24466             return {
24467                 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
24468                 angle: ssrAngle
24469             };
24470         }
24471
24472
24473         function geoPathLength(path) {
24474             var length = 0;
24475             for (var i = 0; i < path.length - 1; i++) {
24476                 length += geoVecLength(path[i], path[i + 1]);
24477             }
24478             return length;
24479         }
24480
24481
24482         // If the given point is at the edge of the padded viewport,
24483         // return a vector that will nudge the viewport in that direction
24484         function geoViewportEdge(point, dimensions) {
24485             var pad = [80, 20, 50, 20];   // top, right, bottom, left
24486             var x = 0;
24487             var y = 0;
24488
24489             if (point[0] > dimensions[0] - pad[1])
24490                 x = -10;
24491             if (point[0] < pad[3])
24492                 x = 10;
24493             if (point[1] > dimensions[1] - pad[2])
24494                 y = -10;
24495             if (point[1] < pad[0])
24496                 y = 10;
24497
24498             if (x || y) {
24499                 return [x, y];
24500             } else {
24501                 return null;
24502             }
24503         }
24504
24505         /*
24506             Bypasses features of D3's default projection stream pipeline that are unnecessary:
24507             * Antimeridian clipping
24508             * Spherical rotation
24509             * Resampling
24510         */
24511         function geoRawMercator() {
24512             var project = mercatorRaw;
24513             var k = 512 / Math.PI; // scale
24514             var x = 0;
24515             var y = 0; // translate
24516             var clipExtent = [[0, 0], [0, 0]];
24517
24518
24519             function projection(point) {
24520                 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
24521                 return [point[0] * k + x, y - point[1] * k];
24522             }
24523
24524
24525             projection.invert = function(point) {
24526                 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
24527                 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
24528             };
24529
24530
24531             projection.scale = function(_) {
24532                 if (!arguments.length) return k;
24533                 k = +_;
24534                 return projection;
24535             };
24536
24537
24538             projection.translate = function(_) {
24539                 if (!arguments.length) return [x, y];
24540                 x = +_[0];
24541                 y = +_[1];
24542                 return projection;
24543             };
24544
24545
24546             projection.clipExtent = function(_) {
24547                 if (!arguments.length) return clipExtent;
24548                 clipExtent = _;
24549                 return projection;
24550             };
24551
24552
24553             projection.transform = function(obj) {
24554                 if (!arguments.length) return identity$8.translate(x, y).scale(k);
24555                 x = +obj.x;
24556                 y = +obj.y;
24557                 k = +obj.k;
24558                 return projection;
24559             };
24560
24561
24562             projection.stream = d3_geoTransform({
24563                 point: function(x, y) {
24564                     var vec = projection([x, y]);
24565                     this.stream.point(vec[0], vec[1]);
24566                 }
24567             }).stream;
24568
24569
24570             return projection;
24571         }
24572
24573         function geoOrthoNormalizedDotProduct(a, b, origin) {
24574             if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
24575                 return 1;  // coincident points, treat as straight and try to remove
24576             }
24577             return geoVecNormalizedDot(a, b, origin);
24578         }
24579
24580
24581         function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
24582             var val = Math.abs(dotp);
24583             if (val < epsilon) {
24584                 return 0;      // already orthogonal
24585             } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
24586                 return 0;      // straight angle, which is okay in this case
24587             } else if (val < lowerThreshold || val > upperThreshold) {
24588                 return dotp;   // can be adjusted
24589             } else {
24590                 return null;   // ignore vertex
24591             }
24592         }
24593
24594
24595         function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
24596             var score = 0;
24597             var first = isClosed ? 0 : 1;
24598             var last = isClosed ? points.length : points.length - 1;
24599             var coords = points.map(function(p) { return p.coord; });
24600
24601             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24602             var upperThreshold = Math.cos(threshold * Math.PI / 180);
24603
24604             for (var i = first; i < last; i++) {
24605                 var a = coords[(i - 1 + coords.length) % coords.length];
24606                 var origin = coords[i];
24607                 var b = coords[(i + 1) % coords.length];
24608
24609                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
24610                 if (dotp === null) continue;    // ignore vertex
24611                 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
24612             }
24613
24614             return score;
24615         }
24616
24617         // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
24618         function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
24619             var max = -Infinity;
24620
24621             var first = isClosed ? 0 : 1;
24622             var last = isClosed ? coords.length : coords.length - 1;
24623
24624             for (var i = first; i < last; i++) {
24625                 var a = coords[(i - 1 + coords.length) % coords.length];
24626                 var origin = coords[i];
24627                 var b = coords[(i + 1) % coords.length];
24628                 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
24629
24630                 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
24631
24632                 if (angle > 45) angle = 90 - angle;
24633
24634                 if (angle >= lessThan) continue;
24635
24636                 if (angle > max) max = angle;
24637             }
24638
24639             if (max === -Infinity) return null;
24640
24641             return max;
24642         }
24643
24644
24645         // similar to geoOrthoCalcScore, but returns quickly if there is something to do
24646         function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
24647             var score = null;
24648             var first = isClosed ? 0 : 1;
24649             var last = isClosed ? coords.length : coords.length - 1;
24650
24651             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
24652             var upperThreshold = Math.cos(threshold * Math.PI / 180);
24653
24654             for (var i = first; i < last; i++) {
24655                 var a = coords[(i - 1 + coords.length) % coords.length];
24656                 var origin = coords[i];
24657                 var b = coords[(i + 1) % coords.length];
24658
24659                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
24660                 if (dotp === null) continue;        // ignore vertex
24661                 if (Math.abs(dotp) > 0) return 1;   // something to do
24662                 score = 0;                          // already square
24663             }
24664
24665             return score;
24666         }
24667
24668         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"]];
24669
24670         var wikibooks$1 = /*#__PURE__*/Object.freeze({
24671                 __proto__: null,
24672                 'default': wikibooks
24673         });
24674
24675         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"]];
24676
24677         var wikinews$1 = /*#__PURE__*/Object.freeze({
24678                 __proto__: null,
24679                 'default': wikinews
24680         });
24681
24682         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"]];
24683
24684         var wikiquote$1 = /*#__PURE__*/Object.freeze({
24685                 __proto__: null,
24686                 'default': wikiquote
24687         });
24688
24689         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"]];
24690
24691         var wikiversity$1 = /*#__PURE__*/Object.freeze({
24692                 __proto__: null,
24693                 'default': wikiversity
24694         });
24695
24696         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"]];
24697
24698         var wikivoyage$1 = /*#__PURE__*/Object.freeze({
24699                 __proto__: null,
24700                 'default': wikivoyage
24701         });
24702
24703         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"]];
24704
24705         var wiktionary$1 = /*#__PURE__*/Object.freeze({
24706                 __proto__: null,
24707                 'default': wiktionary
24708         });
24709
24710         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"]];
24711
24712         var wikipedia$1 = /*#__PURE__*/Object.freeze({
24713                 __proto__: null,
24714                 'default': wikipedia
24715         });
24716
24717         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"]];
24718
24719         var wikisource$1 = /*#__PURE__*/Object.freeze({
24720                 __proto__: null,
24721                 'default': wikisource
24722         });
24723
24724         getCjsExportFromNamespace(wikibooks$1);
24725
24726         getCjsExportFromNamespace(wikinews$1);
24727
24728         getCjsExportFromNamespace(wikiquote$1);
24729
24730         getCjsExportFromNamespace(wikiversity$1);
24731
24732         getCjsExportFromNamespace(wikivoyage$1);
24733
24734         getCjsExportFromNamespace(wiktionary$1);
24735
24736         var require$$6 = getCjsExportFromNamespace(wikipedia$1);
24737
24738         getCjsExportFromNamespace(wikisource$1);
24739
24740         var wikipedia$2 = require$$6;
24741
24742         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"]]}];
24743
24744         var dataDeprecated = [{old:{aerialway:"canopy"},replace:{aerialway:"zip_line"}},{old:{aeroway:"aerobridge"},replace:{aeroway:"jet_bridge",highway:"corridor"}},{old:{access:"public"},replace:{access:"yes"}},{old:{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:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{amenity:"winery"},replace:{craft:"winery"}},{old:{amenity:"youth_center"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{amenity:"youth_centre"},replace:{amenity:"community_centre","community_centre:for":"juvenile"}},{old:{artwork:"*"},replace:{artwork_type:"$1"}},{old:{"artwork:type":"*"},replace:{artwork_type:"$1"}},{old:{attraction:"ferris_wheel"},replace:{attraction:"big_wheel"}},{old:{barrier:"curb"},replace:{barrier:"kerb"}},{old:{barrier:"embankment"},replace:{man_made:"embankment"}},{old:{barrier:"wall",type:"noise_barrier"},replace:{barrier:"wall",wall:"noise_barrier"}},{old:{barrier:"wire_fence"},replace:{barrier:"fence",fence_type:"wire"}},{old:{barrier:"wood_fence"},replace:{barrier:"fence",fence_type:"wood"}},{old:{building:"entrance"},replace:{entrance:"*"}},{old:{building:"family_house"},replace:{building:"house"}},{old:{building:"home"},replace:{building:"house"}},{old:{building:"household"},replace:{building:"house"}},{old:{"building:color":"*"},replace:{"building:colour":"$1"}},{old:{"building:roof:colour":"*"},replace:{"roof:colour":"$1"}},{old:{"building:type":"*"},replace:{building:"$1"}},{old:{camp_site:"camp_pitch"},replace:{tourism:"camp_pitch"}},{old:{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:{direction:"all"},replace:{direction:"both"}},{old:{direction:"down",highway:"*"},replace:{incline:"down",highway:"$1"}},{old:{direction:"downhill"},replace:{incline:"down"}},{old:{direction:"East"},replace:{direction:"E"}},{old:{direction:"forward;backward"},replace:{direction:"both"}},{old:{direction:"North"},replace:{direction:"N"}},{old:{direction:"South"},replace:{direction:"S"}},{old:{direction:"up",highway:"*"},replace:{incline:"up",highway:"$1"}},{old:{direction:"uphill"},replace:{incline:"up"}},{old:{direction:"West"},replace:{direction:"W"}},{old:{drinkable:"*"},replace:{drinking_water:"$1"}},{old:{dropped_kerb:"*"},replace:{kerb:"lowered"}},{old:{embankment:"1"},replace:{embankment:"yes"}},{old:{embankment:"false"},replace:{embankment:"no"}},{old:{embankment:"right",man_made:"embankment"},replace:{man_made:"embankment"}},{old:{embankment:"true"},replace:{embankment:"yes"}},{old:{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:{golf:"faiway"},replace:{golf:"fairway",landuse:"grass"}},{old:{golf:"putting_green"},replace:{golf:"green",landuse:"grass"}},{old:{golf:"sand_trap"},replace:{golf:"bunker",natural:"sand"}},{old:{golf:"tee_area"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"tee_box"},replace:{golf:"tee",landuse:"grass"}},{old:{golf:"teebox"},replace:{golf:"tee",landuse:"grass"}},{old:{highway:"abandoned"},replace:{"abandoned:highway":"*"}},{old:{highway:"bridleway",horse:"no"},replace:{highway:"path",horse:"no"}},{old:{highway:"cycleway",bicycle:"no"},replace:{highway:"path",bicycle:"no"}},{old:{highway:"cycleway",cycleway:"track"},replace:{highway:"cycleway"}},{old:{highway:"footway",foot:"no"},replace:{highway:"path",foot:"no"}},{old:{highway:"ford"},replace:{ford:"*"}},{old:{highway:"no"}},{old:{highway:"platform"},replace:{highway:"platform",public_transport:"platform"}},{old:{highway:"stile"},replace:{barrier:"stile"}},{old:{highway:"unsurfaced"},replace:{highway:"road",surface:"unpaved"}},{old:{internet_access:"public"},replace:{internet_access:"yes","internet_access:fee":"no"}},{old:{internet_access:"wifi"},replace:{internet_access:"wlan"}},{old:{"internet_access:fee":"0"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"Free"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:fee":"No"},replace:{"internet_access:fee":"no"}},{old:{"internet_access:name":"*"},replace:{"internet_access:ssid":"$1"}},{old:{"internet_access:type":"*"},replace:{internet_access:"$1"}},{old:{kerb:"dropped"},replace:{kerb:"lowered"}},{old:{kerb:"flat"},replace:{kerb:"flush"}},{old:{landuse:"basin"},replace:{natural:"water",water:"basin"}},{old:{landuse:"conservation"},replace:{boundary:"protected_area"}},{old:{landuse:"farm"},replace:{landuse:"farmland"}},{old:{landuse:"field"},replace:{landuse:"farmland"}},{old:{landuse:"garden"},replace:{leisure:"garden"}},{old:{landuse:"pond"},replace:{natural:"water",water:"pond"}},{old:{landuse:"port"},replace:{landuse:"industrial",industrial:"port"}},{old:{landuse:"reservoir"},replace:{natural:"water",water:"reservoir"}},{old:{landuse:"wood"},replace:{natural:"wood"}},{old:{lawyer:"notary"},replace:{office:"notary"}},{old:{leisure:"beach"},replace:{natural:"beach"}},{old:{leisure:"club"},replace:{club:"*"}},{old:{leisure:"golf_pin"},replace:{golf:"pin"}},{old:{leisure:"ice_rink",sport:"hockey"},replace:{leisure:"ice_rink",sport:"ice_hockey"}},{old:{leisure:"ice_rink",sport:"skating"},replace:{leisure:"ice_rink",sport:"ice_skating"}},{old:{leisure:"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:"weigh_bridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighbridge"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighing_scale"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"weighting_machine"},replace:{amenity:"weighbridge"}},{old:{man_made:"well"},replace:{man_made:"water_well"}},{old:{man_made:"winery"},replace:{craft:"winery"}},{old:{maxage:"*"},replace:{max_age:"$1"}},{old:{memorial:"plate"},replace:{memorial:"plaque"}},{old:{minage:"*"},replace:{min_age:"$1"}},{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:{railway:"station"},replace:{railway:"station",public_transport:"station"}},{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:{station:"light_rail"},replace:{station:"light_rail",light_rail:"yes"}},{old:{station:"monorail"},replace:{station:"monorail",monorail:"yes"}},{old:{station:"subway"},replace:{station:"subway",subway:"yes"}},{old:{station:"train"},replace:{station:"train",train:"yes"}},{old:{sustenance:"bar"},replace:{amenity:"bar"}},{old:{sustenance:"cafe"},replace:{amenity:"cafe"}},{old:{sustenance:"pub"},replace:{amenity:"pub"}},{old:{sustenance:"restaurant"},replace:{amenity:"restaurant"}},{old:{"theatre:type":"amphitheatre"},replace:{"theatre:type":"amphi"}},{old:{todo:"*"},replace:{fixme:"$1"}},{old:{TODO:"*"},replace:{fixme:"$1"}},{old:{"toilets:disposal":"longdrop"},replace:{"toilets:disposal":"pitlatrine"}},{old:{"toilets:disposal":"pit_latrine"},replace:{"toilets:disposal":"pitlatrine"}},{old:{tourism:"bed_and_breakfast"},replace:{tourism:"guest_house",guest_house:"bed_and_breakfast"}},{old:{"tower:type":"power"},replace:{power:"tower"}},{old:{"tower:type":"anchor"},replace:{line_attachment:"anchor"}},{old:{"tower:type":"suspension"},replace:{line_attachment:"suspension"}},{old:{"townhall:village":"yes"},replace:{amenity:"townhall","townhall:type":"village"}},{old:{type:"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:{wall_type:"noise_barrier"},replace:{wall:"noise_barrier"}},{old:{water:"intermittent"},replace:{natural:"water",intermittent:"yes"}},{old:{water:"riverbank"},replace:{natural:"water",water:"river"}},{old:{water:"salt"},replace:{natural:"water",salt:"yes"}},{old:{water:"tidal"},replace:{natural:"water",tidal:"yes"}},{old:{waterway:"aqueduct"},replace:{waterway:"canal",bridge:"aqueduct"}},{old:{waterway:"lock"},replace:{waterway:"canal",lock:"yes"}},{old:{waterway:"riverbank"},replace:{natural:"water",water:"river"}},{old:{wifi:"yes"},replace:{internet_access:"wlan"}},{old:{wifi:"free"},replace:{internet_access:"wlan","internet_access:fee":"no"}},{old:{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"}}];
24745
24746         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};
24747
24748         var dataLanguages = {af:{nativeName:"Afrikaans"},agq:{nativeName:"Aghem"},ak:{nativeName:"Akan"},am:{nativeName:"አማርኛ"},ar:{nativeName:"العربية"},as:{nativeName:"অসমীয়া"},asa:{nativeName:"Kipare"},ast:{nativeName:"asturianu"},az:{nativeName:"azərbaycan"},"az-Cyrl":{base:"az",script:"Cyrl"},"az-Latn":{base:"az",script:"Latn"},bas:{nativeName:"Ɓàsàa"},be:{nativeName:"беларуская"},bem:{nativeName:"Ichibemba"},bez:{nativeName:"Hibena"},bg:{nativeName:"български"},bm:{nativeName:"bamanakan"},bn:{nativeName:"বাংলা"},bo:{nativeName:"བོད་སྐད་"},br:{nativeName:"brezhoneg"},brx:{nativeName:"बड़ो"},bs:{nativeName:"bosanski"},"bs-Cyrl":{base:"bs",script:"Cyrl"},"bs-Latn":{base:"bs",script:"Latn"},ca:{nativeName:"català"},ccp:{nativeName:"𑄌𑄋𑄴𑄟𑄳𑄦"},ce:{nativeName:"нохчийн"},ceb:{nativeName:"Binisaya"},cgg:{nativeName:"Rukiga"},chr:{nativeName:"ᏣᎳᎩ"},ckb:{nativeName:"کوردیی ناوەندی"},cs:{nativeName:"čeština"},cu:{nativeName:"cu"},cy:{nativeName:"Cymraeg"},da:{nativeName:"dansk"},dav:{nativeName:"Kitaita"},de:{nativeName:"Deutsch"},dje:{nativeName:"Zarmaciine"},dsb:{nativeName:"dolnoserbšćina"},dua:{nativeName:"duálá"},dyo:{nativeName:"joola"},dz:{nativeName:"རྫོང་ཁ"},ebu:{nativeName:"Kĩembu"},ee:{nativeName:"Eʋegbe"},el:{nativeName:"Ελληνικά"},en:{nativeName:"English"},eo:{nativeName:"esperanto"},es:{nativeName:"español"},et:{nativeName:"eesti"},eu:{nativeName:"euskara"},ewo:{nativeName:"ewondo"},fa:{nativeName:"فارسی"},ff:{nativeName:"Pulaar"},"ff-Latn":{base:"ff",script:"Latn"},fi:{nativeName:"suomi"},fil:{nativeName:"Filipino"},fo:{nativeName:"føroyskt"},fr:{nativeName:"français"},fur:{nativeName:"furlan"},fy:{nativeName:"Frysk"},ga:{nativeName:"Gaeilge"},gd:{nativeName:"Gàidhlig"},gl:{nativeName:"galego"},gsw:{nativeName:"Schwiizertüütsch"},gu:{nativeName:"ગુજરાતી"},guz:{nativeName:"Ekegusii"},gv:{nativeName:"Gaelg"},ha:{nativeName:"Hausa"},haw:{nativeName:"ʻŌlelo Hawaiʻi"},he:{nativeName:"עברית"},hi:{nativeName:"हिन्दी"},hr:{nativeName:"hrvatski"},hsb:{nativeName:"hornjoserbšćina"},hu:{nativeName:"magyar"},hy:{nativeName:"հայերեն"},ia:{nativeName:"interlingua"},id:{nativeName:"Indonesia"},ig:{nativeName:"Asụsụ Igbo"},ii:{nativeName:"ꆈꌠꉙ"},is:{nativeName:"íslenska"},it:{nativeName:"italiano"},ja:{nativeName:"日本語"},"ja-Hira":{base:"ja",script:"Hira"},"ja-Latn":{base:"ja",script:"Latn"},jgo:{nativeName:"Ndaꞌa"},jmc:{nativeName:"Kimachame"},jv:{nativeName:"Jawa"},ka:{nativeName:"ქართული"},kab:{nativeName:"Taqbaylit"},kam:{nativeName:"Kikamba"},kde:{nativeName:"Chimakonde"},kea:{nativeName:"kabuverdianu"},khq:{nativeName:"Koyra ciini"},ki:{nativeName:"Gikuyu"},kk:{nativeName:"қазақ тілі"},kkj:{nativeName:"kakɔ"},kl:{nativeName:"kalaallisut"},kln:{nativeName:"Kalenjin"},km:{nativeName:"ខ្មែរ"},kn:{nativeName:"ಕನ್ನಡ"},ko:{nativeName:"한국어"},"ko-Latn":{base:"ko",script:"Latn"},kok:{nativeName:"कोंकणी"},ks:{nativeName:"کٲشُر"},ksb:{nativeName:"Kishambaa"},ksf:{nativeName:"rikpa"},ksh:{nativeName:"Kölsch"},ku:{nativeName:"kurdî"},kw:{nativeName:"kernewek"},ky:{nativeName:"кыргызча"},lag:{nativeName:"Kɨlaangi"},lb:{nativeName:"Lëtzebuergesch"},lg:{nativeName:"Luganda"},lkt:{nativeName:"Lakȟólʼiyapi"},ln:{nativeName:"lingála"},lo:{nativeName:"ລາວ"},lrc:{nativeName:"لۊری شومالی"},lt:{nativeName:"lietuvių"},lu:{nativeName:"Tshiluba"},luo:{nativeName:"Dholuo"},luy:{nativeName:"Luluhia"},lv:{nativeName:"latviešu"},mas:{nativeName:"Maa"},mer:{nativeName:"Kĩmĩrũ"},mfe:{nativeName:"kreol morisien"},mg:{nativeName:"Malagasy"},mgh:{nativeName:"Makua"},mgo:{nativeName:"metaʼ"},mi:{nativeName:"Māori"},mk:{nativeName:"македонски"},ml:{nativeName:"മലയാളം"},mn:{nativeName:"монгол"},mr:{nativeName:"मराठी"},ms:{nativeName:"Melayu"},mt:{nativeName:"Malti"},mua:{nativeName:"MUNDAŊ"},my:{nativeName:"မြန်မာ"},mzn:{nativeName:"مازرونی"},naq:{nativeName:"Khoekhoegowab"},nb:{nativeName:"norsk bokmål"},nd:{nativeName:"isiNdebele"},nds:{nativeName:"nds"},ne:{nativeName:"नेपाली"},nl:{nativeName:"Nederlands"},nmg:{nativeName:"nmg"},nn:{nativeName:"nynorsk"},nnh:{nativeName:"Shwóŋò ngiembɔɔn"},nus:{nativeName:"Thok Nath"},nyn:{nativeName:"Runyankore"},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"}};
24749
24750         var dataLocales = {af:{rtl:false,languageNames:{aa:"Afar",ab:"Abkasies",ace:"Atsjenees",ach:"Akoli",ada:"Adangme",ady:"Adyghe",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Suid-Altai",am:"Amharies",an:"Aragonees",anp:"Angika",ar:"Arabies","ar-001":"Moderne Standaardarabies",arc:"Aramees",arn:"Mapuche",arp:"Arapaho",as:"Assamees",asa:"Asu",ast:"Asturies",av:"Avaries",awa:"Awadhi",ay:"Aymara",az:"Azerbeidjans",ba:"Baskir",ban:"Balinees",bas:"Basaa",be:"Belarussies",bem:"Bemba",bez:"Bena",bg:"Bulgaars",bgn:"Wes-Balochi",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibettaans",br:"Bretons",brx:"Bodo",bs:"Bosnies",bug:"Buginees",byn:"Blin",ca:"Katalaans",ccp:"Tsjaakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chk:"Chuukees",chm:"Mari",cho:"Choctaw",chr:"Cherokees",chy:"Cheyennees",ckb:"Sorani",co:"Korsikaans",cop:"Kopties",crs:"Seselwa Franskreools",cs:"Tsjeggies",cu:"Kerkslawies",cv:"Chuvash",cy:"Wallies",da:"Deens",dak:"Dakotaans",dar:"Dakota",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenryk)","de-CH":"Duits (Switserland)",dgr:"Dogrib",dje:"Zarma",dsb:"Benedesorbies",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Antieke Egipties",eka:"Ekajuk",el:"Grieks",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Kanada)","en-GB":"Engels (VK)","en-US":"Engels (VSA)",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latyns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Meksiko)",et:"Estnies",eu:"Baskies",ewo:"Ewondo",fa:"Persies",ff:"Fulah",fi:"Fins",fil:"Filippyns",fj:"Fidjiaans",fo:"Faroëes",fon:"Fon",fr:"Frans","fr-CA":"Frans (Kanada)","fr-CH":"Frans (Switserland)",fur:"Friuliaans",fy:"Fries",ga:"Iers",gaa:"Gaa",gag:"Gagauz",gan:"Gan-Sjinees",gd:"Skotse Gallies",gez:"Geez",gil:"Gilbertees",gl:"Galisies",gn:"Guarani",gor:"Gorontalo",got:"Goties",grc:"Antieke Grieks",gsw:"Switserse Duits",gu:"Goedjarati",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Hakka-Sjinees",haw:"Hawais",he:"Hebreeus",hi:"Hindi",hil:"Hiligaynon",hit:"Hetities",hmn:"Hmong",hr:"Kroaties",hsb:"Oppersorbies",hsn:"Xiang-Sjinees",ht:"Haïtiaans",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Ibanees",ibb:"Ibibio",id:"Indonesies",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Yslands",it:"Italiaans",iu:"Inuïties",ja:"Japannees",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Javaans",ka:"Georgies",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardiaans",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongolees",kha:"Khasi",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazaks",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permyaks",kok:"Konkani",kpe:"Kpellees",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelies",kru:"Kurukh",ks:"Kasjmirs",ksb:"Shambala",ksf:"Bafia",ksh:"Keuls",ku:"Koerdies",kum:"Kumyk",kv:"Komi",kw:"Kornies",ky:"Kirgisies",la:"Latyn",lad:"Ladino",lag:"Langi",lb:"Luxemburgs",lez:"Lezghies",lg:"Ganda",li:"Limburgs",lkt:"Lakota",ln:"Lingaals",lo:"Lao",loz:"Lozi",lrc:"Noord-Luri",lt:"Litaus",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Letties",mad:"Madurees",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisjen",mg:"Malgassies",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Micmac",min:"Minangkabaus",mk:"Masedonies",ml:"Malabaars",mn:"Mongools",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Kreek",mwl:"Mirandees",my:"Birmaans",myv:"Erzya",mzn:"Masanderani",na:"Nauru",nan:"Min Nan-Sjinees",nap:"Neapolitaans",naq:"Nama",nb:"Boeknoors",nd:"Noord-Ndebele",nds:"Nederduits","nds-NL":"Nedersaksies",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",nl:"Nederlands","nl-BE":"Vlaams",nmg:"Kwasio",nn:"Nuwe Noors",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",nqo:"N’Ko",nr:"Suid-Ndebele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Oksitaans",om:"Oromo",or:"Oriya",os:"Osseties",pa:"Pandjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauaans",pcm:"Nigeriese Pidgin",phn:"Fenisies",pl:"Pools",prg:"Pruisies",ps:"Pasjto",pt:"Portugees","pt-BR":"Portugees (Brasilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",rap:"Rapanui",rar:"Rarotongaans",rm:"Reto-Romaans",rn:"Rundi",ro:"Roemeens","ro-MD":"Roemeens (Moldowa)",rof:"Rombo",root:"Root",ru:"Russies",rup:"Aromanies",rw:"Rwandees",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawees",sah:"Sakhaans",saq:"Samburu",sat:"Santalies",sba:"Ngambay",sbp:"Sangu",sc:"Sardinies",scn:"Sisiliaans",sco:"Skots",sd:"Sindhi",sdh:"Suid-Koerdies",se:"Noord-Sami",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"Serwo-Kroaties",shi:"Tachelhit",shn:"Shan",si:"Sinhala",sk:"Slowaaks",sl:"Sloweens",sm:"Samoaans",sma:"Suid-Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalies",sq:"Albanees",sr:"Serwies",srn:"Sranan Tongo",ss:"Swazi",ssy:"Saho",st:"Suid-Sotho",su:"Sundanees",suk:"Sukuma",sv:"Sweeds",sw:"Swahili","sw-CD":"Swahili (Demokratiese Republiek van die Kongo)",swb:"Comoraans",syr:"Siries",ta:"Tamil",te:"Teloegoe",tem:"Timne",teo:"Teso",tet:"Tetoem",tg:"Tadjiks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmeens",tlh:"Klingon",tn:"Tswana",to:"Tongaans",tpi:"Tok Pisin",tr:"Turks",trv:"Taroko",ts:"Tsonga",tt:"Tataars",tum:"Toemboeka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahities",tyv:"Tuvinees",tzm:"Sentraal-Atlas-Tamazight",udm:"Udmurt",ug:"Uighur",uk:"Oekraïens",umb:"Umbundu",ur:"Oerdoe",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vi:"Viëtnamees",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu-Sjinees",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Jiddisj",yo:"Yoruba",yue:"Kantonees",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarynse Chinees (Vereenvoudigd)","zh-Hant":"Mandarynse Chinees (Tradisioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirillies",Latn:"Latyn",Arab:"Arabies",Guru:"Gurmukhi",Hans:"Vereenvoudig",Hant:"Tradisioneel"}},ar:{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},"ar-AA":{rtl:true,languageNames:{aa:"الأفارية",ab:"الأبخازية",ace:"الأتشينيزية",ach:"الأكولية",ada:"الأدانجمية",ady:"الأديغة",ae:"الأفستية",af:"الأفريقانية",afh:"الأفريهيلية",agq:"الأغم",ain:"الآينوية",ak:"الأكانية",akk:"الأكادية",ale:"الأليوتية",alt:"الألطائية الجنوبية",am:"الأمهرية",an:"الأراغونية",ang:"الإنجليزية القديمة",anp:"الأنجيكا",ar:"العربية","ar-001":"العربية الفصحى الحديثة",arc:"الآرامية",arn:"المابودونغونية",arp:"الأراباهو",ars:"اللهجة النجدية",arw:"الأراواكية",as:"الأسامية",asa:"الآسو",ast:"الأسترية",av:"الأوارية",awa:"الأوادية",ay:"الأيمارا",az:"الأذربيجانية",ba:"الباشكيرية",bal:"البلوشية",ban:"البالينية",bas:"الباسا",bax:"بامن",bbj:"لغة الغومالا",be:"البيلاروسية",bej:"البيجا",bem:"البيمبا",bez:"بينا",bfd:"لغة البافوت",bg:"البلغارية",bgn:"البلوشية الغربية",bho:"البهوجبورية",bi:"البيسلامية",bik:"البيكولية",bin:"البينية",bkm:"لغة الكوم",bla:"السيكسيكية",bm:"البامبارا",bn:"البنغالية",bo:"التبتية",br:"البريتونية",bra:"البراجية",brx:"البودو",bs:"البوسنية",bss:"أكوس",bua:"البرياتية",bug:"البجينيزية",bum:"لغة البولو",byn:"البلينية",byv:"لغة الميدومبا",ca:"الكتالانية",cad:"الكادو",car:"الكاريبية",cay:"الكايوجية",cch:"الأتسام",ccp:"تشاكما",ce:"الشيشانية",ceb:"السيبيوانية",cgg:"تشيغا",ch:"التشامورو",chb:"التشيبشا",chg:"التشاجاتاي",chk:"التشكيزية",chm:"الماري",chn:"الشينوك جارجون",cho:"الشوكتو",chp:"الشيباوايان",chr:"الشيروكي",chy:"الشايان",ckb:"السورانية الكردية",co:"الكورسيكية",cop:"القبطية",cr:"الكرى",crh:"لغة تتار القرم",crs:"الفرنسية الكريولية السيشيلية",cs:"التشيكية",csb:"الكاشبايان",cu:"سلافية كنسية",cv:"التشوفاشي",cy:"الويلزية",da:"الدانمركية",dak:"الداكوتا",dar:"الدارجوا",dav:"تيتا",de:"الألمانية","de-AT":"الألمانية النمساوية","de-CH":"الألمانية العليا السويسرية",del:"الديلوير",den:"السلافية",dgr:"الدوجريب",din:"الدنكا",dje:"الزارمية",doi:"الدوجرية",dsb:"صوربيا السفلى",dua:"الديولا",dum:"الهولندية الوسطى",dv:"المالديفية",dyo:"جولا فونيا",dyu:"الدايلا",dz:"الزونخاية",dzg:"القرعانية",ebu:"إمبو",ee:"الإيوي",efi:"الإفيك",egy:"المصرية القديمة",eka:"الإكاجك",el:"اليونانية",elx:"الإمايت",en:"الإنجليزية","en-AU":"الإنجليزية الأسترالية","en-CA":"الإنجليزية الكندية","en-GB":"الإنجليزية البريطانية","en-US":"الإنجليزية الأمريكية",enm:"الإنجليزية الوسطى",eo:"الإسبرانتو",es:"الإسبانية","es-419":"الإسبانية أمريكا اللاتينية","es-ES":"الإسبانية الأوروبية","es-MX":"الإسبانية المكسيكية",et:"الإستونية",eu:"الباسكية",ewo:"الإيوندو",fa:"الفارسية",fan:"الفانج",fat:"الفانتي",ff:"الفولانية",fi:"الفنلندية",fil:"الفلبينية",fj:"الفيجية",fo:"الفاروية",fon:"الفون",fr:"الفرنسية","fr-CA":"الفرنسية الكندية","fr-CH":"الفرنسية السويسرية",frc:"الفرنسية الكاجونية",frm:"الفرنسية الوسطى",fro:"الفرنسية القديمة",frr:"الفريزينية الشمالية",frs:"الفريزينية الشرقية",fur:"الفريلايان",fy:"الفريزيان",ga:"الأيرلندية",gaa:"الجا",gag:"الغاغوز",gan:"الغان الصينية",gay:"الجايو",gba:"الجبيا",gd:"الغيلية الأسكتلندية",gez:"الجعزية",gil:"لغة أهل جبل طارق",gl:"الجاليكية",gmh:"الألمانية العليا الوسطى",gn:"الغوارانية",goh:"الألمانية العليا القديمة",gon:"الجندي",gor:"الجورونتالو",got:"القوطية",grb:"الجريبو",grc:"اليونانية القديمة",gsw:"الألمانية السويسرية",gu:"الغوجاراتية",guz:"الغيزية",gv:"المنكية",gwi:"غوتشن",ha:"الهوسا",hai:"الهيدا",hak:"الهاكا الصينية",haw:"لغة هاواي",he:"العبرية",hi:"الهندية",hil:"الهيليجينون",hit:"الحثية",hmn:"الهمونجية",ho:"الهيري موتو",hr:"الكرواتية",hsb:"الصوربية العليا",hsn:"شيانغ الصينية",ht:"الكريولية الهايتية",hu:"الهنغارية",hup:"الهبا",hy:"الأرمنية",hz:"الهيريرو",ia:"اللّغة الوسيطة",iba:"الإيبان",ibb:"الإيبيبيو",id:"الإندونيسية",ie:"الإنترلينج",ig:"الإيجبو",ii:"السيتشيون يي",ik:"الإينبياك",ilo:"الإيلوكو",inh:"الإنجوشية",io:"الإيدو",is:"الأيسلندية",it:"الإيطالية",iu:"الإينكتيتت",ja:"اليابانية",jbo:"اللوجبان",jgo:"نغومبا",jmc:"الماتشامية",jpr:"الفارسية اليهودية",jrb:"العربية اليهودية",jv:"الجاوية",ka:"الجورجية",kaa:"الكارا-كالباك",kab:"القبيلية",kac:"الكاتشين",kaj:"الجو",kam:"الكامبا",kaw:"الكوي",kbd:"الكاباردايان",kbl:"كانمبو",kcg:"التايابية",kde:"ماكونده",kea:"كابوفيرديانو",kfo:"الكورو",kg:"الكونغو",kha:"الكازية",kho:"الخوتانيز",khq:"كويرا تشيني",ki:"الكيكيو",kj:"الكيونياما",kk:"الكازاخستانية",kkj:"لغة الكاكو",kl:"الكالاليست",kln:"كالينجين",km:"الخميرية",kmb:"الكيمبندو",kn:"الكانادا",ko:"الكورية",koi:"كومي-بيرماياك",kok:"الكونكانية",kos:"الكوسراين",kpe:"الكبيل",kr:"الكانوري",krc:"الكاراتشاي-بالكار",krl:"الكاريلية",kru:"الكوروخ",ks:"الكشميرية",ksb:"شامبالا",ksf:"لغة البافيا",ksh:"لغة الكولونيان",ku:"الكردية",kum:"القموقية",kut:"الكتيناي",kv:"الكومي",kw:"الكورنية",ky:"القيرغيزية",la:"اللاتينية",lad:"اللادينو",lag:"لانجي",lah:"اللاهندا",lam:"اللامبا",lb:"اللكسمبورغية",lez:"الليزجية",lg:"الغاندا",li:"الليمبورغية",lkt:"لاكوتا",ln:"اللينجالا",lo:"اللاوية",lol:"منغولى",lou:"الكريولية اللويزيانية",loz:"اللوزي",lrc:"اللرية الشمالية",lt:"الليتوانية",lu:"اللوبا كاتانغا",lua:"اللبا-لؤلؤ",lui:"اللوسينو",lun:"اللوندا",luo:"اللو",lus:"الميزو",luy:"لغة اللويا",lv:"اللاتفية",mad:"المادريز",mag:"الماجا",mai:"المايثيلي",mak:"الماكاسار",man:"الماندينغ",mas:"الماساي",mde:"مابا",mdf:"الموكشا",mdr:"الماندار",men:"الميند",mer:"الميرو",mfe:"المورسيانية",mg:"الملغاشي",mga:"الأيرلندية الوسطى",mgh:"ماخاوا-ميتو",mgo:"ميتا",mh:"المارشالية",mi:"الماورية",mic:"الميكماكيونية",min:"المينانجكاباو",mk:"المقدونية",ml:"المالايالامية",mn:"المنغولية",mnc:"المانشو",mni:"المانيبورية",moh:"الموهوك",mos:"الموسي",mr:"الماراثية",ms:"الماليزية",mt:"المالطية",mua:"مندنج",mus:"الكريك",mwl:"الميرانديز",mwr:"الماروارية",my:"البورمية",myv:"الأرزية",mzn:"المازندرانية",na:"النورو",nan:"مين-نان الصينية",nap:"النابولية",naq:"لغة الناما",nb:"النرويجية بوكمال",nd:"النديبيل الشمالية",nds:"الألمانية السفلى","nds-NL":"السكسونية السفلى",ne:"النيبالية","new":"النوارية",ng:"الندونجا",nia:"النياس",niu:"النيوي",nl:"الهولندية","nl-BE":"الفلمنكية",nmg:"كواسيو",nn:"النرويجية نينورسك",nnh:"لغة النجيمبون",no:"النرويجية",nog:"النوجاي",non:"النورس القديم",nqo:"أنكو",nr:"النديبيل الجنوبي",nso:"السوتو الشمالية",nus:"النوير",nv:"النافاجو",nwc:"النوارية التقليدية",ny:"النيانجا",nym:"النيامويزي",nyn:"النيانكول",nyo:"النيورو",nzi:"النزيما",oc:"الأوكسيتانية",oj:"الأوجيبوا",om:"الأورومية",or:"الأورية",os:"الأوسيتيك",osa:"الأوساج",ota:"التركية العثمانية",pa:"البنجابية",pag:"البانجاسينان",pal:"البهلوية",pam:"البامبانجا",pap:"البابيامينتو",pau:"البالوان",pcm:"البدجنية النيجيرية",peo:"الفارسية القديمة",phn:"الفينيقية",pi:"البالية",pl:"البولندية",pon:"البوهنبيايان",prg:"البروسياوية",pro:"البروفانسية القديمة",ps:"البشتو",pt:"البرتغالية","pt-BR":"البرتغالية البرازيلية","pt-PT":"البرتغالية الأوروبية",qu:"الكويتشوا",quc:"الكيشية",raj:"الراجاسثانية",rap:"الراباني",rar:"الراروتونجاني",rm:"الرومانشية",rn:"الرندي",ro:"الرومانية","ro-MD":"المولدوفية",rof:"الرومبو",rom:"الغجرية",root:"الجذر",ru:"الروسية",rup:"الأرومانيان",rw:"الكينيارواندا",rwk:"الروا",sa:"السنسكريتية",sad:"السانداوي",sah:"الساخيّة",sam:"الآرامية السامرية",saq:"سامبورو",sas:"الساساك",sat:"السانتالية",sba:"نامبي",sbp:"سانغو",sc:"السردينية",scn:"الصقلية",sco:"الأسكتلندية",sd:"السندية",sdh:"الكردية الجنوبية",se:"سامي الشمالية",see:"السنيكا",seh:"سينا",sel:"السيلكب",ses:"كويرابورو سيني",sg:"السانجو",sga:"الأيرلندية القديمة",sh:"صربية-كرواتية",shi:"تشلحيت",shn:"الشان",shu:"العربية التشادية",si:"السنهالية",sid:"السيدامو",sk:"السلوفاكية",sl:"السلوفانية",sm:"الساموائية",sma:"السامي الجنوبي",smj:"اللول سامي",smn:"الإيناري سامي",sms:"السكولت سامي",sn:"الشونا",snk:"السونينك",so:"الصومالية",sog:"السوجدين",sq:"الألبانية",sr:"الصربية",srn:"السرانان تونجو",srr:"السرر",ss:"السواتي",ssy:"لغة الساهو",st:"السوتو الجنوبية",su:"السوندانية",suk:"السوكوما",sus:"السوسو",sux:"السومارية",sv:"السويدية",sw:"السواحلية","sw-CD":"الكونغو السواحلية",swb:"القمرية",syc:"سريانية تقليدية",syr:"السريانية",ta:"التاميلية",te:"التيلوغوية",tem:"التيمن",teo:"تيسو",ter:"التيرينو",tet:"التيتم",tg:"الطاجيكية",th:"التايلاندية",ti:"التغرينية",tig:"التيغرية",tiv:"التيف",tk:"التركمانية",tkl:"التوكيلاو",tl:"التاغالوغية",tlh:"الكلينجون",tli:"التلينغيتية",tmh:"التاماشيك",tn:"التسوانية",to:"التونغية",tog:"تونجا - نياسا",tpi:"التوك بيسين",tr:"التركية",trv:"لغة التاروكو",ts:"السونجا",tsi:"التسيمشيان",tt:"التترية",tum:"التامبوكا",tvl:"التوفالو",tw:"التوي",twq:"تاساواق",ty:"التاهيتية",tyv:"التوفية",tzm:"الأمازيغية وسط الأطلس",udm:"الأدمرت",ug:"الأويغورية",uga:"اليجاريتيك",uk:"الأوكرانية",umb:"الأمبندو",ur:"الأوردية",uz:"الأوزبكية",vai:"الفاي",ve:"الفيندا",vi:"الفيتنامية",vo:"لغة الفولابوك",vot:"الفوتيك",vun:"الفونجو",wa:"الولونية",wae:"الوالسر",wal:"الولاياتا",war:"الواراي",was:"الواشو",wbp:"وارلبيري",wo:"الولوفية",wuu:"الوو الصينية",xal:"الكالميك",xh:"الخوسا",xog:"السوغا",yao:"الياو",yap:"اليابيز",yav:"يانجبن",ybb:"يمبا",yi:"اليديشية",yo:"اليوروبا",yue:"الكَنْتُونية",za:"الزهيونج",zap:"الزابوتيك",zbl:"رموز المعايير الأساسية",zen:"الزيناجا",zgh:"التمازيغية المغربية القياسية",zh:"الصينية","zh-Hans":"الصينية (المبسطة)","zh-Hant":"الصينية (التقليدية)",zu:"الزولو",zun:"الزونية",zza:"زازا"},scriptNames:{Cyrl:"السيريلية",Latn:"اللاتينية",Arab:"العربية",Guru:"الجرمخي",Tfng:"التيفيناغ",Vaii:"الفاي",Hans:"المبسطة",Hant:"التقليدية"}},ast:{rtl:false,languageNames:{aa:"afar",ab:"abkhazianu",ace:"achinés",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestanín",aeb:"árabe de Túnez",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadianu",akz:"alabama",ale:"aleut",aln:"gheg d’Albania",alt:"altai del sur",am:"amháricu",an:"aragonés",ang:"inglés antiguu",anp:"angika",ar:"árabe","ar-001":"árabe estándar modernu",arc:"araméu",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"árabe d’Arxelia",arw:"arawak",ary:"árabe de Marruecos",arz:"árabe d’Exiptu",as:"asamés",asa:"asu",ase:"llingua de signos americana",ast:"asturianu",av:"aváricu",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaixanu",ba:"bashkir",bal:"baluchi",ban:"balinés",bar:"bávaru",bas:"basaa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorrusu",bej:"beja",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgaru",bgn:"balochi occidental",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalín",bo:"tibetanu",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretón",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniu",bss:"akoose",bua:"buriat",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ce:"chechenu",ceb:"cebuanu",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukés",chm:"mari",chn:"xíriga chinook",cho:"choctaw",chp:"chipewyanu",chr:"cheroqui",chy:"cheyenne",ckb:"kurdu central",co:"corsu",cop:"cópticu",cps:"capiznon",cr:"cree",crh:"turcu de Crimea",crs:"francés criollu seselwa",cs:"checu",csb:"kashubianu",cu:"eslávicu eclesiásticu",cv:"chuvash",cy:"galés",da:"danés",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán d’Austria","de-CH":"altualemán de Suiza",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baxu sorbiu",dtp:"dusun central",dua:"duala",dum:"neerlandés mediu",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embú",ee:"ewe",efi:"efik",egl:"emilianu",egy:"exipciu antiguu",eka:"ekajuk",el:"griegu",elx:"elamita",en:"inglés","en-AU":"inglés d’Australia","en-CA":"inglés de Canadá","en-GB":"inglés de Gran Bretaña","en-US":"inglés d’Estaos Xuníos",enm:"inglés mediu",eo:"esperanto",es:"español","es-419":"español d’América Llatina","es-ES":"español européu","es-MX":"español de Méxicu",esu:"yupik central",et:"estoniu",eu:"vascu",ewo:"ewondo",ext:"estremeñu",fa:"persa",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandés",fil:"filipín",fit:"finlandés de Tornedalen",fj:"fixanu",fo:"feroés",fr:"francés","fr-CA":"francés de Canadá","fr-CH":"francés de Suiza",frc:"francés cajun",frm:"francés mediu",fro:"francés antiguu",frp:"arpitanu",frr:"frisón del norte",frs:"frisón oriental",fur:"friulianu",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gan:"chinu gan",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrianu",gd:"gaélicu escocés",gez:"geez",gil:"gilbertés",gl:"gallegu",glk:"gilaki",gmh:"altualemán mediu",gn:"guaraní",goh:"altualemán antiguu",gom:"goan konkani",gon:"gondi",gor:"gorontalo",got:"góticu",grb:"grebo",grc:"griegu antiguu",gsw:"alemán de Suiza",gu:"guyaratí",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manés",gwi:"gwichʼin",ha:"ḥausa",hai:"haida",hak:"chinu hakka",haw:"hawaianu",he:"hebréu",hi:"hindi",hif:"hindi de Fiji",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"altu sorbiu",hsn:"chinu xiang",ht:"haitianu",hu:"húngaru",hup:"hupa",hy:"armeniu",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiu",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandés",it:"italianu",iu:"inuktitut",izh:"ingrianu",ja:"xaponés",jam:"inglés criollu xamaicanu",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"xudeo-persa",jrb:"xudeo-árabe",jut:"jutlandés",jv:"xavanés",ka:"xeorxanu",kaa:"kara-kalpak",kab:"kabileñu",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardianu",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"cabuverdianu",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanés",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazaquistanín",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"ḥemer",kmb:"kimbundu",kn:"canarés",ko:"coreanu",koi:"komi-permyak",kok:"konkani",kos:"kosraeanu",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelianu",kru:"kurukh",ks:"cachemirés",ksb:"shambala",ksf:"bafia",ksh:"colonianu",ku:"curdu",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnicu",ky:"kirguistanín",la:"llatín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezghianu",lfn:"lingua franca nova",lg:"ganda",li:"limburgués",lij:"ligurianu",liv:"livonianu",lkt:"lakota",lmo:"lombardu",ln:"lingala",lo:"laosianu",lol:"mongo",loz:"lozi",lrc:"luri del norte",lt:"lituanu",ltg:"latgalianu",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",lzh:"chinu lliterariu",lzz:"laz",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"írlandés mediu",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedoniu",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidental",ms:"malayu",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",mwv:"mentawai",my:"birmanu",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chinu min nan",nap:"napolitanu",naq:"nama",nb:"noruegu Bokmål",nd:"ndebele del norte",nds:"baxu alemán","nds-NL":"baxu saxón",ne:"nepalés","new":"newari",ng:"ndonga",nia:"nias",niu:"niueanu",njo:"ao naga",nl:"neerlandés","nl-BE":"flamencu",nmg:"kwasio",nn:"noruegu Nynorsk",nnh:"ngiemboon",no:"noruegu",nog:"nogai",non:"noruegu antiguu",nov:"novial",nqo:"n’ko",nr:"ndebele del sur",nso:"sotho del norte",nus:"nuer",nv:"navajo",nwc:"newari clásicu",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanu",oj:"ojibwa",om:"oromo",or:"oriya",os:"oséticu",osa:"osage",ota:"turcu otomanu",pa:"punyabí",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanu",pcd:"pícaru",pcm:"nixerianu simplificáu",pdc:"alemán de Pennsylvania",pdt:"plautdietsch",peo:"persa antiguu",pfl:"alemán palatinu",phn:"feniciu",pi:"pali",pl:"polacu",pms:"piamontés",pnt:"pónticu",pon:"pohnpeianu",prg:"prusianu",pro:"provenzal antiguu",ps:"pashtu",pt:"portugués","pt-BR":"portugués del Brasil","pt-PT":"portugués européu",qu:"quechua",quc:"kʼicheʼ",qug:"quichua del altiplanu de Chimborazo",raj:"rajasthanín",rap:"rapanui",rar:"rarotonganu",rgn:"romañol",rif:"rifianu",rm:"romanche",rn:"rundi",ro:"rumanu","ro-MD":"moldavu",rof:"rombo",rom:"romaní",rtm:"rotumanu",ru:"rusu",rue:"rusyn",rug:"roviana",rup:"aromanianu",rw:"kinyarwanda",rwk:"rwa",sa:"sánscritu",sad:"sandavés",sah:"sakha",sam:"araméu samaritanu",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardu",scn:"sicilianu",sco:"scots",sd:"sindhi",sdc:"sardu sassarés",sdh:"kurdu del sur",se:"sami del norte",see:"séneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguu",sgs:"samogitianu",sh:"serbo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadianu",si:"cingalés",sid:"sidamo",sk:"eslovacu",sl:"eslovenu",sli:"baxu silesianu",sly:"selayarés",sm:"samoanu",sma:"sami del sur",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalín",sog:"sogdianu",sq:"albanu",sr:"serbiu",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sur",stq:"frisón de Saterland",su:"sondanés",suk:"sukuma",sus:"susu",sux:"sumeriu",sv:"suecu",sw:"suaḥili","sw-CD":"suaḥili del Congu",swb:"comorianu",syc:"siriacu clásicu",syr:"siriacu",szl:"silesianu",ta:"tamil",tcy:"tulu",te:"telugu",tem:"timne",teo:"teso",ter:"terena",tet:"tetum",tg:"taxiquistanín",th:"tailandés",ti:"tigrinya",tig:"tigre",tk:"turcomanu",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talixín",tmh:"tamashek",tn:"tswana",to:"tonganu",tog:"tonga nyasa",tpi:"tok pisin",tr:"turcu",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakoniu",tsi:"tsimshian",tt:"tártaru",ttt:"tati musulmán",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitianu",tyv:"tuvinianu",tzm:"tamazight del Atles central",udm:"udmurt",ug:"uigur",uga:"ugaríticu",uk:"ucraín",umb:"umbundu",ur:"urdu",uz:"uzbequistanín",ve:"venda",vec:"venecianu",vep:"vepsiu",vi:"vietnamín",vls:"flamencu occidental",vmf:"franconianu del Main",vo:"volapük",vot:"vóticu",vro:"voro",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chinu wu",xal:"calmuco",xh:"xhosa",xmf:"mingrelianu",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonés",za:"zhuang",zap:"zapoteca",zbl:"simbólicu Bliss",zea:"zeelandés",zen:"zenaga",zgh:"tamazight estándar de Marruecos",zh:"chinu","zh-Hans":"chinu (simplificáu)","zh-Hant":"chinu (tradicional)",zu:"zulú",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílicu",Latn:"llatín",Arab:"árabe",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificáu",Hant:"tradicional"}},be:{rtl:false,languageNames:{aa:"афарская",ab:"абхазская",ace:"ачэх",ada:"адангмэ",ady:"адыгейская",af:"афрыкаанс",agq:"агем",ain:"айнская",ak:"акан",akk:"акадская",ale:"алеуцкая",alt:"паўднёваалтайская",am:"амхарская",an:"арагонская",ang:"стараанглійская",anp:"ангіка",ar:"арабская","ar-001":"сучасная стандартная арабская",arc:"арамейская",arn:"мапудунгун",arp:"арапаха",as:"асамская",asa:"асу",ast:"астурыйская",av:"аварская",awa:"авадхі",ay:"аймара",az:"азербайджанская",ba:"башкірская",ban:"балійская",bas:"басаа",be:"беларуская",bem:"бемба",bez:"бена",bg:"балгарская",bgn:"заходняя белуджская",bho:"бхаджпуры",bi:"біслама",bin:"эда",bla:"блэкфут",bm:"бамбара",bn:"бенгальская",bo:"тыбецкая",br:"брэтонская",brx:"бода",bs:"баснійская",bua:"бурацкая",bug:"бугіс",byn:"білен",ca:"каталанская",ccp:"чакма",ce:"чачэнская",ceb:"себуана",cgg:"чыга",ch:"чамора",chb:"чыбча",chk:"чуук",chm:"мары",cho:"чокта",chr:"чэрокі",chy:"шэйен",ckb:"цэнтральнакурдская",co:"карсіканская",cop:"копцкая",crs:"сэсэльва",cs:"чэшская",cu:"царкоўнаславянская",cv:"чувашская",cy:"валійская",da:"дацкая",dak:"дакота",dar:"даргінская",dav:"таіта",de:"нямецкая","de-AT":"аўстрыйская нямецкая","de-CH":"швейцарская літаратурная нямецкая",dgr:"догрыб",dje:"зарма",dsb:"ніжнялужыцкая",dua:"дуала",dv:"мальдыўская",dyo:"джола-фоньі",dz:"дзонг-кэ",dzg:"дазага",ebu:"эмбу",ee:"эве",efi:"эфік",egy:"старажытнаегіпецкая",eka:"экаджук",el:"грэчаская",en:"англійская","en-AU":"аўстралійская англійская","en-CA":"канадская англійская","en-GB":"брытанская англійская","en-US":"амерыканская англійская",eo:"эсперанта",es:"іспанская","es-419":"лацінаамерыканская іспанская","es-ES":"еўрапейская іспанская","es-MX":"мексіканская іспанская",et:"эстонская",eu:"баскская",ewo:"эвонда",fa:"фарсі",ff:"фула",fi:"фінская",fil:"філіпінская",fj:"фіджыйская",fo:"фарэрская",fon:"фон",fr:"французская","fr-CA":"канадская французская","fr-CH":"швейцарская французская",fro:"старафранцузская",fur:"фрыульская",fy:"заходняя фрызская",ga:"ірландская",gaa:"га",gag:"гагаузская",gd:"шатландская гэльская",gez:"геэз",gil:"кірыбаці",gl:"галісійская",gn:"гуарані",gor:"гарантала",grc:"старажытнагрэчаская",gsw:"швейцарская нямецкая",gu:"гуджараці",guz:"гусіі",gv:"мэнская",gwi:"гуіч’ін",ha:"хауса",haw:"гавайская",he:"іўрыт",hi:"хіндзі",hil:"хілігайнон",hmn:"хмонг",hr:"харвацкая",hsb:"верхнялужыцкая",ht:"гаіцянская крэольская",hu:"венгерская",hup:"хупа",hy:"армянская",hz:"герэра",ia:"інтэрлінгва",iba:"ібан",ibb:"ібібія",id:"інданезійская",ie:"інтэрлінгвэ",ig:"ігба",ii:"сычуаньская йі",ilo:"ілакана",inh:"інгушская",io:"іда",is:"ісландская",it:"італьянская",iu:"інуктытут",ja:"японская",jbo:"ложбан",jgo:"нгомба",jmc:"мачамбэ",jv:"яванская",ka:"грузінская",kab:"кабільская",kac:"качынская",kaj:"дджу",kam:"камба",kbd:"кабардзінская",kcg:"т’яп",kde:"макондэ",kea:"кабувердыяну",kfo:"кора",kha:"кхасі",khq:"койра чыіні",ki:"кікуйю",kj:"куаньяма",kk:"казахская",kkj:"како",kl:"грэнландская",kln:"календжын",km:"кхмерская",kmb:"кімбунду",kn:"канада",ko:"карэйская",koi:"комі-пярмяцкая",kok:"канкані",kpe:"кпеле",kr:"кануры",krc:"карачай-балкарская",krl:"карэльская",kru:"курух",ks:"кашмірская",ksb:"шамбала",ksf:"бафія",ksh:"кёльнская",ku:"курдская",kum:"кумыцкая",kv:"комі",kw:"корнская",ky:"кіргізская",la:"лацінская",lad:"ладына",lag:"лангі",lb:"люксембургская",lez:"лезгінская",lg:"ганда",li:"лімбургская",lkt:"лакота",ln:"лінгала",lo:"лаоская",lol:"монга",loz:"лозі",lrc:"паўночная луры",lt:"літоўская",lu:"луба-катанга",lua:"луба-касаі",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латышская",mad:"мадурская",mag:"магахі",mai:"майтхілі",mak:"макасар",man:"мандынг",mas:"маасай",mdf:"макшанская",men:"мендэ",mer:"меру",mfe:"марысьен",mg:"малагасійская",mgh:"макуўа-меета",mgo:"мета",mh:"маршальская",mi:"маары",mic:"мікмак",min:"мінангкабау",mk:"македонская",ml:"малаялам",mn:"мангольская",mni:"мейтэй",moh:"мохак",mos:"мосі",mr:"маратхі",ms:"малайская",mt:"мальтыйская",mua:"мунданг",mus:"мускогі",mwl:"мірандыйская",my:"бірманская",myv:"эрзянская",mzn:"мазандэранская",na:"науру",nap:"неапалітанская",naq:"нама",nb:"нарвежская (букмол)",nd:"паўночная ндэбеле",nds:"ніжненямецкая","nds-NL":"ніжнесаксонская",ne:"непальская","new":"неўары",ng:"ндонга",nia:"ніас",niu:"ніўэ",nl:"нідэрландская","nl-BE":"фламандская",nmg:"нгумба",nn:"нарвежская (нюношк)",nnh:"нг’ембон",no:"нарвежская",nog:"нагайская",non:"старанарвежская",nqo:"нко",nr:"паўднёвая ндэбеле",nso:"паўночная сота",nus:"нуэр",nv:"наваха",ny:"ньянджа",nyn:"ньянколе",oc:"аксітанская",oj:"аджыбва",om:"арома",or:"орыя",os:"асецінская",pa:"панджабі",pag:"пангасінан",pam:"пампанга",pap:"пап’яменту",pau:"палау",pcm:"нігерыйскі піджын",peo:"стараперсідская",phn:"фінікійская",pl:"польская",prg:"пруская",pro:"стараправансальская",ps:"пушту",pt:"партугальская","pt-BR":"бразільская партугальская","pt-PT":"еўрапейская партугальская",qu:"кечуа",quc:"кічэ",raj:"раджастханская",rap:"рапануі",rar:"раратонг",rm:"рэтараманская",rn:"рундзі",ro:"румынская","ro-MD":"малдаўская",rof:"ромба",root:"корань",ru:"руская",rup:"арумунская",rw:"руанда",rwk:"руа",sa:"санскрыт",sad:"сандаўэ",sah:"якуцкая",saq:"самбуру",sat:"санталі",sba:"нгамбай",sbp:"сангу",sc:"сардзінская",scn:"сіцылійская",sco:"шатландская",sd:"сіндхі",sdh:"паўднёвакурдская",se:"паўночнасаамская",seh:"сена",ses:"кайрабора сэні",sg:"санга",sga:"стараірландская",sh:"сербскахарвацкая",shi:"ташэльхіт",shn:"шан",si:"сінгальская",sk:"славацкая",sl:"славенская",sm:"самоа",sma:"паўднёвасаамская",smj:"луле-саамская",smn:"інары-саамская",sms:"колта-саамская",sn:"шона",snk:"санінке",so:"самалі",sq:"албанская",sr:"сербская",srn:"сранан-тонга",ss:"суаці",ssy:"саха",st:"сесута",su:"сунда",suk:"сукума",sux:"шумерская",sv:"шведская",sw:"суахілі","sw-CD":"кангалезская суахілі",swb:"каморская",syr:"сірыйская",ta:"тамільская",te:"тэлугу",tem:"тэмнэ",teo:"тэсо",tet:"тэтум",tg:"таджыкская",th:"тайская",ti:"тыгрынья",tig:"тыгрэ",tk:"туркменская",tlh:"клінган",tn:"тсвана",to:"танганская",tpi:"ток-пісін",tr:"турэцкая",trv:"тарока",ts:"тсонга",tt:"татарская",tum:"тумбука",tvl:"тувалу",twq:"тасаўак",ty:"таіці",tyv:"тувінская",tzm:"сярэднеатлаская тамазігхт",udm:"удмурцкая",ug:"уйгурская",uk:"украінская",umb:"умбунду",ur:"урду",uz:"узбекская",vai:"ваі",ve:"венда",vi:"в’етнамская",vo:"валапюк",vun:"вунджо",wa:"валонская",wae:"вальшская",wal:"волайта",war:"варай",wbp:"варлпіры",wo:"валоф",xal:"калмыцкая",xh:"коса",xog:"сога",yav:"янгбэн",ybb:"йемба",yi:"ідыш",yo:"ёруба",yue:"кантонскі дыялект кітайскай",zap:"сапатэк",zgh:"стандартная мараканская тамазіхт",zh:"кітайская","zh-Hans":"паўночнакітайская (спрошчаныя іерогліфы)","zh-Hant":"паўночнакітайская (традыцыйныя іерогліфы)",zu:"зулу",zun:"зуні",zza:"зазакі"},scriptNames:{Cyrl:"кірыліца",Latn:"лацініца",Arab:"арабскае",Guru:"гурмукхі",Hans:"спрошчанае кітайскае",Hant:"традыцыйнае кітайскае"}},bg:{rtl:false,languageNames:{aa:"афарски",ab:"абхазки",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигейски",ae:"авестски",af:"африканс",afh:"африхили",agq:"агем",ain:"айну",ak:"акан",akk:"акадски",ale:"алеутски",alt:"южноалтайски",am:"амхарски",an:"арагонски",ang:"староанглийски",anp:"ангика",ar:"арабски","ar-001":"съвременен стандартен арабски",arc:"арамейски",arn:"мапуче",arp:"арапахо",arw:"аравак",as:"асамски",asa:"асу",ast:"астурски",av:"аварски",awa:"авади",ay:"аймара",az:"азербайджански",ba:"башкирски",bal:"балучи",ban:"балийски",bas:"баса",be:"беларуски",bej:"бея",bem:"бемба",bez:"бена",bg:"български",bgn:"западен балочи",bho:"боджпури",bi:"бислама",bik:"биколски",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",br:"бретонски",bra:"брадж",brx:"бодо",bs:"босненски",bua:"бурятски",bug:"бугински",byn:"биленски",ca:"каталонски",cad:"каддо",car:"карибски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чибча",chg:"чагатай",chk:"чуук",chm:"марийски",chn:"жаргон чинуук",cho:"чокто",chp:"чиипувски",chr:"черокски",chy:"шайенски",ckb:"кюрдски (централен)",co:"корсикански",cop:"коптски",cr:"крии",crh:"кримскотатарски",crs:"сеселва, креолски френски",cs:"чешки",csb:"кашубски",cu:"църковнославянски",cv:"чувашки",cy:"уелски",da:"датски",dak:"дакотски",dar:"даргински",dav:"таита",de:"немски","de-AT":"немски (Австрия)","de-CH":"немски (Швейцария)",del:"делауер",den:"слейви",dgr:"догриб",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужишки",dua:"дуала",dum:"средновековен холандски",dv:"дивехи",dyo:"диола-фони",dyu:"диула",dz:"дзонгкха",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egy:"древноегипетски",eka:"екажук",el:"гръцки",elx:"еламитски",en:"английски","en-AU":"английски (Австралия)","en-CA":"английски (Канада)","en-GB":"английски (Обединено кралство)","en-US":"английски (САЩ)",enm:"средновековен английски",eo:"есперанто",es:"испански","es-419":"испански (Латинска Америка)","es-ES":"испански (Испания)","es-MX":"испански (Мексико)",et:"естонски",eu:"баски",ewo:"евондо",fa:"персийски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиджийски",fo:"фарьорски",fon:"фон",fr:"френски","fr-CA":"френски (Канада)","fr-CH":"френски (Швейцария)",frm:"средновековен френски",fro:"старофренски",frr:"северен фризски",frs:"източнофризийски",fur:"фриулски",fy:"западнофризийски",ga:"ирландски",gaa:"га",gag:"гагаузки",gay:"гайо",gba:"гбая",gd:"шотландски келтски",gez:"гииз",gil:"гилбертски",gl:"галисийски",gmh:"средновисоконемски",gn:"гуарани",goh:"старовисоконемски",gon:"гонди",gor:"горонтало",got:"готически",grb:"гребо",grc:"древногръцки",gsw:"швейцарски немски",gu:"гуджарати",guz:"гусии",gv:"манкски",gwi:"гвичин",ha:"хауса",hai:"хайда",haw:"хавайски",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хитски",hmn:"хмонг",ho:"хири моту",hr:"хърватски",hsb:"горнолужишки",ht:"хаитянски креолски",hu:"унгарски",hup:"хупа",hy:"арменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезийски",ie:"оксидентал",ig:"игбо",ii:"съчуански йи",ik:"инупиак",ilo:"илоко",inh:"ингушетски",io:"идо",is:"исландски",it:"италиански",iu:"инуктитут",ja:"японски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-персийски",jrb:"юдео-арабски",jv:"явански",ka:"грузински",kaa:"каракалпашки",kab:"кабилски",kac:"качински",kaj:"жжу",kam:"камба",kaw:"кави",kbd:"кабардиан",kcg:"туап",kde:"маконде",kea:"кабовердиански",kfo:"коро",kg:"конгоански",kha:"кхаси",kho:"котски",khq:"койра чиини",ki:"кикую",kj:"кваняма",kk:"казахски",kkj:"како",kl:"гренландски",kln:"календжин",km:"кхмерски",kmb:"кимбунду",kn:"каннада",ko:"корейски",koi:"коми-пермякски",kok:"конкани",kos:"косраен",kpe:"кпеле",kr:"канури",krc:"карачай-балкарски",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафия",ksh:"кьолнски",ku:"кюрдски",kum:"кумикски",kut:"кутенай",kv:"коми",kw:"корнуолски",ky:"киргизки",la:"латински",lad:"ладино",lag:"ланги",lah:"лахнда",lam:"ламба",lb:"люксембургски",lez:"лезгински",lg:"ганда",li:"лимбургски",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",loz:"лози",lrc:"северен лури",lt:"литовски",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухя",lv:"латвийски",mad:"мадурски",mag:"магахи",mai:"майтхили",mak:"макасар",man:"мандинго",mas:"масайски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисиен",mg:"малгашки",mga:"средновековен ирландски",mgh:"макуа мето",mgo:"мета",mh:"маршалезе",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малаялам",mn:"монголски",mnc:"манджурски",mni:"манипурски",moh:"мохоук",mos:"моси",mr:"марати",ms:"малайски",mt:"малтийски",mua:"мунданг",mus:"мускогски",mwl:"мирандийски",mwr:"марвари",my:"бирмански",myv:"ерзиа",mzn:"мазандерански",na:"науру",nap:"неаполитански",naq:"нама",nb:"норвежки (букмол)",nd:"северен ндебеле",nds:"долнонемски","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"ниас",niu:"ниуеан",nl:"нидерландски","nl-BE":"фламандски",nmg:"квасио",nn:"норвежки (нюношк)",nnh:"нгиембун",no:"норвежки",nog:"ногаи",non:"старонорвежки",nqo:"нко",nr:"южен ндебеле",nso:"северен сото",nus:"нуер",nv:"навахо",nwc:"класически невари",ny:"нянджа",nym:"ниамвези",nyn:"нянколе",nyo:"нуоро",nzi:"нзима",oc:"окситански",oj:"оджибва",om:"оромо",or:"ория",os:"осетински",osa:"осейджи",ota:"отомански турски",pa:"пенджабски",pag:"пангасинан",pal:"пахлави",pam:"пампанга",pap:"папиаменто",pau:"палауан",pcm:"нигерийски пиджин",peo:"староперсийски",phn:"финикийски",pi:"пали",pl:"полски",pon:"понапеан",prg:"пруски",pro:"старопровансалски",ps:"пущу",pt:"португалски","pt-BR":"португалски (Бразилия)","pt-PT":"португалски (Португалия)",qu:"кечуа",quc:"киче",raj:"раджастански",rap:"рапа нуи",rar:"раротонга",rm:"реторомански",rn:"рунди",ro:"румънски","ro-MD":"молдовски",rof:"ромбо",rom:"ромски",root:"роот",ru:"руски",rup:"арумънски",rw:"киняруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"сакха",sam:"самаритански арамейски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбай",sbp:"сангу",sc:"сардински",scn:"сицилиански",sco:"шотландски",sd:"синдхи",sdh:"южнокюрдски",se:"северносаамски",seh:"сена",sel:"селкуп",ses:"койраборо сени",sg:"санго",sga:"староирландски",sh:"сърбохърватски",shi:"ташелхит",shn:"шан",si:"синхалски",sid:"сидамо",sk:"словашки",sl:"словенски",sm:"самоански",sma:"южносаамски",smj:"луле-саамски",smn:"инари-саамски",sms:"сколт-саамски",sn:"шона",snk:"сонинке",so:"сомалийски",sog:"согдийски",sq:"албански",sr:"сръбски",srn:"сранан тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сото",su:"сундански",suk:"сукума",sus:"сусу",sux:"шумерски",sv:"шведски",sw:"суахили","sw-CD":"конгоански суахили",swb:"коморски",syc:"класически сирийски",syr:"сирийски",ta:"тамилски",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикски",th:"тайски",ti:"тигриня",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелайски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонгански",tog:"нианса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиански",tt:"татарски",tum:"тумбука",tvl:"тувалуански",tw:"туи",twq:"тасавак",ty:"таитянски",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"уйгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбекски",vai:"ваи",ve:"венда",vi:"виетнамски",vo:"волапюк",vot:"вотик",vun:"вунджо",wa:"валонски",wae:"валзерски немски",wal:"валамо",war:"варай",was:"уашо",wbp:"валпири",wo:"волоф",xal:"калмик",xh:"ксоса",xog:"сога",yao:"яо",yap:"япезе",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонски",za:"зуанг",zap:"запотек",zbl:"блис символи",zen:"зенага",zgh:"стандартен марокански тамазигт",zh:"китайски","zh-Hans":"китайски, мандарин (опростен)","zh-Hant":"китайски, мандарин (традиционен)",zu:"зулуски",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилица",Latn:"латиница",Arab:"арабска",Guru:"гурмукхи",Vaii:"Вайска",Hans:"опростена",Hant:"традиционна"}},bn:{rtl:false,languageNames:{aa:"আফার",ab:"আবখাজিয়ান",ace:"অ্যাচাইনিজ",ach:"আকোলি",ada:"অদাগ্মে",ady:"আদেগে",ae:"আবেস্তীয়",af:"আফ্রিকান",afh:"আফ্রিহিলি",agq:"এঘেম",ain:"আইনু",ak:"আকান",akk:"আক্কাদিয়ান",ale:"আলেউত",alt:"দক্ষিন আলতাই",am:"আমহারিক",an:"আর্গোনিজ",ang:"প্রাচীন ইংরেজী",anp:"আঙ্গিকা",ar:"আরবী","ar-001":"আধুনিক আদর্শ আরবী",arc:"আরামাইক",arn:"মাপুচি",arp:"আরাপাহো",arw:"আরাওয়াক",as:"অসমীয়া",asa:"আসু",ast:"আস্তুরিয়",av:"আভেরিক",awa:"আওয়াধি",ay:"আয়মারা",az:"আজারবাইজানী",ba:"বাশকির",bal:"বেলুচী",ban:"বালিনীয়",bas:"বাসা",be:"বেলারুশিয়",bej:"বেজা",bem:"বেম্বা",bez:"বেনা",bg:"বুলগেরিয়",bgn:"পশ্চিম বালোচি",bho:"ভোজপুরি",bi:"বিসলামা",bik:"বিকোল",bin:"বিনি",bla:"সিকসিকা",bm:"বামবারা",bn:"বাংলা",bo:"তিব্বতি",br:"ব্রেটন",bra:"ব্রাজ",brx:"বোড়ো",bs:"বসনীয়ান",bua:"বুরিয়াত",bug:"বুগিনি",byn:"ব্লিন",ca:"কাতালান",cad:"ক্যাডো",car:"ক্যারিব",cch:"আত্সাম",ccp:"চাকমা",ce:"চেচেন",ceb:"চেবুয়ানো",cgg:"চিগা",ch:"চামোরো",chb:"চিবচা",chg:"চাগাতাই",chk:"চুকি",chm:"মারি",chn:"চিনুক জার্গন",cho:"চকটোও",chp:"চিপেওয়ান",chr:"চেরোকী",chy:"শাইয়েন",ckb:"মধ্য কুর্দিশ",co:"কর্সিকান",cop:"কপটিক",cr:"ক্রি",crh:"ক্রিমিয়ান তুর্কি",crs:"সেসেলওয়া ক্রেওল ফ্রেঞ্চ",cs:"চেক",csb:"কাশুবিয়ান",cu:"চার্চ স্লাভিক",cv:"চুবাস",cy:"ওয়েলশ",da:"ডেনিশ",dak:"ডাকোটা",dar:"দার্গওয়া",dav:"তাইতা",de:"জার্মান","de-AT":"অস্ট্রিয়ান জার্মান","de-CH":"সুইস হাই জার্মান",del:"ডেলাওয়ের",den:"স্ল্যাভ",dgr:"দোগ্রীব",din:"ডিংকা",dje:"জার্মা",doi:"ডোগরি",dsb:"নিম্নতর সোর্বিয়ান",dua:"দুয়ালা",dum:"মধ্য ডাচ",dv:"দিবেহি",dyo:"জোলা-ফনী",dyu:"ডিউলা",dz:"জোঙ্গা",dzg:"দাজাগা",ebu:"এম্বু",ee:"ইউয়ি",efi:"এফিক",egy:"প্রাচীন মিশরীয়",eka:"ইকাজুক",el:"গ্রিক",elx:"এলামাইট",en:"ইংরেজি","en-AU":"অস্ট্রেলীয় ইংরেজি","en-CA":"কানাডীয় ইংরেজি","en-GB":"ব্রিটিশ ইংরেজি","en-US":"আমেরিকার ইংরেজি",enm:"মধ্য ইংরেজি",eo:"এস্পেরান্তো",es:"স্প্যানিশ","es-419":"ল্যাটিন আমেরিকান স্প্যানিশ","es-ES":"ইউরোপীয় স্প্যানিশ","es-MX":"ম্যাক্সিকান স্প্যানিশ",et:"এস্তোনীয়",eu:"বাস্ক",ewo:"ইওন্ডো",fa:"ফার্সি",fan:"ফ্যাঙ্গ",fat:"ফান্তি",ff:"ফুলাহ্",fi:"ফিনিশ",fil:"ফিলিপিনো",fj:"ফিজিআন",fo:"ফারোস",fon:"ফন",fr:"ফরাসি","fr-CA":"কানাডীয় ফরাসি","fr-CH":"সুইস ফরাসি",frc:"কাজুন ফরাসি",frm:"মধ্য ফরাসি",fro:"প্রাচীন ফরাসি",frr:"উত্তরাঞ্চলীয় ফ্রিসিয়ান",frs:"পূর্ব ফ্রিসিয়",fur:"ফ্রিউলিয়ান",fy:"পশ্চিম ফ্রিসিয়ান",ga:"আইরিশ",gaa:"গা",gag:"গাগাউজ",gay:"গায়ো",gba:"বায়া",gd:"স্কটস-গ্যেলিক",gez:"গীজ",gil:"গিলবার্টিজ",gl:"গ্যালিশিয়",gmh:"মধ্য-উচ্চ জার্মানি",gn:"গুয়ারানি",goh:"প্রাচীন উচ্চ জার্মানি",gon:"গোন্ডি",gor:"গোরোন্তালো",got:"গথিক",grb:"গ্রেবো",grc:"প্রাচীন গ্রীক",gsw:"সুইস জার্মান",gu:"গুজরাটি",guz:"গুসী",gv:"ম্যাঙ্কস",gwi:"গওইচ্’ইন",ha:"হাউসা",hai:"হাইডা",haw:"হাওয়াইয়ান",he:"হিব্রু",hi:"হিন্দি",hil:"হিলিগ্যায়নোন",hit:"হিট্টিট",hmn:"হ্‌মোঙ",ho:"হিরি মোতু",hr:"ক্রোয়েশীয়",hsb:"উচ্চ সোর্বিয়ান",hsn:"Xiang চীনা",ht:"হাইতিয়ান ক্রেওল",hu:"হাঙ্গেরীয়",hup:"হুপা",hy:"আর্মেনিয়",hz:"হেরেরো",ia:"ইন্টারলিঙ্গুয়া",iba:"ইবান",ibb:"ইবিবিও",id:"ইন্দোনেশীয়",ie:"ইন্টারলিঙ্গ",ig:"ইগ্‌বো",ii:"সিচুয়ান য়ি",ik:"ইনুপিয়াক",ilo:"ইলোকো",inh:"ইঙ্গুশ",io:"ইডো",is:"আইসল্যান্ডীয়",it:"ইতালিয়",iu:"ইনুক্টিটুট",ja:"জাপানি",jbo:"লোজবান",jgo:"গোম্বা",jmc:"মাকামে",jpr:"জুদেও ফার্সি",jrb:"জুদেও আরবি",jv:"জাভানিজ",ka:"জর্জিয়ান",kaa:"কারা-কাল্পাক",kab:"কাবাইলে",kac:"কাচিন",kaj:"অজ্জু",kam:"কাম্বা",kaw:"কাউই",kbd:"কাবার্ডিয়ান",kcg:"টাইয়াপ",kde:"মাকোন্দে",kea:"কাবুভারদিয়ানু",kfo:"কোরো",kg:"কঙ্গো",kha:"খাশি",kho:"খোটানিজ",khq:"কোয়রা চীনি",ki:"কিকুয়ু",kj:"কোয়ানিয়ামা",kk:"কাজাখ",kkj:"কাকো",kl:"ক্যালাল্লিসুট",kln:"কালেনজিন",km:"খমের",kmb:"কিম্বুন্দু",kn:"কন্নড়",ko:"কোরিয়ান",koi:"কমি-পারমিআক",kok:"কোঙ্কানি",kos:"কোস্রাইন",kpe:"ক্‌পেল্লে",kr:"কানুরি",krc:"কারচে-বাল্কার",krl:"কারেলিয়ান",kru:"কুরুখ",ks:"কাশ্মীরি",ksb:"শাম্বালা",ksf:"বাফিয়া",ksh:"কলোনিয়ান",ku:"কুর্দিশ",kum:"কুমিক",kut:"কুটেনাই",kv:"কোমি",kw:"কর্ণিশ",ky:"কির্গিজ",la:"লাতিন",lad:"লাডিনো",lag:"লাঙ্গি",lah:"লান্ডা",lam:"লাম্বা",lb:"লুক্সেমবার্গীয়",lez:"লেজঘিয়ান",lg:"গান্ডা",li:"লিম্বুর্গিশ",lkt:"লাকোটা",ln:"লিঙ্গালা",lo:"লাও",lol:"মোঙ্গো",lou:"লুইসিয়ানা ক্রেওল",loz:"লোজি",lrc:"উত্তর লুরি",lt:"লিথুয়েনীয়",lu:"লুবা-কাটাঙ্গা",lua:"লুবা-লুলুয়া",lui:"লুইসেনো",lun:"লুন্ডা",luo:"লুয়ো",lus:"মিজো",luy:"লুইয়া",lv:"লাত্‌ভীয়",mad:"মাদুরেসে",mag:"মাগাহি",mai:"মৈথিলি",mak:"ম্যাকাসার",man:"ম্যান্ডিঙ্গো",mas:"মাসাই",mdf:"মোকশা",mdr:"ম্যাণ্ডার",men:"মেন্ডে",mer:"মেরু",mfe:"মরিসিয়ান",mg:"মালাগাসি",mga:"মধ্য আইরিশ",mgh:"মাখুয়া-মেত্তো",mgo:"মেটা",mh:"মার্শালিজ",mi:"মাওরি",mic:"মিকম্যাক",min:"মিনাংকাবাউ",mk:"ম্যাসিডোনীয়",ml:"মালায়ালাম",mn:"মঙ্গোলিয়",mnc:"মাঞ্চু",mni:"মণিপুরী",moh:"মোহাওক",mos:"মসি",mr:"মারাঠি",ms:"মালয়",mt:"মল্টিয়",mua:"মুদাঙ্গ",mus:"ক্রিক",mwl:"মিরান্ডিজ",mwr:"মারোয়ারি",my:"বর্মি",myv:"এরজিয়া",mzn:"মাজানদেরানি",na:"নাউরু",nap:"নেয়াপোলিটান",naq:"নামা",nb:"নরওয়েজিয়ান বোকমাল",nd:"উত্তর এন্দেবিলি",nds:"নিম্ন জার্মানি","nds-NL":"লো স্যাক্সন",ne:"নেপালী","new":"নেওয়ারি",ng:"এন্দোঙ্গা",nia:"নিয়াস",niu:"নিউয়ান",nl:"ওলন্দাজ","nl-BE":"ফ্লেমিশ",nmg:"কোয়াসিও",nn:"নরওয়েজীয়ান নিনর্স্ক",nnh:"নিঙ্গেম্বুন",no:"নরওয়েজীয়",nog:"নোগাই",non:"প্রাচীন নর্স",nqo:"এন’কো",nr:"দক্ষিণ এনডেবেলে",nso:"উত্তরাঞ্চলীয় সোথো",nus:"নুয়ার",nv:"নাভাজো",nwc:"প্রাচীন নেওয়ারী",ny:"নায়াঞ্জা",nym:"ন্যায়ামওয়েজি",nyn:"ন্যায়াঙ্কোলে",nyo:"ন্যোরো",nzi:"এনজিমা",oc:"অক্সিটান",oj:"ওজিবওয়া",om:"অরোমো",or:"ওড়িয়া",os:"ওসেটিক",osa:"ওসেজ",ota:"অটোমান তুর্কি",pa:"পাঞ্জাবী",pag:"পাঙ্গাসিনান",pal:"পাহ্লাভি",pam:"পাম্পাঙ্গা",pap:"পাপিয়ামেন্টো",pau:"পালায়ুয়ান",pcm:"নাইজেরিয় পিজিন",peo:"প্রাচীন ফার্সি",phn:"ফোনিশীয়ান",pi:"পালি",pl:"পোলিশ",pon:"পোহ্নপেইয়ান",prg:"প্রুশিয়ান",pro:"প্রাচীন প্রোভেনসাল",ps:"পুশতু",pt:"পর্তুগীজ","pt-BR":"ব্রাজিলের পর্তুগীজ","pt-PT":"ইউরোপের পর্তুগীজ",qu:"কেচুয়া",quc:"কি‘চে",raj:"রাজস্থানী",rap:"রাপানুই",rar:"রারোটোংগান",rm:"রোমান্স",rn:"রুন্দি",ro:"রোমানীয়","ro-MD":"মলদাভিয়",rof:"রম্বো",rom:"রোমানি",root:"মূল",ru:"রুশ",rup:"আরমেনিয়ান",rw:"কিনয়ারোয়ান্ডা",rwk:"রাওয়া",sa:"সংস্কৃত",sad:"স্যান্ডাওয়ে",sah:"শাখা",sam:"সামারিটান আরামিক",saq:"সামবুরু",sas:"সাসাক",sat:"সাঁওতালি",sba:"ন্যাগাম্বে",sbp:"সাঙ্গু",sc:"সার্ডিনিয়ান",scn:"সিসিলিয়ান",sco:"স্কটস",sd:"সিন্ধি",sdh:"দক্ষিণ কুর্দিশ",se:"উত্তরাঞ্চলীয় সামি",seh:"সেনা",sel:"সেল্কুপ",ses:"কোয়রাবেনো সেন্নী",sg:"সাঙ্গো",sga:"প্রাচীন আইরিশ",sh:"সার্বো-ক্রোয়েশিয়",shi:"তাচেলহিত",shn:"শান",si:"সিংহলী",sid:"সিডামো",sk:"স্লোভাক",sl:"স্লোভেনীয়",sm:"সামোয়ান",sma:"দক্ষিণাঞ্চলীয় সামি",smj:"লুলে সামি",smn:"ইনারি সামি",sms:"স্কোল্ট সামি",sn:"শোনা",snk:"সোনিঙ্কে",so:"সোমালি",sog:"সোগডিয়ান",sq:"আলবেনীয়",sr:"সার্বীয়",srn:"স্রানান টোঙ্গো",srr:"সেরের",ss:"সোয়াতি",ssy:"সাহো",st:"দক্ষিন সোথো",su:"সুদানী",suk:"সুকুমা",sus:"সুসু",sux:"সুমেরীয়",sv:"সুইডিশ",sw:"সোয়াহিলি","sw-CD":"কঙ্গো সোয়াহিলি",swb:"কমোরিয়ান",syc:"প্রাচীন সিরিও",syr:"সিরিয়াক",ta:"তামিল",te:"তেলুগু",tem:"টাইম্নে",teo:"তেসো",ter:"তেরেনো",tet:"তেতুম",tg:"তাজিক",th:"থাই",ti:"তিগরিনিয়া",tig:"টাইগ্রে",tiv:"টিভ",tk:"তুর্কমেনী",tkl:"টোকেলাউ",tl:"তাগালগ",tlh:"ক্লিঙ্গন",tli:"ত্লিঙ্গিট",tmh:"তামাশেক",tn:"সোয়ানা",to:"টোঙ্গান",tog:"নায়াসা টোঙ্গা",tpi:"টোক পিসিন",tr:"তুর্কী",trv:"তারোকো",ts:"সঙ্গা",tsi:"সিমশিয়ান",tt:"তাতার",tum:"তুম্বুকা",tvl:"টুভালু",tw:"টোয়াই",twq:"তাসাওয়াক",ty:"তাহিতিয়ান",tyv:"টুভিনিয়ান",tzm:"সেন্ট্রাল আটলাস তামাজিগাত",udm:"উডমুর্ট",ug:"উইঘুর",uga:"উগারিটিক",uk:"ইউক্রেনীয়",umb:"উম্বুন্দু",ur:"উর্দু",uz:"উজবেকীয়",vai:"ভাই",ve:"ভেন্ডা",vi:"ভিয়েতনামী",vo:"ভোলাপুক",vot:"ভোটিক",vun:"ভুঞ্জো",wa:"ওয়ালুন",wae:"ওয়ালসের",wal:"ওয়ালামো",war:"ওয়ারে",was:"ওয়াশো",wbp:"ওয়ার্লপিরি",wo:"উওলোফ",wuu:"Wu চীনা",xal:"কাল্মইক",xh:"জোসা",xog:"সোগা",yao:"ইয়াও",yap:"ইয়াপেসে",yav:"ইয়াঙ্গবেন",ybb:"ইয়েম্বা",yi:"ইয়েদ্দিশ",yo:"ইওরুবা",yue:"ক্যান্টোনিজ",za:"ঝু্য়াঙ",zap:"জাপোটেক",zbl:"চিত্র ভাষা",zen:"জেনাগা",zgh:"আদর্শ মরক্কোন তামাজিগাত",zh:"চীনা","zh-Hans":"চীনা ম্যান্ডারিন সরলীকৃত","zh-Hant":"ঐতিহ্যবাহী ম্যান্ডারিন চীনা",zu:"জুলু",zun:"জুনি",zza:"জাজা"},scriptNames:{Cyrl:"সিরিলিক",Latn:"ল্যাটিন",Arab:"আরবি",Guru:"গুরুমুখি",Tfng:"তিফিনাগ",Vaii:"ভাই",Hans:"সরলীকৃত",Hant:"ঐতিহ্যবাহী"}},bs:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"akoli",ada:"adangmejski",ady:"adigejski",ae:"avestanski",af:"afrikans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akadijski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuški",arp:"arapaho",arw:"aravak",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"avadhi",ay:"ajmara",az:"azerbejdžanski",ba:"baškirski",bal:"baluči",ban:"balinezijski",bas:"basa",bax:"bamunski",bbj:"gomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadni belučki",bho:"bojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tibetanski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoski",bua:"buriat",bug:"bugiški",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"kado",car:"karipski",cay:"kajuga",cch:"atsam",ccp:"čakma",ce:"čečenski",ceb:"cebuano",cgg:"čiga",ch:"čamoro",chb:"čibča",chg:"čagatai",chk:"čukeski",chm:"mari",chn:"činukski žargon",cho:"čoktav",chp:"čipvijanski",chr:"čeroki",chy:"čejenski",ckb:"centralnokurdski",co:"korzikanski",cop:"koptski",cr:"kri",crh:"krimski turski",crs:"seselva kreolski francuski",cs:"češki",csb:"kašubijanski",cu:"staroslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota",dar:"dargva",dav:"taita",de:"njemački","de-AT":"njemački (Austrija)","de-CH":"njemački (Švicarska)",del:"delaver",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužičkosrpski",dua:"duala",dum:"srednjovjekovni holandski",dv:"divehi",dyo:"jola-foni",dyu:"diula",dz:"džonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"engleski (Australija)","en-CA":"engleski (Kanada)","en-GB":"engleski (Ujedinjeno Kraljevstvo)","en-US":"engleski (Sjedinjene Države)",enm:"srednjovjekovni engleski",eo:"esperanto",es:"španski","es-419":"španski (Latinska Amerika)","es-ES":"španski (Španija)","es-MX":"španski (Meksiko)",et:"estonski",eu:"baskijski",ewo:"evondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fulah",fi:"finski",fil:"filipino",fj:"fidžijski",fo:"farski",fr:"francuski","fr-CA":"francuski (Kanada)","fr-CH":"francuski (Švicarska)",frm:"srednjovjekovni francuski",fro:"starofrancuski",frr:"sjeverni frizijski",frs:"istočnofrizijski",fur:"friulijski",fy:"zapadni frizijski",ga:"irski",gaa:"ga",gag:"gagauški",gay:"gajo",gba:"gbaja",gd:"škotski galski",gez:"staroetiopski",gil:"gilbertski",gl:"galicijski",gmh:"srednjovjekovni gornjonjemački",gn:"gvarani",goh:"staronjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"njemački (Švicarska)",gu:"gudžarati",guz:"gusi",gv:"manks",gwi:"gvičin",ha:"hausa",hai:"haida",haw:"havajski",he:"hebrejski",hi:"hindi",hil:"hiligajnon",hit:"hitite",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužičkosrpski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interlingve",ig:"igbo",ii:"sičuan ji",ik:"inupiak",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"italijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"makame",jpr:"judeo-perzijski",jrb:"judeo-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabile",kac:"kačin",kaj:"kaju",kam:"kamba",kaw:"kavi",kbd:"kabardijski",kbl:"kanembu",kcg:"tjap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"kasi",kho:"kotanizijski",khq:"kojra čini",ki:"kikuju",kj:"kuanjama",kk:"kazaški",kkj:"kako",kl:"kalalisutski",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"kanada",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"kosrejski",kpe:"kpele",kr:"kanuri",krc:"karačaj-balkar",kri:"krio",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"šambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumik",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiški",la:"latinski",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"luksemburški",lez:"lezgijski",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",loz:"lozi",lrc:"sjeverni luri",lt:"litvanski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhija",lv:"latvijski",mad:"madureški",maf:"mafa",mag:"magahi",mai:"maitili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjovjekovni irski",mgh:"makuva-meto",mgo:"meta",mh:"maršalski",mi:"maorski",mic:"mikmak",min:"minangkabau",mk:"makedonski",ml:"malajalam",mn:"mongolski",mnc:"manču",mni:"manipuri",moh:"mohavk",mos:"mosi",mr:"marati",ms:"malajski",mt:"malteški",mua:"mundang",mus:"kriški",mwl:"mirandeški",mwr:"marvari",my:"burmanski",mye:"mjene",myv:"erzija",mzn:"mazanderanski",na:"nauru",nap:"napolitanski",naq:"nama",nb:"norveški (Bokmal)",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"nevari",ng:"ndonga",nia:"nias",niu:"niue",nl:"holandski","nl-BE":"flamanski",nmg:"kvasio",nn:"norveški (Nynorsk)",nnh:"ngiembon",no:"norveški",nog:"nogai",non:"staronordijski",nqo:"nko",nr:"južni ndebele",nso:"sjeverni soto",nus:"nuer",nv:"navaho",nwc:"klasični nevari",ny:"njanja",nym:"njamvezi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitanski",oj:"ojibva",om:"oromo",or:"odija",os:"osetski",osa:"osage",ota:"osmanski turski",pa:"pandžapski",pag:"pangasinski",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"feničanski",pi:"pali",pl:"poljski",pon:"ponpejski",prg:"pruski",pro:"staroprovansalski",ps:"paštu",pt:"portugalski","pt-BR":"portugalski (Brazil)","pt-PT":"portugalski (Portugal)",qu:"kečua",quc:"kiče",raj:"rajastani",rap:"rapanui",rar:"rarotongan",rm:"retoromanski",rn:"rundi",ro:"rumunski","ro-MD":"moldavski",rof:"rombo",rom:"romani",root:"korijenski",ru:"ruski",rup:"arumunski",rw:"kinjaruanda",rwk:"rua",sa:"sanskrit",sad:"sandave",sah:"jakutski",sam:"samaritanski aramejski",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambaj",sbp:"sangu",sc:"sardinijski",scn:"sicilijanski",sco:"škotski",sd:"sindi",sdh:"južni kurdski",se:"sjeverni sami",see:"seneka",seh:"sena",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"staroirski",sh:"srpskohrvatski",shi:"tahelhit",shn:"šan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"šona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"srananski tongo",srr:"serer",ss:"svati",ssy:"saho",st:"južni soto",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"svahili (Demokratska Republika Kongo)",swb:"komorski",syc:"klasični sirijski",syr:"sirijski",ta:"tamilski",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigre",tk:"turkmenski",tkl:"tokelau",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašek",tn:"tsvana",to:"tonganski",tog:"njasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimšian",tt:"tatarski",tum:"tumbuka",tvl:"tuvalu",tw:"tvi",twq:"tasavak",ty:"tahićanski",tyv:"tuvinijski",tzm:"centralnoatlaski tamazigt",udm:"udmurt",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdu",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapuk",vot:"votski",vun:"vunjo",wa:"valun",wae:"valser",wal:"valamo",war:"varej",was:"vašo",wbp:"varlpiri",wo:"volof",xal:"kalmik",xh:"hosa",xog:"soga",yao:"jao",yap:"japeški",yav:"jangben",ybb:"jemba",yi:"jidiš",yo:"jorubanski",yue:"kantonski",za:"zuang",zap:"zapotečki",zbl:"blis simboli",zen:"zenaga",zgh:"standardni marokanski tamazigt",zh:"kineski","zh-Hans":"kineski (pojednostavljeni standardni)","zh-Hant":"kineski (tradicionalni standardni)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"pismo gurmuki",Tfng:"tifinag pismo",Vaii:"vai pismo",Hans:"pojednostavljeno",Hant:"tradicionalno"}},ca:{rtl:false,languageNames:{aa:"àfar",ab:"abkhaz",ace:"atjeh",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avèstic",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"àkan",akk:"accadi",akz:"alabama",ale:"aleuta",aln:"albanès geg",alt:"altaic meridional",am:"amhàric",an:"aragonès",ang:"anglès antic",anp:"angika",ar:"àrab","ar-001":"àrab estàndard modern",arc:"arameu",arn:"mapudungu",aro:"araona",arp:"arapaho",ars:"àrab najdi",arw:"arauac",arz:"àrab egipci",as:"assamès",asa:"pare",ase:"llengua de signes americana",ast:"asturià",av:"àvar",awa:"awadhi",ay:"aimara",az:"azerbaidjanès",ba:"baixkir",bal:"balutxi",ban:"balinès",bar:"bavarès",bas:"basa",bax:"bamum",bbj:"ghomala",be:"belarús",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"búlgar",bgn:"balutxi occidental",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"edo",bkm:"kom",bla:"blackfoot",bm:"bambara",bn:"bengalí",bo:"tibetà",br:"bretó",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosnià",bss:"akoose",bua:"buriat",bug:"bugui",bum:"bulu",byn:"bilin",byv:"medumba",ca:"català",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"txetxè",ceb:"cebuà",cgg:"chiga",ch:"chamorro",chb:"txibtxa",chg:"txagatai",chk:"chuuk",chm:"mari",chn:"pidgin chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"xeiene",ckb:"kurd central",co:"cors",cop:"copte",cr:"cree",crh:"tàtar de Crimea",crs:"francès crioll de les Seychelles",cs:"txec",csb:"caixubi",cu:"eslau eclesiàstic",cv:"txuvaix",cy:"gal·lès",da:"danès",dak:"dakota",dar:"darguà",dav:"taita",de:"alemany","de-AT":"alemany austríac","de-CH":"alemany estàndard suís",del:"delaware",den:"slavi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baix sòrab",dua:"douala",dum:"neerlandès mitjà",dv:"divehi",dyo:"diola",dyu:"jula",dz:"dzongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilià",egy:"egipci antic",eka:"ekajuk",el:"grec",elx:"elamita",en:"anglès","en-AU":"anglès australià","en-CA":"anglès canadenc","en-GB":"anglès britànic","en-US":"anglès americà",enm:"anglès mitjà",eo:"esperanto",es:"espanyol","es-419":"espanyol hispanoamericà","es-ES":"espanyol europeu","es-MX":"espanyol de Mèxic",et:"estonià",eu:"basc",ewo:"ewondo",ext:"extremeny",fa:"persa",fan:"fang",fat:"fanti",ff:"ful",fi:"finès",fil:"filipí",fj:"fijià",fo:"feroès",fr:"francès","fr-CA":"francès canadenc","fr-CH":"francès suís",frc:"francès cajun",frm:"francès mitjà",fro:"francès antic",frr:"frisó septentrional",frs:"frisó oriental",fur:"friülà",fy:"frisó occidental",ga:"irlandès",gaa:"ga",gag:"gagaús",gan:"xinès gan",gay:"gayo",gba:"gbaya",gd:"gaèlic escocès",gez:"gueez",gil:"gilbertès",gl:"gallec",glk:"gilaki",gmh:"alt alemany mitjà",gn:"guaraní",goh:"alt alemany antic",gom:"concani de Goa",gon:"gondi",gor:"gorontalo",got:"gòtic",grb:"grebo",grc:"grec antic",gsw:"alemany suís",gu:"gujarati",guc:"wayú",guz:"gusí",gv:"manx",gwi:"gwich’in",ha:"haussa",hai:"haida",hak:"xinès hakka",haw:"hawaià",he:"hebreu",hi:"hindi",hif:"hindi de Fiji",hil:"híligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"alt sòrab",hsn:"xinès xiang",ht:"crioll d’Haití",hu:"hongarès",hup:"hupa",hy:"armeni",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesi",ie:"interlingue",ig:"igbo",ii:"yi sichuan",ik:"inupiak",ilo:"ilocano",inh:"ingúix",io:"ido",is:"islandès",it:"italià",iu:"inuktitut",ja:"japonès",jam:"crioll anglès de Jamaica",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeopersa",jrb:"judeoàrab",jv:"javanès",ka:"georgià",kaa:"karakalpak",kab:"cabilenc",kac:"katxin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardí",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"crioll capverdià",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingà",kha:"khasi",kho:"khotanès",khq:"koyra chiini",ki:"kikuiu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"grenlandès",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreà",koi:"komi-permiac",kok:"concani",kos:"kosraeà",kpe:"kpelle",kr:"kanuri",krc:"karatxai-balkar",kri:"krio",krl:"carelià",kru:"kurukh",ks:"caixmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kúmik",kut:"kutenai",kv:"komi",kw:"còrnic",ky:"kirguís",la:"llatí",lad:"judeocastellà",lag:"langi",lah:"panjabi occidental",lam:"lamba",lb:"luxemburguès",lez:"lesguià",lg:"ganda",li:"limburguès",lij:"lígur",lkt:"lakota",lmo:"llombard",ln:"lingala",lo:"laosià",lol:"mongo",lou:"crioll francès de Louisiana",loz:"lozi",lrc:"luri septentrional",lt:"lituà",lu:"luba katanga",lua:"luba-lulua",lui:"luisenyo",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letó",lzh:"xinès clàssic",lzz:"laz",mad:"madurès",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mordovià moksa",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricià",mg:"malgaix",mga:"gaèlic irlandès mitjà",mgh:"makhuwa-metto",mgo:"meta’",mh:"marshallès",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoni",ml:"malaiàlam",mn:"mongol",mnc:"manxú",mni:"manipurí",moh:"mohawk",mos:"moore",mr:"marathi",mrj:"mari occidental",ms:"malai",mt:"maltès",mua:"mundang",mus:"creek",mwl:"mirandès",mwr:"marwari",my:"birmà",mye:"myene",myv:"mordovià erza",mzn:"mazanderani",na:"nauruà",nan:"xinès min del sud",nap:"napolità",naq:"nama",nb:"noruec bokmål",nd:"ndebele septentrional",nds:"baix alemany","nds-NL":"baix saxó",ne:"nepalès","new":"newari",ng:"ndonga",nia:"nias",niu:"niueà",nl:"neerlandès","nl-BE":"flamenc",nmg:"bissio",nn:"noruec nynorsk",nnh:"ngiemboon",no:"noruec",nog:"nogai",non:"nòrdic antic",nov:"novial",nqo:"n’Ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navaho",nwc:"newari clàssic",ny:"nyanja",nym:"nyamwesi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"occità",oj:"ojibwa",om:"oromo",or:"oriya",os:"osseta",osa:"osage",ota:"turc otomà",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiament",pau:"palauà",pcd:"picard",pcm:"pidgin de Nigèria",pdc:"alemany pennsilvanià",peo:"persa antic",pfl:"alemany palatí",phn:"fenici",pi:"pali",pl:"polonès",pms:"piemontès",pnt:"pòntic",pon:"ponapeà",prg:"prussià",pro:"provençal antic",ps:"paixtu",pt:"portuguès","pt-BR":"portuguès del Brasil","pt-PT":"portuguès de Portugal",qu:"quítxua",quc:"k’iche’",raj:"rajasthani",rap:"rapanui",rar:"rarotongà",rgn:"romanyès",rm:"retoromànic",rn:"rundi",ro:"romanès","ro-MD":"moldau",rof:"rombo",rom:"romaní",root:"arrel",ru:"rus",rup:"aromanès",rw:"ruandès",rwk:"rwo",sa:"sànscrit",sad:"sandawe",sah:"iacut",sam:"arameu samarità",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sard",scn:"sicilià",sco:"escocès",sd:"sindi",sdc:"sasserès",sdh:"kurd meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"songhai oriental",sg:"sango",sga:"irlandès antic",sh:"serbocroat",shi:"taixelhit",shn:"xan",shu:"àrab txadià",si:"singalès",sid:"sidamo",sk:"eslovac",sl:"eslovè",sm:"samoà",sma:"sami meridional",smj:"sami lule",smn:"sami d’Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdià",sq:"albanès",sr:"serbi",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"sotho meridional",su:"sondanès",suk:"sukuma",sus:"susú",sux:"sumeri",sv:"suec",sw:"suahili","sw-CD":"suahili del Congo",swb:"comorià",syc:"siríac clàssic",syr:"siríac",szl:"silesià",ta:"tàmil",te:"telugu",tem:"temne",teo:"teso",ter:"terena",tet:"tètum",tg:"tadjik",th:"tai",ti:"tigrinya",tig:"tigre",tk:"turcman",tkl:"tokelauès",tkr:"tsakhur",tl:"tagal",tlh:"klingonià",tli:"tlingit",tly:"talix",tmh:"amazic",tn:"setswana",to:"tongalès",tog:"tonga",tpi:"tok pisin",tr:"turc",trv:"taroko",ts:"tsonga",tsi:"tsimshià",tt:"tàtar",ttt:"tat meridional",tum:"tumbuka",tvl:"tuvaluà",tw:"twi",twq:"tasawaq",ty:"tahitià",tyv:"tuvinià",tzm:"amazic del Marroc central",udm:"udmurt",ug:"uigur",uga:"ugarític",uk:"ucraïnès",umb:"umbundu",ur:"urdú",uz:"uzbek",ve:"venda",vec:"vènet",vep:"vepse",vi:"vietnamita",vls:"flamenc occidental",vo:"volapük",vot:"vòtic",vun:"vunjo",wa:"való",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wòlof",wuu:"xinès wu",xal:"calmuc",xh:"xosa",xmf:"mingrelià",xog:"soga",yap:"yapeà",yav:"yangben",ybb:"yemba",yi:"ídix",yo:"ioruba",yue:"cantonès",za:"zhuang",zap:"zapoteca",zbl:"símbols Bliss",zea:"zelandès",zen:"zenaga",zgh:"amazic estàndard marroquí",zh:"xinès","zh-Hans":"xinès mandarí (simplificat)","zh-Hant":"xinès mandarí (tradicional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"ciríl·lic",Latn:"llatí",Arab:"àrab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificat",Hant:"tradicional"}},ckb:{rtl:true,languageNames:{aa:"ئەفار",ab:"ئەبخازی",ace:"ئاچەیی",ada:"دانگمێ",ady:"ئادیگی",af:"ئەفریکانس",agq:"ئاگێم",ain:"ئاینوو",ak:"ئاکان",ale:"ئالیوت",alt:"ئاڵتایی باشوور",am:"ئەمھەری",an:"ئاراگۆنی",anp:"ئەنگیکا",ar:"عەرەبی","ar-001":"عەرەبیی ستاندارد",arn:"ماپووچە",arp:"ئاراپاهۆ",as:"ئاسامی",asa:"ئاسوو",ast:"ئاستۆری",av:"ئەڤاری",awa:"ئاوادهی",ay:"ئایمارا",az:"ئازەربایجانی","az-Arab":"ئازەربایجانی باشووری",ba:"باشکیەر",ban:"بالی",bas:"باسا",be:"بیلاڕووسی",bem:"بێمبا",bez:"بێنا",bg:"بۆلگاری",bho:"بوجپووری",bi:"بیسلاما",bin:"بینی",bla:"سیکسیکا",bm:"بامبارا",bn:"بەنگلادێشی",bo:"تەبەتی",br:"برێتونی",brx:"بۆدۆ",bs:"بۆسنی",bug:"بووگی",byn:"بلین",ca:"كاتالۆنی",ce:"چیچانی",ceb:"سێبوانۆ",cgg:"کیگا",ch:"چامۆرۆ",chk:"چووکی",chm:"ماری",cho:"چۆکتاو",chr:"چێرۆکی",chy:"شایان",ckb:"کوردیی ناوەندی",co:"کۆرسیکی",crs:"فەرەنسیی سیشێلی",cs:"چێکی",cu:"سلاویی کلیسەیی",cv:"چووڤاشی",cy:"وێلزی",da:"دانماركی",dak:"داکۆتایی",dar:"دارگینی",dav:"تایتا",de:"ئەڵمانی","de-AT":"ئەڵمانی (نەمسا)","de-CH":"ئەڵمانی (سویسڕا)",dgr:"دۆگریب",dje:"زارما",dsb:"سربیی خوارین",dua:"دووالا",dv:"دیڤێهی",dyo:"جۆلافۆنی",dz:"دزوونگخا",dzg:"دازا",ebu:"ئێمبوو",ee:"ئێوێیی",efi:"ئێفیک",eka:"ئێکاجووک",el:"یۆنانی",en:"ئینگلیزی","en-AU":"ئینگلیزیی ئۆسترالیایی","en-CA":"ئینگلیزیی کەنەدایی","en-GB":"ئینگلیزیی بریتانیایی","en-US":"ئینگلیزیی ئەمەریکایی",eo:"ئێسپیرانتۆ",es:"ئیسپانی","es-419":"ئیسپانی (ئەمەریکای لاتین)","es-ES":"ئیسپانی (ئیسپانیا)","es-MX":"ئیسپانی (مەکسیک)",et:"ئیستۆنی",eu:"باسکی",ewo:"ئێوۆندۆ",fa:"فارسی",ff:"فوولایی",fi:"فینلەندی",fil:"فیلیپینی",fj:"فیجی",fo:"فەرۆیی",fon:"فۆنی",fr:"فەرەنسی","fr-CA":"فەرەنسی (کەنەدا)","fr-CH":"فەرەنسی (سویسڕا)",fur:"فریئوولی",fy:"فریسیی ڕۆژاوا",ga:"ئیرلەندی",gaa:"گایی",gd:"گه‌لیكی سكۆتله‌ندی",gez:"گیزی",gil:"گیلبێرتی",gl:"گالیسی",gn:"گووارانی",gor:"گۆرۆنتالی",gsw:"ئەڵمانیی سویسڕا",gu:"گوجاراتی",guz:"گووسی",gv:"مانکی",gwi:"گویچین",ha:"هائووسا",haw:"هاوایی",he:"عیبری",hi:"هیندی",hil:"هیلیگاینۆن",hmn:"همۆنگ",hr:"كرواتی",hsb:"سربیی سەروو",ht:"کریولی هائیتی",hu:"هەنگاری",hup:"هووپا",hy:"ئەرمەنی",hz:"هێرێرۆ",ia:"ئینترلینگووا",iba:"ئیبان",ibb:"ئیبیبۆ",id:"ئیندۆنیزی",ig:"ئیگبۆ",ii:"سیچوان یی",ilo:"ئیلۆکۆ",inh:"ئینگووش",io:"ئیدۆ",is:"ئیسلەندی",it:"ئیتالی",iu:"ئینوکتیتوت",ja:"ژاپۆنی",jbo:"لۆژبان",jgo:"نگۆمبا",jmc:"ماچامێ",jv:"جاڤایی",ka:"گۆرجستانی",kab:"کبائیلی",kac:"کاچین",kaj:"کیجوو",kam:"کامبا",kbd:"کاباردی",kcg:"تیاپ",kde:"ماکۆندە",kea:"کابووڤێردیانۆ",kfo:"کۆرۆ",kha:"کهاسی",khq:"کۆیرا چینی",ki:"کیکوویوو",kj:"کوانیاما",kk:"کازاخی",kkj:"کاکۆ",kl:"کالالیسووت",kln:"کالێنجین",km:"خمێر",kmb:"کیمبووندوو",kn:"کاننادا",ko:"كۆری",kok:"کۆنکانی",kpe:"کپێلێ",kr:"کانووری",krc:"کاراچای بالکار",krl:"کارێلی",kru:"کوورووخ",ks:"کەشمیری",ksb:"شامابالا",ksf:"بافیا",ksh:"کۆلۆنی",ku:"کوردی",kum:"کوومیک",kv:"کۆمی",kw:"کۆڕنی",ky:"كرگیزی",la:"لاتینی",lad:"لادینۆ",lag:"لانگی",lb:"لوکسەمبورگی",lez:"لەزگی",lg:"گاندا",li:"لیمبورگی",lkt:"لاکۆتا",ln:"لينگالا",lo:"لائۆیی",loz:"لۆزی",lrc:"لوڕیی باکوور",lt:"لیتوانی",lu:"لووبا کاتانگا",lua:"لووبا لوولووا",lun:"لووندا",luo:"لووئۆ",lus:"میزۆ",luy:"لوویا",lv:"لێتۆنی",mad:"مادووری",mag:"ماگاهی",mai:"مائیتیلی",mak:"ماکاسار",mas:"ماسایی",mdf:"مۆکشا",men:"مێندێ",mer:"مێروو",mfe:"مۆریسی",mg:"مالاگاسی",mgh:"ماخوامیتۆ",mgo:"مێتە",mh:"مارشاڵی",mi:"مائۆری",mic:"میکماک",min:"مینانکاباو",mk:"ماكێدۆنی",ml:"مالایالام",mn:"مەنگۆلی",mni:"مانیپووری",moh:"مۆهاوک",mos:"مۆسی",mr:"ماراتی",ms:"مالیزی",mt:"ماڵتی",mua:"موندانگ",mus:"کریک",mwl:"میراندی",my:"میانماری",myv:"ئێرزیا",mzn:"مازەندەرانی",na:"نائوروو",nap:"ناپۆلی",naq:"ناما",nb:"نەرویژیی بۆکمال",nd:"ئندێبێلێی باکوور","nds-NL":"nds (ھۆڵەندا)",ne:"نیپالی","new":"نێواری",ng:"ندۆنگا",nia:"نیاس",niu:"نیئوویی",nl:"هۆڵەندی","nl-BE":"فلێمی",nmg:"کواسیۆ",nn:"نەرویژیی نینۆرسک",nnh:"نگیمبوون",no:"نۆروێژی",nog:"نۆگای",nqo:"نکۆ",nr:"ئندێبێلێی باشوور",nso:"سۆتۆی باکوور",nus:"نوێر",nv:"ناڤاجۆ",ny:"نیانجا",nyn:"نیانکۆلێ",oc:"ئۆکسیتانی",om:"ئۆرۆمۆ",or:"ئۆدیا",os:"ئۆسێتی",pa:"پەنجابی",pag:"پانگاسینان",pam:"پامپانگا",pap:"پاپیامێنتۆ",pau:"پالائوویی",pcm:"پیجینی نیجریا",pl:"پۆڵەندی",prg:"پڕووسی",ps:"پەشتوو",pt:"پورتوگالی","pt-BR":"پورتوگالی (برازیل)","pt-PT":"پورتوگالی (پورتوگال)",qu:"کێچوا",quc:"کیچەیی",rap:"ڕاپانوویی",rar:"ڕاڕۆتۆنگان",rm:"ڕۆمانش",rn:"ڕووندی",ro:"ڕۆمانی","ro-MD":"مۆڵداڤی",rof:"ڕۆمبۆ",root:"ڕووت",ru:"ڕووسی",rup:"ئارمۆمانی",rw:"کینیارواندا",rwk:"ڕوا",sa:"سانسکريت",sad:"سانداوێ",sah:"ساخا",saq:"سامبووروو",sat:"سانتالی",sba:"نگامبای",sbp:"سانگوو",sc:"ساردینی",scn:"سیسیلی",sco:"سکۆتس",sd:"سيندی",sdh:"کوردیی باشووری",se:"سامیی باکوور",seh:"سێنا",ses:"کۆیرابۆرۆ سێنی",sg:"سانگۆ",shi:"شیلها",shn:"شان",si:"سینهالی",sk:"سلۆڤاكی",sl:"سلۆڤێنی",sm:"سامۆیی",sma:"سامیی باشوور",smj:"لوولێ سامی",smn:"ئیناری سامی",sms:"سامیی سکۆڵت",sn:"شۆنا",snk:"سۆنینکێ",so:"سۆمالی",sq:"ئەڵبانی",sr:"سربی",srn:"سرانان تۆنگۆ",ss:"سواتی",ssy:"ساهۆ",st:"سۆتۆی باشوور",su:"سوندانی",suk:"سووکووما",sv:"سویدی",sw:"سواهیلی","sw-CD":"سواهیلیی کۆنگۆ",swb:"کۆمۆری",syr:"سریانی",ta:"تامیلی",te:"تێلووگوو",tem:"تیمنێ",teo:"تێسوو",tet:"تێتووم",tg:"تاجیکی",th:"تایلەندی",ti:"تیگرینیا",tig:"تیگرێ",tk:"تورکمانی",tlh:"كلینگۆن",tn:"تسوانا",to:"تۆنگان",tpi:"تۆکپیسین",tr:"تورکی",trv:"تارۆکۆ",ts:"تسۆنگا",tt:"تاتاری",tum:"تومبووکا",tvl:"تووڤالوو",twq:"تاساواک",ty:"تاهیتی",tyv:"تووڤینی",tzm:"ئەمازیغی ناوەڕاست",udm:"ئوودموورت",ug:"ئۆیخۆری",uk:"ئۆكراینی",umb:"ئومبووندوو",ur:"ئۆردوو",uz:"ئوزبەکی",vai:"ڤایی",ve:"ڤێندا",vi:"ڤیەتنامی",vo:"ڤۆلاپووک",vun:"ڤوونجوو",wa:"والوون",wae:"والسێر",wal:"وۆلایتا",war:"وارای",wo:"وۆلۆف",xal:"کالمیک",xh:"سسوسا",xog:"سۆگا",yav:"یانگبێن",ybb:"یێمبا",yi:"ییدیش",yo:"یۆرووبا",yue:"کانتۆنی",zgh:"ئەمازیغیی مەغریب",zh:"چینی","zh-Hans":"چینی (ئاسانکراو)","zh-Hant":"چینی (دێرین)",zu:"زوولوو",zun:"زوونی",zza:"زازا"},scriptNames:{Cyrl:"سریلیک",Latn:"لاتینی",Arab:"عەرەبی",Guru:"گورموکھی",Hans:"ئاسانکراو",Hant:"دێرین"}},cs:{rtl:false,languageNames:{aa:"afarština",ab:"abcházština",ace:"acehština",ach:"akolština",ada:"adangme",ady:"adygejština",ae:"avestánština",aeb:"arabština (tuniská)",af:"afrikánština",afh:"afrihili",agq:"aghem",ain:"ainština",ak:"akanština",akk:"akkadština",akz:"alabamština",ale:"aleutština",aln:"albánština (Gheg)",alt:"altajština (jižní)",am:"amharština",an:"aragonština",ang:"staroangličtina",anp:"angika",ar:"arabština","ar-001":"arabština (moderní standardní)",arc:"aramejština",arn:"mapudungun",aro:"araonština",arp:"arapažština",arq:"arabština (alžírská)",ars:"arabština (Nadžd)",arw:"arawacké jazyky",ary:"arabština (marocká)",arz:"arabština (egyptská)",as:"ásámština",asa:"asu",ase:"znaková řeč (americká)",ast:"asturština",av:"avarština",avk:"kotava",awa:"awadhština",ay:"ajmarština",az:"ázerbájdžánština",ba:"baškirština",bal:"balúčština",ban:"balijština",bar:"bavorština",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"běloruština",bej:"bedža",bem:"bembština",bew:"batavština",bez:"bena",bfd:"bafut",bfq:"badagština",bg:"bulharština",bgn:"balúčština (západní)",bho:"bhódžpurština",bi:"bislamština",bik:"bikolština",bin:"bini",bjn:"bandžarština",bkm:"kom",bla:"siksika",bm:"bambarština",bn:"bengálština",bo:"tibetština",bpy:"bišnuprijskomanipurština",bqi:"bachtijárština",br:"bretonština",bra:"bradžština",brh:"brahujština",brx:"bodoština",bs:"bosenština",bss:"akoose",bua:"burjatština",bug:"bugiština",bum:"bulu",byn:"blinština",byv:"medumba",ca:"katalánština",cad:"caddo",car:"karibština",cay:"kajugština",cch:"atsam",ccp:"čakma",ce:"čečenština",ceb:"cebuánština",cgg:"kiga",ch:"čamoro",chb:"čibča",chg:"čagatajština",chk:"čukština",chm:"marijština",chn:"činuk pidžin",cho:"čoktština",chp:"čipevajština",chr:"čerokézština",chy:"čejenština",ckb:"kurdština (sorání)",co:"korsičtina",cop:"koptština",cps:"kapiznonština",cr:"kríjština",crh:"turečtina (krymská)",crs:"kreolština (seychelská)",cs:"čeština",csb:"kašubština",cu:"staroslověnština",cv:"čuvaština",cy:"velština",da:"dánština",dak:"dakotština",dar:"dargština",dav:"taita",de:"němčina","de-AT":"němčina (Rakousko)","de-CH":"němčina standardní (Švýcarsko)",del:"delawarština",den:"slejvština (athabaský jazyk)",dgr:"dogrib",din:"dinkština",dje:"zarmština",doi:"dogarština",dsb:"dolnolužická srbština",dtp:"kadazandusunština",dua:"dualština",dum:"holandština (středověká)",dv:"maledivština",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkä",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efikština",egl:"emilijština",egy:"egyptština stará",eka:"ekajuk",el:"řečtina",elx:"elamitština",en:"angličtina","en-AU":"angličtina (Austrálie)","en-CA":"angličtina (Kanada)","en-GB":"angličtina (Velká Británie)","en-US":"angličtina (USA)",enm:"angličtina (středověká)",eo:"esperanto",es:"španělština","es-419":"španělština (Latinská Amerika)","es-ES":"španělština (Evropa)","es-MX":"španělština (Mexiko)",esu:"jupikština (středoaljašská)",et:"estonština",eu:"baskičtina",ewo:"ewondo",ext:"extremadurština",fa:"perština",fan:"fang",fat:"fantština",ff:"fulbština",fi:"finština",fil:"filipínština",fit:"finština (tornedalská)",fj:"fidžijština",fo:"faerština",fon:"fonština",fr:"francouzština","fr-CA":"francouzština (Kanada)","fr-CH":"francouzština (Švýcarsko)",frc:"francouzština (cajunská)",frm:"francouzština (středověká)",fro:"francouzština (stará)",frp:"franko-provensálština",frr:"fríština (severní)",frs:"fríština (východní)",fur:"furlanština",fy:"fríština (západní)",ga:"irština",gaa:"gaština",gag:"gagauzština",gan:"čínština (dialekty Gan)",gay:"gayo",gba:"gbaja",gbz:"daríjština (zoroastrijská)",gd:"skotská gaelština",gez:"geez",gil:"kiribatština",gl:"galicijština",glk:"gilačtina",gmh:"hornoněmčina (středověká)",gn:"guaranština",goh:"hornoněmčina (stará)",gom:"konkánština (Goa)",gon:"góndština",gor:"gorontalo",got:"gótština",grb:"grebo",grc:"starořečtina",gsw:"němčina (Švýcarsko)",gu:"gudžarátština",guc:"wayúuština",gur:"frafra",guz:"gusii",gv:"manština",gwi:"gwichʼin",ha:"hauština",hai:"haidština",hak:"čínština (dialekty Hakka)",haw:"havajština",he:"hebrejština",hi:"hindština",hif:"hindština (Fidži)",hil:"hiligajnonština",hit:"chetitština",hmn:"hmongština",ho:"hiri motu",hr:"chorvatština",hsb:"hornolužická srbština",hsn:"čínština (dialekty Xiang)",ht:"haitština",hu:"maďarština",hup:"hupa",hy:"arménština",hz:"hererština",ia:"interlingua",iba:"ibanština",ibb:"ibibio",id:"indonéština",ie:"interlingue",ig:"igboština",ii:"iština (sečuánská)",ik:"inupiakština",ilo:"ilokánština",inh:"inguština",io:"ido",is:"islandština",it:"italština",iu:"inuktitutština",izh:"ingrijština",ja:"japonština",jam:"jamajská kreolština",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"judeoperština",jrb:"judeoarabština",jut:"jutština",jv:"javánština",ka:"gruzínština",kaa:"karakalpačtina",kab:"kabylština",kac:"kačijština",kaj:"jju",kam:"kambština",kaw:"kawi",kbd:"kabardinština",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdština",ken:"kenyang",kfo:"koro",kg:"konžština",kgp:"kaingang",kha:"khásí",kho:"chotánština",khq:"koyra chiini",khw:"chovarština",ki:"kikujština",kiu:"zazakština",kj:"kuaňamština",kk:"kazaština",kkj:"kako",kl:"grónština",kln:"kalendžin",km:"khmérština",kmb:"kimbundština",kn:"kannadština",ko:"korejština",koi:"komi-permjačtina",kok:"konkánština",kos:"kosrajština",kpe:"kpelle",kr:"kanuri",krc:"karačajevo-balkarština",kri:"krio",krj:"kinaraj-a",krl:"karelština",kru:"kuruchština",ks:"kašmírština",ksb:"šambala",ksf:"bafia",ksh:"kolínština",ku:"kurdština",kum:"kumyčtina",kut:"kutenajština",kv:"komijština",kw:"kornština",ky:"kyrgyzština",la:"latina",lad:"ladinština",lag:"langi",lah:"lahndština",lam:"lambština",lb:"lucemburština",lez:"lezginština",lfn:"lingua franca nova",lg:"gandština",li:"limburština",lij:"ligurština",liv:"livonština",lkt:"lakotština",lmo:"lombardština",ln:"lingalština",lo:"laoština",lol:"mongština",lou:"kreolština (Louisiana)",loz:"lozština",lrc:"lúrština (severní)",lt:"litevština",ltg:"latgalština",lu:"lubu-katanžština",lua:"luba-luluaština",lui:"luiseňo",lun:"lundština",luo:"luoština",lus:"mizoština",luy:"luhja",lv:"lotyština",lzh:"čínština (klasická)",lzz:"lazština",mad:"madurština",maf:"mafa",mag:"magahijština",mai:"maithiliština",mak:"makasarština",man:"mandingština",mas:"masajština",mde:"maba",mdf:"mokšanština",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijská kreolština",mg:"malgaština",mga:"irština (středověká)",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršálština",mi:"maorština",mic:"micmac",min:"minangkabau",mk:"makedonština",ml:"malajálamština",mn:"mongolština",mnc:"mandžuština",mni:"manipurština",moh:"mohawkština",mos:"mosi",mr:"maráthština",mrj:"marijština (západní)",ms:"malajština",mt:"maltština",mua:"mundang",mus:"kríkština",mwl:"mirandština",mwr:"márvárština",mwv:"mentavajština",my:"barmština",mye:"myene",myv:"erzjanština",mzn:"mázandaránština",na:"naurština",nan:"čínština (dialekty Minnan)",nap:"neapolština",naq:"namaština",nb:"norština (bokmål)",nd:"ndebele (Zimbabwe)",nds:"dolnoněmčina","nds-NL":"dolnosaština",ne:"nepálština","new":"névárština",ng:"ndondština",nia:"nias",niu:"niueština",njo:"ao (jazyky Nágálandu)",nl:"nizozemština","nl-BE":"vlámština",nmg:"kwasio",nn:"norština (nynorsk)",nnh:"ngiemboon",no:"norština",nog:"nogajština",non:"norština historická",nov:"novial",nqo:"n’ko",nr:"ndebele (Jižní Afrika)",nso:"sotština (severní)",nus:"nuerština",nv:"navažština",nwc:"newarština (klasická)",ny:"ňandžština",nym:"ňamwežština",nyn:"ňankolština",nyo:"ňorština",nzi:"nzima",oc:"okcitánština",oj:"odžibvejština",om:"oromština",or:"urijština",os:"osetština",osa:"osage",ota:"turečtina (osmanská)",pa:"paňdžábština",pag:"pangasinanština",pal:"pahlavština",pam:"papangau",pap:"papiamento",pau:"palauština",pcd:"picardština",pcm:"nigerijský pidžin",pdc:"němčina (pensylvánská)",pdt:"němčina (plautdietsch)",peo:"staroperština",pfl:"falčtina",phn:"féničtina",pi:"pálí",pl:"polština",pms:"piemonština",pnt:"pontština",pon:"pohnpeiština",prg:"pruština",pro:"provensálština",ps:"paštština",pt:"portugalština","pt-BR":"portugalština (Brazílie)","pt-PT":"portugalština (Evropa)",qu:"kečuánština",quc:"kičé",qug:"kečuánština (chimborazo)",raj:"rádžastánština",rap:"rapanujština",rar:"rarotongánština",rgn:"romaňolština",rif:"rífština",rm:"rétorománština",rn:"kirundština",ro:"rumunština","ro-MD":"moldavština",rof:"rombo",rom:"romština",root:"kořen",rtm:"rotumanština",ru:"ruština",rue:"rusínština",rug:"rovianština",rup:"arumunština",rw:"kiňarwandština",rwk:"rwa",sa:"sanskrt",sad:"sandawština",sah:"jakutština",sam:"samarština",saq:"samburu",sas:"sasakština",sat:"santálština",saz:"saurášterština",sba:"ngambay",sbp:"sangoština",sc:"sardština",scn:"sicilština",sco:"skotština",sd:"sindhština",sdc:"sassarština",sdh:"kurdština (jižní)",se:"sámština (severní)",see:"seneca",seh:"sena",sei:"seriština",sel:"selkupština",ses:"koyraboro senni",sg:"sangština",sga:"irština (stará)",sgs:"žemaitština",sh:"srbochorvatština",shi:"tašelhit",shn:"šanština",shu:"arabština (čadská)",si:"sinhálština",sid:"sidamo",sk:"slovenština",sl:"slovinština",sli:"němčina (slezská)",sly:"selajarština",sm:"samojština",sma:"sámština (jižní)",smj:"sámština (lulejská)",smn:"sámština (inarijská)",sms:"sámština (skoltská)",sn:"šonština",snk:"sonikština",so:"somálština",sog:"sogdština",sq:"albánština",sr:"srbština",srn:"sranan tongo",srr:"sererština",ss:"siswatština",ssy:"saho",st:"sotština (jižní)",stq:"fríština (saterlandská)",su:"sundština",suk:"sukuma",sus:"susu",sux:"sumerština",sv:"švédština",sw:"svahilština","sw-CD":"svahilština (Kongo)",swb:"komorština",syc:"syrština (klasická)",syr:"syrština",szl:"slezština",ta:"tamilština",tcy:"tuluština",te:"telugština",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumština",tg:"tádžičtina",th:"thajština",ti:"tigrinijština",tig:"tigrejština",tiv:"tivština",tk:"turkmenština",tkl:"tokelauština",tkr:"cachurština",tl:"tagalog",tlh:"klingonština",tli:"tlingit",tly:"talyština",tmh:"tamašek",tn:"setswanština",to:"tongánština",tog:"tonžština (nyasa)",tpi:"tok pisin",tr:"turečtina",tru:"turojština",trv:"taroko",ts:"tsonga",tsd:"tsakonština",tsi:"tsimšijské jazyky",tt:"tatarština",ttt:"tatština",tum:"tumbukština",tvl:"tuvalština",tw:"twi",twq:"tasawaq",ty:"tahitština",tyv:"tuvinština",tzm:"tamazight (střední Maroko)",udm:"udmurtština",ug:"ujgurština",uga:"ugaritština",uk:"ukrajinština",umb:"umbundu",ur:"urdština",uz:"uzbečtina",ve:"venda",vec:"benátština",vep:"vepština",vi:"vietnamština",vls:"vlámština (západní)",vmf:"němčina (mohansko-franské dialekty)",vo:"volapük",vot:"votština",vro:"võruština",vun:"vunjo",wa:"valonština",wae:"němčina (walser)",wal:"wolajtština",war:"warajština",was:"waština",wbp:"warlpiri",wo:"wolofština",wuu:"čínština (dialekty Wu)",xal:"kalmyčtina",xh:"xhoština",xmf:"mingrelština",xog:"sogština",yao:"jaoština",yap:"japština",yav:"jangbenština",ybb:"yemba",yi:"jidiš",yo:"jorubština",yrl:"nheengatu",yue:"kantonština",za:"čuangština",zap:"zapotéčtina",zbl:"bliss systém",zea:"zélandština",zen:"zenaga",zgh:"tamazight (standardní marocký)",zh:"čínština","zh-Hans":"standardní čínština (zjednodušená)","zh-Hant":"standardní čínština (tradiční)",zu:"zuluština",zun:"zunijština",zza:"zaza"},scriptNames:{Cyrl:"cyrilice",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Tfng:"berberské",Vaii:"vai",Hans:"zjednodušené",Hant:"tradiční"}},cy:{rtl:false,languageNames:{aa:"Affareg",ab:"Abchaseg",ace:"Acehneg",ach:"Acoli",ada:"Adangmeg",ady:"Circaseg Gorllewinol",ae:"Afestaneg",aeb:"Arabeg Tunisia",af:"Affricâneg",afh:"Affrihili",agq:"Aghemeg",ain:"Ainŵeg",ak:"Acaneg",akk:"Acadeg",akz:"Alabamäeg",ale:"Alewteg",aln:"Ghegeg Albania",alt:"Altäeg Deheuol",am:"Amhareg",an:"Aragoneg",ang:"Hen Saesneg",anp:"Angika",ar:"Arabeg","ar-001":"Arabeg Modern Safonol",arc:"Aramaeg",arn:"Arawcaneg",aro:"Araonaeg",arp:"Arapaho",arq:"Arabeg Algeria",arw:"Arawaceg",ary:"Arabeg Moroco",arz:"Arabeg yr Aifft",as:"Asameg",asa:"Asw",ase:"Iaith Arwyddion America",ast:"Astwrianeg",av:"Afareg",awa:"Awadhi",ay:"Aymareg",az:"Aserbaijaneg","az-Arab":"Aserbaijaneg Deheuol",ba:"Bashcorteg",bal:"Balwtsi",ban:"Balïeg",bas:"Basâeg",bax:"Bamwmeg",be:"Belarwseg",bej:"Bejäeg",bem:"Bembeg",bez:"Bena",bfd:"Baffwteg",bfq:"Badaga",bg:"Bwlgareg",bgn:"Balochi Gorllewinol",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Comeg",bla:"Siksika",bm:"Bambareg",bn:"Bengaleg",bo:"Tibeteg",br:"Llydaweg",brh:"Brahui",brx:"Bodo",bs:"Bosnieg",bss:"Acwseg",bua:"Bwriateg",bug:"Bwginaeg",bum:"Bwlw",byn:"Blin",ca:"Catalaneg",cad:"Cado",car:"Caribeg",cch:"Atsameg",ccp:"Tsiacma",ce:"Tsietsieneg",ceb:"Cebuano",cgg:"Tsiga",ch:"Tsiamorro",chk:"Chuukaeg",chm:"Marieg",cho:"Siocto",chr:"Tsierocî",chy:"Cheyenne",ckb:"Cwrdeg Sorani",co:"Corseg",cop:"Copteg",cr:"Cri",crh:"Tyrceg y Crimea",crs:"Ffrangeg Seselwa Creole",cs:"Tsieceg",cu:"Hen Slafoneg",cv:"Tshwfasheg",cy:"Cymraeg",da:"Daneg",dak:"Dacotaeg",dar:"Dargwa",dav:"Taita",de:"Almaeneg","de-AT":"Almaeneg Awstria","de-CH":"Almaeneg Safonol y Swistir",dgr:"Dogrib",din:"Dinca",dje:"Sarmaeg",doi:"Dogri",dsb:"Sorbeg Isaf",dua:"Diwaleg",dum:"Iseldireg Canol",dv:"Difehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embw",ee:"Ewe",efi:"Efik",egy:"Hen Eiffteg",eka:"Ekajuk",el:"Groeg",elx:"Elameg",en:"Saesneg","en-AU":"Saesneg Awstralia","en-CA":"Saesneg Canada","en-GB":"Saesneg Prydain","en-US":"Saesneg America",enm:"Saesneg Canol",eo:"Esperanto",es:"Sbaeneg","es-419":"Sbaeneg America Ladin","es-ES":"Sbaeneg Ewrop","es-MX":"Sbaeneg Mecsico",et:"Estoneg",eu:"Basgeg",ewo:"Ewondo",ext:"Extremadureg",fa:"Perseg",fat:"Ffanti",ff:"Ffwla",fi:"Ffinneg",fil:"Ffilipineg",fit:"Ffinneg Tornedal",fj:"Ffijïeg",fo:"Ffaröeg",fon:"Fon",fr:"Ffrangeg","fr-CA":"Ffrangeg Canada","fr-CH":"Ffrangeg y Swistir",frc:"Ffrangeg Cajwn",frm:"Ffrangeg Canol",fro:"Hen Ffrangeg",frp:"Arpitaneg",frr:"Ffriseg Gogleddol",frs:"Ffriseg y Dwyrain",fur:"Ffriwleg",fy:"Ffriseg y Gorllewin",ga:"Gwyddeleg",gaa:"Ga",gag:"Gagauz",gay:"Gaio",gba:"Gbaia",gbz:"Dareg y Zoroastriaid",gd:"Gaeleg yr Alban",gez:"Geez",gil:"Gilberteg",gl:"Galisieg",gmh:"Almaeneg Uchel Canol",gn:"Guaraní",goh:"Hen Almaeneg Uchel",gor:"Gorontalo",got:"Gotheg",grc:"Hen Roeg",gsw:"Almaeneg y Swistir",gu:"Gwjarati",guz:"Gusii",gv:"Manaweg",gwi:"Gwichʼin",ha:"Hawsa",hai:"Haida",haw:"Hawäieg",he:"Hebraeg",hi:"Hindi",hil:"Hiligaynon",hit:"Hetheg",hmn:"Hmongeg",hr:"Croateg",hsb:"Sorbeg Uchaf",ht:"Creol Haiti",hu:"Hwngareg",hup:"Hupa",hy:"Armeneg",hz:"Herero",ia:"Interlingua",iba:"Ibaneg",ibb:"Ibibio",id:"Indoneseg",ie:"Interlingue",ig:"Igbo",ii:"Nwosw",ik:"Inwpiaceg",ilo:"Ilocaneg",inh:"Ingwsieg",io:"Ido",is:"Islandeg",it:"Eidaleg",iu:"Inwctitwt",ja:"Japaneeg",jbo:"Lojban",jgo:"Ngomba",jmc:"Matsiame",jpr:"Iddew-Bersieg",jrb:"Iddew-Arabeg",jv:"Jafanaeg",ka:"Georgeg",kaa:"Cara-Calpaceg",kab:"Cabileg",kac:"Kachin",kaj:"Jju",kam:"Camba",kbd:"Cabardieg",kcg:"Tyapeg",kde:"Macondeg",kea:"Caboferdianeg",kfo:"Koro",kg:"Congo",kha:"Càseg",khq:"Koyra Chiini",khw:"Chowareg",ki:"Kikuyu",kj:"Kuanyama",kk:"Casacheg",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Chmereg",kmb:"Kimbundu",kn:"Kannada",ko:"Coreeg",koi:"Komi-Permyak",kok:"Concani",kpe:"Kpelle",kr:"Canwri",krc:"Karachay-Balkar",krl:"Careleg",kru:"Kurukh",ks:"Cashmireg",ksb:"Shambala",ksf:"Baffia",ksh:"Cwleneg",ku:"Cwrdeg",kum:"Cwmiceg",kv:"Comi",kw:"Cernyweg",ky:"Cirgiseg",la:"Lladin",lad:"Iddew-Sbaeneg",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Lwcsembwrgeg",lez:"Lezgheg",lg:"Ganda",li:"Limbwrgeg",lkt:"Lakota",lmo:"Lombardeg",ln:"Lingala",lo:"Laoeg",lol:"Mongo",loz:"Lozi",lrc:"Luri Gogleddol",lt:"Lithwaneg",ltg:"Latgaleg",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lwnda",luo:"Lŵo",lus:"Lwshaieg",luy:"Lwyia",lv:"Latfieg",mad:"Madwreg",mag:"Magahi",mai:"Maithili",mak:"Macasareg",man:"Mandingo",mas:"Masai",mdf:"Mocsia",mdr:"Mandareg",men:"Mendeg",mer:"Mêrw",mfe:"Morisyen",mg:"Malagaseg",mga:"Gwyddeleg Canol",mgh:"Makhuwa-Meetto",mgo:"Meta",mh:"Marsialeg",mi:"Maori",mic:"Micmaceg",min:"Minangkabau",mk:"Macedoneg",ml:"Malayalam",mn:"Mongoleg",mnc:"Manshw",mni:"Manipwri",moh:"Mohoceg",mos:"Mosi",mr:"Marathi",mrj:"Mari Gorllewinol",ms:"Maleieg",mt:"Malteg",mua:"Mundang",mus:"Creek",mwl:"Mirandeg",mwr:"Marwari",my:"Byrmaneg",myv:"Erzya",mzn:"Masanderani",na:"Nawrŵeg",nap:"Naplieg",naq:"Nama",nb:"Norwyeg Bokmål",nd:"Ndebele Gogleddol",nds:"Almaeneg Isel","nds-NL":"Sacsoneg Isel",ne:"Nepaleg","new":"Newaeg",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Iseldireg","nl-BE":"Fflemeg",nmg:"Kwasio",nn:"Norwyeg Nynorsk",nnh:"Ngiemboon",no:"Norwyeg",nog:"Nogai",non:"Hen Norseg",nqo:"N’Ko",nr:"Ndebele Deheuol",nso:"Sotho Gogleddol",nus:"Nŵereg",nv:"Nafaho",nwc:"Hen Newari",ny:"Nianja",nym:"Niamwezi",nyn:"Niancole",nyo:"Nioro",nzi:"Nzimeg",oc:"Ocsitaneg",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Oseteg",osa:"Osageg",ota:"Tyrceg Otoman",pa:"Pwnjabeg",pag:"Pangasineg",pal:"Pahlafi",pam:"Pampanga",pap:"Papiamento",pau:"Palawan",pcd:"Picardeg",pcm:"Pidgin Nigeria",pdc:"Almaeneg Pensylfania",peo:"Hen Bersieg",pfl:"Almaeneg Palatin",phn:"Phoeniceg",pi:"Pali",pl:"Pwyleg",pms:"Piedmonteg",pnt:"Ponteg",pon:"Pohnpeianeg",prg:"Prwseg",pro:"Hen Brofensaleg",ps:"Pashto",pt:"Portiwgeeg","pt-BR":"Portiwgeeg Brasil","pt-PT":"Portiwgeeg Ewrop",qu:"Quechua",quc:"K’iche’",raj:"Rajasthaneg",rap:"Rapanŵi",rar:"Raratongeg",rm:"Románsh",rn:"Rwndi",ro:"Rwmaneg","ro-MD":"Moldofeg",rof:"Rombo",rom:"Romani",root:"Y Gwraidd",rtm:"Rotumaneg",ru:"Rwseg",rup:"Aromaneg",rw:"Ciniarŵandeg",rwk:"Rwa",sa:"Sansgrit",sad:"Sandäweg",sah:"Sakha",sam:"Aramaeg Samaria",saq:"Sambŵrw",sas:"Sasaceg",sat:"Santali",sba:"Ngambeieg",sbp:"Sangw",sc:"Sardeg",scn:"Sisileg",sco:"Sgoteg",sd:"Sindhi",sdc:"Sasareseg Sardinia",sdh:"Cwrdeg Deheuol",se:"Sami Gogleddol",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selcypeg",ses:"Koyraboro Senni",sg:"Sango",sga:"Hen Wyddeleg",sgs:"Samogiteg",sh:"Serbo-Croateg",shi:"Tachelhit",shn:"Shan",shu:"Arabeg Chad",si:"Sinhaleg",sid:"Sidamo",sk:"Slofaceg",sl:"Slofeneg",sli:"Is-silesieg",sm:"Samöeg",sma:"Sami Deheuol",smj:"Sami Lwle",smn:"Inari Sami",sms:"Sami Scolt",sn:"Shona",snk:"Soninceg",so:"Somaleg",sog:"Sogdeg",sq:"Albaneg",sr:"Serbeg",srn:"Sranan Tongo",srr:"Serereg",ss:"Swati",ssy:"Saho",st:"Sesotheg Deheuol",stq:"Ffriseg Saterland",su:"Swndaneg",suk:"Swcwma",sus:"Swsŵeg",sux:"Swmereg",sv:"Swedeg",sw:"Swahili","sw-CD":"Swahili’r Congo",swb:"Comoreg",syc:"Hen Syrieg",syr:"Syrieg",szl:"Silesieg",ta:"Tamileg",tcy:"Tulu",te:"Telugu",tem:"Timneg",teo:"Teso",ter:"Terena",tet:"Tetumeg",tg:"Tajiceg",th:"Thai",ti:"Tigrinya",tig:"Tigreg",tiv:"Tifeg",tk:"Tyrcmeneg",tkl:"Tocelaweg",tkr:"Tsakhureg",tl:"Tagalog",tlh:"Klingon",tli:"Llingit",tly:"Talysheg",tmh:"Tamasheceg",tn:"Tswana",to:"Tongeg",tpi:"Tok Pisin",tr:"Tyrceg",trv:"Taroko",ts:"Tsongaeg",tsd:"Tsaconeg",tt:"Tatareg",tum:"Twmbwca",tvl:"Twfalweg",tw:"Twi",twq:"Tasawaq",ty:"Tahitïeg",tyv:"Twfwnieg",tzm:"Tamazight Canol yr Atlas",udm:"Fotiaceg",ug:"Uighur",uga:"Wgariteg",uk:"Wcreineg",umb:"Umbundu",ur:"Wrdw",uz:"Wsbeceg",vai:"Faieg",ve:"Fendeg",vec:"Feniseg",vep:"Feps",vi:"Fietnameg",vls:"Fflemeg Gorllewinol",vo:"Folapük",vot:"Foteg",vun:"Funjo",wa:"Walwneg",wae:"Walsereg",wal:"Walamo",war:"Winarayeg",was:"Washo",wbp:"Warlpiri",wo:"Woloff",xal:"Calmyceg",xh:"Xhosa",xog:"Soga",yav:"Iangben",ybb:"Iembaeg",yi:"Iddew-Almaeneg",yo:"Iorwba",yue:"Cantoneeg",zap:"Zapoteceg",zbl:"Blisssymbols",zea:"Zêlandeg",zgh:"Tamaseit Safonol",zh:"Tsieinëeg","zh-Hans":"Tsieinëeg Mandarin Symledig","zh-Hant":"Tsieinëeg Mandarin Traddodiadol",zu:"Swlw",zun:"Swni",zza:"Sasäeg"},scriptNames:{Cyrl:"Cyrilig",Latn:"Lladin",Arab:"Arabaidd",Guru:"Gwrmwci",Hans:"Symledig",Hant:"Traddodiadol"}},da:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestan",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sydaltaisk",am:"amharisk",an:"aragonesisk",ang:"oldengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"aramæisk",arn:"mapudungun",arp:"arapaho",ars:"Najd-arabisk",arw:"arawak",as:"assamesisk",asa:"asu",ast:"asturisk",av:"avarisk",awa:"awadhi",ay:"aymara",az:"aserbajdsjansk",ba:"bashkir",bal:"baluchi",ban:"balinesisk",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"hviderussisk",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgarsk",bgn:"vestbaluchi",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"buriatisk",bug:"buginesisk",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalansk",cad:"caddo",car:"caribisk",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjensk",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krim-tyrkisk",crs:"seselwa (kreol-fransk)",cs:"tjekkisk",csb:"kasjubisk",cu:"kirkeslavisk",cv:"chuvash",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"østrigsk tysk","de-CH":"schweizerhøjtysk",del:"delaware",den:"athapaskisk",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"nedersorbisk",dua:"duala",dum:"middelhollandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"kiembu",ee:"ewe",efi:"efik",egy:"oldegyptisk",eka:"ekajuk",el:"græsk",elx:"elamitisk",en:"engelsk","en-AU":"australsk engelsk","en-CA":"canadisk engelsk","en-GB":"britisk engelsk","en-US":"amerikansk engelsk",enm:"middelengelsk",eo:"esperanto",es:"spansk","es-419":"latinamerikansk spansk","es-ES":"europæisk spansk","es-MX":"mexicansk spansk",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulah",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøsk",fr:"fransk","fr-CA":"canadisk fransk","fr-CH":"schweizisk fransk",frc:"cajunfransk",frm:"middelfransk",fro:"oldfransk",frr:"nordfrisisk",frs:"østfrisisk",fur:"friulian",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gag:"gagauzisk",gan:"gan-kinesisk",gay:"gayo",gba:"gbaya",gd:"skotsk gælisk",gez:"geez",gil:"gilbertesisk",gl:"galicisk",gmh:"middelhøjtysk",gn:"guarani",goh:"oldhøjtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"oldgræsk",gsw:"schweizertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka-kinesisk",haw:"hawaiiansk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hittitisk",hmn:"hmong",ho:"hirimotu",hr:"kroatisk",hsb:"øvresorbisk",hsn:"xiang-kinesisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaq",ilo:"iloko",inh:"ingush",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødisk-persisk",jrb:"jødisk-arabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabylisk",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdisk",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanesisk",khq:"koyra-chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",koi:"komi-permjakisk",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karatjai-balkar",krl:"karelsk",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdisk",kum:"kymyk",kut:"kutenaj",kv:"komi",kw:"cornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgsk",lez:"lezghian",lg:"ganda",li:"limburgsk",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana-kreolsk",loz:"lozi",lrc:"nordluri",lt:"litauisk",lu:"luba-Katanga",lua:"luba-Lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyana",lv:"lettisk",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassisk",mga:"middelirsk",mgh:"makhuwa-meetto",mgo:"meta",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathisk",ms:"malajisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",mye:"myene",myv:"erzya",mzn:"mazenisk",na:"nauru",nan:"min-kinesisk",nap:"napolitansk",naq:"nama",nb:"norsk bokmål",nd:"nordndebele",nds:"nedertysk","nds-NL":"nedertysk (Holland)",ne:"nepalesisk","new":"newari",ng:"ndonga",nia:"nias",niu:"niueansk",nl:"hollandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"oldislandsk",nqo:"n-ko",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro-sprog",nzi:"nzima",oc:"occitansk",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetisk",osa:"osage",ota:"osmannisk tyrkisk",pa:"punjabisk",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauansk",pcm:"nigeriansk pidgin",peo:"oldpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponape",prg:"preussisk",pro:"oldprovencalsk",ps:"pashto",pt:"portugisisk","pt-BR":"brasiliansk portugisisk","pt-PT":"europæisk portugisisk",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rætoromansk",rn:"rundi",ro:"rumænsk","ro-MD":"moldovisk",rof:"rombo",rom:"romani",root:"rod",ru:"russisk",rup:"arumænsk",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"yakut",sam:"samaritansk aramæisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",sdh:"sydkurdisk",se:"nordsamisk",see:"seneca",seh:"sena",sel:"selkupisk",ses:"koyraboro senni",sg:"sango",sga:"oldirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",shu:"tchadisk arabisk",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sydsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdiansk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"congolesisk swahili",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinya",tig:"tigre",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"tswana",to:"tongansk",tog:"nyasa tongansk",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshisk",tt:"tatarisk",tum:"tumbuka",tvl:"tuvaluansk",tw:"twi",twq:"tasawaq",ty:"tahitiansk",tyv:"tuvinian",tzm:"centralmarokkansk tamazight",udm:"udmurt",ug:"uygurisk",uga:"ugaristisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"walamo",war:"waray",was:"washo",wbp:"walbiri",wo:"wolof",wuu:"wu-kinesisk",xal:"kalmyk",xh:"isiXhosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"jiddisch",yo:"yoruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymboler",zen:"zenaga",zgh:"tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenklet)","zh-Hant":"kinesisk (traditionelt)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenklet",Hant:"traditionelt"}},de:{rtl:false,languageNames:{aa:"Afar",ab:"Abchasisch",ace:"Aceh",ach:"Acholi",ada:"Adangme",ady:"Adygeisch",ae:"Avestisch",aeb:"Tunesisches Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleutisch",aln:"Gegisch",alt:"Süd-Altaisch",am:"Amharisch",an:"Aragonesisch",ang:"Altenglisch",anp:"Angika",ar:"Arabisch","ar-001":"Modernes Hocharabisch",arc:"Aramäisch",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerisches Arabisch",ars:"Arabisch (Nadschd)",arw:"Arawak",ary:"Marokkanisches Arabisch",arz:"Ägyptisches Arabisch",as:"Assamesisch",asa:"Asu",ase:"Amerikanische Gebärdensprache",ast:"Asturianisch",av:"Awarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Aserbaidschanisch",ba:"Baschkirisch",bal:"Belutschisch",ban:"Balinesisch",bar:"Bairisch",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Weißrussisch",bej:"Bedauye",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarisch",bgn:"Westliches Belutschi",bho:"Bhodschpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjaresisch",bkm:"Kom",bla:"Blackfoot",bm:"Bambara",bn:"Bengalisch",bo:"Tibetisch",bpy:"Bishnupriya",bqi:"Bachtiarisch",br:"Bretonisch",bra:"Braj-Bhakha",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Burjatisch",bug:"Buginesisch",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanisch",cad:"Caddo",car:"Karibisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tschetschenisch",ceb:"Cebuano",cgg:"Rukiga",ch:"Chamorro",chb:"Chibcha",chg:"Tschagataisch",chk:"Chuukesisch",chm:"Mari",chn:"Chinook",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Zentralkurdisch",co:"Korsisch",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krimtatarisch",crs:"Seychellenkreol",cs:"Tschechisch",csb:"Kaschubisch",cu:"Kirchenslawisch",cv:"Tschuwaschisch",cy:"Walisisch",da:"Dänisch",dak:"Dakota",dar:"Darginisch",dav:"Taita",de:"Deutsch","de-AT":"Österreichisches Deutsch","de-CH":"Schweizer Hochdeutsch",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Niedersorbisch",dtp:"Zentral-Dusun",dua:"Duala",dum:"Mittelniederländisch",dv:"Dhivehi",dyo:"Diola",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilianisch",egy:"Ägyptisch",eka:"Ekajuk",el:"Griechisch",elx:"Elamisch",en:"Englisch","en-AU":"Englisch (Australien)","en-CA":"Englisch (Kanada)","en-GB":"Englisch (Vereinigtes Königreich)","en-US":"Englisch (Vereinigte Staaten)",enm:"Mittelenglisch",eo:"Esperanto",es:"Spanisch","es-419":"Spanisch (Lateinamerika)","es-ES":"Spanisch (Spanien)","es-MX":"Spanisch (Mexiko)",esu:"Zentral-Alaska-Yupik",et:"Estnisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremadurisch",fa:"Persisch",fan:"Pangwe",fat:"Fanti",ff:"Ful",fi:"Finnisch",fil:"Filipino",fit:"Meänkieli",fj:"Fidschi",fo:"Färöisch",fon:"Fon",fr:"Französisch","fr-CA":"Französisch (Kanada)","fr-CH":"Französisch (Schweiz)",frc:"Cajun",frm:"Mittelfranzösisch",fro:"Altfranzösisch",frp:"Frankoprovenzalisch",frr:"Nordfriesisch",frs:"Ostfriesisch",fur:"Friaulisch",fy:"Westfriesisch",ga:"Irisch",gaa:"Ga",gag:"Gagausisch",gan:"Gan",gay:"Gayo",gba:"Gbaya",gbz:"Gabri",gd:"Schottisches Gälisch",gez:"Geez",gil:"Kiribatisch",gl:"Galicisch",glk:"Gilaki",gmh:"Mittelhochdeutsch",gn:"Guaraní",goh:"Althochdeutsch",gom:"Goa-Konkani",gon:"Gondi",gor:"Mongondou",got:"Gotisch",grb:"Grebo",grc:"Altgriechisch",gsw:"Schweizerdeutsch",gu:"Gujarati",guc:"Wayúu",gur:"Farefare",guz:"Gusii",gv:"Manx",gwi:"Kutchin",ha:"Haussa",hai:"Haida",hak:"Hakka",haw:"Hawaiisch",he:"Hebräisch",hi:"Hindi",hif:"Fidschi-Hindi",hil:"Hiligaynon",hit:"Hethitisch",hmn:"Miao",ho:"Hiri-Motu",hr:"Kroatisch",hsb:"Obersorbisch",hsn:"Xiang",ht:"Haiti-Kreolisch",hu:"Ungarisch",hup:"Hupa",hy:"Armenisch",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiak",ilo:"Ilokano",inh:"Inguschisch",io:"Ido",is:"Isländisch",it:"Italienisch",iu:"Inuktitut",izh:"Ischorisch",ja:"Japanisch",jam:"Jamaikanisch-Kreolisch",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Jüdisch-Persisch",jrb:"Jüdisch-Arabisch",jut:"Jütisch",jv:"Javanisch",ka:"Georgisch",kaa:"Karakalpakisch",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardinisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongolesisch",kgp:"Kaingang",kha:"Khasi",kho:"Sakisch",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kwanyama",kk:"Kasachisch",kkj:"Kako",kl:"Grönländisch",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreanisch",koi:"Komi-Permjakisch",kok:"Konkani",kos:"Kosraeanisch",kpe:"Kpelle",kr:"Kanuri",krc:"Karatschaiisch-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Oraon",ks:"Kaschmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Kurdisch",kum:"Kumükisch",kut:"Kutenai",kv:"Komi",kw:"Kornisch",ky:"Kirgisisch",la:"Latein",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgisch",lez:"Lesgisch",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgisch",lij:"Ligurisch",liv:"Livisch",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotisch",lol:"Mongo",lou:"Kreol (Louisiana)",loz:"Lozi",lrc:"Nördliches Luri",lt:"Litauisch",ltg:"Lettgallisch",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luhya",lv:"Lettisch",lzh:"Klassisches Chinesisch",lzz:"Lasisch",mad:"Maduresisch",maf:"Mafa",mag:"Khotta",mai:"Maithili",mak:"Makassarisch",man:"Malinke",mas:"Massai",mde:"Maba",mdf:"Mokschanisch",mdr:"Mandaresisch",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Madagassisch",mga:"Mittelirisch",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marschallesisch",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Mazedonisch",ml:"Malayalam",mn:"Mongolisch",mnc:"Mandschurisch",mni:"Meithei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Bergmari",ms:"Malaiisch",mt:"Maltesisch",mua:"Mundang",mus:"Muskogee",mwl:"Mirandesisch",mwr:"Marwari",mwv:"Mentawai",my:"Birmanisch",mye:"Myene",myv:"Ersja-Mordwinisch",mzn:"Masanderanisch",na:"Nauruisch",nan:"Min Nan",nap:"Neapolitanisch",naq:"Nama",nb:"Norwegisch Bokmål",nd:"Nord-Ndebele",nds:"Niederdeutsch","nds-NL":"Niedersächsisch",ne:"Nepalesisch","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niue",njo:"Ao-Naga",nl:"Niederländisch","nl-BE":"Flämisch",nmg:"Kwasio",nn:"Norwegisch Nynorsk",nnh:"Ngiemboon",no:"Norwegisch",nog:"Nogai",non:"Altnordisch",nov:"Novial",nqo:"N’Ko",nr:"Süd-Ndebele",nso:"Nord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Alt-Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Okzitanisch",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetisch",osa:"Osage",ota:"Osmanisch",pa:"Punjabi",pag:"Pangasinan",pal:"Mittelpersisch",pam:"Pampanggan",pap:"Papiamento",pau:"Palau",pcd:"Picardisch",pcm:"Nigerianisches Pidgin",pdc:"Pennsylvaniadeutsch",pdt:"Plautdietsch",peo:"Altpersisch",pfl:"Pfälzisch",phn:"Phönizisch",pi:"Pali",pl:"Polnisch",pms:"Piemontesisch",pnt:"Pontisch",pon:"Ponapeanisch",prg:"Altpreußisch",pro:"Altprovenzalisch",ps:"Paschtu",pt:"Portugiesisch","pt-BR":"Portugiesisch (Brasilien)","pt-PT":"Portugiesisch (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Chimborazo Hochland-Quechua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonganisch",rgn:"Romagnol",rif:"Tarifit",rm:"Rätoromanisch",rn:"Rundi",ro:"Rumänisch","ro-MD":"Moldauisch",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumanisch",ru:"Russisch",rue:"Russinisch",rug:"Roviana",rup:"Aromunisch",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Jakutisch",sam:"Samaritanisch",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardisch",scn:"Sizilianisch",sco:"Schottisch",sd:"Sindhi",sdc:"Sassarisch",sdh:"Südkurdisch",se:"Nordsamisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkupisch",ses:"Koyra Senni",sg:"Sango",sga:"Altirisch",sgs:"Samogitisch",sh:"Serbo-Kroatisch",shi:"Taschelhit",shn:"Schan",shu:"Tschadisch-Arabisch",si:"Singhalesisch",sid:"Sidamo",sk:"Slowakisch",sl:"Slowenisch",sli:"Schlesisch (Niederschlesisch)",sly:"Selayar",sm:"Samoanisch",sma:"Südsamisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdisch",sq:"Albanisch",sr:"Serbisch",srn:"Srananisch",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Süd-Sotho",stq:"Saterfriesisch",su:"Sundanesisch",suk:"Sukuma",sus:"Susu",sux:"Sumerisch",sv:"Schwedisch",sw:"Suaheli","sw-CD":"Kongo-Swahili",swb:"Komorisch",syc:"Altsyrisch",syr:"Syrisch",szl:"Schlesisch (Wasserpolnisch)",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Temne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tadschikisch",th:"Thailändisch",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmenisch",tkl:"Tokelauanisch",tkr:"Tsachurisch",tl:"Tagalog",tlh:"Klingonisch",tli:"Tlingit",tly:"Talisch",tmh:"Tamaseq",tn:"Tswana",to:"Tongaisch",tog:"Nyasa Tonga",tpi:"Neumelanesisch",tr:"Türkisch",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tatarisch",ttt:"Tatisch",tum:"Tumbuka",tvl:"Tuvaluisch",tw:"Twi",twq:"Tasawaq",ty:"Tahitisch",tyv:"Tuwinisch",tzm:"Zentralatlas-Tamazight",udm:"Udmurtisch",ug:"Uigurisch",uga:"Ugaritisch",uk:"Ukrainisch",umb:"Umbundu",ur:"Urdu",uz:"Usbekisch",vai:"Vai",ve:"Venda",vec:"Venetisch",vep:"Wepsisch",vi:"Vietnamesisch",vls:"Westflämisch",vmf:"Mainfränkisch",vo:"Volapük",vot:"Wotisch",vro:"Võro",vun:"Vunjo",wa:"Wallonisch",wae:"Walliserdeutsch",wal:"Walamo",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu",xal:"Kalmückisch",xh:"Xhosa",xmf:"Mingrelisch",xog:"Soga",yao:"Yao",yap:"Yapesisch",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonesisch",za:"Zhuang",zap:"Zapotekisch",zbl:"Bliss-Symbole",zea:"Seeländisch",zen:"Zenaga",zgh:"Tamazight",zh:"Chinesisch","zh-Hans":"Mandarin (Vereinfacht)","zh-Hant":"Chinesisch (Traditionell)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Kyrillisch",Latn:"Lateinisch",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Vereinfacht",Hant:"Traditionell"}},dv:{rtl:true,languageNames:{},scriptNames:{}},el:{rtl:false,languageNames:{aa:"Αφάρ",ab:"Αμπχαζικά",ace:"Ατσινιζικά",ach:"Ακολί",ada:"Αντάνγκμε",ady:"Αντιγκέα",ae:"Αβεστάν",af:"Αφρικάανς",afh:"Αφριχίλι",agq:"Αγκέμ",ain:"Αϊνού",ak:"Ακάν",akk:"Ακάντιαν",ale:"Αλεούτ",alt:"Νότια Αλτάι",am:"Αμχαρικά",an:"Αραγονικά",ang:"Παλαιά Αγγλικά",anp:"Ανγκικά",ar:"Αραβικά","ar-001":"Σύγχρονα Τυπικά Αραβικά",arc:"Αραμαϊκά",arn:"Αραουκανικά",arp:"Αραπάχο",ars:"Αραβικά Νάτζντι",arw:"Αραγουάκ",as:"Ασαμικά",asa:"Άσου",ast:"Αστουριανά",av:"Αβαρικά",awa:"Αγουαντί",ay:"Αϊμάρα",az:"Αζερμπαϊτζανικά",ba:"Μπασκίρ",bal:"Μπαλούτσι",ban:"Μπαλινίζ",bas:"Μπάσα",bax:"Μπαμούν",bbj:"Γκομάλα",be:"Λευκορωσικά",bej:"Μπέζα",bem:"Μπέμπα",bez:"Μπένα",bfd:"Μπαφούτ",bg:"Βουλγαρικά",bgn:"Δυτικά Μπαλοχικά",bho:"Μπότζπουρι",bi:"Μπισλάμα",bik:"Μπικόλ",bin:"Μπίνι",bkm:"Κομ",bla:"Σικσίκα",bm:"Μπαμπάρα",bn:"Βεγγαλικά",bo:"Θιβετιανά",br:"Βρετονικά",bra:"Μπρατζ",brx:"Μπόντο",bs:"Βοσνιακά",bss:"Ακόσι",bua:"Μπουριάτ",bug:"Μπουγκίζ",bum:"Μπουλού",byn:"Μπλιν",byv:"Μεντούμπα",ca:"Καταλανικά",cad:"Κάντο",car:"Καρίμπ",cay:"Καγιούγκα",cch:"Ατσάμ",ccp:"Τσάκμα",ce:"Τσετσενικά",ceb:"Σεμπουάνο",cgg:"Τσίγκα",ch:"Τσαμόρο",chb:"Τσίμπτσα",chg:"Τσαγκατάι",chk:"Τσουκίζι",chm:"Μάρι",chn:"Ιδιωματικά Σινούκ",cho:"Τσόκτο",chp:"Τσίπιουαν",chr:"Τσερόκι",chy:"Τσεγιέν",ckb:"Κουρδικά Σοράνι",co:"Κορσικανικά",cop:"Κοπτικά",cr:"Κρι",crh:"Τουρκικά Κριμαίας",crs:"Κρεολικά Γαλλικά Σεϋχελλών",cs:"Τσεχικά",csb:"Κασούμπιαν",cu:"Εκκλησιαστικά Σλαβικά",cv:"Τσουβασικά",cy:"Ουαλικά",da:"Δανικά",dak:"Ντακότα",dar:"Ντάργκουα",dav:"Τάιτα",de:"Γερμανικά","de-AT":"Γερμανικά Αυστρίας","de-CH":"Υψηλά Γερμανικά Ελβετίας",del:"Ντέλαγουερ",den:"Σλαβικά",dgr:"Ντόγκριμπ",din:"Ντίνκα",dje:"Ζάρμα",doi:"Ντόγκρι",dsb:"Κάτω Σορβικά",dua:"Ντουάλα",dum:"Μέσα Ολλανδικά",dv:"Ντιβέχι",dyo:"Τζόλα-Φόνι",dyu:"Ντογιούλα",dz:"Ντζόνγκχα",dzg:"Νταζάγκα",ebu:"Έμπου",ee:"Έουε",efi:"Εφίκ",egy:"Αρχαία Αιγυπτιακά",eka:"Εκατζούκ",el:"Ελληνικά",elx:"Ελαμάιτ",en:"Αγγλικά","en-AU":"Αγγλικά Αυστραλίας","en-CA":"Αγγλικά Καναδά","en-GB":"Αγγλικά Βρετανίας","en-US":"Αγγλικά Αμερικής",enm:"Μέσα Αγγλικά",eo:"Εσπεράντο",es:"Ισπανικά","es-419":"Ισπανικά Λατινικής Αμερικής","es-ES":"Ισπανικά Ευρώπης","es-MX":"Ισπανικά Μεξικού",et:"Εσθονικά",eu:"Βασκικά",ewo:"Εγουόντο",fa:"Περσικά",fan:"Φανγκ",fat:"Φάντι",ff:"Φουλά",fi:"Φινλανδικά",fil:"Φιλιππινικά",fj:"Φίτζι",fo:"Φεροϊκά",fon:"Φον",fr:"Γαλλικά","fr-CA":"Γαλλικά Καναδά","fr-CH":"Γαλλικά Ελβετίας",frc:"Γαλλικά (Λουιζιάνα)",frm:"Μέσα Γαλλικά",fro:"Παλαιά Γαλλικά",frr:"Βόρεια Φριζιανά",frs:"Ανατολικά Φριζιανά",fur:"Φριουλανικά",fy:"Δυτικά Φριζικά",ga:"Ιρλανδικά",gaa:"Γκα",gag:"Γκαγκάουζ",gay:"Γκάγιο",gba:"Γκμπάγια",gd:"Σκωτικά Κελτικά",gez:"Γκιζ",gil:"Γκιλμπερτίζ",gl:"Γαλικιανά",gmh:"Μέσα Άνω Γερμανικά",gn:"Γκουαρανί",goh:"Παλαιά Άνω Γερμανικά",gon:"Γκόντι",gor:"Γκοροντάλο",got:"Γοτθικά",grb:"Γκρίμπο",grc:"Αρχαία Ελληνικά",gsw:"Γερμανικά Ελβετίας",gu:"Γκουγιαράτι",guz:"Γκούσι",gv:"Μανξ",gwi:"Γκουίτσιν",ha:"Χάουσα",hai:"Χάιντα",haw:"Χαβαϊκά",he:"Εβραϊκά",hi:"Χίντι",hil:"Χιλιγκαϊνόν",hit:"Χιτίτε",hmn:"Χμονγκ",ho:"Χίρι Μότου",hr:"Κροατικά",hsb:"Άνω Σορβικά",ht:"Αϊτιανά",hu:"Ουγγρικά",hup:"Χούπα",hy:"Αρμενικά",hz:"Χερέρο",ia:"Ιντερλίνγκουα",iba:"Ιμπάν",ibb:"Ιμπίμπιο",id:"Ινδονησιακά",ie:"Ιντερλίνγκουε",ig:"Ίγκμπο",ii:"Σίτσουαν Γι",ik:"Ινουπιάκ",ilo:"Ιλόκο",inh:"Ινγκούς",io:"Ίντο",is:"Ισλανδικά",it:"Ιταλικά",iu:"Ινούκτιτουτ",ja:"Ιαπωνικά",jbo:"Λόζμπαν",jgo:"Νγκόμπα",jmc:"Ματσάμε",jpr:"Ιουδαϊκά-Περσικά",jrb:"Ιουδαϊκά-Αραβικά",jv:"Ιαβανικά",ka:"Γεωργιανά",kaa:"Κάρα-Καλπάκ",kab:"Καμπίλε",kac:"Κατσίν",kaj:"Τζου",kam:"Κάμπα",kaw:"Κάουι",kbd:"Καμπαρντιανά",kbl:"Κανέμπου",kcg:"Τιάπ",kde:"Μακόντε",kea:"Γλώσσα του Πράσινου Ακρωτηρίου",kfo:"Κόρο",kg:"Κονγκό",kha:"Κάσι",kho:"Κοτανικά",khq:"Κόιρα Τσίνι",ki:"Κικούγιου",kj:"Κουανιάμα",kk:"Καζακικά",kkj:"Κάκο",kl:"Καλαάλισουτ",kln:"Καλεντζίν",km:"Χμερ",kmb:"Κιμπούντου",kn:"Κανάντα",ko:"Κορεατικά",koi:"Κόμι-Περμιάκ",kok:"Κονκανικά",kos:"Κοσραενικά",kpe:"Κπέλε",kr:"Κανούρι",krc:"Καρατσάι-Μπαλκάρ",krl:"Καρελικά",kru:"Κουρούχ",ks:"Κασμιρικά",ksb:"Σαμπάλα",ksf:"Μπάφια",ksh:"Κολωνικά",ku:"Κουρδικά",kum:"Κουμγιούκ",kut:"Κουτενάι",kv:"Κόμι",kw:"Κορνουαλικά",ky:"Κιργιζικά",la:"Λατινικά",lad:"Λαδίνο",lag:"Λάνγκι",lah:"Λάχδα",lam:"Λάμπα",lb:"Λουξεμβουργιανά",lez:"Λεζγκικά",lg:"Γκάντα",li:"Λιμβουργιανά",lkt:"Λακότα",ln:"Λινγκάλα",lo:"Λαοτινά",lol:"Μόνγκο",lou:"Κρεολικά (Λουιζιάνα)",loz:"Λόζι",lrc:"Βόρεια Λούρι",lt:"Λιθουανικά",lu:"Λούμπα-Κατάνγκα",lua:"Λούμπα-Λουλούα",lui:"Λουισένο",lun:"Λούντα",luo:"Λούο",lus:"Μίζο",luy:"Λούχια",lv:"Λετονικά",mad:"Μαντουρίζ",maf:"Μάφα",mag:"Μαγκάχι",mai:"Μαϊτχίλι",mak:"Μακασάρ",man:"Μαντίνγκο",mas:"Μασάι",mde:"Μάμπα",mdf:"Μόκσα",mdr:"Μανδάρ",men:"Μέντε",mer:"Μέρου",mfe:"Μορισιέν",mg:"Μαλγασικά",mga:"Μέσα Ιρλανδικά",mgh:"Μακούβα-Μέτο",mgo:"Μέτα",mh:"Μαρσαλέζικα",mi:"Μαορί",mic:"Μικμάκ",min:"Μινανγκαμπάου",mk:"Μακεδονικά",ml:"Μαλαγιαλαμικά",mn:"Μογγολικά",mnc:"Μαντσού",mni:"Μανιπούρι",moh:"Μοχόκ",mos:"Μόσι",mr:"Μαραθικά",ms:"Μαλαισιανά",mt:"Μαλτεζικά",mua:"Μουντάνγκ",mus:"Κρικ",mwl:"Μιραντεζικά",mwr:"Μαργουάρι",my:"Βιρμανικά",mye:"Μιένε",myv:"Έρζια",mzn:"Μαζαντεράνι",na:"Ναούρου",nap:"Ναπολιτανικά",naq:"Νάμα",nb:"Νορβηγικά Μποκμάλ",nd:"Βόρεια Ντεμπέλε",nds:"Κάτω Γερμανικά","nds-NL":"Κάτω Γερμανικά Ολλανδίας",ne:"Νεπαλικά","new":"Νεγουάρι",ng:"Ντόνγκα",nia:"Νίας",niu:"Νιούε",nl:"Ολλανδικά","nl-BE":"Φλαμανδικά",nmg:"Κβάσιο",nn:"Νορβηγικά Νινόρσκ",nnh:"Νγκιεμπούν",no:"Νορβηγικά",nog:"Νογκάι",non:"Παλαιά Νορβηγικά",nqo:"Ν’Κο",nr:"Νότια Ντεμπέλε",nso:"Βόρεια Σόθο",nus:"Νούερ",nv:"Νάβαχο",nwc:"Κλασικά Νεουάρι",ny:"Νιάντζα",nym:"Νιαμγουέζι",nyn:"Νιανκόλε",nyo:"Νιόρο",nzi:"Νζίμα",oc:"Οξιτανικά",oj:"Οζιβίγουα",om:"Ορόμο",or:"Όντια",os:"Οσετικά",osa:"Οσάζ",ota:"Οθωμανικά Τουρκικά",pa:"Παντζαπικά",pag:"Πανγκασινάν",pal:"Παχλάβι",pam:"Παμπάνγκα",pap:"Παπιαμέντο",pau:"Παλάουαν",pcm:"Πίτζιν Νιγηρίας",peo:"Αρχαία Περσικά",phn:"Φοινικικά",pi:"Πάλι",pl:"Πολωνικά",pon:"Πομπηικά",prg:"Πρωσικά",pro:"Παλαιά Προβανσάλ",ps:"Πάστο",pt:"Πορτογαλικά","pt-BR":"Πορτογαλικά Βραζιλίας","pt-PT":"Πορτογαλικά Ευρώπης",qu:"Κέτσουα",quc:"Κιτσέ",raj:"Ραζασθάνι",rap:"Ραπανούι",rar:"Ραροτονγκάν",rm:"Ρομανικά",rn:"Ρούντι",ro:"Ρουμανικά","ro-MD":"Μολδαβικά",rof:"Ρόμπο",rom:"Ρομανί",root:"Ρίζα",ru:"Ρωσικά",rup:"Αρομανικά",rw:"Κινιαρουάντα",rwk:"Ρουά",sa:"Σανσκριτικά",sad:"Σαντάγουε",sah:"Σαχά",sam:"Σαμαρίτικα Αραμαϊκά",saq:"Σαμπούρου",sas:"Σασάκ",sat:"Σαντάλι",sba:"Νγκαμπέι",sbp:"Σάνγκου",sc:"Σαρδηνιακά",scn:"Σικελικά",sco:"Σκωτικά",sd:"Σίντι",sdh:"Νότια Κουρδικά",se:"Βόρεια Σάμι",see:"Σένεκα",seh:"Σένα",sel:"Σελκούπ",ses:"Κοϊραμπόρο Σένι",sg:"Σάνγκο",sga:"Παλαιά Ιρλανδικά",sh:"Σερβοκροατικά",shi:"Τασελχίτ",shn:"Σαν",shu:"Αραβικά του Τσαντ",si:"Σινχαλεζικά",sid:"Σιντάμο",sk:"Σλοβακικά",sl:"Σλοβενικά",sm:"Σαμοανά",sma:"Νότια Σάμι",smj:"Λούλε Σάμι",smn:"Ινάρι Σάμι",sms:"Σκολτ Σάμι",sn:"Σόνα",snk:"Σονίνκε",so:"Σομαλικά",sog:"Σογκντιέν",sq:"Αλβανικά",sr:"Σερβικά",srn:"Σρανάν Τόνγκο",srr:"Σερέρ",ss:"Σουάτι",ssy:"Σάχο",st:"Νότια Σόθο",su:"Σουνδανικά",suk:"Σουκούμα",sus:"Σούσου",sux:"Σουμερικά",sv:"Σουηδικά",sw:"Σουαχίλι","sw-CD":"Κονγκό Σουαχίλι",swb:"Κομοριανά",syc:"Κλασικά Συριακά",syr:"Συριακά",ta:"Ταμιλικά",te:"Τελούγκου",tem:"Τίμνε",teo:"Τέσο",ter:"Τερένο",tet:"Τέτουμ",tg:"Τατζικικά",th:"Ταϊλανδικά",ti:"Τιγκρινικά",tig:"Τίγκρε",tiv:"Τιβ",tk:"Τουρκμενικά",tkl:"Τοκελάου",tl:"Τάγκαλογκ",tlh:"Κλίνγκον",tli:"Τλίνγκιτ",tmh:"Ταμασέκ",tn:"Τσουάνα",to:"Τονγκανικά",tog:"Νιάσα Τόνγκα",tpi:"Τοκ Πισίν",tr:"Τουρκικά",trv:"Ταρόκο",ts:"Τσόνγκα",tsi:"Τσίμσιαν",tt:"Ταταρικά",tum:"Τουμπούκα",tvl:"Τουβαλού",tw:"Τούι",twq:"Τασαβάκ",ty:"Ταϊτιανά",tyv:"Τουβινικά",tzm:"Ταμαζίτ Κεντρικού Μαρόκο",udm:"Ουντμούρτ",ug:"Ουιγκουρικά",uga:"Ουγκαριτικά",uk:"Ουκρανικά",umb:"Ουμπούντου",ur:"Ουρντού",uz:"Ουζμπεκικά",vai:"Βάι",ve:"Βέντα",vi:"Βιετναμικά",vo:"Βολαπιούκ",vot:"Βότικ",vun:"Βούντζο",wa:"Βαλλωνικά",wae:"Βάλσερ",wal:"Γουολάιτα",war:"Γουάραϊ",was:"Γουασό",wbp:"Γουαρλπίρι",wo:"Γουόλοφ",wuu:"Κινεζικά Γου",xal:"Καλμίκ",xh:"Κόσα",xog:"Σόγκα",yao:"Γιάο",yap:"Γιαπίζ",yav:"Γιανγκμπέν",ybb:"Γιέμπα",yi:"Γίντις",yo:"Γιορούμπα",yue:"Καντονέζικα",za:"Ζουάνγκ",zap:"Ζάποτεκ",zbl:"Σύμβολα Bliss",zen:"Ζενάγκα",zgh:"Τυπικά Ταμαζίτ Μαρόκου",zh:"Κινεζικά","zh-Hans":"Απλοποιημένα Μανδαρινικά Κινεζικά","zh-Hant":"Παραδοσιακά Μανδαρινικά Κινεζικά",zu:"Ζουλού",zun:"Ζούνι",zza:"Ζάζα"},scriptNames:{Cyrl:"Κυριλλικό",Latn:"Λατινικό",Arab:"Αραβικό",Guru:"Γκουρμουκχί",Tfng:"Τιφινάγκ",Vaii:"Βάι",Hans:"Απλοποιημένο",Hant:"Παραδοσιακό"}},en:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Muscogee",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"Low Saxon",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-AU":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"United States English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldovan",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},"en-GB":{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazian",ace:"Achinese",ach:"Acoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Tunisian Arabic",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadian",akz:"Alabama",ale:"Aleut",aln:"Gheg Albanian",alt:"Southern Altai",am:"Amharic",an:"Aragonese",ang:"Old English",anp:"Angika",ar:"Arabic","ar-001":"Modern Standard Arabic",arc:"Aramaic",arn:"Mapuche",aro:"Araona",arp:"Arapaho",arq:"Algerian Arabic",ars:"Najdi Arabic",arw:"Arawak",ary:"Moroccan Arabic",arz:"Egyptian Arabic",as:"Assamese",asa:"Asu",ase:"American Sign Language",ast:"Asturian",av:"Avaric",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Balinese",bar:"Bavarian",bas:"Basaa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusian",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarian",bgn:"Western Balochi",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bangla",bo:"Tibetan",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Breton",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnian",bss:"Akoose",bua:"Buriat",bug:"Buginese",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalan",cad:"Caddo",car:"Carib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukese",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",cic:"Chickasaw",ckb:"Central Kurdish",co:"Corsican",cop:"Coptic",cps:"Capiznon",cr:"Cree",crh:"Crimean Turkish",crs:"Seselwa Creole French",cs:"Czech",csb:"Kashubian",cu:"Church Slavic",cv:"Chuvash",cy:"Welsh",da:"Danish",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"German","de-AT":"Austrian German","de-CH":"Swiss High German",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Lower Sorbian",dtp:"Central Dusun",dua:"Duala",dum:"Middle Dutch",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilian",egy:"Ancient Egyptian",eka:"Ekajuk",el:"Greek",elx:"Elamite",en:"English","en-AU":"Australian English","en-CA":"Canadian English","en-GB":"British English","en-US":"American English",enm:"Middle English",eo:"Esperanto",es:"Spanish","es-419":"Latin American Spanish","es-ES":"European Spanish","es-MX":"Mexican Spanish",esu:"Central Yupik",et:"Estonian",eu:"Basque",ewo:"Ewondo",ext:"Extremaduran",fa:"Persian","fa-AF":"Dari",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Finnish",fil:"Filipino",fit:"Tornedalen Finnish",fj:"Fijian",fo:"Faroese",fon:"Fon",fr:"French","fr-CA":"Canadian French","fr-CH":"Swiss French",frc:"Cajun French",frm:"Middle French",fro:"Old French",frp:"Arpitan",frr:"Northern Frisian",frs:"Eastern Frisian",fur:"Friulian",fy:"Western Frisian",ga:"Irish",gaa:"Ga",gag:"Gagauz",gan:"Gan Chinese",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scottish Gaelic",gez:"Geez",gil:"Gilbertese",gl:"Galician",glk:"Gilaki",gmh:"Middle High German",gn:"Guarani",goh:"Old High German",gom:"Goan Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothic",grb:"Grebo",grc:"Ancient Greek",gsw:"Swiss German",gu:"Gujarati",guc:"Wayuu",gur:"Frafra",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka Chinese",haw:"Hawaiian",he:"Hebrew",hi:"Hindi",hif:"Fiji Hindi",hil:"Hiligaynon",hit:"Hittite",hmn:"Hmong",ho:"Hiri Motu",hr:"Croatian",hsb:"Upper Sorbian",hsn:"Xiang Chinese",ht:"Haitian Creole",hu:"Hungarian",hup:"Hupa",hy:"Armenian",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesian",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Icelandic",it:"Italian",iu:"Inuktitut",izh:"Ingrian",ja:"Japanese",jam:"Jamaican Creole English",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Persian",jrb:"Judeo-Arabic",jut:"Jutish",jv:"Javanese",ka:"Georgian",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardian",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanese",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuyu",kiu:"Kirmanjki",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korean",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosraean",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",kri:"Krio",krj:"Kinaray-a",krl:"Karelian",kru:"Kurukh",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kyrgyz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxembourgish",lez:"Lezghian",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgish",lij:"Ligurian",liv:"Livonian",lkt:"Lakota",lmo:"Lombard",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Louisiana Creole",loz:"Lozi",lrc:"Northern Luri",lt:"Lithuanian",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvian",lzh:"Literary Chinese",lzz:"Laz",mad:"Madurese",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mga:"Middle Irish",mgh:"Makhuwa-Meetto",mgo:"Metaʼ",mh:"Marshallese",mi:"Maori",mic:"Mi'kmaq",min:"Minangkabau",mk:"Macedonian",ml:"Malayalam",mn:"Mongolian",mnc:"Manchu",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"Western Mari",ms:"Malay",mt:"Maltese",mua:"Mundang",mus:"Creek",mwl:"Mirandese",mwr:"Marwari",mwv:"Mentawai",my:"Burmese",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Min Nan Chinese",nap:"Neapolitan",naq:"Nama",nb:"Norwegian Bokmål",nd:"North Ndebele",nds:"Low German","nds-NL":"West Low German",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuean",njo:"Ao Naga",nl:"Dutch","nl-BE":"Flemish",nmg:"Kwasio",nn:"Norwegian Nynorsk",nnh:"Ngiemboon",no:"Norwegian",nog:"Nogai",non:"Old Norse",nov:"Novial",nqo:"N’Ko",nr:"South Ndebele",nso:"Northern Sotho",nus:"Nuer",nv:"Navajo",nwc:"Classical Newari",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitan",oj:"Ojibwa",om:"Oromo",or:"Odia",os:"Ossetic",osa:"Osage",ota:"Ottoman Turkish",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcd:"Picard",pcm:"Nigerian Pidgin",pdc:"Pennsylvania German",pdt:"Plautdietsch",peo:"Old Persian",pfl:"Palatine German",phn:"Phoenician",pi:"Pali",pl:"Polish",pms:"Piedmontese",pnt:"Pontic",pon:"Pohnpeian",prg:"Prussian",pro:"Old Provençal",ps:"Pashto",pt:"Portuguese","pt-BR":"Brazilian Portuguese","pt-PT":"European Portuguese",qu:"Quechua",quc:"Kʼicheʼ",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffian",rm:"Romansh",rn:"Rundi",ro:"Romanian","ro-MD":"Moldavian",rof:"Rombo",rom:"Romany",root:"Root",rtm:"Rotuman",ru:"Russian",rue:"Rusyn",rug:"Roviana",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",sam:"Samaritan Aramaic",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardinian",scn:"Sicilian",sco:"Scots",sd:"Sindhi",sdc:"Sassarese Sardinian",sdh:"Southern Kurdish",se:"Northern Sami",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Old Irish",sgs:"Samogitian",sh:"Serbo-Croatian",shi:"Tachelhit",shn:"Shan",shu:"Chadian Arabic",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Slovenian",sli:"Lower Silesian",sly:"Selayar",sm:"Samoan",sma:"Southern Sami",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sog:"Sogdien",sq:"Albanian",sr:"Serbian","sr-ME":"Montenegrin",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Southern Sotho",stq:"Saterland Frisian",su:"Sundanese",suk:"Sukuma",sus:"Susu",sux:"Sumerian",sv:"Swedish",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comorian",syc:"Classical Syriac",syr:"Syriac",szl:"Silesian",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongan",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turkish",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonian",tsi:"Tsimshian",tt:"Tatar",ttt:"Muslim Tat",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahitian",tyv:"Tuvinian",tzm:"Central Atlas Tamazight",udm:"Udmurt",ug:"Uyghur",uga:"Ugaritic",uk:"Ukrainian",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venetian",vep:"Veps",vi:"Vietnamese",vls:"West Flemish",vmf:"Main-Franconian",vo:"Volapük",vot:"Votic",vro:"Võro",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wu Chinese",xal:"Kalmyk",xh:"Xhosa",xmf:"Mingrelian",xog:"Soga",yao:"Yao",yap:"Yapese",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yrl:"Nheengatu",yue:"Cantonese",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbols",zea:"Zeelandic",zen:"Zenaga",zgh:"Standard Moroccan Tamazight",zh:"Mandarin Chinese","zh-Hans":"Simplified Mandarin Chinese","zh-Hant":"Traditional Mandarin Chinese",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillic",Latn:"Latin",Arab:"Arabic",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Simplified",Hant:"Traditional"}},eo:{rtl:false,languageNames:{aa:"afara",ab:"abĥaza",af:"afrikansa",am:"amhara",ar:"araba","ar-001":"araba (Mondo)",as:"asama",ay:"ajmara",az:"azerbajĝana",ba:"baŝkira",be:"belorusa",bg:"bulgara",bi:"bislamo",bn:"bengala",bo:"tibeta",br:"bretona",bs:"bosnia",ca:"kataluna",co:"korsika",cs:"ĉeĥa",cy:"kimra",da:"dana",de:"germana","de-AT":"germana (Aŭstrujo)","de-CH":"germana (Svisujo)",dv:"mahla",dz:"dzonko",efi:"ibibioefika",el:"greka",en:"angla","en-AU":"angla (Aŭstralio)","en-CA":"angla (Kanado)","en-GB":"angla (Unuiĝinta Reĝlando)","en-US":"angla (Usono)",eo:"esperanto",es:"hispana","es-419":"hispana (419)","es-ES":"hispana (Hispanujo)","es-MX":"hispana (Meksiko)",et:"estona",eu:"eŭska",fa:"persa",fi:"finna",fil:"filipina",fj:"fiĝia",fo:"feroa",fr:"franca","fr-CA":"franca (Kanado)","fr-CH":"franca (Svisujo)",fy:"frisa",ga:"irlanda",gd:"gaela",gl:"galega",gn:"gvarania",gu:"guĝarata",ha:"haŭsa",haw:"havaja",he:"hebrea",hi:"hinda",hr:"kroata",ht:"haitia kreola",hu:"hungara",hy:"armena",ia:"interlingvao",id:"indonezia",ie:"okcidentalo",ik:"eskima",is:"islanda",it:"itala",iu:"inuita",ja:"japana",jv:"java",ka:"kartvela",kk:"kazaĥa",kl:"gronlanda",km:"kmera",kn:"kanara",ko:"korea",ks:"kaŝmira",ku:"kurda",ky:"kirgiza",la:"latino",lb:"luksemburga",ln:"lingala",lo:"laŭa",lt:"litova",lv:"latva",mg:"malagasa",mi:"maoria",mk:"makedona",ml:"malajalama",mn:"mongola",mr:"marata",ms:"malaja",mt:"malta",my:"birma",na:"naura",nb:"dannorvega","nds-NL":"nds (Nederlando)",ne:"nepala",nl:"nederlanda","nl-BE":"nederlanda (Belgujo)",nn:"novnorvega",no:"norvega",oc:"okcitana",om:"oroma",or:"orijo",pa:"panĝaba",pl:"pola",ps:"paŝtoa",pt:"portugala","pt-BR":"brazilportugala","pt-PT":"eŭropportugala",qu:"keĉua",rm:"romanĉa",rn:"burunda",ro:"rumana","ro-MD":"rumana (Moldavujo)",ru:"rusa",rw:"ruanda",sa:"sanskrito",sd:"sinda",sg:"sangoa",sh:"serbo-Kroata",si:"sinhala",sk:"slovaka",sl:"slovena",sm:"samoa",sn:"ŝona",so:"somala",sq:"albana",sr:"serba",ss:"svazia",st:"sota",su:"sunda",sv:"sveda",sw:"svahila","sw-CD":"svahila (CD)",ta:"tamila",te:"telugua",tg:"taĝika",th:"taja",ti:"tigraja",tk:"turkmena",tl:"tagaloga",tlh:"klingona",tn:"cvana",to:"tongaa",tr:"turka",ts:"conga",tt:"tatara",ug:"ujgura",uk:"ukraina",ur:"urduo",uz:"uzbeka",vi:"vjetnama",vo:"volapuko",wo:"volofa",xh:"ksosa",yi:"jida",yo:"joruba",za:"ĝuanga",zh:"ĉina","zh-Hans":"ĉina (Hans)","zh-Hant":"ĉina (Hant)",zu:"zulua"},scriptNames:{}},es:{rtl:false,languageNames:{aa:"afar",ab:"abjasio",ace:"acehnés",ach:"acoli",ada:"adangme",ady:"adigué",ae:"avéstico",af:"afrikáans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadio",ale:"aleutiano",alt:"altái meridional",am:"amárico",an:"aragonés",ang:"inglés antiguo",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",ars:"árabe najdí",arw:"arahuaco",as:"asamés",asa:"asu",ast:"asturiano",av:"avar",awa:"avadhi",ay:"aimara",az:"azerbaiyano",ba:"baskir",bal:"baluchi",ban:"balinés",bas:"basaa",bax:"bamún",bbj:"ghomala",be:"bielorruso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhoyapurí",bi:"bislama",bik:"bicol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",bra:"braj",brx:"bodo",bs:"bosnio",bss:"akoose",bua:"buriato",bug:"buginés",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalán",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatái",chk:"trukés",chm:"marí",chn:"jerga chinuk",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheyene",ckb:"kurdo sorani",co:"corso",cop:"copto",cr:"cree",crh:"tártaro de Crimea",crs:"criollo seychelense",cs:"checo",csb:"casubio",cu:"eslavo eclesiástico",cv:"chuvasio",cy:"galés",da:"danés",dak:"dakota",dar:"dargva",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suizo",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bajo sorbio",dua:"duala",dum:"neerlandés medio",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewé",efi:"efik",egy:"egipcio antiguo",eka:"ekajuk",el:"griego",elx:"elamita",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadiense","en-GB":"inglés británico","en-US":"inglés estadounidense",enm:"inglés medio",eo:"esperanto",es:"español","es-419":"español latinoamericano","es-ES":"español de España","es-MX":"español de México",et:"estonio",eu:"euskera",ewo:"ewondo",fa:"persa",fan:"fang",fat:"fanti",ff:"fula",fi:"finés",fil:"filipino",fj:"fiyiano",fo:"feroés",fr:"francés","fr-CA":"francés canadiense","fr-CH":"francés suizo",frc:"francés cajún",frm:"francés medio",fro:"francés antiguo",frr:"frisón septentrional",frs:"frisón oriental",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauzo",gan:"chino gan",gay:"gayo",gba:"gbaya",gd:"gaélico escocés",gez:"geez",gil:"gilbertés",gl:"gallego",gmh:"alto alemán medio",gn:"guaraní",goh:"alto alemán antiguo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"griego antiguo",gsw:"alemán suizo",gu:"guyaratí",guz:"gusii",gv:"manés",gwi:"kutchin",ha:"hausa",hai:"haida",hak:"chino hakka",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorbio",hsn:"chino xiang",ht:"criollo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ie:"interlingue",ig:"igbo",ii:"yi de Sichuán",ik:"inupiaq",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"japonés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judeo-persa",jrb:"judeo-árabe",jv:"javanés",ka:"georgiano",kaa:"karakalpako",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"criollo caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",kho:"kotanés",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazajo",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"jemer",kmb:"kimbundu",kn:"canarés",ko:"coreano",koi:"komi permio",kok:"konkaní",kos:"kosraeano",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelio",kru:"kurukh",ks:"cachemiro",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"kirguís",la:"latín",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgués",lez:"lezgiano",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongo",lou:"criollo de Luisiana",loz:"lozi",lrc:"lorí septentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",maf:"mafa",mag:"magahi",mai:"maithili",mak:"macasar",man:"mandingo",mas:"masái",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"criollo mauriciano",mg:"malgache",mga:"irlandés medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malayalam",mn:"mongol",mnc:"manchú",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"maratí",ms:"malayo",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",mwr:"marwari",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nan:"chino min nan",nap:"napolitano",naq:"nama",nb:"noruego bokmal",nd:"ndebele septentrional",nds:"bajo alemán","nds-NL":"bajo sajón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamenco",nmg:"kwasio",nn:"noruego nynorsk",nnh:"ngiemboon",no:"noruego",nog:"nogai",non:"nórdico antiguo",nqo:"n’ko",nr:"ndebele meridional",nso:"sotho septentrional",nus:"nuer",nv:"navajo",nwc:"newari clásico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"osético",osa:"osage",ota:"turco otomano",pa:"punyabí",pag:"pangasinán",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin de Nigeria",peo:"persa antiguo",phn:"fenicio",pi:"pali",pl:"polaco",pon:"pohnpeiano",prg:"prusiano",pro:"provenzal antiguo",ps:"pastún",pt:"portugués","pt-BR":"portugués de Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"kirundi",ro:"rumano","ro-MD":"moldavo",rof:"rombo",rom:"romaní",root:"raíz",ru:"ruso",rup:"arrumano",rw:"kinyarwanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"sakha",sam:"arameo samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"sami septentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandés antiguo",sh:"serbocroata",shi:"tashelhit",shn:"shan",shu:"árabe chadiano",si:"cingalés",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninké",so:"somalí",sog:"sogdiano",sq:"albanés",sr:"serbio",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho meridional",su:"sundanés",suk:"sukuma",sus:"susu",sux:"sumerio",sv:"sueco",sw:"suajili","sw-CD":"suajili del Congo",swb:"comorense",syc:"siríaco clásico",syr:"siriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetún",tg:"tayiko",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turcomano",tkl:"tokelauano",tl:"tagalo",tlh:"klingon",tli:"tlingit",tmh:"tamashek",tn:"setsuana",to:"tongano",tog:"tonga del Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuviniano",tzm:"tamazight del Atlas Central",udm:"udmurt",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapük",vot:"vótico",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolayta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wólof",wuu:"chino wu",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"yapés",yav:"yangben",ybb:"yemba",yi:"yidis",yo:"yoruba",yue:"cantonés",za:"zhuang",zap:"zapoteco",zbl:"símbolos Bliss",zen:"zenaga",zgh:"tamazight estándar marroquí",zh:"chino","zh-Hans":"chino mandarín simplificado","zh-Hant":"chino mandarín tradicional",zu:"zulú",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmuji",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},et:{rtl:false,languageNames:{aa:"afari",ab:"abhaasi",ace:"atšehi",ach:"atšoli",ada:"adangme",ady:"adõgee",ae:"avesta",aeb:"Tuneesia araabia",af:"afrikaani",afh:"afrihili",agq:"aghemi",ain:"ainu",ak:"akani",akk:"akadi",akz:"alabama",ale:"aleuudi",aln:"geegi",alt:"altai",am:"amhara",an:"aragoni",ang:"vanainglise",anp:"angika",ar:"araabia","ar-001":"araabia (tänapäevane)",arc:"aramea",arn:"mapudunguni",aro:"araona",arp:"arapaho",arq:"Alžeeria araabia",arw:"aravaki",ary:"Maroko araabia",arz:"Egiptuse araabia",as:"assami",asa:"asu",ase:"Ameerika viipekeel",ast:"astuuria",av:"avaari",awa:"avadhi",ay:"aimara",az:"aserbaidžaani",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baieri",bas:"basaa",bax:"bamuni",bbc:"bataki",bbj:"ghomala",be:"valgevene",bej:"bedža",bem:"bemba",bew:"betavi",bez:"bena",bfd:"bafuti",bfq:"badaga",bg:"bulgaaria",bgn:"läänebelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikoli",bin:"edo",bjn:"bandžari",bkm:"komi (Aafrika)",bla:"mustjalaindiaani",bm:"bambara",bn:"bengali",bo:"tiibeti",bpy:"bišnuprija",bqi:"bahtiari",br:"bretooni",bra:"bradži",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"akoose",bua:"burjaadi",bug:"bugi",bum:"bulu",byn:"bilini",byv:"medumba",ca:"katalaani",cad:"kado",car:"kariibi",cay:"kajuka",cch:"aitšami",ccp:"tšaakma",ce:"tšetšeeni",ceb:"sebu",cgg:"tšiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"tšuugi",chm:"mari",chn:"tšinuki žargoon",cho:"tšokto",chp:"tšipevai",chr:"tšerokii",chy:"šaieeni",ckb:"sorani",co:"korsika",cop:"kopti",cps:"kapisnoni",cr:"krii",crh:"krimmitatari",crs:"seišelli",cs:"tšehhi",csb:"kašuubi",cu:"kirikuslaavi",cv:"tšuvaši",cy:"kõmri",da:"taani",dak:"siuu",dar:"dargi",dav:"davida",de:"saksa","de-AT":"Austria saksa","de-CH":"Šveitsi ülemsaksa",del:"delavari",den:"sleivi",dgr:"dogribi",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alamsorbi",dtp:"keskdusuni",dua:"duala",dum:"keskhollandi",dv:"maldiivi",dyo:"fonji",dyu:"djula",dz:"dzongkha",dzg:"daza",ebu:"embu",ee:"eve",efi:"efiki",egl:"emiilia",egy:"egiptuse",eka:"ekadžuki",el:"kreeka",elx:"eelami",en:"inglise","en-AU":"Austraalia inglise","en-CA":"Kanada inglise","en-GB":"Briti inglise","en-US":"Ameerika inglise",enm:"keskinglise",eo:"esperanto",es:"hispaania","es-419":"Ladina-Ameerika hispaania","es-ES":"Euroopa hispaania","es-MX":"Mehhiko hispaania",esu:"keskjupiki",et:"eesti",eu:"baski",ewo:"evondo",ext:"estremenju",fa:"pärsia",fan:"fangi",fat:"fanti",ff:"fula",fi:"soome",fil:"filipiini",fit:"meä",fj:"fidži",fo:"fääri",fon:"foni",fr:"prantsuse","fr-CA":"Kanada prantsuse","fr-CH":"Šveitsi prantsuse",frc:"cajun’i",frm:"keskprantsuse",fro:"vanaprantsuse",frp:"frankoprovansi",frr:"põhjafriisi",frs:"idafriisi",fur:"friuuli",fy:"läänefriisi",ga:"iiri",gag:"gagauusi",gan:"kani",gay:"gajo",gba:"gbaja",gd:"gaeli",gez:"etioopia",gil:"kiribati",gl:"galeegi",glk:"gilaki",gmh:"keskülemsaksa",gn:"guaranii",goh:"vanaülemsaksa",gon:"gondi",gor:"gorontalo",got:"gooti",grb:"grebo",grc:"vanakreeka",gsw:"šveitsisaksa",gu:"gudžarati",guc:"vajuu",gur:"farefare",guz:"gusii",gv:"mänksi",gwi:"gvitšini",ha:"hausa",hai:"haida",hak:"hakka",haw:"havai",he:"heebrea",hi:"hindi",hif:"Fidži hindi",hil:"hiligainoni",hit:"heti",hmn:"hmongi",ho:"hirimotu",hr:"horvaadi",hsb:"ülemsorbi",hsn:"sjangi",ht:"haiti",hu:"ungari",hup:"hupa",hy:"armeenia",hz:"herero",ia:"interlingua",iba:"ibani",ibb:"ibibio",id:"indoneesia",ie:"interlingue",ig:"ibo",ii:"nuosu",ik:"injupiaki",ilo:"iloko",inh:"inguši",io:"ido",is:"islandi",it:"itaalia",iu:"inuktituti",izh:"isuri",ja:"jaapani",jam:"Jamaica kreoolkeel",jbo:"ložban",jgo:"ngomba",jmc:"matšame",jpr:"juudipärsia",jrb:"juudiaraabia",jut:"jüüti",jv:"jaava",ka:"gruusia",kaa:"karakalpaki",kab:"kabiili",kac:"katšini",kaj:"jju",kam:"kamba",kaw:"kaavi",kbd:"kabardi-tšerkessi",kbl:"kanembu",kcg:"tjapi",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kgp:"kaingangi",kha:"khasi",kho:"saka",khq:"koyra chiini",khw:"khovari",ki:"kikuju",kiu:"kõrmandžki",kj:"kvanjama",kk:"kasahhi",kkj:"kako",kl:"grööni",kln:"kalendžini",km:"khmeeri",kmb:"mbundu",kn:"kannada",ko:"korea",koi:"permikomi",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaraia",krl:"karjala",kru:"kuruhhi",ks:"kašmiiri",ksb:"šambala",ksf:"bafia",ksh:"kölni",ku:"kurdi",kum:"kumõki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"ladina",lad:"ladiino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"letseburgi",lez:"lesgi",lg:"ganda",li:"limburgi",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"Louisiana kreoolkeel",loz:"lozi",lrc:"põhjaluri",lt:"leedu",ltg:"latgali",lu:"Katanga luba",lua:"lulua",lui:"luisenjo",lun:"lunda",lus:"lušei",luy:"luhja",lv:"läti",lzh:"klassikaline hiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassari",man:"malinke",mas:"masai",mde:"maba",mdf:"mokša",mdr:"mandari",men:"mende",mer:"meru",mfe:"Mauritiuse kreoolkeel",mg:"malagassi",mga:"keskiiri",mgh:"makhuwa-meetto",mgo:"meta",mh:"maršalli",mi:"maoori",mic:"mikmaki",min:"minangkabau",mk:"makedoonia",ml:"malajalami",mn:"mongoli",mnc:"mandžu",mni:"manipuri",moh:"mohoogi",mos:"more",mr:"marathi",mrj:"mäemari",ms:"malai",mt:"malta",mua:"mundangi",mus:"maskogi",mwl:"miranda",mwr:"marvari",mwv:"mentavei",my:"birma",mye:"mjene",myv:"ersa",mzn:"mazandaraani",na:"nauru",nan:"lõunamini",nap:"napoli",naq:"nama",nb:"norra bokmål",nd:"põhjandebele",nds:"alamsaksa","nds-NL":"Hollandi alamsaksa",ne:"nepali","new":"nevari",ng:"ndonga",nia:"niasi",niu:"niue",njo:"ao",nl:"hollandi","nl-BE":"flaami",nmg:"kwasio",nn:"uusnorra",nnh:"ngiembooni",no:"norra",nog:"nogai",non:"vanapõhjala",nov:"noviaal",nqo:"nkoo",nr:"lõunandebele",nso:"põhjasotho",nus:"nueri",nv:"navaho",nwc:"vananevari",ny:"njandža",nym:"njamvesi",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"oksitaani",oj:"odžibvei",om:"oromo",or:"oria",os:"osseedi",osa:"oseidži",ota:"osmanitürgi",pa:"pandžabi",pag:"pangasinani",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"belau",pcd:"pikardi",pcm:"Nigeeria pidžinkeel",pdc:"Pennsylvania saksa",pdt:"mennoniidisaksa",peo:"vanapärsia",pfl:"Pfalzi",phn:"foiniikia",pi:"paali",pl:"poola",pms:"piemonte",pnt:"pontose",pon:"poonpei",prg:"preisi",pro:"vanaprovansi",ps:"puštu",pt:"portugali","pt-BR":"Brasiilia portugali","pt-PT":"Euroopa portugali",qu:"ketšua",quc:"kitše",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romanja",rif:"riifi",rm:"romanši",rn:"rundi",ro:"rumeenia","ro-MD":"moldova",rof:"rombo",rom:"mustlaskeel",rtm:"rotuma",ru:"vene",rue:"russiini",rug:"roviana",rup:"aromuuni",rw:"ruanda",rwk:"rvaa",sa:"sanskriti",sad:"sandave",sah:"jakuudi",sam:"Samaaria aramea",saq:"samburu",sas:"sasaki",sat:"santali",saz:"sauraštra",sba:"ngambai",sbp:"sangu",sc:"sardi",scn:"sitsiilia",sco:"šoti",sd:"sindhi",sdh:"lõunakurdi",se:"põhjasaami",see:"seneka",seh:"sena",sei:"seri",sel:"sölkupi",ses:"koyraboro senni",sg:"sango",sga:"vanaiiri",sgs:"žemaidi",sh:"serbia-horvaadi",shi:"šilha",shn:"šani",shu:"Tšaadi araabia",si:"singali",sid:"sidamo",sk:"slovaki",sl:"sloveeni",sli:"alamsileesia",sly:"selajari",sm:"samoa",sma:"lõunasaami",smj:"Lule saami",smn:"Inari saami",sms:"koltasaami",sn:"šona",snk:"soninke",so:"somaali",sog:"sogdi",sq:"albaania",sr:"serbia",srn:"sranani",srr:"sereri",ss:"svaasi",ssy:"saho",st:"lõunasotho",stq:"saterfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"rootsi",sw:"suahiili","sw-CD":"Kongo suahiili",swb:"komoori",syc:"vanasüüria",syr:"süüria",szl:"sileesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetumi",tg:"tadžiki",th:"tai",ti:"tigrinja",tig:"tigree",tiv:"tivi",tk:"türkmeeni",tkl:"tokelau",tkr:"tsahhi",tl:"tagalogi",tlh:"klingoni",tli:"tlingiti",tly:"talõši",tmh:"tamašeki",tn:"tsvana",to:"tonga",tog:"tšitonga",tpi:"uusmelaneesia",tr:"türgi",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakoonia",tsi:"tšimši",tt:"tatari",ttt:"lõunataadi",tum:"tumbuka",tvl:"tuvalu",tw:"tvii",twq:"taswaqi",ty:"tahiti",tyv:"tõva",tzm:"tamasikti",udm:"udmurdi",ug:"uiguuri",uga:"ugariti",uk:"ukraina",umb:"umbundu",ur:"urdu",uz:"usbeki",ve:"venda",vec:"veneti",vep:"vepsa",vi:"vietnami",vls:"lääneflaami",vmf:"Maini frangi",vo:"volapüki",vot:"vadja",vro:"võru",vun:"vundžo",wa:"vallooni",wae:"valsi",wal:"volaita",war:"varai",was:"vašo",wbp:"varlpiri",wo:"volofi",wuu:"uu",xal:"kalmõki",xh:"koosa",xmf:"megreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangbeni",ybb:"jemba",yi:"jidiši",yo:"joruba",yrl:"njengatu",yue:"kantoni",za:"tšuangi",zap:"sapoteegi",zbl:"Blissi sümbolid",zea:"zeelandi",zen:"zenaga",zgh:"tamasikti (Maroko)",zh:"hiina","zh-Hans":"lihtsustatud mandariinihiina","zh-Hant":"traditsiooniline mandariinihiina",zu:"suulu",zun:"sunji",zza:"zaza"},scriptNames:{Cyrl:"kirillitsa",Latn:"ladina",Arab:"araabia",Guru:"gurmukhi",Tfng:"tifinagi",Vaii:"vai",Hans:"lihtsustatud",Hant:"traditsiooniline"}},eu:{rtl:false,languageNames:{aa:"afarera",ab:"abkhaziera",ace:"acehnera",ach:"acholiera",ada:"adangmera",ady:"adigera",af:"afrikaans",agq:"aghemera",ain:"ainuera",ak:"akanera",ale:"aleutera",alt:"hegoaldeko altaiera",am:"amharera",an:"aragoiera",anp:"angikera",ar:"arabiera","ar-001":"arabiera moderno estandarra",arn:"maputxe",arp:"arapaho",as:"assamera",asa:"asu",ast:"asturiera",av:"avarera",awa:"awadhiera",ay:"aimara",az:"azerbaijanera",ba:"baxkirera",ban:"baliera",bas:"basaa",be:"bielorrusiera",bem:"bembera",bez:"benera",bg:"bulgariera",bho:"bhojpurera",bi:"bislama",bin:"edoera",bla:"siksikera",bm:"bambarera",bn:"bengalera",bo:"tibetera",br:"bretoiera",brx:"bodoera",bs:"bosniera",bug:"buginera",byn:"bilena",ca:"katalan",ccp:"chakmera",ce:"txetxenera",ceb:"cebuera",cgg:"chigera",ch:"chamorrera",chk:"chuukera",chm:"mariera",cho:"choctaw",chr:"txerokiera",chy:"cheyennera",ckb:"erdialdeko kurduera",co:"korsikera",crs:"Seychelleetako kreolera",cs:"txekiera",cu:"elizako eslaviera",cv:"txuvaxera",cy:"gales",da:"daniera",dak:"dakotera",dar:"dargvera",dav:"taitera",de:"aleman","de-AT":"Austriako aleman","de-CH":"Suitzako aleman garai",dgr:"dogribera",dje:"zarma",dsb:"behe-sorabiera",dua:"dualera",dv:"divehiera",dyo:"fonyi jolera",dz:"dzongkha",dzg:"dazaga",ebu:"embua",ee:"eweera",efi:"efikera",eka:"akajuka",el:"greziera",en:"ingeles","en-AU":"Australiako ingeles","en-CA":"Kanadako ingeles","en-GB":"Britania Handiko ingeles","en-US":"AEBko ingeles",eo:"esperanto",es:"espainiera","es-419":"Latinoamerikako espainiera","es-ES":"espainiera (Europa)","es-MX":"Mexikoko espainiera",et:"estoniera",eu:"euskara",ewo:"ewondera",fa:"persiera",ff:"fula",fi:"finlandiera",fil:"filipinera",fj:"fijiera",fo:"faroera",fon:"fona",fr:"frantses","fr-CA":"Kanadako frantses","fr-CH":"Suitzako frantses",fur:"friuliera",fy:"frisiera",ga:"irlandera",gaa:"ga",gag:"gagauzera",gd:"Eskoziako gaeliko",gez:"ge’ez",gil:"gilbertera",gl:"galiziera",gn:"guaraniera",gor:"gorontaloa",gsw:"Suitzako aleman",gu:"gujaratera",guz:"gusiiera",gv:"manxera",gwi:"gwichʼin",ha:"hausa",haw:"hawaiiera",he:"hebreera",hi:"hindi",hil:"hiligainon",hmn:"hmong",hr:"kroaziera",hsb:"goi-sorabiera",ht:"Haitiko kreolera",hu:"hungariera",hup:"hupera",hy:"armeniera",hz:"hereroera",ia:"interlingua",iba:"ibanera",ibb:"ibibioera",id:"indonesiera",ie:"interlingue",ig:"igboera",ii:"Sichuango yiera",ilo:"ilokanera",inh:"ingushera",io:"ido",is:"islandiera",it:"italiera",iu:"inuktitut",ja:"japoniera",jbo:"lojbanera",jgo:"ngomba",jmc:"machame",jv:"javera",ka:"georgiera",kab:"kabilera",kac:"jingpoera",kaj:"kaiji",kam:"kambera",kbd:"kabardiera",kcg:"kataba",kde:"makondeera",kea:"Cabo Verdeko kreolera",kfo:"koroa",kg:"kikongoa",kha:"kashia",khq:"koyra chiini",ki:"kikuyuera",kj:"kuanyama",kk:"kazakhera",kkj:"kako",kl:"groenlandiera",kln:"kalenjinera",km:"khemerera",kmb:"kimbundua",kn:"kannada",ko:"koreera",koi:"komi-permyakera",kok:"konkanera",kpe:"kpellea",kr:"kanuriera",krc:"karachayera-balkarera",krl:"kareliera",kru:"kurukhera",ks:"kaxmirera",ksb:"shambalera",ksf:"bafiera",ksh:"koloniera",ku:"kurduera",kum:"kumykera",kv:"komiera",kw:"kornubiera",ky:"kirgizera",la:"latin",lad:"ladino",lag:"langiera",lb:"luxenburgera",lez:"lezgiera",lg:"gandera",li:"limburgera",lkt:"lakotera",ln:"lingala",lo:"laosera",loz:"loziera",lrc:"iparraldeko lurera",lt:"lituaniera",lu:"Katangako lubera",lua:"txilubera",lun:"lundera",luo:"luoera",lus:"mizoa",luy:"luhyera",lv:"letoniera",mad:"madurera",mag:"magahiera",mai:"maithilera",mak:"makasarera",mas:"masaiera",mdf:"mokxera",men:"mendeera",mer:"meruera",mfe:"Mauritaniako kreolera",mg:"malgaxe",mgh:"makhuwa-meettoera",mgo:"metaʼera",mh:"marshallera",mi:"maoriera",mic:"mikmakera",min:"minangkabauera",mk:"mazedoniera",ml:"malabarera",mn:"mongoliera",mni:"manipurera",moh:"mohawkera",mos:"moreera",mr:"marathera",ms:"malaysiera",mt:"maltera",mua:"mudangera",mus:"creera",mwl:"mirandera",my:"birmaniera",myv:"erziera",mzn:"mazandarandera",na:"nauruera",nap:"napoliera",naq:"namera",nb:"bokmål (norvegiera)",nd:"iparraldeko ndebeleera",nds:"behe-aleman","nds-NL":"behe-saxoiera",ne:"nepalera","new":"newarera",ng:"ndongera",nia:"niasera",niu:"niueera",nl:"nederlandera","nl-BE":"flandriera",nmg:"kwasiera",nn:"nynorsk (norvegiera)",nnh:"ngiemboonera",no:"norvegiera",nog:"nogaiera",nqo:"n’koera",nr:"hegoaldeko ndebelera",nso:"pediera",nus:"nuerera",nv:"navajoera",ny:"chewera",nyn:"ankolera",oc:"okzitaniera",om:"oromoera",or:"oriya",os:"osetiera",pa:"punjabera",pag:"pangasinanera",pam:"pampangera",pap:"papiamento",pau:"palauera",pcm:"Nigeriako pidgina",pl:"poloniera",prg:"prusiera",ps:"paxtuera",pt:"portuges","pt-BR":"Brasilgo portuges","pt-PT":"Europako portuges",qu:"kitxua",quc:"quicheera",rap:"rapa nui",rar:"rarotongera",rm:"erretorromaniera",rn:"rundiera",ro:"errumaniera","ro-MD":"moldaviera",rof:"rombo",root:"erroa",ru:"errusiera",rup:"aromaniera",rw:"kinyaruanda",rwk:"rwera",sa:"sanskrito",sad:"sandaweera",sah:"sakhera",saq:"samburuera",sat:"santalera",sba:"ngambayera",sbp:"sanguera",sc:"sardiniera",scn:"siziliera",sco:"eskoziera",sd:"sindhi",se:"iparraldeko samiera",seh:"senera",ses:"koyraboro senni",sg:"sango",sh:"serbokroaziera",shi:"tachelhit",shn:"shanera",si:"sinhala",sk:"eslovakiera",sl:"esloveniera",sm:"samoera",sma:"hegoaldeko samiera",smj:"Luleko samiera",smn:"Inariko samiera",sms:"skolten samiera",sn:"shonera",snk:"soninkera",so:"somaliera",sq:"albaniera",sr:"serbiera",srn:"srananera",ss:"swatiera",ssy:"sahoa",st:"hegoaldeko sothoera",su:"sundanera",suk:"sukumera",sv:"suediera",sw:"swahilia","sw-CD":"Kongoko swahilia",swb:"komoreera",syr:"asiriera",ta:"tamilera",te:"telugu",tem:"temnea",teo:"tesoera",tet:"tetum",tg:"tajikera",th:"thailandiera",ti:"tigrinyera",tig:"tigrea",tk:"turkmenera",tl:"tagalog",tlh:"klingonera",tn:"tswanera",to:"tongera",tpi:"tok pisin",tr:"turkiera",trv:"tarokoa",ts:"tsongera",tt:"tatarera",tum:"tumbukera",tvl:"tuvaluera",tw:"twia",twq:"tasawaq",ty:"tahitiera",tyv:"tuvera",tzm:"Erdialdeko Atlaseko amazigera",udm:"udmurtera",ug:"uigurrera",uk:"ukrainera",umb:"umbundu",ur:"urdu",uz:"uzbekera",vai:"vaiera",ve:"vendera",vi:"vietnamera",vo:"volapük",vun:"vunjo",wa:"waloiera",wae:"walserera",wal:"welayta",war:"samerera",wo:"wolofera",xal:"kalmykera",xh:"xhosera",xog:"sogera",yav:"yangbenera",ybb:"yemba",yi:"yiddish",yo:"jorubera",yue:"kantonera",zgh:"amazigera estandarra",zh:"txinera","zh-Hans":"mandarin sinplifikatu","zh-Hant":"mandarin tradizional",zu:"zuluera",zun:"zuñia",zza:"zazera"},scriptNames:{Cyrl:"zirilikoa",Latn:"latinoa",Arab:"arabiarra",Guru:"gurmukhia",Hans:"sinplifikatua",Hant:"tradizionala"}},fa:{rtl:true,languageNames:{aa:"آفاری",ab:"آبخازی",ace:"آچئی",ach:"آچولیایی",ada:"آدانگمه‌ای",ady:"آدیجیایی",ae:"اوستایی",aeb:"عربی تونسی",af:"آفریکانس",afh:"آفریهیلی",agq:"آگیم",ain:"آینویی",ak:"آکان",akk:"اکدی",akz:"آلابامایی",ale:"آلئوتی",alt:"آلتایی جنوبی",am:"امهری",an:"آراگونی",ang:"انگلیسی باستان",anp:"آنگیکا",ar:"عربی","ar-001":"عربی رسمی",arc:"آرامی",arn:"ماپوچه‌ای",arp:"آراپاهویی",arq:"عربی الجزایری",arw:"آراواکی",ary:"عربی مراکشی",arz:"عربی مصری",as:"آسامی",asa:"آسو",ast:"آستوری",av:"آواری",awa:"اودهی",ay:"آیمارایی",az:"ترکی آذربایجانی","az-Arab":"ترکی آذری جنوبی",ba:"باشقیری",bal:"بلوچی",ban:"بالیایی",bar:"باواریایی",bas:"باسایی",bax:"بمونی",be:"بلاروسی",bej:"بجایی",bem:"بمبایی",bez:"بنایی",bg:"بلغاری",bgn:"بلوچی غربی",bho:"بوجپوری",bi:"بیسلاما",bik:"بیکولی",bin:"بینی",bla:"سیکسیکا",bm:"بامبارایی",bn:"بنگالی",bo:"تبتی",bqi:"لری بختیاری",br:"برتون",bra:"براج",brh:"براهویی",brx:"بودویی",bs:"بوسنیایی",bua:"بوریاتی",bug:"بوگیایی",byn:"بلین",ca:"کاتالان",cad:"کادویی",car:"کاریبی",ccp:"چاکما",ce:"چچنی",ceb:"سبویی",cgg:"چیگا",ch:"چامورویی",chb:"چیبچا",chg:"جغتایی",chk:"چوکی",chm:"ماریایی",cho:"چوکتویی",chp:"چیپه‌ویه‌ای",chr:"چروکیایی",chy:"شایانی",ckb:"کردی مرکزی",co:"کورسی",cop:"قبطی",cr:"کریایی",crh:"ترکی کریمه",crs:"سیشل آمیختهٔ فرانسوی",cs:"چکی",csb:"کاشوبی",cu:"اسلاوی کلیسایی",cv:"چوواشی",cy:"ولزی",da:"دانمارکی",dak:"داکوتایی",dar:"دارقینی",dav:"تایتا",de:"آلمانی","de-AT":"آلمانی اتریش","de-CH":"آلمانی معیار سوئیس",del:"دلاواری",dgr:"دوگریب",din:"دینکایی",dje:"زرما",doi:"دوگری",dsb:"صُربی سفلی",dua:"دوآلایی",dum:"هلندی میانه",dv:"دیوهی",dyo:"دیولا فونی",dyu:"دایولایی",dz:"دزونگخا",dzg:"دازاگایی",ebu:"امبو",ee:"اوه‌ای",efi:"افیکی",egy:"مصری کهن",eka:"اکاجوک",el:"یونانی",elx:"عیلامی",en:"انگلیسی","en-AU":"انگلیسی استرالیا","en-CA":"انگلیسی کانادا","en-GB":"انگلیسی بریتانیا","en-US":"انگلیسی امریکا",enm:"انگلیسی میانه",eo:"اسپرانتو",es:"اسپانیایی","es-419":"اسپانیایی امریکای لاتین","es-ES":"اسپانیایی اروپا","es-MX":"اسپانیایی مکزیک",et:"استونیایی",eu:"باسکی",ewo:"اواندو",fa:"فارسی","fa-AF":"دری",fan:"فانگی",fat:"فانتیایی",ff:"فولانی",fi:"فنلاندی",fil:"فیلیپینی",fj:"فیجیایی",fo:"فارویی",fon:"فونی",fr:"فرانسوی","fr-CA":"فرانسوی کانادا","fr-CH":"فرانسوی سوئیس",frc:"فرانسوی کادین",frm:"فرانسوی میانه",fro:"فرانسوی باستان",frr:"فریزی شمالی",frs:"فریزی شرقی",fur:"فریولیایی",fy:"فریزی غربی",ga:"ایرلندی",gaa:"گایی",gag:"گاگائوزیایی",gay:"گایویی",gba:"گبایایی",gbz:"دری زرتشتی",gd:"گیلی اسکاتلندی",gez:"گی‌ئزی",gil:"گیلبرتی",gl:"گالیسیایی",glk:"گیلکی",gmh:"آلمانی معیار میانه",gn:"گوارانی",goh:"آلمانی علیای باستان",gon:"گوندی",gor:"گورونتالو",got:"گوتی",grb:"گریبویی",grc:"یونانی کهن",gsw:"آلمانی سوئیسی",gu:"گجراتی",guz:"گوسی",gv:"مانی",gwi:"گویچ این",ha:"هوسیایی",hai:"هایدایی",haw:"هاوائیایی",he:"عبری",hi:"هندی",hif:"هندی فیجیایی",hil:"هیلی‌گاینونی",hit:"هیتی",hmn:"همونگ",ho:"موتویی هیری",hr:"کروات",hsb:"صُربی علیا",ht:"هائیتیایی",hu:"مجاری",hup:"هوپا",hy:"ارمنی",hz:"هریرویی",ia:"میان‌زبان",iba:"ایبانی",ibb:"ایبیبیو",id:"اندونزیایی",ie:"اکسیدنتال",ig:"ایگبویی",ii:"یی سیچوان",ik:"اینوپیک",ilo:"ایلوکویی",inh:"اینگوشی",io:"ایدو",is:"ایسلندی",it:"ایتالیایی",iu:"اینوکتیتوت",ja:"ژاپنی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماچامه‌ای",jpr:"فارسی یهودی",jrb:"عربی یهودی",jv:"جاوه‌ای",ka:"گرجی",kaa:"قره‌قالپاقی",kab:"قبایلی",kac:"کاچینی",kaj:"جو",kam:"کامبایی",kaw:"کاویایی",kbd:"کاباردینی",kcg:"تیاپی",kde:"ماکونده",kea:"کابووردیانو",kfo:"کورو",kg:"کنگویی",kha:"خاسیایی",kho:"ختنی",khq:"کوجراچینی",khw:"کهوار",ki:"کیکویویی",kiu:"کرمانجی",kj:"کوانیاما",kk:"قزاقی",kkj:"کاکایی",kl:"گرینلندی",kln:"کالنجین",km:"خمری",kmb:"کیمبوندویی",kn:"کانارا",ko:"کره‌ای",koi:"کومی پرمیاک",kok:"کنکانی",kpe:"کپله‌ای",kr:"کانوریایی",krc:"قره‌چایی‐بالکاری",krl:"کاریلیانی",kru:"کوروخی",ks:"کشمیری",ksb:"شامبالا",ksf:"بافیایی",ksh:"ریپواری",ku:"کردی",kum:"کومیکی",kut:"کوتنی",kv:"کومیایی",kw:"کرنوالی",ky:"قرقیزی",la:"لاتین",lad:"لادینو",lag:"لانگی",lah:"لاهندا",lam:"لامبا",lb:"لوگزامبورگی",lez:"لزگی",lg:"گاندایی",li:"لیمبورگی",lkt:"لاکوتا",ln:"لینگالا",lo:"لائوسی",lol:"مونگویی",lou:"زبان آمیختهٔ مادری لوئیزیانا",loz:"لوزیایی",lrc:"لری شمالی",lt:"لیتوانیایی",lu:"لوبایی‐کاتانگا",lua:"لوبایی‐لولوا",lui:"لویسنو",lun:"لوندایی",luo:"لوئویی",lus:"لوشه‌ای",luy:"لویا",lv:"لتونیایی",lzh:"چینی ادبی",mad:"مادورایی",mag:"ماگاهیایی",mai:"مایدیلی",mak:"ماکاسار",man:"ماندینگویی",mas:"ماسایی",mdf:"مکشایی",mdr:"ماندار",men:"منده‌ای",mer:"مرویی",mfe:"موریسین",mg:"مالاگاسیایی",mga:"ایرلندی میانه",mgh:"ماکوا متو",mgo:"متایی",mh:"مارشالی",mi:"مائوریایی",mic:"میکماکی",min:"مینانگ‌کابویی",mk:"مقدونی",ml:"مالایالامی",mn:"مغولی",mnc:"مانچویی",mni:"میته‌ای",moh:"موهاکی",mos:"ماسیایی",mr:"مراتی",ms:"مالایی",mt:"مالتی",mua:"ماندانگی",mus:"کریکی",mwl:"میراندی",mwr:"مارواری",my:"برمه‌ای",myv:"ارزیایی",mzn:"مازندرانی",na:"نائورویی",nap:"ناپلی",naq:"نامایی",nb:"نروژی بوک‌مُل",nd:"انده‌بله‌ای شمالی",nds:"آلمانی سفلی","nds-NL":"ساکسونی سفلی",ne:"نپالی","new":"نواریایی",ng:"اندونگایی",nia:"نیاسی",niu:"نیویی",nl:"هلندی","nl-BE":"فلمنگی",nmg:"کوازیو",nn:"نروژی نی‌نُشک",nnh:"نیامبون",no:"نروژی",nog:"نغایی",non:"نرس باستان",nqo:"نکو",nr:"انده‌بله‌ای جنوبی",nso:"سوتویی شمالی",nus:"نویر",nv:"ناواهویی",nwc:"نواریایی کلاسیک",ny:"نیانجایی",nym:"نیام‌وزیایی",nyn:"نیانکوله‌ای",nyo:"نیورویی",nzi:"نزیمایی",oc:"اکسیتان",oj:"اوجیبوایی",om:"اورومویی",or:"اوریه‌ای",os:"آسی",osa:"اوسیجی",ota:"ترکی عثمانی",pa:"پنجابی",pag:"پانگاسینانی",pal:"پهلوی",pam:"پامپانگایی",pap:"پاپیامنتو",pau:"پالائویی",pcm:"نیم‌زبان نیجریه‌ای",pdc:"آلمانی پنسیلوانیایی",peo:"فارسی باستان",phn:"فنیقی",pi:"پالی",pl:"لهستانی",pon:"پانپیی",prg:"پروسی",pro:"پرووانسی باستان",ps:"پشتو",pt:"پرتغالی","pt-BR":"پرتغالی برزیل","pt-PT":"پرتغالی اروپا",qu:"کچوایی",quc:"کیچه‌",raj:"راجستانی",rap:"راپانویی",rar:"راروتونگایی",rm:"رومانش",rn:"روندیایی",ro:"رومانیایی","ro-MD":"مولداویایی",rof:"رومبویی",rom:"رومانویی",root:"ریشه",ru:"روسی",rup:"آرومانی",rw:"کینیارواندایی",rwk:"روایی",sa:"سانسکریت",sad:"سانداوه‌ای",sah:"یاقوتی",sam:"آرامی سامری",saq:"سامبورو",sas:"ساساکی",sat:"سانتالی",sba:"انگامبایی",sbp:"سانگویی",sc:"ساردینیایی",scn:"سیسیلی",sco:"اسکاتلندی",sd:"سندی",sdh:"کردی جنوبی",se:"سامی شمالی",seh:"سنا",sel:"سلکوپی",ses:"کویرابورا سنی",sg:"سانگو",sga:"ایرلندی باستان",sh:"صرب و کرواتی",shi:"تاچل‌هیت",shn:"شانی",shu:"عربی چادی",si:"سینهالی",sid:"سیدامویی",sk:"اسلواکی",sl:"اسلوونیایی",sli:"سیلزیایی سفلی",sm:"ساموآیی",sma:"سامی جنوبی",smj:"لوله سامی",smn:"ایناری سامی",sms:"اسکولت سامی",sn:"شونایی",snk:"سونینکه‌ای",so:"سومالیایی",sog:"سغدی",sq:"آلبانیایی",sr:"صربی",srn:"تاکی‌تاکی",srr:"سریری",ss:"سوازیایی",ssy:"ساهو",st:"سوتویی جنوبی",su:"سوندایی",suk:"سوکومایی",sus:"سوسویی",sux:"سومری",sv:"سوئدی",sw:"سواحیلی","sw-CD":"سواحیلی کنگو",swb:"کوموری",syc:"سریانی کلاسیک",syr:"سریانی",szl:"سیلزیایی",ta:"تامیلی",te:"تلوگویی",tem:"تمنه‌ای",teo:"تسویی",ter:"ترنو",tet:"تتومی",tg:"تاجیکی",th:"تایلندی",ti:"تیگرینیایی",tig:"تیگره‌ای",tiv:"تیوی",tk:"ترکمنی",tl:"تاگالوگی",tlh:"کلینگون",tli:"تلین‌گیتی",tmh:"تاماشقی",tn:"تسوانایی",to:"تونگایی",tog:"تونگایی نیاسا",tpi:"توک‌پیسینی",tr:"ترکی استانبولی",trv:"تاروکویی",ts:"تسونگایی",tsi:"تسیم‌شیانی",tt:"تاتاری",tum:"تومبوکایی",tvl:"تووالویی",tw:"توی‌یایی",twq:"تسواکی",ty:"تاهیتیایی",tyv:"تووایی",tzm:"آمازیغی اطلس مرکزی",udm:"اودمورتی",ug:"اویغوری",uga:"اوگاریتی",uk:"اوکراینی",umb:"امبوندویی",ur:"اردو",uz:"ازبکی",vai:"ویایی",ve:"وندایی",vi:"ویتنامی",vo:"ولاپوک",vot:"وتی",vun:"ونجو",wa:"والونی",wae:"والسر",wal:"والامو",war:"وارایی",was:"واشویی",wbp:"وارلپیری",wo:"ولوفی",xal:"قلموقی",xh:"خوسایی",xog:"سوگایی",yao:"یائویی",yap:"یاپی",yav:"یانگبنی",ybb:"یمبایی",yi:"یدی",yo:"یوروبایی",yue:"کانتونی",za:"چوانگی",zap:"زاپوتکی",zen:"زناگا",zgh:"آمازیغی معیار مراکش",zh:"چینی","zh-Hans":"چینی ماندارین ساده‌شده","zh-Hant":"چینی ماندارین سنتی",zu:"زولویی",zun:"زونیایی",zza:"زازایی"},scriptNames:{Cyrl:"سیریلی",Latn:"لاتینی",Arab:"عربی",Guru:"گورومخی",Tfng:"تیفیناغی",Vaii:"ویایی",Hans:"ساده‌شده",Hant:"سنتی"}},fi:{rtl:false,languageNames:{aa:"afar",ab:"abhaasi",ace:"atšeh",ach:"atšoli",ada:"adangme",ady:"adyge",ae:"avesta",aeb:"tunisianarabia",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadi",akz:"alabama",ale:"aleutti",aln:"gegi",alt:"altai",am:"amhara",an:"aragonia",ang:"muinaisenglanti",anp:"angika",ar:"arabia","ar-001":"yleisarabia",arc:"valtakunnanaramea",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algerianarabia",ars:"arabia – najd",arw:"arawak",ary:"marokonarabia",arz:"egyptinarabia",as:"assami",asa:"asu",ase:"amerikkalainen viittomakieli",ast:"asturia",av:"avaari",avk:"kotava",awa:"awadhi",ay:"aimara",az:"azeri",ba:"baškiiri",bal:"belutši",ban:"bali",bar:"baijeri",bas:"basaa",bax:"bamum",bbc:"batak-toba",bbj:"ghomala",be:"valkovenäjä",bej:"bedža",bem:"bemba",bew:"betawi",bez:"bena",bfd:"fut",bfq:"badaga",bg:"bulgaria",bgn:"länsibelutši",bho:"bhodžpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tiibet",bpy:"bišnupria",bqi:"bahtiari",br:"bretoni",bra:"bradž",brh:"brahui",brx:"bodo",bs:"bosnia",bss:"koose",bua:"burjaatti",bug:"bugi",bum:"bulu",byn:"bilin",byv:"medumba",ca:"katalaani",cad:"caddo",car:"karibi",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tšetšeeni",ceb:"cebuano",cgg:"kiga",ch:"tšamorro",chb:"tšibtša",chg:"tšagatai",chk:"chuuk",chm:"mari",chn:"chinook-jargon",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsika",cop:"kopti",cps:"capiznon",cr:"cree",crh:"krimintataari",crs:"seychellienkreoli",cs:"tšekki",csb:"kašubi",cu:"kirkkoslaavi",cv:"tšuvassi",cy:"kymri",da:"tanska",dak:"dakota",dar:"dargi",dav:"taita",de:"saksa","de-AT":"itävallansaksa","de-CH":"sveitsinyläsaksa",del:"delaware",den:"slevi",dgr:"dogrib",din:"dinka",dje:"djerma",doi:"dogri",dsb:"alasorbi",dtp:"dusun",dua:"duala",dum:"keskihollanti",dv:"divehi",dyo:"jola-fonyi",dyu:"djula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilia",egy:"muinaisegypti",eka:"ekajuk",el:"kreikka",elx:"elami",en:"englanti","en-AU":"australianenglanti","en-CA":"kanadanenglanti","en-GB":"britannianenglanti","en-US":"amerikanenglanti",enm:"keskienglanti",eo:"esperanto",es:"espanja","es-419":"amerikanespanja","es-ES":"euroopanespanja","es-MX":"meksikonespanja",esu:"alaskanjupik",et:"viro",eu:"baski",ewo:"ewondo",ext:"extremadura",fa:"persia",fan:"fang",fat:"fanti",ff:"fulani",fi:"suomi",fil:"filipino",fit:"meänkieli",fj:"fidži",fo:"fääri",fr:"ranska","fr-CA":"kanadanranska","fr-CH":"sveitsinranska",frc:"cajunranska",frm:"keskiranska",fro:"muinaisranska",frp:"arpitaani",frr:"pohjoisfriisi",frs:"itäfriisi",fur:"friuli",fy:"länsifriisi",ga:"iiri",gaa:"ga",gag:"gagauzi",gan:"gan-kiina",gay:"gajo",gba:"gbaja",gbz:"zoroastrialaisdari",gd:"gaeli",gez:"ge’ez",gil:"kiribati",gl:"galicia",glk:"gilaki",gmh:"keskiyläsaksa",gn:"guarani",goh:"muinaisyläsaksa",gom:"goankonkani",gon:"gondi",gor:"gorontalo",got:"gootti",grb:"grebo",grc:"muinaiskreikka",gsw:"sveitsinsaksa",gu:"gudžarati",guc:"wayuu",gur:"frafra",guz:"gusii",gv:"manksi",gwi:"gwitšin",ha:"hausa",hai:"haida",hak:"hakka-kiina",haw:"havaiji",he:"heprea",hi:"hindi",hif:"fidžinhindi",hil:"hiligaino",hit:"heetti",hmn:"hmong",ho:"hiri-motu",hr:"kroatia",hsb:"yläsorbi",hsn:"xiang-kiina",ht:"haiti",hu:"unkari",hup:"hupa",hy:"armenia",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesia",ie:"interlingue",ig:"igbo",ii:"sichuanin-yi",ik:"inupiaq",ilo:"iloko",inh:"inguuši",io:"ido",is:"islanti",it:"italia",iu:"inuktitut",izh:"inkeroinen",ja:"japani",jam:"jamaikankreolienglanti",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"juutalaispersia",jrb:"juutalaisarabia",jut:"juutti",jv:"jaava",ka:"georgia",kaa:"karakalpakki",kab:"kabyyli",kac:"katšin",kaj:"jju",kam:"kamba",kaw:"kavi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdenkreoli",ken:"kenyang",kfo:"norsunluurannikonkoro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotani",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmanjki",kj:"kuanjama",kk:"kazakki",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"korea",koi:"komipermjakki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karatšai-balkaari",kri:"krio",krj:"kinaray-a",krl:"karjala",kru:"kurukh",ks:"kašmiri",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdi",kum:"kumykki",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiisi",la:"latina",lad:"ladino",lag:"lango",lah:"lahnda",lam:"lamba",lb:"luxemburg",lez:"lezgi",lfn:"lingua franca nova",lg:"ganda",li:"limburg",lij:"liguuri",liv:"liivi",lkt:"lakota",lmo:"lombardi",ln:"lingala",lo:"lao",lol:"mongo",lou:"louisianankreoli",loz:"lozi",lrc:"pohjoisluri",lt:"liettua",ltg:"latgalli",lu:"katanganluba",lua:"luluanluba",lui:"luiseño",lun:"lunda",lus:"lusai",luy:"luhya",lv:"latvia",lzh:"klassinen kiina",lzz:"lazi",mad:"madura",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"maasai",mde:"maba",mdf:"mokša",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malagassi",mga:"keski-iiri",mgh:"makua-meetto",mgo:"meta’",mh:"marshall",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonia",ml:"malajalam",mn:"mongoli",mnc:"mantšu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"vuorimari",ms:"malaiji",mt:"malta",mua:"mundang",mus:"creek",mwl:"mirandeesi",mwr:"marwari",mwv:"mentawai",my:"burma",mye:"myene",myv:"ersä",mzn:"mazandarani",na:"nauru",nan:"min nan -kiina",nap:"napoli",naq:"nama",nb:"norjan bokmål",nd:"pohjois-ndebele",nds:"alasaksa","nds-NL":"alankomaidenalasaksa",ne:"nepali","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao naga",nl:"hollanti","nl-BE":"flaami",nmg:"kwasio",nn:"norjan nynorsk",nnh:"ngiemboon",no:"norja",nog:"nogai",non:"muinaisnorja",nov:"novial",nqo:"n’ko",nr:"etelä-ndebele",nso:"pohjoissotho",nus:"nuer",nv:"navajo",nwc:"klassinen newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitaani",oj:"odžibwa",om:"oromo",or:"orija",os:"osseetti",osa:"osage",ota:"osmani",pa:"pandžabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamentu",pau:"palau",pcd:"picardi",pcm:"nigerianpidgin",pdc:"pennsylvaniansaksa",pdt:"plautdietsch",peo:"muinaispersia",pfl:"pfaltsi",phn:"foinikia",pi:"paali",pl:"puola",pms:"piemonte",pnt:"pontoksenkreikka",pon:"pohnpei",prg:"muinaispreussi",pro:"muinaisprovensaali",ps:"paštu",pt:"portugali","pt-BR":"brasilianportugali","pt-PT":"euroopanportugali",qu:"ketšua",quc:"kʼicheʼ",qug:"chimborazonylänköketšua",raj:"radžastani",rap:"rapanui",rar:"rarotonga",rgn:"romagnoli",rif:"tarifit",rm:"retoromaani",rn:"rundi",ro:"romania","ro-MD":"moldova",rof:"rombo",rom:"romani",root:"juuri",rtm:"rotuma",ru:"venäjä",rue:"ruteeni",rug:"roviana",rup:"aromania",rw:"ruanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakuutti",sam:"samarianaramea",saq:"samburu",sas:"sasak",sat:"santali",saz:"sauraštri",sba:"ngambay",sbp:"sangu",sc:"sardi",scn:"sisilia",sco:"skotti",sd:"sindhi",sdc:"sassarinsardi",sdh:"eteläkurdi",se:"pohjoissaame",see:"seneca",seh:"sena",sei:"seri",sel:"selkuppi",ses:"koyraboro senni",sg:"sango",sga:"muinaisiiri",sgs:"samogiitti",sh:"serbokroaatti",shi:"tašelhit",shn:"shan",shu:"tšadinarabia",si:"sinhala",sid:"sidamo",sk:"slovakki",sl:"sloveeni",sli:"sleesiansaksa",sly:"selayar",sm:"samoa",sma:"eteläsaame",smj:"luulajansaame",smn:"inarinsaame",sms:"koltansaame",sn:"šona",snk:"soninke",so:"somali",sog:"sogdi",sq:"albania",sr:"serbia",srn:"sranan",srr:"serer",ss:"swazi",ssy:"saho",st:"eteläsotho",stq:"saterlandinfriisi",su:"sunda",suk:"sukuma",sus:"susu",sux:"sumeri",sv:"ruotsi",sw:"swahili","sw-CD":"kingwana",swb:"komori",syc:"muinaissyyria",syr:"syyria",szl:"sleesia",ta:"tamili",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžikki",th:"thai",ti:"tigrinja",tig:"tigre",tk:"turkmeeni",tkl:"tokelau",tkr:"tsahuri",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"tališi",tmh:"tamašek",tn:"tswana",to:"tonga",tog:"malawintonga",tpi:"tok-pisin",tr:"turkki",tru:"turojo",trv:"taroko",ts:"tsonga",tsd:"tsakonia",tsi:"tsimši",tt:"tataari",ttt:"tati",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahiti",tyv:"tuva",tzm:"keskiatlaksentamazight",udm:"udmurtti",ug:"uiguuri",uga:"ugarit",uk:"ukraina",umb:"mbundu",ur:"urdu",uz:"uzbekki",ve:"venda",vec:"venetsia",vep:"vepsä",vi:"vietnam",vls:"länsiflaami",vmf:"maininfrankki",vo:"volapük",vot:"vatja",vro:"võro",vun:"vunjo",wa:"valloni",wae:"walser",wal:"wolaitta",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu-kiina",xal:"kalmukki",xh:"xhosa",xmf:"mingreli",xog:"soga",yao:"jao",yap:"japi",yav:"yangben",ybb:"yemba",yi:"jiddiš",yo:"joruba",yrl:"ñeengatú",yue:"kantoninkiina",za:"zhuang",zap:"zapoteekki",zbl:"blisskieli",zea:"seelanti",zen:"zenaga",zgh:"vakioitu tamazight",zh:"kiina","zh-Hans":"kiina (yksinkertaistettu)","zh-Hant":"kiina (perinteinen)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillinen",Latn:"latinalainen",Arab:"arabialainen",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vailainen",Hans:"yksinkertaistettu",Hant:"perinteinen"}},fr:{rtl:false,languageNames:{aa:"afar",ab:"abkhaze",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyguéen",ae:"avestique",aeb:"arabe tunisien",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"aïnou",ak:"akan",akk:"akkadien",akz:"alabama",ale:"aléoute",aln:"guègue",alt:"altaï du Sud",am:"amharique",an:"aragonais",ang:"ancien anglais",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arc:"araméen",arn:"mapuche",aro:"araona",arp:"arapaho",arq:"arabe algérien",ars:"arabe najdi",arw:"arawak",ary:"arabe marocain",arz:"arabe égyptien",as:"assamais",asa:"asu",ase:"langue des signes américaine",ast:"asturien",av:"avar",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azéri",ba:"bachkir",bal:"baloutchi",ban:"balinais",bar:"bavarois",bas:"bassa",bax:"bamoun",bbc:"batak toba",bbj:"ghomalaʼ",be:"biélorusse",bej:"bedja",bem:"bemba",bew:"betawi",bez:"béna",bfd:"bafut",bfq:"badaga",bg:"bulgare",bgn:"baloutchi occidental",bho:"bhodjpouri",bi:"bichelamar",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibétain",bpy:"bishnupriya",bqi:"bakhtiari",br:"breton",bra:"braj",brh:"brahoui",brx:"bodo",bs:"bosniaque",bss:"akoose",bua:"bouriate",bug:"bugi",bum:"boulou",byn:"blin",byv:"médumba",ca:"catalan",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma kodha",ce:"tchétchène",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tchaghataï",chk:"chuuk",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"corse",cop:"copte",cps:"capiznon",cr:"cree",crh:"turc de Crimée",crs:"créole seychellois",cs:"tchèque",csb:"kachoube",cu:"slavon d’église",cv:"tchouvache",cy:"gallois",da:"danois",dak:"dakota",dar:"dargwa",dav:"taita",de:"allemand","de-AT":"allemand autrichien","de-CH":"allemand suisse",del:"delaware",den:"esclave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"bas-sorabe",dtp:"dusun central",dua:"douala",dum:"moyen néerlandais",dv:"maldivien",dyo:"diola-fogny",dyu:"dioula",dz:"dzongkha",dzg:"dazaga",ebu:"embou",ee:"éwé",efi:"éfik",egl:"émilien",egy:"égyptien ancien",eka:"ékadjouk",el:"grec",elx:"élamite",en:"anglais","en-AU":"anglais australien","en-CA":"anglais canadien","en-GB":"anglais britannique","en-US":"anglais américain",enm:"moyen anglais",eo:"espéranto",es:"espagnol","es-419":"espagnol d’Amérique latine","es-ES":"espagnol d’Espagne","es-MX":"espagnol du Mexique",esu:"youpik central",et:"estonien",eu:"basque",ewo:"éwondo",ext:"estrémègne",fa:"persan",fan:"fang",fat:"fanti",ff:"peul",fi:"finnois",fil:"filipino",fit:"finnois tornédalien",fj:"fidjien",fo:"féroïen",fr:"français","fr-CA":"français canadien","fr-CH":"français suisse",frc:"français cadien",frm:"moyen français",fro:"ancien français",frp:"francoprovençal",frr:"frison du Nord",frs:"frison oriental",fur:"frioulan",fy:"frison occidental",ga:"irlandais",gaa:"ga",gag:"gagaouze",gay:"gayo",gba:"gbaya",gbz:"dari zoroastrien",gd:"gaélique écossais",gez:"guèze",gil:"gilbertin",gl:"galicien",glk:"gilaki",gmh:"moyen haut-allemand",gn:"guarani",goh:"ancien haut allemand",gom:"konkani de Goa",gon:"gondi",gor:"gorontalo",got:"gotique",grb:"grebo",grc:"grec ancien",gsw:"suisse allemand",gu:"goudjerati",guc:"wayuu",gur:"gurenne",guz:"gusii",gv:"mannois",gwi:"gwichʼin",ha:"haoussa",hai:"haida",hak:"hakka",haw:"hawaïen",he:"hébreu",hi:"hindi",hif:"hindi fidjien",hil:"hiligaynon",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croate",hsb:"haut-sorabe",hsn:"xiang",ht:"créole haïtien",hu:"hongrois",hup:"hupa",hy:"arménien",hz:"héréro",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonésien",ie:"interlingue",ig:"igbo",ii:"yi du Sichuan",ik:"inupiaq",ilo:"ilocano",inh:"ingouche",io:"ido",is:"islandais",it:"italien",iu:"inuktitut",izh:"ingrien",ja:"japonais",jam:"créole jamaïcain",jbo:"lojban",jgo:"ngomba",jmc:"matchamé",jpr:"judéo-persan",jrb:"judéo-arabe",jut:"jute",jv:"javanais",ka:"géorgien",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabarde",kbl:"kanembou",kcg:"tyap",kde:"makondé",kea:"capverdien",ken:"kényang",kfo:"koro",kg:"kikongo",kgp:"caingangue",kha:"khasi",kho:"khotanais",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandais",kln:"kalendjin",km:"khmer",kmb:"kimboundou",kn:"kannada",ko:"coréen",koi:"komi-permiak",kok:"konkani",kos:"kosraéen",kpe:"kpellé",kr:"kanouri",krc:"karatchaï balkar",kri:"krio",krj:"kinaray-a",krl:"carélien",kru:"kouroukh",ks:"cachemiri",ksb:"shambala",ksf:"bafia",ksh:"francique ripuaire",ku:"kurde",kum:"koumyk",kut:"kutenai",kv:"komi",kw:"cornique",ky:"kirghize",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxembourgeois",lez:"lezghien",lfn:"lingua franca nova",lg:"ganda",li:"limbourgeois",lij:"ligure",liv:"livonien",lkt:"lakota",lmo:"lombard",ln:"lingala",lo:"lao",lol:"mongo",lou:"créole louisianais",loz:"lozi",lrc:"lori du Nord",lt:"lituanien",ltg:"latgalien",lu:"luba-katanga (kiluba)",lua:"luba-kasaï (ciluba)",lui:"luiseño",lun:"lunda",lus:"lushaï",luy:"luyia",lv:"letton",lzh:"chinois littéraire",lzz:"laze",mad:"madurais",maf:"mafa",mag:"magahi",mai:"maïthili",mak:"makassar",man:"mandingue",mas:"maasaï",mde:"maba",mdf:"mokcha",mdr:"mandar",men:"mendé",mer:"meru",mfe:"créole mauricien",mg:"malgache",mga:"moyen irlandais",mgh:"makua",mgo:"metaʼ",mh:"marshallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macédonien",ml:"malayalam",mn:"mongol",mnc:"mandchou",mni:"manipuri",moh:"mohawk",mos:"moré",mr:"marathi",mrj:"mari occidental",ms:"malais",mt:"maltais",mua:"moundang",mus:"creek",mwl:"mirandais",mwr:"marwarî",mwv:"mentawaï",my:"birman",mye:"myènè",myv:"erzya",mzn:"mazandérani",na:"nauruan",nan:"minnan",nap:"napolitain",naq:"nama",nb:"norvégien bokmål",nd:"ndébélé du Nord",nds:"bas-allemand","nds-NL":"bas-saxon néerlandais",ne:"népalais","new":"newari",ng:"ndonga",nia:"niha",niu:"niuéen",njo:"Ao",nl:"néerlandais","nl-BE":"flamand",nmg:"ngoumba",nn:"norvégien nynorsk",nnh:"ngiemboon",no:"norvégien",nog:"nogaï",non:"vieux norrois",nov:"novial",nqo:"n’ko",nr:"ndébélé du Sud",nso:"sotho du Nord",nus:"nuer",nv:"navajo",nwc:"newarî classique",ny:"chewa",nym:"nyamwezi",nyn:"nyankolé",nyo:"nyoro",nzi:"nzema",oc:"occitan",oj:"ojibwa",om:"oromo",or:"odia",os:"ossète",osa:"osage",ota:"turc ottoman",pa:"pendjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palau",pcd:"picard",pcm:"pidgin nigérian",pdc:"pennsilfaanisch",pdt:"bas-prussien",peo:"persan ancien",pfl:"allemand palatin",phn:"phénicien",pi:"pali",pl:"polonais",pms:"piémontais",pnt:"pontique",pon:"pohnpei",prg:"prussien",pro:"provençal ancien",ps:"pachto",pt:"portugais","pt-BR":"portugais brésilien","pt-PT":"portugais européen",qu:"quechua",quc:"quiché",qug:"quichua du Haut-Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotongien",rgn:"romagnol",rif:"rifain",rm:"romanche",rn:"roundi",ro:"roumain","ro-MD":"moldave",rof:"rombo",rom:"romani",root:"racine",rtm:"rotuman",ru:"russe",rue:"ruthène",rug:"roviana",rup:"aroumain",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"iakoute",sam:"araméen samaritain",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"isangu",sc:"sarde",scn:"sicilien",sco:"écossais",sd:"sindhi",sdc:"sarde sassarais",sdh:"kurde du Sud",se:"same du Nord",see:"seneca",seh:"cisena",sei:"séri",sel:"selkoupe",ses:"koyraboro senni",sg:"sango",sga:"ancien irlandais",sgs:"samogitien",sh:"serbo-croate",shi:"chleuh",shn:"shan",shu:"arabe tchadien",si:"cingalais",sid:"sidamo",sk:"slovaque",sl:"slovène",sli:"bas-silésien",sly:"sélayar",sm:"samoan",sma:"same du Sud",smj:"same de Lule",smn:"same d’Inari",sms:"same skolt",sn:"shona",snk:"soninké",so:"somali",sog:"sogdien",sq:"albanais",sr:"serbe",srn:"sranan tongo",srr:"sérère",ss:"swati",ssy:"saho",st:"sotho du Sud",stq:"saterlandais",su:"soundanais",suk:"soukouma",sus:"soussou",sux:"sumérien",sv:"suédois",sw:"swahili","sw-CD":"swahili du Congo",swb:"comorien",syc:"syriaque classique",syr:"syriaque",szl:"silésien",ta:"tamoul",tcy:"toulou",te:"télougou",tem:"timné",teo:"teso",ter:"tereno",tet:"tétoum",tg:"tadjik",th:"thaï",ti:"tigrigna",tig:"tigré",tk:"turkmène",tkl:"tokelau",tkr:"tsakhour",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"talysh",tmh:"tamacheq",tn:"tswana",to:"tongien",tog:"tonga nyasa",tpi:"tok pisin",tr:"turc",tru:"touroyo",trv:"taroko",ts:"tsonga",tsd:"tsakonien",tsi:"tsimshian",tt:"tatar",ttt:"tati caucasien",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitien",tyv:"touvain",tzm:"amazighe de l’Atlas central",udm:"oudmourte",ug:"ouïghour",uga:"ougaritique",uk:"ukrainien",umb:"umbundu",ur:"ourdou",uz:"ouzbek",vai:"vaï",ve:"venda",vec:"vénitien",vep:"vepse",vi:"vietnamien",vls:"flamand occidental",vmf:"franconien du Main",vo:"volapük",vot:"vote",vro:"võro",vun:"vunjo",wa:"wallon",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmouk",xh:"xhosa",xmf:"mingrélien",xog:"soga",yap:"yapois",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatou",yue:"cantonais",za:"zhuang",zap:"zapotèque",zbl:"symboles Bliss",zea:"zélandais",zen:"zenaga",zgh:"amazighe standard marocain",zh:"chinois","zh-Hans":"mandarin simplifié","zh-Hant":"mandarin traditionnel",zu:"zoulou",zun:"zuñi",zza:"zazaki"},scriptNames:{Cyrl:"cyrillique",Latn:"latin",Arab:"arabe",Guru:"gourmoukhî",Tfng:"tifinagh",Vaii:"vaï",Hans:"simplifié",Hant:"traditionnel"}},gan:{rtl:false,languageNames:{},scriptNames:{}},gl:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"achinés",ach:"acholí",ada:"adangme",ady:"adigueo",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleutiano",alt:"altai meridional",am:"amhárico",an:"aragonés",anp:"angika",ar:"árabe","ar-001":"árabe estándar moderno",arc:"arameo",arn:"mapuche",arp:"arapaho",as:"assamés",asa:"asu",ast:"asturiano",av:"avar",awa:"awadhi",ay:"aimará",az:"acerbaixano",ba:"baxkir",ban:"balinés",bas:"basaa",be:"belaruso",bem:"bemba",bez:"bena",bg:"búlgaro",bgn:"baluchi occidental",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksiká",bm:"bambara",bn:"bengalí",bo:"tibetano",br:"bretón",brx:"bodo",bs:"bosníaco",bug:"buginés",byn:"blin",ca:"catalán",ce:"checheno",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chk:"chuuk",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"seselwa (crioulo das Seychelles)",cs:"checo",cu:"eslavo eclesiástico",cv:"chuvaxo",cy:"galés",da:"dinamarqués",dak:"dakota",dar:"dargwa",dav:"taita",de:"alemán","de-AT":"alemán austríaco","de-CH":"alto alemán suízo",dgr:"dogrib",dje:"zarma",dsb:"baixo sorbio",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"exipcio antigo",eka:"ekajuk",el:"grego",en:"inglés","en-AU":"inglés australiano","en-CA":"inglés canadense","en-GB":"inglés británico","en-US":"inglés estadounidense",eo:"esperanto",es:"español","es-419":"español de América","es-ES":"español de España","es-MX":"español de México",et:"estoniano",eu:"éuscaro",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finés",fil:"filipino",fj:"fixiano",fo:"feroés",fr:"francés","fr-CA":"francés canadense","fr-CH":"francés suízo",fur:"friulano",fy:"frisón occidental",ga:"irlandés",gaa:"ga",gag:"gagauz",gd:"gaélico escocés",gez:"ge’ez",gil:"kiribatiano",gl:"galego",gn:"guaraní",gor:"gorontalo",grc:"grego antigo",gsw:"alemán suízo",gu:"guxarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croata",hsb:"alto sorbio",ht:"crioulo haitiano",hu:"húngaro",hup:"hupa",hy:"armenio",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesio",ig:"igbo",ii:"yi sichuanés",ilo:"ilocano",inh:"inguxo",io:"ido",is:"islandés",it:"italiano",iu:"inuktitut",ja:"xaponés",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"xavanés",ka:"xeorxiano",kab:"cabila",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"caboverdiano",kfo:"koro",kg:"kongo",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandés",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannará",ko:"coreano",koi:"komi permio",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"carachaio-bálcara",krl:"carelio",kru:"kurukh",ks:"caxemirés",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdo",kum:"kumyk",kv:"komi",kw:"córnico",ky:"kirguiz",la:"latín",lad:"ladino",lag:"langi",lb:"luxemburgués",lez:"lezguio",lg:"ganda",li:"limburgués",lkt:"lakota",ln:"lingala",lo:"laosiano",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letón",mad:"madurés",mag:"magahi",mai:"maithili",mak:"makasar",mas:"masai",mdf:"moksha",men:"mende",mer:"meru",mfe:"crioulo mauriciano",mg:"malgaxe",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalés",mi:"maorí",mic:"micmac",min:"minangkabau",mk:"macedonio",ml:"malabar",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaio",mt:"maltés",mua:"mundang",mus:"creek",mwl:"mirandés",my:"birmano",myv:"erzya",mzn:"mazandaraní",na:"nauruano",nap:"napolitano",naq:"nama",nb:"noruegués bokmål",nd:"ndebele setentrional",nds:"baixo alemán","nds-NL":"baixo saxón",ne:"nepalí","new":"newari",ng:"ndonga",nia:"nias",niu:"niueano",nl:"neerlandés","nl-BE":"flamengo",nmg:"kwasio",nn:"noruegués nynorsk",nnh:"ngiemboon",no:"noruegués",nog:"nogai",nqo:"n’ko",nr:"ndebele meridional",nso:"sesotho do norte",nus:"nuer",nv:"navajo",ny:"chewa",nyn:"nyankole",oc:"occitano",om:"oromo",or:"odiá",os:"ossetio",pa:"panxabí",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nixeriano",pl:"polaco",prg:"prusiano",ps:"paxto",pt:"portugués","pt-BR":"portugués do Brasil","pt-PT":"portugués de Portugal",qu:"quechua",quc:"quiché",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romanés","ro-MD":"moldavo",rof:"rombo",root:"raíz",ru:"ruso",rup:"aromanés",rw:"kiñaruanda",rwk:"rwa",sa:"sánscrito",sad:"sandawe",sah:"iacuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"escocés",sd:"sindhi",sdh:"kurdo meridional",se:"saami setentrional",seh:"sena",ses:"koyraboro senni",sg:"sango",sh:"serbocroata",shi:"tachelhit",shn:"shan",si:"cingalés",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"saami meridional",smj:"saami de Lule",smn:"saami de Inari",sms:"saami skolt",sn:"shona",snk:"soninke",so:"somalí",sq:"albanés",sr:"serbio",srn:"sranan tongo",ss:"suazi",ssy:"saho",st:"sesotho",su:"sundanés",suk:"sukuma",sv:"sueco",sw:"suahili","sw-CD":"suahili congolés",swb:"comoriano",syr:"siríaco",ta:"támil",te:"telugu",tem:"temne",teo:"teso",tet:"tetun",tg:"taxico",th:"tailandés",ti:"tigriña",tig:"tigré",tk:"turkmeno",tl:"tagalo",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tártaro",tum:"tumbuka",tvl:"tuvalés",tw:"twi",twq:"tasawaq",ty:"tahitiano",tyv:"tuvaniano",tzm:"tamazight de Marrocos central",udm:"udmurto",ug:"uigur",uk:"ucraíno",umb:"umbundu",ur:"urdú",uz:"uzbeko",ve:"venda",vi:"vietnamita",vo:"volapuk",vun:"vunjo",wa:"valón",wae:"walser",wal:"wolaytta",war:"waray-waray",wbp:"walrpiri",wo:"wólof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"ioruba",yue:"cantonés",zgh:"tamazight marroquí estándar",zh:"chinés","zh-Hans":"chinés mandarín simplificado","zh-Hant":"chinés mandarín tradicional",zu:"zulú",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latino",Arab:"árabe",Guru:"gurmukhi",Hans:"simplificado",Hant:"tradicional"}},gu:{rtl:false,languageNames:{aa:"અફાર",ab:"અબખાજિયન",ace:"અચીની",ach:"એકોલી",ada:"અદાંગ્મી",ady:"અદિઘે",ae:"અવેસ્તન",af:"આફ્રિકન્સ",afh:"અફ્રિહિલી",agq:"અઘેમ",ain:"ઐનુ",ak:"અકાન",akk:"અક્કાદીયાન",ale:"અલેઉત",alt:"દક્ષિણ અલ્તાઇ",am:"એમ્હારિક",an:"અર્ગોનીઝ",ang:"જુની અંગ્રેજી",anp:"અંગીકા",ar:"અરબી","ar-001":"મોડર્ન સ્ટાન્ડર્ડ અરબી",arc:"એરમૈક",arn:"મેપુચે",arp:"અરાપાહો",arq:"આલ્જેરિયન અરબી",arw:"અરાવક",ary:"મોરોક્કન અરબી",arz:"ઈજિપ્શિયન અરબી",as:"આસામી",asa:"અસુ",ast:"અસ્તુરિયન",av:"અવેરિક",awa:"અવધી",ay:"આયમારા",az:"અઝરબૈજાની",ba:"બશ્કીર",bal:"બલૂચી",ban:"બાલિનીસ",bas:"બસા",bax:"બામન",be:"બેલારુશિયન",bej:"બેજા",bem:"બેમ્બા",bez:"બેના",bg:"બલ્ગેરિયન",bgn:"પશ્ચિમી બાલોચી",bho:"ભોજપુરી",bi:"બિસ્લામા",bik:"બિકોલ",bin:"બિની",bla:"સિક્સિકા",bm:"બામ્બારા",bn:"બાંગ્લા",bo:"તિબેટીયન",bpy:"બિષ્નુપ્રિયા",br:"બ્રેટોન",bra:"વ્રજ",brh:"બ્રાહુઈ",brx:"બોડો",bs:"બોસ્નિયન",bua:"બુરિયાત",bug:"બુગિનીસ",byn:"બ્લિન",ca:"કતલાન",cad:"કડ્ડો",car:"કરિબ",cch:"અત્સમ",ccp:"ચકમા",ce:"ચેચન",ceb:"સિબુઆનો",cgg:"ચિગા",ch:"કેમોરો",chb:"ચિબ્ચા",chg:"છગાતાઇ",chk:"ચૂકીસ",chm:"મારી",chn:"ચિનૂક જાર્ગન",cho:"ચોક્તૌ",chp:"શિપેવ્યાન",chr:"શેરોકી",chy:"શેયેન્ન",ckb:"સેન્ટ્રલ કુર્દિશ",co:"કોર્સિકન",cop:"કોપ્ટિક",cr:"ક્રી",crh:"ક્રિમિયન તુર્કી",crs:"સેસેલ્વા ક્રેઓલે ફ્રેન્ચ",cs:"ચેક",csb:"કાશુબિયન",cu:"ચર્ચ સ્લાવિક",cv:"ચૂવાશ",cy:"વેલ્શ",da:"ડેનિશ",dak:"દાકોતા",dar:"દાર્ગવા",dav:"તૈતા",de:"જર્મન","de-AT":"ઓસ્ટ્રિઅન જર્મન","de-CH":"સ્વિસ હાય જર્મન",del:"દેલવેર",den:"સ્લેવ",dgr:"ડોગ્રિબ",din:"દિન્કા",dje:"ઝર્મા",doi:"ડોગ્રી",dsb:"લોઅર સોર્બિયન",dua:"દુઆલા",dum:"મધ્ય ડચ",dv:"દિવેહી",dyo:"જોલા-ફોન્યી",dyu:"ડ્યુલા",dz:"ડ્ઝોંગ્ખા",dzg:"દાઝાગા",ebu:"ઍમ્બુ",ee:"ઈવ",efi:"એફિક",egy:"પ્રાચીન ઇજીપ્શિયન",eka:"એકાજુક",el:"ગ્રીક",elx:"એલામાઇટ",en:"અંગ્રેજી","en-AU":"ઓસ્ટ્રેલિયન અંગ્રેજી","en-CA":"કેનેડિયન અંગ્રેજી","en-GB":"બ્રિટિશ અંગ્રેજી","en-US":"અમેરિકન અંગ્રેજી",enm:"મિડિલ અંગ્રેજી",eo:"એસ્પેરાન્ટો",es:"સ્પેનિશ","es-419":"લેટિન અમેરિકન સ્પેનિશ","es-ES":"યુરોપિયન સ્પેનિશ","es-MX":"મેક્સિકન સ્પેનિશ",et:"એસ્ટોનિયન",eu:"બાસ્ક",ewo:"ઇવોન્ડો",fa:"ફારસી",fan:"ફેંગ",fat:"ફન્ટી",ff:"ફુલાહ",fi:"ફિનિશ",fil:"ફિલિપિનો",fj:"ફીજીયન",fo:"ફોરિસ્ત",fon:"ફોન",fr:"ફ્રેન્ચ","fr-CA":"કેનેડિયન ફ્રેંચ","fr-CH":"સ્વિસ ફ્રેંચ",frc:"કાજૂન ફ્રેન્ચ",frm:"મિડિલ ફ્રેંચ",fro:"જૂની ફ્રેંચ",frr:"ઉત્તરીય ફ્રિશિયન",frs:"પૂર્વ ફ્રિશિયન",fur:"ફ્રિયુલિયાન",fy:"પશ્ચિમી ફ્રિસિયન",ga:"આઇરિશ",gaa:"ગા",gag:"ગાગાઝ",gay:"ગાયો",gba:"બાયા",gbz:"ઝોરોસ્ટ્રિઅન દારી",gd:"સ્કોટીસ ગેલિક",gez:"ગીઝ",gil:"જિલ્બરટીઝ",gl:"ગેલિશિયન",gmh:"મધ્ય હાઇ જર્મન",gn:"ગુઆરાની",goh:"જૂની હાઇ જર્મન",gom:"ગોઅન કોંકણી",gon:"ગોંડી",gor:"ગોરોન્તાલો",got:"ગોથિક",grb:"ગ્રેબો",grc:"પ્રાચીન ગ્રીક",gsw:"સ્વિસ જર્મન",gu:"ગુજરાતી",guz:"ગુસી",gv:"માંક્સ",gwi:"ગ્વિચ’ઇન",ha:"હૌસા",hai:"હૈડા",haw:"હવાઇયન",he:"હીબ્રુ",hi:"હિન્દી",hif:"ફીજી હિંદી",hil:"હિલિગેનોન",hit:"હિટ્ટિતે",hmn:"હમોંગ",ho:"હિરી મોટૂ",hr:"ક્રોએશિયન",hsb:"અપર સોર્બિયન",ht:"હૈતિઅન ક્રેઓલે",hu:"હંગેરિયન",hup:"હૂપા",hy:"આર્મેનિયન",hz:"હેરેરો",ia:"ઇંટરલિંગુઆ",iba:"ઇબાન",ibb:"ઇબિબિઓ",id:"ઇન્ડોનેશિયન",ie:"ઇંટરલિંગ",ig:"ઇગ્બો",ii:"સિચુઆન યી",ik:"ઇનુપિયાક",ilo:"ઇલોકો",inh:"ઇંગુશ",io:"ઈડો",is:"આઇસલેન્ડિક",it:"ઇટાલિયન",iu:"ઇનુકિટૂટ",ja:"જાપાનીઝ",jbo:"લોજ્બાન",jgo:"નગોમ્બા",jmc:"મકામે",jpr:"જુદેઓ-પર્શિયન",jrb:"જુદેઓ-અરબી",jv:"જાવાનીસ",ka:"જ્યોર્જિયન",kaa:"કારા-કલ્પક",kab:"કબાઇલ",kac:"કાચિન",kaj:"જ્જુ",kam:"કમ્બા",kaw:"કાવી",kbd:"કબાર્ડિયન",kcg:"ત્યાપ",kde:"મકોન્ડે",kea:"કાબુવર્ડિઆનુ",kfo:"કોરો",kg:"કોંગો",kha:"ખાસી",kho:"ખોતાનીસ",khq:"કોયરા ચિનિ",ki:"કિકુયૂ",kj:"ક્વાન્યામા",kk:"કઝાખ",kkj:"કાકો",kl:"કલાલ્લિસુત",kln:"કલેજિન",km:"ખ્મેર",kmb:"કિમ્બન્દુ",kn:"કન્નડ",ko:"કોરિયન",koi:"કોમી-પર્મ્યાક",kok:"કોંકણી",kos:"કોસરિયન",kpe:"ક્પેલ્લે",kr:"કનુરી",krc:"કરાચય-બલ્કાર",krl:"કરેલિયન",kru:"કુરૂખ",ks:"કાશ્મીરી",ksb:"શમ્બાલા",ksf:"બફિયા",ksh:"કોલોગ્નિયન",ku:"કુર્દિશ",kum:"કુમીક",kut:"કુતેનાઇ",kv:"કોમી",kw:"કોર્નિશ",ky:"કિર્ગીઝ",la:"લેટિન",lad:"લાદીનો",lag:"લંગી",lah:"લાહન્ડા",lam:"લામ્બા",lb:"લક્ઝેમબર્ગિશ",lez:"લેઝધીયન",lfn:"લિંગ્વા ફેન્કા નોવા",lg:"ગાંડા",li:"લિંબૂર્ગિશ",lkt:"લાકોટા",ln:"લિંગાલા",lo:"લાઓ",lol:"મોંગો",lou:"લ્યુઇસિયાના ક્રેઓલ",loz:"લોઝી",lrc:"ઉત્તરી લુરી",lt:"લિથુઆનિયન",lu:"લૂબા-કટાંગા",lua:"લૂબા-લુલુઆ",lui:"લુઇસેનો",lun:"લુન્ડા",luo:"લ્યુઓ",lus:"મિઝો",luy:"લુઈયા",lv:"લાતવિયન",mad:"માદુરીસ",mag:"મગહી",mai:"મૈથિલી",mak:"મકાસર",man:"મન્ડિન્ગો",mas:"મસાઇ",mdf:"મોક્ષ",mdr:"મંદાર",men:"મેન્ડે",mer:"મેરુ",mfe:"મોરીસ્યેન",mg:"મલાગસી",mga:"મધ્ય આઈરિશ",mgh:"માખુવા-મીટ્ટુ",mgo:"મેતા",mh:"માર્શલીઝ",mi:"માઓરી",mic:"મિકમેક",min:"મિનાંગ્કાબાઉ",mk:"મેસેડોનિયન",ml:"મલયાલમ",mn:"મોંગોલિયન",mnc:"માન્ચુ",mni:"મણિપુરી",moh:"મોહૌક",mos:"મોસ્સી",mr:"મરાઠી",mrj:"પશ્ચિમી મારી",ms:"મલય",mt:"માલ્ટિઝ",mua:"મુનડાન્ગ",mus:"ક્રિક",mwl:"મિરાંડી",mwr:"મારવાડી",my:"બર્મીઝ",myv:"એર્ઝયા",mzn:"મઝાન્દેરાની",na:"નાઉરૂ",nap:"નેપોલિટાન",naq:"નમા",nb:"નોર્વેજિયન બોકમાલ",nd:"ઉત્તર દેબેલ",nds:"લો જર્મન","nds-NL":"લો સેક્સોન",ne:"નેપાળી","new":"નેવારી",ng:"ડોન્ગા",nia:"નિયાસ",niu:"નિયુઆન",nl:"ડચ","nl-BE":"ફ્લેમિશ",nmg:"ક્વાસિઓ",nn:"નોર્વેજિયન નાયનૉર્સ્ક",nnh:"નીએમબુન",no:"નૉર્વેજીયન",nog:"નોગાઇ",non:"જૂની નોર્સ",nqo:"એન’કો",nr:"દક્ષિણ દેબેલ",nso:"ઉત્તરી સોથો",nus:"નુએર",nv:"નાવાજો",nwc:"પરંપરાગત નેવારી",ny:"ન્યાન્જા",nym:"ન્યામવેઝી",nyn:"ન્યાનકોલ",nyo:"ન્યોરો",nzi:"ન્ઝિમા",oc:"ઓક્સિટન",oj:"ઓજિબ્વા",om:"ઓરોમો",or:"ઉડિયા",os:"ઓસ્સેટિક",osa:"ઓસેજ",ota:"ઓટોમાન તુર્કિશ",pa:"પંજાબી",pag:"પંગાસીનાન",pal:"પહલવી",pam:"પમ્પાન્ગા",pap:"પાપિયામેન્ટો",pau:"પલાઉઆન",pcm:"નાઇજેરિયન પીજીન",peo:"જૂની ફારસી",phn:"ફોનિશિયન",pi:"પાલી",pl:"પોલીશ",pon:"પોહપિએન",prg:"પ્રુસ્સીયન",pro:"જુની પ્રોવેન્સલ",ps:"પશ્તો",pt:"પોર્ટુગીઝ","pt-BR":"બ્રાઝિલીયન પોર્ટુગીઝ","pt-PT":"યુરોપિયન પોર્ટુગીઝ",qu:"ક્વેચુઆ",quc:"કિચે",raj:"રાજસ્થાની",rap:"રાપાનુઇ",rar:"રારોટોંગન",rm:"રોમાન્શ",rn:"રૂન્દી",ro:"રોમાનિયન","ro-MD":"મોલડાવિયન",rof:"રોમ્બો",rom:"રોમાની",root:"રૂટ",ru:"રશિયન",rup:"અરોમેનિયન",rw:"કિન્યારવાન્ડા",rwk:"રવા",sa:"સંસ્કૃત",sad:"સોંડવે",sah:"સખા",sam:"સામરિટાન અરેમિક",saq:"સમ્બુરુ",sas:"સાસાક",sat:"સંતાલી",sba:"ન્ગામ્બેય",sbp:"સાંગુ",sc:"સાર્દિનિયન",scn:"સિસિલિયાન",sco:"સ્કોટ્સ",sd:"સિંધી",sdh:"સર્ઘન કુર્દીશ",se:"ઉત્તરી સામી",seh:"સેના",sel:"સેલ્કપ",ses:"કોયરાબોરો સેન્ની",sg:"સાંગો",sga:"જૂની આયરિશ",sh:"સર્બો-ક્રોએશિયન",shi:"તેશીલહિટ",shn:"શેન",si:"સિંહાલી",sid:"સિદામો",sk:"સ્લોવૅક",sl:"સ્લોવેનિયન",sm:"સામોન",sma:"દક્ષિણી સામી",smj:"લુલે સામી",smn:"ઇનારી સામી",sms:"સ્કોલ્ટ સામી",sn:"શોના",snk:"સોનિન્કે",so:"સોમાલી",sog:"સોગ્ડિએન",sq:"અલ્બેનિયન",sr:"સર્બિયન",srn:"સ્રાનન ટોન્ગો",srr:"સેરેર",ss:"સ્વાતી",ssy:"સાહો",st:"દક્ષિણ સોથો",su:"સંડેનીઝ",suk:"સુકુમા",sus:"સુસુ",sux:"સુમેરિયન",sv:"સ્વીડિશ",sw:"સ્વાહિલી","sw-CD":"કોંગો સ્વાહિલી",swb:"કોમોરિયન",syc:"પરંપરાગત સિરિએક",syr:"સિરિએક",ta:"તમિલ",tcy:"તુલુ",te:"તેલુગુ",tem:"ટિમ્ને",teo:"તેસો",ter:"તેરેનો",tet:"તેતુમ",tg:"તાજીક",th:"થાઈ",ti:"ટાઇગ્રિનિયા",tig:"ટાઇગ્રે",tiv:"તિવ",tk:"તુર્કમેન",tkl:"તોકેલાઉ",tl:"ટાગાલોગ",tlh:"ક્લિન્ગોન",tli:"ક્લીન્ગકિટ",tmh:"તામાશેખ",tn:"ત્સ્વાના",to:"ટોંગાન",tog:"ન્યાસા ટોન્ગા",tpi:"ટોક પિસિન",tr:"ટર્કિશ",trv:"ટારોકો",ts:"સોંગા",tsi:"સિમ્શિયન",tt:"તતાર",ttt:"મુસ્લિમ તાટ",tum:"તુમ્બુકા",tvl:"તુવાલુ",tw:"ટ્વાઇ",twq:"તસાવાક",ty:"તાહિતિયન",tyv:"ટુવીનિયન",tzm:"સેન્ટ્રલ એટલાસ તામાઝિટ",udm:"ઉદમુર્ત",ug:"ઉઇગુર",uga:"યુગેરિટિક",uk:"યુક્રેનિયન",umb:"ઉમ્બુન્ડૂ",ur:"ઉર્દૂ",uz:"ઉઝ્બેક",vai:"વાઇ",ve:"વેન્દા",vi:"વિયેતનામીસ",vo:"વોલાપુક",vot:"વોટિક",vun:"વુન્જો",wa:"વાલૂન",wae:"વેલ્સેર",wal:"વોલાયટ્ટા",war:"વારેય",was:"વાશો",wbp:"વાર્લ્પીરી",wo:"વોલોફ",xal:"કાલ્મિક",xh:"ખોસા",xog:"સોગા",yao:"યાઓ",yap:"યાપીસ",yav:"યાન્ગબેન",ybb:"યેમ્બા",yi:"યિદ્દિશ",yo:"યોરૂબા",yue:"કેંટોનીઝ",za:"ઝુઆગ",zap:"ઝેપોટેક",zbl:"બ્લિસિમ્બોલ્સ",zen:"ઝેનાગા",zgh:"માનક મોરોક્કન તામાઝિટ",zh:"ચાઇનીઝ","zh-Hans":"સરળીકૃત મેન્ડેરિન ચાઇનીઝ","zh-Hant":"પરંપરાગત મેન્ડેરિન ચાઇનીઝ",zu:"ઝુલુ",zun:"ઝૂની",zza:"ઝાઝા"},scriptNames:{Cyrl:"સિરિલિક",Latn:"લેટિન",Arab:"અરબી",Guru:"ગુરૂમુખી",Tfng:"તિફિનાઘ",Vaii:"વાઇ",Hans:"સરળીકૃત",Hant:"પરંપરાગત"}},he:{rtl:true,languageNames:{aa:"אפארית",ab:"אבחזית",ace:"אכינזית",ach:"אקצ׳ולי",ada:"אדנמה",ady:"אדיגית",ae:"אבסטן",af:"אפריקאנס",afh:"אפריהילי",agq:"אע׳ם",ain:"אינו",ak:"אקאן",akk:"אכדית",ale:"אלאוט",alt:"אלטאי דרומית",am:"אמהרית",an:"אראגונית",ang:"אנגלית עתיקה",anp:"אנג׳יקה",ar:"ערבית","ar-001":"ערבית ספרותית",arc:"ארמית",arn:"אראוקנית",arp:"אראפהו",ars:"ערבית - נג׳ד",arw:"ארוואק",as:"אסאמית",asa:"אסו",ast:"אסטורית",av:"אווארית",awa:"אוואדית",ay:"איימארית",az:"אזרית",ba:"בשקירית",bal:"באלוצ׳י",ban:"באלינזית",bar:"בווארית",bas:"בסאא",bax:"במום",bbj:"גומאלה",be:"בלארוסית",bej:"בז׳ה",bem:"במבה",bez:"בנה",bfd:"באפוט",bg:"בולגרית",bgn:"באלוצ׳י מערבית",bho:"בוג׳פורי",bi:"ביסלמה",bik:"ביקול",bin:"ביני",bkm:"קום",bla:"סיקסיקה",bm:"במבארה",bn:"בנגלית",bo:"טיבטית",br:"ברטונית",bra:"בראג׳",brx:"בודו",bs:"בוסנית",bss:"אקוסה",bua:"בוריאט",bug:"בוגינזית",bum:"בולו",byn:"בלין",byv:"מדומבה",ca:"קטלאנית",cad:"קאדו",car:"קאריב",cay:"קאיוגה",cch:"אטסם",ccp:"צ׳אקמה",ce:"צ׳צ׳נית",ceb:"סבואנו",cgg:"צ׳יגה",ch:"צ׳מורו",chb:"צ׳יבצ׳ה",chg:"צ׳אגאטאי",chk:"צ׳וקסה",chm:"מארי",chn:"ניב צ׳ינוק",cho:"צ׳וקטאו",chp:"צ׳יפוויאן",chr:"צ׳רוקי",chy:"שאיין",ckb:"כורדית סוראנית",co:"קורסיקנית",cop:"קופטית",cr:"קרי",crh:"טטרית של קרים",crs:"קריאולית (סיישל)",cs:"צ׳כית",csb:"קשובית",cu:"סלאבית כנסייתית עתיקה",cv:"צ׳ובאש",cy:"וולשית",da:"דנית",dak:"דקוטה",dar:"דרגווה",dav:"טאיטה",de:"גרמנית","de-AT":"גרמנית (אוסטריה)","de-CH":"גרמנית (שוויץ)",del:"דלאוור",den:"סלאבית",dgr:"דוגריב",din:"דינקה",dje:"זארמה",doi:"דוגרי",dsb:"סורבית תחתית",dua:"דואלה",dum:"הולנדית תיכונה",dv:"דיבהי",dyo:"ג׳ולה פונית",dyu:"דיולה",dz:"דזונקה",dzg:"דזאנגה",ebu:"אמבו",ee:"אווה",efi:"אפיק",egy:"מצרית עתיקה",eka:"אקיוק",el:"יוונית",elx:"עילמית",en:"אנגלית","en-AU":"אנגלית (אוסטרליה)","en-CA":"אנגלית (קנדה)","en-GB":"אנגלית (בריטניה)","en-US":"אנגלית (ארצות הברית)",enm:"אנגלית תיכונה",eo:"אספרנטו",es:"ספרדית","es-419":"ספרדית (אמריקה הלטינית)","es-ES":"ספרדית (ספרד)","es-MX":"ספרדית (מקסיקו)",et:"אסטונית",eu:"בסקית",ewo:"אוונדו",fa:"פרסית",fan:"פנג",fat:"פאנטי",ff:"פולה",fi:"פינית",fil:"פיליפינית",fj:"פיג׳ית",fo:"פארואזית",fon:"פון",fr:"צרפתית","fr-CA":"צרפתית (קנדה)","fr-CH":"צרפתית (שוויץ)",frc:"צרפתית קייג׳ונית",frm:"צרפתית תיכונה",fro:"צרפתית עתיקה",frr:"פריזית צפונית",frs:"פריזית מזרחית",fur:"פריולית",fy:"פריזית מערבית",ga:"אירית",gaa:"גא",gag:"גגאוזית",gan:"סינית גאן",gay:"גאיו",gba:"גבאיה",gd:"גאלית סקוטית",gez:"געז",gil:"קיריבטית",gl:"גליציאנית",gmh:"גרמנית בינונית-גבוהה",gn:"גוארני",goh:"גרמנית עתיקה גבוהה",gon:"גונדי",gor:"גורונטאלו",got:"גותית",grb:"גרבו",grc:"יוונית עתיקה",gsw:"גרמנית (בשוויץ)",gu:"גוג׳ארטי",guz:"גוסי",gv:"מאנית",gwi:"גוויצ׳ן",ha:"האוסה",hai:"האידה",hak:"סינית האקה",haw:"הוואית",he:"עברית",hi:"הינדי",hil:"היליגאינון",hit:"חתית",hmn:"המונג",ho:"הירי מוטו",hr:"קרואטית",hsb:"סורבית עילית",hsn:"סינית שיאנג",ht:"קריאולית (האיטי)",hu:"הונגרית",hup:"הופה",hy:"ארמנית",hz:"הררו",ia:"‏אינטרלינגואה",iba:"איבאן",ibb:"איביביו",id:"אינדונזית",ie:"אינטרלינגה",ig:"איגבו",ii:"סצ׳ואן יי",ik:"אינופיאק",ilo:"אילוקו",inh:"אינגושית",io:"אידו",is:"איסלנדית",it:"איטלקית",iu:"אינוקטיטוט",ja:"יפנית",jbo:"לוז׳באן",jgo:"נגומבה",jmc:"מאקאמה",jpr:"פרסית יהודית",jrb:"ערבית יהודית",jv:"יאוואית",ka:"גאורגית",kaa:"קארא-קלפאק",kab:"קבילה",kac:"קצ׳ין",kaj:"ג׳ו",kam:"קמבה",kaw:"קאווי",kbd:"קברדית",kbl:"קנמבו",kcg:"טיאפ",kde:"מקונדה",kea:"קאבוורדיאנו",kfo:"קורו",kg:"קונגו",kha:"קהאסי",kho:"קוטאנזית",khq:"קוירה צ׳יני",ki:"קיקויו",kj:"קואניאמה",kk:"קזחית",kkj:"קאקו",kl:"גרינלנדית",kln:"קלנג׳ין",km:"חמרית",kmb:"קימבונדו",kn:"קנאדה",ko:"קוריאנית",koi:"קומי-פרמיאקית",kok:"קונקאני",kos:"קוסראיאן",kpe:"קפלה",kr:"קאנורי",krc:"קראצ׳י-בלקר",krl:"קארלית",kru:"קורוק",ks:"קשמירית",ksb:"שמבאלה",ksf:"באפיה",ksh:"קולוניאן",ku:"כורדית",kum:"קומיקית",kut:"קוטנאי",kv:"קומי",kw:"קורנית",ky:"קירגיזית",la:"לטינית",lad:"לדינו",lag:"לאנגי",lah:"לנדה",lam:"למבה",lb:"לוקסמבורגית",lez:"לזגית",lg:"גאנדה",li:"לימבורגית",lkt:"לקוטה",ln:"לינגלה",lo:"לאו",lol:"מונגו",lou:"קריאולית לואיזיאנית",loz:"לוזית",lrc:"לורית צפונית",lt:"ליטאית",lu:"לובה-קטנגה",lua:"לובה-לולואה",lui:"לויסנו",lun:"לונדה",luo:"לואו",lus:"מיזו",luy:"לויה",lv:"לטבית",mad:"מדורזית",maf:"מאפאה",mag:"מאגאהית",mai:"מאיטילית",mak:"מקסאר",man:"מנדינגו",mas:"מסאית",mde:"מאבא",mdf:"מוקשה",mdr:"מנדאר",men:"מנדה",mer:"מרו",mfe:"קריאולית מאוריציאנית",mg:"מלגשית",mga:"אירית תיכונה",mgh:"מאקוואה מטו",mgo:"מטא",mh:"מרשלית",mi:"מאורית",mic:"מיקמק",min:"מיננגקבאו",mk:"מקדונית",ml:"מליאלאם",mn:"מונגולית",mnc:"מנצ׳ו",mni:"מניפורית",moh:"מוהוק",mos:"מוסי",mr:"מראטהי",ms:"מלאית",mt:"מלטית",mua:"מונדאנג",mus:"קריק",mwl:"מירנדזית",mwr:"מרווארי",my:"בורמזית",mye:"מאיין",myv:"ארזיה",mzn:"מאזאנדראני",na:"נאורית",nan:"סינית מין נאן",nap:"נפוליטנית",naq:"נאמה",nb:"נורווגית ספרותית",nd:"נדבלה צפונית",nds:"גרמנית תחתית","nds-NL":"סקסונית תחתית",ne:"נפאלית","new":"נווארי",ng:"נדונגה",nia:"ניאס",niu:"ניואן",nl:"הולנדית","nl-BE":"פלמית",nmg:"קוואסיו",nn:"נורווגית חדשה",nnh:"נגיאמבון",no:"נורווגית",nog:"נוגאי",non:"‏נורדית עתיקה",nqo:"נ׳קו",nr:"נדבלה דרומית",nso:"סותו צפונית",nus:"נואר",nv:"נאוואחו",nwc:"נווארית קלאסית",ny:"ניאנג׳ה",nym:"ניאמווזי",nyn:"ניאנקולה",nyo:"ניורו",nzi:"נזימה",oc:"אוקסיטנית",oj:"אוג׳יבווה",om:"אורומו",or:"אורייה",os:"אוסטית",osa:"אוסג׳",ota:"טורקית עות׳מנית",pa:"פנג׳אבי",pag:"פנגסינאן",pal:"פלאבי",pam:"פמפאניה",pap:"פפיאמנטו",pau:"פלוואן",pcm:"ניגרית פידג׳ית",peo:"פרסית עתיקה",phn:"פיניקית",pi:"פאלי",pl:"פולנית",pon:"פונפיאן",prg:"פרוסית",pro:"פרובנסאל עתיקה",ps:"פאשטו",pt:"פורטוגזית","pt-BR":"פורטוגזית (ברזיל)","pt-PT":"פורטוגזית (פורטוגל)",qu:"קצ׳ואה",quc:"קיצ׳ה",raj:"ראג׳סטאני",rap:"רפאנוי",rar:"ררוטונגאן",rm:"רומאנש",rn:"קירונדי",ro:"רומנית","ro-MD":"מולדבית",rof:"רומבו",rom:"רומאני",root:"רוט",ru:"רוסית",rup:"ארומנית",rw:"קנירואנדית",rwk:"ראווה",sa:"סנסקריט",sad:"סנדאווה",sah:"סאחה",sam:"ארמית שומרונית",saq:"סמבורו",sas:"סאסק",sat:"סאנטאלי",sba:"נגמבאי",sbp:"סאנגו",sc:"סרדינית",scn:"סיציליאנית",sco:"סקוטית",sd:"סינדהית",sdh:"כורדית דרומית",se:"סמי צפונית",see:"סנקה",seh:"סנה",sel:"סלקופ",ses:"קויראבורו סני",sg:"סנגו",sga:"אירית עתיקה",sh:"סרבו-קרואטית",shi:"שילה",shn:"שאן",shu:"ערבית צ׳אדית",si:"סינהלה",sid:"סידאמו",sk:"סלובקית",sl:"סלובנית",sm:"סמואית",sma:"סאמי דרומית",smj:"לולה סאמי",smn:"אינארי סאמי",sms:"סקולט סאמי",sn:"שונה",snk:"סונינקה",so:"סומלית",sog:"סוגדיאן",sq:"אלבנית",sr:"סרבית",srn:"סרנאן טונגו",srr:"סרר",ss:"סאווזי",ssy:"סאהו",st:"סותו דרומית",su:"סונדנזית",suk:"סוקומה",sus:"סוסו",sux:"שומרית",sv:"שוודית",sw:"סווהילי","sw-CD":"סווהילי קונגו",swb:"קומורית",syc:"סירית קלאסית",syr:"סורית",ta:"טמילית",te:"טלוגו",tem:"טימנה",teo:"טסו",ter:"טרנו",tet:"טטום",tg:"טג׳יקית",th:"תאית",ti:"תיגרינית",tig:"טיגרית",tiv:"טיב",tk:"טורקמנית",tkl:"טוקלאו",tl:"טאגאלוג",tlh:"קלינגונית",tli:"טלינגיט",tmh:"טמאשק",tn:"סוואנה",to:"טונגאית",tog:"ניאסה טונגה",tpi:"טוק פיסין",tr:"טורקית",trv:"טרוקו",ts:"טסונגה",tsi:"טסימשיאן",tt:"טטרית",tum:"טומבוקה",tvl:"טובאלו",tw:"טווי",twq:"טסוואק",ty:"טהיטית",tyv:"טובינית",tzm:"תמאזיגת של מרכז מרוקו",udm:"אודמורט",ug:"אויגור",uga:"אוגריתית",uk:"אוקראינית",umb:"אומבונדו",ur:"אורדו",uz:"אוזבקית",vai:"וואי",ve:"וונדה",vi:"וייטנאמית",vo:"‏וולאפיק",vot:"ווטיק",vun:"וונג׳ו",wa:"ולונית",wae:"וואלסר",wal:"ווליאטה",war:"ווראי",was:"וואשו",wbp:"וורלפירי",wo:"וולוף",wuu:"סינית וו",xal:"קלמיקית",xh:"קוסה",xog:"סוגה",yao:"יאו",yap:"יאפזית",yav:"יאנגבן",ybb:"ימבה",yi:"יידיש",yo:"יורובה",yue:"קנטונזית",za:"זואנג",zap:"זאפוטק",zbl:"בליסימבולס",zen:"זנאגה",zgh:"תמזיע׳ת מרוקאית תקנית",zh:"סינית","zh-Hans":"סינית מנדרינית פשוטה","zh-Hant":"סינית מנדרינית מסורתית",zu:"זולו",zun:"זוני",zza:"זאזא"},scriptNames:{Cyrl:"קירילי",Latn:"לטיני",Arab:"ערבי",Guru:"גורמוקי",Hans:"פשוט",Hant:"מסורתי"}},hi:{rtl:false,languageNames:{aa:"अफ़ार",ab:"अब्ख़ाज़ियन",ace:"अचाइनीस",ach:"अकोली",ada:"अदान्गमे",ady:"अदिघे",ae:"अवस्ताई",af:"अफ़्रीकी",afh:"अफ्रिहिली",agq:"अग्हेम",ain:"ऐनू",ak:"अकन",akk:"अक्कादी",ale:"अलेउत",alt:"दक्षिणी अल्ताई",am:"अम्हेरी",an:"अर्गोनी",ang:"पुरानी अंग्रेज़ी",anp:"अंगिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"ऐरेमेक",arn:"मापूचे",arp:"अरापाहो",ars:"नज्दी अरबी",arw:"अरावक",as:"असमिया",asa:"असु",ast:"अस्तुरियन",av:"अवेरिक",awa:"अवधी",ay:"आयमारा",az:"अज़रबैजानी",ba:"बशख़िर",bal:"बलूची",ban:"बालिनीस",bas:"बसा",be:"बेलारूसी",bej:"बेजा",bem:"बेम्बा",bez:"बेना",bg:"बुल्गारियाई",bgn:"पश्चिमी बलोची",bho:"भोजपुरी",bi:"बिस्लामा",bik:"बिकोल",bin:"बिनी",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",br:"ब्रेटन",bra:"ब्रज",brx:"बोडो",bs:"बोस्नियाई",bua:"बुरियात",bug:"बगिनीस",byn:"ब्लिन",ca:"कातालान",cad:"कैड्डो",car:"कैरिब",cch:"अत्सम",ccp:"चकमा",ce:"चेचन",ceb:"सिबुआनो",cgg:"शिगा",ch:"कमोरो",chb:"चिब्चा",chg:"छगाताई",chk:"चूकीस",chm:"मारी",chn:"चिनूक जारगॉन",cho:"चोक्तौ",chp:"शिपेव्यान",chr:"चेरोकी",chy:"शेयेन्न",ckb:"सोरानी कुर्दिश",co:"कोर्सीकन",cop:"कॉप्टिक",cr:"क्री",crh:"क्रीमीन तुर्की",crs:"सेसेल्वा क्रिओल फ्रेंच",cs:"चेक",csb:"काशुबियन",cu:"चर्च साल्विक",cv:"चूवाश",cy:"वेल्श",da:"डेनिश",dak:"दाकोता",dar:"दार्गवा",dav:"तैता",de:"जर्मन","de-AT":"ऑस्ट्रियाई जर्मन","de-CH":"स्विस उच्च जर्मन",del:"डिलैवेयर",den:"स्लेव",dgr:"डोग्रिब",din:"दिन्का",dje:"झार्मा",doi:"डोग्री",dsb:"निचला सॉर्बियन",dua:"दुआला",dum:"मध्यकालीन पुर्तगाली",dv:"दिवेही",dyo:"जोला-फोंई",dyu:"ड्युला",dz:"ज़ोन्गखा",dzg:"दज़ागा",ebu:"एम्बु",ee:"ईवे",efi:"एफिक",egy:"प्राचीन मिस्री",eka:"एकाजुक",el:"यूनानी",elx:"एलामाइट",en:"अंग्रेज़ी","en-AU":"ऑस्ट्रेलियाई अंग्रेज़ी","en-CA":"कनाडाई अंग्रेज़ी","en-GB":"ब्रिटिश अंग्रेज़ी","en-US":"अमेरिकी अंग्रेज़ी",enm:"मध्यकालीन अंग्रेज़ी",eo:"एस्पेरेंतो",es:"स्पेनी","es-419":"लैटिन अमेरिकी स्पेनिश","es-ES":"यूरोपीय स्पेनिश","es-MX":"मैक्सिकन स्पेनिश",et:"एस्टोनियाई",eu:"बास्क",ewo:"इवोन्डो",fa:"फ़ारसी",fan:"फैन्ग",fat:"फन्टी",ff:"फुलाह",fi:"फ़िनिश",fil:"फ़िलिपीनो",fj:"फिजियन",fo:"फ़ैरोइज़",fon:"फॉन",fr:"फ़्रेंच","fr-CA":"कनाडाई फ़्रेंच","fr-CH":"स्विस फ़्रेंच",frc:"केजन फ़्रेंच",frm:"मध्यकालीन फ़्रांसीसी",fro:"पुरातन फ़्रांसीसी",frr:"उत्तरी फ़्रीसियाई",frs:"पूर्वी फ़्रीसियाई",fur:"फ्रीयुलीयान",fy:"पश्चिमी फ़्रिसियाई",ga:"आयरिश",gaa:"गा",gag:"गागौज़",gay:"गायो",gba:"ग्बाया",gd:"स्कॉटिश गाएलिक",gez:"गीज़",gil:"गिल्बरतीस",gl:"गैलिशियन",gmh:"मध्यकालीन हाइ जर्मन",gn:"गुआरानी",goh:"पुरातन हाइ जर्मन",gon:"गाँडी",gor:"गोरोन्तालो",got:"गॉथिक",grb:"ग्रेबो",grc:"प्राचीन यूनानी",gsw:"स्विस जर्मन",gu:"गुजराती",guz:"गुसी",gv:"मैंक्स",gwi:"ग्विचइन",ha:"हौसा",hai:"हैडा",haw:"हवाई",he:"हिब्रू",hi:"हिन्दी",hil:"हिलिगेनन",hit:"हिताइत",hmn:"ह्मॉंग",ho:"हिरी मोटू",hr:"क्रोएशियाई",hsb:"ऊपरी सॉर्बियन",ht:"हैतियाई",hu:"हंगेरियाई",hup:"हूपा",hy:"आर्मेनियाई",hz:"हरैरो",ia:"इंटरलिंगुआ",iba:"इबान",ibb:"इबिबियो",id:"इंडोनेशियाई",ie:"ईन्टरलिंगुइ",ig:"ईग्बो",ii:"सिचुआन यी",ik:"इनुपियाक्",ilo:"इलोको",inh:"इंगुश",io:"इडौ",is:"आइसलैंडिक",it:"इतालवी",iu:"इनूकीटूत्",ja:"जापानी",jbo:"लोज्बान",jgo:"नगोंबा",jmc:"मैकहैमे",jpr:"जुदेओ-पर्शियन",jrb:"जुदेओ-अरेबिक",jv:"जावानीज़",ka:"जॉर्जियाई",kaa:"कारा-कल्पक",kab:"कबाइल",kac:"काचिन",kaj:"ज्जु",kam:"कम्बा",kaw:"कावी",kbd:"कबार्डियन",kcg:"त्याप",kde:"मैकोंड",kea:"काबुवेर्दियानु",kfo:"कोरो",kg:"कोंगो",kha:"खासी",kho:"खोतानीस",khq:"कोयरा चीनी",ki:"किकुयू",kj:"क्वान्यामा",kk:"कज़ाख़",kkj:"काको",kl:"कलालीसुत",kln:"कलेंजिन",km:"खमेर",kmb:"किम्बन्दु",kn:"कन्नड़",ko:"कोरियाई",koi:"कोमी-पर्मयाक",kok:"कोंकणी",kos:"कोसरैन",kpe:"क्पेल",kr:"कनुरी",krc:"कराचय-बल्कार",krl:"करेलियन",kru:"कुरूख",ks:"कश्मीरी",ksb:"शम्बाला",ksf:"बफिआ",ksh:"कोलोनियाई",ku:"कुर्दिश",kum:"कुमीक",kut:"क्यूतनाई",kv:"कोमी",kw:"कोर्निश",ky:"किर्गीज़",la:"लैटिन",lad:"लादीनो",lag:"लांगि",lah:"लाह्न्डा",lam:"लाम्बा",lb:"लग्ज़मबर्गी",lez:"लेज़्घीयन",lg:"गांडा",li:"लिंबर्गिश",lkt:"लैकोटा",ln:"लिंगाला",lo:"लाओ",lol:"मोंगो",lou:"लुईज़ियाना क्रियोल",loz:"लोज़ी",lrc:"उत्तरी लूरी",lt:"लिथुआनियाई",lu:"ल्यूबा-कटांगा",lua:"ल्यूबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"ल्युओ",lus:"मिज़ो",luy:"ल्युईआ",lv:"लातवियाई",mad:"मादुरीस",mag:"मगही",mai:"मैथिली",mak:"मकासर",man:"मन्डिन्गो",mas:"मसाई",mdf:"मोक्ष",mdr:"मंदार",men:"मेन्डे",mer:"मेरु",mfe:"मोरीस्येन",mg:"मालागासी",mga:"मध्यकालीन आइरिश",mgh:"मैखुवा-मीट्टो",mgo:"मेटा",mh:"मार्शलीज़",mi:"माओरी",mic:"मिकमैक",min:"मिनांग्काबाउ",mk:"मकदूनियाई",ml:"मलयालम",mn:"मंगोलियाई",mnc:"मन्चु",mni:"मणिपुरी",moh:"मोहौक",mos:"मोस्सी",mr:"मराठी",ms:"मलय",mt:"माल्टीज़",mua:"मुंडैंग",mus:"क्रीक",mwl:"मिरांडी",mwr:"मारवाड़ी",my:"बर्मीज़",myv:"एर्ज़या",mzn:"माज़न्देरानी",na:"नाउरू",nap:"नीपोलिटन",naq:"नामा",nb:"नॉर्वेजियाई बोकमाल",nd:"उत्तरी देबेल",nds:"निचला जर्मन","nds-NL":"निचली सैक्सन",ne:"नेपाली","new":"नेवाड़ी",ng:"डोन्गा",nia:"नियास",niu:"नियुआन",nl:"डच","nl-BE":"फ़्लेमिश",nmg:"क्वासिओ",nn:"नॉर्वेजियाई नॉयनॉर्स्क",nnh:"गैम्बू",no:"नॉर्वेजियाई",nog:"नोगाई",non:"पुराना नॉर्स",nqo:"एन्को",nr:"दक्षिण देबेल",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नावाजो",nwc:"पारम्परिक नेवारी",ny:"न्यानजा",nym:"न्यामवेज़ी",nyn:"न्यानकोल",nyo:"न्योरो",nzi:"न्ज़ीमा",oc:"ओसीटान",oj:"ओजिब्वा",om:"ओरोमो",or:"उड़िया",os:"ओस्सेटिक",osa:"ओसेज",ota:"ओटोमान तुर्किश",pa:"पंजाबी",pag:"पंगासीनान",pal:"पाह्लावी",pam:"पाम्पान्गा",pap:"पापियामेन्टो",pau:"पलोउआन",pcm:"नाइजीरियाई पिडगिन",peo:"पुरानी फारसी",phn:"फोएनिशियन",pi:"पाली",pl:"पोलिश",pon:"पोह्नपिएन",prg:"प्रुशियाई",pro:"पुरानी प्रोवेन्सल",ps:"पश्तो",pt:"पुर्तगाली","pt-BR":"ब्राज़ीली पुर्तगाली","pt-PT":"यूरोपीय पुर्तगाली",qu:"क्वेचुआ",quc:"किश",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोतोंगन",rm:"रोमान्श",rn:"रुन्दी",ro:"रोमानियाई","ro-MD":"मोलडावियन",rof:"रोम्बो",rom:"रोमानी",root:"रूट",ru:"रूसी",rup:"अरोमानियन",rw:"किन्यारवांडा",rwk:"रवा",sa:"संस्कृत",sad:"सन्डावे",sah:"याकूत",sam:"सामैरिटन अरैमिक",saq:"सैम्बुरु",sas:"सासाक",sat:"संथाली",sba:"न्गाम्बे",sbp:"सैंगु",sc:"सार्दिनियन",scn:"सिसिलियन",sco:"स्कॉट्स",sd:"सिंधी",sdh:"दक्षिणी कार्डिश",se:"नॉर्दन सामी",seh:"सेना",sel:"सेल्कप",ses:"कोयराबोरो सेन्नी",sg:"सांगो",sga:"पुरानी आइरिश",sh:"सेर्बो-क्रोएशियाई",shi:"तैचेल्हित",shn:"शैन",si:"सिंहली",sid:"सिदामो",sk:"स्लोवाक",sl:"स्लोवेनियाई",sm:"सामोन",sma:"दक्षिणी सामी",smj:"ल्युल सामी",smn:"इनारी सामी",sms:"स्कोल्ट सामी",sn:"शोणा",snk:"सोनिन्के",so:"सोमाली",sog:"सोग्डिएन",sq:"अल्बानियाई",sr:"सर्बियाई",srn:"स्रानान टॉन्गो",srr:"सेरेर",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सेसेथो",su:"सुंडानी",suk:"सुकुमा",sus:"सुसु",sux:"सुमेरियन",sv:"स्वीडिश",sw:"स्वाहिली","sw-CD":"कांगो स्वाहिली",swb:"कोमोरियन",syc:"क्लासिकल सिरिएक",syr:"सिरिएक",ta:"तमिल",te:"तेलुगू",tem:"टिम्ने",teo:"टेसो",ter:"तेरेनो",tet:"तेतुम",tg:"ताजिक",th:"थाई",ti:"तिग्रीन्या",tig:"टाइग्रे",tiv:"तिव",tk:"तुर्कमेन",tkl:"तोकेलाऊ",tl:"टैगलॉग",tlh:"क्लिंगन",tli:"त्लिंगित",tmh:"तामाशेक",tn:"सेत्स्वाना",to:"टोंगन",tog:"न्यासा टोन्गा",tpi:"टोक पिसिन",tr:"तुर्की",trv:"तारोको",ts:"सोंगा",tsi:"त्सिमीशियन",tt:"तातार",tum:"तम्बूका",tvl:"तुवालु",tw:"ट्वी",twq:"टासवाक",ty:"ताहितियन",tyv:"तुवीनियन",tzm:"मध्य एटलस तमाज़ित",udm:"उदमुर्त",ug:"उइगर",uga:"युगैरिटिक",uk:"यूक्रेनियाई",umb:"उम्बुन्डु",ur:"उर्दू",uz:"उज़्बेक",vai:"वाई",ve:"वेन्दा",vi:"वियतनामी",vo:"वोलापुक",vot:"वॉटिक",vun:"वुंजो",wa:"वाल्लून",wae:"वाल्सर",wal:"वलामो",war:"वारै",was:"वाशो",wbp:"वॉल्पेरी",wo:"वोलोफ़",wuu:"वू चीनी",xal:"काल्मिक",xh:"ख़ोसा",xog:"सोगा",yao:"याओ",yap:"यापीस",yav:"यांगबेन",ybb:"येंबा",yi:"यहूदी",yo:"योरूबा",yue:"कैंटोनीज़",za:"ज़ुआंग",zap:"ज़ेपोटेक",zbl:"ब्लिसिम्बॉल्स",zen:"ज़ेनान्गा",zgh:"मानक मोरक्कन तामाज़ाइट",zh:"चीनी","zh-Hans":"सरलीकृत मैंडेरिन चीनी","zh-Hant":"पारंपरिक मैंडेरिन चीनी",zu:"ज़ुलू",zun:"ज़ूनी",zza:"ज़ाज़ा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"लैटिन",Arab:"अरबी",Guru:"गुरमुखी",Tfng:"तिफिनाघ",Vaii:"वाई",Hans:"सरलीकृत",Hant:"पारंपरिक"}},hr:{rtl:false,languageNames:{aa:"afarski",ab:"abhaski",ace:"ačinski",ach:"ačoli",ada:"adangme",ady:"adigejski",ae:"avestički",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainuski",ak:"akanski",akk:"akadski",ale:"aleutski",alt:"južni altai",am:"amharski",an:"aragonski",ang:"staroengleski",anp:"angika",ar:"arapski","ar-001":"moderni standardni arapski",arc:"aramejski",arn:"mapuche",arp:"arapaho",ars:"najdi arapski",arw:"aravački",as:"asamski",asa:"asu",ast:"asturijski",av:"avarski",awa:"awadhi",ay:"ajmarski",az:"azerbajdžanski","az-Arab":"južnoazerbajdžanski",ba:"baškirski",bal:"belučki",ban:"balijski",bas:"basa",bax:"bamunski",bbj:"ghomala",be:"bjeloruski",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bugarski",bgn:"zapadnobaludžijski",bho:"bhojpuri",bi:"bislama",bik:"bikolski",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibetski",br:"bretonski",bra:"braj",brx:"bodo",bs:"bosanski",bss:"akoose",bua:"burjatski",bug:"buginski",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalonski",cad:"caddo",car:"karipski",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"čečenski",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"čibča",chg:"čagatajski",chk:"chuukese",chm:"marijski",chn:"chinook žargon",cho:"choctaw",chp:"chipewyan",chr:"čerokijski",chy:"čejenski",ckb:"soranski kurdski",co:"korzički",cop:"koptski",cr:"cree",crh:"krimski turski",crs:"sejšelski kreolski",cs:"češki",csb:"kašupski",cu:"crkvenoslavenski",cv:"čuvaški",cy:"velški",da:"danski",dak:"dakota jezik",dar:"dargwa",dav:"taita",de:"njemački","de-AT":"austrijski njemački","de-CH":"gornjonjemački (švicarski)",del:"delavarski",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"donjolužički",dua:"duala",dum:"srednjonizozemski",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"staroegipatski",eka:"ekajuk",el:"grčki",elx:"elamitski",en:"engleski","en-AU":"australski engleski","en-CA":"kanadski engleski","en-GB":"britanski engleski","en-US":"američki engleski",enm:"srednjoengleski",eo:"esperanto",es:"španjolski","es-419":"latinoamerički španjolski","es-ES":"europski španjolski","es-MX":"meksički španjolski",et:"estonski",eu:"baskijski",ewo:"ewondo",fa:"perzijski",fan:"fang",fat:"fanti",ff:"fula",fi:"finski",fil:"filipinski",fj:"fidžijski",fo:"ferojski",fr:"francuski","fr-CA":"kanadski francuski","fr-CH":"švicarski francuski",frc:"kajunski francuski",frm:"srednjofrancuski",fro:"starofrancuski",frr:"sjevernofrizijski",frs:"istočnofrizijski",fur:"furlanski",fy:"zapadnofrizijski",ga:"irski",gaa:"ga",gag:"gagauski",gan:"gan kineski",gay:"gayo",gba:"gbaya",gd:"škotski gaelski",gez:"geez",gil:"gilbertski",gl:"galicijski",gmh:"srednjogornjonjemački",gn:"gvaranski",goh:"starovisokonjemački",gon:"gondi",gor:"gorontalo",got:"gotski",grb:"grebo",grc:"starogrčki",gsw:"švicarski njemački",gu:"gudžaratski",guz:"gusii",gv:"manski",gwi:"gwich’in",ha:"hausa",hai:"haidi",hak:"hakka kineski",haw:"havajski",he:"hebrejski",hi:"hindski",hil:"hiligaynonski",hit:"hetitski",hmn:"hmong",ho:"hiri motu",hr:"hrvatski",hsb:"gornjolužički",hsn:"xiang kineski",ht:"haićanski kreolski",hu:"mađarski",hup:"hupa",hy:"armenski",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezijski",ie:"interligua",ig:"igbo",ii:"sichuan ji",ik:"inupiaq",ilo:"iloko",inh:"ingušetski",io:"ido",is:"islandski",it:"talijanski",iu:"inuktitut",ja:"japanski",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"judejsko-perzijski",jrb:"judejsko-arapski",jv:"javanski",ka:"gruzijski",kaa:"kara-kalpak",kab:"kabilski",kac:"kačinski",kaj:"kaje",kam:"kamba",kaw:"kawi",kbd:"kabardinski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"zelenortski",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanese",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazaški",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"kmerski",kmb:"kimbundu",kn:"karnatački",ko:"korejski",koi:"komi-permski",kok:"konkani",kos:"naurski",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelijski",kru:"kuruški",ks:"kašmirski",ksb:"shambala",ksf:"bafia",ksh:"kelnski",ku:"kurdski",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornski",ky:"kirgiski",la:"latinski",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburški",lez:"lezgiški",lg:"ganda",li:"limburški",lkt:"lakota",ln:"lingala",lo:"laoski",lol:"mongo",lou:"lujzijanski kreolski",loz:"lozi",lrc:"sjevernolurski",lt:"litavski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"latvijski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauricijski kreolski",mg:"malgaški",mga:"srednjoirski",mgh:"makhuwa-meetto",mgo:"meta’",mh:"maršalski",mi:"maorski",mic:"micmac",min:"minangkabau",mk:"makedonski",ml:"malajalamski",mn:"mongolski",mnc:"mandžurski",mni:"manipurski",moh:"mohok",mos:"mossi",mr:"marathski",ms:"malajski",mt:"malteški",mua:"mundang",mus:"creek",mwl:"mirandski",mwr:"marwari",my:"burmanski",mye:"myene",myv:"mordvinski",mzn:"mazanderanski",na:"nauru",nan:"min nan kineski",nap:"napolitanski",naq:"nama",nb:"norveški bokmål",nd:"sjeverni ndebele",nds:"donjonjemački","nds-NL":"donjosaksonski",ne:"nepalski","new":"newari",ng:"ndonga",nia:"nias",niu:"niujski",nl:"nizozemski","nl-BE":"flamanski",nmg:"kwasio",nn:"norveški nynorsk",nnh:"ngiemboon",no:"norveški",nog:"nogajski",non:"staronorveški",nqo:"n’ko",nr:"južni ndebele",nso:"sjeverni sotski",nus:"nuerski",nv:"navajo",nwc:"klasični newari",ny:"njandža",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"okcitanski",oj:"ojibwa",om:"oromski",or:"orijski",os:"osetski",osa:"osage",ota:"turski - otomanski",pa:"pandžapski",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauanski",pcm:"nigerijski pidžin",peo:"staroperzijski",phn:"fenički",pi:"pali",pl:"poljski",pon:"pohnpeian",prg:"pruski",pro:"staroprovansalski",ps:"paštunski",pt:"portugalski","pt-BR":"brazilski portugalski","pt-PT":"europski portugalski",qu:"kečuanski",quc:"kiče",raj:"rajasthani",rap:"rapa nui",rar:"rarotonški",rm:"retoromanski",rn:"rundi",ro:"rumunjski","ro-MD":"moldavski",rof:"rombo",rom:"romski",root:"korijenski",ru:"ruski",rup:"aromunski",rw:"kinyarwanda",rwk:"rwa",sa:"sanskrtski",sad:"sandawe",sah:"jakutski",sam:"samarijanski aramejski",saq:"samburu",sas:"sasak",sat:"santalski",sba:"ngambay",sbp:"sangu",sc:"sardski",scn:"sicilijski",sco:"škotski",sd:"sindski",sdh:"južnokurdski",se:"sjeverni sami",see:"seneca",seh:"sena",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirski",sh:"srpsko-hrvatski",shi:"tachelhit",shn:"shan",shu:"čadski arapski",si:"sinhaleški",sid:"sidamo",sk:"slovački",sl:"slovenski",sm:"samoanski",sma:"južni sami",smj:"lule sami",smn:"inari sami",sms:"skolt sami",sn:"shona",snk:"soninke",so:"somalski",sog:"sogdien",sq:"albanski",sr:"srpski",srn:"sranan tongo",srr:"serer",ss:"svati",ssy:"saho",st:"sesotski",su:"sundanski",suk:"sukuma",sus:"susu",sux:"sumerski",sv:"švedski",sw:"svahili","sw-CD":"kongoanski svahili",swb:"komorski",syc:"klasični sirski",syr:"sirijski",ta:"tamilski",te:"teluški",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadžički",th:"tajlandski",ti:"tigrinja",tig:"tigriški",tk:"turkmenski",tkl:"tokelaunski",tl:"tagalog",tlh:"klingonski",tli:"tlingit",tmh:"tamašečki",tn:"cvana",to:"tonganski",tog:"nyasa tonga",tpi:"tok pisin",tr:"turski",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarski",tum:"tumbuka",tvl:"tuvaluanski",tw:"twi",twq:"tasawaq",ty:"tahićanski",tyv:"tuvinski",tzm:"tamašek (Srednji Atlas)",udm:"udmurtski",ug:"ujgurski",uga:"ugaritski",uk:"ukrajinski",umb:"umbundu",ur:"urdski",uz:"uzbečki",ve:"venda",vi:"vijetnamski",vo:"volapük",vot:"votski",vun:"vunjo",wa:"valonski",wae:"walserski",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"volof",wuu:"wu kineski",xal:"kalmyk",xh:"xhosa",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidiš",yo:"jorupski",yue:"kantonski",za:"zhuang",zap:"zapotečki",zbl:"Blissovi simboli",zen:"zenaga",zgh:"standardni marokanski tamašek",zh:"kineski","zh-Hans":"mandarinski kineski (pojednostavljeni)","zh-Hant":"mandarinski kineski (tradicionalni)",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"ćirilica",Latn:"latinica",Arab:"arapsko pismo",Guru:"gurmukhi pismo",Tfng:"tifinar",Vaii:"vai pismo",Hans:"pojednostavljeno pismo",Hant:"tradicionalno pismo"}},hu:{rtl:false,languageNames:{aa:"afar",ab:"abház",ace:"achinéz",ach:"akoli",ada:"adangme",ady:"adyghe",ae:"avesztán",af:"afrikaans",afh:"afrihili",agq:"agem",ain:"ainu",ak:"akan",akk:"akkád",ale:"aleut",alt:"dél-altaji",am:"amhara",an:"aragonéz",ang:"óangol",anp:"angika",ar:"arab","ar-001":"modern szabányos arab",arc:"arámi",arn:"mapucse",arp:"arapaho",ars:"nedzsdi arab",arw:"aravak",as:"asszámi",asa:"asu",ast:"asztúr",av:"avar",awa:"awádi",ay:"ajmara",az:"azerbajdzsáni",ba:"baskír",bal:"balucsi",ban:"balinéz",bas:"basza",bax:"bamun",bbj:"gomala",be:"belarusz",bej:"bedzsa",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bolgár",bgn:"nyugati beludzs",bho:"bodzspuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bangla",bo:"tibeti",br:"breton",bra:"braj",brx:"bodo",bs:"bosnyák",bss:"koszi",bua:"burját",bug:"buginéz",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalán",cad:"caddo",car:"karib",cay:"kajuga",cch:"atszam",ccp:"csakma",ce:"csecsen",ceb:"szebuano",cgg:"kiga",ch:"csamoró",chb:"csibcsa",chg:"csagatáj",chk:"csukéz",chm:"mari",chn:"csinuk zsargon",cho:"csoktó",chp:"csipevé",chr:"cseroki",chy:"csejen",ckb:"közép-ázsiai kurd",co:"korzikai",cop:"kopt",cr:"krí",crh:"krími tatár",crs:"szeszelva kreol francia",cs:"cseh",csb:"kasub",cu:"egyházi szláv",cv:"csuvas",cy:"walesi",da:"dán",dak:"dakota",dar:"dargva",dav:"taita",de:"német","de-AT":"osztrák német","de-CH":"svájci felnémet",del:"delavár",den:"szlevi",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"alsó-szorb",dua:"duala",dum:"közép holland",dv:"divehi",dyo:"jola-fonyi",dyu:"diula",dz:"dzsonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efik",egy:"óegyiptomi",eka:"ekadzsuk",el:"görög",elx:"elamit",en:"angol","en-AU":"ausztrál angol","en-CA":"kanadai angol","en-GB":"brit angol","en-US":"amerikai angol",enm:"közép angol",eo:"eszperantó",es:"spanyol","es-419":"latin-amerikai spanyol","es-ES":"európai spanyol","es-MX":"spanyol (mexikói)",et:"észt",eu:"baszk",ewo:"evondo",fa:"perzsa",fan:"fang",fat:"fanti",ff:"fulani",fi:"finn",fil:"filippínó",fj:"fidzsi",fo:"feröeri",fr:"francia","fr-CA":"kanadai francia","fr-CH":"svájci francia",frc:"cajun francia",frm:"közép francia",fro:"ófrancia",frr:"északi fríz",frs:"keleti fríz",fur:"friuli",fy:"nyugati fríz",ga:"ír",gaa:"ga",gag:"gagauz",gan:"gan kínai",gay:"gajo",gba:"gbaja",gd:"skóciai kelta",gez:"geez",gil:"ikiribati",gl:"gallego",gmh:"közép felső német",gn:"guarani",goh:"ófelső német",gon:"gondi",gor:"gorontalo",got:"gót",grb:"grebó",grc:"ógörög",gsw:"svájci német",gu:"gudzsaráti",guz:"guszii",gv:"man-szigeti",gwi:"gvicsin",ha:"hausza",hai:"haida",hak:"hakka kínai",haw:"hawaii",he:"héber",hi:"hindi",hil:"ilokano",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"horvát",hsb:"felső-szorb",hsn:"xiang kínai",ht:"haiti kreol",hu:"magyar",hup:"hupa",hy:"örmény",hz:"herero",ia:"interlingva",iba:"iban",ibb:"ibibio",id:"indonéz",ie:"interlingue",ig:"igbó",ii:"szecsuán ji",ik:"inupiak",ilo:"ilokó",inh:"ingus",io:"idó",is:"izlandi",it:"olasz",iu:"inuktitut",ja:"japán",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"zsidó-perzsa",jrb:"zsidó-arab",jv:"jávai",ka:"grúz",kaa:"kara-kalpak",kab:"kabije",kac:"kacsin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardi",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kongo",kha:"kaszi",kho:"kotanéz",khq:"kojra-csíni",ki:"kikuju",kj:"kuanyama",kk:"kazah",kkj:"kakó",kl:"grönlandi",kln:"kalendzsin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreai",koi:"komi-permják",kok:"konkani",kos:"kosrei",kpe:"kpelle",kr:"kanuri",krc:"karacsáj-balkár",krl:"karelai",kru:"kuruh",ks:"kasmíri",ksb:"sambala",ksf:"bafia",ksh:"kölsch",ku:"kurd",kum:"kumük",kut:"kutenai",kv:"komi",kw:"korni",ky:"kirgiz",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgi",lez:"lezg",lg:"ganda",li:"limburgi",lkt:"lakota",ln:"lingala",lo:"lao",lol:"mongó",lou:"louisianai kreol",loz:"lozi",lrc:"északi luri",lt:"litván",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"lujia",lv:"lett",mad:"madurai",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makaszar",man:"mandingó",mas:"masai",mde:"maba",mdf:"moksán",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritiusi kreol",mg:"malgas",mga:"közép ír",mgh:"makua-metó",mgo:"meta’",mh:"marshalli",mi:"maori",mic:"mikmak",min:"minangkabau",mk:"macedón",ml:"malajálam",mn:"mongol",mnc:"mandzsu",mni:"manipuri",moh:"mohawk",mos:"moszi",mr:"maráthi",ms:"maláj",mt:"máltai",mua:"mundang",mus:"krík",mwl:"mirandéz",mwr:"márvári",my:"burmai",mye:"myene",myv:"erzjány",mzn:"mázanderáni",na:"naurui",nan:"min nan kínai",nap:"nápolyi",naq:"nama",nb:"norvég (bokmål)",nd:"északi ndebele",nds:"alsónémet","nds-NL":"alsószász",ne:"nepáli","new":"nevari",ng:"ndonga",nia:"nias",niu:"niuei",nl:"holland","nl-BE":"flamand",nmg:"ngumba",nn:"norvég (nynorsk)",nnh:"ngiemboon",no:"norvég",nog:"nogaj",non:"óskandináv",nqo:"n’kó",nr:"déli ndebele",nso:"északi szeszotó",nus:"nuer",nv:"navahó",nwc:"klasszikus newari",ny:"nyandzsa",nym:"nyamvézi",nyn:"nyankole",nyo:"nyoró",nzi:"nzima",oc:"okszitán",oj:"ojibva",om:"oromo",or:"odia",os:"oszét",osa:"osage",ota:"ottomán török",pa:"pandzsábi",pag:"pangaszinan",pal:"pahlavi",pam:"pampangan",pap:"papiamento",pau:"palaui",pcm:"nigériai pidgin",peo:"óperzsa",phn:"főniciai",pi:"pali",pl:"lengyel",pon:"pohnpei",prg:"porosz",pro:"óprovánszi",ps:"pastu",pt:"portugál","pt-BR":"brazíliai portugál","pt-PT":"európai portugál",qu:"kecsua",quc:"kicse",raj:"radzsasztáni",rap:"rapanui",rar:"rarotongai",rm:"rétoromán",rn:"kirundi",ro:"román","ro-MD":"moldvai",rof:"rombo",rom:"roma",root:"ősi",ru:"orosz",rup:"aromán",rw:"kinyarvanda",rwk:"rwo",sa:"szanszkrit",sad:"szandave",sah:"szaha",sam:"szamaritánus arámi",saq:"szamburu",sas:"sasak",sat:"szantáli",sba:"ngambay",sbp:"szangu",sc:"szardíniai",scn:"szicíliai",sco:"skót",sd:"szindhi",sdh:"dél-kurd",se:"északi számi",see:"szeneka",seh:"szena",sel:"szölkup",ses:"kojra-szenni",sg:"szangó",sga:"óír",sh:"szerbhorvát",shi:"tachelhit",shn:"san",shu:"csádi arab",si:"szingaléz",sid:"szidamó",sk:"szlovák",sl:"szlovén",sm:"szamoai",sma:"déli számi",smj:"lulei számi",smn:"inari számi",sms:"kolta számi",sn:"sona",snk:"szoninke",so:"szomáli",sog:"sogdien",sq:"albán",sr:"szerb",srn:"szranai tongó",srr:"szerer",ss:"sziszuati",ssy:"szahó",st:"déli szeszotó",su:"szundanéz",suk:"szukuma",sus:"szuszu",sux:"sumér",sv:"svéd",sw:"szuahéli","sw-CD":"kongói szuahéli",swb:"comorei",syc:"klasszikus szír",syr:"szír",ta:"tamil",te:"telugu",tem:"temne",teo:"teszó",ter:"terenó",tet:"tetum",tg:"tadzsik",th:"thai",ti:"tigrinya",tig:"tigré",tk:"türkmén",tkl:"tokelaui",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasek",tn:"szecsuáni",to:"tongai",tog:"nyugati nyasza",tpi:"tok pisin",tr:"török",trv:"tarokó",ts:"conga",tsi:"csimsiáni",tt:"tatár",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"szavák",ty:"tahiti",tyv:"tuvai",tzm:"közép-atlaszi tamazigt",udm:"udmurt",ug:"ujgur",uga:"ugariti",uk:"ukrán",umb:"umbundu",ur:"urdu",uz:"üzbég",ve:"venda",vi:"vietnámi",vo:"volapük",vot:"votják",vun:"vunjo",wa:"vallon",wae:"walser",wal:"valamo",war:"varaó",was:"vasó",wbp:"warlpiri",wo:"volof",wuu:"wu kínai",xal:"kalmük",xh:"xhosza",xog:"szoga",yao:"jaó",yap:"japi",yav:"jangben",ybb:"jemba",yi:"jiddis",yo:"joruba",yue:"kantoni",za:"zsuang",zap:"zapoték",zbl:"Bliss jelképrendszer",zen:"zenaga",zgh:"marokkói tamazight",zh:"kínai","zh-Hans":"kínai (egyszerűsített)","zh-Hant":"kínai (hagyományos)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"Cirill",Latn:"Latin",Guru:"Gurmuki",Tfng:"Berber",Vaii:"Vai",Hans:"Egyszerűsített",Hant:"Hagyományos"}},hy:{rtl:false,languageNames:{aa:"աֆարերեն",ab:"աբխազերեն",ace:"աչեհերեն",ach:"աչոլի",ada:"ադանգմերեն",ady:"ադիղերեն",aeb:"թունիսական արաբերեն",af:"աֆրիկաանս",agq:"աղեմ",ain:"այներեն",ak:"աքան",akk:"աքքադերեն",ale:"ալեութերեն",alt:"հարավային ալթայերեն",am:"ամհարերեն",an:"արագոներեն",ang:"հին անգլերեն",anp:"անգիկա",ar:"արաբերեն","ar-001":"արդի ընդհանուր արաբերեն",arc:"արամեերեն",arn:"մապուչի",arp:"արապահո",arq:"ալժիրական արաբերեն",arz:"եգիպտական արաբերեն",as:"ասամերեն",asa:"ասու",ase:"ամերիկյան ժեստերի լեզու",ast:"աստուրերեն",av:"ավարերեն",awa:"ավադհի",ay:"այմարա",az:"ադրբեջաներեն",ba:"բաշկիրերեն",ban:"բալիերեն",bas:"բասաա",be:"բելառուսերեն",bem:"բեմբա",bez:"բենա",bg:"բուլղարերեն",bgn:"արևմտաբելուջիերեն",bho:"բհոպուրի",bi:"բիսլամա",bin:"բինի",bla:"սիկսիկա",bm:"բամբարա",bn:"բենգալերեն",bo:"տիբեթերեն",br:"բրետոներեն",brx:"բոդո",bs:"բոսնիերեն",bss:"աքուզ",bug:"բուգիերեն",byn:"բիլին",ca:"կատալաներեն",ce:"չեչեներեն",ceb:"սեբուերեն",cgg:"չիգա",ch:"չամոռո",chk:"տրուկերեն",chm:"մարի",cho:"չոկտո",chr:"չերոկի",chy:"շայեն",ckb:"սորանի քրդերեն",co:"կորսիկերեն",cop:"ղպտերեն",crh:"ղրիմյան թուրքերեն",crs:"սեյշելյան խառնակերտ ֆրանսերեն",cs:"չեխերեն",cu:"սլավոներեն, եկեղեցական",cv:"չուվաշերեն",cy:"ուելսերեն",da:"դանիերեն",dak:"դակոտա",dar:"դարգիներեն",dav:"թաիթա",de:"գերմաներեն","de-AT":"ավստրիական գերմաներեն","de-CH":"շվեյցարական վերին գերմաներեն",dgr:"դոգրիբ",dje:"զարմա",dsb:"ստորին սորբերեն",dua:"դուալա",dv:"մալդիվերեն",dyo:"ջոլա-ֆոնյի",dz:"ջոնգքհա",dzg:"դազագա",ebu:"էմբու",ee:"էվե",efi:"էֆիկ",egy:"հին եգիպտերեն",eka:"էկաջուկ",el:"հունարեն",en:"անգլերեն","en-AU":"ավստրալիական անգլերեն","en-CA":"կանադական անգլերեն","en-GB":"բրիտանական անգլերեն","en-US":"ամերիկյան անգլերեն",eo:"էսպերանտո",es:"իսպաներեն","es-419":"լատինամերիկյան իսպաներեն","es-ES":"եվրոպական իսպաներեն","es-MX":"մեքսիկական իսպաներեն",et:"էստոներեն",eu:"բասկերեն",ewo:"էվոնդո",fa:"պարսկերեն",ff:"ֆուլահ",fi:"ֆիններեն",fil:"ֆիլիպիներեն",fit:"տորնադելեն ֆիններեն",fj:"ֆիջիերեն",fo:"ֆարյորերեն",fon:"ֆոն",fr:"ֆրանսերեն","fr-CA":"կանադական ֆրանսերեն","fr-CH":"շվեյցարական ֆրանսերեն",fro:"հին ֆրանսերեն",frs:"արևելաֆրիզերեն",fur:"ֆրիուլիերեն",fy:"արևմտաֆրիզերեն",ga:"իռլանդերեն",gaa:"գայերեն",gag:"գագաուզերեն",gbz:"զրադաշտական դարի",gd:"շոտլանդական գաելերեն",gez:"գեեզ",gil:"կիրիբատի",gl:"գալիսերեն",gn:"գուարանի",goh:"հին վերին գերմաներեն",gor:"գորոնտալո",got:"գոթերեն",grc:"հին հունարեն",gsw:"շվեյցարական գերմաներեն",gu:"գուջարաթի",guc:"վայուու",guz:"գուսի",gv:"մեներեն",gwi:"գվիչին",ha:"հաուսա",haw:"հավայիերեն",he:"եբրայերեն",hi:"հինդի",hil:"հիլիգայնոն",hmn:"հմոնգ",hr:"խորվաթերեն",hsb:"վերին սորբերեն",hsn:"սյան չինարեն",ht:"խառնակերտ հայիթերեն",hu:"հունգարերեն",hup:"հուպա",hy:"հայերեն",hz:"հերերո",ia:"ինտերլինգուա",iba:"իբաներեն",ibb:"իբիբիո",id:"ինդոնեզերեն",ie:"ինտերլինգուե",ig:"իգբո",ii:"սիչուան",ilo:"իլոկերեն",inh:"ինգուշերեն",io:"իդո",is:"իսլանդերեն",it:"իտալերեն",iu:"ինուկտիտուտ",ja:"ճապոներեն",jbo:"լոժբան",jgo:"նգոմբա",jmc:"մաշամե",jv:"ճավայերեն",ka:"վրացերեն",kab:"կաբիլերեն",kac:"կաչիներեն",kaj:"ջյու",kam:"կամբա",kbd:"կաբարդերեն",kcg:"տիապ",kde:"մակոնդե",kea:"կաբուվերդերեն",kfo:"կորո",kha:"քասիերեն",khq:"կոյրա չինի",ki:"կիկույու",kj:"կուանյամա",kk:"ղազախերեն",kkj:"կակո",kl:"կալաալիսուտ",kln:"կալենջին",km:"քմերերեն",kmb:"կիմբունդու",kn:"կաննադա",ko:"կորեերեն",koi:"պերմյակ կոմիերեն",kok:"կոնկանի",kpe:"կպելլեերեն",kr:"կանուրի",krc:"կարաչայ-բալկարերեն",krl:"կարելերեն",kru:"կուրուխ",ks:"քաշմիրերեն",ksb:"շամբալա",ksf:"բաֆիա",ksh:"քյոլներեն",ku:"քրդերեն",kum:"կումիկերեն",kv:"կոմիերեն",kw:"կոռներեն",ky:"ղրղզերեն",la:"լատիներեն",lad:"լադինո",lag:"լանգի",lb:"լյուքսեմբուրգերեն",lez:"լեզգիերեն",lg:"գանդա",li:"լիմբուրգերեն",lkt:"լակոտա",ln:"լինգալա",lo:"լաոսերեն",loz:"լոզի",lrc:"հյուսիսային լուրիերեն",lt:"լիտվերեն",lu:"լուբա-կատանգա",lua:"լուբա-լուլուա",lun:"լունդա",luo:"լուո",lus:"միզո",luy:"լույա",lv:"լատվիերեն",mad:"մադուրերեն",mag:"մագահի",mai:"մայթիլի",mak:"մակասարերեն",mas:"մասաի",mdf:"մոկշայերեն",men:"մենդե",mer:"մերու",mfe:"մորիսյեն",mg:"մալգաշերեն",mgh:"մաքուա-մետտո",mgo:"մետա",mh:"մարշալերեն",mi:"մաորի",mic:"միկմակ",min:"մինանգկաբաու",mk:"մակեդոներեն",ml:"մալայալամ",mn:"մոնղոլերեն",mni:"մանիպուրի",moh:"մոհավք",mos:"մոսսի",mr:"մարաթի",mrj:"արևմտամարիերեն",ms:"մալայերեն",mt:"մալթայերեն",mua:"մունդանգ",mus:"կրիկ",mwl:"միրանդերեն",my:"բիրմայերեն",myv:"էրզյա",mzn:"մազանդարաներեն",na:"նաուրու",nap:"նեապոլերեն",naq:"նամա",nb:"գրքային նորվեգերեն",nd:"հյուսիսային նդեբելե",nds:"ստորին գերմաներեն","nds-NL":"ստորին սաքսոներեն",ne:"նեպալերեն","new":"նեվարերեն",ng:"նդոնգա",nia:"նիասերեն",niu:"նիուերեն",nl:"հոլանդերեն","nl-BE":"ֆլամանդերեն",nmg:"կվասիո",nn:"նոր նորվեգերեն",nnh:"նգիեմբուն",no:"նորվեգերեն",nog:"նոգայերեն",non:"հին նորվեգերեն",nqo:"նկո",nr:"հարավային նդեբելե",nso:"հյուսիսային սոթո",nus:"նուեր",nv:"նավախո",ny:"նյանջա",nyn:"նյանկոլե",oc:"օքսիտաներեն",oj:"օջիբվա",om:"օրոմո",or:"օրիյա",os:"օսերեն",osa:"օսեյջ",ota:"օսմաներեն",pa:"փենջաբերեն",pag:"պանգասինաներեն",pal:"պահլավերեն",pam:"պամպանգաերեն",pap:"պապյամենտո",pau:"պալաուերեն",pcd:"պիկարդերեն",pcm:"նիգերյան կրեոլերեն",pdc:"փենսիլվանական գերմաներեն",pdt:"պլատագերմաներեն",peo:"հին պարսկերեն",pfl:"պալատինյան գերմաներեն",phn:"փյունիկերեն",pi:"պալի",pl:"լեհերեն",pms:"պիեմոնտերեն",pnt:"պոնտերեն",pon:"պոնպեերեն",prg:"պրուսերեն",pro:"հին պրովանսերեն",ps:"փուշթու",pt:"պորտուգալերեն","pt-BR":"բրազիլական պորտուգալերեն","pt-PT":"եվրոպական պորտուգալերեն",qu:"կեչուա",quc:"քիչե",raj:"ռաջաստաներեն",rap:"ռապանուի",rar:"ռարոտոնգաներեն",rgn:"ռոմանիոլերեն",rif:"ռիֆերեն",rm:"ռոմանշերեն",rn:"ռունդի",ro:"ռումիներեն","ro-MD":"մոլդովերեն",rof:"ռոմբո",rom:"ռոմաներեն",root:"ռուտերեն",rtm:"ռոտուման",ru:"ռուսերեն",rue:"ռուսիներեն",rug:"ռովիանա",rup:"արոմաներեն",rw:"կինյառուանդա",rwk:"ռվա",sa:"սանսկրիտ",sad:"սանդավե",sah:"յակուտերեն",saq:"սամբուրու",sat:"սանտալի",sba:"նգամբայ",sbp:"սանգու",sc:"սարդիներեն",scn:"սիցիլիերեն",sco:"շոտլանդերեն",sd:"սինդհի",sdh:"հարավային քրդերեն",se:"հյուսիսային սաամի",seh:"սենա",ses:"կոյրաբորո սեննի",sg:"սանգո",sga:"հին իռլանդերեն",sh:"սերբա-խորվաթերեն",shi:"տաշելհիթ",shn:"շաներեն",si:"սինհալերեն",sk:"սլովակերեն",sl:"սլովեներեն",sm:"սամոաերեն",sma:"հարավային սաամի",smj:"լուլե սաամի",smn:"ինարի սաամի",sms:"սկոլտ սաամի",sn:"շոնա",snk:"սոնինկե",so:"սոմալիերեն",sq:"ալբաներեն",sr:"սերբերեն",srn:"սրանան տոնգո",ss:"սվազերեն",ssy:"սահոերեն",st:"հարավային սոթո",su:"սունդաներեն",suk:"սուկումա",sv:"շվեդերեն",sw:"սուահիլի","sw-CD":"կոնգոյի սուահիլի",swb:"կոմորերեն",syr:"ասորերեն",ta:"թամիլերեն",tcy:"տուլու",te:"թելուգու",tem:"տեմնե",teo:"տեսո",ter:"տերենո",tet:"տետում",tg:"տաջիկերեն",th:"թայերեն",ti:"տիգրինյա",tig:"տիգրե",tiv:"տիվերեն",tk:"թուրքմեներեն",tkl:"տոկելաու",tkr:"ցախուր",tl:"տագալերեն",tlh:"կլինգոն",tli:"տլինգիտ",tly:"թալիշերեն",tmh:"տամաշեկ",tn:"ցվանա",to:"տոնգերեն",tpi:"տոկ փիսին",tr:"թուրքերեն",tru:"տուրոյո",trv:"տարոկո",ts:"ցոնգա",tsd:"ցակոներեն",tsi:"ցիմշյան",tt:"թաթարերեն",tum:"տումբուկա",tvl:"թուվալուերեն",tw:"տուի",twq:"տասավաք",ty:"թաիտերեն",tyv:"տուվերեն",tzm:"կենտրոնատլասյան թամազիղտ",udm:"ուդմուրտերեն",ug:"ույղուրերեն",uga:"ուգարիտերեն",uk:"ուկրաիներեն",umb:"ումբունդու",ur:"ուրդու",uz:"ուզբեկերեն",vai:"վաի",ve:"վենդա",vec:"վենետերեն",vep:"վեպսերեն",vi:"վիետնամերեն",vls:"արևմտաֆլամանդերեն",vo:"վոլապյուկ",vot:"վոդերեն",vro:"վորո",vun:"վունջո",wa:"վալոներեն",wae:"վալսերեն",wal:"վոլայտա",war:"վարայերեն",was:"վաշո",wbp:"վարլպիրի",wo:"վոլոֆ",wuu:"վու չինարեն",xal:"կալմիկերեն",xh:"քոսա",xog:"սոգա",yao:"յաո",yap:"յափերեն",yav:"յանգբեն",ybb:"եմբա",yi:"իդիշ",yo:"յորուբա",yue:"կանտոներեն",za:"ժուանգ",zap:"սապոտեկերեն",zea:"զեյլանդերեն",zen:"զենագա",zgh:"ընդհանուր մարոկյան թամազիղտ",zh:"չինարեն","zh-Hans":"չինարեն (պարզեցված չինական)","zh-Hant":"չինարեն (ավանդական չինական)",zu:"զուլուերեն",zun:"զունիերեն",zza:"զազաերեն"},scriptNames:{Cyrl:"կյուրեղագիր",Latn:"լատինական",Arab:"արաբական",Guru:"գուրմուխի",Hans:"պարզեցված չինական",Hant:"ավանդական չինական"}},ia:{rtl:false,languageNames:{aa:"afar",ab:"abkhazo",ace:"acehnese",ada:"adangme",ady:"adygeano",af:"afrikaans",agq:"aghem",ain:"ainu",ak:"akan",ale:"aleuto",alt:"altai del sud",am:"amharico",an:"aragonese",anp:"angika",ar:"arabe","ar-001":"arabe standard moderne",arn:"mapuche",arp:"arapaho",as:"assamese",asa:"asu",ast:"asturiano",av:"avaro",awa:"awadhi",ay:"aymara",az:"azerbaidzhano",ba:"bashkir",ban:"balinese",bas:"basaa",be:"bielorusso",bem:"bemba",bez:"bena",bg:"bulgaro",bho:"bhojpuri",bi:"bislama",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",br:"breton",brx:"bodo",bs:"bosniaco",bug:"buginese",byn:"blin",ca:"catalano",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chk:"chuukese",chm:"mari",cho:"choctaw",chr:"cherokee",chy:"cheyenne",ckb:"kurdo central",co:"corso",crs:"creolo seychellese",cs:"checo",cu:"slavo ecclesiastic",cv:"chuvash",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"germano","de-AT":"germano austriac","de-CH":"alte germano suisse",dgr:"dogrib",dje:"zarma",dsb:"basse sorabo",dua:"duala",dv:"divehi",dyo:"jola-fonyi",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",eka:"ekajuk",el:"greco",en:"anglese","en-AU":"anglese australian","en-CA":"anglese canadian","en-GB":"anglese britannic","en-US":"anglese american",eo:"esperanto",es:"espaniol","es-419":"espaniol latinoamerican","es-ES":"espaniol europee","es-MX":"espaniol mexican",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",ff:"fula",fi:"finnese",fil:"filipino",fj:"fijiano",fo:"feroese",fr:"francese","fr-CA":"francese canadian","fr-CH":"francese suisse",fur:"friulano",fy:"frison occidental",ga:"irlandese",gaa:"ga",gd:"gaelico scotese",gez:"ge’ez",gil:"gilbertese",gl:"galleco",gn:"guarani",gor:"gorontalo",gsw:"germano suisse",gu:"gujarati",guz:"gusii",gv:"mannese",gwi:"gwich’in",ha:"hausa",haw:"hawaiano",he:"hebreo",hi:"hindi",hil:"hiligaynon",hmn:"hmong",hr:"croato",hsb:"alte sorabo",ht:"creolo haitian",hu:"hungaro",hup:"hupa",hy:"armeniano",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ig:"igbo",ii:"yi de Sichuan",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",ja:"japonese",jbo:"lojban",jgo:"ngomba",jmc:"machame",jv:"javanese",ka:"georgiano",kab:"kabylo",kac:"kachin",kaj:"jju",kam:"kamba",kbd:"cabardiano",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kha:"khasi",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazakh",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",kok:"konkani",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkaro",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"kurdo",kum:"kumyko",kv:"komi",kw:"cornico",ky:"kirghizo",la:"latino",lad:"ladino",lag:"langi",lb:"luxemburgese",lez:"lezghiano",lg:"luganda",li:"limburgese",lkt:"lakota",ln:"lingala",lo:"laotiano",loz:"lozi",lrc:"luri del nord",lt:"lithuano",lu:"luba-katanga",lua:"luba-lulua",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letton",mad:"madurese",mag:"magahi",mai:"maithili",mak:"macassarese",mas:"masai",mdf:"moksha",men:"mende",mer:"meri",mfe:"creolo mauritian",mg:"malgache",mgh:"makhuwa-meetto",mgo:"metaʼ",mh:"marshallese",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedone",ml:"malayalam",mn:"mongol",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malay",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",my:"birmano",myv:"erzya",mzn:"mazanderani",na:"nauru",nap:"napolitano",naq:"nama",nb:"norvegiano bokmål",nd:"ndebele del nord","nds-NL":"nds (Nederlandia)",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"nieuano",nl:"nederlandese","nl-BE":"flamingo",nmg:"kwasio",nn:"norvegiano nynorsk",nnh:"ngiemboon",nog:"nogai",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",ny:"nyanja",nyn:"nyankole",oc:"occitano",om:"oromo",or:"oriya",os:"osseto",pa:"punjabi",pag:"pangasinan",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigerian",pl:"polonese",prg:"prussiano",ps:"pashto",pt:"portugese","pt-BR":"portugese de Brasil","pt-PT":"portugese de Portugal",qu:"quechua",quc:"kʼicheʼ",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romaniano","ro-MD":"moldavo",rof:"rombo",root:"radice",ru:"russo",rup:"aromaniano",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakuto",saq:"samburu",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scotese",sd:"sindhi",se:"sami del nord",seh:"sena",ses:"koyraboro senni",sg:"sango",shi:"tachelhit",shn:"shan",si:"cingalese",sk:"slovaco",sl:"sloveno",sm:"samoano",sma:"sami del sud",smj:"sami de Lule",smn:"sami de Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sq:"albanese",sr:"serbo",srn:"sranan tongo",ss:"swati",ssy:"saho",st:"sotho del sud",su:"sundanese",suk:"sukuma",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syr:"syriaco",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",tet:"tetum",tg:"tajiko",th:"thai",ti:"tigrinya",tig:"tigre",tk:"turkmeno",tlh:"klingon",tn:"tswana",to:"tongano",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tt:"tataro",tum:"tumbuka",tvl:"tuvaluano",twq:"tasawaq",ty:"tahitiano",tyv:"tuvano",tzm:"tamazight del Atlas Central",udm:"udmurto",ug:"uighur",uk:"ukrainiano",umb:"umbundu",ur:"urdu",uz:"uzbeko",ve:"venda",vi:"vietnamese",vo:"volapük",vun:"vunjo",wa:"wallon",wae:"walser",wal:"wolaytta",war:"waray",wo:"wolof",xal:"calmuco",xh:"xhosa",xog:"soga",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yue:"cantonese",zgh:"tamazight marocchin standard",zh:"chinese","zh-Hans":"chinese (simplificate)","zh-Hant":"chinese (traditional)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cyrillic",Latn:"latin",Arab:"arabe",Guru:"gurmukhi",Hans:"simplificate",Hant:"traditional"}},id:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhaz",ace:"Aceh",ach:"Acoli",ada:"Adangme",ady:"Adygei",ae:"Avesta",aeb:"Arab Tunisia",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Ainu",ak:"Akan",akk:"Akkadia",akz:"Alabama",ale:"Aleut",alt:"Altai Selatan",am:"Amharik",an:"Aragon",ang:"Inggris Kuno",anp:"Angika",ar:"Arab","ar-001":"Arab Standar Modern",arc:"Aram",arn:"Mapuche",arp:"Arapaho",arq:"Arab Aljazair",ars:"Arab Najdi",arw:"Arawak",ary:"Arab Maroko",arz:"Arab Mesir",as:"Assam",asa:"Asu",ase:"Bahasa Isyarat Amerika",ast:"Asturia",av:"Avar",awa:"Awadhi",ay:"Aymara",az:"Azerbaijani",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bar:"Bavaria",bas:"Basa",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusia",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",bra:"Braj",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalan",cad:"Kado",car:"Karib",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Kiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuuke",chm:"Mari",chn:"Jargon Chinook",cho:"Koktaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Korsika",cop:"Koptik",cr:"Kree",crh:"Tatar Krimea",crs:"Seselwa Kreol Prancis",cs:"Cheska",csb:"Kashubia",cu:"Bahasa Gereja Slavonia",cv:"Chuvash",cy:"Welsh",da:"Dansk",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman (Austria)","de-CH":"Jerman Tinggi (Swiss)",del:"Delaware",den:"Slave",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Sorbia Hilir",dua:"Duala",dum:"Belanda Abad Pertengahan",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egy:"Mesir Kuno",eka:"Ekajuk",el:"Yunani",elx:"Elam",en:"Inggris","en-AU":"Inggris (Australia)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Inggris)","en-US":"Inggris (Amerika Serikat)",enm:"Inggris Abad Pertengahan",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropa)","es-MX":"Spanyol (Meksiko)",et:"Esti",eu:"Basque",ewo:"Ewondo",fa:"Persia",fan:"Fang",fat:"Fanti",ff:"Fula",fi:"Suomi",fil:"Filipino",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Prancis","fr-CA":"Perancis (Kanada)","fr-CH":"Perancis (Swiss)",frc:"Prancis Cajun",frm:"Prancis Abad Pertengahan",fro:"Prancis Kuno",frp:"Arpitan",frr:"Frisia Utara",frs:"Frisia Timur",fur:"Friuli",fy:"Frisia Barat",ga:"Irlandia",gaa:"Ga",gag:"Gagauz",gay:"Gayo",gba:"Gbaya",gd:"Gaelik Skotlandia",gez:"Geez",gil:"Gilbert",gl:"Galisia",glk:"Gilaki",gmh:"Jerman Abad Pertengahan",gn:"Guarani",goh:"Jerman Kuno",gon:"Gondi",gor:"Gorontalo",got:"Gotik",grb:"Grebo",grc:"Yunani Kuno",gsw:"Jerman (Swiss)",gu:"Gujarat",guz:"Gusii",gv:"Manx",gwi:"Gwich’in",ha:"Hausa",hai:"Haida",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hif:"Hindi Fiji",hil:"Hiligaynon",hit:"Hitit",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroasia",hsb:"Sorbia Hulu",ht:"Kreol Haiti",hu:"Hungaria",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ik:"Inupiak",ilo:"Iloko",inh:"Ingushetia",io:"Ido",is:"Islandia",it:"Italia",iu:"Inuktitut",ja:"Jepang",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Ibrani-Persia",jrb:"Ibrani-Arab",jv:"Jawa",ka:"Georgia",kaa:"Kara-Kalpak",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardi",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kha:"Khasi",kho:"Khotan",khq:"Koyra Chiini",ki:"Kikuyu",kj:"Kuanyama",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kos:"Kosre",kpe:"Kpelle",kr:"Kanuri",krc:"Karachai Balkar",kri:"Krio",krl:"Karelia",kru:"Kuruk",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Dialek Kolsch",ku:"Kurdi",kum:"Kumyk",kut:"Kutenai",kv:"Komi",kw:"Kornish",ky:"Kirgiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luksemburg",lez:"Lezghia",lg:"Ganda",li:"Limburgia",lij:"Liguria",lkt:"Lakota",ln:"Lingala",lo:"Lao",lol:"Mongo",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lituavi",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvi",lzz:"Laz",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Moksha",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisien",mg:"Malagasi",mga:"Irlandia Abad Pertengahan",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Mikmak",min:"Minangkabau",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mnc:"Manchuria",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Bahasa Muskogee",mwl:"Miranda",mwr:"Marwari",mwv:"Mentawai",my:"Burma",mye:"Myene",myv:"Eryza",mzn:"Mazanderani",na:"Nauru",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Jerman Rendah (Belanda)",ne:"Nepali","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niuea",nl:"Belanda","nl-BE":"Belanda (Belgia)",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",no:"Norwegia",nog:"Nogai",non:"Norse Kuno",nqo:"N’Ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",nwc:"Newari Klasik",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Ositania",oj:"Ojibwa",om:"Oromo",or:"Oriya",os:"Ossetia",osa:"Osage",ota:"Turki Osmani",pa:"Punjabi",pag:"Pangasina",pal:"Pahlevi",pam:"Pampanga",pap:"Papiamento",pau:"Palau",pcm:"Pidgin Nigeria",pdc:"Jerman Pennsylvania",peo:"Persia Kuno",phn:"Funisia",pi:"Pali",pl:"Polski",pon:"Pohnpeia",prg:"Prusia",pro:"Provencal Lama",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Eropa)",qu:"Quechua",quc:"Kʼicheʼ",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotonga",rm:"Reto-Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Moldavia",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotuma",ru:"Rusia",rup:"Aromania",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sad:"Sandawe",sah:"Sakha",sam:"Aram Samaria",saq:"Samburu",sas:"Sasak",sat:"Santali",sba:"Ngambai",sbp:"Sangu",sc:"Sardinia",scn:"Sisilia",sco:"Skotlandia",sd:"Sindhi",sdh:"Kurdi Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkup",ses:"Koyraboro Senni",sg:"Sango",sga:"Irlandia Kuno",sh:"Serbo-Kroasia",shi:"Tachelhit",shn:"Shan",shu:"Arab Suwa",si:"Sinhala",sid:"Sidamo",sk:"Slovak",sl:"Sloven",sli:"Silesia Rendah",sly:"Selayar",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somalia",sog:"Sogdien",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",srr:"Serer",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sus:"Susu",sux:"Sumeria",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo)",swb:"Komoria",syc:"Suriah Klasik",syr:"Suriah",szl:"Silesia",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmen",tkl:"Tokelau",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tmh:"Tamashek",tn:"Tswana",to:"Tonga",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turki",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsi:"Tsimshia",tt:"Tatar",ttt:"Tat Muslim",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinia",tzm:"Tamazight Maroko Tengah",udm:"Udmurt",ug:"Uyghur",uga:"Ugarit",uk:"Ukraina",umb:"Umbundu",ur:"Urdu",uz:"Uzbek",vai:"Vai",ve:"Venda",vec:"Venesia",vi:"Vietnam",vo:"Volapuk",vot:"Votia",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Walamo",war:"Warai",was:"Washo",wbp:"Warlpiri",wo:"Wolof",xal:"Kalmuk",xh:"Xhosa",xog:"Soga",yao:"Yao",yap:"Yapois",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",za:"Zhuang",zap:"Zapotek",zbl:"Blissymbol",zen:"Zenaga",zgh:"Tamazight Maroko Standar",zh:"Tionghoa","zh-Hans":"Tionghoa (Sederhana)","zh-Hant":"Tionghoa (Tradisional)",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Sederhana",Hant:"Tradisional"}},is:{rtl:false,languageNames:{aa:"afár",ab:"abkasíska",ace:"akkíska",ach:"acoli",ada:"adangme",ady:"adýge",ae:"avestíska",af:"afríkanska",afh:"afríhílí",agq:"aghem",ain:"aínu (Japan)",ak:"akan",akk:"akkadíska",ale:"aleúska",alt:"suðuraltaíska",am:"amharíska",an:"aragonska",ang:"fornenska",anp:"angíka",ar:"arabíska","ar-001":"stöðluð nútímaarabíska",arc:"arameíska",arn:"mapuche",arp:"arapahó",arw:"aravakska",as:"assamska",asa:"asu",ast:"astúríska",av:"avaríska",awa:"avadí",ay:"aímara",az:"aserska",ba:"baskír",bal:"balúkí",ban:"balíska",bas:"basa",bax:"bamun",be:"hvítrússneska",bej:"beja",bem:"bemba",bez:"bena",bg:"búlgarska",bgn:"vesturbalotsí",bho:"bojpúrí",bi:"bíslama",bik:"bíkol",bin:"bíní",bla:"siksika",bm:"bambara",bn:"bengalska",bo:"tíbeska",br:"bretónska",bra:"braí",brx:"bódó",bs:"bosníska",bss:"bakossi",bua:"búríat",bug:"búgíska",byn:"blín",ca:"katalónska",cad:"kaddó",car:"karíbamál",cay:"kajúga",cch:"atsam",ccp:"tsjakma",ce:"tsjetsjenska",ceb:"kebúanó",cgg:"kíga",ch:"kamorró",chb:"síbsja",chg:"sjagataí",chk:"sjúkíska",chm:"marí",chn:"sínúk",cho:"sjoktá",chp:"sípevíska",chr:"Cherokee-mál",chy:"sjeyen",ckb:"sorani-kúrdíska",co:"korsíska",cop:"koptíska",cr:"krí",crh:"krímtyrkneska",crs:"seychelles-kreólska",cs:"tékkneska",csb:"kasúbíska",cu:"kirkjuslavneska",cv:"sjúvas",cy:"velska",da:"danska",dak:"dakóta",dar:"dargva",dav:"taíta",de:"þýska","de-AT":"austurrísk þýska","de-CH":"svissnesk háþýska",del:"delaver",den:"slavneska",dgr:"dogríb",din:"dinka",dje:"zarma",doi:"dogrí",dsb:"lágsorbneska",dua:"dúala",dum:"miðhollenska",dv:"dívehí",dyo:"jola-fonyi",dyu:"djúla",dz:"dsongka",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efík",egy:"fornegypska",eka:"ekajúk",el:"gríska",elx:"elamít",en:"enska","en-AU":"áströlsk enska","en-CA":"kanadísk enska","en-GB":"bresk enska","en-US":"bandarísk enska",enm:"miðenska",eo:"esperantó",es:"spænska","es-419":"rómönsk-amerísk spænska","es-ES":"evrópsk spænska","es-MX":"mexíkósk spænska",et:"eistneska",eu:"baskneska",ewo:"evondó",fa:"persneska",fan:"fang",fat:"fantí",ff:"fúla",fi:"finnska",fil:"filippseyska",fj:"fídjeyska",fo:"færeyska",fon:"fón",fr:"franska","fr-CA":"kanadísk franska","fr-CH":"svissnesk franska",frc:"cajun-franska",frm:"miðfranska",fro:"fornfranska",frr:"norðurfrísneska",frs:"austurfrísneska",fur:"fríúlska",fy:"vesturfrísneska",ga:"írska",gaa:"ga",gag:"gagás",gay:"gajó",gba:"gbaja",gd:"skosk gelíska",gez:"gís",gil:"gilberska",gl:"galíanska",gmh:"miðháþýska",gn:"gvaraní",goh:"fornháþýska",gon:"gondí",gor:"gorontaló",got:"gotneska",grb:"gerbó",grc:"forngríska",gsw:"svissnesk þýska",gu:"gújaratí",guz:"gusii",gv:"manska",gwi:"gvísín",ha:"hása",hai:"haída",haw:"havaíska",he:"hebreska",hi:"hindí",hil:"híligaínon",hit:"hettitíska",hmn:"hmong",ho:"hírímótú",hr:"króatíska",hsb:"hásorbneska",ht:"haítíska",hu:"ungverska",hup:"húpa",hy:"armenska",hz:"hereró",ia:"alþjóðatunga",iba:"íban",ibb:"ibibio",id:"indónesíska",ie:"interlingve",ig:"ígbó",ii:"sísúanjí",ik:"ínúpíak",ilo:"ílokó",inh:"ingús",io:"ídó",is:"íslenska",it:"ítalska",iu:"inúktitút",ja:"japanska",jbo:"lojban",jgo:"ngomba",jmc:"masjáme",jpr:"gyðingapersneska",jrb:"gyðingaarabíska",jv:"javanska",ka:"georgíska",kaa:"karakalpak",kab:"kabíle",kac:"kasín",kaj:"jju",kam:"kamba",kaw:"kaví",kbd:"kabardíska",kcg:"tyap",kde:"makonde",kea:"grænhöfðeyska",kfo:"koro",kg:"kongóska",kha:"kasí",kho:"kotaska",khq:"koyra chiini",ki:"kíkújú",kj:"kúanjama",kk:"kasakska",kkj:"kako",kl:"grænlenska",kln:"kalenjin",km:"kmer",kmb:"kimbúndú",kn:"kannada",ko:"kóreska",koi:"kómí-permyak",kok:"konkaní",kos:"kosraska",kpe:"kpelle",kr:"kanúrí",krc:"karasaíbalkar",krl:"karélska",kru:"kúrúk",ks:"kasmírska",ksb:"sjambala",ksf:"bafía",ksh:"kölníska",ku:"kúrdíska",kum:"kúmík",kut:"kútenaí",kv:"komíska",kw:"kornbreska",ky:"kirgiska",la:"latína",lad:"ladínska",lag:"langí",lah:"landa",lam:"lamba",lb:"lúxemborgíska",lez:"lesgíska",lg:"ganda",li:"limbúrgíska",lkt:"lakóta",ln:"lingala",lo:"laó",lol:"mongó",lou:"kreólska (Louisiana)",loz:"lozi",lrc:"norðurlúrí",lt:"litháíska",lu:"lúbakatanga",lua:"luba-lulua",lui:"lúisenó",lun:"lúnda",luo:"lúó",lus:"lúsaí",luy:"luyia",lv:"lettneska",mad:"madúrska",mag:"magahí",mai:"maítílí",mak:"makasar",man:"mandingó",mas:"masaí",mdf:"moksa",mdr:"mandar",men:"mende",mer:"merú",mfe:"máritíska",mg:"malagasíska",mga:"miðírska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallska",mi:"maorí",mic:"mikmak",min:"mínangkabá",mk:"makedónska",ml:"malajalam",mn:"mongólska",mnc:"mansjú",mni:"manípúrí",moh:"móhíska",mos:"mossí",mr:"maratí",ms:"malaíska",mt:"maltneska",mua:"mundang",mus:"krík",mwl:"mirandesíska",mwr:"marvarí",my:"burmneska",myv:"ersja",mzn:"masanderaní",na:"nárúska",nap:"napólíska",naq:"nama",nb:"norskt bókmál",nd:"norður-ndebele",nds:"lágþýska; lágsaxneska","nds-NL":"lágsaxneska",ne:"nepalska","new":"nevarí",ng:"ndonga",nia:"nías",niu:"níveska",nl:"hollenska","nl-BE":"flæmska",nmg:"kwasio",nn:"nýnorska",nnh:"ngiemboon",no:"norska",nog:"nógaí",non:"norræna",nqo:"n’ko",nr:"suðurndebele",nso:"norðursótó",nus:"núer",nv:"navahó",nwc:"klassísk nevaríska",ny:"nýanja",nym:"njamvesí",nyn:"nyankole",nyo:"njóró",nzi:"nsíma",oc:"oksítaníska",oj:"ojibva",om:"oromo",or:"óría",os:"ossetíska",osa:"ósage",ota:"tyrkneska, ottóman",pa:"púnjabí",pag:"pangasínmál",pal:"palaví",pam:"pampanga",pap:"papíamentó",pau:"paláska",pcm:"nígerískt pidgin",peo:"fornpersneska",phn:"fönikíska",pi:"palí",pl:"pólska",pon:"ponpeiska",prg:"prússneska",pro:"fornpróvensalska",ps:"pastú",pt:"portúgalska","pt-BR":"brasílísk portúgalska","pt-PT":"evrópsk portúgalska",qu:"kvesjúa",quc:"kiche",raj:"rajastaní",rap:"rapanúí",rar:"rarótongska",rm:"rómanska",rn:"rúndí",ro:"rúmenska","ro-MD":"moldóvska",rof:"rombó",rom:"romaní",root:"rót",ru:"rússneska",rup:"arúmenska",rw:"kínjarvanda",rwk:"rúa",sa:"sanskrít",sad:"sandave",sah:"jakút",sam:"samversk arameíska",saq:"sambúrú",sas:"sasak",sat:"santalí",sba:"ngambay",sbp:"sangú",sc:"sardínska",scn:"sikileyska",sco:"skoska",sd:"sindí",sdh:"suðurkúrdíska",se:"norðursamíska",seh:"sena",sel:"selkúp",ses:"koíraboró-senní",sg:"sangó",sga:"fornírska",sh:"serbókróatíska",shi:"tachelhit",shn:"sjan",si:"singalíska",sid:"sídamó",sk:"slóvakíska",sl:"slóvenska",sm:"samóska",sma:"suðursamíska",smj:"lúlesamíska",smn:"enaresamíska",sms:"skoltesamíska",sn:"shona",snk:"sóninke",so:"sómalska",sog:"sogdíen",sq:"albanska",sr:"serbneska",srn:"sranan tongo",srr:"serer",ss:"svatí",ssy:"saho",st:"suðursótó",su:"súndanska",suk:"súkúma",sus:"súsú",sux:"súmerska",sv:"sænska",sw:"svahílí","sw-CD":"kongósvahílí",swb:"shimaoríska",syc:"klassísk sýrlenska",syr:"sýrlenska",ta:"tamílska",te:"telúgú",tem:"tímne",teo:"tesó",ter:"terenó",tet:"tetúm",tg:"tadsjikska",th:"taílenska",ti:"tígrinja",tig:"tígre",tiv:"tív",tk:"túrkmenska",tkl:"tókeláska",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tmh:"tamasjek",tn:"tsúana",to:"tongverska",tog:"tongverska (nyasa)",tpi:"tokpisin",tr:"tyrkneska",trv:"tarókó",ts:"tsonga",tsi:"tsimsíska",tt:"tatarska",tum:"túmbúka",tvl:"túvalúska",tw:"tví",twq:"tasawaq",ty:"tahítíska",tyv:"túvínska",tzm:"tamazight",udm:"údmúrt",ug:"úígúr",uga:"úgarítíska",uk:"úkraínska",umb:"úmbúndú",ur:"úrdú",uz:"úsbekska",vai:"vaí",ve:"venda",vi:"víetnamska",vo:"volapyk",vot:"votíska",vun:"vunjó",wa:"vallónska",wae:"valser",wal:"volayatta",war:"varaí",was:"vasjó",wbp:"varlpiri",wo:"volof",xal:"kalmúkska",xh:"sósa",xog:"sóga",yao:"jaó",yap:"japíska",yav:"yangben",ybb:"yemba",yi:"jiddíska",yo:"jórúba",yue:"kantónska",za:"súang",zap:"sapótek",zbl:"blisstákn",zen:"senaga",zgh:"staðlað marokkóskt tamazight",zh:"kínverska","zh-Hans":"mandarín (einfölduð)","zh-Hant":"mandarín (hefðbundin)",zu:"súlú",zun:"súní",zza:"zázáíska"},scriptNames:{Cyrl:"kyrillískt",Latn:"latneskt",Arab:"arabískt",Guru:"gurmukhi",Hans:"einfaldað",Hant:"hefðbundið"}},it:{rtl:false,languageNames:{aa:"afar",ab:"abcaso",ace:"accinese",ach:"acioli",ada:"adangme",ady:"adyghe",ae:"avestan",aeb:"arabo tunisino",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"accado",akz:"alabama",ale:"aleuto",aln:"albanese ghego",alt:"altai meridionale",am:"amarico",an:"aragonese",ang:"inglese antico",anp:"angika",ar:"arabo","ar-001":"arabo moderno standard",arc:"aramaico",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"arabo algerino",ars:"arabo najd",arw:"aruaco",ary:"arabo marocchino",arz:"arabo egiziano",as:"assamese",asa:"asu",ase:"lingua dei segni americana",ast:"asturiano",av:"avaro",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbaigiano",ba:"baschiro",bal:"beluci",ban:"balinese",bar:"bavarese",bas:"basa",bax:"bamun",bbc:"batak toba",bbj:"ghomala",be:"bielorusso",bej:"begia",bem:"wemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bulgaro",bgn:"beluci occidentale",bho:"bhojpuri",bi:"bislama",bik:"bicol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalese",bo:"tibetano",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretone",bra:"braj",brh:"brahui",brx:"bodo",bs:"bosniaco",bss:"akoose",bua:"buriat",bug:"bugi",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalano",cad:"caddo",car:"caribico",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"ceceno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"ciagataico",chk:"chuukese",chm:"mari",chn:"gergo chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"curdo sorani",co:"corso",cop:"copto",cps:"capiznon",cr:"cree",crh:"turco crimeo",crs:"creolo delle Seychelles",cs:"ceco",csb:"kashubian",cu:"slavo della Chiesa",cv:"ciuvascio",cy:"gallese",da:"danese",dak:"dakota",dar:"dargwa",dav:"taita",de:"tedesco","de-AT":"tedesco austriaco","de-CH":"alto tedesco svizzero",del:"delaware",den:"slave",dgr:"dogrib",din:"dinca",dje:"zarma",doi:"dogri",dsb:"basso sorabo",dtp:"dusun centrale",dua:"duala",dum:"olandese medio",dv:"divehi",dyo:"jola-fony",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliano",egy:"egiziano antico",eka:"ekajuka",el:"greco",elx:"elamitico",en:"inglese","en-AU":"inglese australiano","en-CA":"inglese canadese","en-GB":"inglese britannico","en-US":"inglese americano",enm:"inglese medio",eo:"esperanto",es:"spagnolo","es-419":"spagnolo latinoamericano","es-ES":"spagnolo europeo","es-MX":"spagnolo messicano",esu:"yupik centrale",et:"estone",eu:"basco",ewo:"ewondo",ext:"estremegno",fa:"persiano",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandese",fil:"filippino",fit:"finlandese del Tornedalen",fj:"figiano",fo:"faroese",fr:"francese","fr-CA":"francese canadese","fr-CH":"francese svizzero",frc:"francese cajun",frm:"francese medio",fro:"francese antico",frp:"francoprovenzale",frr:"frisone settentrionale",frs:"frisone orientale",fur:"friulano",fy:"frisone occidentale",ga:"irlandese",gaa:"ga",gag:"gagauzo",gay:"gayo",gba:"gbaya",gbz:"dari zoroastriano",gd:"gaelico scozzese",gez:"geez",gil:"gilbertese",gl:"galiziano",glk:"gilaki",gmh:"tedesco medio alto",gn:"guaraní",goh:"tedesco antico alto",gom:"konkani goano",gon:"gondi",gor:"gorontalo",got:"gotico",grb:"grebo",grc:"greco antico",gsw:"tedesco svizzero",gu:"gujarati",guc:"wayuu",guz:"gusii",gv:"mannese",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiano",he:"ebraico",hi:"hindi",hif:"hindi figiano",hil:"ilongo",hit:"hittite",hmn:"hmong",ho:"hiri motu",hr:"croato",hsb:"alto sorabo",hsn:"xiang",ht:"haitiano",hu:"ungherese",hup:"hupa",hy:"armeno",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesiano",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandese",it:"italiano",iu:"inuktitut",izh:"ingrico",ja:"giapponese",jam:"creolo giamaicano",jbo:"lojban",jgo:"ngamambo",jmc:"machame",jpr:"giudeo persiano",jrb:"giudeo arabo",jut:"jutlandico",jv:"giavanese",ka:"georgiano",kaa:"kara-kalpak",kab:"cabilo",kac:"kachin",kaj:"kai",kam:"kamba",kaw:"kawi",kbd:"cabardino",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"capoverdiano",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"khotanese",khq:"koyra chiini",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazako",kkj:"kako",kl:"groenlandese",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"coreano",koi:"permiaco",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-Balkar",krl:"careliano",kru:"kurukh",ks:"kashmiri",ksb:"shambala",ksf:"bafia",ksh:"coloniese",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornico",ky:"kirghiso",la:"latino",lad:"giudeo-spagnolo",lag:"langi",lah:"lahnda",lam:"lamba",lb:"lussemburghese",lez:"lesgo",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburghese",lij:"ligure",liv:"livone",lkt:"lakota",lmo:"lombardo",ln:"lingala",lo:"lao",lol:"lolo bantu",lou:"creolo della Louisiana",loz:"lozi",lrc:"luri settentrionale",lt:"lituano",ltg:"letgallo",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"lettone",lzh:"cinese classico",lzz:"laz",mad:"madurese",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"creolo mauriziano",mg:"malgascio",mga:"irlandese medio",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshallese",mi:"maori",mic:"micmac",min:"menangkabau",mk:"macedone",ml:"malayalam",mn:"mongolo",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"mari occidentale",ms:"malese",mt:"maltese",mua:"mundang",mus:"creek",mwl:"mirandese",mwr:"marwari",mwv:"mentawai",my:"birmano",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauru",nan:"min nan",nap:"napoletano",naq:"nama",nb:"norvegese bokmål",nd:"ndebele del nord",nds:"basso tedesco","nds-NL":"basso tedesco olandese",ne:"nepalese","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"olandese","nl-BE":"fiammingo",nmg:"kwasio",nn:"norvegese nynorsk",nnh:"ngiemboon",no:"norvegese",nog:"nogai",non:"norse antico",nov:"novial",nqo:"n’ko",nr:"ndebele del sud",nso:"sotho del nord",nus:"nuer",nv:"navajo",nwc:"newari classico",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetico",osa:"osage",ota:"turco ottomano",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"piccardo",pcm:"pidgin nigeriano",pdc:"tedesco della Pennsylvania",peo:"persiano antico",pfl:"tedesco palatino",phn:"fenicio",pi:"pali",pl:"polacco",pms:"piemontese",pnt:"pontico",pon:"ponape",prg:"prussiano",pro:"provenzale antico",ps:"pashto",pt:"portoghese","pt-BR":"portoghese brasiliano","pt-PT":"portoghese europeo",qu:"quechua",quc:"k’iche’",qug:"quechua dell’altopiano del Chimborazo",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnolo",rif:"tarifit",rm:"romancio",rn:"rundi",ro:"rumeno","ro-MD":"moldavo",rof:"rombo",rom:"romani",rtm:"rotumano",ru:"russo",rue:"ruteno",rug:"roviana",rup:"arumeno",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrito",sad:"sandawe",sah:"yakut",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scozzese",sd:"sindhi",sdc:"sassarese",sdh:"curdo meridionale",se:"sami del nord",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandese antico",sgs:"samogitico",sh:"serbo-croato",shi:"tashelhit",shn:"shan",shu:"arabo ciadiano",si:"singalese",sid:"sidamo",sk:"slovacco",sl:"sloveno",sli:"tedesco slesiano",sly:"selayar",sm:"samoano",sma:"sami del sud",smj:"sami di Lule",smn:"sami di Inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somalo",sog:"sogdiano",sq:"albanese",sr:"serbo",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sotho del sud",stq:"saterfriesisch",su:"sundanese",suk:"sukuma",sus:"susu",sux:"sumero",sv:"svedese",sw:"swahili","sw-CD":"swahili del Congo",swb:"comoriano",syc:"siriaco classico",syr:"siriaco",szl:"slesiano",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tagico",th:"thai",ti:"tigrino",tig:"tigre",tk:"turcomanno",tkl:"tokelau",tkr:"tsakhur",tl:"tagalog",tlh:"klingon",tli:"tlingit",tly:"taliscio",tmh:"tamashek",tn:"tswana",to:"tongano",tog:"nyasa del Tonga",tpi:"tok pisin",tr:"turco",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"zaconico",tsi:"tsimshian",tt:"tataro",ttt:"tat islamico",tum:"tumbuka",tvl:"tuvalu",tw:"ci",twq:"tasawaq",ty:"taitiano",tyv:"tuvinian",tzm:"tamazight",udm:"udmurt",ug:"uiguro",uga:"ugaritico",uk:"ucraino",umb:"mbundu",ur:"urdu",uz:"uzbeco",ve:"venda",vec:"veneto",vep:"vepso",vi:"vietnamita",vls:"fiammingo occidentale",vo:"volapük",vot:"voto",vro:"võro",vun:"vunjo",wa:"vallone",wae:"walser",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmyk",xh:"xhosa",xmf:"mengrelio",xog:"soga",yao:"yao (bantu)",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"yiddish",yo:"yoruba",yrl:"nheengatu",yue:"cantonese",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zea:"zelandese",zen:"zenaga",zgh:"tamazight del Marocco standard",zh:"cinese","zh-Hans":"cinese mandarino semplificato","zh-Hant":"cinese mandarino tradizionale",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillico",Latn:"latino",Arab:"arabo",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"semplificato",Hant:"tradizionale"}},ja:{rtl:false,languageNames:{aa:"アファル語",ab:"アブハズ語",ace:"アチェ語",ach:"アチョリ語",ada:"アダングメ語",ady:"アディゲ語",ae:"アヴェスタ語",aeb:"チュニジア・アラビア語",af:"アフリカーンス語",afh:"アフリヒリ語",agq:"アゲム語",ain:"アイヌ語",ak:"アカン語",akk:"アッカド語",akz:"アラバマ語",ale:"アレウト語",aln:"ゲグ・アルバニア語",alt:"南アルタイ語",am:"アムハラ語",an:"アラゴン語",ang:"古英語",anp:"アンギカ語",ar:"アラビア語","ar-001":"現代標準アラビア語",arc:"アラム語",arn:"マプチェ語",aro:"アラオナ語",arp:"アラパホー語",arq:"アルジェリア・アラビア語",ars:"ナジュド地方・アラビア語",arw:"アラワク語",ary:"モロッコ・アラビア語",arz:"エジプト・アラビア語",as:"アッサム語",asa:"アス語",ase:"アメリカ手話",ast:"アストゥリアス語",av:"アヴァル語",avk:"コタヴァ",awa:"アワディー語",ay:"アイマラ語",az:"アゼルバイジャン語",ba:"バシキール語",bal:"バルーチー語",ban:"バリ語",bar:"バイエルン・オーストリア語",bas:"バサ語",bax:"バムン語",bbc:"トバ・バタク語",bbj:"ゴーマラ語",be:"ベラルーシ語",bej:"ベジャ語",bem:"ベンバ語",bew:"ベタウィ語",bez:"ベナ語",bfd:"バフット語",bfq:"バダガ語",bg:"ブルガリア語",bgn:"西バローチー語",bho:"ボージュプリー語",bi:"ビスラマ語",bik:"ビコル語",bin:"ビニ語",bjn:"バンジャル語",bkm:"コム語",bla:"シクシカ語",bm:"バンバラ語",bn:"ベンガル語",bo:"チベット語",bpy:"ビシュヌプリヤ・マニプリ語",bqi:"バフティヤーリー語",br:"ブルトン語",bra:"ブラジ語",brh:"ブラフイ語",brx:"ボド語",bs:"ボスニア語",bss:"アコース語",bua:"ブリヤート語",bug:"ブギ語",bum:"ブル語",byn:"ビリン語",byv:"メドゥンバ語",ca:"カタロニア語",cad:"カドー語",car:"カリブ語",cay:"カユーガ語",cch:"チャワイ語",ccp:"チャクマ語",ce:"チェチェン語",ceb:"セブアノ語",cgg:"チガ語",ch:"チャモロ語",chb:"チブチャ語",chg:"チャガタイ語",chk:"チューク語",chm:"マリ語",chn:"チヌーク混成語",cho:"チョクトー語",chp:"チペワイアン語",chr:"チェロキー語",chy:"シャイアン語",ckb:"中央クルド語",co:"コルシカ語",cop:"コプト語",cps:"カピス語",cr:"クリー語",crh:"クリミア・タタール語",crs:"セーシェル・クレオール語",cs:"チェコ語",csb:"カシューブ語",cu:"教会スラブ語",cv:"チュヴァシ語",cy:"ウェールズ語",da:"デンマーク語",dak:"ダコタ語",dar:"ダルグワ語",dav:"タイタ語",de:"ドイツ語","de-AT":"ドイツ語 (オーストリア)","de-CH":"標準ドイツ語 (スイス)",del:"デラウェア語",den:"スレイビー語",dgr:"ドグリブ語",din:"ディンカ語",dje:"ザルマ語",doi:"ドーグリー語",dsb:"低地ソルブ語",dtp:"中央ドゥスン語",dua:"ドゥアラ語",dum:"中世オランダ語",dv:"ディベヒ語",dyo:"ジョラ=フォニィ語",dyu:"ジュラ語",dz:"ゾンカ語",dzg:"ダザガ語",ebu:"エンブ語",ee:"エウェ語",efi:"エフィク語",egl:"エミリア語",egy:"古代エジプト語",eka:"エカジュク語",el:"ギリシャ語",elx:"エラム語",en:"英語","en-AU":"オーストラリア英語","en-CA":"カナダ英語","en-GB":"イギリス英語","en-US":"アメリカ英語",enm:"中英語",eo:"エスペラント語",es:"スペイン語","es-419":"スペイン語 (ラテンアメリカ)","es-ES":"スペイン語 (イベリア半島)","es-MX":"スペイン語 (メキシコ)",esu:"中央アラスカ・ユピック語",et:"エストニア語",eu:"バスク語",ewo:"エウォンド語",ext:"エストレマドゥーラ語",fa:"ペルシア語",fan:"ファング語",fat:"ファンティー語",ff:"フラ語",fi:"フィンランド語",fil:"フィリピノ語",fit:"トルネダール・フィンランド語",fj:"フィジー語",fo:"フェロー語",fon:"フォン語",fr:"フランス語","fr-CA":"フランス語 (カナダ)","fr-CH":"フランス語 (スイス)",frc:"ケイジャン・フランス語",frm:"中期フランス語",fro:"古フランス語",frp:"アルピタン語",frr:"北フリジア語",frs:"東フリジア語",fur:"フリウリ語",fy:"西フリジア語",ga:"アイルランド語",gaa:"ガ語",gag:"ガガウズ語",gan:"贛語",gay:"ガヨ語",gba:"バヤ語",gbz:"ダリー語(ゾロアスター教)",gd:"スコットランド・ゲール語",gez:"ゲエズ語",gil:"キリバス語",gl:"ガリシア語",glk:"ギラキ語",gmh:"中高ドイツ語",gn:"グアラニー語",goh:"古高ドイツ語",gom:"ゴア・コンカニ語",gon:"ゴーンディー語",gor:"ゴロンタロ語",got:"ゴート語",grb:"グレボ語",grc:"古代ギリシャ語",gsw:"スイスドイツ語",gu:"グジャラート語",guc:"ワユ語",gur:"フラフラ語",guz:"グシイ語",gv:"マン島語",gwi:"グウィッチン語",ha:"ハウサ語",hai:"ハイダ語",hak:"客家語",haw:"ハワイ語",he:"ヘブライ語",hi:"ヒンディー語",hif:"フィジー・ヒンディー語",hil:"ヒリガイノン語",hit:"ヒッタイト語",hmn:"フモン語",ho:"ヒリモツ語",hr:"クロアチア語",hsb:"高地ソルブ語",hsn:"湘語",ht:"ハイチ・クレオール語",hu:"ハンガリー語",hup:"フパ語",hy:"アルメニア語",hz:"ヘレロ語",ia:"インターリングア",iba:"イバン語",ibb:"イビビオ語",id:"インドネシア語",ie:"インターリング",ig:"イボ語",ii:"四川イ語",ik:"イヌピアック語",ilo:"イロカノ語",inh:"イングーシ語",io:"イド語",is:"アイスランド語",it:"イタリア語",iu:"イヌクティトット語",izh:"イングリア語",ja:"日本語",jam:"ジャマイカ・クレオール語",jbo:"ロジバン語",jgo:"ンゴンバ語",jmc:"マチャメ語",jpr:"ユダヤ・ペルシア語",jrb:"ユダヤ・アラビア語",jut:"ユトランド語",jv:"ジャワ語",ka:"ジョージア語",kaa:"カラカルパク語",kab:"カビル語",kac:"カチン語",kaj:"カジェ語",kam:"カンバ語",kaw:"カウィ語",kbd:"カバルド語",kbl:"カネンブ語",kcg:"カタブ語",kde:"マコンデ語",kea:"カーボベルデ・クレオール語",ken:"ニャン語",kfo:"コロ語",kg:"コンゴ語",kgp:"カインガング語",kha:"カシ語",kho:"コータン語",khq:"コイラ・チーニ語",khw:"コワール語",ki:"キクユ語",kiu:"キルマンジュキ語",kj:"クワニャマ語",kk:"カザフ語",kkj:"カコ語",kl:"グリーンランド語",kln:"カレンジン語",km:"クメール語",kmb:"キンブンド語",kn:"カンナダ語",ko:"韓国語",koi:"コミ・ペルミャク語",kok:"コンカニ語",kos:"コスラエ語",kpe:"クペレ語",kr:"カヌリ語",krc:"カラチャイ・バルカル語",kri:"クリオ語",krj:"キナライア語",krl:"カレリア語",kru:"クルク語",ks:"カシミール語",ksb:"サンバー語",ksf:"バフィア語",ksh:"ケルン語",ku:"クルド語",kum:"クムク語",kut:"クテナイ語",kv:"コミ語",kw:"コーンウォール語",ky:"キルギス語",la:"ラテン語",lad:"ラディノ語",lag:"ランギ語",lah:"ラフンダー語",lam:"ランバ語",lb:"ルクセンブルク語",lez:"レズギ語",lfn:"リングア・フランカ・ノバ",lg:"ガンダ語",li:"リンブルフ語",lij:"リグリア語",liv:"リヴォニア語",lkt:"ラコタ語",lmo:"ロンバルド語",ln:"リンガラ語",lo:"ラオ語",lol:"モンゴ語",lou:"ルイジアナ・クレオール語",loz:"ロジ語",lrc:"北ロル語",lt:"リトアニア語",ltg:"ラトガリア語",lu:"ルバ・カタンガ語",lua:"ルバ・ルルア語",lui:"ルイセーニョ語",lun:"ルンダ語",luo:"ルオ語",lus:"ミゾ語",luy:"ルヒヤ語",lv:"ラトビア語",lzh:"漢文",lzz:"ラズ語",mad:"マドゥラ語",maf:"マファ語",mag:"マガヒー語",mai:"マイティリー語",mak:"マカッサル語",man:"マンディンゴ語",mas:"マサイ語",mde:"マバ語",mdf:"モクシャ語",mdr:"マンダル語",men:"メンデ語",mer:"メル語",mfe:"モーリシャス・クレオール語",mg:"マダガスカル語",mga:"中期アイルランド語",mgh:"マクア・ミート語",mgo:"メタ語",mh:"マーシャル語",mi:"マオリ語",mic:"ミクマク語",min:"ミナンカバウ語",mk:"マケドニア語",ml:"マラヤーラム語",mn:"モンゴル語",mnc:"満州語",mni:"マニプリ語",moh:"モーホーク語",mos:"モシ語",mr:"マラーティー語",mrj:"山地マリ語",ms:"マレー語",mt:"マルタ語",mua:"ムンダン語",mus:"クリーク語",mwl:"ミランダ語",mwr:"マールワーリー語",mwv:"メンタワイ語",my:"ミャンマー語",mye:"ミエネ語",myv:"エルジャ語",mzn:"マーザンダラーン語",na:"ナウル語",nan:"閩南語",nap:"ナポリ語",naq:"ナマ語",nb:"ノルウェー語(ブークモール)",nd:"北ンデベレ語",nds:"低地ドイツ語","nds-NL":"低地ドイツ語 (オランダ)",ne:"ネパール語","new":"ネワール語",ng:"ンドンガ語",nia:"ニアス語",niu:"ニウーエイ語",njo:"アオ・ナガ語",nl:"オランダ語","nl-BE":"フレミッシュ語",nmg:"クワシオ語",nn:"ノルウェー語(ニーノシュク)",nnh:"ンジエムブーン語",no:"ノルウェー語",nog:"ノガイ語",non:"古ノルド語",nov:"ノヴィアル",nqo:"ンコ語",nr:"南ンデベレ語",nso:"北部ソト語",nus:"ヌエル語",nv:"ナバホ語",nwc:"古典ネワール語",ny:"ニャンジャ語",nym:"ニャムウェジ語",nyn:"ニャンコレ語",nyo:"ニョロ語",nzi:"ンゼマ語",oc:"オック語",oj:"オジブウェー語",om:"オロモ語",or:"オディア語",os:"オセット語",osa:"オセージ語",ota:"オスマントルコ語",pa:"パンジャブ語",pag:"パンガシナン語",pal:"パフラヴィー語",pam:"パンパンガ語",pap:"パピアメント語",pau:"パラオ語",pcd:"ピカルディ語",pcm:"ナイジェリア・ピジン語",pdc:"ペンシルベニア・ドイツ語",pdt:"メノナイト低地ドイツ語",peo:"古代ペルシア語",pfl:"プファルツ語",phn:"フェニキア語",pi:"パーリ語",pl:"ポーランド語",pms:"ピエモンテ語",pnt:"ポントス・ギリシャ語",pon:"ポンペイ語",prg:"プロシア語",pro:"古期プロバンス語",ps:"パシュトゥー語",pt:"ポルトガル語","pt-BR":"ポルトガル語 (ブラジル)","pt-PT":"ポルトガル語 (イベリア半島)",qu:"ケチュア語",quc:"キチェ語",qug:"チンボラソ高地ケチュア語",raj:"ラージャスターン語",rap:"ラパヌイ語",rar:"ラロトンガ語",rgn:"ロマーニャ語",rif:"リーフ語",rm:"ロマンシュ語",rn:"ルンディ語",ro:"ルーマニア語","ro-MD":"モルダビア語",rof:"ロンボ語",rom:"ロマーニー語",root:"ルート",rtm:"ロツマ語",ru:"ロシア語",rue:"ルシン語",rug:"ロヴィアナ語",rup:"アルーマニア語",rw:"キニアルワンダ語",rwk:"ルワ語",sa:"サンスクリット語",sad:"サンダウェ語",sah:"サハ語",sam:"サマリア・アラム語",saq:"サンブル語",sas:"ササク語",sat:"サンターリー語",saz:"サウラーシュトラ語",sba:"ンガムバイ語",sbp:"サング語",sc:"サルデーニャ語",scn:"シチリア語",sco:"スコットランド語",sd:"シンド語",sdc:"サッサリ・サルデーニャ語",sdh:"南部クルド語",se:"北サーミ語",see:"セネカ語",seh:"セナ語",sei:"セリ語",sel:"セリクプ語",ses:"コイラボロ・センニ語",sg:"サンゴ語",sga:"古アイルランド語",sgs:"サモギティア語",sh:"セルボ・クロアチア語",shi:"タシルハイト語",shn:"シャン語",shu:"チャド・アラビア語",si:"シンハラ語",sid:"シダモ語",sk:"スロバキア語",sl:"スロベニア語",sli:"低シレジア語",sly:"スラヤール語",sm:"サモア語",sma:"南サーミ語",smj:"ルレ・サーミ語",smn:"イナリ・サーミ語",sms:"スコルト・サーミ語",sn:"ショナ語",snk:"ソニンケ語",so:"ソマリ語",sog:"ソグド語",sq:"アルバニア語",sr:"セルビア語",srn:"スリナム語",srr:"セレル語",ss:"スワジ語",ssy:"サホ語",st:"南部ソト語",stq:"ザーターフリジア語",su:"スンダ語",suk:"スクマ語",sus:"スス語",sux:"シュメール語",sv:"スウェーデン語",sw:"スワヒリ語","sw-CD":"コンゴ・スワヒリ語",swb:"コモロ語",syc:"古典シリア語",syr:"シリア語",szl:"シレジア語",ta:"タミル語",tcy:"トゥル語",te:"テルグ語",tem:"テムネ語",teo:"テソ語",ter:"テレーノ語",tet:"テトゥン語",tg:"タジク語",th:"タイ語",ti:"ティグリニア語",tig:"ティグレ語",tiv:"ティブ語",tk:"トルクメン語",tkl:"トケラウ語",tkr:"ツァフル語",tl:"タガログ語",tlh:"クリンゴン語",tli:"トリンギット語",tly:"タリシュ語",tmh:"タマシェク語",tn:"ツワナ語",to:"トンガ語",tog:"トンガ語(ニアサ)",tpi:"トク・ピシン語",tr:"トルコ語",tru:"トゥロヨ語",trv:"タロコ語",ts:"ツォンガ語",tsd:"ツァコン語",tsi:"チムシュ語",tt:"タタール語",ttt:"ムスリム・タタール語",tum:"トゥンブカ語",tvl:"ツバル語",tw:"トウィ語",twq:"タサワク語",ty:"タヒチ語",tyv:"トゥヴァ語",tzm:"中央アトラス・タマジクト語",udm:"ウドムルト語",ug:"ウイグル語",uga:"ウガリト語",uk:"ウクライナ語",umb:"ムブンドゥ語",ur:"ウルドゥー語",uz:"ウズベク語",vai:"ヴァイ語",ve:"ベンダ語",vec:"ヴェネト語",vep:"ヴェプス語",vi:"ベトナム語",vls:"西フラマン語",vmf:"マインフランク語",vo:"ヴォラピュク語",vot:"ヴォート語",vro:"ヴォロ語",vun:"ヴンジョ語",wa:"ワロン語",wae:"ヴァリス語",wal:"ウォライタ語",war:"ワライ語",was:"ワショ語",wbp:"ワルピリ語",wo:"ウォロフ語",wuu:"呉語",xal:"カルムイク語",xh:"コサ語",xmf:"メグレル語",xog:"ソガ語",yao:"ヤオ語",yap:"ヤップ語",yav:"ヤンベン語",ybb:"イエンバ語",yi:"イディッシュ語",yo:"ヨルバ語",yrl:"ニェエンガトゥ語",yue:"広東語",za:"チワン語",zap:"サポテカ語",zbl:"ブリスシンボル",zea:"ゼーラント語",zen:"ゼナガ語",zgh:"標準モロッコ タマジクト語",zh:"中国語","zh-Hans":"標準中国語 (簡体字)","zh-Hant":"標準中国語 (繁体字)",zu:"ズールー語",zun:"ズニ語",zza:"ザザ語"},scriptNames:{Cyrl:"キリル文字",Latn:"ラテン文字",Arab:"アラビア文字",Guru:"グルムキー文字",Tfng:"ティフナグ文字",Vaii:"ヴァイ文字",Hans:"簡体字",Hant:"繁体字"}},jv:{rtl:false,languageNames:{agq:"Aghem",ak:"Akan",am:"Amharik",ar:"Arab","ar-001":"Arab Standar Anyar",as:"Assam",asa:"Asu",ast:"Asturia",az:"Azerbaijan",bas:"Basaa",bem:"Bemba",bez:"Bena",bg:"Bulgaria",bm:"Bambara",bn:"Bengali",bo:"Tibet",br:"Breton",brx:"Bodo",ca:"Katala",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",chr:"Cherokee",ckb:"Kurdi Tengah",co:"Korsika",cs:"Ceska",cu:"Slavia Gerejani",cy:"Welsh",da:"Dansk",dav:"Taita",de:"Jérman","de-AT":"Jérman (Ostenrik)","de-CH":"Jérman (Switserlan)",dje:"Zarma",dsb:"Sorbia Non Standar",dua:"Duala",dyo:"Jola-Fonyi",dz:"Dzongkha",ebu:"Embu",ee:"Ewe",el:"Yunani",en:"Inggris","en-AU":"Inggris (Ostrali)","en-CA":"Inggris (Kanada)","en-GB":"Inggris (Karajan Manunggal)","en-US":"Inggris (Amérika Sarékat)",eo:"Esperanto",es:"Spanyol","es-419":"Spanyol (Amerika Latin)","es-ES":"Spanyol (Eropah)","es-MX":"Spanyol (Meksiko)",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Persia",ff:"Fulah",fi:"Suomi",fil:"Tagalog",fo:"Faroe",fr:"Prancis","fr-CA":"Prancis (Kanada)","fr-CH":"Prancis (Switserlan)",fur:"Friulian",fy:"Frisia Sisih Kulon",ga:"Irlandia",gd:"Gaulia",gl:"Galisia",gsw:"Jerman Swiss",gu:"Gujarat",guz:"Gusii",gv:"Manx",ha:"Hausa",haw:"Hawaii",he:"Ibrani",hi:"India",hmn:"Hmong",hr:"Kroasia",hsb:"Sorbia Standar",ht:"Kreol Haiti",hu:"Hungaria",hy:"Armenia",ia:"Interlingua",id:"Indonesia",ig:"Iqbo",ii:"Sichuan Yi",is:"Islandia",it:"Italia",ja:"Jepang",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kam:"Kamba",kde:"Makonde",kea:"Kabuverdianu",khq:"Koyra Chiini",ki:"Kikuyu",kk:"Kazakh",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kn:"Kannada",ko:"Korea",kok:"Konkani",ks:"Kashmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Colonia",ku:"Kurdis",kw:"Kernowek",ky:"Kirgis",la:"Latin",lag:"Langi",lb:"Luksemburg",lg:"Ganda",lkt:"Lakota",ln:"Lingala",lo:"Laos",lrc:"Luri Sisih Lor",lt:"Lithuania",lu:"Luba-Katanga",luo:"Luo",luy:"Luyia",lv:"Latvia",mas:"Masai",mer:"Meru",mfe:"Morisyen",mg:"Malagasi",mgh:"Makhuwa-Meeto",mgo:"Meta’",mi:"Maori",mk:"Makedonia",ml:"Malayalam",mn:"Mongolia",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",my:"Myanmar",mzn:"Mazanderani",naq:"Nama",nb:"Bokmål Norwegia",nd:"Ndebele Lor",nds:"Jerman Non Standar","nds-NL":"Jerman Non Standar (Walanda)",ne:"Nepal",nl:"Walanda","nl-BE":"Flemis",nmg:"Kwasio",nn:"Nynorsk Norwegia",nnh:"Ngiemboon",nus:"Nuer",ny:"Nyanja",nyn:"Nyankole",om:"Oromo",or:"Odia",os:"Ossetia",pa:"Punjab",pl:"Polandia",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis (Brasil)","pt-PT":"Portugis (Portugal)",qu:"Quechua",rm:"Roman",rn:"Rundi",ro:"Rumania","ro-MD":"Rumania (Moldova)",rof:"Rombo",ru:"Rusia",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskerta",sah:"Sakha",saq:"Samburu",sbp:"Sangu",sd:"Sindhi",se:"Sami Sisih Lor",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",shi:"Tachelhit",si:"Sinhala",sk:"Slowakia",sl:"Slovenia",sm:"Samoa",smn:"Inari Sami",sn:"Shona",so:"Somalia",sq:"Albania",sr:"Serbia",st:"Sotho Sisih Kidul",su:"Sunda",sv:"Swedia",sw:"Swahili","sw-CD":"Swahili (Kongo - Kinshasa)",ta:"Tamil",te:"Telugu",teo:"Teso",tg:"Tajik",th:"Thailand",ti:"Tigrinya",tk:"Turkmen",to:"Tonga",tr:"Turki",tt:"Tatar",twq:"Tasawaq",tzm:"Tamazight Atlas Tengah",ug:"Uighur",uk:"Ukraina",ur:"Urdu",uz:"Uzbek",vai:"Vai",vi:"Vietnam",vo:"Volapuk",vun:"Vunjo",wae:"Walser",wo:"Wolof",xh:"Xhosa",xog:"Soga",yav:"Yangben",yi:"Yiddish",yo:"Yoruba",yue:"Kanton",zgh:"Tamazight Moroko Standar",zh:"Tyonghwa","zh-Hans":"Tyonghwa Mandarin (Ringkes)","zh-Hant":"Tyonghwa Mandarin (Tradisional)",zu:"Zulu"},scriptNames:{Cyrl:"Sirilik",Latn:"Latin",Guru:"Gurmukhi",Hans:"Prasaja",Hant:"Tradhisional"}},km:{rtl:false,languageNames:{aa:"អាហ្វារ",ab:"អាប់ខាហ៊្សាន",ace:"អាកហ៊ីនឺស",ada:"អាដេងមី",ady:"អាឌីហ្គី",ae:"អាវេស្ថាន",af:"អាហ្វ្រិកាន",agq:"អាហ្គីម",ain:"អាយនូ",ak:"អាកាន",ale:"អាលូត",alt:"អាល់តៃខាងត្បូង",am:"អាំហារិក",an:"អារ៉ាហ្គោន",anp:"អាហ្គីកា",ar:"អារ៉ាប់","ar-001":"អារ៉ាប់ (ស្តង់ដារ)",arn:"ម៉ាពូឈី",arp:"អារ៉ាប៉ាហូ",as:"អាសាមីស",asa:"អាស៊ូ",ast:"អាស្ទូរី",av:"អាវ៉ារីក",awa:"អាវ៉ាឌី",ay:"អីម៉ារ៉ា",az:"អាស៊ែបៃហ្សង់",ba:"បាស្គៀ",ban:"បាលី",bas:"បាសា",be:"បេឡារុស",bem:"បេមបា",bez:"បេណា",bg:"ប៊ុលហ្គារី",bgn:"បាឡូជីខាងលិច",bho:"បូចពូរី",bi:"ប៊ីស្លាម៉ា",bin:"ប៊ីនី",bla:"ស៊ីកស៊ីកា",bm:"បាម្បារា",bn:"បង់ក្លាដែស",bo:"ទីបេ",br:"ប្រីស្តុន",brx:"បូដូ",bs:"បូស្នី",bug:"ប៊ុកហ្គី",byn:"ប្ល៊ីន",ca:"កាតាឡាន",ccp:"ចាក់ម៉ា",ce:"ឈីឆេន",ceb:"ស៊ីប៊ូអាណូ",cgg:"ឈីហ្គា",ch:"ឈីម៉ូរ៉ូ",chk:"ឈូគី",chm:"ម៉ារី",cho:"ឆុកតាវ",chr:"ឆេរូគី",chy:"ឈីយីនី",ckb:"ឃើដភាគកណ្តាល",co:"កូស៊ីខាន",crs:"សេសេលវ៉ាគ្រីអូល (បារាំង)",cs:"ឆែក",cu:"ឈឺជស្លាវិក",cv:"ឈូវ៉ាស",cy:"វេល",da:"ដាណឺម៉ាក",dak:"ដាកូតា",dar:"ដាចវ៉ា",dav:"តៃតា",de:"អាល្លឺម៉ង់","de-AT":"អាល្លឺម៉ង់ (អូទ្រីស)","de-CH":"អាល្លឺម៉ង់ (ស្វ៊ីស)",dgr:"ដូគ្រីប",dje:"ហ្សាម៉ា",dsb:"សូប៊ីក្រោម",dua:"ឌួលឡា",dv:"ទេវីហ៊ី",dyo:"ចូឡាហ៊្វុនយី",dz:"ដុងខា",dzg:"ដាហ្សាហ្គា",ebu:"អេមប៊ូ",ee:"អ៊ីវ",efi:"អ៊ីហ្វិក",eka:"អ៊ីកាជុក",el:"ក្រិក",en:"អង់គ្លេស","en-AU":"អង់គ្លេស (អូស្ត្រាលី)","en-CA":"អង់គ្លេស (កាណាដា)","en-GB":"អង់គ្លេស (ចក្រភព​អង់គ្លេស)","en-US":"អង់គ្លេស (សហរដ្ឋអាមេរិក)",eo:"អេស្ពេរ៉ាន់តូ",es:"អេស្ប៉ាញ","es-419":"អេស្ប៉ាញ (អាមេរិក​ឡាទីន)","es-ES":"អេស្ប៉ាញ (អ៊ឺរ៉ុប)","es-MX":"អេស្ប៉ាញ (ម៉ិកស៊ិក)",et:"អេស្តូនី",eu:"បាសខ៍",ewo:"អ៊ីវ៉ុនដូ",fa:"ភឺសៀន",ff:"ហ្វ៊ូឡា",fi:"ហ្វាំងឡង់",fil:"ហ្វីលីពីន",fj:"ហ៊្វីជី",fo:"ហ្វារូស",fon:"ហ្វ៊ុន",fr:"បារាំង","fr-CA":"បារាំង (កាណាដា)","fr-CH":"បារាំង (ស្វ៊ីស)",fur:"ហ៊្វ្រូលាន",fy:"ហ្វ្រីស៊ានខាងលិច",ga:"អៀរឡង់",gaa:"ហ្គា",gag:"កាគូស",gd:"ស្កុតហ្កែលិគ",gez:"ជីស",gil:"ហ្គីលបឺទ",gl:"ហ្គាលីស្យាន",gn:"ហ្គូរ៉ានី",gor:"ហ្គូរុនតាឡូ",gsw:"អាល្លឺម៉ង (ស្វីស)",gu:"ហ្កុយ៉ារាទី",guz:"ហ្គូស៊ី",gv:"មេន",gwi:"ហ្គីចឈីន",ha:"ហូសា",haw:"ហាវៃ",he:"ហេប្រឺ",hi:"ហិណ្ឌី",hil:"ហ៊ីលីហ្គេណុន",hmn:"ម៉ុង",hr:"ក្រូអាត",hsb:"សូប៊ីលើ",ht:"ហៃទី",hu:"ហុងគ្រី",hup:"ហ៊ូប៉ា",hy:"អាមេនី",hz:"ហឺរីរ៉ូ",ia:"អីនធើលីង",iba:"អ៊ីបាន",ibb:"អាយប៊ីប៊ីអូ",id:"ឥណ្ឌូណេស៊ី",ig:"អ៊ីកបូ",ii:"ស៊ីឈាន់យី",ilo:"អ៊ីឡូកូ",inh:"អ៊ិនហ្គូស",io:"អ៊ីដូ",is:"អ៊ីស្លង់",it:"អ៊ីតាលី",iu:"អ៊ីនុកទីទុត",ja:"ជប៉ុន",jbo:"លុចបាន",jgo:"ងុំបា",jmc:"ម៉ាឆាំ",jv:"ជ្វា",ka:"ហ្សក​ហ្ស៊ី",kab:"កាប៊ីឡេ",kac:"កាឈីន",kaj:"ជូ",kam:"កាំបា",kbd:"កាបាឌៀ",kcg:"យ៉ាប់",kde:"ម៉ាកូនដេ",kea:"កាប៊ូវឺឌៀនូ",kfo:"គូរូ",kha:"កាស៊ី",khq:"គុយរ៉ាឈីនី",ki:"គីគូយូ",kj:"គូនយ៉ាម៉ា",kk:"កាហ្សាក់",kkj:"កាកូ",kl:"កាឡាលលីស៊ុត",kln:"កាលែនជីន",km:"ខ្មែរ",kmb:"គីមប៊ុនឌូ",kn:"ខាណាដា",ko:"កូរ៉េ",koi:"គូមីភឹមយ៉ាគ",kok:"គុនកានី",kpe:"គ្លីប",kr:"កានូរី",krc:"ការ៉ាឆាយបាល់កា",krl:"ការីលា",kru:"គូរូក",ks:"កាស្មៀរ",ksb:"សាមបាឡា",ksf:"បាហ្វៀ",ksh:"កូឡូញ",ku:"ឃឺដ",kum:"គូមីគ",kv:"កូមី",kw:"កូនីស",ky:"​កៀហ្ស៊ីស",la:"ឡាតំាង",lad:"ឡាឌីណូ",lag:"ឡានហ្គី",lb:"លុចសំបួ",lez:"ឡេសហ្គី",lg:"ហ្គាន់ដា",li:"លីមប៊ូស",lkt:"ឡាកូតា",ln:"លីនកាឡា",lo:"ឡាវ",loz:"ឡូហ្ស៊ី",lrc:"លូរីខាងជើង",lt:"លីទុយអានី",lu:"លូបាកាតានហ្គា",lua:"លូបាលូឡា",lun:"លុនដា",luo:"លូអូ",lus:"មីហ្សូ",luy:"លូយ៉ា",lv:"ឡាតវី",mad:"ម៉ាឌូរីស",mag:"ម៉ាហ្គាហ៊ី",mai:"ម៉ៃធីលី",mak:"ម៉ាកាសា",mas:"ម៉ាសៃ",mdf:"មុខសា",men:"មេនឌី",mer:"មេរូ",mfe:"ម៉ូរីស៊ីន",mg:"ម៉ាឡាហ្គាស៊ី",mgh:"ម៉ាកគូវ៉ាមីតូ",mgo:"មេតា",mh:"ម៉ាស់សល",mi:"ម៉ោរី",mic:"មិកមេក",min:"មីណាងកាប៊ូ",mk:"ម៉ាសេដូនី",ml:"ម៉ាឡាយ៉ាឡាម",mn:"ម៉ុងហ្គោលី",mni:"ម៉ានីពូរី",moh:"ម៊ូហាគ",mos:"មូស៊ី",mr:"ម៉ារ៉ាធី",ms:"ម៉ាឡេ",mt:"ម៉ាល់តា",mua:"មុនដាង",mus:"គ្រីក",mwl:"មីរ៉ានដេស",my:"ភូមា",myv:"អឺហ្ស៊ីយ៉ា",mzn:"ម៉ាហ្សានដឺរេនី",na:"ណូរូ",nap:"នាប៉ូលីតាន",naq:"ណាម៉ា",nb:"ន័រវែស បុកម៉ាល់",nd:"នេបេលេខាងជើង",nds:"អាល្លឺម៉ង់ក្រោម","nds-NL":"ហ្សាក់ស្យុងក្រោម",ne:"នេប៉ាល់","new":"នេវ៉ាវី",ng:"នុនហ្គា",nia:"នីអាស",niu:"នូអៀន",nl:"ហូឡង់","nl-BE":"ផ្លាមីស",nmg:"ក្វាស្យូ",nn:"ន័រវែស នីនូស",nnh:"ងៀមប៊ូន",no:"ន័រវែស",nog:"ណូហ្គៃ",nqo:"នគោ",nr:"នេប៊េលខាងត្បូង",nso:"សូថូខាងជើង",nus:"នូអ័រ",nv:"ណាវ៉ាចូ",ny:"ណានចា",nyn:"ណានកូលេ",oc:"អូសីតាន់",om:"អូរ៉ូម៉ូ",or:"អូឌៀ",os:"អូស៊ីទិក",pa:"បឹនជាពិ",pag:"ភេនហ្គាស៊ីណាន",pam:"ផាមភេនហ្គា",pap:"ប៉ាប៉ៃមេនតូ",pau:"ប៉ាលូអាន",pcm:"ភាសាទំនាក់ទំនងនីហ្សេរីយ៉ា",pl:"ប៉ូឡូញ",prg:"ព្រូស៊ាន",ps:"បាស្តូ",pt:"ព័រទុយហ្គាល់","pt-BR":"ព័រទុយហ្គាល់ (ប្រេស៊ីល)","pt-PT":"ព័រទុយហ្គាល់ (អឺរ៉ុប)",qu:"ហ្គិកឈួ",quc:"គីចឈី",rap:"រ៉ាប៉ានូ",rar:"រ៉ារ៉ូតុងហ្គាន",rm:"រ៉ូម៉ង់",rn:"រុណ្ឌី",ro:"រូម៉ានី","ro-MD":"ម៉ុលដាវី",rof:"រុមបូ",root:"រូត",ru:"រុស្ស៊ី",rup:"អារ៉ូម៉ានី",rw:"គិនយ៉ាវ៉ាន់ដា",rwk:"រ៉្វា",sa:"សំស្ក្រឹត",sad:"សានដាវី",sah:"សាខា",saq:"សាមបូរូ",sat:"សាន់តាលី",sba:"ងាំបេយ",sbp:"សានហ្គូ",sc:"សាឌីនា",scn:"ស៊ីស៊ីលាន",sco:"ស្កុត",sd:"ស៊ីនឌី",sdh:"ឃើដភាគខាងត្បូង",se:"សាមីខាងជើង",seh:"ស៊ីណា",ses:"គុយរ៉ាបូរ៉ុស៊ីនី",sg:"សានហ្គោ",sh:"សឺបូក្រូអាត",shi:"តាឈីលហ៊ីត",shn:"សាន",si:"ស្រីលង្កា",sk:"ស្លូវ៉ាគី",sl:"ស្លូវ៉ានី",sm:"សាម័រ",sma:"សាមីខាងត្បូង",smj:"លូលីសាមី",smn:"អ៊ីណារីសាម៉ី",sms:"ស្កុលសាមី",sn:"សូណា",snk:"សូនីនគេ",so:"សូម៉ាលី",sq:"អាល់បានី",sr:"ស៊ែប",srn:"ស្រាណានតុងហ្គោ",ss:"ស្វាទី",ssy:"សាហូ",st:"សូថូខាងត្បូង",su:"ស៊ូដង់",suk:"ស៊ូគូម៉ា",sv:"ស៊ុយអែត",sw:"ស្វាហ៊ីលី","sw-CD":"កុងហ្គោស្វាហ៊ីលី",swb:"កូម៉ូរី",syr:"ស៊ីរី",ta:"តាមីល",te:"តេលុគុ",tem:"ធីមនី",teo:"តេសូ",tet:"ទីទុំ",tg:"តាហ្ស៊ីគ",th:"ថៃ",ti:"ទីហ្គ្រីញ៉ា",tig:"ធីហ្គ្រា",tk:"តួកម៉េន",tlh:"ឃ្លីនហ្គុន",tn:"ស្វាណា",to:"តុងហ្គា",tpi:"ថុកពីស៊ីន",tr:"ទួរគី",trv:"តារ៉ូកូ",ts:"សុងហ្គា",tt:"តាតា",tum:"ទុមប៊ូកា",tvl:"ទូវ៉ាលូ",tw:"ទ្វី",twq:"តាសាវ៉ាក់",ty:"តាហ៊ីទី",tyv:"ទូវីនៀ",tzm:"តាម៉ាសាយអាត្លាសកណ្តាល",udm:"អាត់មូដ",ug:"អ៊ុយហ្គឺរ",uk:"អ៊ុយក្រែន",umb:"អាម់ប៊ុនឌូ",ur:"អ៊ូរឌូ",uz:"អ៊ូសបេគ",vai:"វៃ",ve:"វេនដា",vi:"វៀតណាម",vo:"វូឡាពូក",vun:"វុនចូ",wa:"វ៉ាលូន",wae:"វេលសឺ",wal:"វ៉ូឡាយតា",war:"វ៉ារេយ",wbp:"វ៉ារីប៉ារី",wo:"វូឡុហ្វ",xal:"កាលមីគ",xh:"ឃសា",xog:"សូហ្គា",yav:"យ៉ាងបេន",ybb:"យេមបា",yi:"យ៉ីឌីស",yo:"យរូបា",yue:"កន្តាំង",za:"ហ្សួង",zgh:"តាម៉ាហ្សៃម៉ារ៉ុកស្តង់ដា",zh:"ចិន","zh-Hans":"ចិនកុកងឺ (អក្សរ​កាត់)","zh-Hant":"ចិនកុកងឺ (អក្សរ​ពុម្ព)",zu:"ហ្សូលូ",zun:"ហ្សូនី",zza:"ហ្សាហ្សា"},scriptNames:{Cyrl:"ស៊ីរីលីក",Latn:"ឡាតាំង",Arab:"អារ៉ាប់",Guru:"កុមុយឃី",Hans:"អក្សរ​ចិន​កាត់",Hant:"អក្សរ​ចិន​ពេញ"}},kn:{rtl:false,languageNames:{aa:"ಅಫಾರ್",ab:"ಅಬ್ಖಾಜಿಯನ್",ace:"ಅಛಿನೀಸ್",ach:"ಅಕೋಲಿ",ada:"ಅಡಂಗ್ಮೆ",ady:"ಅಡೈಘೆ",ae:"ಅವೆಸ್ಟನ್",af:"ಆಫ್ರಿಕಾನ್ಸ್",afh:"ಆಫ್ರಿಹಿಲಿ",agq:"ಅಘೆಮ್",ain:"ಐನು",ak:"ಅಕಾನ್",akk:"ಅಕ್ಕಾಡಿಯನ್",ale:"ಅಲೆಯುಟ್",alt:"ದಕ್ಷಿಣ ಅಲ್ಟಾಯ್",am:"ಅಂಹರಿಕ್",an:"ಅರಗೊನೀಸ್",ang:"ಪ್ರಾಚೀನ ಇಂಗ್ಲೀಷ್",anp:"ಆಂಗಿಕಾ",ar:"ಅರೇಬಿಕ್","ar-001":"ಆಧುನಿಕ ಪ್ರಮಾಣಿತ ಅರೇಬಿಕ್",arc:"ಅರಾಮಿಕ್",arn:"ಮಪುಚೆ",arp:"ಅರಪಾಹೋ",arw:"ಅರಾವಾಕ್",as:"ಅಸ್ಸಾಮೀಸ್",asa:"ಅಸು",ast:"ಆಸ್ಟುರಿಯನ್",av:"ಅವರಿಕ್",awa:"ಅವಧಿ",ay:"ಅಯ್ಮಾರಾ",az:"ಅಜೆರ್ಬೈಜಾನಿ",ba:"ಬಶ್ಕಿರ್",bal:"ಬಲೂಚಿ",ban:"ಬಲಿನೀಸ್",bas:"ಬಸಾ",be:"ಬೆಲರೂಸಿಯನ್",bej:"ಬೇಜಾ",bem:"ಬೆಂಬಾ",bez:"ಬೆನ",bg:"ಬಲ್ಗೇರಿಯನ್",bgn:"ಪಶ್ಚಿಮ ಬಲೊಚಿ",bho:"ಭೋಜಪುರಿ",bi:"ಬಿಸ್ಲಾಮಾ",bik:"ಬಿಕೊಲ್",bin:"ಬಿನಿ",bla:"ಸಿಕ್ಸಿಕಾ",bm:"ಬಂಬಾರಾ",bn:"ಬಾಂಗ್ಲಾ",bo:"ಟಿಬೇಟಿಯನ್",br:"ಬ್ರೆಟನ್",bra:"ಬ್ರಜ್",brx:"ಬೋಡೊ",bs:"ಬೋಸ್ನಿಯನ್",bua:"ಬುರಿಯಟ್",bug:"ಬುಗಿನೀಸ್",byn:"ಬ್ಲಿನ್",ca:"ಕೆಟಲಾನ್",cad:"ಕ್ಯಾಡ್ಡೋ",car:"ಕಾರಿಬ್",cch:"ಅಟ್ಸಮ್",ccp:"ಚಕ್ಮಾ",ce:"ಚೆಚನ್",ceb:"ಸೆಬುವಾನೊ",cgg:"ಚಿಗಾ",ch:"ಕಮೊರೊ",chb:"ಚಿಬ್ಚಾ",chg:"ಚಗಟಾಯ್",chk:"ಚೂಕಿಸೆ",chm:"ಮಾರಿ",chn:"ಚಿನೂಕ್ ಜಾರ್ಗೋನ್",cho:"ಚೋಕ್ಟಾವ್",chp:"ಚಿಪೆವ್ಯಾನ್",chr:"ಚೆರೋಕಿ",chy:"ಚೀಯೆನ್ನೇ",ckb:"ಮಧ್ಯ ಕುರ್ದಿಶ್",co:"ಕೋರ್ಸಿಕನ್",cop:"ಕೊಪ್ಟಿಕ್",cr:"ಕ್ರೀ",crh:"ಕ್ರಿಮೀಯನ್ ಟರ್ಕಿಷ್",crs:"ಸೆಸೆಲ್ವಾ ಕ್ರಯೋಲ್ ಫ್ರೆಂಚ್",cs:"ಜೆಕ್",csb:"ಕಶುಬಿಯನ್",cu:"ಚರ್ಚ್ ಸ್ಲಾವಿಕ್",cv:"ಚುವಾಶ್",cy:"ವೆಲ್ಶ್",da:"ಡ್ಯಾನಿಶ್",dak:"ಡಕೋಟಾ",dar:"ದರ್ಗ್ವಾ",dav:"ಟೈಟ",de:"ಜರ್ಮನ್","de-AT":"ಆಸ್ಟ್ರಿಯನ್ ಜರ್ಮನ್","de-CH":"ಸ್ವಿಸ್ ಹೈ ಜರ್ಮನ್",del:"ಡೆಲಾವೇರ್",den:"ಸ್ಲೇವ್",dgr:"ಡೋಗ್ರಿಬ್",din:"ಡಿಂಕಾ",dje:"ಜರ್ಮಾ",doi:"ಡೋಗ್ರಿ",dsb:"ಲೋವರ್ ಸರ್ಬಿಯನ್",dua:"ಡುವಾಲಾ",dum:"ಮಧ್ಯ ಡಚ್",dv:"ದಿವೆಹಿ",dyo:"ಜೊಲ-ಫೊನ್ಯಿ",dyu:"ಡ್ಯೂಲಾ",dz:"ಜೋಂಗ್‌ಖಾ",dzg:"ಡಜಾಗ",ebu:"ಎಂಬು",ee:"ಈವ್",efi:"ಎಫಿಕ್",egy:"ಪ್ರಾಚೀನ ಈಜಿಪ್ಟಿಯನ್",eka:"ಎಕಾಜುಕ್",el:"ಗ್ರೀಕ್",elx:"ಎಲಾಮೈಟ್",en:"ಇಂಗ್ಲಿಷ್","en-AU":"ಆಸ್ಟ್ರೇಲಿಯನ್ ಇಂಗ್ಲಿಷ್","en-CA":"ಕೆನೆಡಿಯನ್ ಇಂಗ್ಲಿಷ್","en-GB":"ಬ್ರಿಟಿಷ್ ಇಂಗ್ಲಿಷ್","en-US":"ಅಮೆರಿಕನ್ ಇಂಗ್ಲಿಷ್",enm:"ಮಧ್ಯ ಇಂಗ್ಲೀಷ್",eo:"ಎಸ್ಪೆರಾಂಟೊ",es:"ಸ್ಪ್ಯಾನಿಷ್","es-419":"ಲ್ಯಾಟಿನ್ ಅಮೇರಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್","es-ES":"ಯುರೋಪಿಯನ್ ಸ್ಪ್ಯಾನಿಷ್","es-MX":"ಮೆಕ್ಸಿಕನ್ ಸ್ಪ್ಯಾನಿಷ್",et:"ಎಸ್ಟೊನಿಯನ್",eu:"ಬಾಸ್ಕ್",ewo:"ಇವಾಂಡೋ",fa:"ಪರ್ಶಿಯನ್",fan:"ಫಾಂಗ್",fat:"ಫಾಂಟಿ",ff:"ಫುಲಾ",fi:"ಫಿನ್ನಿಶ್",fil:"ಫಿಲಿಪಿನೊ",fj:"ಫಿಜಿಯನ್",fo:"ಫರೋಸಿ",fon:"ಫೋನ್",fr:"ಫ್ರೆಂಚ್","fr-CA":"ಕೆನೆಡಿಯನ್ ಫ್ರೆಂಚ್","fr-CH":"ಸ್ವಿಸ್ ಫ್ರೆಂಚ್",frc:"ಕಾಜುನ್ ಫ್ರೆಂಚ್",frm:"ಮಧ್ಯ ಫ್ರೆಂಚ್",fro:"ಪ್ರಾಚೀನ ಫ್ರೆಂಚ್",frr:"ಉತ್ತರ ಫ್ರಿಸಿಯನ್",frs:"ಪೂರ್ವ ಫ್ರಿಸಿಯನ್",fur:"ಫ್ರಿಯುಲಿಯನ್",fy:"ಪಶ್ಚಿಮ ಫ್ರಿಸಿಯನ್",ga:"ಐರಿಷ್",gaa:"ಗ",gag:"ಗಗೌಜ್",gan:"ಗಾನ್ ಚೀನೀಸ್",gay:"ಗಾಯೋ",gba:"ಗ್ಬಾಯಾ",gd:"ಸ್ಕಾಟಿಶ್ ಗೆಲಿಕ್",gez:"ಗೀಝ್",gil:"ಗಿಲ್ಬರ್ಟೀಸ್",gl:"ಗ್ಯಾಲಿಶಿಯನ್",gmh:"ಮಧ್ಯ ಹೈ ಜರ್ಮನ್",gn:"ಗೌರಾನಿ",goh:"ಪ್ರಾಚೀನ ಹೈ ಜರ್ಮನ್",gon:"ಗೊಂಡಿ",gor:"ಗೊರೊಂಟಾಲೋ",got:"ಗೋಥಿಕ್",grb:"ಗ್ರೇಬೋ",grc:"ಪ್ರಾಚೀನ ಗ್ರೀಕ್",gsw:"ಸ್ವಿಸ್ ಜರ್ಮನ್",gu:"ಗುಜರಾತಿ",guz:"ಗುಸಿ",gv:"ಮ್ಯಾಂಕ್ಸ್",gwi:"ಗ್ವಿಚ್‌ಇನ್",ha:"ಹೌಸಾ",hai:"ಹೈಡಾ",hak:"ಹಕ್",haw:"ಹವಾಯಿಯನ್",he:"ಹೀಬ್ರೂ",hi:"ಹಿಂದಿ",hil:"ಹಿಲಿಗೇನನ್",hit:"ಹಿಟ್ಟಿಟೆ",hmn:"ಮೋಂಗ್",ho:"ಹಿರಿ ಮೊಟು",hr:"ಕ್ರೊಯೇಶಿಯನ್",hsb:"ಅಪ್ಪರ್ ಸರ್ಬಿಯನ್",hsn:"ಶಯಾಂಗ್ ಚೀನೀಸೇ",ht:"ಹೈಟಿಯನ್ ಕ್ರಿಯೋಲಿ",hu:"ಹಂಗೇರಿಯನ್",hup:"ಹೂಪಾ",hy:"ಅರ್ಮೇನಿಯನ್",hz:"ಹೆರೆರೊ",ia:"ಇಂಟರ್‌ಲಿಂಗ್ವಾ",iba:"ಇಬಾನ್",ibb:"ಇಬಿಬಿಯೋ",id:"ಇಂಡೋನೇಶಿಯನ್",ie:"ಇಂಟರ್ಲಿಂಗ್",ig:"ಇಗ್ಬೊ",ii:"ಸಿಚುಅನ್ ಯಿ",ik:"ಇನುಪಿಯಾಕ್",ilo:"ಇಲ್ಲಿಕೋ",inh:"ಇಂಗುಷ್",io:"ಇಡೊ",is:"ಐಸ್‌ಲ್ಯಾಂಡಿಕ್",it:"ಇಟಾಲಿಯನ್",iu:"ಇನುಕ್ಟಿಟುಟ್",ja:"ಜಾಪನೀಸ್",jbo:"ಲೊಜ್ಬಾನ್",jgo:"ನೊಂಬಾ",jmc:"ಮ್ಯಕಮೆ",jpr:"ಜೂಡಿಯೋ-ಪರ್ಶಿಯನ್",jrb:"ಜೂಡಿಯೋ-ಅರೇಬಿಕ್",jv:"ಜಾವಾನೀಸ್",ka:"ಜಾರ್ಜಿಯನ್",kaa:"ಕಾರಾ-ಕಲ್ಪಾಕ್",kab:"ಕಬೈಲ್",kac:"ಕಚಿನ್",kaj:"ಜ್ಜು",kam:"ಕಂಬಾ",kaw:"ಕಾವಿ",kbd:"ಕಬರ್ಡಿಯನ್",kcg:"ಟ್ಯಾಪ್",kde:"ಮ್ಯಾಕೊಂಡ್",kea:"ಕಬುವೆರ್ಡಿಯನು",kfo:"ಕೋರೋ",kg:"ಕಾಂಗೋ",kha:"ಖಾಸಿ",kho:"ಖೋಟಾನೀಸ್",khq:"ಕೊಯ್ರ ಚೀನಿ",ki:"ಕಿಕುಯು",kj:"ಕ್ವಾನ್‌ಯಾಮಾ",kk:"ಕಝಕ್",kkj:"ಕಾಕೊ",kl:"ಕಲಾಲ್ಲಿಸುಟ್",kln:"ಕಲೆಂಜಿನ್",km:"ಖಮೇರ್",kmb:"ಕಿಂಬುಂಡು",kn:"ಕನ್ನಡ",ko:"ಕೊರಿಯನ್",koi:"ಕೋಮಿ-ಪರ್ಮ್ಯಕ್",kok:"ಕೊಂಕಣಿ",kos:"ಕೊಸರಿಯನ್",kpe:"ಕಪೆಲ್ಲೆ",kr:"ಕನುರಿ",krc:"ಕರಚಯ್-ಬಲ್ಕಾರ್",krl:"ಕರೇಲಿಯನ್",kru:"ಕುರುಖ್",ks:"ಕಾಶ್ಮೀರಿ",ksb:"ಶಂಬಲ",ksf:"ಬಫಿಯ",ksh:"ಕಲೊಗ್ನಿಯನ್",ku:"ಕುರ್ದಿಷ್",kum:"ಕುಮೈಕ್",kut:"ಕುಟೇನಾಯ್",kv:"ಕೋಮಿ",kw:"ಕಾರ್ನಿಷ್",ky:"ಕಿರ್ಗಿಜ್",la:"ಲ್ಯಾಟಿನ್",lad:"ಲ್ಯಾಡಿನೋ",lag:"ಲಾಂಗಿ",lah:"ಲಹಂಡಾ",lam:"ಲಂಬಾ",lb:"ಲಕ್ಸಂಬರ್ಗಿಷ್",lez:"ಲೆಜ್ಘಿಯನ್",lg:"ಗಾಂಡಾ",li:"ಲಿಂಬರ್ಗಿಶ್",lkt:"ಲಕೊಟ",ln:"ಲಿಂಗಾಲ",lo:"ಲಾವೋ",lol:"ಮೊಂಗೋ",lou:"ಲೂಯಿಸಿಯಾನ ಕ್ರಿಯೋಲ್",loz:"ಲೋಝಿ",lrc:"ಉತ್ತರ ಲೂರಿ",lt:"ಲಿಥುವೇನಿಯನ್",lu:"ಲೂಬಾ-ಕಟಾಂಗಾ",lua:"ಲುಬ-ಲುಲಾ",lui:"ಲೂಯಿಸೆನೋ",lun:"ಲುಂಡಾ",luo:"ಲುವೋ",lus:"ಮಿಝೋ",luy:"ಲುಯಿಯ",lv:"ಲಾಟ್ವಿಯನ್",mad:"ಮದುರೀಸ್",mag:"ಮಗಾಹಿ",mai:"ಮೈಥಿಲಿ",mak:"ಮಕಾಸರ್",man:"ಮಂಡಿಂಗೊ",mas:"ಮಸಾಯ್",mdf:"ಮೋಕ್ಷ",mdr:"ಮಂದಾರ್",men:"ಮೆಂಡೆ",mer:"ಮೆರು",mfe:"ಮೊರಿಸನ್",mg:"ಮಲಗಾಸಿ",mga:"ಮಧ್ಯ ಐರಿಷ್",mgh:"ಮ್ಯಖುವಾ- ಮೀಟ್ಟೊ",mgo:"ಮೆಟಾ",mh:"ಮಾರ್ಶಲ್ಲೀಸ್",mi:"ಮಾವೋರಿ",mic:"ಮಿಕ್‌ಮ್ಯಾಕ್",min:"ಮಿನಂಗ್‌ಕಬಾವು",mk:"ಮೆಸಿಡೋನಿಯನ್",ml:"ಮಲಯಾಳಂ",mn:"ಮಂಗೋಲಿಯನ್",mnc:"ಮಂಚು",mni:"ಮಣಿಪುರಿ",moh:"ಮೊಹಾವ್ಕ್",mos:"ಮೊಸ್ಸಿ",mr:"ಮರಾಠಿ",ms:"ಮಲಯ್",mt:"ಮಾಲ್ಟೀಸ್",mua:"ಮುಂಡಂಗ್",mus:"ಕ್ರೀಕ್",mwl:"ಮಿರಾಂಡೀಸ್",mwr:"ಮಾರ್ವಾಡಿ",my:"ಬರ್ಮೀಸ್",myv:"ಎರ್ಝ್ಯಾ",mzn:"ಮಜಂದೆರಾನಿ",na:"ನೌರು",nan:"ನಾನ್",nap:"ನಿಯಾಪೊಲಿಟನ್",naq:"ನಮ",nb:"ನಾರ್ವೆಜಿಯನ್ ಬೊಕ್ಮಲ್",nd:"ಉತ್ತರ ದೆಬೆಲೆ",nds:"ಲೋ ಜರ್ಮನ್","nds-NL":"ಲೋ ಸ್ಯಾಕ್ಸನ್",ne:"ನೇಪಾಳಿ","new":"ನೇವಾರೀ",ng:"ಡೋಂಗಾ",nia:"ನಿಯಾಸ್",niu:"ನಿಯುವನ್",nl:"ಡಚ್","nl-BE":"ಫ್ಲೆಮಿಷ್",nmg:"ಖ್ವಾಸಿಯೊ",nn:"ನಾರ್ವೇಜಿಯನ್ ನೈನಾರ್ಸ್ಕ್",nnh:"ನಿಂಬೂನ್",no:"ನಾರ್ವೇಜಿಯನ್",nog:"ನೊಗಾಯ್",non:"ಪ್ರಾಚೀನ ನೋರ್ಸ್",nqo:"ಎನ್‌ಕೋ",nr:"ದಕ್ಷಿಣ ದೆಬೆಲೆ",nso:"ಉತ್ತರ ಸೋಥೋ",nus:"ನೂಯರ್",nv:"ನವಾಜೊ",nwc:"ಶಾಸ್ತ್ರೀಯ ನೇವಾರಿ",ny:"ನ್ಯಾಂಜಾ",nym:"ನ್ಯಾಮ್‌ವೆಂಜಿ",nyn:"ನ್ಯಾನ್‌ಕೋಲೆ",nyo:"ನ್ಯೋರೋ",nzi:"ಜೀಮಾ",oc:"ಒಸಿಟನ್",oj:"ಒಜಿಬ್ವಾ",om:"ಒರೊಮೊ",or:"ಒಡಿಯ",os:"ಒಸ್ಸೆಟಿಕ್",osa:"ಓಸಾಜ್",ota:"ಒಟ್ಟೋಮನ್ ತುರ್ಕಿಷ್",pa:"ಪಂಜಾಬಿ",pag:"ಪಂಗಾಸಿನನ್",pal:"ಪಹ್ಲವಿ",pam:"ಪಂಪಾಂಗಾ",pap:"ಪಪಿಯಾಮೆಂಟೊ",pau:"ಪಲುಆನ್",pcm:"ನೈಜೀರಿಯನ್ ಪಿಡ್ಗಿನ್",peo:"ಪ್ರಾಚೀನ ಪರ್ಶಿಯನ್",phn:"ಫೀನಿಷಿಯನ್",pi:"ಪಾಲಿ",pl:"ಪೊಲಿಶ್",pon:"ಪೋನ್‌‌ಪಿಯನ್",prg:"ಪ್ರಶಿಯನ್",pro:"ಪ್ರಾಚೀನ ಪ್ರೊವೆನ್ಶಿಯಲ್",ps:"ಪಾಷ್ಟೋ",pt:"ಪೋರ್ಚುಗೀಸ್","pt-BR":"ಬ್ರೆಜಿಲಿಯನ್ ಪೋರ್ಚುಗೀಸ್","pt-PT":"ಯೂರೋಪಿಯನ್ ಪೋರ್ಚುಗೀಸ್",qu:"ಕ್ವೆಚುವಾ",quc:"ಕಿಷೆ",raj:"ರಾಜಸ್ಥಾನಿ",rap:"ರಾಪಾನುಯಿ",rar:"ರಾರೋಟೊಂಗನ್",rm:"ರೊಮಾನ್ಶ್",rn:"ರುಂಡಿ",ro:"ರೊಮೇನಿಯನ್","ro-MD":"ಮಾಲ್ಡೇವಿಯನ್",rof:"ರೊಂಬೊ",rom:"ರೋಮಾನಿ",root:"ರೂಟ್",ru:"ರಷ್ಯನ್",rup:"ಅರೋಮಾನಿಯನ್",rw:"ಕಿನ್ಯಾರ್‌ವಾಂಡಾ",rwk:"ರುವ",sa:"ಸಂಸ್ಕೃತ",sad:"ಸಂಡಾವೇ",sah:"ಸಖಾ",sam:"ಸಮರಿಟನ್ ಅರಾಮಿಕ್",saq:"ಸಂಬುರು",sas:"ಸಸಾಕ್",sat:"ಸಂತಾಲಿ",sba:"ನಂಬೇ",sbp:"ಸಂಗು",sc:"ಸರ್ಡೀನಿಯನ್",scn:"ಸಿಸಿಲಿಯನ್",sco:"ಸ್ಕೋಟ್ಸ್",sd:"ಸಿಂಧಿ",sdh:"ದಕ್ಷಿಣ ಕುರ್ದಿಶ್",se:"ಉತ್ತರ ಸಾಮಿ",seh:"ಸೆನ",sel:"ಸೆಲ್ಕಪ್",ses:"ಕೊಯ್ರಬೊರೊ ಸೆನ್ನಿ",sg:"ಸಾಂಗೋ",sga:"ಪ್ರಾಚೀನ ಐರಿಷ್",sh:"ಸರ್ಬೋ-ಕ್ರೊಯೇಶಿಯನ್",shi:"ಟಷೆಲ್‍ಹಿಟ್",shn:"ಶಾನ್",si:"ಸಿಂಹಳ",sid:"ಸಿಡಾಮೋ",sk:"ಸ್ಲೋವಾಕ್",sl:"ಸ್ಲೋವೇನಿಯನ್",sm:"ಸಮೋವನ್",sma:"ದಕ್ಷಿಣ ಸಾಮಿ",smj:"ಲೂಲ್ ಸಾಮಿ",smn:"ಇನಾರಿ ಸಮೀ",sms:"ಸ್ಕೋಟ್ ಸಾಮಿ",sn:"ಶೋನಾ",snk:"ಸೋನಿಂಕೆ",so:"ಸೊಮಾಲಿ",sog:"ಸೋಗ್ಡಿಯನ್",sq:"ಅಲ್ಬೇನಿಯನ್",sr:"ಸೆರ್ಬಿಯನ್",srn:"ಸ್ರಾನನ್ ಟೋಂಗೋ",srr:"ಸೇರೇರ್",ss:"ಸ್ವಾತಿ",ssy:"ಸಹೊ",st:"ದಕ್ಷಿಣ ಸೋಥೋ",su:"ಸುಂಡಾನೀಸ್",suk:"ಸುಕುಮಾ",sus:"ಸುಸು",sux:"ಸುಮೇರಿಯನ್",sv:"ಸ್ವೀಡಿಷ್",sw:"ಸ್ವಹಿಲಿ","sw-CD":"ಕಾಂಗೊ ಸ್ವಹಿಲಿ",swb:"ಕೊಮೊರಿಯನ್",syc:"ಶಾಸ್ತ್ರೀಯ ಸಿರಿಯಕ್",syr:"ಸಿರಿಯಾಕ್",ta:"ತಮಿಳು",te:"ತೆಲುಗು",tem:"ಟಿಮ್ನೆ",teo:"ಟೆಸೊ",ter:"ಟೆರೆನೋ",tet:"ಟೇಟಮ್",tg:"ತಾಜಿಕ್",th:"ಥಾಯ್",ti:"ಟಿಗ್ರಿನ್ಯಾ",tig:"ಟೈಗ್ರೆ",tiv:"ಟಿವ್",tk:"ಟರ್ಕ್‌ಮೆನ್",tkl:"ಟೊಕೆಲಾವ್",tl:"ಟ್ಯಾಗಲೋಗ್",tlh:"ಕ್ಲಿಂಗನ್",tli:"ಟ್ಲಿಂಗಿಟ್",tmh:"ಟಮಾಷೆಕ್",tn:"ಸ್ವಾನಾ",to:"ಟೋಂಗನ್",tog:"ನ್ಯಾಸಾ ಟೋಂಗಾ",tpi:"ಟೋಕ್ ಪಿಸಿನ್",tr:"ಟರ್ಕಿಶ್",trv:"ಟರೊಕೊ",ts:"ಸೋಂಗಾ",tsi:"ಸಿಂಶಿಯನ್",tt:"ಟಾಟರ್",tum:"ತುಂಬುಕಾ",tvl:"ಟುವಾಲು",tw:"ಟ್ವಿ",twq:"ಟಸವಕ್",ty:"ಟಹೀಟಿಯನ್",tyv:"ಟುವಿನಿಯನ್",tzm:"ಮಧ್ಯ ಅಟ್ಲಾಸ್ ಟಮಜೈಟ್",udm:"ಉಡ್‌ಮುರ್ಟ್",ug:"ಉಯಿಘರ್",uga:"ಉಗಾರಿಟಿಕ್",uk:"ಉಕ್ರೇನಿಯನ್",umb:"ಉಂಬುಂಡು",ur:"ಉರ್ದು",uz:"ಉಜ್ಬೇಕ್",vai:"ವಾಯಿ",ve:"ವೆಂಡಾ",vi:"ವಿಯೆಟ್ನಾಮೀಸ್",vo:"ವೋಲಾಪುಕ್",vot:"ವೋಟಿಕ್",vun:"ವುಂಜೊ",wa:"ವಾಲೂನ್",wae:"ವಾಲ್ಸರ್",wal:"ವಲಾಯ್ತಾ",war:"ವರಾಯ್",was:"ವಾಷೋ",wbp:"ವಾರ್ಲ್‌ಪಿರಿ",wo:"ವೋಲೋಫ್",wuu:"ವು",xal:"ಕಲ್ಮೈಕ್",xh:"ಕ್ಸೋಸ",xog:"ಸೊಗ",yao:"ಯಾವೊ",yap:"ಯಪೀಸೆ",yav:"ಯಾಂಗ್ಬೆನ್",ybb:"ಯೆಂಬಾ",yi:"ಯಿಡ್ಡಿಶ್",yo:"ಯೊರುಬಾ",yue:"ಕ್ಯಾಂಟನೀಸ್",za:"ಝೂವಾಂಗ್",zap:"ಝೋಪೊಟೆಕ್",zbl:"ಬ್ಲಿಸ್ಸಿಂಬಲ್ಸ್",zen:"ಝೆನಾಗಾ",zgh:"ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಮೊರೊಕ್ಕನ್ ಟಮಜೈಟ್",zh:"ಚೈನೀಸ್","zh-Hans":"ಚೈನೀಸ್ (ಸರಳೀಕೃತ)","zh-Hant":"ಸಾಂಪ್ರದಾಯಿಕ ಮ್ಯಾಂಡರಿನ್ ಚೈನೀಸ್",zu:"ಜುಲು",zun:"ಝೂನಿ",zza:"ಜಾಝಾ"},scriptNames:{Cyrl:"ಸಿರಿಲಿಕ್",Latn:"ಲ್ಯಾಟಿನ್",Arab:"ಅರೇಬಿಕ್",Guru:"ಗುರ್ಮುಖಿ",Tfng:"ಟಿಫಿನಾಘ್",Vaii:"ವಾಯ್",Hans:"ಸರಳೀಕೃತ",Hant:"ಸಾಂಪ್ರದಾಯಿಕ"}},ko:{rtl:false,languageNames:{aa:"아파르어",ab:"압카즈어",ace:"아체어",ach:"아콜리어",ada:"아당메어",ady:"아디게어",ae:"아베스타어",aeb:"튀니지 아랍어",af:"아프리칸스어",afh:"아프리힐리어",agq:"아그햄어",ain:"아이누어",ak:"아칸어",akk:"아카드어",ale:"알류트어",alt:"남부 알타이어",am:"암하라어",an:"아라곤어",ang:"고대 영어",anp:"앙가어",ar:"아랍어","ar-001":"현대 표준 아랍어",arc:"아람어",arn:"마푸둥군어",arp:"아라파호어",arq:"알제리 아랍어",ars:"아랍어(나즈디)",arw:"아라와크어",ary:"모로코 아랍어",arz:"이집트 아랍어",as:"아삼어",asa:"아수어",ast:"아스투리아어",av:"아바릭어",awa:"아와히어",ay:"아이마라어",az:"아제르바이잔어",ba:"바슈키르어",bal:"발루치어",ban:"발리어",bas:"바사어",bax:"바문어",bbj:"고말라어",be:"벨라루스어",bej:"베자어",bem:"벰바어",bez:"베나어",bfd:"바푸트어",bg:"불가리아어",bgn:"서부 발로치어",bho:"호즈푸리어",bi:"비슬라마어",bik:"비콜어",bin:"비니어",bkm:"콤어",bla:"식시카어",bm:"밤바라어",bn:"벵골어",bo:"티베트어",br:"브르타뉴어",bra:"브라지어",brh:"브라후이어",brx:"보도어",bs:"보스니아어",bss:"아쿠즈어",bua:"부리아타",bug:"부기어",bum:"불루어",byn:"브린어",byv:"메둠바어",ca:"카탈로니아어",cad:"카도어",car:"카리브어",cay:"카유가어",cch:"앗삼어",ccp:"차크마어",ce:"체첸어",ceb:"세부아노어",cgg:"치가어",ch:"차모로어",chb:"치브차어",chg:"차가타이어",chk:"추크어",chm:"마리어",chn:"치누크 자곤",cho:"촉토어",chp:"치페우얀",chr:"체로키어",chy:"샤이엔어",ckb:"소라니 쿠르드어",co:"코르시카어",cop:"콥트어",cr:"크리어",crh:"크리민 터키어; 크리민 타타르어",crs:"세이셸 크리올 프랑스어",cs:"체코어",csb:"카슈비아어",cu:"교회 슬라브어",cv:"추바시어",cy:"웨일스어",da:"덴마크어",dak:"다코타어",dar:"다르그와어",dav:"타이타어",de:"독일어","de-AT":"독일어(오스트리아)","de-CH":"고지 독일어(스위스)",del:"델라웨어어",den:"슬라브어",dgr:"도그리브어",din:"딩카어",dje:"자르마어",doi:"도그리어",dsb:"저지 소르비아어",dua:"두알라어",dum:"중세 네덜란드어",dv:"디베히어",dyo:"졸라 포니어",dyu:"드율라어",dz:"종카어",dzg:"다장가어",ebu:"엠부어",ee:"에웨어",efi:"이픽어",egy:"고대 이집트어",eka:"이카죽어",el:"그리스어",elx:"엘람어",en:"영어","en-AU":"영어(호주)","en-CA":"영어(캐나다)","en-GB":"영어(영국)","en-US":"영어(미국)",enm:"중세 영어",eo:"에스페란토어",es:"스페인어","es-419":"스페인어(라틴 아메리카)","es-ES":"스페인어(유럽)","es-MX":"스페인어(멕시코)",et:"에스토니아어",eu:"바스크어",ewo:"이원도어",fa:"페르시아어",fan:"팡그어",fat:"판티어",ff:"풀라어",fi:"핀란드어",fil:"필리핀어",fj:"피지어",fo:"페로어",fon:"폰어",fr:"프랑스어","fr-CA":"프랑스어(캐나다)","fr-CH":"프랑스어(스위스)",frc:"케이준 프랑스어",frm:"중세 프랑스어",fro:"고대 프랑스어",frr:"북부 프리지아어",frs:"동부 프리슬란드어",fur:"프리울리어",fy:"서부 프리지아어",ga:"아일랜드어",gaa:"가어",gag:"가가우스어",gan:"간어",gay:"가요어",gba:"그바야어",gbz:"조로아스터 다리어",gd:"스코틀랜드 게일어",gez:"게이즈어",gil:"키리바시어",gl:"갈리시아어",glk:"길라키어",gmh:"중세 고지 독일어",gn:"과라니어",goh:"고대 고지 독일어",gom:"고아 콘칸어",gon:"곤디어",gor:"고론탈로어",got:"고트어",grb:"게르보어",grc:"고대 그리스어",gsw:"독일어(스위스)",gu:"구자라트어",guz:"구시어",gv:"맹크스어",gwi:"그위친어",ha:"하우사어",hai:"하이다어",hak:"하카어",haw:"하와이어",he:"히브리어",hi:"힌디어",hif:"피지 힌디어",hil:"헤리가뇬어",hit:"하타이트어",hmn:"히몸어",ho:"히리 모투어",hr:"크로아티아어",hsb:"고지 소르비아어",hsn:"샹어",ht:"아이티어",hu:"헝가리어",hup:"후파어",hy:"아르메니아어",hz:"헤레로어",ia:"인터링구아",iba:"이반어",ibb:"이비비오어",id:"인도네시아어",ie:"인테르링구에",ig:"이그보어",ii:"쓰촨 이어",ik:"이누피아크어",ilo:"이로코어",inh:"인귀시어",io:"이도어",is:"아이슬란드어",it:"이탈리아어",iu:"이눅티투트어",ja:"일본어",jbo:"로반어",jgo:"응곰바어",jmc:"마차메어",jpr:"유대-페르시아어",jrb:"유대-아라비아어",jv:"자바어",ka:"조지아어",kaa:"카라칼파크어",kab:"커바일어",kac:"카친어",kaj:"까꼬토끄어",kam:"캄바어",kaw:"카위어",kbd:"카바르디어",kbl:"카넴부어",kcg:"티얍어",kde:"마콘데어",kea:"크리올어",kfo:"코로어",kg:"콩고어",kha:"카시어",kho:"호탄어",khq:"코이라 친니어",khw:"코와르어",ki:"키쿠유어",kj:"쿠안야마어",kk:"카자흐어",kkj:"카코어",kl:"그린란드어",kln:"칼렌진어",km:"크메르어",kmb:"킴분두어",kn:"칸나다어",ko:"한국어",koi:"코미페르먀크어",kok:"코카니어",kos:"코스라이엔어",kpe:"크펠레어",kr:"칸누리어",krc:"카라챠이-발카르어",krl:"카렐리야어",kru:"쿠르크어",ks:"카슈미르어",ksb:"샴발라어",ksf:"바피아어",ksh:"콜로그니안어",ku:"쿠르드어",kum:"쿠믹어",kut:"쿠테네어",kv:"코미어",kw:"콘월어",ky:"키르기스어",la:"라틴어",lad:"라디노어",lag:"랑기어",lah:"라한다어",lam:"람바어",lb:"룩셈부르크어",lez:"레즈기안어",lfn:"링구아 프랑카 노바",lg:"간다어",li:"림버거어",lkt:"라코타어",ln:"링갈라어",lo:"라오어",lol:"몽고어",lou:"루이지애나 크리올어",loz:"로지어",lrc:"북부 루리어",lt:"리투아니아어",lu:"루바-카탄가어",lua:"루바-룰루아어",lui:"루이세노어",lun:"룬다어",luo:"루오어",lus:"루샤이어",luy:"루야어",lv:"라트비아어",mad:"마두라어",maf:"마파어",mag:"마가히어",mai:"마이틸리어",mak:"마카사어",man:"만딩고어",mas:"마사이어",mde:"마바어",mdf:"모크샤어",mdr:"만다르어",men:"멘데어",mer:"메루어",mfe:"모리스얀어",mg:"말라가시어",mga:"중세 아일랜드어",mgh:"마크후와-메토어",mgo:"메타어",mh:"마셜어",mi:"마오리어",mic:"미크맥어",min:"미낭카바우어",mk:"마케도니아어",ml:"말라얄람어",mn:"몽골어",mnc:"만주어",mni:"마니푸리어",moh:"모호크어",mos:"모시어",mr:"마라티어",mrj:"서부 마리어",ms:"말레이어",mt:"몰타어",mua:"문당어",mus:"크리크어",mwl:"미란데어",mwr:"마르와리어",my:"버마어",mye:"미예네어",myv:"엘즈야어",mzn:"마잔데라니어",na:"나우루어",nan:"민난어",nap:"나폴리어",naq:"나마어",nb:"노르웨이어(보크말)",nd:"북부 은데벨레어",nds:"저지 독일어","nds-NL":"저지 색슨어",ne:"네팔어","new":"네와르어",ng:"느동가어",nia:"니아스어",niu:"니웨언어",nl:"네덜란드어","nl-BE":"플라망어",nmg:"크와시오어",nn:"노르웨이어(니노르스크)",nnh:"느기엠본어",no:"노르웨이어",nog:"노가이어",non:"고대 노르웨이어",nqo:"응코어",nr:"남부 은데벨레어",nso:"북부 소토어",nus:"누에르어",nv:"나바호어",nwc:"고전 네와르어",ny:"냔자어",nym:"니암웨지어",nyn:"니안콜어",nyo:"뉴로어",nzi:"느지마어",oc:"오크어",oj:"오지브와어",om:"오로모어",or:"오리야어",os:"오세트어",osa:"오세이지어",ota:"오스만 터키어",pa:"펀잡어",pag:"판가시난어",pal:"팔레비어",pam:"팜팡가어",pap:"파피아먼토어",pau:"팔라우어",pcm:"나이지리아 피진어",peo:"고대 페르시아어",phn:"페니키아어",pi:"팔리어",pl:"폴란드어",pnt:"폰틱어",pon:"폼페이어",prg:"프러시아어",pro:"고대 프로방스어",ps:"파슈토어",pt:"포르투갈어","pt-BR":"포르투갈어(브라질)","pt-PT":"포르투갈어(유럽)",qu:"케추아어",quc:"키체어",raj:"라자스탄어",rap:"라파뉴이",rar:"라로통가어",rm:"로만시어",rn:"룬디어",ro:"루마니아어","ro-MD":"몰도바어",rof:"롬보어",rom:"집시어",root:"어근",ru:"러시아어",rue:"루신어",rup:"아로마니아어",rw:"르완다어",rwk:"르와어",sa:"산스크리트어",sad:"산다웨어",sah:"야쿠트어",sam:"사마리아 아랍어",saq:"삼부루어",sas:"사사크어",sat:"산탈리어",sba:"느감바이어",sbp:"상구어",sc:"사르디니아어",scn:"시칠리아어",sco:"스코틀랜드어",sd:"신디어",sdh:"남부 쿠르드어",se:"북부 사미어",see:"세네카어",seh:"세나어",sel:"셀쿠프어",ses:"코이야보로 세니어",sg:"산고어",sga:"고대 아일랜드어",sh:"세르비아-크로아티아어",shi:"타셸히트어",shn:"샨어",shu:"차디언 아라비아어",si:"스리랑카어",sid:"시다모어",sk:"슬로바키아어",sl:"슬로베니아어",sm:"사모아어",sma:"남부 사미어",smj:"룰레 사미어",smn:"이나리 사미어",sms:"스콜트 사미어",sn:"쇼나어",snk:"소닌케어",so:"소말리아어",sog:"소그디엔어",sq:"알바니아어",sr:"세르비아어",srn:"스라난 통가어",srr:"세레르어",ss:"시스와티어",ssy:"사호어",st:"남부 소토어",su:"순다어",suk:"수쿠마어",sus:"수수어",sux:"수메르어",sv:"스웨덴어",sw:"스와힐리어","sw-CD":"콩고 스와힐리어",swb:"코모로어",syc:"고전 시리아어",syr:"시리아어",ta:"타밀어",te:"텔루구어",tem:"팀니어",teo:"테조어",ter:"테레노어",tet:"테툼어",tg:"타지크어",th:"태국어",ti:"티그리냐어",tig:"티그레어",tiv:"티브어",tk:"투르크멘어",tkl:"토켈라우제도어",tkr:"차후르어",tl:"타갈로그어",tlh:"클링온어",tli:"틀링깃족어",tly:"탈리쉬어",tmh:"타마섹어",tn:"츠와나어",to:"통가어",tog:"니아사 통가어",tpi:"토크 피신어",tr:"터키어",trv:"타로코어",ts:"총가어",tsi:"트심시안어",tt:"타타르어",tum:"툼부카어",tvl:"투발루어",tw:"트위어",twq:"타사와크어",ty:"타히티어",tyv:"투비니안어",tzm:"중앙 모로코 타마지트어",udm:"우드말트어",ug:"위구르어",uga:"유가리틱어",uk:"우크라이나어",umb:"움분두어",ur:"우르두어",uz:"우즈베크어",vai:"바이어",ve:"벤다어",vi:"베트남어",vo:"볼라퓌크어",vot:"보틱어",vun:"분조어",wa:"왈론어",wae:"월저어",wal:"월라이타어",war:"와라이어",was:"와쇼어",wbp:"왈피리어",wo:"월로프어",wuu:"우어",xal:"칼미크어",xh:"코사어",xog:"소가어",yao:"야오족어",yap:"얍페세어",yav:"양본어",ybb:"옘바어",yi:"이디시어",yo:"요루바어",yue:"광둥어",za:"주앙어",zap:"사포테크어",zbl:"블리스 심볼",zen:"제나가어",zgh:"표준 모로코 타마지트어",zh:"중국어","zh-Hans":"중국어(만다린, 간체)","zh-Hant":"중국어(만다린, 번체)",zu:"줄루어",zun:"주니어",zza:"자자어"},scriptNames:{Cyrl:"키릴 문자",Latn:"로마자",Arab:"아랍 문자",Guru:"구르무키 문자",Tfng:"티피나그 문자",Vaii:"바이 문자",Hans:"간체",Hant:"번체"}},ku:{rtl:false,languageNames:{aa:"afarî",ab:"abxazî",ace:"açehî",ady:"adîgeyî",af:"afrîkansî",ain:"aynuyî",ale:"alêwîtî",am:"amharî",an:"aragonî",ar:"erebî","ar-001":"erebiya standard",as:"asamî",ast:"astûrî",av:"avarî",ay:"aymarayî",az:"azerî",ba:"başkîrî",ban:"balînî",be:"belarusî",bem:"bembayî",bg:"bulgarî",bho:"bojpûrî",bi:"bîslamayî",bla:"blakfotî",bm:"bambarayî",bn:"bengalî",bo:"tîbetî",br:"bretonî",bs:"bosnî",bug:"bugî",ca:"katalanî",ce:"çeçenî",ceb:"sebwanoyî",ch:"çamoroyî",chk:"çûkî",chm:"marî",chr:"çerokî",chy:"çeyenî",ckb:"soranî",co:"korsîkayî",cs:"çekî",cv:"çuvaşî",cy:"weylsî",da:"danmarkî",de:"elmanî","de-AT":"elmanî (Awistirya)","de-CH":"elmanî (Swîsre)",dsb:"sorbiya jêrîn",dua:"diwalayî",dv:"divehî",dz:"conxayî",ee:"eweyî",el:"yewnanî",en:"îngilîzî","en-AU":"îngilîzî (Awistralya)","en-CA":"îngilîzî (Kanada)","en-GB":"îngilîzî (Keyaniya Yekbûyî)","en-US":"îngilîzî (Dewletên Yekbûyî yên Amerîkayê)",eo:"esperantoyî",es:"spanî","es-419":"spanî (Amerîkaya Latînî)","es-ES":"spanî (Spanya)","es-MX":"spanî (Meksîk)",et:"estonî",eu:"baskî",fa:"farisî",ff:"fulahî",fi:"fînî",fil:"fîlîpînoyî",fj:"fîjî",fo:"ferî",fr:"frensî","fr-CA":"frensî (Kanada)","fr-CH":"frensî (Swîsre)",fur:"friyolî",fy:"frîsî",ga:"îrî",gd:"gaelîka skotî",gil:"kîrîbatî",gl:"galîsî",gn:"guwaranî",gor:"gorontaloyî",gsw:"elmanîşî",gu:"gujaratî",gv:"manksî",ha:"hawsayî",haw:"hawayî",he:"îbranî",hi:"hindî",hil:"hîlîgaynonî",hr:"xirwatî",hsb:"sorbiya jorîn",ht:"haîtî",hu:"mecarî",hy:"ermenî",hz:"hereroyî",ia:"interlingua",id:"indonezî",ig:"îgboyî",ilo:"îlokanoyî",inh:"îngûşî",io:"îdoyî",is:"îzlendî",it:"îtalî",iu:"înuîtî",ja:"japonî",jbo:"lojbanî",jv:"javayî",ka:"gurcî",kab:"kabîlî",kea:"kapverdî",kk:"qazaxî",kl:"kalalîsûtî",km:"ximêrî",kn:"kannadayî",ko:"koreyî",kok:"konkanî",ks:"keşmîrî",ksh:"rîpwarî",ku:"kurdî",kv:"komî",kw:"kornî",ky:"kirgizî",lad:"ladînoyî",lb:"luksembûrgî",lez:"lezgînî",lg:"lugandayî",li:"lîmbûrgî",lkt:"lakotayî",ln:"lingalayî",lo:"lawsî",lrc:"luriya bakur",lt:"lîtwanî",lv:"latviyayî",mad:"madurayî",mas:"masayî",mdf:"mokşayî",mg:"malagasî",mh:"marşalî",mi:"maorî",mic:"mîkmakî",min:"mînangkabawî",mk:"makedonî",ml:"malayalamî",mn:"mongolî",moh:"mohawkî",mr:"maratî",ms:"malezî",mt:"maltayî",my:"burmayî",myv:"erzayî",mzn:"mazenderanî",na:"nawrûyî",nap:"napolîtanî",nb:"norwecî (bokmål)","nds-NL":"nds (Holenda)",ne:"nepalî",niu:"nîwî",nl:"holendî","nl-BE":"flamî",nn:"norwecî (nynorsk)",nso:"sotoyiya bakur",nv:"navajoyî",oc:"oksîtanî",om:"oromoyî",or:"oriyayî",os:"osetî",pa:"puncabî",pam:"kapampanganî",pap:"papyamentoyî",pau:"palawî",pl:"polonî",prg:"prûsyayî",ps:"peştûyî",pt:"portugalî","pt-BR":"portugalî (Brazîl)","pt-PT":"portugalî (Portûgal)",qu:"keçwayî",rap:"rapanuyî",rar:"rarotongî",rm:"romancî",ro:"romanî","ro-MD":"romanî (Moldova)",ru:"rusî",rup:"aromanî",rw:"kînyariwandayî",sa:"sanskrîtî",sc:"sardînî",scn:"sicîlî",sco:"skotî",sd:"sindhî",se:"samiya bakur",si:"kîngalî",sk:"slovakî",sl:"slovenî",sm:"samoayî",smn:"samiya înarî",sn:"şonayî",so:"somalî",sq:"elbanî",sr:"sirbî",srn:"sirananî",ss:"swazî",st:"sotoyiya başûr",su:"sundanî",sv:"swêdî",sw:"swahîlî","sw-CD":"swahîlî (Kongo - Kînşasa)",swb:"komorî",syr:"siryanî",ta:"tamîlî",te:"telûgûyî",tet:"tetûmî",tg:"tacikî",th:"tayî",ti:"tigrînî",tk:"tirkmenî",tlh:"klîngonî",tn:"tswanayî",to:"tongî",tpi:"tokpisinî",tr:"tirkî",trv:"tarokoyî",ts:"tsongayî",tt:"teterî",tum:"tumbukayî",tvl:"tuvalûyî",ty:"tahîtî",tzm:"temazîxtî",udm:"udmurtî",ug:"oygurî",uk:"ukraynî",ur:"urdûyî",uz:"ozbekî",vi:"viyetnamî",vo:"volapûkî",wa:"walonî",war:"warayî",wo:"wolofî",xh:"xosayî",yi:"yidîşî",yo:"yorubayî",yue:"kantonî","zh-Hans":"zh (Hans)","zh-Hant":"zh (Hant)",zu:"zuluyî",zza:"zazakî"},scriptNames:{Cyrl:"kirîlî",Latn:"latînî",Arab:"erebî"}},lij:{rtl:false,languageNames:{},scriptNames:{}},lt:{rtl:false,languageNames:{aa:"afarų",ab:"abchazų",ace:"ačinezų",ach:"akolių",ada:"adangmų",ady:"adygėjų",ae:"avestų",aeb:"Tuniso arabų",af:"afrikanų",afh:"afrihili",agq:"aghemų",ain:"ainų",ak:"akanų",akk:"akadianų",akz:"alabamiečių",ale:"aleutų",aln:"albanų kalbos gegų tarmė",alt:"pietų Altajaus",am:"amharų",an:"aragonesų",ang:"senoji anglų",anp:"angikų",ar:"arabų","ar-001":"šiuolaikinė standartinė arabų",arc:"aramaikų",arn:"mapudungunų",aro:"araonų",arp:"arapahų",arq:"Alžyro arabų",arw:"aravakų",ary:"Maroko arabų",arz:"Egipto arabų",as:"asamų",asa:"asu",ase:"Amerikos ženklų kalba",ast:"asturianų",av:"avarikų",avk:"kotava",awa:"avadhi",ay:"aimarų",az:"azerbaidžaniečių",ba:"baškirų",bal:"baluči",ban:"baliečių",bar:"bavarų",bas:"basų",bax:"bamunų",bbc:"batak toba",bbj:"ghomalų",be:"baltarusių",bej:"bėjų",bem:"bembų",bew:"betavi",bez:"benų",bfd:"bafutų",bfq:"badaga",bg:"bulgarų",bgn:"vakarų beludžių",bho:"baučpuri",bi:"bislama",bik:"bikolų",bin:"bini",bjn:"bandžarų",bkm:"komų",bla:"siksikų",bm:"bambarų",bn:"bengalų",bo:"tibetiečių",bpy:"bišnuprijos",bqi:"bakhtiari",br:"bretonų",bra:"brajų",brh:"brahujų",brx:"bodo",bs:"bosnių",bss:"akūsų",bua:"buriatų",bug:"buginezų",bum:"bulu",byn:"blin",byv:"medumbų",ca:"katalonų",cad:"kado",car:"karibų",cay:"kaijūgų",cch:"atsamų",ccp:"Čakma",ce:"čečėnų",ceb:"sebuanų",cgg:"čigų",ch:"čamorų",chb:"čibčų",chg:"čagatų",chk:"čukesų",chm:"marių",chn:"činuk žargonas",cho:"čoktau",chp:"čipvėjų",chr:"čerokių",chy:"čajenų",ckb:"soranių kurdų",co:"korsikiečių",cop:"koptų",cps:"capiznon",cr:"kry",crh:"Krymo turkų",crs:"Seišelių kreolų ir prancūzų",cs:"čekų",csb:"kašubų",cu:"bažnytinė slavų",cv:"čiuvašų",cy:"valų",da:"danų",dak:"dakotų",dar:"dargva",dav:"taitų",de:"vokiečių","de-AT":"Austrijos vokiečių","de-CH":"Šveicarijos aukštutinė vokiečių",del:"delavero",den:"slave",dgr:"dogribų",din:"dinkų",dje:"zarmų",doi:"dogri",dsb:"žemutinių sorbų",dtp:"centrinio Dusuno",dua:"dualų",dum:"Vidurio Vokietijos",dv:"divehų",dyo:"džiola-foni",dyu:"dyulų",dz:"botijų",dzg:"dazagų",ebu:"embu",ee:"evių",efi:"efik",egl:"italų kalbos Emilijos tarmė",egy:"senovės egiptiečių",eka:"ekajuk",el:"graikų",elx:"elamitų",en:"anglų","en-AU":"Australijos anglų","en-CA":"Kanados anglų","en-GB":"Didžiosios Britanijos anglų","en-US":"Jungtinių Valstijų anglų",enm:"Vidurio Anglijos",eo:"esperanto",es:"ispanų","es-419":"Lotynų Amerikos ispanų","es-ES":"Europos ispanų","es-MX":"Meksikos ispanų",esu:"centrinės Aliaskos jupikų",et:"estų",eu:"baskų",ewo:"evondo",ext:"ispanų kalbos Ekstremadūros tarmė",fa:"persų",fan:"fangų",fat:"fanti",ff:"fulahų",fi:"suomių",fil:"filipiniečių",fit:"suomių kalbos Tornedalio tarmė",fj:"fidžių",fo:"farerų",fr:"prancūzų","fr-CA":"Kanados prancūzų","fr-CH":"Šveicarijos prancūzų",frc:"kadžunų prancūzų",frm:"Vidurio Prancūzijos",fro:"senoji prancūzų",frp:"arpitano",frr:"šiaurinių fryzų",frs:"rytų fryzų",fur:"friulių",fy:"vakarų fryzų",ga:"airių",gaa:"ga",gag:"gagaūzų",gan:"kinų kalbos dziangsi tarmė",gay:"gajo",gba:"gbaja",gbz:"zoroastrų dari",gd:"škotų (gėlų)",gez:"gyz",gil:"kiribati",gl:"galisų",glk:"gilaki",gmh:"Vidurio Aukštosios Vokietijos",gn:"gvaranių",goh:"senoji Aukštosios Vokietijos",gom:"Goa konkanių",gon:"gondi",gor:"gorontalo",got:"gotų",grb:"grebo",grc:"senovės graikų",gsw:"Šveicarijos vokiečių",gu:"gudžaratų",guc:"vajų",gur:"frafra",guz:"gusi",gv:"meniečių",gwi:"gvičino",ha:"hausų",hai:"haido",hak:"kinų kalbos hakų tarmė",haw:"havajiečių",he:"hebrajų",hi:"hindi",hif:"Fidžio hindi",hil:"hiligainonų",hit:"hititų",hmn:"hmong",ho:"hiri motu",hr:"kroatų",hsb:"aukštutinių sorbų",hsn:"kinų kalbos hunano tarmė",ht:"Haičio",hu:"vengrų",hup:"hupa",hy:"armėnų",hz:"hererų",ia:"tarpinė",iba:"iban",ibb:"ibibijų",id:"indoneziečių",ie:"interkalba",ig:"igbų",ii:"sičuan ji",ik:"inupiakų",ilo:"ilokų",inh:"ingušų",io:"ido",is:"islandų",it:"italų",iu:"inukitut",izh:"ingrų",ja:"japonų",jam:"Jamaikos kreolų anglų",jbo:"loiban",jgo:"ngombų",jmc:"mačamų",jpr:"judėjų persų",jrb:"judėjų arabų",jut:"danų kalbos jutų tarmė",jv:"javiečių",ka:"gruzinų",kaa:"karakalpakų",kab:"kebailų",kac:"kačinų",kaj:"ju",kam:"kembų",kaw:"kavių",kbd:"kabardinų",kbl:"kanembų",kcg:"tyap",kde:"makondų",kea:"Žaliojo Kyšulio kreolų",ken:"kenyang",kfo:"koro",kg:"Kongo",kgp:"kaingang",kha:"kasi",kho:"kotanezų",khq:"kojra čini",khw:"khovarų",ki:"kikujų",kiu:"kirmanjki",kj:"kuaniama",kk:"kazachų",kkj:"kako",kl:"kalalisut",kln:"kalenjinų",km:"khmerų",kmb:"kimbundu",kn:"kanadų",ko:"korėjiečių",koi:"komių-permių",kok:"konkanių",kos:"kosreanų",kpe:"kpelių",kr:"kanurių",krc:"karačiajų balkarijos",kri:"krio",krj:"kinaray-a",krl:"karelų",kru:"kuruk",ks:"kašmyrų",ksb:"šambalų",ksf:"bafų",ksh:"kolognų",ku:"kurdų",kum:"kumikų",kut:"kutenai",kv:"komi",kw:"kornų",ky:"kirgizų",la:"lotynų",lad:"ladino",lag:"langi",lah:"landa",lam:"lamba",lb:"liuksemburgiečių",lez:"lezginų",lfn:"naujoji frankų kalba",lg:"ganda",li:"limburgiečių",lij:"ligūrų",liv:"lyvių",lkt:"lakotų",lmo:"lombardų",ln:"ngalų",lo:"laosiečių",lol:"mongų",lou:"Luizianos kreolų",loz:"lozių",lrc:"šiaurės luri",lt:"lietuvių",ltg:"latgalių",lu:"luba katanga",lua:"luba lulua",lui:"luiseno",lun:"Lundos",lus:"mizo",luy:"luja",lv:"latvių",lzh:"klasikinė kinų",lzz:"laz",mad:"madurezų",maf:"mafų",mag:"magahi",mai:"maithili",mak:"Makasaro",man:"mandingų",mas:"masajų",mde:"mabų",mdf:"mokša",mdr:"mandarų",men:"mende",mer:"merų",mfe:"morisijų",mg:"malagasų",mga:"Vidurio Airijos",mgh:"makua-maeto",mgo:"meta",mh:"Maršalo Salų",mi:"maorių",mic:"mikmakų",min:"minangkabau",mk:"makedonų",ml:"malajalių",mn:"mongolų",mnc:"manču",mni:"manipurių",moh:"mohok",mos:"mosi",mr:"maratų",mrj:"vakarų mari",ms:"malajiečių",mt:"maltiečių",mua:"mundangų",mus:"krykų",mwl:"mirandezų",mwr:"marvari",mwv:"mentavai",my:"birmiečių",mye:"mjenų",myv:"erzyjų",mzn:"mazenderanių",na:"naurų",nan:"kinų kalbos pietų minų tarmė",nap:"neapoliečių",naq:"nama",nb:"norvegų bukmolas",nd:"šiaurės ndebelų",nds:"Žemutinės Vokietijos","nds-NL":"Žemutinės Saksonijos (Nyderlandai)",ne:"nepaliečių","new":"nevari",ng:"ndongų",nia:"nias",niu:"niujiečių",njo:"ao naga",nl:"olandų","nl-BE":"flamandų",nmg:"kvasių",nn:"naujoji norvegų",nnh:"ngiembūnų",no:"norvegų",nog:"nogų",non:"senoji norsų",nov:"novial",nqo:"enko",nr:"pietų ndebele",nso:"šiaurės Soto",nus:"nuerų",nv:"navajų",nwc:"klasikinė nevari",ny:"nianjų",nym:"niamvezi",nyn:"niankolų",nyo:"niorų",nzi:"nzima",oc:"očitarų",oj:"ojibva",om:"oromų",or:"odijų",os:"osetinų",osa:"osage",ota:"osmanų turkų",pa:"pendžabų",pag:"pangasinanų",pal:"vidurinė persų kalba",pam:"pampangų",pap:"papiamento",pau:"palauliečių",pcd:"pikardų",pcm:"Nigerijos pidžinų",pdc:"Pensilvanijos vokiečių",pdt:"vokiečių kalbos žemaičių tarmė",peo:"senoji persų",pfl:"vokiečių kalbos Pfalco tarmė",phn:"finikiečių",pi:"pali",pl:"lenkų",pms:"italų kalbos Pjemonto tarmė",pnt:"Ponto",pon:"Ponapės",prg:"prūsų",pro:"senovės provansalų",ps:"puštūnų",pt:"portugalų","pt-BR":"Brazilijos portugalų","pt-PT":"Europos portugalų",qu:"kečujų",quc:"kičių",qug:"Čimboraso aukštumų kečujų",raj:"Radžastano",rap:"rapanui",rar:"rarotonganų",rgn:"italų kalbos Romanijos tarmė",rif:"rifų",rm:"retoromanų",rn:"rundi",ro:"rumunų","ro-MD":"moldavų",rof:"rombo",rom:"romų",root:"rūt",rtm:"rotumanų",ru:"rusų",rue:"rusinų",rug:"Rovianos",rup:"aromanių",rw:"kinjaruandų",rwk:"rua",sa:"sanskritas",sad:"sandavių",sah:"jakutų",sam:"samarėjų aramių",saq:"sambūrų",sas:"sasak",sat:"santalių",saz:"sauraštrų",sba:"ngambajų",sbp:"sangų",sc:"sardiniečių",scn:"siciliečių",sco:"škotų",sd:"sindų",sdc:"sasaresų sardinų",sdh:"pietų kurdų",se:"šiaurės samių",see:"senecų",seh:"senų",sei:"seri",sel:"selkup",ses:"kojraboro seni",sg:"sango",sga:"senoji airių",sgs:"žemaičių",sh:"serbų-kroatų",shi:"tachelhitų",shn:"šan",shu:"chadian arabų",si:"sinhalų",sid:"sidamų",sk:"slovakų",sl:"slovėnų",sli:"sileziečių žemaičių",sly:"selajarų",sm:"Samoa",sma:"pietų samių",smj:"Liuleo samių",smn:"Inario samių",sms:"Skolto samių",sn:"šonų",snk:"soninke",so:"somaliečių",sog:"sogdien",sq:"albanų",sr:"serbų",srn:"sranan tongo",srr:"sererų",ss:"svatų",ssy:"saho",st:"pietų Soto",stq:"Saterlendo fryzų",su:"sundų",suk:"sukuma",sus:"susu",sux:"šumerų",sv:"švedų",sw:"suahilių","sw-CD":"Kongo suahilių",swb:"Komorų",syc:"klasikinė sirų",syr:"sirų",szl:"sileziečių",ta:"tamilų",tcy:"tulų",te:"telugų",tem:"timne",teo:"teso",ter:"Tereno",tet:"tetum",tg:"tadžikų",th:"tajų",ti:"tigrajų",tig:"tigre",tk:"turkmėnų",tkl:"Tokelau",tkr:"tsakurų",tl:"tagalogų",tlh:"klingonų",tli:"tlingitų",tly:"talyšų",tmh:"tamašek",tn:"tsvanų",to:"tonganų",tog:"niasa tongų",tpi:"Papua pidžinų",tr:"turkų",tru:"turoyo",trv:"Taroko",ts:"tsongų",tsd:"tsakonų",tsi:"tsimšian",tt:"totorių",ttt:"musulmonų tatų",tum:"tumbukų",tvl:"Tuvalu",tw:"tvi",twq:"tasavakų",ty:"taitiečių",tyv:"tuvių",tzm:"Centrinio Maroko tamazitų",udm:"udmurtų",ug:"uigūrų",uga:"ugaritų",uk:"ukrainiečių",umb:"umbundu",ur:"urdų",uz:"uzbekų",ve:"vendų",vec:"venetų",vep:"vepsų",vi:"vietnamiečių",vls:"vakarų flamandų",vmf:"pagrindinė frankonų",vo:"volapiuko",vot:"Votik",vro:"veru",vun:"vunjo",wa:"valonų",wae:"valserų",wal:"valamo",war:"varai",was:"Vašo",wbp:"valrpiri",wo:"volofų",wuu:"kinų kalbos vu tarmė",xal:"kalmukų",xh:"kosų",xmf:"megrelų",xog:"sogų",yao:"jao",yap:"japezų",yav:"jangbenų",ybb:"jembų",yi:"jidiš",yo:"jorubų",yrl:"njengatu",yue:"kinų kalbos Kantono tarmė",za:"chuang",zap:"zapotekų",zbl:"BLISS simbolių",zea:"zelandų",zen:"zenaga",zgh:"standartinė Maroko tamazigtų",zh:"kinų","zh-Hans":"supaprastintoji mandarinų kinų","zh-Hant":"tradicinė mandarinų kinų",zu:"zulų",zun:"Zuni",zza:"zaza"},scriptNames:{Cyrl:"kirilica",Latn:"lotynų",Arab:"arabų",Guru:"gurmuki",Tfng:"tifinag",Vaii:"vai",Hans:"supaprastinti",Hant:"tradiciniai"}},lv:{rtl:false,languageNames:{aa:"afāru",ab:"abhāzu",ace:"ačinu",ach:"ačolu",ada:"adangmu",ady:"adigu",ae:"avesta",af:"afrikandu",afh:"afrihili",agq:"aghemu",ain:"ainu",ak:"akanu",akk:"akadiešu",ale:"aleutu",alt:"dienvidaltajiešu",am:"amharu",an:"aragoniešu",ang:"senangļu",anp:"angika",ar:"arābu","ar-001":"mūsdienu standarta arābu",arc:"aramiešu",arn:"araukāņu",arp:"arapahu",arw:"aravaku",as:"asamiešu",asa:"asu",ast:"astūriešu",av:"avāru",awa:"avadhu",ay:"aimaru",az:"azerbaidžāņu","az-Arab":"dienvidazerbaidžāņu",ba:"baškīru",bal:"beludžu",ban:"baliešu",bas:"basu",bax:"bamumu",bbj:"gomalu",be:"baltkrievu",bej:"bedžu",bem:"bembu",bez:"bena",bfd:"bafutu",bg:"bulgāru",bgn:"rietumbeludžu",bho:"bhodžpūru",bi:"bišlamā",bik:"bikolu",bin:"binu",bkm:"komu",bla:"siksiku",bm:"bambaru",bn:"bengāļu",bo:"tibetiešu",br:"bretoņu",bra:"bradžiešu",brx:"bodo",bs:"bosniešu",bss:"nkosi",bua:"burjatu",bug:"bugu",bum:"bulu",byn:"bilinu",byv:"medumbu",ca:"katalāņu",cad:"kadu",car:"karību",cay:"kajuga",cch:"atsamu",ccp:"čakmu",ce:"čečenu",ceb:"sebuāņu",cgg:"kiga",ch:"čamorru",chb:"čibču",chg:"džagatajs",chk:"čūku",chm:"mariešu",chn:"činuku žargons",cho:"čoktavu",chp:"čipevaianu",chr:"čiroku",chy:"šejenu",ckb:"centrālkurdu",co:"korsikāņu",cop:"koptu",cr:"krī",crh:"Krimas tatāru",crs:"franciskā kreoliskā valoda (Seišelu salas)",cs:"čehu",csb:"kašubu",cu:"baznīcslāvu",cv:"čuvašu",cy:"velsiešu",da:"dāņu",dak:"dakotu",dar:"dargu",dav:"taitu",de:"vācu","de-AT":"vācu (Austrija)","de-CH":"augšvācu (Šveice)",del:"delavēru",den:"sleivu",dgr:"dogribu",din:"dinku",dje:"zarmu",doi:"dogru",dsb:"lejassorbu",dua:"dualu",dum:"vidusholandiešu",dv:"maldīviešu",dyo:"diola-fonjī",dyu:"diūlu",dz:"dzongke",dzg:"dazu",ebu:"kjembu",ee:"evu",efi:"efiku",egy:"ēģiptiešu",eka:"ekadžuku",el:"grieķu",elx:"elamiešu",en:"angļu","en-AU":"angļu (Austrālija)","en-CA":"angļu (Kanāda)","en-GB":"angļu (Lielbritānija)","en-US":"angļu (Amerikas Savienotās Valstis)",enm:"vidusangļu",eo:"esperanto",es:"spāņu","es-419":"spāņu (Latīņamerika)","es-ES":"spāņu (Spānija)","es-MX":"spāņu (Meksika)",et:"igauņu",eu:"basku",ewo:"evondu",fa:"persiešu",fan:"fangu",fat:"fantu",ff:"fulu",fi:"somu",fil:"filipīniešu",fj:"fidžiešu",fo:"fēru",fon:"fonu",fr:"franču","fr-CA":"franču (Kanāda)","fr-CH":"franču (Šveice)",frc:"kadžūnu franču",frm:"vidusfranču",fro:"senfranču",frr:"ziemeļfrīzu",frs:"austrumfrīzu",fur:"friūlu",fy:"rietumfrīzu",ga:"īru",gaa:"ga",gag:"gagauzu",gay:"gajo",gba:"gbaju",gd:"skotu gēlu",gez:"gēzu",gil:"kiribatiešu",gl:"galisiešu",gmh:"vidusaugšvācu",gn:"gvaranu",goh:"senaugšvācu",gon:"gondu valodas",gor:"gorontalu",got:"gotu",grb:"grebo",grc:"sengrieķu",gsw:"Šveices vācu",gu:"gudžaratu",guz:"gusii",gv:"meniešu",gwi:"kučinu",ha:"hausu",hai:"haidu",haw:"havajiešu",he:"ivrits",hi:"hindi",hil:"hiligainonu",hit:"hetu",hmn:"hmongu",ho:"hirimotu",hr:"horvātu",hsb:"augšsorbu",ht:"haitiešu",hu:"ungāru",hup:"hupu",hy:"armēņu",hz:"hereru",ia:"interlingva",iba:"ibanu",ibb:"ibibio",id:"indonēziešu",ie:"interlingve",ig:"igbo",ii:"Sičuaņas ji",ik:"inupiaku",ilo:"iloku",inh:"ingušu",io:"ido",is:"islandiešu",it:"itāļu",iu:"inuītu",ja:"japāņu",jbo:"ložbans",jmc:"mačamu",jpr:"jūdpersiešu",jrb:"jūdarābu",jv:"javiešu",ka:"gruzīnu",kaa:"karakalpaku",kab:"kabilu",kac:"kačinu",kaj:"kadži",kam:"kambu",kaw:"kāvi",kbd:"kabardiešu",kbl:"kaņembu",kcg:"katabu",kde:"makonde",kea:"kaboverdiešu",kfo:"koru",kg:"kongu",kha:"khasu",kho:"hotaniešu",khq:"koiračiinī",ki:"kikuju",kj:"kvaņamu",kk:"kazahu",kkj:"kako",kl:"grenlandiešu",kln:"kalendžīnu",km:"khmeru",kmb:"kimbundu",kn:"kannadu",ko:"korejiešu",koi:"komiešu-permiešu",kok:"konkanu",kos:"kosrājiešu",kpe:"kpellu",kr:"kanuru",krc:"karačaju un balkāru",krl:"karēļu",kru:"kuruhu",ks:"kašmiriešu",ksb:"šambalu",ksf:"bafiju",ksh:"Ķelnes vācu",ku:"kurdu",kum:"kumiku",kut:"kutenaju",kv:"komiešu",kw:"korniešu",ky:"kirgīzu",la:"latīņu",lad:"ladino",lag:"langi",lah:"landu",lam:"lambu",lb:"luksemburgiešu",lez:"lezgīnu",lg:"gandu",li:"limburgiešu",lkt:"lakotu",ln:"lingala",lo:"laosiešu",lol:"mongu",lou:"Luiziānas kreolu",loz:"lozu",lrc:"ziemeļluru",lt:"lietuviešu",lu:"lubakatanga",lua:"lubalulva",lui:"luisenu",lun:"lundu",lus:"lušeju",luy:"luhju",lv:"latviešu",mad:"maduriešu",maf:"mafu",mag:"magahiešu",mai:"maithili",mak:"makasaru",man:"mandingu",mas:"masaju",mde:"mabu",mdf:"mokšu",mdr:"mandaru",men:"mendu",mer:"meru",mfe:"Maurīcijas kreolu",mg:"malagasu",mga:"vidusīru",mgh:"makua",mgo:"metu",mh:"māršaliešu",mi:"maoru",mic:"mikmaku",min:"minangkabavu",mk:"maķedoniešu",ml:"malajalu",mn:"mongoļu",mnc:"mandžūru",mni:"manipūru",moh:"mohauku",mos:"mosu",mr:"marathu",ms:"malajiešu",mt:"maltiešu",mua:"mundangu",mus:"krīku",mwl:"mirandiešu",mwr:"marvaru",my:"birmiešu",mye:"mjenu",myv:"erzju",mzn:"mazanderāņu",na:"nauruiešu",nap:"neapoliešu",naq:"nama",nb:"norvēģu bukmols",nd:"ziemeļndebelu",nds:"lejasvācu","nds-NL":"lejassakšu",ne:"nepāliešu","new":"nevaru",ng:"ndongu",nia:"njasu",niu:"niuāņu",nl:"holandiešu","nl-BE":"flāmu",nmg:"kvasio",nn:"jaunnorvēģu",nnh:"ngjembūnu",no:"norvēģu",nog:"nogaju",non:"sennorvēģu",nqo:"nko",nr:"dienvidndebelu",nso:"ziemeļsotu",nus:"nueru",nv:"navahu",nwc:"klasiskā nevaru",ny:"čičeva",nym:"ņamvezu",nyn:"ņankolu",nyo:"ņoru",nzi:"nzemu",oc:"oksitāņu",oj:"odžibvu",om:"oromu",or:"oriju",os:"osetīnu",osa:"važāžu",ota:"turku osmaņu",pa:"pandžabu",pag:"pangasinanu",pal:"pehlevi",pam:"pampanganu",pap:"papjamento",pau:"palaviešu",pcm:"Nigērijas pidžinvaloda",peo:"senpersu",phn:"feniķiešu",pi:"pāli",pl:"poļu",pon:"ponapiešu",prg:"prūšu",pro:"senprovansiešu",ps:"puštu",pt:"portugāļu","pt-BR":"portugāļu (Brazīlija)","pt-PT":"portugāļu (Portugāle)",qu:"kečvu",quc:"kiče",raj:"radžastāņu",rap:"rapanuju",rar:"rarotongiešu",rm:"retoromāņu",rn:"rundu",ro:"rumāņu","ro-MD":"moldāvu",rof:"rombo",rom:"čigānu",root:"sakne",ru:"krievu",rup:"aromūnu",rw:"kiņaruanda",rwk:"ruanda",sa:"sanskrits",sad:"sandavu",sah:"jakutu",sam:"Samārijas aramiešu",saq:"samburu",sas:"sasaku",sat:"santalu",sba:"ngambeju",sbp:"sangu",sc:"sardīniešu",scn:"sicīliešu",sco:"skotu",sd:"sindhu",sdh:"dienvidkurdu",se:"ziemeļsāmu",see:"seneku",seh:"senu",sel:"selkupu",ses:"koiraboro senni",sg:"sango",sga:"senīru",sh:"serbu–horvātu",shi:"šilhu",shn:"šanu",shu:"Čadas arābu",si:"singāļu",sid:"sidamu",sk:"slovāku",sl:"slovēņu",sm:"samoāņu",sma:"dienvidsāmu",smj:"Luleo sāmu",smn:"Inari sāmu",sms:"skoltsāmu",sn:"šonu",snk:"soninku",so:"somāļu",sog:"sogdiešu",sq:"albāņu",sr:"serbu",srn:"sranantogo",srr:"serēru",ss:"svatu",ssy:"saho",st:"dienvidsotu",su:"zundu",suk:"sukumu",sus:"susu",sux:"šumeru",sv:"zviedru",sw:"svahili","sw-CD":"svahili (Kongo)",swb:"komoru",syc:"klasiskā sīriešu",syr:"sīriešu",ta:"tamilu",te:"telugu",tem:"temnu",teo:"teso",ter:"tereno",tet:"tetumu",tg:"tadžiku",th:"taju",ti:"tigrinja",tig:"tigru",tiv:"tivu",tk:"turkmēņu",tkl:"tokelaviešu",tl:"tagalu",tlh:"klingoņu",tli:"tlinkitu",tmh:"tuaregu",tn:"cvanu",to:"tongiešu",tog:"Njasas tongu",tpi:"tokpisins",tr:"turku",trv:"taroko",ts:"congu",tsi:"cimšiāņu",tt:"tatāru",tum:"tumbuku",tvl:"tuvaliešu",tw:"tvī",twq:"tasavaku",ty:"taitiešu",tyv:"tuviešu",tzm:"Centrālmarokas tamazīts",udm:"udmurtu",ug:"uiguru",uga:"ugaritiešu",uk:"ukraiņu",umb:"umbundu",ur:"urdu",uz:"uzbeku",vai:"vaju",ve:"vendu",vi:"vjetnamiešu",vo:"volapiks",vot:"votu",vun:"vundžo",wa:"valoņu",wae:"Vallisas vācu",wal:"valamu",war:"varaju",was:"vašo",wbp:"varlpirī",wo:"volofu",xal:"kalmiku",xh:"khosu",xog:"sogu",yao:"jao",yap:"japiešu",yav:"janbaņu",ybb:"jembu",yi:"jidišs",yo:"jorubu",yue:"kantoniešu",za:"džuanu",zap:"sapoteku",zbl:"blissimbolika",zen:"zenagu",zgh:"standarta tamazigtu (Maroka)",zh:"ķīniešu","zh-Hans":"ķīniešu vienkāršotā (mandarīnu)","zh-Hant":"ķīniešu tradicionālā (mandarīnu)",zu:"zulu",zun:"zunju",zza:"zazaki"},scriptNames:{Cyrl:"kirilica",Latn:"latīņu",Arab:"arābu",Guru:"pandžabu",Hans:"vienkāršotā",Hant:"tradicionālā"}},mg:{rtl:false,languageNames:{ak:"Akan",am:"Amharika",ar:"Arabo","ar-001":"Arabo (001)",be:"Bielorosy",bg:"Biolgara",bn:"Bengali",cs:"Tseky",de:"Alemanina","de-AT":"Alemanina (Aotrisy)","de-CH":"Alemanina (Soisa)",el:"Grika",en:"Anglisy","en-AU":"Anglisy (Aostralia)","en-CA":"Anglisy (Kanada)","en-GB":"Anglisy (Angletera)","en-US":"Anglisy (Etazonia)",es:"Espaniola","es-419":"Espaniola (419)","es-ES":"Espaniola (Espaina)","es-MX":"Espaniola (Meksika)",fa:"Persa",fr:"Frantsay","fr-CA":"Frantsay (Kanada)","fr-CH":"Frantsay (Soisa)",ha:"haoussa",hi:"hindi",hu:"hongroà",id:"Indonezianina",ig:"igbo",it:"Italianina",ja:"Japoney",jv:"Javaney",km:"khmer",ko:"Koreanina",mg:"Malagasy",ms:"Malay",my:"Birmana","nds-NL":"nds (Holanda)",ne:"Nepale",nl:"Holandey","nl-BE":"Holandey (Belzika)",pa:"Penjabi",pl:"Poloney",pt:"Portiogey","pt-BR":"Portiogey (Brezila)","pt-PT":"Portiogey (Pôrtiogala)",ro:"Romanianina","ro-MD":"Romanianina (Môldavia)",ru:"Rosianina",rw:"Roande",so:"Somalianina",sv:"Soisa","sw-CD":"sw (Repoblikan’i Kongo)",ta:"Tamoila",th:"Taioaney",tr:"Tiorka",uk:"Okrainianina",ur:"Ordò",vi:"Vietnamianina",yo:"Yôrobà",zh:"Sinoa, Mandarin","zh-Hans":"Sinoa, Mandarin (Hans)","zh-Hant":"Sinoa, Mandarin (Hant)",zu:"Zolò"},scriptNames:{}},mi:{rtl:false,languageNames:{"ar-001":"ar (001)",de:"Tiamana","de-AT":"Tiamana Atiria","de-CH":"Tiamana Ōkawa Huiterangi",en:"Ingarihi","en-AU":"Ingarihi Ahitereiriana","en-CA":"Ingarihi Kānata","en-GB":"Ingarihi Piritene","en-US":"Ingarihi Amerikana",es:"Paniora","es-419":"Paniora Amerika ki te Tonga","es-ES":"Paniora Uropi","es-MX":"Paniora Mēhikana",fr:"Wīwī","fr-CA":"Wīwī Kānata","fr-CH":"Wīwī Huiterangi",it:"Ītariana",ja:"Hapanihi",mi:"Māori","nds-NL":"nds (NL)","nl-BE":"nl (BE)",pt:"Pōtikī","pt-BR":"Pōtikī Parahi","pt-PT":"Pōtikī Uropi","ro-MD":"ro (MD)",ru:"Ruhiana","sw-CD":"sw (CD)",zh:"Hainamana","zh-Hans":"Hainamana (Māmā)","zh-Hant":"Hainamana (Tukuiho)"},scriptNames:{Cyrl:"Hīririki",Latn:"Rātina",Arab:"Arapika",Hans:"Māmā",Hant:"Tukuiho"}},mk:{rtl:false,languageNames:{aa:"афарски",ab:"апхаски",ace:"ачешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",aeb:"туниски арапски",af:"африканс",afh:"африхили",agq:"агемски",ain:"ајну",ak:"акански",akk:"акадски",akz:"алабамски",ale:"алеутски",aln:"гешки албански",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староанглиски",anp:"ангика",ar:"арапски","ar-001":"литературен арапски",arc:"арамејски",arn:"мапучки",aro:"араона",arp:"арапахо",arq:"алжирски арапски",arw:"аравачки",ary:"марокански арапски",arz:"египетски арапски",as:"асамски",asa:"асу",ase:"американски знаковен јазик",ast:"астурски",av:"аварски",avk:"котава",awa:"авади",ay:"ајмарски",az:"азербејџански",ba:"башкирски",bal:"белуџиски",ban:"балиски",bar:"баварски",bas:"баса",bax:"бамунски",bbc:"тоба",bbj:"гомала",be:"белоруски",bej:"беџа",bem:"бемба",bew:"бетавски",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"бугарски",bgn:"западен балочи",bho:"боџпури",bi:"бислама",bik:"биколски",bin:"бини",bjn:"банџарски",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгалски",bo:"тибетски",bpy:"бишнуприја",bqi:"бахтијарски",br:"бретонски",bra:"брај",brh:"брахујски",brx:"бодо",bs:"босански",bss:"акосе",bua:"бурјатски",bug:"бугиски",bum:"булу",byn:"биленски",byv:"медумба",ca:"каталонски",cad:"кадо",car:"карипски",cay:"кајуга",cch:"ацам",ccp:"чакмански",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморски",chb:"чибча",chg:"чагатајски",chk:"чучки",chm:"мариски",chn:"чинучки жаргон",cho:"чоктавски",chp:"чипевјански",chr:"черокиски",chy:"чејенски",ckb:"централнокурдски",co:"корзикански",cop:"коптски",cps:"капизнон",cr:"кри",crh:"кримскотурски",crs:"француски (Сеселва креоли)",cs:"чешки",csb:"кашупски",cu:"црковнословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргва",dav:"таита",de:"германски","de-AT":"австриски германски","de-CH":"швајцарски високо-германски",del:"делавер",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"долнолужички",dtp:"дусунски",dua:"дуала",dum:"среднохоландски",dv:"дивехи",dyo:"јола-фоњи",dyu:"џула",dz:"ѕонгка",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефик",egl:"емилијански",egy:"староегипетски",eka:"екаџук",el:"грчки",elx:"еламски",en:"англиски","en-AU":"австралиски англиски","en-CA":"канадски англиски","en-GB":"британски англиски","en-US":"американски англиски",enm:"средноанглиски",eo:"есперанто",es:"шпански","es-419":"латиноамерикански шпански","es-ES":"шпански (во Европа)","es-MX":"мексикански шпански",esu:"централнојупички",et:"естонски",eu:"баскиски",ewo:"евондо",ext:"екстремадурски",fa:"персиски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fit:"турнедаленски фински",fj:"фиџиски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"канадски француски","fr-CH":"швајцарски француски",frc:"каџунски француски",frm:"среднофранцуски",fro:"старофранцуски",frp:"франкопровансалски",frr:"севернофризиски",frs:"источнофризиски",fur:"фурлански",fy:"западнофризиски",ga:"ирски",gaa:"га",gag:"гагауски",gan:"ган",gay:"гајо",gba:"гбаја",gbz:"зороастриски дари",gd:"шкотски гелски",gez:"гиз",gil:"гилбертански",gl:"галициски",glk:"гилански",gmh:"средногорногермански",gn:"гварански",goh:"старогорногермански",gom:"гоански конкани",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"швајцарски германски",gu:"гуџарати",guc:"гвахиро",gur:"фарефаре",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хајда",hak:"хака",haw:"хавајски",he:"хебрејски",hi:"хинди",hif:"фиџиски хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмонг",ho:"хири моту",hr:"хрватски",hsb:"горнолужички",hsn:"сјанг",ht:"хаитски",hu:"унгарски",hup:"хупа",hy:"ерменски",hz:"хереро",ia:"интерлингва",iba:"ибан",ibb:"ибибио",id:"индонезиски",ie:"окцидентал",ig:"игбо",ii:"сичуан ји",ik:"инупијачки",ilo:"илокански",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитут",izh:"ижорски",ja:"јапонски",jam:"јамајски креолски",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврејскоперсиски",jrb:"еврејскоарапски",jut:"јитски",jv:"јавански",ka:"грузиски",kaa:"каракалпачки",kab:"кабилски",kac:"качински",kaj:"каџе",kam:"камба",kaw:"кави",kbd:"кабардински",kbl:"канембу",kcg:"тјап",kde:"маконде",kea:"кабувердиану",ken:"кењанг",kfo:"коро",kg:"конго",kgp:"каинганшки",kha:"каси",kho:"хотански",khq:"којра чиини",khw:"коварски",ki:"кикују",kiu:"зазаки",kj:"квањама",kk:"казашки",kkj:"како",kl:"калалисут",kln:"каленџин",km:"кмерски",kmb:"кимбунду",kn:"каннада",ko:"корејски",koi:"коми-пермјачки",kok:"конкани",kos:"козрејски",kpe:"кпеле",kr:"канури",krc:"карачаевско-балкарски",kri:"крио",krj:"кинарајски",krl:"карелски",kru:"курух",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"колоњски",ku:"курдски",kum:"кумички",kut:"кутенајски",kv:"коми",kw:"корнски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lfn:"лингва франка нова",lg:"ганда",li:"лимбуршки",lij:"лигурски",liv:"ливонски",lkt:"лакотски",lmo:"ломбардиски",ln:"лингала",lo:"лаошки",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"севернолуриски",lt:"литвански",ltg:"латгалски",lu:"луба-катанга",lua:"луба-лулуа",lui:"лујсењски",lun:"лунда",luo:"луо",lus:"мизо",luy:"луја",lv:"латвиски",lzh:"книжевен кинески",lzz:"ласки",mad:"мадурски",maf:"мафа",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mde:"маба",mdf:"мокшански",mdr:"мандарски",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средноирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајамски",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохавски",mos:"моси",mr:"марати",mrj:"западномариски",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"крик",mwl:"мирандски",mwr:"марвари",my:"бурмански",mye:"мјене",myv:"ерзјански",mzn:"мазендерански",na:"науруански",nan:"јужномински",nap:"неаполски",naq:"нама",nb:"норвешки букмол",nd:"северен ндебеле",nds:"долногермански","nds-NL":"долносаксонски",ne:"непалски","new":"неварски",ng:"ндонга",nia:"нијас",niu:"ниујески",njo:"ао нага",nl:"холандски","nl-BE":"фламански",nmg:"квазио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордиски",nov:"новијал",nqo:"нко",nr:"јужен ндебеле",nso:"северносотски",nus:"нуер",nv:"навахо",nwc:"класичен неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибва",om:"оромо",or:"одија",os:"осетски",osa:"осашки",ota:"отомански турски",pa:"пенџапски",pag:"пангасинански",pal:"средноперсиски",pam:"пампанга",pap:"папијаменто",pau:"палауански",pcd:"пикардски",pcm:"нигериски пиџин",pdc:"пенсилваниски германски",pdt:"менонитски долногермански",peo:"староперсиски",pfl:"фалечкогермански",phn:"феникиски",pi:"пали",pl:"полски",pms:"пиемонтски",pnt:"понтски",pon:"понпејски",prg:"пруски",pro:"старопровансалски",ps:"паштунски",pt:"португалски","pt-BR":"бразилски португалски","pt-PT":"португалски (во Европа)",qu:"кечуански",quc:"киче",qug:"кичвански",raj:"раџастански",rap:"рапанујски",rar:"раротонгански",rgn:"ромањолски",rif:"рифски",rm:"реторомански",rn:"рунди",ro:"романски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"корен",rtm:"ротумански",ru:"руски",rue:"русински",rug:"ровијански",rup:"влашки",rw:"руандски",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"јакутски",sam:"самарјански арамејски",saq:"самбуру",sas:"сасачки",sat:"сантали",saz:"саураштра",sba:"нгембеј",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски германски",sd:"синди",sdc:"сасарски сардински",sdh:"јужнокурдски",se:"северен сами",see:"сенека",seh:"сена",sei:"сери",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sgs:"самогитски",sh:"српскохрватски",shi:"тачелхит",shn:"шан",shu:"чадски арапски",si:"синхалски",sid:"сидамо",sk:"словачки",sl:"словенечки",sli:"долношлезиски",sly:"селајарски",sm:"самоански",sma:"јужен сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалиски",sog:"зогдијански",sq:"албански",sr:"српски",srn:"срански тонго",srr:"серер",ss:"свати",ssy:"сахо",st:"сесото",stq:"затерландски фризиски",su:"сундски",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"конгоански свахили",swb:"коморијански",syc:"класичен сириски",syr:"сириски",szl:"шлезиски",ta:"тамилски",tcy:"тулу",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџикистански",th:"тајландски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелауански",tkr:"цахурски",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tly:"талишки",tmh:"тамашек",tn:"цвана",to:"тонгајски",tog:"њаса тонга",tpi:"ток писин",tr:"турски",tru:"туројо",trv:"тароко",ts:"цонга",tsd:"цаконски",tsi:"цимшијански",tt:"татарски",ttt:"татски",tum:"тумбука",tvl:"тувалуански",tw:"тви",twq:"тазавак",ty:"тахитски",tyv:"тувански",tzm:"централноатлански тамазитски",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"вај",ve:"венда",vec:"венетски",vep:"вепшки",vi:"виетнамски",vls:"западнофламански",vmf:"мајнскофранконски",vo:"волапик",vot:"вотски",vro:"виру",vun:"вунџо",wa:"валонски",wae:"валсер",wal:"воламо",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волофски",wuu:"ву",xal:"калмички",xh:"коса",xmf:"мегрелски",xog:"сога",yao:"јао",yap:"јапски",yav:"јенгбен",ybb:"јемба",yi:"јидиш",yo:"јорупски",yrl:"њенгату",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блиссимболи",zea:"зеландски",zen:"зенага",zgh:"стандарден марокански тамазитски",zh:"кинески","zh-Hans":"поедноставен мандарински","zh-Hant":"традиционален мандарински",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилско писмо",Latn:"латинично писмо",Arab:"арапско писмо",Guru:"гурмуки",Tfng:"тифинаг",Vaii:"вај",Hans:"поедноставено",Hant:"традиционално"}},ml:{rtl:false,languageNames:{aa:"അഫാർ",ab:"അബ്‌ഖാസിയൻ",ace:"അചിനീസ്",ach:"അകോലി",ada:"അഡാങ്‌മി",ady:"അഡൈഗേ",ae:"അവസ്റ്റാൻ",af:"ആഫ്രിക്കാൻസ്",afh:"ആഫ്രിഹിലി",agq:"ആഘേം",ain:"ഐനു",ak:"അകാൻ‌",akk:"അക്കാഡിയൻ",ale:"അലൂട്ട്",alt:"തെക്കൻ അൾത്തായി",am:"അംഹാരിക്",an:"അരഗോണീസ്",ang:"പഴയ ഇംഗ്ലീഷ്",anp:"ആൻഗിക",ar:"അറബിക്","ar-001":"ആധുനിക സ്റ്റാൻഡേർഡ് അറബിക്",arc:"അരമായ",arn:"മാപുചി",arp:"അറാപഹോ",arw:"അറാവക്",as:"ആസ്സാമീസ്",asa:"ആസു",ast:"ഓസ്‌ട്രിയൻ",av:"അവാരിക്",awa:"അവാധി",ay:"അയ്മാറ",az:"അസർബൈജാനി",ba:"ബഷ്ഖിർ",bal:"ബലൂചി",ban:"ബാലിനീസ്",bas:"ബസ",bax:"ബാമുൻ",bbj:"ഘോമാല",be:"ബെലാറുഷ്യൻ",bej:"ബേജ",bem:"ബേംബ",bez:"ബെനാ",bfd:"ബാഫട്ട്",bg:"ബൾഗേറിയൻ",bgn:"പശ്ചിമ ബലൂചി",bho:"ഭോജ്‌പുരി",bi:"ബിസ്‌ലാമ",bik:"ബികോൽ",bin:"ബിനി",bkm:"കോം",bla:"സിക്സിക",bm:"ബംബാറ",bn:"ബംഗാളി",bo:"ടിബറ്റൻ",br:"ബ്രെട്ടൺ",bra:"ബ്രജ്",brx:"ബോഡോ",bs:"ബോസ്നിയൻ",bss:"അക്കൂസ്",bua:"ബുറിയത്ത്",bug:"ബുഗിനീസ്",bum:"ബുളു",byn:"ബ്ലിൻ",byv:"മെഡുംബ",ca:"കറ്റാലാൻ",cad:"കാഡോ",car:"കാരിബ്",cay:"കയൂഗ",cch:"അറ്റ്സാം",ccp:"ചക്‌മ",ce:"ചെചൻ",ceb:"സെബുവാനോ",cgg:"ചിഗ",ch:"ചമോറോ",chb:"ചിബ്ച",chg:"ഷാഗതായ്",chk:"ചൂകീസ്",chm:"മാരി",chn:"ചിനൂഗ് ജാർഗൺ",cho:"ചോക്റ്റാവ്",chp:"ചിപേവ്യൻ",chr:"ഷെരോക്കി",chy:"ഷായാൻ",ckb:"സെൻട്രൽ കുർദിഷ്",co:"കോർസിക്കൻ",cop:"കോപ്റ്റിക്",cr:"ക്രീ",crh:"ക്രിമിയൻ ടർക്കിഷ്",crs:"സെഷൽവ ക്രിയോൾ ഫ്രഞ്ച്",cs:"ചെക്ക്",csb:"കാഷുബിയാൻ",cu:"ചർച്ച് സ്ലാവിക്",cv:"ചുവാഷ്",cy:"വെൽഷ്",da:"ഡാനിഷ്",dak:"ഡകോട്ട",dar:"ഡർഗ്വാ",dav:"തൈത",de:"ജർമ്മൻ","de-AT":"ഓസ്‌ട്രിയൻ ജർമൻ","de-CH":"സ്വിസ് ഹൈ ജർമൻ",del:"ദെലവേർ",den:"സ്ലേവ്",dgr:"ഡോഗ്രിബ്",din:"ദിൻക",dje:"സാർമ്മ",doi:"ഡോഗ്രി",dsb:"ലോവർ സോർബിയൻ",dua:"ദ്വാല",dum:"മദ്ധ്യ ഡച്ച്",dv:"ദിവെഹി",dyo:"യോല-ഫോന്യി",dyu:"ദ്വൈല",dz:"ദ്‌സോങ്ക",dzg:"ഡാസാഗ",ebu:"എംബു",ee:"യൂവ്",efi:"എഫിക്",egy:"പ്രാചീന ഈജിപ്ഷ്യൻ",eka:"എകാജുക്",el:"ഗ്രീക്ക്",elx:"എലാമൈറ്റ്",en:"ഇംഗ്ലീഷ്","en-AU":"ഓസ്‌ട്രേലിയൻ ഇംഗ്ലീഷ്","en-CA":"കനേഡിയൻ ഇംഗ്ലീഷ്","en-GB":"ബ്രിട്ടീഷ് ഇംഗ്ലീഷ്","en-US":"അമേരിക്കൻ ഇംഗ്ലീഷ്",enm:"മദ്ധ്യ ഇംഗ്ലീഷ്",eo:"എസ്‌പരാന്റോ",es:"സ്‌പാനിഷ്","es-419":"ലാറ്റിൻ അമേരിക്കൻ സ്‌പാനിഷ്","es-ES":"യൂറോപ്യൻ സ്‌പാനിഷ്","es-MX":"മെക്സിക്കൻ സ്പാനിഷ്",et:"എസ്റ്റോണിയൻ",eu:"ബാസ്‌ക്",ewo:"എവോൻഡോ",fa:"പേർഷ്യൻ",fan:"ഫങ്",fat:"ഫാന്റി",ff:"ഫുല",fi:"ഫിന്നിഷ്",fil:"ഫിലിപ്പിനോ",fj:"ഫിജിയൻ",fo:"ഫാറോസ്",fon:"ഫോൻ",fr:"ഫ്രഞ്ച്","fr-CA":"കനേഡിയൻ ഫ്രഞ്ച്","fr-CH":"സ്വിസ് ഫ്രഞ്ച്",frc:"കേജൺ ഫ്രഞ്ച്",frm:"മദ്ധ്യ ഫ്രഞ്ച്",fro:"പഴയ ഫ്രഞ്ച്",frr:"നോർത്തേൻ ഫ്രിഷ്യൻ",frs:"ഈസ്റ്റേൺ ഫ്രിഷ്യൻ",fur:"ഫ്രിയുലിയാൻ",fy:"പശ്ചിമ ഫ്രിഷിയൻ",ga:"ഐറിഷ്",gaa:"ഗാ",gag:"ഗാഗൂസ്",gan:"ഗാൻ ചൈനീസ്",gay:"ഗയൊ",gba:"ഗബ്യ",gd:"സ്കോട്ടിഷ് ഗൈലിക്",gez:"ഗീസ്",gil:"ഗിൽബർട്ടീസ്",gl:"ഗലീഷ്യൻ",gmh:"മദ്ധ്യ ഉച്ച ജർമൻ",gn:"ഗ്വരനീ",goh:"ഓൾഡ് ഹൈ ജർമൻ",gon:"ഗോണ്ഡി",gor:"ഗൊറോന്റാലോ",got:"ഗോഥിക്ക്",grb:"ഗ്രബൊ",grc:"പുരാതന ഗ്രീക്ക്",gsw:"സ്വിസ് ജർമ്മൻ",gu:"ഗുജറാത്തി",guz:"ഗുസീ",gv:"മാൻസ്",gwi:"ഗ്വിച്ചിൻ",ha:"ഹൗസ",hai:"ഹൈഡ",hak:"ഹാക്ക ചൈനീസ്",haw:"ഹവായിയൻ",he:"ഹീബ്രു",hi:"ഹിന്ദി",hil:"ഹിലിഗയ്നോൺ",hit:"ഹിറ്റൈറ്റ്",hmn:"മോങ്",ho:"ഹിരി മോതു",hr:"ക്രൊയേഷ്യൻ",hsb:"അപ്പർ സോർബിയൻ",hsn:"ഷ്യാങ് ചൈനീസ്",ht:"ഹെയ്‌തിയൻ ക്രിയോൾ",hu:"ഹംഗേറിയൻ",hup:"ഹൂപ",hy:"അർമേനിയൻ",hz:"ഹെരേരൊ",ia:"ഇന്റർലിംഗ്വ",iba:"ഇബാൻ",ibb:"ഇബീബിയോ",id:"ഇന്തോനേഷ്യൻ",ie:"ഇന്റർലിംഗ്വേ",ig:"ഇഗ്ബോ",ii:"ഷുവാൻയി",ik:"ഇനുപിയാക്",ilo:"ഇലോകോ",inh:"ഇംഗ്വിഷ്",io:"ഇഡോ",is:"ഐസ്‌ലാൻഡിക്",it:"ഇറ്റാലിയൻ",iu:"ഇനുക്റ്റിറ്റട്ട്",ja:"ജാപ്പനീസ്",jbo:"ലോജ്ബാൻ",jgo:"ഗോമ്പ",jmc:"മചേം",jpr:"ജൂഡിയോ-പേർഷ്യൻ",jrb:"ജൂഡിയോ-അറബിക്",jv:"ജാവാനീസ്",ka:"ജോർജിയൻ",kaa:"കര-കാൽപ്പക്",kab:"കബൈൽ",kac:"കാചിൻ",kaj:"ജ്ജു",kam:"കംബ",kaw:"കാവി",kbd:"കബർഡിയാൻ",kbl:"കനെംബു",kcg:"ട്യാപ്",kde:"മക്കോണ്ടെ",kea:"കബുവെർദിയാനു",kfo:"കോറോ",kg:"കോംഗോ",kha:"ഘാസി",kho:"ഘോറ്റാനേസേ",khq:"കൊയ്റ ചീനി",ki:"കികൂയു",kj:"ക്വാന്യമ",kk:"കസാഖ്",kkj:"കാകോ",kl:"കലാല്ലിസട്ട്",kln:"കലെഞ്ഞിൻ",km:"ഖമെർ",kmb:"കിംബുണ്ടു",kn:"കന്നഡ",ko:"കൊറിയൻ",koi:"കോമി-പെർമ്യാക്ക്",kok:"കൊങ്കണി",kos:"കൊസറേയൻ",kpe:"കപെല്ലേ",kr:"കനൂറി",krc:"കരചൈ-ബാൽകർ",krl:"കരീലിയൻ",kru:"കുരുഖ്",ks:"കാശ്‌മീരി",ksb:"ഷംഭാള",ksf:"ബാഫിയ",ksh:"കൊളോണിയൻ",ku:"കുർദ്ദിഷ്",kum:"കുമൈക്",kut:"കുതേനൈ",kv:"കോമി",kw:"കോർണിഷ്",ky:"കിർഗിസ്",la:"ലാറ്റിൻ",lad:"ലാഡിനോ",lag:"ലാംഗി",lah:"ലഹ്‌ൻഡ",lam:"ലംബ",lb:"ലക്‌സംബർഗിഷ്",lez:"ലഹ്ഗിയാൻ",lg:"ഗാണ്ട",li:"ലിംബർഗിഷ്",lkt:"ലഗോത്ത",ln:"ലിംഗാല",lo:"ലാവോ",lol:"മോങ്കോ",lou:"ലൂസിയാന ക്രിയോൾ",loz:"ലൊസി",lrc:"വടക്കൻ ലൂറി",lt:"ലിത്വാനിയൻ",lu:"ലുബ-കറ്റംഗ",lua:"ലൂബ-ലുലുവ",lui:"ലൂയിസെനോ",lun:"ലുൻഡ",luo:"ലുവോ",lus:"മിസോ",luy:"ലുയിയ",lv:"ലാറ്റ്വിയൻ",mad:"മദുരേസേ",maf:"മാഫ",mag:"മഗാഹി",mai:"മൈഥിലി",mak:"മകാസർ",man:"മണ്ഡിൻഗോ",mas:"മസായ്",mde:"മാബ",mdf:"മോക്ഷ",mdr:"മണ്ഡാർ",men:"മെൻഡെ",mer:"മേരു",mfe:"മൊറിസിൻ",mg:"മലഗാസി",mga:"മദ്ധ്യ ഐറിഷ്",mgh:"മാഖുവാ-മീത്തോ",mgo:"മേത്താ",mh:"മാർഷല്ലീസ്",mi:"മവോറി",mic:"മിക്മാക്",min:"മിനാങ്കബൗ",mk:"മാസിഡോണിയൻ",ml:"മലയാളം",mn:"മംഗോളിയൻ",mnc:"മാൻ‌ചു",mni:"മണിപ്പൂരി",moh:"മോഹാക്",mos:"മൊസ്സി",mr:"മറാത്തി",ms:"മലെയ്",mt:"മാൾട്ടീസ്",mua:"മുന്ദാംഗ്",mus:"ക്രീക്ക്",mwl:"മിരാൻറസേ",mwr:"മർവാരി",my:"ബർമീസ്",mye:"മയീൻ",myv:"ഏഴ്സ്യ",mzn:"മസന്ററാനി",na:"നൗറു",nan:"മിൻ നാൻ ചൈനീസ്",nap:"നെപ്പോളിറ്റാൻ",naq:"നാമ",nb:"നോർവീജിയൻ ബുക്‌മൽ",nd:"നോർത്ത് ഡെബിൾ",nds:"ലോ ജർമൻ","nds-NL":"ലോ സാക്സൺ",ne:"നേപ്പാളി","new":"നേവാരി",ng:"ഡോങ്ക",nia:"നിയാസ്",niu:"ന്യുവാൻ",nl:"ഡച്ച്","nl-BE":"ഫ്ലമിഷ്",nmg:"ക്വാസിയോ",nn:"നോർവീജിയൻ നൈനോർക്‌സ്",nnh:"ഗീംബൂൺ",no:"നോർവീജിയൻ",nog:"നോഗൈ",non:"പഴയ നോഴ്‌സ്",nqo:"ഇൻകോ",nr:"ദക്ഷിണ നെഡിബിൾ",nso:"നോർത്തേൻ സോതോ",nus:"നുവേർ",nv:"നവാജോ",nwc:"ക്ലാസിക്കൽ നേവാരി",ny:"ന്യൻജ",nym:"ന്യാംവേസി",nyn:"ന്യാൻകോൾ",nyo:"ന്യോറോ",nzi:"സിമ",oc:"ഓക്‌സിറ്റൻ",oj:"ഓജിബ്വാ",om:"ഒറോമോ",or:"ഒഡിയ",os:"ഒസ്സെറ്റിക്",osa:"ഒസേജ്",ota:"ഓട്ടോമൻ തുർക്കിഷ്",pa:"പഞ്ചാബി",pag:"പങ്കാസിനൻ",pal:"പാഹ്ലവി",pam:"പാംപൻഗ",pap:"പാപിയാമെന്റൊ",pau:"പലാവുൻ",pcm:"നൈജീരിയൻ പിഡ്‌ഗിൻ",peo:"പഴയ പേർഷ്യൻ",phn:"ഫീനിഷ്യൻ",pi:"പാലി",pl:"പോളിഷ്",pon:"പൊൻപിയൻ",prg:"പ്രഷ്യൻ",pro:"പഴയ പ്രൊവൻഷ്ൽ",ps:"പഷ്‌തോ",pt:"പോർച്ചുഗീസ്","pt-BR":"ബ്രസീലിയൻ പോർച്ചുഗീസ്","pt-PT":"യൂറോപ്യൻ പോർച്ചുഗീസ്",qu:"ക്വെച്ചുവ",quc:"ക്വിച്ചെ",raj:"രാജസ്ഥാനി",rap:"രാപനൂയി",rar:"രാരോടോങ്കൻ",rm:"റൊമാഞ്ച്",rn:"റുണ്ടി",ro:"റൊമാനിയൻ","ro-MD":"മോൾഡാവിയൻ",rof:"റോംബോ",rom:"റൊമാനി",root:"മൂലഭാഷ",ru:"റഷ്യൻ",rup:"ആരോമാനിയൻ",rw:"കിന്യാർവാണ്ട",rwk:"റുവാ",sa:"സംസ്‌കൃതം",sad:"സാൻഡവേ",sah:"സാഖ",sam:"സമരിയാക്കാരുടെ അരമായ",saq:"സംബുരു",sas:"സസാക്",sat:"സന്താലി",sba:"ഗംബായ്",sbp:"സംഗു",sc:"സർഡിനിയാൻ",scn:"സിസിലിയൻ",sco:"സ്കോട്സ്",sd:"സിന്ധി",sdh:"തെക്കൻ കുർദ്ദിഷ്",se:"വടക്കൻ സമി",see:"സെനേക",seh:"സേന",sel:"സെൽകപ്",ses:"കൊയ്റാബൊറോ സെന്നി",sg:"സാംഗോ",sga:"പഴയ ഐറിഷ്",sh:"സെർബോ-ക്രൊയേഷ്യൻ",shi:"താച്ചലിറ്റ്",shn:"ഷാൻ",shu:"ചാഡിയൻ അറബി",si:"സിംഹള",sid:"സിഡാമോ",sk:"സ്ലോവാക്",sl:"സ്ലോവേനിയൻ",sm:"സമോവൻ",sma:"തെക്കൻ സമി",smj:"ലൂലീ സമി",smn:"ഇനാരി സമി",sms:"സ്കോൾട്ട് സമി",sn:"ഷോണ",snk:"സോണിൻകെ",so:"സോമാലി",sog:"സോജിഡിയൻ",sq:"അൽബേനിയൻ",sr:"സെർബിയൻ",srn:"ശ്രാനൻ ഡോങ്കോ",srr:"സെറർ",ss:"സ്വാറ്റി",ssy:"സാഹോ",st:"തെക്കൻ സോതോ",su:"സുണ്ടാനീസ്",suk:"സുകുമ",sus:"സുസു",sux:"സുമേരിയൻ",sv:"സ്വീഡിഷ്",sw:"സ്വാഹിലി","sw-CD":"കോംഗോ സ്വാഹിലി",swb:"കൊമോറിയൻ",syc:"പുരാതന സുറിയാനിഭാഷ",syr:"സുറിയാനി",ta:"തമിഴ്",te:"തെലുങ്ക്",tem:"ടിംനേ",teo:"ടെസോ",ter:"ടെറേനോ",tet:"ടെറ്റും",tg:"താജിക്",th:"തായ്",ti:"ടൈഗ്രിന്യ",tig:"ടൈഗ്രി",tiv:"ടിവ്",tk:"തുർക്‌മെൻ",tkl:"ടൊക്കേലൗ",tl:"തഗാലോഗ്",tlh:"ക്ലിംഗോൺ",tli:"ലിംഗ്വിറ്റ്",tmh:"ടമഷേക്",tn:"സ്വാന",to:"ടോംഗൻ",tog:"ന്യാസാ ഡോങ്ക",tpi:"ടോക് പിസിൻ",tr:"ടർക്കിഷ്",trv:"തരോക്കോ",ts:"സോംഗ",tsi:"സിംഷ്യൻ",tt:"ടാട്ടർ",tum:"ടുംബുക",tvl:"ടുവാലു",tw:"ട്വി",twq:"ടസവാക്ക്",ty:"താഹിതിയൻ",tyv:"തുവിനിയൻ",tzm:"മധ്യ അറ്റ്‌ലസ് ടമാസൈറ്റ്",udm:"ഉഡ്മുർട്ട്",ug:"ഉയ്ഘുർ",uga:"ഉഗറിട്ടിക്",uk:"ഉക്രേനിയൻ",umb:"ഉംബുന്ദു",ur:"ഉറുദു",uz:"ഉസ്‌ബെക്ക്",vai:"വൈ",ve:"വെന്ദ",vi:"വിയറ്റ്നാമീസ്",vo:"വോളാപുക്",vot:"വോട്ടിക്",vun:"വുൻജോ",wa:"വല്ലൂൺ",wae:"വാൾസർ",wal:"വൊലൈറ്റ",war:"വാരേയ്",was:"വാഷൊ",wbp:"വൂൾപിരി",wo:"വൊളോഫ്",wuu:"വു ചൈനീസ്",xal:"കൽമൈക്",xh:"ഖോസ",xog:"സോഗോ",yao:"യാവോ",yap:"യെപ്പീസ്",yav:"യാംഗ്ബെൻ",ybb:"യംബ",yi:"യിദ്ദിഷ്",yo:"യൊറൂബാ",yue:"കാന്റണീസ്",za:"സ്വാംഗ്",zap:"സാപ്പോടെക്",zbl:"ബ്ലിസ്സിംബൽസ്",zen:"സെനഗ",zgh:"സ്റ്റാൻഡേർഡ് മൊറോക്കൻ റ്റാമസിയറ്റ്",zh:"ചൈനീസ്","zh-Hans":"ചൈനീസ് (ലളിതവൽക്കരിച്ചത്)","zh-Hant":"ചൈനീസ് (പരമ്പരാഗതം)",zu:"സുലു",zun:"സുനി",zza:"സാസാ"},scriptNames:{Cyrl:"സിറിലിക്",Latn:"ലാറ്റിൻ",Arab:"അറബിക്",Guru:"ഗുരുമുഖി",Tfng:"തിഫിനാഗ്",Vaii:"വൈ",Hans:"ലളിതവൽക്കരിച്ചത്",Hant:"പരമ്പരാഗതം"}},mn:{rtl:false,languageNames:{aa:"афар",ab:"абхаз",ace:"ачин",ada:"адангмэ",ady:"адигэ",af:"африкаанс",agq:"агем",ain:"айну",ak:"акан",ale:"алют",alt:"өмнөд алтай",am:"амхар",an:"арагон",anp:"ангик",ar:"араб","ar-001":"стандарт араб",arn:"мапүчи",arp:"арапаго",as:"ассам",asa:"асу",ast:"астури",av:"авар",awa:"авадхи",ay:"аймара",az:"азербайжан",ba:"башкир",ban:"бали",bas:"басаа",be:"беларусь",bem:"бемба",bez:"бена",bg:"болгар",bho:"божпури",bi:"бислам",bin:"бини",bla:"сиксика",bm:"бамбара",bn:"бенгал",bo:"төвд",br:"бретон",brx:"бодо",bs:"босни",bug:"буги",byn:"блин",ca:"каталан",ccp:"чакма",ce:"чечень",ceb:"себуано",cgg:"чига",ch:"чаморро",chk:"чуук",chm:"мари хэл",cho:"чоктау",chr:"чероки",chy:"чэенн",ckb:"төв курд",co:"корсик",crs:"сеселва креол франц",cs:"чех",cu:"сүмийн славян",cv:"чуваш",cy:"уэльс",da:"дани",dak:"дакота",dar:"даргва",dav:"тайта",de:"герман","de-AT":"австри-герман","de-CH":"швейцарь-герман",dgr:"догриб",dje:"зарма",dsb:"доод сорби",dua:"дуала",dv:"дивехи",dyo:"жола-фони",dz:"зонха",dzg:"дазага",ebu:"эмбу",ee:"эвэ",efi:"эфик",eka:"экажук",el:"грек",en:"англи","en-AU":"австрали-англи","en-CA":"канад-англи","en-GB":"британи-англи","en-US":"америк-англи",eo:"эсперанто",es:"испани","es-419":"испани хэл (Латин Америк)","es-ES":"испани хэл (Европ)","es-MX":"испани хэл (Мексик)",et:"эстони",eu:"баск",ewo:"эвондо",fa:"перс",ff:"фула",fi:"фин",fil:"филипино",fj:"фижи",fo:"фарер",fon:"фон",fr:"франц","fr-CA":"канад-франц","fr-CH":"швейцари-франц",fur:"фриулан",fy:"баруун фриз",ga:"ирланд",gaa:"га",gag:"гагуз",gd:"шотландын гел",gez:"гийз",gil:"гилберт",gl:"галего",gn:"гуарани",gor:"горонтало",gsw:"швейцари-герман",gu:"гужарати",guz:"гузы",gv:"манкс",gwi:"гвичин",ha:"хауса",haw:"хавай",he:"еврей",hi:"хинди",hil:"хилигайнон",hmn:"хмонг",hr:"хорват",hsb:"дээд сорби",ht:"Гаитийн креол",hu:"мажар",hup:"хупа",hy:"армен",hz:"хереро",ia:"интерлингво",iba:"ибан",ibb:"ибибио",id:"индонези",ie:"нэгдмэл хэл",ig:"игбо",ii:"сычуань и",ilo:"илоко",inh:"ингуш",io:"идо",is:"исланд",it:"итали",iu:"инуктитут",ja:"япон",jbo:"ложбан",jgo:"нгомба",jmc:"мачамэ",jv:"ява",ka:"гүрж",kab:"кабиле",kac:"качин",kaj:"жжу",kam:"камба",kbd:"кабардин",kcg:"тяп",kde:"маконде",kea:"кабүвердиану",kfo:"коро",kha:"каси",khq:"койра чини",ki:"кикуюү",kj:"куаньяма",kk:"казах",kkj:"како",kl:"калалисут",kln:"каленжин",km:"кхмер",kmb:"кимбунду",kn:"каннада",ko:"солонгос",koi:"коми-пермяк",kok:"конкани",kpe:"кпелле",kr:"канури",krc:"карачай-балкар",krl:"карель",kru:"курук",ks:"кашмир",ksb:"шамбал",ksf:"бафиа",ksh:"кёльш",ku:"курд",kum:"кумук",kv:"коми",kw:"корн",ky:"киргиз",la:"латин",lad:"ладин",lag:"ланги",lb:"люксембург",lez:"лезги",lg:"ганда",li:"лимбург",lkt:"лакота",ln:"лингала",lo:"лаос",loz:"лози",lrc:"хойд лури",lt:"литва",lu:"луба-катанга",lua:"луба-лулуа",lun:"лунда",luo:"луо",lus:"мизо",luy:"луяа",lv:"латви",mad:"мадури хэл",mag:"магахи",mai:"май",mak:"макасар",mas:"масай",mdf:"мокша",men:"менде",mer:"меру",mfe:"морисен",mg:"малагаси",mgh:"макува-мито",mgo:"мета",mh:"маршалл",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македон",ml:"малаялам",mn:"монгол",mni:"манипури",moh:"мохаук",mos:"мосси",mr:"марати",ms:"малай",mt:"малта",mua:"мунданг",mus:"крик",mwl:"меранди",my:"бирм",myv:"эрзя",mzn:"мазандерани",na:"науру",nap:"неаполитан",naq:"нама",nb:"норвегийн букмол",nd:"хойд ндебеле",nds:"доод герман","nds-NL":"бага саксон",ne:"балба","new":"невари",ng:"ндонга",nia:"ниас хэл",niu:"ниуэ",nl:"нидерланд","nl-BE":"фламанд",nmg:"квазио",nn:"норвегийн нинорск",nnh:"нгиембүүн",no:"норвеги",nog:"ногаи",nqo:"нко",nr:"өмнөд ндебеле",nso:"хойд сото",nus:"нуер",nv:"навахо",ny:"нянжа",nyn:"нянколе",oc:"окситан",om:"оромо",or:"ория",os:"оссетин",pa:"панжаби",pag:"пангасин",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийн пиджин",pl:"польш",prg:"прусс",ps:"пушту",pt:"португал","pt-BR":"португал хэл (Бразил)","pt-PT":"португал хэл (Европ)",qu:"кечуа",quc:"киче",rap:"рапануи",rar:"раротонг",rm:"романш",rn:"рунди",ro:"румын","ro-MD":"молдав",rof:"ромбо",root:"рут",ru:"орос",rup:"ароманы",rw:"киньяруанда",rwk:"рва",sa:"санскрит",sad:"сандавэ",sah:"саха",saq:"самбүрү",sat:"сантали",sba:"нгамбай",sbp:"сангү",sc:"сардин",scn:"сицил",sco:"шотланд",sd:"синдхи",se:"хойд сами",seh:"сена",ses:"кёраборо сени",sg:"санго",sh:"хорватын серб",shi:"тачелхит",shn:"шань",si:"синхала",sk:"словак",sl:"словени",sm:"самоа",sma:"өмнөд сами",smj:"люле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомали",sq:"албани",sr:"серб",srn:"сранан тонго",ss:"свати",ssy:"сахо",st:"сесото",su:"сундан",suk:"сукума",sv:"швед",sw:"свахили","sw-CD":"конгогийн свахили",swb:"комори",syr:"сири",ta:"тамил",te:"тэлүгү",tem:"тимн",teo:"тэсо",tet:"тетум",tg:"тажик",th:"тай",ti:"тигринья",tig:"тигр",tk:"туркмен",tlh:"клингон",tn:"цвана",to:"тонга",tpi:"ток писин",tr:"турк",trv:"тароко",ts:"цонга",tt:"татар",tum:"тумбула",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таити",tyv:"тува",tzm:"Төв Атласын тамазигхт",udm:"удмурт",ug:"уйгур",uk:"украин",umb:"умбунду",ur:"урду",uz:"узбек",vai:"вай",ve:"венда",vi:"вьетнам",vo:"волапюк",vun:"вунжо",wa:"уоллун",wae:"уолсэр",wal:"уоллайтта",war:"варай",wo:"волоф",xal:"халимаг",xh:"хоса",xog:"сога",yav:"янгбен",ybb:"емба",yi:"иддиш",yo:"ёруба",yue:"кантон",zgh:"стандарт тамазайт (Морокко)",zh:"хятад","zh-Hans":"хялбаршуулсан мандарин хятад","zh-Hant":"уламжлалт мандарин хятад",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"кирилл",Latn:"латин",Arab:"араб",Guru:"гүрмүх",Hans:"хялбаршуулсан",Hant:"уламжлалт"}},ms:{rtl:false,languageNames:{aa:"Afar",ab:"Abkhazia",ace:"Aceh",ach:"Akoli",ada:"Adangme",ady:"Adyghe",ae:"Avestan",aeb:"Arab Tunisia",af:"Afrikaans",agq:"Aghem",ain:"Ainu",ak:"Akan",ale:"Aleut",alt:"Altai Selatan",am:"Amharic",an:"Aragon",anp:"Angika",ar:"Arab","ar-001":"Arab Standard Moden",arn:"Mapuche",arp:"Arapaho",arq:"Arab Algeria",ars:"Arab Najdi",ary:"Arab Maghribi",arz:"Arab Mesir",as:"Assam",asa:"Asu",ast:"Asturia",av:"Avaric",awa:"Awadhi",ay:"Aymara",az:"Azerbaijan",ba:"Bashkir",bal:"Baluchi",ban:"Bali",bas:"Basaa",bax:"Bamun",bbj:"Ghomala",be:"Belarus",bej:"Beja",bem:"Bemba",bez:"Bena",bfd:"Bafut",bg:"Bulgaria",bgn:"Balochi Barat",bho:"Bhojpuri",bi:"Bislama",bin:"Bini",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Benggala",bo:"Tibet",bpy:"Bishnupriya",br:"Breton",brh:"Brahui",brx:"Bodo",bs:"Bosnia",bss:"Akoose",bua:"Buriat",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalonia",cay:"Cayuga",ccp:"Chakma",ce:"Chechen",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chk:"Chukese",chm:"Mari",cho:"Choctaw",chr:"Cherokee",chy:"Cheyenne",ckb:"Kurdi Sorani",co:"Corsica",cop:"Coptic",crh:"Turki Krimea",crs:"Perancis Seselwa Creole",cs:"Czech",cu:"Slavik Gereja",cv:"Chuvash",cy:"Wales",da:"Denmark",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Jerman","de-AT":"Jerman Austria","de-CH":"Jerman Halus Switzerland",dgr:"Dogrib",dje:"Zarma",doi:"Dogri",dsb:"Sorbian Rendah",dua:"Duala",dv:"Divehi",dyo:"Jola-Fonyi",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",eka:"Ekajuk",el:"Greek",en:"Inggeris","en-AU":"Inggeris Australia","en-CA":"Inggeris Kanada","en-GB":"Inggeris British","en-US":"Inggeris AS",eo:"Esperanto",es:"Sepanyol","es-419":"Sepanyol Amerika Latin","es-ES":"Sepanyol Eropah","es-MX":"Sepanyol Mexico",et:"Estonia",eu:"Basque",ewo:"Ewondo",fa:"Parsi",ff:"Fulah",fi:"Finland",fil:"Filipina",fj:"Fiji",fo:"Faroe",fon:"Fon",fr:"Perancis","fr-CA":"Perancis Kanada","fr-CH":"Perancis Switzerland",frc:"Perancis Cajun",fur:"Friulian",fy:"Frisian Barat",ga:"Ireland",gaa:"Ga",gag:"Gagauz",gan:"Cina Gan",gba:"Gbaya",gbz:"Zoroastrian Dari",gd:"Scots Gaelic",gez:"Geez",gil:"Kiribati",gl:"Galicia",glk:"Gilaki",gn:"Guarani",gor:"Gorontalo",grc:"Greek Purba",gsw:"Jerman Switzerland",gu:"Gujerat",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hak:"Cina Hakka",haw:"Hawaii",he:"Ibrani",hi:"Hindi",hil:"Hiligaynon",hmn:"Hmong",hr:"Croatia",hsb:"Sorbian Atas",hsn:"Cina Xiang",ht:"Haiti",hu:"Hungary",hup:"Hupa",hy:"Armenia",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesia",ie:"Interlingue",ig:"Igbo",ii:"Sichuan Yi",ilo:"Iloko",inh:"Ingush",io:"Ido",is:"Iceland",it:"Itali",iu:"Inuktitut",ja:"Jepun",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jv:"Jawa",ka:"Georgia",kab:"Kabyle",kac:"Kachin",kaj:"Jju",kam:"Kamba",kbd:"Kabardia",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",kfo:"Koro",kg:"Kongo",kha:"Khasi",khq:"Koyra Chiini",khw:"Khowar",ki:"Kikuya",kj:"Kuanyama",kk:"Kazakhstan",kkj:"Kako",kl:"Kalaallisut",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Korea",koi:"Komi-Permyak",kok:"Konkani",kpe:"Kpelle",kr:"Kanuri",krc:"Karachay-Balkar",krl:"Karelian",kru:"Kurukh",ks:"Kashmir",ksb:"Shambala",ksf:"Bafia",ksh:"Colognian",ku:"Kurdish",kum:"Kumyk",kv:"Komi",kw:"Cornish",ky:"Kirghiz",la:"Latin",lad:"Ladino",lag:"Langi",lah:"Lahnda",lb:"Luxembourg",lez:"Lezghian",lg:"Ganda",li:"Limburgish",lkt:"Lakota",ln:"Lingala",lo:"Laos",lou:"Kreol Louisiana",loz:"Lozi",lrc:"Luri Utara",lt:"Lithuania",lu:"Luba-Katanga",lua:"Luba-Lulua",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Latvia",mad:"Madura",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",mas:"Masai",mde:"Maba",mdf:"Moksha",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagasy",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall",mi:"Maori",mic:"Micmac",min:"Minangkabau",mk:"Macedonia",ml:"Malayalam",mn:"Mongolia",mni:"Manipuri",moh:"Mohawk",mos:"Mossi",mr:"Marathi",ms:"Melayu",mt:"Malta",mua:"Mundang",mus:"Creek",mwl:"Mirandese",my:"Burma",mye:"Myene",myv:"Erzya",mzn:"Mazanderani",na:"Nauru",nan:"Cina Min Nan",nap:"Neapolitan",naq:"Nama",nb:"Bokmål Norway",nd:"Ndebele Utara",nds:"Jerman Rendah","nds-NL":"Saxon Rendah",ne:"Nepal","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niu",nl:"Belanda","nl-BE":"Flemish",nmg:"Kwasio",nn:"Nynorsk Norway",nnh:"Ngiemboon",no:"Norway",nog:"Nogai",nqo:"N’ko",nr:"Ndebele Selatan",nso:"Sotho Utara",nus:"Nuer",nv:"Navajo",ny:"Nyanja",nyn:"Nyankole",oc:"Occitania",om:"Oromo",or:"Odia",os:"Ossete",pa:"Punjabi",pag:"Pangasinan",pam:"Pampanga",pap:"Papiamento",pau:"Palauan",pcm:"Nigerian Pidgin",pl:"Poland",prg:"Prusia",ps:"Pashto",pt:"Portugis","pt-BR":"Portugis Brazil","pt-PT":"Portugis Eropah",qu:"Quechua",quc:"Kʼicheʼ",rap:"Rapanui",rar:"Rarotonga",rm:"Romansh",rn:"Rundi",ro:"Romania","ro-MD":"Moldavia",rof:"Rombo",root:"Root",ru:"Rusia",rup:"Aromanian",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandawe",sah:"Sakha",saq:"Samburu",sat:"Santali",sba:"Ngambay",sbp:"Sangu",sc:"Sardinia",scn:"Sicili",sco:"Scots",sd:"Sindhi",sdh:"Kurdish Selatan",se:"Sami Utara",see:"Seneca",seh:"Sena",ses:"Koyraboro Senni",sg:"Sango",sh:"SerboCroatia",shi:"Tachelhit",shn:"Shan",shu:"Arab Chadian",si:"Sinhala",sk:"Slovak",sl:"Slovenia",sm:"Samoa",sma:"Sami Selatan",smj:"Lule Sami",smn:"Inari Sami",sms:"Skolt Sami",sn:"Shona",snk:"Soninke",so:"Somali",sq:"Albania",sr:"Serbia",srn:"Sranan Tongo",ss:"Swati",ssy:"Saho",st:"Sotho Selatan",su:"Sunda",suk:"Sukuma",sv:"Sweden",sw:"Swahili","sw-CD":"Congo Swahili",swb:"Comoria",syr:"Syriac",ta:"Tamil",te:"Telugu",tem:"Timne",teo:"Teso",tet:"Tetum",tg:"Tajik",th:"Thai",ti:"Tigrinya",tig:"Tigre",tk:"Turkmen",tlh:"Klingon",tly:"Talysh",tn:"Tswana",to:"Tonga",tpi:"Tok Pisin",tr:"Turki",trv:"Taroko",ts:"Tsonga",tt:"Tatar",tum:"Tumbuka",tvl:"Tuvalu",tw:"Twi",twq:"Tasawaq",ty:"Tahiti",tyv:"Tuvinian",tzm:"Tamazight Atlas Tengah",udm:"Udmurt",ug:"Uyghur",uk:"Ukraine",umb:"Umbundu",ur:"Urdu",uz:"Uzbekistan",vai:"Vai",ve:"Venda",vi:"Vietnam",vo:"Volapük",vun:"Vunjo",wa:"Walloon",wae:"Walser",wal:"Wolaytta",war:"Waray",wbp:"Warlpiri",wo:"Wolof",wuu:"Cina Wu",xal:"Kalmyk",xh:"Xhosa",xog:"Soga",yav:"Yangben",ybb:"Yemba",yi:"Yiddish",yo:"Yoruba",yue:"Kantonis",zgh:"Tamazight Maghribi Standard",zh:"Cina","zh-Hans":"Cina Mandarin Ringkas","zh-Hant":"Cina Mandarin Tradisional",zu:"Zulu",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyril",Latn:"Latin",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Ringkas",Hant:"Tradisional"}},ne:{rtl:false,languageNames:{aa:"अफार",ab:"अब्खाजियाली",ace:"अचाइनिज",ach:"अकोली",ada:"अदाङमे",ady:"अदिघे",ae:"अवेस्तान",af:"अफ्रिकान्स",afh:"अफ्रिहिली",agq:"आघेम",ain:"अइनु",ak:"आकान",akk:"अक्कादियाली",akz:"अलाबामा",ale:"अलेउट",aln:"घेग अल्बानियाली",alt:"दक्षिणी आल्टाइ",am:"अम्हारिक",an:"अरागोनी",ang:"पुरातन अङ्ग्रेजी",anp:"अङ्गिका",ar:"अरबी","ar-001":"आधुनिक मानक अरबी",arc:"अरामाइक",arn:"मापुचे",aro:"अराओना",arp:"अरापाहो",arq:"अल्जेरियाली अरबी",arw:"अरावाक",ary:"मोरोक्कोली अरबी",arz:"इजिप्ट अरबी",as:"आसामी",asa:"आसु",ase:"अमेरिकी साङ्केतिक भाषा",ast:"अस्टुरियाली",av:"अवारिक",avk:"कोटावा",awa:"अवधी",ay:"ऐमारा",az:"अजरबैजानी",ba:"बास्किर",bal:"बालुची",ban:"बाली",bar:"बाभारियाली",bas:"बासा",bax:"बामुन",bbc:"बाताक तोबा",bbj:"घोमाला",be:"बेलारुसी",bej:"बेजा",bem:"बेम्बा",bew:"बेटावी",bez:"बेना",bfd:"बाफुट",bfq:"बडागा",bg:"बुल्गेरियाली",bgn:"पश्चिम बालोची",bho:"भोजपुरी",bi:"बिस्लाम",bik:"बिकोल",bin:"बिनी",bjn:"बन्जार",bkm:"कोम",bla:"सिक्सिका",bm:"बाम्बारा",bn:"बंगाली",bo:"तिब्बती",bpy:"विष्णुप्रिया",bqi:"बाख्तिआरी",br:"ब्रेटन",bra:"ब्रज",brh:"ब्राहुइ",brx:"बोडो",bs:"बोस्नियाली",bss:"अकुज",bua:"बुरिआत",bug:"बुगिनियाली",bum:"बुलु",byn:"ब्लिन",byv:"मेडुम्बा",ca:"क्याटालन",cad:"काड्डो",car:"क्यारिब",cay:"कायुगा",cch:"अट्साम",ccp:"चाक्मा",ce:"चेचेन",ceb:"सेबुआनो",cgg:"चिगा",ch:"चामोर्रो",chb:"चिब्चा",chg:"चागाटाई",chk:"चुकेसे",chm:"मारी",chn:"चिनुक जार्गन",cho:"चोक्टाव",chp:"चिपेव्यान",chr:"चेरोकी",chy:"चेयेन्ने",ckb:"मध्यवर्ती कुर्दिस",co:"कोर्सिकन",cop:"कोप्टिक",cps:"कापिज्नोन",cr:"क्री",crh:"क्रिमियाली तुर्क",crs:"सेसेल्वा क्रिओल फ्रान्सेली",cs:"चेक",csb:"कासुवियन",cu:"चर्च स्लाभिक",cv:"चुभास",cy:"वेल्श",da:"डेनिस",dak:"डाकोटा",dar:"दार्ग्वा",dav:"ताइता",de:"जर्मन","de-AT":"अस्ट्रिएन जर्मन","de-CH":"स्वीस हाई जर्मन",del:"देलावर",dgr:"दोग्रिब",din:"दिन्का",dje:"जर्मा",doi:"डोगरी",dsb:"तल्लो सोर्बियन",dtp:"केन्द्रीय दुसुन",dua:"दुवाला",dum:"मध्य डच",dv:"दिबेही",dyo:"जोला-फोनिल",dyu:"द्युला",dz:"जोङ्खा",dzg:"दाजागा",ebu:"एम्बु",ee:"इवी",efi:"एफिक",egl:"एमिलियाली",egy:"पुरातन इजिप्टी",eka:"एकाजुक",el:"ग्रीक",elx:"एलामाइट",en:"अङ्ग्रेजी","en-AU":"अस्ट्रेलियाली अङ्ग्रेजी","en-CA":"क्यानाडेली अङ्ग्रेजी","en-GB":"बेलायती अङ्ग्रेजी","en-US":"अमेरिकी अङ्ग्रेजी",enm:"मध्य अङ्ग्रेजी",eo:"एस्पेरान्तो",es:"स्पेनी","es-419":"ल्याटिन अमेरिकी स्पेनी","es-ES":"युरोपेली स्पेनी","es-MX":"मेक्सिकन स्पेनी",esu:"केन्द्रीय युपिक",et:"इस्टोनियन",eu:"बास्क",ewo:"इवोन्डो",ext:"एक्सट्रेमादुराली",fa:"फारसी",fan:"फाङ",fat:"फान्टी",ff:"फुलाह",fi:"फिनिस",fil:"फिलिपिनी",fj:"फिजियन",fo:"फारोज",fon:"फोन",fr:"फ्रान्सेली","fr-CA":"क्यानेडाली फ्रान्सेली","fr-CH":"स्विस फ्रेन्च",frc:"काहुन फ्रान्सेली",frm:"मध्य फ्रान्सेली",fro:"पुरातन फ्रान्सेली",frp:"अर्पितान",frr:"उत्तरी फ्रिजी",frs:"पूर्वी फ्रिसियाली",fur:"फ्रिउलियाली",fy:"पश्चिमी फ्रिसियन",ga:"आइरिस",gaa:"गा",gag:"गगाउज",gan:"गान चिनियाँ",gay:"गायो",gba:"ग्बाया",gd:"स्कटिस गाएलिक",gez:"गिज",gil:"गिल्बर्टी",gl:"गलिसियाली",glk:"गिलाकी",gmh:"मध्य उच्च जर्मन",gn:"गुवारानी",goh:"पुरातन उच्च जर्मन",gom:"गोवा कोन्कानी",gon:"गोन्डी",gor:"गोरोन्टालो",got:"गोथिक",grb:"ग्रेबो",grc:"पुरातन ग्रिक",gsw:"स्वीस जर्मन",gu:"गुजराती",gur:"फ्राफ्रा",guz:"गुसी",gv:"मान्क्स",gwi:"गुइचिन",ha:"हाउसा",hai:"हाइदा",hak:"हक्का चिनियाँ",haw:"हवाइयन",he:"हिब्रु",hi:"हिन्दी",hif:"फिजी हिन्दी",hil:"हिलिगायनोन",hit:"हिट्टिटे",hmn:"हमोङ",ho:"हिरी मोटु",hr:"क्रोयसियाली",hsb:"माथिल्लो सोर्बियन",hsn:"जियाङ चिनियाँ",ht:"हैटियाली क्रियोल",hu:"हङ्गेरियाली",hup:"हुपा",hy:"आर्मेनियाली",hz:"हेरेरो",ia:"इन्टर्लिङ्गुआ",iba:"इबान",ibb:"इबिबियो",id:"इन्डोनेसियाली",ie:"इन्टरलिङ्ग्वे",ig:"इग्बो",ii:"सिचुआन यि",ik:"इनुपिआक्",ilo:"इयोको",inh:"इन्गस",io:"इडो",is:"आइसल्यान्डियाली",it:"इटालेली",iu:"इनुक्टिटुट",izh:"इन्ग्रियाली",ja:"जापानी",jam:"जमैकाली क्रेओले अङ्ग्रेजी",jbo:"लोज्बान",jgo:"न्गोम्बा",jmc:"माचामे",jpr:"जुडियो-फारसी",jrb:"जुडियो-अरबी",jut:"जुटिस",jv:"जाभानी",ka:"जर्जियाली",kaa:"कारा-काल्पाक",kab:"काबिल",kac:"काचिन",kaj:"ज्जु",kam:"काम्बा",kaw:"कावी",kbd:"काबार्दियाली",kbl:"कानेम्बु",kcg:"टुआप",kde:"माकोन्डे",kea:"काबुभेर्डियानु",ken:"केनयाङ",kfo:"कोरो",kg:"कोङ्गो",kgp:"काइनगाङ",kha:"खासी",kho:"खोटानी",khq:"कोयरा चिनी",khw:"खोवार",ki:"किकुयु",kiu:"किर्मान्जकी",kj:"कुआन्यामा",kk:"काजाख",kkj:"काको",kl:"कालालिसुट",kln:"कालेन्जिन",km:"खमेर",kmb:"किम्बुन्डु",kn:"कन्नाडा",ko:"कोरियाली",koi:"कोमी-पर्म्याक",kok:"कोन्कानी",kos:"कोस्राली",kpe:"क्पेल्ले",kr:"कानुरी",krc:"काराचाय-बाल्कर",kri:"क्रिओ",krj:"किनाराय-ए",krl:"करेलियन",kru:"कुरुख",ks:"कास्मिरी",ksb:"शाम्बाला",ksf:"बाफिया",ksh:"कोलोग्नियाली",ku:"कुर्दी",kum:"कुमिक",kut:"कुतेनाइ",kv:"कोमी",kw:"कोर्निस",ky:"किर्गिज",la:"ल्याटिन",lad:"लाडिनो",lag:"लाङ्गी",lah:"लाहन्डा",lam:"लाम्बा",lb:"लक्जेम्बर्गी",lez:"लाज्घियाली",lfn:"लिङ्गुवा फ्राङ्का नोभा",lg:"गान्डा",li:"लिम्बुर्गी",lij:"लिगुरियाली",liv:"लिभोनियाली",lkt:"लाकोता",lmo:"लोम्बार्ड",ln:"लिङ्गाला",lo:"लाओ",lol:"मोङ्गो",loz:"लोजी",lrc:"उत्तरी लुरी",lt:"लिथुआनियाली",ltg:"लाट्गाली",lu:"लुबा-काताङ्गा",lua:"लुबा-लुलुआ",lui:"लुइसेनो",lun:"लुन्डा",luo:"लुओ",lus:"मिजो",luy:"लुइया",lv:"लात्भियाली",lzh:"साहित्यिक चिनियाँ",lzz:"लाज",mad:"मादुरेसे",maf:"माफा",mag:"मगधी",mai:"मैथिली",mak:"माकासार",man:"मान्दिङो",mas:"मसाई",mde:"माबा",mdf:"मोक्ष",mdr:"मन्दर",men:"मेन्डे",mer:"मेरू",mfe:"मोरिसेन",mg:"मलागासी",mga:"मध्य आयरिस",mgh:"माखुवा-मिट्टो",mgo:"मेटा",mh:"मार्साली",mi:"माओरी",mic:"मिकमाक",min:"मिनाङकाबाउ",mk:"म्यासेडोनियन",ml:"मलयालम",mn:"मङ्गोलियाली",mnc:"मान्चु",mni:"मनिपुरी",moh:"मोहक",mos:"मोस्सी",mr:"मराठी",ms:"मलाय",mt:"माल्टिज",mua:"मुन्डाङ",mus:"क्रिक",mwl:"मिरान्डी",mwr:"माडवारी",mwv:"मेन्टावाई",my:"बर्मेली",mye:"म्येने",myv:"इर्ज्या",mzn:"मजानडेरानी",na:"नाउरू",nan:"मिन नान चिनियाँ",nap:"नेपोलिटान",naq:"नामा",nb:"नर्वेली बोकमाल",nd:"उत्तरी न्डेबेले",nds:"तल्लो जर्मन","nds-NL":"तल्लो साक्सन",ne:"नेपाली","new":"नेवारी",ng:"न्दोन्गा",nia:"नियास",niu:"निउएन",njo:"अओ नागा",nl:"डच","nl-BE":"फ्लेमिस",nmg:"क्वासियो",nn:"नर्वेली नाइनोर्स्क",nnh:"न्गिएम्बुन",no:"नर्वेली",nog:"नोगाइ",non:"पुरानो नोर्से",nov:"नोभियल",nqo:"नको",nr:"दक्षिण न्देबेले",nso:"उत्तरी सोथो",nus:"नुएर",nv:"नाभाजो",nwc:"परम्परागत नेवारी",ny:"न्यान्जा",nym:"न्यामवेजी",nyn:"न्यान्कोल",nyo:"न्योरो",nzi:"नजिमा",oc:"अक्सिटन",oj:"ओजिब्वा",om:"ओरोमो",or:"उडिया",os:"अोस्सेटिक",osa:"ओसागे",ota:"अटोमन तुर्की",pa:"पंजाबी",pag:"पाङ्गासिनान",pal:"पाहलावी",pam:"पामपाङ्गा",pap:"पापियामेन्तो",pau:"पालाउवाली",pcd:"पिकार्ड",pcm:"नाइजेरियाली पिड्जिन",pdc:"पेन्सिलभानियाली जर्मन",peo:"पुरातन फारसी",pfl:"पालाटिन जर्मन",phn:"फोनिसियाली",pi:"पाली",pl:"पोलिस",pms:"पिएडमोन्तेसे",pnt:"पोन्टिक",prg:"प्रसियाली",pro:"पुरातन प्रोभेन्काल",ps:"पास्तो",pt:"पोर्तुगी","pt-BR":"ब्राजिली पोर्तुगी","pt-PT":"युरोपेली पोर्तुगी",qu:"क्वेचुवा",quc:"किचे",qug:"चिम्बोराजो उच्चस्थान किचुआ",raj:"राजस्थानी",rap:"रापानुई",rar:"रारोटोङ्गान",rm:"रोमानिस",rn:"रुन्डी",ro:"रोमानियाली","ro-MD":"मोल्डाभियाली",rof:"रोम्बो",root:"रुट",ru:"रसियाली",rup:"अरोमानीयाली",rw:"किन्यारवान्डा",rwk:"र्‌वा",sa:"संस्कृत",sad:"सान्डेअ",sah:"साखा",saq:"साम्बुरू",sat:"सान्ताली",sba:"न्गामबाय",sbp:"साङ्गु",sc:"सार्डिनियाली",scn:"सिसिलियाली",sco:"स्कट्स",sd:"सिन्धी",sdh:"दक्षिणी कुर्दिश",se:"उत्तरी सामी",seh:"सेना",ses:"कोयराबोरो सेन्नी",sg:"साङ्गो",sga:"पुरातन आयरीस",shi:"टाचेल्हिट",shn:"शान",shu:"चाड अरबी",si:"सिन्हाली",sk:"स्लोभाकियाली",sl:"स्लोभेनियाली",sli:"तल्लो सिलेसियाली",sm:"सामोआ",sma:"दक्षिणी सामी",smj:"लुले सामी",smn:"इनारी सामी",sms:"स्कोइट सामी",sn:"शोना",snk:"सोनिन्के",so:"सोमाली",sq:"अल्बानियाली",sr:"सर्बियाली",srn:"स्रानान टोङ्गो",ss:"स्वाती",ssy:"साहो",st:"दक्षिणी सोथो",su:"सुडानी",suk:"सुकुमा",sus:"सुसू",sux:"सुमेरियाली",sv:"स्विडिस",sw:"स्वाहिली","sw-CD":"कङ्गो स्वाहिली",swb:"कोमोरी",syc:"परम्परागत सिरियाक",syr:"सिरियाक",ta:"तामिल",te:"तेलुगु",tem:"टिम्ने",teo:"टेसो",tet:"टेटुम",tg:"ताजिक",th:"थाई",ti:"टिग्रिन्या",tig:"टिग्रे",tk:"टर्कमेन",tlh:"क्लिङ्गन",tn:"ट्स्वाना",to:"टोङ्गन",tog:"न्यास टोङ्गा",tpi:"टोक पिसिन",tr:"टर्किश",trv:"टारोको",ts:"ट्सोङ्गा",tt:"तातार",ttt:"मुस्लिम टाट",tum:"टुम्बुका",tvl:"टुभालु",twq:"तासावाक",ty:"टाहिटियन",tyv:"टुभिनियाली",tzm:"केन्द्रीय एट्लास टामाजिघट",udm:"उड्मुर्ट",ug:"उइघुर",uk:"युक्रेनी",umb:"उम्बुन्डी",ur:"उर्दु",uz:"उज्बेकी",vai:"भाइ",ve:"भेन्डा",vi:"भियतनामी",vmf:"मुख्य-फ्राङ्कोनियाली",vo:"भोलापिक",vun:"भुन्जो",wa:"वाल्लुन",wae:"वाल्सर",wal:"वोलेट्टा",war:"वारे",wbp:"वार्ल्पिरी",wo:"वुलुफ",xal:"काल्मिक",xh:"खोसा",xmf:"मिनग्रेलियाली",xog:"सोगा",yav:"याङ्बेन",ybb:"येम्बा",yi:"यिद्दिस",yo:"योरूवा",yrl:"न्हिनगातु",yue:"क्यान्टोनिज",zbl:"ब्लिससिम्बोल्स",zgh:"मानक मोरोक्कोन तामाजिघट",zh:"चिनियाँ","zh-Hans":"सरलिकृत म्यान्डरिन चिनियाँ","zh-Hant":"परम्परागत म्यान्डरिन चिनियाँ",zu:"जुलु",zun:"जुनी",zza:"जाजा"},scriptNames:{Cyrl:"सिरिलिक",Latn:"ल्याटिन",Arab:"अरबी",Guru:"गुरूमुखी",Tfng:"टिफिनाघ",Vaii:"भाइ",Hans:"सरलिकृत चिनियाँ",Hant:"परम्परागत चिनियाँ"}},nl:{rtl:false,languageNames:{aa:"Afar",ab:"Abchazisch",ace:"Atjehs",ach:"Akoli",ada:"Adangme",ady:"Adygees",ae:"Avestisch",aeb:"Tunesisch Arabisch",af:"Afrikaans",afh:"Afrihili",agq:"Aghem",ain:"Aino",ak:"Akan",akk:"Akkadisch",akz:"Alabama",ale:"Aleoetisch",aln:"Gegisch",alt:"Zuid-Altaïsch",am:"Amhaars",an:"Aragonees",ang:"Oudengels",anp:"Angika",ar:"Arabisch","ar-001":"Arabisch (wereld)",arc:"Aramees",arn:"Mapudungun",aro:"Araona",arp:"Arapaho",arq:"Algerijns Arabisch",ars:"Nadjdi-Arabisch",arw:"Arawak",ary:"Marokkaans Arabisch",arz:"Egyptisch Arabisch",as:"Assamees",asa:"Asu",ase:"Amerikaanse Gebarentaal",ast:"Asturisch",av:"Avarisch",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbeidzjaans",ba:"Basjkiers",bal:"Beloetsji",ban:"Balinees",bar:"Beiers",bas:"Basa",bax:"Bamoun",bbc:"Batak Toba",bbj:"Ghomala’",be:"Wit-Russisch",bej:"Beja",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgaars",bgn:"Westers Beloetsji",bho:"Bhojpuri",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar",bkm:"Kom",bla:"Siksika",bm:"Bambara",bn:"Bengaals",bo:"Tibetaans",bpy:"Bishnupriya",bqi:"Bakhtiari",br:"Bretons",bra:"Braj",brh:"Brahui",brx:"Bodo",bs:"Bosnisch",bss:"Akoose",bua:"Boerjatisch",bug:"Buginees",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Catalaans",cad:"Caddo",car:"Caribisch",cay:"Cayuga",cch:"Atsam",ccp:"Chakma",ce:"Tsjetsjeens",ceb:"Cebuano",cgg:"Chiga",ch:"Chamorro",chb:"Chibcha",chg:"Chagatai",chk:"Chuukees",chm:"Mari",chn:"Chinook Jargon",cho:"Choctaw",chp:"Chipewyan",chr:"Cherokee",chy:"Cheyenne",ckb:"Soranî",co:"Corsicaans",cop:"Koptisch",cps:"Capiznon",cr:"Cree",crh:"Krim-Tataars",crs:"Seychellencreools",cs:"Tsjechisch",csb:"Kasjoebisch",cu:"Kerkslavisch",cv:"Tsjoevasjisch",cy:"Welsh",da:"Deens",dak:"Dakota",dar:"Dargwa",dav:"Taita",de:"Duits","de-AT":"Duits (Oostenrijk)","de-CH":"Duits (Zwitserland)",del:"Delaware",den:"Slavey",dgr:"Dogrib",din:"Dinka",dje:"Zarma",doi:"Dogri",dsb:"Nedersorbisch",dtp:"Dusun",dua:"Duala",dum:"Middelnederlands",dv:"Divehi",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emiliano",egy:"Oudegyptisch",eka:"Ekajuk",el:"Grieks",elx:"Elamitisch",en:"Engels","en-AU":"Engels (Australië)","en-CA":"Engels (Canada)","en-GB":"Engels (Verenigd Koninkrijk)","en-US":"Engels (Verenigde Staten)",enm:"Middelengels",eo:"Esperanto",es:"Spaans","es-419":"Spaans (Latijns-Amerika)","es-ES":"Spaans (Spanje)","es-MX":"Spaans (Mexico)",esu:"Yupik",et:"Estisch",eu:"Baskisch",ewo:"Ewondo",ext:"Extremeens",fa:"Perzisch",fan:"Fang",fat:"Fanti",ff:"Fulah",fi:"Fins",fil:"Filipijns",fit:"Tornedal-Fins",fj:"Fijisch",fo:"Faeröers",fon:"Fon",fr:"Frans","fr-CA":"Frans (Canada)","fr-CH":"Frans (Zwitserland)",frc:"Cajun-Frans",frm:"Middelfrans",fro:"Oudfrans",frp:"Arpitaans",frr:"Noord-Fries",frs:"Oost-Fries",fur:"Friulisch",fy:"Fries",ga:"Iers",gaa:"Ga",gag:"Gagaoezisch",gan:"Ganyu",gay:"Gayo",gba:"Gbaya",gbz:"Zoroastrisch Dari",gd:"Schots-Gaelisch",gez:"Ge’ez",gil:"Gilbertees",gl:"Galicisch",glk:"Gilaki",gmh:"Middelhoogduits",gn:"Guaraní",goh:"Oudhoogduits",gom:"Goa Konkani",gon:"Gondi",gor:"Gorontalo",got:"Gothisch",grb:"Grebo",grc:"Oudgrieks",gsw:"Zwitserduits",gu:"Gujarati",guc:"Wayuu",gur:"Gurune",guz:"Gusii",gv:"Manx",gwi:"Gwichʼin",ha:"Hausa",hai:"Haida",hak:"Hakka",haw:"Hawaïaans",he:"Hebreeuws",hi:"Hindi",hif:"Fijisch Hindi",hil:"Hiligaynon",hit:"Hettitisch",hmn:"Hmong",ho:"Hiri Motu",hr:"Kroatisch",hsb:"Oppersorbisch",hsn:"Xiangyu",ht:"Haïtiaans Creools",hu:"Hongaars",hup:"Hupa",hy:"Armeens",hz:"Herero",ia:"Interlingua",iba:"Iban",ibb:"Ibibio",id:"Indonesisch",ie:"Interlingue",ig:"Igbo",ii:"Yi",ik:"Inupiaq",ilo:"Iloko",inh:"Ingoesjetisch",io:"Ido",is:"IJslands",it:"Italiaans",iu:"Inuktitut",izh:"Ingrisch",ja:"Japans",jam:"Jamaicaans Creools",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Judeo-Perzisch",jrb:"Judeo-Arabisch",jut:"Jutlands",jv:"Javaans",ka:"Georgisch",kaa:"Karakalpaks",kab:"Kabylisch",kac:"Kachin",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardisch",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kaapverdisch Creools",ken:"Kenyang",kfo:"Koro",kg:"Kongo",kgp:"Kaingang",kha:"Khasi",kho:"Khotanees",khq:"Koyra Chiini",khw:"Khowar",ki:"Gikuyu",kiu:"Kirmanckî",kj:"Kuanyama",kk:"Kazachs",kkj:"Kako",kl:"Groenlands",kln:"Kalenjin",km:"Khmer",kmb:"Kimbundu",kn:"Kannada",ko:"Koreaans",koi:"Komi-Permjaaks",kok:"Konkani",kos:"Kosraeaans",kpe:"Kpelle",kr:"Kanuri",krc:"Karatsjaj-Balkarisch",kri:"Krio",krj:"Kinaray-a",krl:"Karelisch",kru:"Kurukh",ks:"Kasjmiri",ksb:"Shambala",ksf:"Bafia",ksh:"Kölsch",ku:"Koerdisch",kum:"Koemuks",kut:"Kutenai",kv:"Komi",kw:"Cornish",ky:"Kirgizisch",la:"Latijn",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba",lb:"Luxemburgs",lez:"Lezgisch",lfn:"Lingua Franca Nova",lg:"Luganda",li:"Limburgs",lij:"Ligurisch",liv:"Lijfs",lkt:"Lakota",lmo:"Lombardisch",ln:"Lingala",lo:"Laotiaans",lol:"Mongo",lou:"Louisiana-Creools",loz:"Lozi",lrc:"Noordelijk Luri",lt:"Litouws",ltg:"Letgaals",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Mizo",luy:"Luyia",lv:"Lets",lzh:"Klassiek Chinees",lzz:"Lazisch",mad:"Madoerees",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makassaars",man:"Mandingo",mas:"Maa",mde:"Maba",mdf:"Moksja",mdr:"Mandar",men:"Mende",mer:"Meru",mfe:"Morisyen",mg:"Malagassisch",mga:"Middeliers",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshallees",mi:"Maori",mic:"Mi’kmaq",min:"Minangkabau",mk:"Macedonisch",ml:"Malayalam",mn:"Mongools",mnc:"Mantsjoe",mni:"Meitei",moh:"Mohawk",mos:"Mossi",mr:"Marathi",mrj:"West-Mari",ms:"Maleis",mt:"Maltees",mua:"Mundang",mus:"Creek",mwl:"Mirandees",mwr:"Marwari",mwv:"Mentawai",my:"Birmaans",mye:"Myene",myv:"Erzja",mzn:"Mazanderani",na:"Nauruaans",nan:"Minnanyu",nap:"Napolitaans",naq:"Nama",nb:"Noors - Bokmål",nd:"Noord-Ndebele",nds:"Nedersaksisch","nds-NL":"Nederduits",ne:"Nepalees","new":"Newari",ng:"Ndonga",nia:"Nias",niu:"Niueaans",njo:"Ao Naga",nl:"Nederlands","nl-BE":"Nederlands (België)",nmg:"Ngumba",nn:"Noors - Nynorsk",nnh:"Ngiemboon",no:"Noors",nog:"Nogai",non:"Oudnoors",nov:"Novial",nqo:"N’Ko",nr:"Zuid-Ndbele",nso:"Noord-Sotho",nus:"Nuer",nv:"Navajo",nwc:"Klassiek Nepalbhasa",ny:"Nyanja",nym:"Nyamwezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima",oc:"Occitaans",oj:"Ojibwa",om:"Afaan Oromo",or:"Odia",os:"Ossetisch",osa:"Osage",ota:"Ottomaans-Turks",pa:"Punjabi",pag:"Pangasinan",pal:"Pahlavi",pam:"Pampanga",pap:"Papiaments",pau:"Palaus",pcd:"Picardisch",pcm:"Nigeriaans Pidgin",pdc:"Pennsylvania-Duits",pdt:"Plautdietsch",peo:"Oudperzisch",pfl:"Paltsisch",phn:"Foenicisch",pi:"Pali",pl:"Pools",pms:"Piëmontees",pnt:"Pontisch",pon:"Pohnpeiaans",prg:"Oudpruisisch",pro:"Oudprovençaals",ps:"Pasjtoe",pt:"Portugees","pt-BR":"Portugees (Brazilië)","pt-PT":"Portugees (Portugal)",qu:"Quechua",quc:"K’iche’",qug:"Kichwa",raj:"Rajasthani",rap:"Rapanui",rar:"Rarotongan",rgn:"Romagnol",rif:"Riffijns",rm:"Reto-Romaans",rn:"Kirundi",ro:"Roemeens","ro-MD":"Roemeens (Moldavië)",rof:"Rombo",rom:"Romani",root:"Root",rtm:"Rotumaans",ru:"Russisch",rue:"Roetheens",rug:"Roviana",rup:"Aroemeens",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskriet",sad:"Sandawe",sah:"Jakoets",sam:"Samaritaans-Aramees",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardijns",scn:"Siciliaans",sco:"Schots",sd:"Sindhi",sdc:"Sassarees",sdh:"Pahlavani",se:"Noord-Samisch",see:"Seneca",seh:"Sena",sei:"Seri",sel:"Selkoeps",ses:"Koyraboro Senni",sg:"Sango",sga:"Oudiers",sgs:"Samogitisch",sh:"Servo-Kroatisch",shi:"Tashelhiyt",shn:"Shan",shu:"Tsjadisch Arabisch",si:"Singalees",sid:"Sidamo",sk:"Slowaaks",sl:"Sloveens",sli:"Silezisch Duits",sly:"Selayar",sm:"Samoaans",sma:"Zuid-Samisch",smj:"Lule-Samisch",smn:"Inari-Samisch",sms:"Skolt-Samisch",sn:"Shona",snk:"Soninke",so:"Somalisch",sog:"Sogdisch",sq:"Albanees",sr:"Servisch",srn:"Sranantongo",srr:"Serer",ss:"Swazi",ssy:"Saho",st:"Zuid-Sotho",stq:"Saterfries",su:"Soendanees",suk:"Sukuma",sus:"Soesoe",sux:"Soemerisch",sv:"Zweeds",sw:"Swahili","sw-CD":"Swahili (Congo-Kinshasa)",swb:"Shimaore",syc:"Klassiek Syrisch",syr:"Syrisch",szl:"Silezisch",ta:"Tamil",tcy:"Tulu",te:"Telugu",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetun",tg:"Tadzjieks",th:"Thai",ti:"Tigrinya",tig:"Tigre",tiv:"Tiv",tk:"Turkmeens",tkl:"Tokelaus",tkr:"Tsakhur",tl:"Tagalog",tlh:"Klingon",tli:"Tlingit",tly:"Talysh",tmh:"Tamashek",tn:"Tswana",to:"Tongaans",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Turks",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonisch",tsi:"Tsimshian",tt:"Tataars",ttt:"Moslim Tat",tum:"Toemboeka",tvl:"Tuvaluaans",tw:"Twi",twq:"Tasawaq",ty:"Tahitiaans",tyv:"Toevaans",tzm:"Tamazight (Centraal-Marokko)",udm:"Oedmoerts",ug:"Oeigoers",uga:"Oegaritisch",uk:"Oekraïens",umb:"Umbundu",ur:"Urdu",uz:"Oezbeeks",vai:"Vai",ve:"Venda",vec:"Venetiaans",vep:"Wepsisch",vi:"Vietnamees",vls:"West-Vlaams",vmf:"Opperfrankisch",vo:"Volapük",vot:"Votisch",vro:"Võro",vun:"Vunjo",wa:"Waals",wae:"Walser",wal:"Wolaytta",war:"Waray",was:"Washo",wbp:"Warlpiri",wo:"Wolof",wuu:"Wuyu",xal:"Kalmuks",xh:"Xhosa",xmf:"Mingreels",xog:"Soga",yao:"Yao",yap:"Yapees",yav:"Yangben",ybb:"Yemba",yi:"Jiddisch",yo:"Yoruba",yrl:"Nheengatu",yue:"Kantonees",za:"Zhuang",zap:"Zapotec",zbl:"Blissymbolen",zea:"Zeeuws",zen:"Zenaga",zgh:"Standaard Marokkaanse Tamazight",zh:"Chinees","zh-Hans":"Mandarijn (vereenvoudigd)","zh-Hant":"Mandarijn (traditioneel)",zu:"Zoeloe",zun:"Zuni",zza:"Zaza"},scriptNames:{Cyrl:"Cyrillisch",Latn:"Latijns",Arab:"Arabisch",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"vereenvoudigd",Hant:"traditioneel"}},nn:{rtl:false,languageNames:{aa:"afar",ab:"abkhasisk",ace:"achinesisk",ach:"acoli",ada:"adangme",ady:"adygeisk",ae:"avestisk",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadisk",ale:"aleutisk",alt:"sør-altaj",am:"amharisk",an:"aragonsk",ang:"gammalengelsk",anp:"angika",ar:"arabisk","ar-001":"moderne standardarabisk",arc:"arameisk",arn:"mapudungun",arp:"arapaho",arw:"arawak",as:"assamesisk",asa:"asu (Tanzania)",ast:"asturisk",av:"avarisk",awa:"avadhi",ay:"aymara",az:"aserbajdsjansk",ba:"basjkirsk",bal:"baluchi",ban:"balinesisk",bas:"basa",bax:"bamun",be:"kviterussisk",bej:"beja",bem:"bemba",bez:"bena (Tanzania)",bg:"bulgarsk",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetansk",br:"bretonsk",bra:"braj",brx:"bodo",bs:"bosnisk",bss:"bakossi",bua:"burjatisk",bug:"buginesisk",byn:"blin",ca:"katalansk",cad:"caddo",car:"carib",cch:"atsam",ce:"tsjetsjensk",ceb:"cebuano",cgg:"kiga",ch:"chamorro",chb:"chibcha",chg:"tsjagataisk",chk:"chuukesisk",chm:"mari",chn:"chinook",cho:"choctaw",chp:"chipewiansk",chr:"cherokee",chy:"cheyenne",ckb:"sorani",co:"korsikansk",cop:"koptisk",cr:"cree",crh:"krimtatarisk",crs:"seselwa (fransk-kreolsk)",cs:"tsjekkisk",csb:"kasjubisk",cu:"kyrkjeslavisk",cv:"tsjuvansk",cy:"walisisk",da:"dansk",dak:"dakota",dar:"dargwa",dav:"taita",de:"tysk","de-AT":"tysk (Austerrike)","de-CH":"tysk (Sveits)",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbisk",dua:"duala",dum:"mellomnederlandsk",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"gammalegyptisk",eka:"ekajuk",el:"gresk",elx:"elamite",en:"engelsk","en-AU":"engelsk (Australia)","en-CA":"engelsk (Canada)","en-GB":"britisk engelsk","en-US":"engelsk (USA)",enm:"mellomengelsk",eo:"esperanto",es:"spansk","es-419":"spansk (Latin-Amerika)","es-ES":"spansk (Spania)","es-MX":"spansk (Mexico)",et:"estisk",eu:"baskisk",ewo:"ewondo",fa:"persisk",fan:"fang",fat:"fanti",ff:"fulfulde",fi:"finsk",fil:"filippinsk",fj:"fijiansk",fo:"færøysk",fr:"fransk","fr-CA":"fransk (Canada)","fr-CH":"fransk (Sveits)",frm:"mellomfransk",fro:"gammalfransk",frr:"nordfrisisk",frs:"austfrisisk",fur:"friulisk",fy:"vestfrisisk",ga:"irsk",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"skotsk-gælisk",gez:"geez",gil:"gilbertese",gl:"galicisk",gmh:"mellomhøgtysk",gn:"guarani",goh:"gammalhøgtysk",gon:"gondi",gor:"gorontalo",got:"gotisk",grb:"grebo",grc:"gammalgresk",gsw:"sveitsertysk",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",haw:"hawaiisk",he:"hebraisk",hi:"hindi",hil:"hiligaynon",hit:"hettittisk",hmn:"hmong",ho:"hiri motu",hr:"kroatisk",hsb:"høgsorbisk",ht:"haitisk",hu:"ungarsk",hup:"hupa",hy:"armensk",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonesisk",ie:"interlingue",ig:"ibo",ii:"sichuan-yi",ik:"inupiak",ilo:"iloko",inh:"ingusjisk",io:"ido",is:"islandsk",it:"italiensk",iu:"inuktitut",ja:"japansk",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"jødepersisk",jrb:"jødearabisk",jv:"javanesisk",ka:"georgisk",kaa:"karakalpakisk",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardisk",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"kikongo",kha:"khasi",kho:"khotanesisk",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kasakhisk",kkj:"kako",kl:"grønlandsk (kalaallisut)",kln:"kalenjin",km:"khmer",kmb:"kimbundu",kn:"kannada",ko:"koreansk",kok:"konkani",kos:"kosraeansk",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"karelsk",kru:"kurukh",ks:"kasjmiri",ksb:"shambala",ksf:"bafia",ksh:"kølnsk",ku:"kurdisk",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"kornisk",ky:"kirgisisk",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgsk",lez:"lezghian",lg:"ganda",li:"limburgisk",lkt:"lakota",ln:"lingala",lo:"laotisk",lol:"mongo",loz:"lozi",lrc:"nord-lurisk",lt:"litauisk",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"olulujia",lv:"latvisk",mad:"maduresisk",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"madagassisk",mga:"mellomirsk",mgh:"Makhuwa-Meetto",mgo:"meta’",mh:"marshallesisk",mi:"maori",mic:"micmac",min:"minangkabau",mk:"makedonsk",ml:"malayalam",mn:"mongolsk",mnc:"mandsju",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malayisk",mt:"maltesisk",mua:"mundang",mus:"creek",mwl:"mirandesisk",mwr:"marwari",my:"burmesisk",myv:"erzia",mzn:"mazanderani",na:"nauru",nap:"napolitansk",naq:"nama",nb:"bokmål",nd:"nord-ndebele",nds:"lågtysk","nds-NL":"lågsaksisk",ne:"nepalsk","new":"newari",ng:"ndonga",nia:"nias",niu:"niuisk",nl:"nederlandsk","nl-BE":"flamsk",nmg:"kwasio",nn:"nynorsk",nnh:"ngiemboon",no:"norsk",nog:"nogai",non:"gammalnorsk",nqo:"n’ko",nr:"sør-ndebele",nso:"nordsotho",nus:"nuer",nv:"navajo",nwc:"klassisk newarisk",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"oksitansk",oj:"ojibwa",om:"oromo",or:"odia",os:"ossetisk",osa:"osage",ota:"ottomansk tyrkisk",pa:"panjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauisk",pcm:"nigeriansk pidgin",peo:"gammalpersisk",phn:"fønikisk",pi:"pali",pl:"polsk",pon:"ponapisk",prg:"prøyssisk",pro:"gammalprovençalsk",ps:"pashto",pt:"portugisisk","pt-BR":"portugisisk (Brasil)","pt-PT":"portugisisk (Portugal)",qu:"quechua",quc:"k’iche",raj:"rajasthani",rap:"rapanui",rar:"rarotongansk",rm:"retoromansk",rn:"rundi",ro:"rumensk","ro-MD":"moldavisk",rof:"rombo",rom:"romani",root:"rot",ru:"russisk",rup:"arumensk",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"sakha",sam:"samaritansk arameisk",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardinsk",scn:"siciliansk",sco:"skotsk",sd:"sindhi",se:"nordsamisk",seh:"sena",sel:"selkupisk",ses:"Koyraboro Senni",sg:"sango",sga:"gammalirsk",sh:"serbokroatisk",shi:"tachelhit",shn:"shan",si:"singalesisk",sid:"sidamo",sk:"slovakisk",sl:"slovensk",sm:"samoansk",sma:"sørsamisk",smj:"lulesamisk",smn:"enaresamisk",sms:"skoltesamisk",sn:"shona",snk:"soninke",so:"somali",sog:"sogdisk",sq:"albansk",sr:"serbisk",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sørsotho",su:"sundanesisk",suk:"sukuma",sus:"susu",sux:"sumerisk",sv:"svensk",sw:"swahili","sw-CD":"swahili (Kongo-Kinshasa)",swb:"shimaore",syc:"klassisk syrisk",syr:"syrisk",ta:"tamil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadsjikisk",th:"thai",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmensk",tkl:"tokelau",tl:"tagalog",tlh:"klingon",tli:"tlingit",tmh:"tamasjek",tn:"tswana",to:"tongansk",tog:"tonga (Nyasa)",tpi:"tok pisin",tr:"tyrkisk",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tatarisk",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitisk",tyv:"tuvinisk",tzm:"sentral-tamazight",udm:"udmurt",ug:"uigurisk",uga:"ugaritisk",uk:"ukrainsk",umb:"umbundu",ur:"urdu",uz:"usbekisk",ve:"venda",vi:"vietnamesisk",vo:"volapyk",vot:"votisk",vun:"vunjo",wa:"vallonsk",wae:"walsertysk",wal:"wolaytta",war:"waray",was:"washo",wo:"wolof",xal:"kalmykisk",xh:"xhosa",xog:"soga",yap:"yapesisk",yav:"yangben",ybb:"yemba",yi:"jiddisk",yo:"joruba",yue:"kantonesisk",za:"zhuang",zap:"zapotec",zbl:"blissymbol",zen:"zenaga",zgh:"standard marokkansk tamazight",zh:"kinesisk","zh-Hans":"kinesisk (forenkla)","zh-Hant":"kinesisk (tradisjonell)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"kyrillisk",Latn:"latinsk",Arab:"arabisk",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vai",Hans:"forenkla",Hant:"tradisjonell"}},no:{rtl:false,languageNames:{},scriptNames:{}},nv:{rtl:false,languageNames:{},scriptNames:{}},pap:{rtl:false,languageNames:{},scriptNames:{}},pl:{rtl:false,languageNames:{aa:"afar",ab:"abchaski",ace:"aceh",ach:"aczoli",ada:"adangme",ady:"adygejski",ae:"awestyjski",aeb:"tunezyjski arabski",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ajnu",ak:"akan",akk:"akadyjski",akz:"alabama",ale:"aleucki",aln:"albański gegijski",alt:"południowoałtajski",am:"amharski",an:"aragoński",ang:"staroangielski",anp:"angika",ar:"arabski","ar-001":"współczesny arabski",arc:"aramejski",arn:"mapudungun",aro:"araona",arp:"arapaho",arq:"algierski arabski",ars:"arabski nadżdyjski",arw:"arawak",ary:"marokański arabski",arz:"egipski arabski",as:"asamski",asa:"asu",ase:"amerykański język migowy",ast:"asturyjski",av:"awarski",avk:"kotava",awa:"awadhi",ay:"ajmara",az:"azerbejdżański",ba:"baszkirski",bal:"beludżi",ban:"balijski",bar:"bawarski",bas:"basaa",bax:"bamum",bbc:"batak toba",bbj:"ghomala",be:"białoruski",bej:"bedża",bem:"bemba",bew:"betawi",bez:"bena",bfd:"bafut",bfq:"badaga",bg:"bułgarski",bgn:"beludżi północny",bho:"bhodżpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjar",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalski",bo:"tybetański",bpy:"bisznuprija-manipuri",bqi:"bachtiarski",br:"bretoński",bra:"bradź",brh:"brahui",brx:"bodo",bs:"bośniacki",bss:"akoose",bua:"buriacki",bug:"bugijski",bum:"bulu",byn:"blin",byv:"medumba",ca:"kataloński",cad:"kaddo",car:"karaibski",cay:"kajuga",cch:"atsam",ccp:"czakma",ce:"czeczeński",ceb:"cebuano",cgg:"chiga",ch:"czamorro",chb:"czibcza",chg:"czagatajski",chk:"chuuk",chm:"maryjski",chn:"żargon czinucki",cho:"czoktawski",chp:"czipewiański",chr:"czirokeski",chy:"czejeński",ckb:"sorani",co:"korsykański",cop:"koptyjski",cps:"capiznon",cr:"kri",crh:"krymskotatarski",crs:"kreolski seszelski",cs:"czeski",csb:"kaszubski",cu:"cerkiewnosłowiański",cv:"czuwaski",cy:"walijski",da:"duński",dak:"dakota",dar:"dargwijski",dav:"taita",de:"niemiecki","de-AT":"austriacki niemiecki","de-CH":"szwajcarski wysokoniemiecki",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"dżerma",doi:"dogri",dsb:"dolnołużycki",dtp:"dusun centralny",dua:"duala",dum:"średniowieczny niderlandzki",dv:"malediwski",dyo:"diola",dyu:"diula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emilijski",egy:"staroegipski",eka:"ekajuk",el:"grecki",elx:"elamicki",en:"angielski","en-AU":"australijski angielski","en-CA":"kanadyjski angielski","en-GB":"brytyjski angielski","en-US":"amerykański angielski",enm:"średnioangielski",eo:"esperanto",es:"hiszpański","es-419":"amerykański hiszpański","es-ES":"europejski hiszpański","es-MX":"meksykański hiszpański",esu:"yupik środkowosyberyjski",et:"estoński",eu:"baskijski",ewo:"ewondo",ext:"estremadurski",fa:"perski",fan:"fang",fat:"fanti",ff:"fulani",fi:"fiński",fil:"filipino",fit:"meänkieli",fj:"fidżijski",fo:"farerski",fr:"francuski","fr-CA":"kanadyjski francuski","fr-CH":"szwajcarski francuski",frc:"cajuński",frm:"średniofrancuski",fro:"starofrancuski",frp:"franko-prowansalski",frr:"północnofryzyjski",frs:"wschodniofryzyjski",fur:"friulski",fy:"zachodniofryzyjski",ga:"irlandzki",gaa:"ga",gag:"gagauski",gay:"gayo",gba:"gbaya",gbz:"zaratusztriański dari",gd:"szkocki gaelicki",gez:"gyyz",gil:"gilbertański",gl:"galicyjski",glk:"giliański",gmh:"średnio-wysoko-niemiecki",gn:"guarani",goh:"staro-wysoko-niemiecki",gom:"konkani (Goa)",gon:"gondi",gor:"gorontalo",got:"gocki",grb:"grebo",grc:"starogrecki",gsw:"szwajcarski niemiecki",gu:"gudżarati",guc:"wayúu",gur:"frafra",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawajski",he:"hebrajski",hi:"hindi",hif:"hindi fidżyjskie",hil:"hiligaynon",hit:"hetycki",hmn:"hmong",ho:"hiri motu",hr:"chorwacki",hsb:"górnołużycki",hsn:"xiang",ht:"kreolski haitański",hu:"węgierski",hup:"hupa",hy:"ormiański",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indonezyjski",ie:"interlingue",ig:"igbo",ii:"syczuański",ik:"inupiak",ilo:"ilokano",inh:"inguski",io:"ido",is:"islandzki",it:"włoski",iu:"inuktitut",izh:"ingryjski",ja:"japoński",jam:"jamajski",jbo:"lojban",jgo:"ngombe",jmc:"machame",jpr:"judeo-perski",jrb:"judeoarabski",jut:"jutlandzki",jv:"jawajski",ka:"gruziński",kaa:"karakałpacki",kab:"kabylski",kac:"kaczin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardyjski",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kreolski Wysp Zielonego Przylądka",ken:"kenyang",kfo:"koro",kg:"kongo",kgp:"kaingang",kha:"khasi",kho:"chotański",khq:"koyra chiini",khw:"khowar",ki:"kikuju",kiu:"kirmandżki",kj:"kwanyama",kk:"kazachski",kkj:"kako",kl:"grenlandzki",kln:"kalenjin",km:"khmerski",kmb:"kimbundu",kn:"kannada",ko:"koreański",koi:"komi-permiacki",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaczajsko-bałkarski",kri:"krio",krj:"kinaraya",krl:"karelski",kru:"kurukh",ks:"kaszmirski",ksb:"sambala",ksf:"bafia",ksh:"gwara kolońska",ku:"kurdyjski",kum:"kumycki",kut:"kutenai",kv:"komi",kw:"kornijski",ky:"kirgiski",la:"łaciński",lad:"ladyński",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luksemburski",lez:"lezgijski",lfn:"Lingua Franca Nova",lg:"ganda",li:"limburski",lij:"liguryjski",liv:"liwski",lkt:"lakota",lmo:"lombardzki",ln:"lingala",lo:"laotański",lol:"mongo",lou:"kreolski luizjański",loz:"lozi",lrc:"luryjski północny",lt:"litewski",ltg:"łatgalski",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luhya",lv:"łotewski",lzh:"chiński klasyczny",lzz:"lazyjski",mad:"madurski",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masajski",mde:"maba",mdf:"moksza",mdr:"mandar",men:"mende",mer:"meru",mfe:"kreolski Mauritiusa",mg:"malgaski",mga:"średnioirlandzki",mgh:"makua",mgo:"meta",mh:"marszalski",mi:"maoryjski",mic:"mikmak",min:"minangkabu",mk:"macedoński",ml:"malajalam",mn:"mongolski",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"zachodniomaryjski",ms:"malajski",mt:"maltański",mua:"mundang",mus:"krik",mwl:"mirandyjski",mwr:"marwari",mwv:"mentawai",my:"birmański",mye:"myene",myv:"erzja",mzn:"mazanderański",na:"nauruański",nan:"minnański",nap:"neapolitański",naq:"nama",nb:"norweski (bokmål)",nd:"ndebele północny",nds:"dolnoniemiecki","nds-NL":"dolnosaksoński",ne:"nepalski","new":"newarski",ng:"ndonga",nia:"nias",niu:"niue",njo:"ao",nl:"niderlandzki","nl-BE":"flamandzki",nmg:"ngumba",nn:"norweski (nynorsk)",nnh:"ngiemboon",no:"norweski",nog:"nogajski",non:"staronordyjski",nov:"novial",nqo:"n’ko",nr:"ndebele południowy",nso:"sotho północny",nus:"nuer",nv:"nawaho",nwc:"newarski klasyczny",ny:"njandża",nym:"niamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzema",oc:"oksytański",oj:"odżibwa",om:"oromo",or:"orija",os:"osetyjski",osa:"osage",ota:"osmańsko-turecki",pa:"pendżabski",pag:"pangasinan",pal:"pahlavi",pam:"pampango",pap:"papiamento",pau:"palau",pcd:"pikardyjski",pcm:"pidżyn nigeryjski",pdc:"pensylwański",pdt:"plautdietsch",peo:"staroperski",pfl:"palatynacki",phn:"fenicki",pi:"palijski",pl:"polski",pms:"piemoncki",pnt:"pontyjski",pon:"ponpejski",prg:"pruski",pro:"staroprowansalski",ps:"paszto",pt:"portugalski","pt-BR":"brazylijski portugalski","pt-PT":"europejski portugalski",qu:"keczua",quc:"kicze",qug:"keczua górski (Chimborazo)",raj:"radźasthani",rap:"rapanui",rar:"rarotonga",rgn:"romagnol",rif:"tarifit",rm:"retoromański",rn:"rundi",ro:"rumuński","ro-MD":"mołdawski",rof:"rombo",rom:"cygański",root:"język rdzenny",rtm:"rotumański",ru:"rosyjski",rue:"rusiński",rug:"roviana",rup:"arumuński",rw:"kinya-ruanda",rwk:"rwa",sa:"sanskryt",sad:"sandawe",sah:"jakucki",sam:"samarytański aramejski",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurasztryjski",sba:"ngambay",sbp:"sangu",sc:"sardyński",scn:"sycylijski",sco:"scots",sd:"sindhi",sdc:"sassarski",sdh:"południowokurdyjski",se:"północnolapoński",see:"seneka",seh:"sena",sei:"seri",sel:"selkupski",ses:"koyraboro senni",sg:"sango",sga:"staroirlandzki",sgs:"żmudzki",sh:"serbsko-chorwacki",shi:"tashelhiyt",shn:"szan",shu:"arabski (Czad)",si:"syngaleski",sid:"sidamo",sk:"słowacki",sl:"słoweński",sli:"dolnośląski",sly:"selayar",sm:"samoański",sma:"południowolapoński",smj:"lule",smn:"inari",sms:"skolt",sn:"shona",snk:"soninke",so:"somalijski",sog:"sogdyjski",sq:"albański",sr:"serbski",srn:"sranan tongo",srr:"serer",ss:"suazi",ssy:"saho",st:"sotho południowy",stq:"fryzyjski saterlandzki",su:"sundajski",suk:"sukuma",sus:"susu",sux:"sumeryjski",sv:"szwedzki",sw:"suahili","sw-CD":"kongijski suahili",swb:"komoryjski",syc:"syriacki",syr:"syryjski",szl:"śląski",ta:"tamilski",tcy:"tulu",te:"telugu",tem:"temne",teo:"ateso",ter:"tereno",tet:"tetum",tg:"tadżycki",th:"tajski",ti:"tigrinia",tig:"tigre",tiv:"tiw",tk:"turkmeński",tkl:"tokelau",tkr:"cachurski",tl:"tagalski",tlh:"klingoński",tli:"tlingit",tly:"tałyski",tmh:"tamaszek",tn:"setswana",to:"tonga",tog:"tonga (Niasa)",tpi:"tok pisin",tr:"turecki",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"cakoński",tsi:"tsimshian",tt:"tatarski",ttt:"tacki",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitański",tyv:"tuwiński",tzm:"tamazight (Atlas Środkowy)",udm:"udmurcki",ug:"ujgurski",uga:"ugarycki",uk:"ukraiński",umb:"umbundu",ur:"urdu",uz:"uzbecki",vai:"wai",ve:"venda",vec:"wenecki",vep:"wepski",vi:"wietnamski",vls:"zachodnioflamandzki",vmf:"meński frankoński",vo:"wolapik",vot:"wotiacki",vro:"võro",vun:"vunjo",wa:"waloński",wae:"walser",wal:"wolayta",war:"waraj",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kałmucki",xh:"khosa",xmf:"megrelski",xog:"soga",yap:"japski",yav:"yangben",ybb:"yemba",yi:"jidysz",yo:"joruba",yrl:"nheengatu",yue:"kantoński",za:"czuang",zap:"zapotecki",zbl:"bliss",zea:"zelandzki",zen:"zenaga",zgh:"standardowy marokański tamazight",zh:"chiński","zh-Hans":"standardowy chiński uproszczony","zh-Hant":"standardowy chiński tradycyjny",zu:"zulu",zun:"zuni",zza:"zazaki"},scriptNames:{Cyrl:"cyrylica",Latn:"łacińskie",Arab:"arabskie",Guru:"gurmukhi",Tfng:"tifinagh (berberski)",Vaii:"vai",Hans:"uproszczone",Hant:"tradycyjne"}},pt:{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africanês",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai do sul",am:"amárico",an:"aragonês",ang:"inglês antigo",anp:"angika",ar:"árabe","ar-001":"árabe moderno padrão",arc:"aramaico",arn:"mapuche",arp:"arapaho",ars:"árabe do Négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avaric",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengalês",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriat",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"changma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuquês",chm:"mari",chn:"jargão chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"sorani curdo",co:"córsico",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"francês crioulo seselwa",cs:"checo",csb:"kashubian",cu:"eslavo eclesiástico",cv:"chuvash",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão austríaco","de-CH":"alto alemão suíço",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egípcio clássico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês australiano","en-CA":"inglês canadiano","en-GB":"inglês britânico","en-US":"inglês americano",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol latino-americano","es-ES":"espanhol europeu","es-MX":"espanhol mexicano",et:"estónio",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fr:"francês","fr-CA":"francês canadiano","fr-CH":"francês suíço",frc:"francês cajun",frm:"francês médio",fro:"francês antigo",frr:"frísio setentrional",frs:"frísio oriental",fur:"friulano",fy:"frísico ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geʼez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão alto antigo",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego clássico",gsw:"alemão suíço",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"haúça",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"hindi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"arménio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"cabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"gronelandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"carachaio-bálcaro",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezghiano",lg:"ganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo de Louisiana",loz:"lozi",lrc:"luri do norte",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makassarês",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedónio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marata",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"norueguês bokmål",nd:"ndebele do norte",nds:"baixo-alemão","nds-NL":"baixo-saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"neerlandês","nl-BE":"flamengo",nmg:"kwasio",nn:"norueguês nynorsk",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico antigo",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitano",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossético",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"língua pangasinesa",pal:"pálavi",pam:"pampango",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa antigo",phn:"fenício",pi:"páli",pl:"polaco",pon:"língua pohnpeica",prg:"prussiano",pro:"provençal antigo",ps:"pastó",pt:"português","pt-BR":"português do Brasil","pt-PT":"português europeu",qu:"quíchua",quc:"quiché",raj:"rajastanês",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami do norte",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês antigo",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe do Chade",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami do sul",smj:"sami de Lule",smn:"inari sami",sms:"sami de Skolt",sn:"shona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tajique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomano",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonga",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tatar",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazight do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"usbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uólofe",wuu:"wu",xal:"kalmyk",xh:"xosa",xog:"soga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"ioruba",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazight marroquino padrão",zh:"chinês","zh-Hans":"chinês mandarim simplificado","zh-Hant":"chinês mandarim tradicional",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},"pt-BR":{rtl:false,languageNames:{aa:"afar",ab:"abcázio",ace:"achém",ach:"acoli",ada:"adangme",ady:"adigue",ae:"avéstico",af:"africâner",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"acadiano",ale:"aleúte",alt:"altai meridional",am:"amárico",an:"aragonês",ang:"inglês arcaico",anp:"angika",ar:"árabe","ar-001":"árabe moderno",arc:"aramaico",arn:"mapudungun",arp:"arapaho",ars:"árabe négede",arw:"arauaqui",as:"assamês",asa:"asu",ast:"asturiano",av:"avárico",awa:"awadhi",ay:"aimará",az:"azerbaijano","az-Arab":"azeri sul",ba:"bashkir",bal:"balúchi",ban:"balinês",bas:"basa",bax:"bamum",bbj:"ghomala’",be:"bielorrusso",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"búlgaro",bgn:"balúchi ocidental",bho:"bhojpuri",bi:"bislamá",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetano",br:"bretão",bra:"braj",brx:"bodo",bs:"bósnio",bss:"akoose",bua:"buriato",bug:"buginês",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalão",cad:"caddo",car:"caribe",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"checheno",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargão Chinook",cho:"choctaw",chp:"chipewyan",chr:"cheroqui",chy:"cheiene",ckb:"curdo central",co:"corso",cop:"copta",cr:"cree",crh:"turco da Crimeia",crs:"crioulo francês seichelense",cs:"tcheco",csb:"kashubian",cu:"eslavo eclesiástico",cv:"tchuvache",cy:"galês",da:"dinamarquês",dak:"dacota",dar:"dargwa",dav:"taita",de:"alemão","de-AT":"alemão (Áustria)","de-CH":"alto alemão (Suíça)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"baixo sorábio",dua:"duala",dum:"holandês médio",dv:"divehi",dyo:"jola-fonyi",dyu:"diúla",dz:"dzonga",dzg:"dazaga",ebu:"embu",ee:"eve",efi:"efique",egy:"egípcio arcaico",eka:"ekajuk",el:"grego",elx:"elamite",en:"inglês","en-AU":"inglês (Austrália)","en-CA":"inglês (Canadá)","en-GB":"inglês (Reino Unido)","en-US":"inglês (Estados Unidos)",enm:"inglês médio",eo:"esperanto",es:"espanhol","es-419":"espanhol (América Latina)","es-ES":"espanhol (Espanha)","es-MX":"espanhol (México)",et:"estoniano",eu:"basco",ewo:"ewondo",fa:"persa",fan:"fangue",fat:"fanti",ff:"fula",fi:"finlandês",fil:"filipino",fj:"fijiano",fo:"feroês",fon:"fom",fr:"francês","fr-CA":"francês (Canadá)","fr-CH":"francês (Suíça)",frc:"francês cajun",frm:"francês médio",fro:"francês arcaico",frr:"frísio setentrional",frs:"frisão oriental",fur:"friulano",fy:"frísio ocidental",ga:"irlandês",gaa:"ga",gag:"gagauz",gay:"gayo",gba:"gbaia",gd:"gaélico escocês",gez:"geez",gil:"gilbertês",gl:"galego",gmh:"alto alemão médio",gn:"guarani",goh:"alemão arcaico alto",gon:"gondi",gor:"gorontalo",got:"gótico",grb:"grebo",grc:"grego arcaico",gsw:"alemão (Suíça)",gu:"guzerate",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hauçá",hai:"haida",hak:"hacá",haw:"havaiano",he:"hebraico",hi:"híndi",hil:"hiligaynon",hit:"hitita",hmn:"hmong",ho:"hiri motu",hr:"croata",hsb:"alto sorábio",hsn:"xiang",ht:"haitiano",hu:"húngaro",hup:"hupa",hy:"armênio",hz:"herero",ia:"interlíngua",iba:"iban",ibb:"ibibio",id:"indonésio",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiaque",ilo:"ilocano",inh:"inguche",io:"ido",is:"islandês",it:"italiano",iu:"inuktitut",ja:"japonês",jbo:"lojban",jgo:"nguemba",jmc:"machame",jpr:"judaico-persa",jrb:"judaico-arábico",jv:"javanês",ka:"georgiano",kaa:"kara-kalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardiano",kbl:"kanembu",kcg:"tyap",kde:"maconde",kea:"crioulo cabo-verdiano",kfo:"koro",kg:"congolês",kha:"khasi",kho:"khotanês",khq:"koyra chiini",ki:"quicuio",kj:"cuanhama",kk:"cazaque",kkj:"kako",kl:"groenlandês",kln:"kalenjin",km:"khmer",kmb:"quimbundo",kn:"canarim",ko:"coreano",koi:"komi-permyak",kok:"concani",kos:"kosraean",kpe:"kpelle",kr:"canúri",krc:"karachay-balkar",krl:"carélio",kru:"kurukh",ks:"caxemira",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"curdo",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"córnico",ky:"quirguiz",la:"latim",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburguês",lez:"lezgui",lg:"luganda",li:"limburguês",lkt:"lacota",ln:"lingala",lo:"laosiano",lol:"mongo",lou:"crioulo da Louisiana",loz:"lozi",lrc:"luri setentrional",lt:"lituano",lu:"luba-catanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",luy:"luyia",lv:"letão",mad:"madurês",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandinga",mas:"massai",mde:"maba",mdf:"mocsa",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgaxe",mga:"irlandês médio",mgh:"macua",mgo:"meta’",mh:"marshalês",mi:"maori",mic:"miquemaque",min:"minangkabau",mk:"macedônio",ml:"malaiala",mn:"mongol",mnc:"manchu",mni:"manipuri",moh:"moicano",mos:"mossi",mr:"marati",ms:"malaio",mt:"maltês",mua:"mundang",mus:"creek",mwl:"mirandês",mwr:"marwari",my:"birmanês",mye:"myene",myv:"erzya",mzn:"mazandarani",na:"nauruano",nan:"min nan",nap:"napolitano",naq:"nama",nb:"bokmål norueguês",nd:"ndebele do norte",nds:"baixo alemão","nds-NL":"baixo saxão",ne:"nepalês","new":"newari",ng:"dongo",nia:"nias",niu:"niueano",nl:"holandês","nl-BE":"flamengo",nmg:"kwasio",nn:"nynorsk norueguês",nnh:"ngiemboon",no:"norueguês",nog:"nogai",non:"nórdico arcaico",nqo:"n’ko",nr:"ndebele do sul",nso:"soto setentrional",nus:"nuer",nv:"navajo",nwc:"newari clássico",ny:"nianja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitânico",oj:"ojibwa",om:"oromo",or:"oriá",os:"osseto",osa:"osage",ota:"turco otomano",pa:"panjabi",pag:"pangasinã",pal:"pálavi",pam:"pampanga",pap:"papiamento",pau:"palauano",pcm:"pidgin nigeriano",peo:"persa arcaico",phn:"fenício",pi:"páli",pl:"polonês",pon:"pohnpeiano",prg:"prussiano",pro:"provençal arcaico",ps:"pashto",pt:"português","pt-BR":"português (Brasil)","pt-PT":"português (Portugal)",qu:"quíchua",quc:"quiché",raj:"rajastani",rap:"rapanui",rar:"rarotongano",rm:"romanche",rn:"rundi",ro:"romeno","ro-MD":"moldávio",rof:"rombo",rom:"romani",root:"raiz",ru:"russo",rup:"aromeno",rw:"quiniaruanda",rwk:"rwa",sa:"sânscrito",sad:"sandawe",sah:"sakha",sam:"aramaico samaritano",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardo",scn:"siciliano",sco:"scots",sd:"sindi",sdh:"curdo meridional",se:"sami setentrional",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro senni",sg:"sango",sga:"irlandês arcaico",sh:"servo-croata",shi:"tachelhit",shn:"shan",shu:"árabe chadiano",si:"cingalês",sid:"sidamo",sk:"eslovaco",sl:"esloveno",sm:"samoano",sma:"sami meridional",smj:"sami de Lule",smn:"sami de Inari",sms:"sami de Skolt",sn:"xona",snk:"soninquê",so:"somali",sog:"sogdiano",sq:"albanês",sr:"sérvio",srn:"surinamês",srr:"serere",ss:"suázi",ssy:"saho",st:"soto do sul",su:"sundanês",suk:"sukuma",sus:"susu",sux:"sumério",sv:"sueco",sw:"suaíli","sw-CD":"suaíli do Congo",swb:"comoriano",syc:"siríaco clássico",syr:"siríaco",ta:"tâmil",te:"télugo",tem:"timne",teo:"teso",ter:"tereno",tet:"tétum",tg:"tadjique",th:"tailandês",ti:"tigrínia",tig:"tigré",tk:"turcomeno",tkl:"toquelauano",tl:"tagalo",tlh:"klingon",tli:"tlinguite",tmh:"tamaxeque",tn:"tswana",to:"tonganês",tog:"tonganês de Nyasa",tpi:"tok pisin",tr:"turco",trv:"taroko",ts:"tsonga",tsi:"tsimshiano",tt:"tártaro",tum:"tumbuka",tvl:"tuvaluano",tw:"twi",twq:"tasawaq",ty:"taitiano",tyv:"tuviniano",tzm:"tamazirte do Atlas Central",udm:"udmurte",ug:"uigur",uga:"ugarítico",uk:"ucraniano",umb:"umbundu",ur:"urdu",uz:"uzbeque",ve:"venda",vi:"vietnamita",vo:"volapuque",vot:"vótico",vun:"vunjo",wa:"valão",wae:"walser",wal:"wolaytta",war:"waray",was:"washo",wbp:"warlpiri",wo:"uolofe",wuu:"wu",xal:"kalmyk",xh:"xhosa",xog:"lusoga",yap:"yapese",yav:"yangben",ybb:"yemba",yi:"iídiche",yo:"iorubá",yue:"cantonês",za:"zhuang",zap:"zapoteco",zbl:"símbolos blis",zen:"zenaga",zgh:"tamazirte marroqino padrão",zh:"chinês","zh-Hans":"chinês mandarim (simplificado)","zh-Hant":"chinês mandarim (tradicional)",zu:"zulu",zun:"zunhi",zza:"zazaki"},scriptNames:{Cyrl:"cirílico",Latn:"latim",Arab:"árabe",Guru:"gurmuqui",Tfng:"tifinagh",Vaii:"vai",Hans:"simplificado",Hant:"tradicional"}},rm:{rtl:false,languageNames:{aa:"afar",ab:"abchasian",ace:"aceh",ach:"acoli",ada:"andangme",ady:"adygai",ae:"avestic",af:"afrikaans",afh:"afrihili",ain:"ainu",ak:"akan",akk:"accadic",ale:"aleutic",alt:"altaic dal sid",am:"amaric",an:"aragonais",ang:"englais vegl",anp:"angika",ar:"arab","ar-001":"arab (mund)",arc:"arameic",arn:"araucanic",arp:"arapaho",arw:"arawak",as:"assami",ast:"asturian",av:"avaric",awa:"awadhi",ay:"aymara",az:"aserbeidschanic",ba:"baschkir",bal:"belutschi",ban:"balinais",bas:"basaa",be:"bieloruss",bej:"bedscha",bem:"bemba",bg:"bulgar",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bla:"siksika",bm:"bambara",bn:"bengal",bo:"tibetan",br:"breton",bra:"braj",bs:"bosniac",bua:"buriat",bug:"bugi",byn:"blin",ca:"catalan",cad:"caddo",car:"caribic",cch:"atsam",ce:"tschetschen",ceb:"cebuano",ch:"chamorro",chb:"chibcha",chg:"tschagataic",chk:"chuukais",chm:"mari",chn:"patuà chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",co:"cors",cop:"coptic",cr:"cree",crh:"tirc crimean",cs:"tschec",csb:"kaschubic",cu:"slav da baselgia",cv:"tschuvasch",cy:"kimric",da:"danais",dak:"dakota",dar:"dargwa",de:"tudestg","de-AT":"tudestg austriac","de-CH":"tudestg (Svizra)",del:"delaware",den:"slavey",dgr:"dogrib",din:"dinka",doi:"dogri",dsb:"bass sorb",dua:"duala",dum:"ollandais mesaun",dv:"maledivic",dyu:"diula",dz:"dzongkha",ee:"ewe",efi:"efik",egy:"egipzian vegl",eka:"ekajuk",el:"grec",elx:"elamitic",en:"englais","en-AU":"englais australian","en-CA":"englais canadais","en-GB":"englais britannic","en-US":"englais american",enm:"englais mesaun",eo:"esperanto",es:"spagnol","es-419":"spagnol latinamerican","es-ES":"spagnol iberic","es-MX":"spagnol (Mexico)",et:"eston",eu:"basc",ewo:"ewondo",fa:"persian",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandais",fil:"filippino",fj:"fidschian",fo:"ferrais",fr:"franzos","fr-CA":"franzos canadais","fr-CH":"franzos svizzer",frm:"franzos mesaun",fro:"franzos vegl",frr:"fris dal nord",frs:"fris da l’ost",fur:"friulan",fy:"fris",ga:"irlandais",gaa:"ga",gay:"gayo",gba:"gbaya",gd:"gaelic scot",gez:"geez",gil:"gilbertais",gl:"galician",gmh:"tudestg mesaun",gn:"guarani",goh:"vegl tudestg da scrittira",gon:"gondi",gor:"gorontalo",got:"gotic",grb:"grebo",grc:"grec vegl",gsw:"tudestg svizzer",gu:"gujarati",gv:"manx",gwi:"gwichʼin",ha:"haussa",hai:"haida",haw:"hawaian",he:"ebraic",hi:"hindi",hil:"hiligaynon",hit:"ettitic",hmn:"hmong",ho:"hiri motu",hr:"croat",hsb:"aut sorb",ht:"haitian",hu:"ungarais",hup:"hupa",hy:"armen",hz:"herero",ia:"interlingua",iba:"iban",id:"indonais",ie:"interlingue",ig:"igbo",ii:"sichuan yi",ik:"inupiak",ilo:"ilocano",inh:"ingush",io:"ido",is:"islandais",it:"talian",iu:"inuktitut",ja:"giapunais",jbo:"lojban",jpr:"giudaic-persian",jrb:"giudaic-arab",jv:"javanais",ka:"georgian",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardic",kcg:"tyap",kfo:"koro",kg:"kongo",kha:"khasi",kho:"khotanais",ki:"kikuyu",kj:"kuanyama",kk:"casac",kl:"grönlandais",km:"cambodschan",kmb:"kimbundu",kn:"kannada",ko:"corean",kok:"konkani",kos:"kosraean",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",krl:"carelian",kru:"kurukh",ks:"kashmiri",ku:"curd",kum:"kumuk",kut:"kutenai",kv:"komi",kw:"cornic",ky:"kirghis",la:"latin",lad:"ladino",lah:"lahnda",lam:"lamba",lb:"luxemburgais",lez:"lezghian",lg:"ganda",li:"limburgais",ln:"lingala",lo:"laot",lol:"lomongo",loz:"lozi",lt:"lituan",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"lushai",lv:"letton",mad:"madurais",mag:"magahi",mai:"maithili",mak:"makassar",man:"mandingo",mas:"masai",mdf:"moksha",mdr:"mandar",men:"mende",mg:"malagassi",mga:"irlandais mesaun",mh:"marschallais",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedon",ml:"malayalam",mn:"mongolic",mnc:"manchu",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaic",mt:"maltais",mus:"creek",mwl:"mirandais",mwr:"marwari",my:"birman",myv:"erzya",na:"nauru",nap:"neapolitan",nb:"norvegais bokmål",nd:"ndebele dal nord",nds:"bass tudestg","nds-NL":"bass tudestg (Pajais Bass)",ne:"nepalais","new":"newari",ng:"ndonga",nia:"nias",niu:"niue",nl:"ollandais","nl-BE":"flam",nn:"norvegiais nynorsk",no:"norvegiais",nog:"nogai",non:"nordic vegl",nqo:"n’ko",nr:"ndebele dal sid",nso:"sotho dal nord",nv:"navajo",nwc:"newari classic",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitan",oj:"ojibwa",om:"oromo",or:"oriya",os:"ossetic",osa:"osage",ota:"tirc ottoman",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palau",peo:"persian vegl",phn:"fenizian",pi:"pali",pl:"polac",pon:"ponapean",pro:"provenzal vegl",ps:"paschto",pt:"portugais","pt-BR":"portugais brasilian","pt-PT":"portugais iberian",qu:"quechua",raj:"rajasthani",rap:"rapanui",rar:"rarotonga",rm:"rumantsch",rn:"rundi",ro:"rumen","ro-MD":"moldav",rom:"romani",ru:"russ",rup:"aromunic",rw:"kinyarwanda",sa:"sanscrit",sad:"sandawe",sah:"jakut",sam:"arameic samaritan",sas:"sasak",sat:"santali",sc:"sard",scn:"sicilian",sco:"scot",sd:"sindhi",se:"sami dal nord",sel:"selkup",sg:"sango",sga:"irlandais vegl",sh:"serbo-croat",shn:"shan",si:"singalais",sid:"sidamo",sk:"slovac",sl:"sloven",sm:"samoan",sma:"sami dal sid",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somali",sog:"sogdian",sq:"albanais",sr:"serb",srn:"sranan tongo",srr:"serer",ss:"swazi",st:"sotho dal sid",su:"sundanais",suk:"sukuma",sus:"susu",sux:"sumeric",sv:"svedais",sw:"suahili","sw-CD":"suahili (Republica Democratica dal Congo)",syc:"siric classic",syr:"siric",ta:"tamil",te:"telugu",tem:"temne",ter:"tereno",tet:"tetum",tg:"tadjik",th:"tailandais",ti:"tigrinya",tig:"tigre",tk:"turkmen",tkl:"tokelau",tl:"tagalog",tlh:"klingonic",tli:"tlingit",tmh:"tamasheq",tn:"tswana",to:"tonga",tog:"lingua tsonga",tpi:"tok pisin",tr:"tirc",ts:"tsonga",tsi:"tsimshian",tt:"tatar",tum:"tumbuka",tvl:"tuvalu",tw:"twi",ty:"tahitian",tyv:"tuvinian",udm:"udmurt",ug:"uiguric",uga:"ugaritic",uk:"ucranais",umb:"mbundu",ur:"urdu",uz:"usbec",ve:"venda",vi:"vietnamais",vo:"volapuk",vot:"votic",wa:"vallon",wal:"walamo",war:"waray",was:"washo",wo:"wolof",xal:"kalmuk",xh:"xhosa",yap:"yapais",yi:"jiddic",yo:"yoruba",za:"zhuang",zap:"zapotec",zbl:"simbols da Bliss",zen:"zenaga",zh:"chinais","zh-Hans":"chinais (scrittira chinaisa simplifitgada)","zh-Hant":"chinais (scrittira chinaisa tradiziunala)",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"cirillic",Latn:"latin",Arab:"arab",Guru:"gurmukhi",Tfng:"tifinagh",Vaii:"vaii",Hans:"scrittira chinaisa simplifitgada",Hant:"scrittira chinaisa tradiziunala"}},ro:{rtl:false,languageNames:{aa:"afar",ab:"abhază",ace:"aceh",ach:"acoli",ada:"adangme",ady:"adyghe",ae:"avestană",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiană",ale:"aleută",alt:"altaică meridională",am:"amharică",an:"aragoneză",ang:"engleză veche",anp:"angika",ar:"arabă","ar-001":"arabă standard modernă",arc:"aramaică",arn:"mapuche",arp:"arapaho",ars:"arabă najdi",arw:"arawak",as:"asameză",asa:"asu",ast:"asturiană",av:"avară",awa:"awadhi",ay:"aymara",az:"azeră",ba:"bașkiră",bal:"baluchi",ban:"balineză",bas:"basaa",bax:"bamun",bbj:"ghomala",be:"belarusă",bej:"beja",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulgară",bgn:"baluchi occidentală",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambara",bn:"bengaleză",bo:"tibetană",br:"bretonă",bra:"braj",brx:"bodo",bs:"bosniacă",bss:"akoose",bua:"buriat",bug:"bugineză",bum:"bulu",byn:"blin",byv:"medumba",ca:"catalană",cad:"caddo",car:"carib",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"cecenă",ceb:"cebuană",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukese",chm:"mari",chn:"jargon chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokee",chy:"cheyenne",ckb:"kurdă centrală",co:"corsicană",cop:"coptă",cr:"cree",crh:"turcă crimeeană",crs:"creolă franceză seselwa",cs:"cehă",csb:"cașubiană",cu:"slavonă",cv:"ciuvașă",cy:"galeză",da:"daneză",dak:"dakota",dar:"dargwa",dav:"taita",de:"germană","de-AT":"germană (Austria)","de-CH":"germană standard (Elveția)",del:"delaware",den:"slave",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"sorabă de jos",dua:"duala",dum:"neerlandeză medie",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egy:"egipteană veche",eka:"ekajuk",el:"greacă",elx:"elamită",en:"engleză","en-AU":"engleză (Australia)","en-CA":"engleză (Canada)","en-GB":"engleză (Regatul Unit)","en-US":"engleză (Statele Unite ale Americii)",enm:"engleză medie",eo:"esperanto",es:"spaniolă","es-419":"spaniolă (America Latină)","es-ES":"spaniolă (Europa)","es-MX":"spaniolă (Mexic)",et:"estonă",eu:"bască",ewo:"ewondo",fa:"persană",fan:"fang",fat:"fanti",ff:"fulah",fi:"finlandeză",fil:"filipineză",fj:"fijiană",fo:"faroeză",fr:"franceză","fr-CA":"franceză (Canada)","fr-CH":"franceză (Elveția)",frc:"franceză cajun",frm:"franceză medie",fro:"franceză veche",frr:"frizonă nordică",frs:"frizonă orientală",fur:"friulană",fy:"frizonă occidentală",ga:"irlandeză",gaa:"ga",gag:"găgăuză",gan:"chineză gan",gay:"gayo",gba:"gbaya",gd:"gaelică scoțiană",gez:"geez",gil:"gilbertină",gl:"galiciană",gmh:"germană înaltă medie",gn:"guarani",goh:"germană înaltă veche",gon:"gondi",gor:"gorontalo",got:"gotică",grb:"grebo",grc:"greacă veche",gsw:"germană (Elveția)",gu:"gujarati",guz:"gusii",gv:"manx",gwi:"gwichʼin",ha:"hausa",hai:"haida",hak:"chineză hakka",haw:"hawaiiană",he:"ebraică",hi:"hindi",hil:"hiligaynon",hit:"hitită",hmn:"hmong",ho:"hiri motu",hr:"croată",hsb:"sorabă de sus",hsn:"chineză xiang",ht:"haitiană",hu:"maghiară",hup:"hupa",hy:"armeană",hz:"herero",ia:"interlingua",iba:"iban",ibb:"ibibio",id:"indoneziană",ie:"interlingue",ig:"igbo",ii:"yi din Sichuan",ik:"inupiak",ilo:"iloko",inh:"ingușă",io:"ido",is:"islandeză",it:"italiană",iu:"inuktitut",ja:"japoneză",jbo:"lojban",jgo:"ngomba",jmc:"machame",jpr:"iudeo-persană",jrb:"iudeo-arabă",jv:"javaneză",ka:"georgiană",kaa:"karakalpak",kab:"kabyle",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardian",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kabuverdianu",kfo:"koro",kg:"congoleză",kha:"khasi",kho:"khotaneză",khq:"koyra chiini",ki:"kikuyu",kj:"kuanyama",kk:"kazahă",kkj:"kako",kl:"kalaallisut",kln:"kalenjin",km:"khmeră",kmb:"kimbundu",kn:"kannada",ko:"coreeană",koi:"komi-permiak",kok:"konkani",kos:"kosrae",kpe:"kpelle",kr:"kanuri",krc:"karaceai-balkar",krl:"kareliană",kru:"kurukh",ks:"cașmiră",ksb:"shambala",ksf:"bafia",ksh:"kölsch",ku:"kurdă",kum:"kumyk",kut:"kutenai",kv:"komi",kw:"cornică",ky:"kârgâză",la:"latină",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgheză",lez:"lezghian",lg:"ganda",li:"limburgheză",lkt:"lakota",ln:"lingala",lo:"laoțiană",lol:"mongo",lou:"creolă (Louisiana)",loz:"lozi",lrc:"luri de nord",lt:"lituaniană",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseno",lun:"lunda",lus:"mizo",luy:"luyia",lv:"letonă",mad:"madureză",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mandingo",mas:"masai",mde:"maba",mdf:"moksha",mdr:"mandar",men:"mende",mer:"meru",mfe:"morisyen",mg:"malgașă",mga:"irlandeză medie",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalleză",mi:"maori",mic:"micmac",min:"minangkabau",mk:"macedoneană",ml:"malayalam",mn:"mongolă",mnc:"manciuriană",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",ms:"malaeză",mt:"malteză",mua:"mundang",mus:"creek",mwl:"mirandeză",mwr:"marwari",my:"birmană",mye:"myene",myv:"erzya",mzn:"mazanderani",na:"nauru",nan:"chineză min nan",nap:"napolitană",naq:"nama",nb:"norvegiană bokmål",nd:"ndebele de nord",nds:"germana de jos","nds-NL":"saxona de jos",ne:"nepaleză","new":"newari",ng:"ndonga",nia:"nias",niu:"niueană",nl:"neerlandeză","nl-BE":"flamandă",nmg:"kwasio",nn:"norvegiană nynorsk",nnh:"ngiemboon",no:"norvegiană",nog:"nogai",non:"nordică veche",nqo:"n’ko",nr:"ndebele de sud",nso:"sotho de nord",nus:"nuer",nv:"navajo",nwc:"newari clasică",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitană",oj:"ojibwa",om:"oromo",or:"odia",os:"osetă",osa:"osage",ota:"turcă otomană",pa:"punjabi",pag:"pangasinan",pal:"pahlavi",pam:"pampanga",pap:"papiamento",pau:"palauană",pcm:"pidgin nigerian",peo:"persană veche",phn:"feniciană",pi:"pali",pl:"poloneză",pon:"pohnpeiană",prg:"prusacă",pro:"provensală veche",ps:"paștună",pt:"portugheză","pt-BR":"portugheză (Brazilia)","pt-PT":"portugheză (Europa)",qu:"quechua",quc:"quiché",raj:"rajasthani",rap:"rapanui",rar:"rarotongan",rm:"romanșă",rn:"kirundi",ro:"română","ro-MD":"română (Republica Moldova)",rof:"rombo",rom:"romani",ru:"rusă",rup:"aromână",rw:"kinyarwanda",rwk:"rwa",sa:"sanscrită",sad:"sandawe",sah:"sakha",sam:"aramaică samariteană",saq:"samburu",sas:"sasak",sat:"santali",sba:"ngambay",sbp:"sangu",sc:"sardiniană",scn:"siciliană",sco:"scots",sd:"sindhi",sdh:"kurdă de sud",se:"sami de nord",see:"seneca",seh:"sena",sel:"selkup",ses:"koyraboro Senni",sg:"sango",sga:"irlandeză veche",sh:"sârbo-croată",shi:"tachelhit",shn:"shan",shu:"arabă ciadiană",si:"singhaleză",sid:"sidamo",sk:"slovacă",sl:"slovenă",sm:"samoană",sma:"sami de sud",smj:"sami lule",smn:"sami inari",sms:"sami skolt",sn:"shona",snk:"soninke",so:"somaleză",sog:"sogdien",sq:"albaneză",sr:"sârbă",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sesotho",su:"sundaneză",suk:"sukuma",sus:"susu",sux:"sumeriană",sv:"suedeză",sw:"swahili","sw-CD":"swahili (R.D. Congo)",swb:"comoreză",syc:"siriacă clasică",syr:"siriacă",ta:"tamilă",te:"telugu",tem:"timne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadjică",th:"thailandeză",ti:"tigrină",tig:"tigre",tk:"turkmenă",tkl:"tokelau",tl:"tagalog",tlh:"klingoniană",tli:"tlingit",tmh:"tamashek",tn:"setswana",to:"tongană",tog:"nyasa tonga",tpi:"tok pisin",tr:"turcă",trv:"taroko",ts:"tsonga",tsi:"tsimshian",tt:"tătară",tum:"tumbuka",tvl:"tuvalu",tw:"twi",twq:"tasawaq",ty:"tahitiană",tyv:"tuvană",tzm:"tamazight din Altasul Central",udm:"udmurt",ug:"uigură",uga:"ugaritică",uk:"ucraineană",umb:"umbundu",ur:"urdu",uz:"uzbecă",ve:"venda",vi:"vietnameză",vo:"volapuk",vot:"votică",vun:"vunjo",wa:"valonă",wae:"walser",wal:"wolaita",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"chineză wu",xal:"calmucă",xh:"xhosa",xog:"soga",yap:"yapeză",yav:"yangben",ybb:"yemba",yi:"idiș",yo:"yoruba",yue:"cantoneză",za:"zhuang",zap:"zapotecă",zbl:"simboluri Bilss",zen:"zenaga",zgh:"tamazight standard marocană",zh:"chineză","zh-Hans":"chineză mandarină simplificată","zh-Hant":"chineză mandarină tradițională",zu:"zulu",zun:"zuni",zza:"zaza"},scriptNames:{Cyrl:"chirilică",Latn:"latină",Arab:"arabă",Guru:"gurmukhi",Tfng:"berberă",Hans:"simplificată",Hant:"tradițională"}},ru:{rtl:false,languageNames:{aa:"афарский",ab:"абхазский",ace:"ачехский",ach:"ачоли",ada:"адангме",ady:"адыгейский",ae:"авестийский",af:"африкаанс",afh:"африхили",agq:"агем",ain:"айнский",ak:"акан",akk:"аккадский",ale:"алеутский",alt:"южноалтайский",am:"амхарский",an:"арагонский",ang:"староанглийский",anp:"ангика",ar:"арабский","ar-001":"арабский литературный",arc:"арамейский",arn:"мапуче",arp:"арапахо",ars:"недждийский арабский",arw:"аравакский",as:"ассамский",asa:"асу",ast:"астурийский",av:"аварский",awa:"авадхи",ay:"аймара",az:"азербайджанский",ba:"башкирский",bal:"белуджский",ban:"балийский",bas:"баса",bax:"бамум",bbj:"гомала",be:"белорусский",bej:"беджа",bem:"бемба",bez:"бена",bfd:"бафут",bg:"болгарский",bgn:"западный белуджский",bho:"бходжпури",bi:"бислама",bik:"бикольский",bin:"бини",bkm:"ком",bla:"сиксика",bm:"бамбара",bn:"бенгальский",bo:"тибетский",br:"бретонский",bra:"брауи",brx:"бодо",bs:"боснийский",bss:"акоосе",bua:"бурятский",bug:"бугийский",bum:"булу",byn:"билин",byv:"медумба",ca:"каталанский",cad:"каддо",car:"кариб",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченский",ceb:"себуано",cgg:"кига",ch:"чаморро",chb:"чибча",chg:"чагатайский",chk:"чукотский",chm:"марийский",chn:"чинук жаргон",cho:"чоктавский",chp:"чипевьян",chr:"чероки",chy:"шайенский",ckb:"сорани",co:"корсиканский",cop:"коптский",cr:"кри",crh:"крымско-татарский",crs:"сейшельский креольский",cs:"чешский",csb:"кашубский",cu:"церковнославянский",cv:"чувашский",cy:"валлийский",da:"датский",dak:"дакота",dar:"даргинский",dav:"таита",de:"немецкий","de-AT":"австрийский немецкий","de-CH":"литературный швейцарский немецкий",del:"делаварский",den:"слейви",dgr:"догриб",din:"динка",dje:"джерма",doi:"догри",dsb:"нижнелужицкий",dua:"дуала",dum:"средненидерландский",dv:"мальдивский",dyo:"диола-фоньи",dyu:"диула",dz:"дзонг-кэ",dzg:"даза",ebu:"эмбу",ee:"эве",efi:"эфик",egy:"древнеегипетский",eka:"экаджук",el:"греческий",elx:"эламский",en:"английский","en-AU":"австралийский английский","en-CA":"канадский английский","en-GB":"британский английский","en-US":"американский английский",enm:"среднеанглийский",eo:"эсперанто",es:"испанский","es-419":"латиноамериканский испанский","es-ES":"европейский испанский","es-MX":"мексиканский испанский",et:"эстонский",eu:"баскский",ewo:"эвондо",fa:"персидский",fan:"фанг",fat:"фанти",ff:"фулах",fi:"финский",fil:"филиппинский",fj:"фиджи",fo:"фарерский",fon:"фон",fr:"французский","fr-CA":"канадский французский","fr-CH":"швейцарский французский",frc:"каджунский французский",frm:"среднефранцузский",fro:"старофранцузский",frr:"северный фризский",frs:"восточный фризский",fur:"фриульский",fy:"западнофризский",ga:"ирландский",gaa:"га",gag:"гагаузский",gan:"гань",gay:"гайо",gba:"гбая",gd:"гэльский",gez:"геэз",gil:"гилбертский",gl:"галисийский",gmh:"средневерхненемецкий",gn:"гуарани",goh:"древневерхненемецкий",gon:"гонди",gor:"горонтало",got:"готский",grb:"гребо",grc:"древнегреческий",gsw:"швейцарский немецкий",gu:"гуджарати",guz:"гусии",gv:"мэнский",gwi:"гвичин",ha:"хауса",hai:"хайда",hak:"хакка",haw:"гавайский",he:"иврит",hi:"хинди",hil:"хилигайнон",hit:"хеттский",hmn:"хмонг",ho:"хиримоту",hr:"хорватский",hsb:"верхнелужицкий",hsn:"сян",ht:"гаитянский",hu:"венгерский",hup:"хупа",hy:"армянский",hz:"гереро",ia:"интерлингва",iba:"ибанский",ibb:"ибибио",id:"индонезийский",ie:"интерлингве",ig:"игбо",ii:"носу",ik:"инупиак",ilo:"илоко",inh:"ингушский",io:"идо",is:"исландский",it:"итальянский",iu:"инуктитут",ja:"японский",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"еврейско-персидский",jrb:"еврейско-арабский",jv:"яванский",ka:"грузинский",kaa:"каракалпакский",kab:"кабильский",kac:"качинский",kaj:"каджи",kam:"камба",kaw:"кави",kbd:"кабардинский",kbl:"канембу",kcg:"тьяп",kde:"маконде",kea:"кабувердьяну",kfo:"коро",kg:"конго",kha:"кхаси",kho:"хотанский",khq:"койра чиини",ki:"кикуйю",kj:"кунама",kk:"казахский",kkj:"како",kl:"гренландский",kln:"календжин",km:"кхмерский",kmb:"кимбунду",kn:"каннада",ko:"корейский",koi:"коми-пермяцкий",kok:"конкани",kos:"косраенский",kpe:"кпелле",kr:"канури",krc:"карачаево-балкарский",krl:"карельский",kru:"курух",ks:"кашмири",ksb:"шамбала",ksf:"бафия",ksh:"кёльнский",ku:"курдский",kum:"кумыкский",kut:"кутенаи",kv:"коми",kw:"корнский",ky:"киргизский",la:"латинский",lad:"ладино",lag:"ланго",lah:"лахнда",lam:"ламба",lb:"люксембургский",lez:"лезгинский",lg:"ганда",li:"лимбургский",lkt:"лакота",ln:"лингала",lo:"лаосский",lol:"монго",lou:"луизианский креольский",loz:"лози",lrc:"севернолурский",lt:"литовский",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисеньо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лухья",lv:"латышский",mad:"мадурский",maf:"мафа",mag:"магахи",mai:"майтхили",mak:"макассарский",man:"мандинго",mas:"масаи",mde:"маба",mdf:"мокшанский",mdr:"мандарский",men:"менде",mer:"меру",mfe:"маврикийский креольский",mg:"малагасийский",mga:"среднеирландский",mgh:"макуа-меетто",mgo:"мета",mh:"маршалльский",mi:"маори",mic:"микмак",min:"минангкабау",mk:"македонский",ml:"малаялам",mn:"монгольский",mnc:"маньчжурский",mni:"манипурский",moh:"мохаук",mos:"моси",mr:"маратхи",ms:"малайский",mt:"мальтийский",mua:"мунданг",mus:"крик",mwl:"мирандский",mwr:"марвари",my:"бирманский",mye:"миене",myv:"эрзянский",mzn:"мазандеранский",na:"науру",nan:"миньнань",nap:"неаполитанский",naq:"нама",nb:"норвежский букмол",nd:"северный ндебеле",nds:"нижненемецкий","nds-NL":"нижнесаксонский",ne:"непальский","new":"неварский",ng:"ндонга",nia:"ниас",niu:"ниуэ",nl:"нидерландский","nl-BE":"фламандский",nmg:"квасио",nn:"нюнорск",nnh:"нгиембунд",no:"норвежский",nog:"ногайский",non:"старонорвежский",nqo:"нко",nr:"южный ндебеле",nso:"северный сото",nus:"нуэр",nv:"навахо",nwc:"классический невари",ny:"ньянджа",nym:"ньямвези",nyn:"ньянколе",nyo:"ньоро",nzi:"нзима",oc:"окситанский",oj:"оджибва",om:"оромо",or:"ория",os:"осетинский",osa:"оседжи",ota:"старотурецкий",pa:"панджаби",pag:"пангасинан",pal:"пехлевийский",pam:"пампанга",pap:"папьяменто",pau:"палау",pcm:"нигерийско-креольский",peo:"староперсидский",phn:"финикийский",pi:"пали",pl:"польский",pon:"понапе",prg:"прусский",pro:"старопровансальский",ps:"пушту",pt:"португальский","pt-BR":"бразильский португальский","pt-PT":"европейский португальский",qu:"кечуа",quc:"киче",raj:"раджастхани",rap:"рапануйский",rar:"раротонга",rm:"романшский",rn:"рунди",ro:"румынский","ro-MD":"молдавский",rof:"ромбо",rom:"цыганский",root:"праязык",ru:"русский",rup:"арумынский",rw:"киньяруанда",rwk:"руанда",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаритянский арамейский",saq:"самбуру",sas:"сасакский",sat:"сантали",sba:"нгамбайский",sbp:"сангу",sc:"сардинский",scn:"сицилийский",sco:"шотландский",sd:"синдхи",sdh:"южнокурдский",se:"северносаамский",see:"сенека",seh:"сена",sel:"селькупский",ses:"койраборо сенни",sg:"санго",sga:"староирландский",sh:"сербскохорватский",shi:"ташельхит",shn:"шанский",shu:"чадский арабский",si:"сингальский",sid:"сидама",sk:"словацкий",sl:"словенский",sm:"самоанский",sma:"южносаамский",smj:"луле-саамский",smn:"инари-саамский",sms:"колтта-саамский",sn:"шона",snk:"сонинке",so:"сомали",sog:"согдийский",sq:"албанский",sr:"сербский",srn:"сранан-тонго",srr:"серер",ss:"свази",ssy:"сахо",st:"южный сото",su:"сунданский",suk:"сукума",sus:"сусу",sux:"шумерский",sv:"шведский",sw:"суахили","sw-CD":"конголезский суахили",swb:"коморский",syc:"классический сирийский",syr:"сирийский",ta:"тамильский",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджикский",th:"тайский",ti:"тигринья",tig:"тигре",tiv:"тиви",tk:"туркменский",tkl:"токелайский",tl:"тагалог",tlh:"клингонский",tli:"тлингит",tmh:"тамашек",tn:"тсвана",to:"тонганский",tog:"тонга",tpi:"ток-писин",tr:"турецкий",tru:"туройо",trv:"седекский",ts:"тсонга",tsi:"цимшиан",tt:"татарский",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"таитянский",tyv:"тувинский",tzm:"среднеатласский тамазигхтский",udm:"удмуртский",ug:"уйгурский",uga:"угаритский",uk:"украинский",umb:"умбунду",ur:"урду",uz:"узбекский",vai:"ваи",ve:"венда",vi:"вьетнамский",vo:"волапюк",vot:"водский",vun:"вунджо",wa:"валлонский",wae:"валлисский",wal:"воламо",war:"варай",was:"вашо",wbp:"вальбири",wo:"волоф",wuu:"ву",xal:"калмыцкий",xh:"коса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"йемба",yi:"идиш",yo:"йоруба",yue:"кантонский",za:"чжуань",zap:"сапотекский",zbl:"блиссимволика",zen:"зенагский",zgh:"тамазигхтский",zh:"китайский","zh-Hans":"севернокитайский, упрощенное письмо","zh-Hant":"севернокитайский, традиционное письмо",zu:"зулу",zun:"зуньи",zza:"заза"},scriptNames:{Cyrl:"кириллица",Latn:"латиница",Arab:"арабица",Guru:"гурмукхи",Tfng:"древнеливийская",Vaii:"вайская",Hans:"упрощенная китайская",Hant:"традиционная китайская"}},sc:{rtl:false,languageNames:{},scriptNames:{}},si:{rtl:false,languageNames:{aa:"අෆාර්",ab:"ඇබ්කාසියානු",ace:"අචයිනිස්",ada:"අඩන්ග්මෙ",ady:"අඩිඝෙ",aeb:"ටියුනිසියනු අරාබි",af:"අෆ්රිකාන්ස්",agq:"ඇගම්",ain:"අයිනු",ak:"අකාන්",ale:"ඇලුඑට්",alt:"සතර්න් අල්ටය්",am:"ඇම්හාරික්",an:"ඇරගොනීස්",anp:"අන්ගික",ar:"අරාබි","ar-001":"නූතන සම්මත අරාබි",arn:"මපුචෙ",arp:"ඇරපහො",as:"ඇසෑම්",asa:"අසු",ast:"ඇස්ටියුරියන්",av:"ඇවරික්",awa:"අවදි",ay:"අයිමරා",az:"අසර්බයිජාන්",ba:"බාෂ්කිර්",ban:"බැලිනීස්",bas:"බසා",be:"බෙලරුසියානු",bem:"බෙම්බා",bez:"බෙනා",bg:"බල්ගේරියානු",bgn:"බටහිර බලොචි",bho:"බොජ්පුරි",bi:"බිස්ලමා",bin:"බිනි",bla:"සික්සිකා",bm:"බම්බරා",bn:"බෙංගාලි",bo:"ටිබෙට්",br:"බ්‍රේටොන්",brx:"බොඩො",bs:"බොස්නියානු",bug:"බුගිනීස්",byn:"බ්ලින්",ca:"කැටලන්",ccp:"චක්මා",ce:"චෙච්නියානු",ceb:"සෙබුඅනො",cgg:"චිගා",ch:"චමොරො",chk:"චූකීස්",chm:"මරි",cho:"චොක්ටොව්",chr:"චෙරොකී",chy:"චෙයෙන්නෙ",ckb:"සොරානි කුර්දිෂ්",co:"කෝසිකානු",crs:"සෙසෙල්ව ක්‍රොල් ෆ්‍රෙන්ච්",cs:"චෙක්",cu:"චර්ච් ස්ලැවික්",cv:"චවේෂ්",cy:"වෙල්ෂ්",da:"ඩැනිශ්",dak:"ඩකොටා",dar:"ඩාර්ග්වා",dav:"ටයිටා",de:"ජර්මන්","de-AT":"ඔස්ට්‍රියානු ජර්මන්","de-CH":"ස්විස් උසස් ජර්මන්",dgr:"ඩොග්‍රිබ්",dje:"සර්මා",dsb:"පහළ සෝබියානු",dua:"ඩුආලා",dv:"ඩිවෙහි",dyo:"ජොල-ෆෝනියි",dz:"ඩිසොන්කා",dzg:"ඩසාගා",ebu:"එම්බු",ee:"ඉව්",efi:"එෆික්",eka:"එකජුක්",el:"ග්‍රීක",en:"ඉංග්‍රීසි","en-AU":"ඕස්ට්‍රේලියානු ඉංග්‍රීසි","en-CA":"කැනේඩියානු ඉංග්‍රීසි","en-GB":"බ්‍රිතාන්‍ය ඉංග්‍රීසි","en-US":"ඇමෙරිකානු ඉංග්‍රීසි",eo:"එස්පැරන්ටෝ",es:"ස්පාඤ්ඤ","es-419":"ලතින් ඇමරිකානු ස්පාඤ්ඤ","es-ES":"යුරෝපීය ස්පාඤ්ඤ","es-MX":"මෙක්සිකානු ස්පාඤ්ඤ",et:"එස්තෝනියානු",eu:"බාස්ක්",ewo:"එවොන්ඩො",fa:"පර්සියානු",ff:"ෆුලාහ්",fi:"ෆින්ලන්ත",fil:"පිලිපීන",fj:"ෆීජි",fo:"ෆාරෝස්",fon:"ෆොන්",fr:"ප්‍රංශ","fr-CA":"කැනේඩියානු ප්‍රංශ","fr-CH":"ස්විස් ප්‍රංශ",fur:"ෆ්‍රියුලියන්",fy:"බටහිර ෆ්‍රිසියානු",ga:"අයර්ලන්ත",gaa:"ගා",gag:"ගගාස්",gan:"ගැන් චයිනිස්",gd:"ස්කොට්ටිශ් ගෙලික්",gez:"ගීස්",gil:"ගිල්බර්ටීස්",gl:"ගැලීසියානු",gn:"ගුවාරනි",gor:"ගොරොන්ටාලො",gsw:"ස්විස් ජර්මානු",gu:"ගුජරාටි",guz:"ගුසී",gv:"මැන්ක්ස්",gwi:"ග්විචින්",ha:"හෝසා",hak:"හකා චයිනිස්",haw:"හවායි",he:"හීබෲ",hi:"හින්දි",hil:"හිලිගෙනන්",hmn:"මොන්ග්",hr:"කෝඒෂියානු",hsb:"ඉහළ සෝබියානු",hsn:"සියැන් චීන",ht:"හයිටි",hu:"හන්ගේරියානු",hup:"හුපා",hy:"ආර්මේනියානු",hz:"හෙරෙරො",ia:"ඉන්ටලින්ගුආ",iba:"ඉබන්",ibb:"ඉබිබියො",id:"ඉන්දුනීසියානු",ig:"ඉග්බෝ",ii:"සිචුආන් යී",ilo:"ඉලොකො",inh:"ඉන්ගුෂ්",io:"ඉඩො",is:"අයිස්ලන්ත",it:"ඉතාලි",iu:"ඉනුක්ටිටුට්",ja:"ජපන්",jbo:"ලොජ්බන්",jgo:"නොම්බා",jmc:"මැකාමී",jv:"ජාවා",ka:"ජෝර්ජියානු",kab:"කාබිල්",kac:"කචින්",kaj:"ජ්ජු",kam:"කැම්බා",kbd:"කබාර්ඩියන්",kcg:"ට්යප්",kde:"මැකොන්ඩ්",kea:"කබුවෙර්ඩියානු",kfo:"කොරො",kha:"ඛසි",khq:"කොයිරා චිනි",ki:"කිකුයු",kj:"කුයන්යමා",kk:"කසාඛ්",kkj:"කකො",kl:"කලාලිසට්",kln:"කලෙන්ජන්",km:"කමර්",kmb:"කිම්බුන්ඩු",kn:"කණ්ණඩ",ko:"කොරියානු",koi:"කොමි-පර්මියාක්",kok:"කොන්කනි",kpe:"ක්පෙලෙ",kr:"කනුරි",krc:"කරන්චි-බාකර්",krl:"කැරෙලියන්",kru:"කුරුඛ්",ks:"කාෂ්මීර්",ksb:"ශාම්බලා",ksf:"බාෆියා",ksh:"කොලොග්නියන්",ku:"කුර්දි",kum:"කුමික්",kv:"කොමි",kw:"කෝනීසියානු",ky:"කිර්ගිස්",la:"ලතින්",lad:"ලඩිනො",lag:"ලංගි",lb:"ලක්සැම්බර්ග්",lez:"ලෙස්ගියන්",lg:"ගන්ඩා",li:"ලිම්බර්ගිශ්",lkt:"ලකොට",ln:"ලින්ගලා",lo:"ලාඕ",loz:"ලොසි",lrc:"උතුරු ලුරි",lt:"ලිතුවේනියානු",lu:"ලුබා-කටන්ගා",lua:"ලුබ-ලුලුඅ",lun:"ලුන්ඩ",luo:"ලුඔ",lus:"මිසො",luy:"ලුයියා",lv:"ලැට්වියානු",mad:"මදුරීස්",mag:"මඝහි",mai:"මයිතිලි",mak:"මකාසාර්",mas:"මසායි",mdf:"මොක්ශා",men:"මෙන්ඩෙ",mer:"මෙරු",mfe:"මොරිස්යෙම්",mg:"මලගාසි",mgh:"මඛුවා-මීටෝ",mgo:"මෙටා",mh:"මාශලීස්",mi:"මාවොරි",mic:"මික්මැක්",min:"මිනන්ග්කබාවු",mk:"මැසිඩෝනියානු",ml:"මලයාලම්",mn:"මොංගෝලියානු",mni:"මනිපුරි",moh:"මොහොව්ක්",mos:"මොස්සි",mr:"මරාති",ms:"මැලේ",mt:"මොල්ටිස්",mua:"මුන්ඩන්",mus:"ක්‍රීක්",mwl:"මිරන්ඩීස්",my:"බුරුම",myv:"එර්ස්යා",mzn:"මැසන්ඩරනි",na:"නෞරු",nan:"මින් නන් චයිනිස්",nap:"නියාපොලිටන්",naq:"නාමා",nb:"නෝර්වීජියානු බොක්මල්",nd:"උතුරු එන්ඩිබෙලෙ",nds:"පහළ ජර්මන්","nds-NL":"පහළ සැක්සන්",ne:"නේපාල","new":"නෙවාරි",ng:"න්ඩොන්ගා",nia:"නියාස්",niu:"නියුඑන්",nl:"ලන්දේසි","nl-BE":"ෆ්ලෙමිශ්",nmg:"කුවාසිඔ",nn:"නෝර්වීජියානු නයිනෝර්ස්ක්",nnh:"න්ගියාම්බූන්",nog:"නොගායි",nqo:"එන්‘කෝ",nr:"සෞත් ඩ්බේල්",nso:"නොදර්න් සොතො",nus:"නොයර්",nv:"නවාජො",ny:"න්යන්ජා",nyn:"නයන්කෝලෙ",oc:"ඔසිටාන්",om:"ඔරොමෝ",or:"ඔඩියා",os:"ඔසිටෙක්",pa:"පන්ජාබි",pag:"පන්ගසීනන්",pam:"පන්පන්ග",pap:"පපියමෙන්ටො",pau:"පලවුවන්",pcm:"නෛජීරියන් පෙන්ගින්",pl:"පෝලන්ත",prg:"පෘශියන්",ps:"පෂ්ටො",pt:"පෘතුගීසි","pt-BR":"බ්‍රසීල පෘතුගීසි","pt-PT":"යුරෝපීය පෘතුගීසි",qu:"ක්වීචුවා",quc:"කියිචේ",rap:"රපනුයි",rar:"රරොටොන්ගන්",rm:"රොමෑන්ශ්",rn:"රුන්ඩි",ro:"රොමේනියානු","ro-MD":"මොල්ඩවිආනු",rof:"රෝම්බෝ",root:"රූට්",ru:"රුසියානු",rup:"ඇරොමානියානු",rw:"කින්යර්වන්ඩා",rwk:"ර්වා",sa:"සංස්කෘත",sad:"සන්ඩවෙ",sah:"සඛා",saq:"සම්බුරු",sat:"සෑන්ටලි",sba:"න්ගම්බෙ",sbp:"සංගු",sc:"සාර්ඩිනිඅන්",scn:"සිසිලියන්",sco:"ස්කොට්ස්",sd:"සින්ධි",sdh:"දකුණු කුර්දි",se:"උතුරු සාමි",seh:"සෙනා",ses:"කෝයිරාබොරො සෙන්නි",sg:"සන්ග්‍රෝ",shi:"ටචේල්හිට්",shn:"ශාන්",si:"සිංහල",sk:"ස්ලෝවැක්",sl:"ස්ලෝවේනියානු",sm:"සෑමොඅන්",sma:"දකුණු සාමි",smj:"ලුලේ සාමි",smn:"ඉනාරි සාමි",sms:"ස්කොල්ට් සාමි",sn:"ශෝනා",snk:"සොනින්කෙ",so:"සෝමාලි",sq:"ඇල්බේනියානු",sr:"සර්බියානු",srn:"ස්‍රන් ටොන්ගො",ss:"ස්වති",ssy:"සහො",st:"සතර්න් සොතො",su:"සන්ඩනීසියානු",suk:"සුකුමා",sv:"ස්වීඩන්",sw:"ස්වාහිලි","sw-CD":"කොංගෝ ස්වාහිලි",swb:"කොමොරියන්",syr:"ස්‍රයෑක්",ta:"දෙමළ",te:"තෙළිඟු",tem:"ටිම්නෙ",teo:"ටෙසෝ",tet:"ටේටම්",tg:"ටජික්",th:"තායි",ti:"ටිග්‍රින්යා",tig:"ටීග්‍රෙ",tk:"ටර්ක්මෙන්",tlh:"ක්ලින්ගොන්",tn:"ස්වනා",to:"ටොංගා",tpi:"ටොක් පිසින්",tr:"තුර්කි",trv:"ටරොකො",ts:"සොන්ග",tt:"ටාටර්",tum:"ටුම්බුකා",tvl:"ටුවාලු",twq:"ටසවාක්",ty:"ටහිටියන්",tyv:"ටුවිනියන්",tzm:"මධ්‍යම ඇට්ලස් ටමසිට්",udm:"අඩ්මර්ට්",ug:"උයිගර්",uk:"යුක්රේනියානු",umb:"උබුන්ඩු",ur:"උර්දු",uz:"උස්බෙක්",vai:"වයි",ve:"වෙන්ඩා",vi:"වියට්නාම්",vo:"වොලපූක්",vun:"වුන්ජෝ",wa:"වෑලූන්",wae:"වොල්සර්",wal:"වොලෙට්ට",war:"වොරෙය්",wbp:"වොපිරි",wo:"වොලොෆ්",wuu:"වූ චයිනිස්",xal:"කල්මික්",xh:"ශෝසා",xog:"සොගා",yav:"යන්ග්බෙන්",ybb:"යෙම්බා",yi:"යිඩිශ්",yo:"යොරූබා",yue:"කැන්ටොනීස්",zgh:"සම්මත මොරොක්කෝ ටමසිග්ත්",zh:"චීන","zh-Hans":"සරල මැන්ඩරීන් චීන","zh-Hant":"සාම්ප්‍රදායික මැන්ඩරීන් චීන",zu:"සුලු",zun:"සුනි",zza:"සාසා"},scriptNames:{Cyrl:"සිරිලික්",Latn:"ලතින්",Arab:"අරාබි",Guru:"ගුර්මුඛි",Hans:"සුළුකළ",Hant:"සාම්ප්‍රදායික"}},sk:{rtl:false,languageNames:{aa:"afarčina",ab:"abcházčina",ace:"acehčina",ach:"ačoli",ada:"adangme",ady:"adygejčina",ae:"avestčina",af:"afrikánčina",afh:"afrihili",agq:"aghem",ain:"ainčina",ak:"akančina",akk:"akkadčina",ale:"aleutčina",alt:"južná altajčina",am:"amharčina",an:"aragónčina",ang:"stará angličtina",anp:"angika",ar:"arabčina","ar-001":"arabčina (moderná štandardná)",arc:"aramejčina",arn:"mapudungun",arp:"arapažština",ars:"arabčina (nadždská)",arw:"arawačtina",as:"ásamčina",asa:"asu",ast:"astúrčina",av:"avarčina",awa:"awadhi",ay:"aymarčina",az:"azerbajdžančina",ba:"baškirčina",bal:"balúčtina",ban:"balijčina",bas:"basa",bax:"bamun",bbj:"ghomala",be:"bieloruština",bej:"bedža",bem:"bemba",bez:"bena",bfd:"bafut",bg:"bulharčina",bgn:"západná balúčtina",bho:"bhódžpurčina",bi:"bislama",bik:"bikolčina",bin:"bini",bkm:"kom",bla:"siksika",bm:"bambarčina",bn:"bengálčina",bo:"tibetčina",br:"bretónčina",bra:"bradžčina",brx:"bodo",bs:"bosniačtina",bss:"akoose",bua:"buriatčina",bug:"bugiština",bum:"bulu",byn:"blin",byv:"medumba",ca:"katalánčina",cad:"kaddo",car:"karibčina",cay:"kajugčina",cch:"atsam",ccp:"čakma",ce:"čečenčina",ceb:"cebuánčina",cgg:"kiga",ch:"čamorčina",chb:"čibča",chg:"čagatajčina",chk:"chuuk",chm:"marijčina",chn:"činucký žargón",cho:"čoktčina",chp:"čipevajčina",chr:"čerokí",chy:"čejenčina",ckb:"kurdčina (sorání)",co:"korzičtina",cop:"koptčina",cr:"krí",crh:"krymská tatárčina",crs:"seychelská kreolčina",cs:"čeština",csb:"kašubčina",cu:"cirkevná slovančina",cv:"čuvaština",cy:"waleština",da:"dánčina",dak:"dakotčina",dar:"darginčina",dav:"taita",de:"nemčina","de-AT":"nemčina (rakúska)","de-CH":"nemčina (švajčiarska spisovná)",del:"delawarčina",den:"slavé",dgr:"dogribčina",din:"dinkčina",dje:"zarma",doi:"dógrí",dsb:"dolnolužická srbčina",dua:"duala",dum:"stredná holandčina",dv:"maldivčina",dyo:"jola-fonyi",dyu:"ďula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"eweština",efi:"efik",egy:"staroegyptčina",eka:"ekadžuk",el:"gréčtina",elx:"elamčina",en:"angličtina","en-AU":"angličtina (austrálska)","en-CA":"angličtina (kanadská)","en-GB":"angličtina (britská)","en-US":"angličtina (americká)",enm:"stredná angličtina",eo:"esperanto",es:"španielčina","es-419":"španielčina (latinskoamerická)","es-ES":"španielčina (európska)","es-MX":"španielčina (mexická)",et:"estónčina",eu:"baskičtina",ewo:"ewondo",fa:"perzština",fan:"fangčina",fat:"fanti",ff:"fulbčina",fi:"fínčina",fil:"filipínčina",fj:"fidžijčina",fo:"faerčina",fon:"fončina",fr:"francúzština","fr-CA":"francúzština (kanadská)","fr-CH":"francúzština (švajčiarska)",frc:"francúzština (Cajun)",frm:"stredná francúzština",fro:"stará francúzština",frr:"severná frízština",frs:"východofrízština",fur:"friulčina",fy:"západná frízština",ga:"írčina",gaa:"ga",gag:"gagauzština",gay:"gayo",gba:"gbaja",gd:"škótska gaelčina",gez:"etiópčina",gil:"kiribatčina",gl:"galícijčina",gmh:"stredná horná nemčina",gn:"guaraníjčina",goh:"stará horná nemčina",gon:"góndčina",gor:"gorontalo",got:"gótčina",grb:"grebo",grc:"starogréčtina",gsw:"nemčina (švajčiarska)",gu:"gudžarátčina",guz:"gusii",gv:"mančina",gwi:"kučinčina",ha:"hauština",hai:"haida",haw:"havajčina",he:"hebrejčina",hi:"hindčina",hil:"hiligajnončina",hit:"chetitčina",hmn:"hmongčina",ho:"hiri motu",hr:"chorvátčina",hsb:"hornolužická srbčina",ht:"haitská kreolčina",hu:"maďarčina",hup:"hupčina",hy:"arménčina",hz:"herero",ia:"interlingua",iba:"ibančina",ibb:"ibibio",id:"indonézština",ie:"interlingue",ig:"igboština",ii:"s’čchuanská iovčina",ik:"inupik",ilo:"ilokánčina",inh:"inguština",io:"ido",is:"islandčina",it:"taliančina",iu:"inuktitut",ja:"japončina",jbo:"lojban",jgo:"ngomba",jmc:"mašame",jpr:"židovská perzština",jrb:"židovská arabčina",jv:"jávčina",ka:"gruzínčina",kaa:"karakalpačtina",kab:"kabylčina",kac:"kačjinčina",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardčina",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdčina",kfo:"koro",kg:"kongčina",kha:"khasijčina",kho:"chotančina",khq:"západná songhajčina",ki:"kikujčina",kj:"kuaňama",kk:"kazaština",kkj:"kako",kl:"grónčina",kln:"kalendžin",km:"khmérčina",kmb:"kimbundu",kn:"kannadčina",ko:"kórejčina",koi:"komi-permiačtina",kok:"konkánčina",kos:"kusaie",kpe:"kpelle",kr:"kanurijčina",krc:"karačajevsko-balkarčina",krl:"karelčina",kru:"kuruchčina",ks:"kašmírčina",ksb:"šambala",ksf:"bafia",ksh:"kolínčina",ku:"kurdčina",kum:"kumyčtina",kut:"kutenajčina",kv:"komijčina",kw:"kornčina",ky:"kirgizština",la:"latinčina",lad:"židovská španielčina",lag:"langi",lah:"lahandčina",lam:"lamba",lb:"luxemburčina",lez:"lezginčina",lg:"gandčina",li:"limburčina",lkt:"lakotčina",ln:"lingalčina",lo:"laoština",lol:"mongo",lou:"kreolčina (Louisiana)",loz:"lozi",lrc:"severné luri",lt:"litovčina",lu:"lubčina (katanžská)",lua:"lubčina (luluánska)",lui:"luiseňo",lun:"lunda",lus:"mizorámčina",luy:"luhja",lv:"lotyština",mad:"madurčina",maf:"mafa",mag:"magadhčina",mai:"maithilčina",mak:"makasarčina",man:"mandingo",mas:"masajčina",mde:"maba",mdf:"mokšiančina",mdr:"mandarčina",men:"mendejčina",mer:"meru",mfe:"maurícijská kreolčina",mg:"malgaština",mga:"stredná írčina",mgh:"makua-meetto",mgo:"meta’",mh:"marshallčina",mi:"maorijčina",mic:"mikmakčina",min:"minangkabaučina",mk:"macedónčina",ml:"malajálamčina",mn:"mongolčina",mnc:"mandžuština",mni:"manípurčina",moh:"mohawkčina",mos:"mossi",mr:"maráthčina",ms:"malajčina",mt:"maltčina",mua:"mundang",mus:"kríkčina",mwl:"mirandčina",mwr:"marwari",my:"barmčina",mye:"myene",myv:"erzjančina",mzn:"mázandaránčina",na:"nauruština",nap:"neapolčina",naq:"nama",nb:"nórčina (bokmal)",nd:"ndebelčina (severná)",nds:"dolná nemčina","nds-NL":"dolná saština",ne:"nepálčina","new":"nevárčina",ng:"ndonga",nia:"niasánčina",niu:"niueština",nl:"holandčina","nl-BE":"flámčina",nmg:"kwasio",nn:"nórčina (nynorsk)",nnh:"ngiemboon",no:"nórčina",nog:"nogajčina",non:"stará nórčina",nqo:"n’ko",nr:"ndebelčina (južná)",nso:"sothčina (severná)",nus:"nuer",nv:"navaho",nwc:"klasická nevárčina",ny:"ňandža",nym:"ňamwezi",nyn:"ňankole",nyo:"ňoro",nzi:"nzima",oc:"okcitánčina",oj:"odžibva",om:"oromčina",or:"uríjčina",os:"osetčina",osa:"osedžština",ota:"osmanská turečtina",pa:"pandžábčina",pag:"pangasinančina",pal:"pahlaví",pam:"kapampangančina",pap:"papiamento",pau:"palaučina",pcm:"nigerijský pidžin",peo:"stará perzština",phn:"feničtina",pi:"pálí",pl:"poľština",pon:"pohnpeiština",prg:"pruština",pro:"stará okcitánčina",ps:"paštčina",pt:"portugalčina","pt-BR":"portugalčina (brazílska)","pt-PT":"portugalčina (európska)",qu:"kečuánčina",quc:"quiché",raj:"radžastančina",rap:"rapanujčina",rar:"rarotongská maorijčina",rm:"rétorománčina",rn:"rundčina",ro:"rumunčina","ro-MD":"moldavčina",rof:"rombo",rom:"rómčina",root:"koreň",ru:"ruština",rup:"arumunčina",rw:"rwandčina",rwk:"rwa",sa:"sanskrit",sad:"sandaweština",sah:"jakutčina",sam:"samaritánska aramejčina",saq:"samburu",sas:"sasačtina",sat:"santalčina",sba:"ngambay",sbp:"sangu",sc:"sardínčina",scn:"sicílčina",sco:"škótčina",sd:"sindhčina",sdh:"južná kurdčina",se:"saamčina (severná)",see:"senekčina",seh:"sena",sel:"selkupčina",ses:"koyraboro senni",sg:"sango",sga:"stará írčina",sh:"srbochorvátčina",shi:"tachelhit",shn:"šančina",shu:"čadská arabčina",si:"sinhalčina",sid:"sidamo",sk:"slovenčina",sl:"slovinčina",sm:"samojčina",sma:"saamčina (južná)",smj:"saamčina (lulská)",smn:"saamčina (inarijská)",sms:"saamčina (skoltská)",sn:"šončina",snk:"soninke",so:"somálčina",sog:"sogdijčina",sq:"albánčina",sr:"srbčina",srn:"surinamčina",srr:"sererčina",ss:"svazijčina",ssy:"saho",st:"sothčina (južná)",su:"sundčina",suk:"sukuma",sus:"susu",sux:"sumerčina",sv:"švédčina",sw:"swahilčina","sw-CD":"svahilčina (konžská)",swb:"komorčina",syc:"sýrčina (klasická)",syr:"sýrčina",ta:"tamilčina",te:"telugčina",tem:"temne",teo:"teso",ter:"terêna",tet:"tetumčina",tg:"tadžičtina",th:"thajčina",ti:"tigriňa",tig:"tigrejčina",tk:"turkménčina",tkl:"tokelauština",tl:"tagalčina",tlh:"klingónčina",tli:"tlingitčina",tmh:"tuaregčina",tn:"tswančina",to:"tongčina",tog:"ňasa tonga",tpi:"novoguinejský pidžin",tr:"turečtina",trv:"taroko",ts:"tsongčina",tsi:"cimšjančina",tt:"tatárčina",tum:"tumbuka",tvl:"tuvalčina",tw:"twi",twq:"tasawaq",ty:"tahitčina",tyv:"tuviančina",tzm:"tuaregčina (stredomarocká)",udm:"udmurtčina",ug:"ujgurčina",uga:"ugaritčina",uk:"ukrajinčina",umb:"umbundu",ur:"urdčina",uz:"uzbečtina",ve:"vendčina",vi:"vietnamčina",vo:"volapük",vot:"vodčina",vun:"vunjo",wa:"valónčina",wae:"walserčina",wal:"walamčina",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolofčina",xal:"kalmyčtina",xh:"xhoština",xog:"soga",yao:"jao",yap:"japčina",yav:"jangben",ybb:"yemba",yi:"jidiš",yo:"jorubčina",yue:"kantončina",za:"čuangčina",zap:"zapotéčtina",zbl:"systém Bliss",zen:"zenaga",zgh:"tuaregčina (marocká štandardná)",zh:"čínština","zh-Hans":"čínština (mandarínska zjednodušená)","zh-Hant":"čínština (mandarínska tradičná)",zu:"zuluština",zun:"zuniština",zza:"zaza"},scriptNames:{Cyrl:"cyrilika",Latn:"latinka",Arab:"arabské",Guru:"gurmukhi",Hans:"zjednodušené",Hant:"tradičné"}},sl:{rtl:false,languageNames:{aa:"afarščina",ab:"abhaščina",ace:"ačejščina",ach:"ačolijščina",ada:"adangmejščina",ady:"adigejščina",ae:"avestijščina",af:"afrikanščina",afh:"afrihili",agq:"aghemščina",ain:"ainujščina",ak:"akanščina",akk:"akadščina",ale:"aleutščina",alt:"južna altajščina",am:"amharščina",an:"aragonščina",ang:"stara angleščina",anp:"angikaščina",ar:"arabščina","ar-001":"sodobna standardna arabščina",arc:"aramejščina",arn:"mapudungunščina",arp:"arapaščina",arw:"aravaščina",as:"asamščina",asa:"asujščina",ast:"asturijščina",av:"avarščina",awa:"avadščina",ay:"ajmarščina",az:"azerbajdžanščina",ba:"baškirščina",bal:"beludžijščina",ban:"balijščina",bas:"basa",be:"beloruščina",bej:"bedža",bem:"bemba",bez:"benajščina",bg:"bolgarščina",bgn:"zahodnobalučijščina",bho:"bodžpuri",bi:"bislamščina",bik:"bikolski jezik",bin:"edo",bla:"siksika",bm:"bambarščina",bn:"bengalščina",bo:"tibetanščina",br:"bretonščina",bra:"bradžbakanščina",brx:"bodojščina",bs:"bosanščina",bua:"burjatščina",bug:"buginščina",byn:"blinščina",ca:"katalonščina",cad:"kadoščina",car:"karibski jezik",ccp:"chakma",ce:"čečenščina",ceb:"sebuanščina",cgg:"čigajščina",ch:"čamorščina",chb:"čibčevščina",chg:"čagatajščina",chk:"trukeščina",chm:"marijščina",chn:"činuški žargon",cho:"čoktavščina",chp:"čipevščina",chr:"čerokeščina",chy:"čejenščina",ckb:"soranska kurdščina",co:"korziščina",cop:"koptščina",cr:"krijščina",crh:"krimska tatarščina",crs:"sejšelska francoska kreolščina",cs:"češčina",csb:"kašubščina",cu:"stara cerkvena slovanščina",cv:"čuvaščina",cy:"valižanščina",da:"danščina",dak:"dakotščina",dar:"darginščina",dav:"taitajščina",de:"nemščina","de-AT":"avstrijska nemščina","de-CH":"visoka nemščina (Švica)",del:"delavarščina",den:"slavejščina",dgr:"dogrib",din:"dinka",dje:"zarmajščina",doi:"dogri",dsb:"dolnja lužiška srbščina",dua:"duala",dum:"srednja nizozemščina",dv:"diveščina",dyo:"jola-fonjiščina",dyu:"diula",dz:"dzonka",dzg:"dazaga",ebu:"embujščina",ee:"evenščina",efi:"efiščina",egy:"stara egipčanščina",eka:"ekajuk",el:"grščina",elx:"elamščina",en:"angleščina","en-AU":"avstralska angleščina","en-CA":"kanadska angleščina","en-GB":"angleščina (VB)","en-US":"angleščina (ZDA)",enm:"srednja angleščina",eo:"esperanto",es:"španščina","es-419":"španščina (Latinska Amerika)","es-ES":"evropska španščina","es-MX":"mehiška španščina",et:"estonščina",eu:"baskovščina",ewo:"evondovščina",fa:"perzijščina",fan:"fangijščina",fat:"fantijščina",ff:"fulščina",fi:"finščina",fil:"filipinščina",fj:"fidžijščina",fo:"ferščina",fon:"fonščina",fr:"francoščina","fr-CA":"kanadska francoščina","fr-CH":"švicarska francoščina",frc:"cajunska francoščina",frm:"srednja francoščina",fro:"stara francoščina",frr:"severna frizijščina",frs:"vzhodna frizijščina",fur:"furlanščina",fy:"zahodna frizijščina",ga:"irščina",gaa:"ga",gag:"gagavščina",gay:"gajščina",gba:"gbajščina",gd:"škotska gelščina",gez:"etiopščina",gil:"kiribatščina",gl:"galicijščina",gmh:"srednja visoka nemščina",gn:"gvaranijščina",goh:"stara visoka nemščina",gon:"gondi",gor:"gorontalščina",got:"gotščina",grb:"grebščina",grc:"stara grščina",gsw:"nemščina (Švica)",gu:"gudžaratščina",guz:"gusijščina",gv:"manščina",gwi:"gvičin",ha:"havščina",hai:"haidščina",haw:"havajščina",he:"hebrejščina",hi:"hindujščina",hil:"hiligajnonščina",hit:"hetitščina",hmn:"hmonščina",ho:"hiri motu",hr:"hrvaščina",hsb:"gornja lužiška srbščina",ht:"haitijska kreolščina",hu:"madžarščina",hup:"hupa",hy:"armenščina",hz:"herero",ia:"interlingva",iba:"ibanščina",ibb:"ibibijščina",id:"indonezijščina",ie:"interlingve",ig:"igboščina",ii:"sečuanska jiščina",ik:"inupiaščina",ilo:"ilokanščina",inh:"inguščina",io:"ido",is:"islandščina",it:"italijanščina",iu:"inuktitutščina",ja:"japonščina",jbo:"lojban",jgo:"ngomba",jmc:"mačamejščina",jpr:"judovska perzijščina",jrb:"judovska arabščina",jv:"javanščina",ka:"gruzijščina",kaa:"karakalpaščina",kab:"kabilščina",kac:"kačinščina",kaj:"jju",kam:"kambaščina",kaw:"kavi",kbd:"kabardinščina",kcg:"tjapska nigerijščina",kde:"makondščina",kea:"zelenortskootoška kreolščina",kfo:"koro",kg:"kongovščina",kha:"kasi",kho:"kotanščina",khq:"koyra chiini",ki:"kikujščina",kj:"kvanjama",kk:"kazaščina",kkj:"kako",kl:"grenlandščina",kln:"kalenjinščina",km:"kmerščina",kmb:"kimbundu",kn:"kanareščina",ko:"korejščina",koi:"komi-permjaščina",kok:"konkanščina",kos:"kosrajščina",kpe:"kpelejščina",kr:"kanurščina",krc:"karačaj-balkarščina",krl:"karelščina",kru:"kuruk",ks:"kašmirščina",ksb:"šambala",ksf:"bafia",ksh:"kölnsko narečje",ku:"kurdščina",kum:"kumiščina",kut:"kutenajščina",kv:"komijščina",kw:"kornijščina",ky:"kirgiščina",la:"latinščina",lad:"ladinščina",lag:"langijščina",lah:"landa",lam:"lamba",lb:"luksemburščina",lez:"lezginščina",lg:"ganda",li:"limburščina",lkt:"lakotščina",ln:"lingala",lo:"laoščina",lol:"mongo",lou:"louisianska kreolščina",loz:"lozi",lrc:"severna lurijščina",lt:"litovščina",lu:"luba-katanga",lua:"luba-lulua",lui:"luisenščina",lun:"lunda",lus:"mizojščina",luy:"luhijščina",lv:"latvijščina",mad:"madurščina",mag:"magadščina",mai:"maitili",mak:"makasarščina",man:"mandingo",mas:"masajščina",mdf:"mokšavščina",mdr:"mandarščina",men:"mende",mer:"meru",mfe:"morisjenščina",mg:"malagaščina",mga:"srednja irščina",mgh:"makuva-meto",mgo:"meta",mh:"marshallovščina",mi:"maorščina",mic:"mikmaščina",min:"minangkabau",mk:"makedonščina",ml:"malajalamščina",mn:"mongolščina",mnc:"mandžurščina",mni:"manipurščina",moh:"mohoščina",mos:"mosijščina",mr:"maratščina",ms:"malajščina",mt:"malteščina",mua:"mundang",mus:"creekovščina",mwl:"mirandeščina",mwr:"marvarščina",my:"burmanščina",myv:"erzjanščina",mzn:"mazanderanščina",na:"naurujščina",nan:"min nan kitajščina",nap:"napolitanščina",naq:"khoekhoe",nb:"knjižna norveščina",nd:"severna ndebelščina",nds:"nizka nemščina","nds-NL":"nizka saščina",ne:"nepalščina","new":"nevarščina",ng:"ndonga",nia:"niaščina",niu:"niuejščina",nl:"nizozemščina","nl-BE":"flamščina",nmg:"kwasio",nn:"novonorveščina",nnh:"ngiemboonščina",no:"norveščina",nog:"nogajščina",non:"stara nordijščina",nqo:"n’ko",nr:"južna ndebelščina",nso:"severna sotščina",nus:"nuerščina",nv:"navajščina",nwc:"klasična nevarščina",ny:"njanščina",nym:"njamveščina",nyn:"njankole",nyo:"njoro",nzi:"nzima",oc:"okcitanščina",oj:"anašinabščina",om:"oromo",or:"odijščina",os:"osetinščina",osa:"osage",ota:"otomanska turščina",pa:"pandžabščina",pag:"pangasinanščina",pam:"pampanščina",pap:"papiamentu",pau:"palavanščina",pcm:"nigerijski pidžin",peo:"stara perzijščina",phn:"feničanščina",pi:"palijščina",pl:"poljščina",pon:"ponpejščina",prg:"stara pruščina",pro:"stara provansalščina",ps:"paštunščina",pt:"portugalščina","pt-BR":"brazilska portugalščina","pt-PT":"evropska portugalščina",qu:"kečuanščina",quc:"quiche",raj:"radžastanščina",rap:"rapanujščina",rar:"rarotongščina",rm:"retoromanščina",rn:"rundščina",ro:"romunščina","ro-MD":"moldavščina",rof:"rombo",rom:"romščina",root:"rootščina",ru:"ruščina",rup:"aromunščina",rw:"ruandščina",rwk:"rwa",sa:"sanskrt",sad:"sandavščina",sah:"jakutščina",sam:"samaritanska aramejščina",saq:"samburščina",sas:"sasaščina",sat:"santalščina",sba:"ngambajščina",sbp:"sangujščina",sc:"sardinščina",scn:"sicilijanščina",sco:"škotščina",sd:"sindščina",sdh:"južna kurdščina",se:"severna samijščina",seh:"sena",sel:"selkupščina",ses:"koyraboro senni",sg:"sango",sga:"stara irščina",sh:"srbohrvaščina",shi:"tahelitska berberščina",shn:"šanščina",si:"sinhalščina",sid:"sidamščina",sk:"slovaščina",sl:"slovenščina",sm:"samoanščina",sma:"južna samijščina",smj:"luleška samijščina",smn:"inarska samijščina",sms:"skoltska samijščina",sn:"šonščina",snk:"soninke",so:"somalščina",sq:"albanščina",sr:"srbščina",srn:"surinamska kreolščina",srr:"sererščina",ss:"svazijščina",ssy:"saho",st:"sesoto",su:"sundanščina",suk:"sukuma",sus:"susujščina",sux:"sumerščina",sv:"švedščina",sw:"svahili","sw-CD":"kongoški svahili",swb:"šikomor",syc:"klasična sirščina",syr:"sirščina",ta:"tamilščina",te:"telugijščina",tem:"temnejščina",teo:"teso",tet:"tetumščina",tg:"tadžiščina",th:"tajščina",ti:"tigrajščina",tig:"tigrejščina",tiv:"tivščina",tk:"turkmenščina",tkl:"tokelavščina",tl:"tagalogščina",tlh:"klingonščina",tli:"tlingitščina",tmh:"tamajaščina",tn:"cvanščina",to:"tongščina",tog:"malavijska tongščina",tpi:"tok pisin",tr:"turščina",trv:"taroko",ts:"congščina",tsi:"tsimščina",tt:"tatarščina",tum:"tumbukščina",tvl:"tuvalujščina",tw:"tvi",twq:"tasawaq",ty:"tahitščina",tyv:"tuvinščina",tzm:"tamašek (Srednji Atlas)",udm:"udmurtščina",ug:"ujgurščina",uga:"ugaritski jezik",uk:"ukrajinščina",umb:"umbundščina",ur:"urdujščina",uz:"uzbeščina",vai:"vajščina",ve:"venda",vi:"vietnamščina",vo:"volapuk",vot:"votjaščina",vun:"vunjo",wa:"valonščina",wae:"walser",wal:"valamščina",war:"varajščina",was:"vašajščina",wbp:"varlpirščina",wo:"volofščina",xal:"kalmiščina",xh:"koščina",xog:"sogščina",yao:"jaojščina",yap:"japščina",yav:"jangben",ybb:"jembajščina",yi:"jidiš",yo:"jorubščina",yue:"kantonščina",zap:"zapoteščina",zbl:"znakovni jezik Bliss",zen:"zenaščina",zgh:"standardni maroški tamazig",zh:"kitajščina","zh-Hans":"kitajščina (poenostavljena pisava han)","zh-Hant":"kitajščina (tradicionalna pisava han)",zu:"zulujščina",zun:"zunijščina",zza:"zazajščina"},scriptNames:{Cyrl:"cirilica",Latn:"latinica",Arab:"arabski",Guru:"gurmuki",Tfng:"tifinajski",Vaii:"zlogovna pisava vai",Hans:"poenostavljena pisava han",Hant:"tradicionalna pisava han"}},so:{rtl:false,languageNames:{af:"Afrikaanka",agq:"Ageem",ak:"Akan",am:"Axmaari",ar:"Carabi","ar-001":"Carabiga rasmiga ah",as:"Asaamiis",asa:"Asu",ast:"Astuuriyaan",az:"Asarbayjan",bas:"Basaa",be:"Beleruusiyaan",bem:"Bemba",bez:"Bena",bg:"Bulgeeriyaan",bm:"Bambaara",bn:"Bangladesh",bo:"Tibeetaan",br:"Biriton",brx:"Bodo",bs:"Bosniyaan",ca:"Katalaan",ccp:"Jakma",ce:"Jejen",ceb:"Sebuano",cgg:"Jiga",chr:"Jerookee",ckb:"Bartamaha Kurdish",co:"Korsikan",cs:"Jeeg",cu:"Kaniisadda Islaafik",cy:"Welsh",da:"Dhaanish",dav:"Taiita",de:"Jarmal","de-AT":"Jarmal (Awsteriya)","de-CH":"Jarmal (Iswiiserlaand)",dje:"Sarma",dsb:"Soorbiyaanka Hoose",dua:"Duaala",dyo:"Joola-Foonyi",dz:"D’zongqa",ebu:"Embuu",ee:"Eewe",el:"Giriik",en:"Ingiriisi","en-AU":"Ingiriis Austaraaliyaan","en-CA":"Ingiriis Kanadiyaan","en-GB":"Ingiriis Biritish","en-US":"Ingiriis Maraykan",eo:"Isberaanto",es:"Isbaanish","es-419":"Isbaanishka Laatiin Ameerika","es-ES":"Isbaanish (Isbayn)","es-MX":"Isbaanish (Meksiko)",et:"Istooniyaan",eu:"Basquu",ewo:"Eewondho",fa:"Faarisi",ff:"Fuulah",fi:"Finishka",fil:"Tagalog",fo:"Farowsi",fr:"Faransiis","fr-CA":"Faransiiska Kanada","fr-CH":"Faransiis (Iswiiserlaand)",fur:"Firiyuuliyaan",fy:"Firiisiyan Galbeed",ga:"Ayrish",gd:"Iskot Giilik",gl:"Galiisiyaan",gsw:"Jarmal Iswiis",gu:"Gujaraati",guz:"Guusii",gv:"Mankis",ha:"Hawsa",haw:"Hawaay",he:"Cibraani",hi:"Hindi",hmn:"Hamong",hr:"Koro’eeshiyaan",hsb:"Sorobiyaanka Sare",ht:"Heeytiyaan Karawle",hu:"Hangariyaan",hy:"Armeeniyaan",ia:"Interlinguwa",id:"Indunusiyaan",ig:"Igbo",ii:"Sijuwan Yi",is:"Ayslandays",it:"Talyaani",ja:"Jabaaniis",jgo:"Ingoomba",jmc:"Chaga",jv:"Jafaaniis",ka:"Joorijiyaan",kab:"Kabayle",kam:"Kaamba",kde:"Kimakonde",kea:"Kabuferdiyanu",khq:"Koyra Jiini",ki:"Kikuuyu",kk:"Kasaaq",kkj:"Kaako",kl:"Kalaallisuut",kln:"Kalenjiin",km:"Kamboodhian",kn:"Kannadays",ko:"Kuuriyaan",kok:"Konkani",ks:"Kaashmiir",ksb:"Shambaala",ksf:"Bafiya",ksh:"Kologniyaan",ku:"Kurdishka",kw:"Kornish",ky:"Kirgiis",la:"Laatiin",lag:"Laangi",lb:"Luksaamboorgish",lg:"Gandha",lkt:"Laakoota",ln:"Lingala",lo:"Lao",lrc:"Koonfurta Luuri",lt:"Lituwaanays",lu:"Luuba-kataanga",luo:"Luwada",luy:"Luhya",lv:"Laatfiyaan",mas:"Masaay",mer:"Meeru",mfe:"Moorisayn",mg:"Malagaasi",mgh:"Makhuwa",mgo:"Meetaa",mi:"Maaoori",mk:"Masadooniyaan",ml:"Malayalam",mn:"Mangooli",mr:"Maarati",ms:"Malaay",mt:"Maltiis",mua:"Miyundhaang",my:"Burmese",mzn:"Masanderaani",naq:"Nama",nb:"Noorwijiyaan Bokma",nd:"Indhebeele",nds:"Jarmal Hooseeya","nds-NL":"Jarmal Hooseeya (Nederlaands)",ne:"Nebaali",nl:"Holandays","nl-BE":"Af faleemi",nmg:"Kuwaasiyo",nn:"Nowrwejiyan (naynoroski)",nnh:"Ingiyembuun",nus:"Nuweer",ny:"Inyaanja",nyn:"Inyankoole",om:"Oromo",or:"Oodhiya",os:"Oseetic",pa:"Bunjaabi",pl:"Boolish",prg:"Brashiyaanki Hore",ps:"Bashtuu",pt:"Boortaqiis","pt-BR":"Boortaqiiska Baraasiil","pt-PT":"Boortaqiis (Boortuqaal)",qu:"Quwejuwa",rm:"Romaanis",rn:"Rundhi",ro:"Romanka","ro-MD":"Romanka (Moldofa)",rof:"Rombo",ru:"Ruush",rw:"Ruwaandha",rwk:"Raawa",sa:"Sanskrit",sah:"Saaqa",saq:"Sambuuru",sbp:"Sangu",sd:"Siindhi",se:"Koonfurta Saami",seh:"Seena",ses:"Koyraboro Seenni",sg:"Sango",shi:"Shilha",si:"Sinhaleys",sk:"Isloofaak",sl:"Islofeeniyaan",sm:"Samowan",smn:"Inaari Saami",sn:"Shoona",so:"Soomaali",sq:"Albeeniyaan",sr:"Seerbiyaan",st:"Sesooto",su:"Suudaaniis",sv:"Swiidhis",sw:"Sawaaxili","sw-CD":"Sawaaxili (Jamhuuriyadda Dimuquraadiga Kongo)",ta:"Tamiil",te:"Teluugu",teo:"Teeso",tg:"Taajik",th:"Taaylandays",ti:"Tigrinya",tk:"Turkumaanish",to:"Toongan",tr:"Turkish",tt:"Taatar",twq:"Tasaawaq",tzm:"Bartamaha Atlaas Tamasayt",ug:"Uighur",uk:"Yukreeniyaan",ur:"Urduu",uz:"Usbakis",vai:"Faayi",vi:"Fiitnaamays",vo:"Folabuuk",vun:"Fuunjo",wae:"Walseer",wo:"Woolof",xh:"Hoosta",xog:"Sooga",yav:"Yaangbeen",yi:"Yadhish",yo:"Yoruuba",yue:"Kantoneese",zgh:"Morokaanka Tamasayt Rasmiga",zh:"Shiinaha Mandarin","zh-Hans":"Shiinaha Mandarin (La fududeeyay)","zh-Hant":"Shiinaha Mandarin (Hore)",zu:"Zuulu"},scriptNames:{Cyrl:"Siriylik",Latn:"Laatiin",Arab:"Carabi",Hans:"La fududeeyay",Hant:"Hore"}},sq:{rtl:false,languageNames:{aa:"afarisht",ab:"abkazisht",ace:"akinezisht",ada:"andangmeisht",ady:"adigisht",af:"afrikanisht",agq:"agemisht",ain:"ajnuisht",ak:"akanisht",ale:"aleutisht",alt:"altaishte jugore",am:"amarisht",an:"aragonezisht",anp:"angikisht",ar:"arabisht","ar-001":"arabishte standarde moderne",arn:"mapuçisht",arp:"arapahoisht",as:"asamezisht",asa:"asuisht",ast:"asturisht",av:"avarikisht",awa:"auadhisht",ay:"ajmarisht",az:"azerbajxhanisht",ba:"bashkirisht",ban:"balinezisht",bas:"basaisht",be:"bjellorusisht",bem:"bembaisht",bez:"benaisht",bg:"bullgarisht",bgn:"balokishte perëndimore",bho:"boxhpurisht",bi:"bislamisht",bin:"binisht",bla:"siksikaisht",bm:"bambarisht",bn:"bengalisht",bo:"tibetisht",br:"bretonisht",brx:"bodoisht",bs:"boshnjakisht",bug:"buginezisht",byn:"blinisht",ca:"katalonisht",ccp:"çakmaisht",ce:"çeçenisht",ceb:"sebuanisht",cgg:"çigisht",ch:"kamoroisht",chk:"çukezisht",chm:"marisht",cho:"çoktauisht",chr:"çerokisht",chy:"çejenisht",ckb:"kurdishte qendrore",co:"korsikisht",crs:"frëngjishte kreole seselve",cs:"çekisht",cu:"sllavishte kishtare",cv:"çuvashisht",cy:"uellsisht",da:"danisht",dak:"dakotisht",dar:"darguaisht",dav:"tajtaisht",de:"gjermanisht","de-AT":"gjermanishte austriake","de-CH":"gjermanishte zvicerane (dialekti i Alpeve)",dgr:"dogribisht",dje:"zarmaisht",dsb:"sorbishte e poshtme",dua:"dualaisht",dv:"divehisht",dyo:"xhulafonjisht",dz:"xhongaisht",dzg:"dazagauisht",ebu:"embuisht",ee:"eveisht",efi:"efikisht",eka:"ekajukisht",el:"greqisht",en:"anglisht","en-AU":"anglishte australiane","en-CA":"anglishte kanadeze","en-GB":"anglishte britanike","en-US":"anglishte amerikane",eo:"esperanto",es:"spanjisht","es-419":"spanjishte amerikano-latine","es-ES":"spanjishte evropiane","es-MX":"spanjishte meksikane",et:"estonisht",eu:"baskisht",ewo:"euondoisht",fa:"persisht",ff:"fulaisht",fi:"finlandisht",fil:"filipinisht",fj:"fixhianisht",fo:"faroisht",fon:"fonisht",fr:"frëngjisht","fr-CA":"frëngjishte kanadeze","fr-CH":"frëngjishte zvicerane",fur:"friulianisht",fy:"frizianishte perëndimore",ga:"irlandisht",gaa:"gaisht",gag:"gagauzisht",gd:"galishte skoceze",gez:"gizisht",gil:"gilbertazisht",gl:"galicisht",gn:"guaranisht",gor:"gorontaloisht",gsw:"gjermanishte zvicerane",gu:"guxharatisht",guz:"gusisht",gv:"manksisht",gwi:"guiçinisht",ha:"hausisht",haw:"havaisht",he:"hebraisht",hi:"indisht",hil:"hiligajnonisht",hmn:"hmongisht",hr:"kroatisht",hsb:"sorbishte e sipërme",ht:"haitisht",hu:"hungarisht",hup:"hupaisht",hy:"armenisht",hz:"hereroisht",ia:"interlingua",iba:"ibanisht",ibb:"ibibioisht",id:"indonezisht",ie:"gjuha oksidentale",ig:"igboisht",ii:"sishuanisht",ilo:"ilokoisht",inh:"ingushisht",io:"idoisht",is:"islandisht",it:"italisht",iu:"inuktitutisht",ja:"japonisht",jbo:"lojbanisht",jgo:"ngombisht",jmc:"maçamisht",jv:"javanisht",ka:"gjeorgjisht",kab:"kabilisht",kac:"kaçinisht",kaj:"kajeisht",kam:"kambaisht",kbd:"kabardianisht",kcg:"tjapisht",kde:"makondisht",kea:"kreolishte e Kepit të Gjelbër",kfo:"koroisht",kha:"kasisht",khq:"kojraçinisht",ki:"kikujuisht",kj:"kuanjamaisht",kk:"kazakisht",kkj:"kakoisht",kl:"kalalisutisht",kln:"kalenxhinisht",km:"kmerisht",kmb:"kimbunduisht",kn:"kanadisht",ko:"koreanisht",koi:"komi-parmjakisht",kok:"konkanisht",kpe:"kpeleisht",kr:"kanurisht",krc:"karaçaj-balkarisht",krl:"karelianisht",kru:"kurukisht",ks:"kashmirisht",ksb:"shambalisht",ksf:"bafianisht",ksh:"këlnisht",ku:"kurdisht",kum:"kumikisht",kv:"komisht",kw:"kornisht",ky:"kirgizisht",la:"latinisht",lad:"ladinoisht",lag:"langisht",lb:"luksemburgisht",lez:"lezgianisht",lg:"gandaisht",li:"limburgisht",lkt:"lakotisht",ln:"lingalisht",lo:"laosisht",loz:"lozisht",lrc:"lurishte veriore",lt:"lituanisht",lu:"luba-katangaisht",lua:"luba-luluaisht",lun:"lundaisht",luo:"luoisht",lus:"mizoisht",luy:"lujaisht",lv:"letonisht",mad:"madurezisht",mag:"magaisht",mai:"maitilisht",mak:"makasarisht",mas:"masaisht",mdf:"mokshaisht",men:"mendisht",mer:"meruisht",mfe:"morisjenisht",mg:"madagaskarisht",mgh:"makua-mitoisht",mgo:"metaisht",mh:"marshallisht",mi:"maorisht",mic:"mikmakisht",min:"minangkabauisht",mk:"maqedonisht",ml:"malajalamisht",mn:"mongolisht",mni:"manipurisht",moh:"mohokisht",mos:"mosisht",mr:"maratisht",ms:"malajisht",mt:"maltisht",mua:"mundangisht",mus:"krikisht",mwl:"mirandisht",my:"birmanisht",myv:"erzjaisht",mzn:"mazanderanisht",na:"nauruisht",nap:"napoletanisht",naq:"namaisht",nb:"norvegjishte letrare",nd:"ndebelishte veriore",nds:"gjermanishte e vendeve të ulëta","nds-NL":"gjermanishte saksone e vendeve të ulëta",ne:"nepalisht","new":"neuarisht",ng:"ndongaisht",nia:"niasisht",niu:"niueanisht",nl:"holandisht","nl-BE":"flamandisht",nmg:"kuasisht",nn:"norvegjishte nynorsk",nnh:"ngiembunisht",no:"norvegjisht",nog:"nogajisht",nqo:"nkoisht",nr:"ndebelishte jugore",nso:"sotoishte veriore",nus:"nuerisht",nv:"navahoisht",ny:"nianjisht",nyn:"niankolisht",oc:"oksitanisht",om:"oromoisht",or:"odisht",os:"osetisht",pa:"punxhabisht",pag:"pangasinanisht",pam:"pampangaisht",pap:"papiamentisht",pau:"paluanisht",pcm:"pixhinishte nigeriane",pl:"polonisht",prg:"prusisht",ps:"pashtoisht",pt:"portugalisht","pt-BR":"portugalishte braziliane","pt-PT":"portugalishte evropiane",qu:"keçuaisht",quc:"kiçeisht",rap:"rapanuisht",rar:"rarontonganisht",rm:"retoromanisht",rn:"rundisht",ro:"rumanisht","ro-MD":"moldavisht",rof:"romboisht",root:"rutisht",ru:"rusisht",rup:"vllahisht",rw:"kiniaruandisht",rwk:"ruaisht",sa:"sanskritisht",sad:"sandauisht",sah:"sakaisht",saq:"samburisht",sat:"santalisht",sba:"ngambajisht",sbp:"sanguisht",sc:"sardenjisht",scn:"siçilianisht",sco:"skotisht",sd:"sindisht",sdh:"kurdishte jugore",se:"samishte veriore",seh:"senaisht",ses:"senishte kojrabore",sg:"sangoisht",sh:"serbo-kroatisht",shi:"taçelitisht",shn:"shanisht",si:"sinhalisht",sk:"sllovakisht",sl:"sllovenisht",sm:"samoanisht",sma:"samishte jugore",smj:"samishte lule",smn:"samishte inari",sms:"samishte skolti",sn:"shonisht",snk:"soninkisht",so:"somalisht",sq:"shqip",sr:"serbisht",srn:"srananisht (sranantongoisht)",ss:"suatisht",ssy:"sahoisht",st:"sotoishte jugore",su:"sundanisht",suk:"sukumaisht",sv:"suedisht",sw:"suahilisht","sw-CD":"suahilishte kongoleze",swb:"kamorianisht",syr:"siriakisht",ta:"tamilisht",te:"teluguisht",tem:"timneisht",teo:"tesoisht",tet:"tetumisht",tg:"taxhikisht",th:"tajlandisht",ti:"tigrinjaisht",tig:"tigreisht",tk:"turkmenisht",tlh:"klingonisht",tn:"cuanaisht",to:"tonganisht",tpi:"pisinishte toku",tr:"turqisht",trv:"torokoisht",ts:"congaisht",tt:"tatarisht",tum:"tumbukaisht",tvl:"tuvaluisht",tw:"tuisht",twq:"tasavakisht",ty:"tahitisht",tyv:"tuvinianisht",tzm:"tamazajtisht e Atlasit Qendror",udm:"udmurtisht",ug:"ujgurisht",uk:"ukrainisht",umb:"umbunduisht",ur:"urduisht",uz:"uzbekisht",vai:"vaisht",ve:"vendaisht",vi:"vietnamisht",vo:"volapykisht",vun:"vunxhoisht",wa:"ualunisht",wae:"ualserisht",wal:"ulajtaisht",war:"uarajisht",wbp:"uarlpirisht",wo:"uolofisht",xal:"kalmikisht",xh:"xhosaisht",xog:"sogisht",yav:"jangbenisht",ybb:"jembaisht",yi:"jidisht",yo:"jorubaisht",yue:"kantonezisht",zgh:"tamaziatishte standarde marokene",zh:"kinezisht","zh-Hans":"kinezisht (i thjeshtuar)","zh-Hant":"kinezisht (tradicional)",zu:"zuluisht",zun:"zunisht",zza:"zazaisht"},scriptNames:{Cyrl:"cirilik",Latn:"latin",Arab:"arabik",Guru:"gurmuk",Hans:"i thjeshtuar",Hant:"tradicional"}},sr:{rtl:false,languageNames:{aa:"афарски",ab:"абхаски",ace:"ацешки",ach:"аколи",ada:"адангме",ady:"адигејски",ae:"авестански",af:"африканс",afh:"африхили",agq:"агем",ain:"аину",ak:"акански",akk:"акадијски",ale:"алеутски",alt:"јужноалтајски",am:"амхарски",an:"арагонски",ang:"староенглески",anp:"ангика",ar:"арапски","ar-001":"савремени стандардни арапски",arc:"арамејски",arn:"мапуче",arp:"арапахо",arw:"аравачки",as:"асамски",asa:"асу",ast:"астуријски",av:"аварски",awa:"авади",ay:"ајмара",az:"азербејџански",ba:"башкирски",bal:"белучки",ban:"балијски",bas:"баса",be:"белоруски",bej:"беџа",bem:"бемба",bez:"бена",bg:"бугарски",bgn:"западни белучки",bho:"боџпури",bi:"бислама",bik:"бикол",bin:"бини",bla:"сисика",bm:"бамбара",bn:"бенгалски",bo:"тибетански",br:"бретонски",bra:"брај",brx:"бодо",bs:"босански",bua:"бурјатски",bug:"бугијски",byn:"блински",ca:"каталонски",cad:"кадо",car:"карипски",cch:"атсам",ce:"чеченски",ceb:"себуански",cgg:"чига",ch:"чаморо",chb:"чипча",chg:"чагатај",chk:"чучки",chm:"мари",chn:"чинучки",cho:"чоктавски",chp:"чипевјански",chr:"чероки",chy:"чејенски",ckb:"централни курдски",co:"корзикански",cop:"коптски",cr:"кри",crh:"кримскотатарски",crs:"сејшелски креолски француски",cs:"чешки",csb:"кашупски",cu:"црквенословенски",cv:"чувашки",cy:"велшки",da:"дански",dak:"дакота",dar:"даргински",dav:"таита",de:"немачки","de-AT":"немачки (Аустрија)","de-CH":"швајцарски високи немачки",del:"делаверски",den:"слејви",dgr:"догрипски",din:"динка",dje:"зарма",doi:"догри",dsb:"доњолужичкосрпски",dua:"дуала",dum:"средњехоландски",dv:"малдивски",dyo:"џола фоњи",dyu:"ђула",dz:"џонга",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефички",egy:"староегипатски",eka:"екаџук",el:"грчки",elx:"еламитски",en:"енглески","en-AU":"енглески (Аустралија)","en-CA":"енглески (Канада)","en-GB":"енглески (Велика Британија)","en-US":"енглески (Сједињене Америчке Државе)",enm:"средњеенглески",eo:"есперанто",es:"шпански","es-419":"шпански (Латинска Америка)","es-ES":"шпански (Европа)","es-MX":"шпански (Мексико)",et:"естонски",eu:"баскијски",ewo:"евондо",fa:"персијски",fan:"фанг",fat:"фанти",ff:"фула",fi:"фински",fil:"филипински",fj:"фиџијски",fo:"фарски",fon:"фон",fr:"француски","fr-CA":"француски (Канада)","fr-CH":"француски (Швајцарска)",frc:"кајунски француски",frm:"средњефранцуски",fro:"старофранцуски",frr:"севернофризијски",frs:"источнофризијски",fur:"фриулски",fy:"западни фризијски",ga:"ирски",gaa:"га",gag:"гагауз",gay:"гајо",gba:"гбаја",gd:"шкотски гелски",gez:"геез",gil:"гилбертски",gl:"галицијски",gmh:"средњи високонемачки",gn:"гварани",goh:"старонемачки",gon:"гонди",gor:"горонтало",got:"готски",grb:"гребо",grc:"старогрчки",gsw:"немачки (Швајцарска)",gu:"гуџарати",guz:"гуси",gv:"манкс",gwi:"гвичински",ha:"хауса",hai:"хаида",haw:"хавајски",he:"хебрејски",hi:"хинди",hil:"хилигајнонски",hit:"хетитски",hmn:"хмоншки",ho:"хири моту",hr:"хрватски",hsb:"горњолужичкосрпски",ht:"хаићански",hu:"мађарски",hup:"хупа",hy:"јерменски",hz:"хереро",ia:"интерлингва",iba:"ибански",ibb:"ибибио",id:"индонежански",ie:"интерлингве",ig:"игбо",ii:"сечуански ји",ik:"инупик",ilo:"илоко",inh:"ингушки",io:"идо",is:"исландски",it:"италијански",iu:"инуктитутски",ja:"јапански",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"јудео-персијски",jrb:"јудео-арапски",jv:"јавански",ka:"грузијски",kaa:"кара-калпашки",kab:"кабиле",kac:"качински",kaj:"џу",kam:"камба",kaw:"кави",kbd:"кабардијски",kcg:"тјап",kde:"маконде",kea:"зеленортски",kfo:"коро",kg:"конго",kha:"каси",kho:"котанешки",khq:"којра чиини",ki:"кикују",kj:"квањама",kk:"казашки",kkj:"како",kl:"гренландски",kln:"каленџински",km:"кмерски",kmb:"кимбунду",kn:"канада",ko:"корејски",koi:"коми-пермски",kok:"конкани",kos:"косренски",kpe:"кпеле",kr:"канури",krc:"карачајско-балкарски",kri:"крио",krl:"карелски",kru:"курук",ks:"кашмирски",ksb:"шамбала",ksf:"бафија",ksh:"келнски",ku:"курдски",kum:"кумички",kut:"кутенај",kv:"коми",kw:"корнволски",ky:"киргиски",la:"латински",lad:"ладино",lag:"ланги",lah:"ланда",lam:"ламба",lb:"луксембуршки",lez:"лезгински",lg:"ганда",li:"лимбуршки",lkt:"лакота",ln:"лингала",lo:"лаоски",lol:"монго",lou:"луизијански креолски",loz:"лози",lrc:"северни лури",lt:"литвански",lu:"луба-катанга",lua:"луба-лулуа",lui:"луисењо",lun:"лунда",luo:"луо",lus:"мизо",luy:"лујиа",lv:"летонски",mad:"мадурски",mag:"магахи",mai:"маитили",mak:"макасарски",man:"мандинго",mas:"масајски",mdf:"мокша",mdr:"мандар",men:"менде",mer:"меру",mfe:"морисјен",mg:"малгашки",mga:"средњеирски",mgh:"макува-мито",mgo:"мета",mh:"маршалски",mi:"маорски",mic:"микмак",min:"минангкабау",mk:"македонски",ml:"малајалам",mn:"монголски",mnc:"манџурски",mni:"манипурски",moh:"мохочки",mos:"моси",mr:"марати",ms:"малајски",mt:"малтешки",mua:"мунданг",mus:"кришки",mwl:"мирандски",mwr:"марвари",my:"бурмански",myv:"ерзја",mzn:"мазандерански",na:"науруски",nap:"напуљски",naq:"нама",nb:"норвешки букмол",nd:"северни ндебеле",nds:"нисконемачки","nds-NL":"нискосаксонски",ne:"непалски","new":"невари",ng:"ндонга",nia:"ниас",niu:"ниуејски",nl:"холандски","nl-BE":"фламански",nmg:"квасио",nn:"норвешки нинорск",nnh:"нгиембун",no:"норвешки",nog:"ногајски",non:"старонордијски",nqo:"нко",nr:"јужни ндебеле",nso:"северни сото",nus:"нуер",nv:"навахо",nwc:"класични неварски",ny:"њанџа",nym:"њамвези",nyn:"њанколе",nyo:"њоро",nzi:"нзима",oc:"окситански",oj:"оџибве",om:"оромо",or:"одија",os:"осетински",osa:"осаге",ota:"османски турски",pa:"пенџапски",pag:"пангасинански",pal:"пахлави",pam:"пампанга",pap:"папијаменто",pau:"палауски",pcm:"нигеријски пиџин",peo:"староперсијски",phn:"феничански",pi:"пали",pl:"пољски",pon:"понпејски",prg:"пруски",pro:"староокситански",ps:"паштунски",pt:"португалски","pt-BR":"португалски (Бразил)","pt-PT":"португалски (Португал)",qu:"кечуа",quc:"киче",raj:"раџастански",rap:"рапануи",rar:"раротонгански",rm:"романш",rn:"кирунди",ro:"румунски","ro-MD":"молдавски",rof:"ромбо",rom:"ромски",root:"рут",ru:"руски",rup:"цинцарски",rw:"кињаруанда",rwk:"руа",sa:"санскрит",sad:"сандаве",sah:"саха",sam:"самаријански арамејски",saq:"самбуру",sas:"сасак",sat:"сантали",sba:"нгамбај",sbp:"сангу",sc:"сардински",scn:"сицилијански",sco:"шкотски",sd:"синди",sdh:"јужнокурдски",se:"северни сами",seh:"сена",sel:"селкупски",ses:"којраборо сени",sg:"санго",sga:"староирски",sh:"српскохрватски",shi:"ташелхит",shn:"шански",si:"синхалешки",sid:"сидамо",sk:"словачки",sl:"словеначки",sm:"самоански",sma:"јужни сами",smj:"луле сами",smn:"инари сами",sms:"сколт сами",sn:"шона",snk:"сонинке",so:"сомалски",sog:"согдијски",sq:"албански",sr:"српски",srn:"сранан тонго",srr:"серерски",ss:"свази",ssy:"сахо",st:"сесото",su:"сундански",suk:"сукума",sus:"сусу",sux:"сумерски",sv:"шведски",sw:"свахили","sw-CD":"кисвахили",swb:"коморски",syc:"сиријачки",syr:"сиријски",ta:"тамилски",te:"телугу",tem:"тимне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таџички",th:"тајски",ti:"тигриња",tig:"тигре",tiv:"тив",tk:"туркменски",tkl:"токелау",tl:"тагалог",tlh:"клингонски",tli:"тлингит",tmh:"тамашек",tn:"цвана",to:"тонгански",tog:"њаса тонга",tpi:"ток писин",tr:"турски",trv:"тароко",ts:"цонга",tsi:"цимшиан",tt:"татарски",tum:"тумбука",tvl:"тувалу",tw:"тви",twq:"тасавак",ty:"тахићански",tyv:"тувински",tzm:"централноатласки тамазигт",udm:"удмуртски",ug:"ујгурски",uga:"угаритски",uk:"украјински",umb:"умбунду",ur:"урду",uz:"узбечки",vai:"ваи",ve:"венда",vi:"вијетнамски",vo:"волапик",vot:"водски",vun:"вунџо",wa:"валонски",wae:"валсерски",wal:"волајта",war:"варајски",was:"вашо",wbp:"варлпири",wo:"волоф",xal:"калмички",xh:"коса",xog:"сога",yao:"јао",yap:"јапски",yav:"јангбен",ybb:"јемба",yi:"јидиш",yo:"јоруба",yue:"кантонски",za:"џуаншки",zap:"запотечки",zbl:"блисимболи",zen:"зенага",zgh:"стандардни марокански тамазигт",zh:"кинески","zh-Hans":"кинески (поједностављено кинеско писмо)","zh-Hant":"кинески (традиционално кинеско писмо)",zu:"зулу",zun:"зуни",zza:"заза"},scriptNames:{Cyrl:"ћирилица",Latn:"латиница",Arab:"арапско писмо",Guru:"гурмуки писмо",Tfng:"тифинаг писмо",Vaii:"ваи писмо",Hans:"поједностављено кинеско писмо",Hant:"традиционално кинеско писмо"}},sv:{rtl:false,languageNames:{aa:"afar",ab:"abchaziska",ace:"acehnesiska",ach:"acholi",ada:"adangme",ady:"adygeiska",ae:"avestiska",aeb:"tunisisk arabiska",af:"afrikaans",afh:"afrihili",agq:"aghem",ain:"ainu",ak:"akan",akk:"akkadiska",akz:"Alabama-muskogee",ale:"aleutiska",aln:"gegiska",alt:"sydaltaiska",am:"amhariska",an:"aragonesiska",ang:"fornengelska",anp:"angika",ar:"arabiska","ar-001":"modern standardarabiska",arc:"arameiska",arn:"mapudungun",aro:"araoniska",arp:"arapaho",arq:"algerisk arabiska",ars:"najdiarabiska",arw:"arawakiska",ary:"marockansk arabiska",arz:"egyptisk arabiska",as:"assamesiska",asa:"asu",ase:"amerikanskt teckenspråk",ast:"asturiska",av:"avariska",avk:"kotava",awa:"awadhi",ay:"aymara",az:"azerbajdzjanska",ba:"basjkiriska",bal:"baluchiska",ban:"balinesiska",bar:"bayerska",bas:"basa",bax:"bamunska",bbc:"batak-toba",bbj:"ghomala",be:"vitryska",bej:"beja",bem:"bemba",bew:"betawiska",bez:"bena",bfd:"bafut",bfq:"bagada",bg:"bulgariska",bgn:"västbaluchiska",bho:"bhojpuri",bi:"bislama",bik:"bikol",bin:"bini",bjn:"banjariska",bkm:"bamekon",bla:"siksika",bm:"bambara",bn:"bengali",bo:"tibetanska",bpy:"bishnupriya",bqi:"bakhtiari",br:"bretonska",bra:"braj",brh:"brahuiska",brx:"bodo",bs:"bosniska",bss:"bakossi",bua:"burjätiska",bug:"buginesiska",bum:"boulou",byn:"blin",byv:"bagangte",ca:"katalanska",cad:"caddo",car:"karibiska",cay:"cayuga",cch:"atsam",ccp:"chakma",ce:"tjetjenska",ceb:"cebuano",cgg:"chiga",ch:"chamorro",chb:"chibcha",chg:"chagatai",chk:"chuukesiska",chm:"mariska",chn:"chinook",cho:"choctaw",chp:"chipewyan",chr:"cherokesiska",chy:"cheyenne",ckb:"soranisk kurdiska",co:"korsikanska",cop:"koptiska",cps:"kapisnon",cr:"cree",crh:"krimtatariska",crs:"seychellisk kreol",cs:"tjeckiska",csb:"kasjubiska",cu:"kyrkslaviska",cv:"tjuvasjiska",cy:"walesiska",da:"danska",dak:"dakota",dar:"darginska",dav:"taita",de:"tyska","de-AT":"österrikisk tyska","de-CH":"schweizisk högtyska",del:"delaware",den:"slavej",dgr:"dogrib",din:"dinka",dje:"zarma",doi:"dogri",dsb:"lågsorbiska",dtp:"centraldusun",dua:"duala",dum:"medelnederländska",dv:"divehi",dyo:"jola-fonyi",dyu:"dyula",dz:"dzongkha",dzg:"dazaga",ebu:"embu",ee:"ewe",efi:"efik",egl:"emiliska",egy:"fornegyptiska",eka:"ekajuk",el:"grekiska",elx:"elamitiska",en:"engelska","en-AU":"australisk engelska","en-CA":"kanadensisk engelska","en-GB":"brittisk engelska","en-US":"amerikansk engelska",enm:"medelengelska",eo:"esperanto",es:"spanska","es-419":"latinamerikansk spanska","es-ES":"europeisk spanska","es-MX":"mexikansk spanska",esu:"centralalaskisk jupiska",et:"estniska",eu:"baskiska",ewo:"ewondo",ext:"extremaduriska",fa:"persiska",fan:"fang",fat:"fanti",ff:"fulani",fi:"finska",fil:"filippinska",fit:"meänkieli",fj:"fijianska",fo:"färöiska",fon:"fonspråket",fr:"franska","fr-CA":"kanadensisk franska","fr-CH":"schweizisk franska",frc:"cajun-franska",frm:"medelfranska",fro:"fornfranska",frp:"frankoprovensalska",frr:"nordfrisiska",frs:"östfrisiska",fur:"friulianska",fy:"västfrisiska",ga:"iriska",gaa:"gã",gag:"gagauziska",gay:"gayo",gba:"gbaya",gbz:"zoroastrisk dari",gd:"skotsk gäliska",gez:"etiopiska",gil:"gilbertiska",gl:"galiciska",glk:"gilaki",gmh:"medelhögtyska",gn:"guaraní",goh:"fornhögtyska",gom:"Goa-konkani",gon:"gondi",gor:"gorontalo",got:"gotiska",grb:"grebo",grc:"forngrekiska",gsw:"schweizertyska",gu:"gujarati",guc:"wayuu",gur:"farefare",guz:"gusii",gv:"manx",gwi:"gwichin",ha:"hausa",hai:"haida",hak:"hakka",haw:"hawaiiska",he:"hebreiska",hi:"hindi",hif:"Fiji-hindi",hil:"hiligaynon",hit:"hettitiska",hmn:"hmongspråk",ho:"hirimotu",hr:"kroatiska",hsb:"högsorbiska",hsn:"xiang",ht:"haitiska",hu:"ungerska",hup:"hupa",hy:"armeniska",hz:"herero",ia:"interlingua",iba:"ibanska",ibb:"ibibio",id:"indonesiska",ie:"interlingue",ig:"igbo",ii:"szezuan i",ik:"inupiak",ilo:"iloko",inh:"ingusjiska",io:"ido",is:"isländska",it:"italienska",iu:"inuktitut",izh:"ingriska",ja:"japanska",jam:"jamaikansk engelsk kreol",jbo:"lojban",jgo:"ngomba",jmc:"kimashami",jpr:"judisk persiska",jrb:"judisk arabiska",jut:"jylländska",jv:"javanesiska",ka:"georgiska",kaa:"karakalpakiska",kab:"kabyliska",kac:"kachin",kaj:"jju",kam:"kamba",kaw:"kawi",kbd:"kabardinska",kbl:"kanembu",kcg:"tyap",kde:"makonde",kea:"kapverdiska",ken:"kenjang",kfo:"koro",kg:"kikongo",kgp:"kaingang",kha:"khasi",kho:"khotanesiska",khq:"Timbuktu-songhai",khw:"khowar",ki:"kikuyu",kiu:"kirmanjki",kj:"kuanyama",kk:"kazakiska",kkj:"mkako",kl:"grönländska",kln:"kalenjin",km:"kambodjanska",kmb:"kimbundu",kn:"kannada",ko:"koreanska",koi:"komi-permjakiska",kok:"konkani",kos:"kosreanska",kpe:"kpelle",kr:"kanuri",krc:"karachay-balkar",kri:"krio",krj:"kinaray-a",krl:"karelska",kru:"kurukh",ks:"kashmiriska",ksb:"kisambaa",ksf:"bafia",ksh:"kölniska",ku:"kurdiska",kum:"kumykiska",kut:"kutenaj",kv:"kome",kw:"korniska",ky:"kirgiziska",la:"latin",lad:"ladino",lag:"langi",lah:"lahnda",lam:"lamba",lb:"luxemburgiska",lez:"lezghien",lfn:"lingua franca nova",lg:"luganda",li:"limburgiska",lij:"liguriska",liv:"livoniska",lkt:"lakota",lmo:"lombardiska",ln:"lingala",lo:"laotiska",lol:"mongo",lou:"louisiana-kreol",loz:"lozi",lrc:"nordluri",lt:"litauiska",ltg:"lettgalliska",lu:"luba-katanga",lua:"luba-lulua",lui:"luiseño",lun:"lunda",lus:"lushai",luy:"luhya",lv:"lettiska",lzh:"litterär kineiska",lzz:"laziska",mad:"maduresiska",maf:"mafa",mag:"magahi",mai:"maithili",mak:"makasar",man:"mande",mas:"massajiska",mde:"maba",mdf:"moksja",mdr:"mandar",men:"mende",mer:"meru",mfe:"mauritansk kreol",mg:"malagassiska",mga:"medeliriska",mgh:"makhuwa-meetto",mgo:"meta’",mh:"marshalliska",mi:"maori",mic:"mi’kmaq",min:"minangkabau",mk:"makedonska",ml:"malayalam",mn:"mongoliska",mnc:"manchuriska",mni:"manipuri",moh:"mohawk",mos:"mossi",mr:"marathi",mrj:"västmariska",ms:"malajiska",mt:"maltesiska",mua:"mundang",mus:"muskogee",mwl:"mirandesiska",mwr:"marwari",mwv:"mentawai",my:"burmesiska",mye:"myene",myv:"erjya",mzn:"mazanderani",na:"nauruanska",nan:"min nan",nap:"napolitanska",naq:"nama",nb:"norskt bokmål",nd:"nordndebele",nds:"lågtyska","nds-NL":"lågsaxiska",ne:"nepalesiska","new":"newariska",ng:"ndonga",nia:"nias",niu:"niueanska",njo:"ao-naga",nl:"nederländska","nl-BE":"flamländska",nmg:"kwasio",nn:"nynorska",nnh:"bamileké-ngiemboon",no:"norska",nog:"nogai",non:"fornnordiska",nov:"novial",nqo:"n-kå",nr:"sydndebele",nso:"nordsotho",nus:"nuer",nv:"navaho",nwc:"klassisk newariska",ny:"nyanja",nym:"nyamwezi",nyn:"nyankole",nyo:"nyoro",nzi:"nzima",oc:"occitanska",oj:"odjibwa",om:"oromo",or:"oriya",os:"ossetiska",osa:"osage",ota:"ottomanska",pa:"punjabi",pag:"pangasinan",pal:"medelpersiska",pam:"pampanga",pap:"papiamento",pau:"palau",pcd:"pikardiska",pcm:"Nigeria-pidgin",pdc:"Pennsylvaniatyska",pdt:"mennonitisk lågtyska",peo:"fornpersiska",pfl:"Pfalz-tyska",phn:"feniciska",pi:"pali",pl:"polska",pms:"piemontesiska",pnt:"pontiska",pon:"pohnpeiska",prg:"fornpreussiska",pro:"fornprovensalska",ps:"afghanska",pt:"portugisiska","pt-BR":"brasiliansk portugisiska","pt-PT":"europeisk portugisiska",qu:"quechua",quc:"quiché",qug:"Chimborazo-höglandskichwa",raj:"rajasthani",rap:"rapanui",rar:"rarotonganska",rgn:"romagnol",rif:"riffianska",rm:"rätoromanska",rn:"rundi",ro:"rumänska","ro-MD":"moldaviska",rof:"rombo",rom:"romani",root:"rot",rtm:"rotumänska",ru:"ryska",rue:"rusyn",rug:"rovianska",rup:"arumänska",rw:"kinjarwanda",rwk:"rwa",sa:"sanskrit",sad:"sandawe",sah:"jakutiska",sam:"samaritanska",saq:"samburu",sas:"sasak",sat:"santali",saz:"saurashtra",sba:"ngambay",sbp:"sangu",sc:"sardinska",scn:"sicilianska",sco:"skotska",sd:"sindhi",sdc:"sassaresisk sardiska",sdh:"sydkurdiska",se:"nordsamiska",see:"seneca",seh:"sena",sei:"seri",sel:"selkup",ses:"Gao-songhai",sg:"sango",sga:"forniriska",sgs:"samogitiska",sh:"serbokroatiska",shi:"tachelhit",shn:"shan",shu:"Tchad-arabiska",si:"singalesiska",sid:"sidamo",sk:"slovakiska",sl:"slovenska",sli:"lågsilesiska",sly:"selayar",sm:"samoanska",sma:"sydsamiska",smj:"lulesamiska",smn:"enaresamiska",sms:"skoltsamiska",sn:"shona",snk:"soninke",so:"somaliska",sog:"sogdiska",sq:"albanska",sr:"serbiska",srn:"sranan tongo",srr:"serer",ss:"swati",ssy:"saho",st:"sydsotho",stq:"saterfrisiska",su:"sundanesiska",suk:"sukuma",sus:"susu",sux:"sumeriska",sv:"svenska",sw:"swahili","sw-CD":"Kongo-swahili",swb:"shimaoré",syc:"klassisk syriska",syr:"syriska",szl:"silesiska",ta:"tamil",tcy:"tulu",te:"telugu",tem:"temne",teo:"teso",ter:"tereno",tet:"tetum",tg:"tadzjikiska",th:"thailändska",ti:"tigrinja",tig:"tigré",tiv:"tivi",tk:"turkmeniska",tkl:"tokelauiska",tkr:"tsakhur",tl:"tagalog",tlh:"klingonska",tli:"tlingit",tly:"talysh",tmh:"tamashek",tn:"tswana",to:"tonganska",tog:"nyasatonganska",tpi:"tok pisin",tr:"turkiska",tru:"turoyo",trv:"taroko",ts:"tsonga",tsd:"tsakodiska",tsi:"tsimshian",tt:"tatariska",ttt:"muslimsk tatariska",tum:"tumbuka",tvl:"tuvaluanska",tw:"twi",twq:"tasawaq",ty:"tahitiska",tyv:"tuviniska",tzm:"centralmarockansk tamazight",udm:"udmurtiska",ug:"uiguriska",uga:"ugaritiska",uk:"ukrainska",umb:"umbundu",ur:"urdu",uz:"uzbekiska",vai:"vaj",ve:"venda",vec:"venetianska",vep:"veps",vi:"vietnamesiska",vls:"västflamländska",vmf:"Main-frankiska",vo:"volapük",vot:"votiska",vro:"võru",vun:"vunjo",wa:"vallonska",wae:"walsertyska",wal:"walamo",war:"waray",was:"washo",wbp:"warlpiri",wo:"wolof",wuu:"wu",xal:"kalmuckiska",xh:"xhosa",xmf:"mingrelianska",xog:"lusoga",yao:"kiyao",yap:"japetiska",yav:"yangben",ybb:"bamileké-jemba",yi:"jiddisch",yo:"yoruba",yrl:"nheengatu",yue:"kantonesiska",za:"zhuang",zap:"zapotek",zbl:"blissymboler",zea:"zeeländska",zen:"zenaga",zgh:"marockansk standard-tamazight",zh:"kinesiska","zh-Hans":"förenklad kinesiska","zh-Hant":"traditionell kinesiska",zu:"zulu",zun:"zuni",zza:"zazaiska"},scriptNames:{Cyrl:"kyrilliska",Latn:"latinska",Arab:"arabiska",Guru:"gurmukhiska",Tfng:"tifinaghiska",Vaii:"vaj",Hans:"förenklade",Hant:"traditionella"}},ta:{rtl:false,languageNames:{aa:"அஃபார்",ab:"அப்காஜியான்",ace:"ஆச்சினீஸ்",ach:"அகோலி",ada:"அதாங்மே",ady:"அதகே",ae:"அவெஸ்தான்",aeb:"துனிசிய அரபு",af:"ஆஃப்ரிகான்ஸ்",afh:"அஃப்ரிஹிலி",agq:"அகெம்",ain:"ஐனு",ak:"அகான்",akk:"அக்கேதியன்",ale:"அலூட்",alt:"தெற்கு அல்தை",am:"அம்ஹாரிக்",an:"ஆர்கோனீஸ்",ang:"பழைய ஆங்கிலம்",anp:"அங்கிகா",ar:"அரபிக்","ar-001":"நவீன நிலையான அரபிக்",arc:"அராமைக்",arn:"மபுச்சே",arp:"அரபஹோ",arw:"அராவாக்",as:"அஸ்ஸாமீஸ்",asa:"அசு",ast:"அஸ்துரியன்",av:"அவேரிக்",awa:"அவதி",ay:"அய்மரா",az:"அசர்பைஜானி",ba:"பஷ்கிர்",bal:"பலூச்சி",ban:"பலினீஸ்",bas:"பாஸா",be:"பெலாருஷியன்",bej:"பேஜா",bem:"பெம்பா",bez:"பெனா",bfq:"படகா",bg:"பல்கேரியன்",bgn:"மேற்கு பலோச்சி",bho:"போஜ்பூரி",bi:"பிஸ்லாமா",bik:"பிகோல்",bin:"பினி",bla:"சிக்சிகா",bm:"பம்பாரா",bn:"வங்காளம்",bo:"திபெத்தியன்",bpy:"பிஷ்ணுப்பிரியா",br:"பிரெட்டன்",bra:"ப்ராஜ்",brx:"போடோ",bs:"போஸ்னியன்",bua:"புரியாத்",bug:"புகினீஸ்",byn:"ப்லின்",ca:"கேட்டலான்",cad:"கேடோ",car:"கரீப்",cch:"ஆட்சம்",ccp:"சக்மா",ce:"செச்சென்",ceb:"செபுவானோ",cgg:"சிகா",ch:"சாமோரோ",chb:"சிப்சா",chg:"ஷகதை",chk:"சூகிசே",chm:"மாரி",chn:"சினூக் ஜார்கான்",cho:"சோக்தௌ",chp:"சிபெவ்யான்",chr:"செரோகீ",chy:"செயேனி",ckb:"மத்திய குர்திஷ்",co:"கார்சிகன்",cop:"காப்டிக்",cr:"க்ரீ",crh:"கிரிமியன் துர்க்கி",crs:"செசெல்வா க்ரெயோல் பிரெஞ்சு",cs:"செக்",csb:"கஷுபியன்",cu:"சர்ச் ஸ்லாவிக்",cv:"சுவாஷ்",cy:"வேல்ஷ்",da:"டேனிஷ்",dak:"டகோடா",dar:"தார்குவா",dav:"டைடா",de:"ஜெர்மன்","de-AT":"ஆஸ்திரிய ஜெர்மன்","de-CH":"ஸ்விஸ் ஹை ஜெர்மன்",del:"டெலாவர்",den:"ஸ்லாவ்",dgr:"டோக்ரிப்",din:"டின்கா",dje:"ஸார்மா",doi:"டோக்ரி",dsb:"லோயர் சோர்பியன்",dua:"டுவாலா",dum:"மிடில் டச்சு",dv:"திவேஹி",dyo:"ஜோலா-ஃபோன்யி",dyu:"ட்யூலா",dz:"பூடானி",dzg:"டசாகா",ebu:"எம்பு",ee:"ஈவ்",efi:"எஃபிக்",egy:"பண்டைய எகிப்தியன்",eka:"ஈகாஜுக்",el:"கிரேக்கம்",elx:"எலமைட்",en:"ஆங்கிலம்","en-AU":"ஆஸ்திரேலிய ஆங்கிலம்","en-CA":"கனடிய ஆங்கிலம்","en-GB":"பிரிட்டிஷ் ஆங்கிலம்","en-US":"அமெரிக்க ஆங்கிலம்",enm:"மிடில் ஆங்கிலம்",eo:"எஸ்பரேன்டோ",es:"ஸ்பானிஷ்","es-419":"லத்தின் அமெரிக்க ஸ்பானிஷ்","es-ES":"ஐரோப்பிய ஸ்பானிஷ்","es-MX":"மெக்ஸிகன் ஸ்பானிஷ்",et:"எஸ்டோனியன்",eu:"பாஸ்க்",ewo:"எவோன்டோ",fa:"பெர்ஷியன்",fan:"ஃபேங்க்",fat:"ஃபான்டி",ff:"ஃபுலா",fi:"ஃபின்னிஷ்",fil:"ஃபிலிபினோ",fj:"ஃபிஜியன்",fo:"ஃபரோயிஸ்",fon:"ஃபான்",fr:"பிரெஞ்சு","fr-CA":"கனடிய பிரெஞ்சு","fr-CH":"ஸ்விஸ் பிரஞ்சு",frc:"கஜுன் பிரெஞ்சு",frm:"மிடில் பிரெஞ்சு",fro:"பழைய பிரெஞ்சு",frr:"வடக்கு ஃப்ரிஸியான்",frs:"கிழக்கு ஃப்ரிஸியான்",fur:"ஃப்ரியூலியன்",fy:"மேற்கு ஃப்ரிஷியன்",ga:"ஐரிஷ்",gaa:"கா",gag:"காகௌஸ்",gan:"கன் சீனம்",gay:"கயோ",gba:"பயா",gd:"ஸ்காட்ஸ் கேலிக்",gez:"கீஜ்",gil:"கில்பெர்டீஸ்",gl:"காலிஸியன்",gmh:"மிடில் ஹை ஜெர்மன்",gn:"க்வாரனி",goh:"பழைய ஹை ஜெர்மன்",gon:"கோன்டி",gor:"கோரோன்டலோ",got:"கோதிக்",grb:"க்ரேபோ",grc:"பண்டைய கிரேக்கம்",gsw:"ஸ்விஸ் ஜெர்மன்",gu:"குஜராத்தி",guz:"குஸி",gv:"மேங்க்ஸ்",gwi:"குவிசின்",ha:"ஹௌஸா",hai:"ஹைடா",hak:"ஹக்கா சீனம்",haw:"ஹவாயியன்",he:"ஹீப்ரூ",hi:"இந்தி",hif:"ஃபிஜி இந்தி",hil:"ஹிலிகாய்னான்",hit:"ஹிட்டைட்",hmn:"மாங்க்",ho:"ஹிரி மோட்டு",hr:"குரோஷியன்",hsb:"அப்பர் சோர்பியான்",hsn:"சியாங்க் சீனம்",ht:"ஹைத்தியன் க்ரியோலி",hu:"ஹங்கேரியன்",hup:"ஹுபா",hy:"ஆர்மேனியன்",hz:"ஹெரேரோ",ia:"இன்டர்லிங்வா",iba:"இபான்",ibb:"இபிபியோ",id:"இந்தோனேஷியன்",ie:"இன்டர்லிங்",ig:"இக்போ",ii:"சிசுவான் ஈ",ik:"இனுபியாக்",ilo:"இலோகோ",inh:"இங்குஷ்",io:"இடோ",is:"ஐஸ்லேண்டிக்",it:"இத்தாலியன்",iu:"இனுகிடூட்",ja:"ஜப்பானியம்",jbo:"லோஜ்பன்",jgo:"நகொம்பா",jmc:"மாசெம்",jpr:"ஜூதேயோ-பெர்ஷியன்",jrb:"ஜூதேயோ-அராபிக்",jv:"ஜாவனீஸ்",ka:"ஜார்ஜியன்",kaa:"காரா-கல்பாக்",kab:"கபாய்ல்",kac:"காசின்",kaj:"ஜ்ஜூ",kam:"கம்பா",kaw:"காவி",kbd:"கபார்டியன்",kcg:"தையாப்",kde:"மகொண்டே",kea:"கபுவெர்தியானு",kfo:"கோரோ",kg:"காங்கோ",kha:"காஸி",kho:"கோதானீஸ்",khq:"கொய்ரா சீனீ",ki:"கிகுயூ",kj:"குவான்யாமா",kk:"கசாக்",kkj:"ககோ",kl:"கலாலிசூட்",kln:"கலின்ஜின்",km:"கெமெர்",kmb:"கிம்புன்து",kn:"கன்னடம்",ko:"கொரியன்",koi:"கொமி-பெர்ம்யாக்",kok:"கொங்கணி",kos:"கோஸ்ரைன்",kpe:"க்பெல்லே",kr:"கனுரி",krc:"கராசே-பல்கார்",krl:"கரேலியன்",kru:"குருக்",ks:"காஷ்மிரி",ksb:"ஷம்பாலா",ksf:"பாஃபியா",ksh:"கொலோக்னியன்",ku:"குர்திஷ்",kum:"கும்இக்",kut:"குடேனை",kv:"கொமி",kw:"கார்னிஷ்",ky:"கிர்கிஸ்",la:"லத்தின்",lad:"லடினோ",lag:"லங்கி",lah:"லஹன்டா",lam:"லம்பா",lb:"லக்ஸம்போர்கிஷ்",lez:"லெஜ்ஜியன்",lg:"கான்டா",li:"லிம்பர்கிஷ்",lkt:"லகோடா",ln:"லிங்காலா",lo:"லாவோ",lol:"மோங்கோ",lou:"லூசியானா க்ரயோல்",loz:"லோசி",lrc:"வடக்கு லுரி",lt:"லிதுவேனியன்",lu:"லுபா-கடாங்கா",lua:"லுபா-லுலுலா",lui:"லுய்சேனோ",lun:"லூன்டா",luo:"லுயோ",lus:"மிஸோ",luy:"லுயியா",lv:"லாட்வியன்",mad:"மதுரீஸ்",mag:"மகாஹி",mai:"மைதிலி",mak:"மகாசார்",man:"மான்டிங்கோ",mas:"மாசாய்",mdf:"மோக்க்ஷா",mdr:"மான்டார்",men:"மென்டீ",mer:"மெரு",mfe:"மொரிசியன்",mg:"மலகாஸி",mga:"மிடில் ஐரிஷ்",mgh:"மகுவா-மீட்டோ",mgo:"மேடா",mh:"மார்ஷெலீஸ்",mi:"மௌரி",mic:"மிக்மாக்",min:"மின்னாங்கபௌ",mk:"மாஸிடோனியன்",ml:"மலையாளம்",mn:"மங்கோலியன்",mnc:"மன்சூ",mni:"மணிப்புரி",moh:"மொஹாக்",mos:"மோஸ்ஸி",mr:"மராத்தி",ms:"மலாய்",mt:"மால்டிஸ்",mua:"முன்டாங்",mus:"க்ரீக்",mwl:"மிரான்டீஸ்",mwr:"மார்வாரி",my:"பர்மீஸ்",myv:"ஏர்ஜியா",mzn:"மசந்தேரனி",na:"நவ்ரூ",nan:"மின் நான் சீனம்",nap:"நியோபோலிடன்",naq:"நாமா",nb:"நார்வேஜியன் பொக்மால்",nd:"வடக்கு தெபெலே",nds:"லோ ஜெர்மன்","nds-NL":"லோ சாக்ஸன்",ne:"நேபாளி","new":"நெவாரி",ng:"தோங்கா",nia:"நியாஸ்",niu:"நியூவான்",nl:"டச்சு","nl-BE":"ஃப்லெமிஷ்",nmg:"க்வாசியோ",nn:"நார்வேஜியன் நியூநார்ஸ்க்",nnh:"நெகெய்ம்பூன்",no:"நார்வேஜியன்",nog:"நோகை",non:"பழைய நோர்ஸ்",nqo:"என்‘கோ",nr:"தெற்கு தெபெலே",nso:"வடக்கு சோதோ",nus:"நியூர்",nv:"நவாஜோ",nwc:"பாரம்பரிய நேவாரி",ny:"நயன்ஜா",nym:"நியாம்வேஜி",nyn:"நியான்கோலே",nyo:"நியோரோ",nzi:"நிஜ்மா",oc:"ஒக்கிடன்",oj:"ஒஜிப்வா",om:"ஒரோமோ",or:"ஒடியா",os:"ஒசெட்டிக்",osa:"ஓசேஜ்",ota:"ஓட்டோமான் துருக்கிஷ்",pa:"பஞ்சாபி",pag:"பன்காசினன்",pal:"பாஹ்லவி",pam:"பம்பாங்கா",pap:"பபியாமென்டோ",pau:"பலௌவன்",pcm:"நைஜீரியன் பிட்கின்",pdc:"பென்சில்வேனிய ஜெர்மன்",peo:"பழைய பெர்ஷியன்",phn:"ஃபொனிஷியன்",pi:"பாலி",pl:"போலிஷ்",pon:"ஃபோன்பெயென்",prg:"பிரஷ்யன்",pro:"பழைய ப்ரோவென்சால்",ps:"பஷ்தோ",pt:"போர்ச்சுக்கீஸ்","pt-BR":"பிரேசிலிய போர்ச்சுகீஸ்","pt-PT":"ஐரோப்பிய போர்ச்சுகீஸ்",qu:"க்வெச்சுவா",quc:"கீசீ",raj:"ராஜஸ்தானி",rap:"ரபனுய்",rar:"ரரோடோங்கன்",rm:"ரோமான்ஷ்",rn:"ருண்டி",ro:"ரோமேனியன்","ro-MD":"மோல்டாவியன்",rof:"ரோம்போ",rom:"ரோமானி",root:"ரூட்",ru:"ரஷியன்",rup:"அரோமானியன்",rw:"கின்யாருவான்டா",rwk:"ருவா",sa:"சமஸ்கிருதம்",sad:"சான்டாவே",sah:"சக்கா",sam:"சமாரிடன் அராமைக்",saq:"சம்புரு",sas:"சாசாக்",sat:"சான்டாலி",saz:"சௌராஷ்டிரம்",sba:"நெகாம்பே",sbp:"சங்கு",sc:"சார்தீனியன்",scn:"சிசிலியன்",sco:"ஸ்காட்ஸ்",sd:"சிந்தி",sdh:"தெற்கு குர்திஷ்",se:"வடக்கு சமி",seh:"செனா",sel:"செல்குப்",ses:"கொய்ராபோரோ சென்னி",sg:"சாங்கோ",sga:"பழைய ஐரிஷ்",sh:"செர்போ-குரோஷியன்",shi:"தசேஹித்",shn:"ஷான்",si:"சிங்களம்",sid:"சிடாமோ",sk:"ஸ்லோவாக்",sl:"ஸ்லோவேனியன்",sm:"சமோவான்",sma:"தெற்கு சமி",smj:"லுலே சமி",smn:"இனாரி சமி",sms:"ஸ்கோல்ட் சமி",sn:"ஷோனா",snk:"சோனின்கே",so:"சோமாலி",sog:"சோக்தியன்",sq:"அல்பேனியன்",sr:"செர்பியன்",srn:"ஸ்ரானன் டோங்கோ",srr:"செரெர்",ss:"ஸ்வாடீ",ssy:"சஹோ",st:"தெற்கு ஸோதோ",su:"சுண்டானீஸ்",suk:"சுகுமா",sus:"சுசு",sux:"சுமேரியன்",sv:"ஸ்வீடிஷ்",sw:"ஸ்வாஹிலி","sw-CD":"காங்கோ ஸ்வாஹிலி",swb:"கொமோரியன்",syc:"பாரம்பரிய சிரியாக்",syr:"சிரியாக்",ta:"தமிழ்",te:"தெலுங்கு",tem:"டிம்னே",teo:"டெசோ",ter:"டெரெனோ",tet:"டெடும்",tg:"தஜிக்",th:"தாய்",ti:"டிக்ரின்யா",tig:"டைக்ரே",tiv:"டிவ்",tk:"துருக்மென்",tkl:"டோகேலௌ",tl:"டாகாலோக்",tlh:"க்ளிங்கோன்",tli:"லிங்கிட்",tmh:"தமஷேக்",tn:"ஸ்வானா",to:"டோங்கான்",tog:"நயாசா டோங்கா",tpi:"டோக் பிஸின்",tr:"துருக்கிஷ்",trv:"தரோகோ",ts:"ஸோங்கா",tsi:"ட்ஸிம்ஷியன்",tt:"டாடர்",tum:"தும்புகா",tvl:"டுவாலு",tw:"ட்வி",twq:"டசவாக்",ty:"தஹிதியன்",tyv:"டுவினியன்",tzm:"மத்திய அட்லஸ் டமசைட்",udm:"உட்முர்ட்",ug:"உய்குர்",uga:"உகாரிடிக்",uk:"உக்ரைனியன்",umb:"அம்பொண்டு",ur:"உருது",uz:"உஸ்பெக்",vai:"வை",ve:"வென்டா",vi:"வியட்நாமீஸ்",vo:"ஒலாபூக்",vot:"வோட்க்",vun:"வுன்ஜோ",wa:"ஒவாலூன்",wae:"வால்சேர்",wal:"வோலாய்ட்டா",war:"வாரே",was:"வாஷோ",wbp:"வல்பிரி",wo:"ஓலோஃப்",wuu:"வூ சீனம்",xal:"கல்மிக்",xh:"ஹோசா",xog:"சோகா",yao:"யாவ்",yap:"யாபேசே",yav:"யாங்பென்",ybb:"யெம்பா",yi:"யெட்டிஷ்",yo:"யோருபா",yue:"காண்டோனீஸ்",za:"ஜுவாங்",zap:"ஜாபோடெக்",zbl:"ப்லிஸ்ஸிம்பால்ஸ்",zen:"ஜெனகா",zgh:"ஸ்டாண்டர்ட் மொராக்கன் தமாசைட்",zh:"சீனம்","zh-Hans":"எளிதாக்கப்பட்ட சீன மாண்டரின்","zh-Hant":"பாரம்பரிய சீன மாண்டரின்",zu:"ஜுலு",zun:"ஜூனி",zza:"ஜாஜா"},scriptNames:{Cyrl:"சிரிலிக்",Latn:"லத்தின்",Arab:"அரபிக்",Guru:"குர்முகி",Tfng:"டிஃபினாக்",Vaii:"வை",Hans:"எளிதாக்கப்பட்டது",Hant:"பாரம்பரியம்"}},te:{rtl:false,languageNames:{aa:"అఫార్",ab:"అబ్ఖాజియన్",ace:"ఆఖినీస్",ach:"అకోలి",ada:"అడాంగ్మే",ady:"అడిగాబ్జే",ae:"అవేస్టాన్",aeb:"టునీషియా అరబిక్",af:"ఆఫ్రికాన్స్",afh:"అఫ్రిహిలి",agq:"అగేమ్",ain:"ఐను",ak:"అకాన్",akk:"అక్కాడియాన్",ale:"అలియుట్",alt:"దక్షిణ ఆల్టై",am:"అమ్హారిక్",an:"అరగోనిస్",ang:"ప్రాచీన ఆంగ్లం",anp:"ఆంగిక",ar:"అరబిక్","ar-001":"ఆధునిక ప్రామాణిక అరబిక్",arc:"అరామైక్",arn:"మపుచే",arp:"అరాపాహో",arw:"అరావాక్",arz:"ఈజిప్షియన్ అరబిక్",as:"అస్సామీస్",asa:"అసు",ast:"ఆస్టూరియన్",av:"అవారిక్",awa:"అవధి",ay:"ఐమారా",az:"అజర్బైజాని",ba:"బాష్కిర్",bal:"బాలుచి",ban:"బాలినీస్",bas:"బసా",be:"బెలారుషియన్",bej:"బేజా",bem:"బెంబా",bez:"బెనా",bg:"బల్గేరియన్",bgn:"పశ్చిమ బలూచీ",bho:"భోజ్‌పురి",bi:"బిస్లామా",bik:"బికోల్",bin:"బిని",bla:"సిక్సికా",bm:"బంబారా",bn:"బంగ్లా",bo:"టిబెటన్",bpy:"బిష్ణుప్రియ",br:"బ్రెటన్",bra:"బ్రాజ్",brx:"బోడో",bs:"బోస్నియన్",bua:"బురియట్",bug:"బుగినీస్",byn:"బ్లిన్",ca:"కాటలాన్",cad:"కేడ్డో",car:"కేరిబ్",cch:"అట్సామ్",ccp:"చక్మా",ce:"చెచెన్",ceb:"సెబువానో",cgg:"ఛిగా",ch:"చమర్రో",chb:"చిబ్చా",chg:"చాగటై",chk:"చూకీస్",chm:"మారి",chn:"చినూక్ జార్గన్",cho:"చక్టా",chp:"చిపెవ్యాన్",chr:"చెరోకీ",chy:"చేయేన్",ckb:"సెంట్రల్ కర్డిష్",co:"కోర్సికన్",cop:"కోప్టిక్",cr:"క్రి",crh:"క్రిమియన్ టర్కిష్",crs:"సెసేల్వా క్రియోల్ ఫ్రెంచ్",cs:"చెక్",csb:"కషుబియన్",cu:"చర్చ్ స్లావిక్",cv:"చువాష్",cy:"వెల్ష్",da:"డానిష్",dak:"డకోటా",dar:"డార్గ్వా",dav:"టైటా",de:"జర్మన్","de-AT":"ఆస్ట్రియన్ జర్మన్","de-CH":"స్విస్ హై జర్మన్",del:"డెలావేర్",den:"స్లేవ్",dgr:"డోగ్రిబ్",din:"డింకా",dje:"జార్మా",doi:"డోగ్రి",dsb:"లోయర్ సోర్బియన్",dua:"డ్యూలా",dum:"మధ్యమ డచ్",dv:"దివేహి",dyo:"జోలా-ఫోనయి",dyu:"డ్యులా",dz:"జోంఖా",dzg:"డాజాగా",ebu:"ఇంబు",ee:"యూ",efi:"ఎఫిక్",egy:"ప్రాచీన ఈజిప్షియన్",eka:"ఏకాజక్",el:"గ్రీక్",elx:"ఎలామైట్",en:"ఆంగ్లం","en-AU":"ఆస్ట్రేలియన్ ఇంగ్లీష్","en-CA":"కెనడియన్ ఇంగ్లీష్","en-GB":"బ్రిటిష్ ఇంగ్లీష్","en-US":"అమెరికన్ ఇంగ్లీష్",enm:"మధ్యమ ఆంగ్లం",eo:"ఎస్పెరాంటో",es:"స్పానిష్","es-419":"లాటిన్ అమెరికన్ స్పానిష్","es-ES":"యూరోపియన్ స్పానిష్","es-MX":"మెక్సికన్ స్పానిష్",et:"ఎస్టోనియన్",eu:"బాస్క్యూ",ewo:"ఎవోండొ",fa:"పర్షియన్",fan:"ఫాంగ్",fat:"ఫాంటి",ff:"ఫ్యుల",fi:"ఫిన్నిష్",fil:"ఫిలిపినో",fj:"ఫిజియన్",fo:"ఫారోస్",fon:"ఫాన్",fr:"ఫ్రెంచ్","fr-CA":"కెనడియెన్ ఫ్రెంచ్","fr-CH":"స్విస్ ఫ్రెంచ్",frc:"కాజున్ ఫ్రెంచ్",frm:"మధ్యమ ప్రెంచ్",fro:"ప్రాచీన ఫ్రెంచ్",frr:"ఉత్తర ఫ్రిసియన్",frs:"తూర్పు ఫ్రిసియన్",fur:"ఫ్రియులియన్",fy:"పశ్చిమ ఫ్రిసియన్",ga:"ఐరిష్",gaa:"గా",gag:"గాగౌజ్",gan:"గాన్ చైనీస్",gay:"గాయో",gba:"గ్బాయా",gd:"స్కాటిష్ గేలిక్",gez:"జీజ్",gil:"గిల్బర్టీస్",gl:"గాలిషియన్",gmh:"మధ్యమ హై జర్మన్",gn:"గ్వారనీ",goh:"ప్రాచీన హై జర్మన్",gon:"గోండి",gor:"గోరోంటలా",got:"గోథిక్",grb:"గ్రేబో",grc:"ప్రాచీన గ్రీక్",gsw:"స్విస్ జర్మన్",gu:"గుజరాతి",guz:"గుస్సీ",gv:"మాంక్స్",gwi:"గ్విచిన్",ha:"హౌసా",hai:"హైడా",hak:"హక్కా చైనీస్",haw:"హవాయియన్",he:"హిబ్రూ",hi:"హిందీ",hil:"హిలిగెనాన్",hit:"హిట్టిటే",hmn:"మోంగ్",ho:"హిరి మోటు",hr:"క్రొయేషియన్",hsb:"అప్పర్ సోర్బియన్",hsn:"జియాంగ్ చైనీస్",ht:"హైటియన్ క్రియోల్",hu:"హంగేరియన్",hup:"హుపా",hy:"ఆర్మేనియన్",hz:"హెరెరో",ia:"ఇంటర్లింగ్వా",iba:"ఐబాన్",ibb:"ఇబిబియో",id:"ఇండోనేషియన్",ie:"ఇంటర్లింగ్",ig:"ఇగ్బో",ii:"శిషువన్ ఈ",ik:"ఇనుపైయాక్",ilo:"ఐలోకో",inh:"ఇంగుష్",io:"ఈడో",is:"ఐస్లాండిక్",it:"ఇటాలియన్",iu:"ఇనుక్టిటుట్",ja:"జపనీస్",jbo:"లోజ్బాన్",jgo:"గోంబా",jmc:"మకొమ్",jpr:"జ్యుడియో-పర్షియన్",jrb:"జ్యుడియో-అరబిక్",jv:"జావనీస్",ka:"జార్జియన్",kaa:"కారా-కల్పాక్",kab:"కాబిల్",kac:"కాచిన్",kaj:"జ్యూ",kam:"కంబా",kaw:"కావి",kbd:"కబార్డియన్",kcg:"ట్యాప్",kde:"మకొండే",kea:"కాబువేర్దియను",kfo:"కోరో",kg:"కోంగో",kha:"ఖాసి",kho:"ఖోటనీస్",khq:"కొయరా చీన్నీ",ki:"కికుయు",kj:"క్వాన్యామ",kk:"కజఖ్",kkj:"కాకో",kl:"కలాల్లిసూట్",kln:"కలెంజిన్",km:"ఖ్మేర్",kmb:"కిమ్బుండు",kn:"కన్నడ",ko:"కొరియన్",koi:"కోమి-పర్మాక్",kok:"కొంకణి",kos:"కోస్రేయన్",kpe:"పెల్లే",kr:"కానురి",krc:"కరచే-బల్కార్",krl:"కరేలియన్",kru:"కూరుఖ్",ks:"కాశ్మీరి",ksb:"శంబాలా",ksf:"బాఫియ",ksh:"కొలోనియన్",ku:"కుర్దిష్",kum:"కుమ్యిక్",kut:"కుటేనై",kv:"కోమి",kw:"కోర్నిష్",ky:"కిర్గిజ్",la:"లాటిన్",lad:"లాడినో",lag:"లాంగీ",lah:"లాహండా",lam:"లాంబా",lb:"లక్సెంబర్గిష్",lez:"లేజ్ఘియన్",lg:"గాండా",li:"లిమ్బర్గిష్",lkt:"లకొటా",ln:"లింగాల",lo:"లావో",lol:"మొంగో",lou:"లూసియానా క్రియోల్",loz:"లోజి",lrc:"ఉత్తర లూరీ",lt:"లిథువేనియన్",lu:"లూబ-కటాంగ",lua:"లుబా-లులువ",lui:"లుయిసెనో",lun:"లుండా",luo:"లువో",lus:"మిజో",luy:"లుయియ",lv:"లాట్వియన్",mad:"మాదురీస్",mag:"మగాహి",mai:"మైథిలి",mak:"మకాసార్",man:"మండింగో",mas:"మాసై",mdf:"మోక్ష",mdr:"మండార్",men:"మెండే",mer:"మెరు",mfe:"మొరిస్యేన్",mg:"మలగాసి",mga:"మధ్యమ ఐరిష్",mgh:"మక్వా-మిట్టో",mgo:"మెటా",mh:"మార్షలీస్",mi:"మావొరీ",mic:"మికమాక్",min:"మినాంగ్‌కాబో",mk:"మాసిడోనియన్",ml:"మలయాళం",mn:"మంగోలియన్",mnc:"మంచు",mni:"మణిపురి",moh:"మోహాక్",mos:"మోస్సి",mr:"మరాఠీ",ms:"మలయ్",mt:"మాల్టీస్",mua:"మండాంగ్",mus:"క్రీక్",mwl:"మిరాండిస్",mwr:"మార్వాడి",my:"బర్మీస్",myv:"ఎర్జియా",mzn:"మాసన్‌దెరాని",na:"నౌరు",nan:"మిన్ నాన్ చైనీస్",nap:"నియాపోలిటన్",naq:"నమ",nb:"నార్వేజియన్ బొక్మాల్",nd:"ఉత్తర దెబెలె",nds:"లో జర్మన్","nds-NL":"లో సాక్సన్",ne:"నేపాలి","new":"నెవారి",ng:"డోంగా",nia:"నియాస్",niu:"నియాన్",nl:"డచ్","nl-BE":"ఫ్లెమిష్",nmg:"క్వాసియె",nn:"నార్వేజియాన్ న్యోర్స్క్",nnh:"గింబూన్",no:"నార్వేజియన్",nog:"నోగై",non:"ప్రాచిన నోర్స్",nqo:"న్కో",nr:"దక్షిణ దెబెలె",nso:"ఉత్తర సోతో",nus:"న్యుర్",nv:"నవాజొ",nwc:"సాంప్రదాయ న్యూయారీ",ny:"న్యాన్జా",nym:"న్యంవేజి",nyn:"న్యాన్కోలె",nyo:"నేయోరో",nzi:"జీమా",oc:"ఆక్సిటన్",oj:"చేవా",om:"ఒరోమో",or:"ఒడియా",os:"ఒసేటిక్",osa:"ఒసాజ్",ota:"ఒట్టోమన్ టర్కిష్",pa:"పంజాబీ",pag:"పంగాసినాన్",pal:"పహ్లావి",pam:"పంపన్గా",pap:"పపియమేంటో",pau:"పలావెన్",pcm:"నైజీరియా పిడ్గిన్",peo:"ప్రాచీన పర్షియన్",phn:"ఫోనికన్",pi:"పాలీ",pl:"పోలిష్",pon:"పోహ్న్పెయన్",prg:"ప్రష్యన్",pro:"ప్రాచీన ప్రోవెంసాల్",ps:"పాష్టో",pt:"పోర్చుగీస్","pt-BR":"బ్రెజీలియన్ పోర్చుగీస్","pt-PT":"యూరోపియన్ పోర్చుగీస్",qu:"కెచువా",quc:"కిచే",raj:"రాజస్తానీ",rap:"రాపన్యుయి",rar:"రారోటొంగాన్",rm:"రోమన్ష్",rn:"రుండి",ro:"రోమేనియన్","ro-MD":"మొల్డావియన్",rof:"రోంబో",rom:"రోమానీ",root:"రూట్",ru:"రష్యన్",rup:"ఆరోమేనియన్",rw:"కిన్యర్వాండా",rwk:"ర్వా",sa:"సంస్కృతం",sad:"సండావి",sah:"సాఖా",sam:"సమారిటన్ అరామైక్",saq:"సంబురు",sas:"ససక్",sat:"సంతాలి",sba:"గాంబే",sbp:"సాంగు",sc:"సార్డీనియన్",scn:"సిసిలియన్",sco:"స్కాట్స్",sd:"సింధీ",sdh:"దక్షిణ కుర్డిష్",se:"ఉత్తర సామి",seh:"సెనా",sel:"సేల్కప్",ses:"కోయోరాబోరో సెన్నీ",sg:"సాంగో",sga:"ప్రాచీన ఐరిష్",sh:"సేర్బో-క్రొయేషియన్",shi:"టాచెల్‌హిట్",shn:"షాన్",si:"సింహళం",sid:"సిడామో",sk:"స్లోవక్",sl:"స్లోవేనియన్",sm:"సమోవన్",sma:"దక్షిణ సామి",smj:"లులే సామి",smn:"ఇనారి సామి",sms:"స్కోల్ట్ సామి",sn:"షోన",snk:"సోనింకి",so:"సోమాలి",sog:"సోగ్డియన్",sq:"అల్బేనియన్",sr:"సెర్బియన్",srn:"స్రానన్ టోంగో",srr:"సెరేర్",ss:"స్వాతి",ssy:"సాహో",st:"దక్షిణ సోతో",su:"సండానీస్",suk:"సుకుమా",sus:"సుసు",sux:"సుమేరియాన్",sv:"స్వీడిష్",sw:"స్వాహిలి","sw-CD":"కాంగో స్వాహిలి",swb:"కొమొరియన్",syc:"సాంప్రదాయ సిరియాక్",syr:"సిరియాక్",ta:"తమిళము",tcy:"తుళు",te:"తెలుగు",tem:"టిమ్నే",teo:"టెసో",ter:"టెరెనో",tet:"టేటం",tg:"తజిక్",th:"థాయ్",ti:"టిగ్రిన్యా",tig:"టీగ్రె",tiv:"టివ్",tk:"తుర్క్‌మెన్",tkl:"టోకెలావ్",tl:"టగలాగ్",tlh:"క్లింగాన్",tli:"ట్లింగిట్",tmh:"టామషేక్",tn:"స్వానా",to:"టాంగాన్",tog:"న్యాసా టోన్గా",tpi:"టోక్ పిసిన్",tr:"టర్కిష్",trv:"తరోకో",ts:"సోంగా",tsi:"శింషీయన్",tt:"టాటర్",tum:"టుంబుకా",tvl:"టువాలు",tw:"ట్వి",twq:"టసావాఖ్",ty:"తహితియన్",tyv:"టువినియన్",tzm:"సెంట్రల్ అట్లాస్ టామాజైట్",udm:"ఉడ్ముర్ట్",ug:"ఉయ్‌ఘర్",uga:"ఉగారిటిక్",uk:"ఉక్రెయినియన్",umb:"ఉమ్బుండు",ur:"ఉర్దూ",uz:"ఉజ్బెక్",vai:"వాయి",ve:"వెండా",vi:"వియత్నామీస్",vo:"వోలాపుక్",vot:"వోటిక్",vun:"వుంజొ",wa:"వాలూన్",wae:"వాల్సర్",wal:"వాలేట్టా",war:"వారే",was:"వాషో",wbp:"వార్లపిరి",wo:"ఉలూఫ్",wuu:"వు చైనీస్",xal:"కల్మిక్",xh:"షోసా",xog:"సొగా",yao:"యాయే",yap:"యాపిస్",yav:"యాంగ్‌బెన్",ybb:"యెంబా",yi:"ఇడ్డిష్",yo:"యోరుబా",yue:"కాంటనీస్",za:"జువాన్",zap:"జపోటెక్",zbl:"బ్లిసింబల్స్",zen:"జెనాగా",zgh:"ప్రామాణిక మొరొకన్ టామజైట్",zh:"చైనీస్","zh-Hans":"సరళీకృత మాండరిన్ చైనీస్","zh-Hant":"సాంప్రదాయక మాండరిన్ చైనీస్",zu:"జూలూ",zun:"జుని",zza:"జాజా"},scriptNames:{Cyrl:"సిరిలిక్",Latn:"లాటిన్",Arab:"అరబిక్",Guru:"గుర్ముఖి",Tfng:"టిఫీనాఘ్",Vaii:"వాయి",Hans:"సరళీకృతం",Hant:"సాంప్రదాయక"}},th:{rtl:false,languageNames:{aa:"อะฟาร์",ab:"อับฮาเซีย",ace:"อาเจะห์",ach:"อาโคลิ",ada:"อาแดงมี",ady:"อะดืยเก",ae:"อเวสตะ",aeb:"อาหรับตูนิเซีย",af:"แอฟริกานส์",afh:"แอฟริฮีลี",agq:"อักเฮม",ain:"ไอนุ",ak:"อาคาน",akk:"อักกาด",akz:"แอละแบมา",ale:"อาลิวต์",aln:"เกกแอลเบเนีย",alt:"อัลไตใต้",am:"อัมฮารา",an:"อารากอน",ang:"อังกฤษโบราณ",anp:"อังคิกา",ar:"อาหรับ","ar-001":"อาหรับมาตรฐานสมัยใหม่",arc:"อราเมอิก",arn:"มาปูเช",aro:"อาเรานา",arp:"อาราปาโฮ",arq:"อาหรับแอลจีเรีย",ars:"อาหรับนัจญ์ดี",arw:"อาราวัก",ary:"อาหรับโมร็อกโก",arz:"อาหรับพื้นเมืองอียิปต์",as:"อัสสัม",asa:"อาซู",ase:"ภาษามืออเมริกัน",ast:"อัสตูเรียส",av:"อาวาร์",avk:"โคตาวา",awa:"อวธี",ay:"ไอย์มารา",az:"อาเซอร์ไบจาน",ba:"บัชคีร์",bal:"บาลูชิ",ban:"บาหลี",bar:"บาวาเรีย",bas:"บาสา",bax:"บามัน",bbc:"บาตักโทบา",bbj:"โคมาลา",be:"เบลารุส",bej:"เบจา",bem:"เบมบา",bew:"เบตาวี",bez:"เบนา",bfd:"บาฟัต",bfq:"พทคะ",bg:"บัลแกเรีย",bgn:"บาลูจิตะวันตก",bho:"โภชปุรี",bi:"บิสลามา",bik:"บิกอล",bin:"บินี",bjn:"บันจาร์",bkm:"กม",bla:"สิกสิกา",bm:"บัมบารา",bn:"บังกลา",bo:"ทิเบต",bpy:"พิศนุปริยะ",bqi:"บักติยารี",br:"เบรตัน",bra:"พัรช",brh:"บราฮุย",brx:"โพโฑ",bs:"บอสเนีย",bss:"อาโคซี",bua:"บูเรียต",bug:"บูกิส",bum:"บูลู",byn:"บลิน",byv:"เมดุมบา",ca:"คาตาลัน",cad:"คัดโด",car:"คาริบ",cay:"คายูกา",cch:"แอตแซม",ccp:"จักม่า",ce:"เชเชน",ceb:"เซบู",cgg:"คีกา",ch:"ชามอร์โร",chb:"ชิบชา",chg:"ชะกะไต",chk:"ชูก",chm:"มารี",chn:"ชินุกจาร์กอน",cho:"ช็อกทอว์",chp:"ชิพิวยัน",chr:"เชอโรกี",chy:"เชเยนเน",ckb:"เคิร์ดตอนกลาง",co:"คอร์ซิกา",cop:"คอปติก",cps:"กาปิซนอน",cr:"ครี",crh:"ตุรกีไครเมีย",crs:"ครีโอลเซเซลส์ฝรั่งเศส",cs:"เช็ก",csb:"คาซูเบียน",cu:"เชอร์ชสลาวิก",cv:"ชูวัช",cy:"เวลส์",da:"เดนมาร์ก",dak:"ดาโกทา",dar:"ดาร์กิน",dav:"ไททา",de:"เยอรมัน","de-AT":"เยอรมัน - ออสเตรีย","de-CH":"เยอรมันสูง (สวิส)",del:"เดลาแวร์",den:"สเลวี",dgr:"โดกริบ",din:"ดิงกา",dje:"ซาร์มา",doi:"โฑครี",dsb:"ซอร์เบียตอนล่าง",dtp:"ดูซุนกลาง",dua:"ดัวลา",dum:"ดัตช์กลาง",dv:"ธิเวหิ",dyo:"โจลา-ฟอนยี",dyu:"ดิวลา",dz:"ซองคา",dzg:"ดาซากา",ebu:"เอ็มบู",ee:"เอเว",efi:"อีฟิก",egl:"เอมีเลีย",egy:"อียิปต์โบราณ",eka:"อีกาจุก",el:"กรีก",elx:"อีลาไมต์",en:"อังกฤษ","en-AU":"อังกฤษ - ออสเตรเลีย","en-CA":"อังกฤษ - แคนาดา","en-GB":"อังกฤษ - สหราชอาณาจักร","en-US":"อังกฤษ - อเมริกัน",enm:"อังกฤษกลาง",eo:"เอสเปรันโต",es:"สเปน","es-419":"สเปน - ละตินอเมริกา","es-ES":"สเปน - ยุโรป","es-MX":"สเปน - เม็กซิโก",esu:"ยูพิกกลาง",et:"เอสโตเนีย",eu:"บาสก์",ewo:"อีวันโด",ext:"เอกซ์เตรมาดูรา",fa:"เปอร์เซีย",fan:"ฟอง",fat:"ฟันติ",ff:"ฟูลาห์",fi:"ฟินแลนด์",fil:"ฟิลิปปินส์",fit:"ฟินแลนด์ทอร์เนดาเล็น",fj:"ฟิจิ",fo:"แฟโร",fon:"ฟอน",fr:"ฝรั่งเศส","fr-CA":"ฝรั่งเศส - แคนาดา","fr-CH":"ฝรั่งเศส (สวิส)",frc:"ฝรั่งเศสกาฌ็อง",frm:"ฝรั่งเศสกลาง",fro:"ฝรั่งเศสโบราณ",frp:"อาร์พิตา",frr:"ฟริเซียนเหนือ",frs:"ฟริเซียนตะวันออก",fur:"ฟรูลี",fy:"ฟริเซียนตะวันตก",ga:"ไอริช",gaa:"กา",gag:"กากาอุซ",gan:"จีนกั้น",gay:"กาโย",gba:"กบายา",gbz:"ดารีโซโรอัสเตอร์",gd:"เกลิกสกอต",gez:"กีซ",gil:"กิลเบอร์ต",gl:"กาลิเซีย",glk:"กิลากี",gmh:"เยอรมันสูงกลาง",gn:"กัวรานี",goh:"เยอรมันสูงโบราณ",gom:"กอนกานีของกัว",gon:"กอนดิ",gor:"กอรอนทาโล",got:"โกธิก",grb:"เกรโบ",grc:"กรีกโบราณ",gsw:"เยอรมันสวิส",gu:"คุชราต",guc:"วายู",gur:"ฟราฟรา",guz:"กุซซี",gv:"มานซ์",gwi:"กวิชอิน",ha:"เฮาซา",hai:"ไฮดา",hak:"จีนแคะ",haw:"ฮาวาย",he:"ฮิบรู",hi:"ฮินดี",hif:"ฮินดีฟิจิ",hil:"ฮีลีกัยนน",hit:"ฮิตไตต์",hmn:"ม้ง",ho:"ฮีรีโมตู",hr:"โครเอเชีย",hsb:"ซอร์เบียตอนบน",hsn:"จีนเซียง",ht:"เฮติครีโอล",hu:"ฮังการี",hup:"ฮูปา",hy:"อาร์เมเนีย",hz:"เฮเรโร",ia:"อินเตอร์ลิงกัว",iba:"อิบาน",ibb:"อิบิบิโอ",id:"อินโดนีเซีย",ie:"อินเตอร์ลิงกิว",ig:"อิกโบ",ii:"เสฉวนยี่",ik:"อีนูเปียก",ilo:"อีโลโก",inh:"อินกุช",io:"อีโด",is:"ไอซ์แลนด์",it:"อิตาลี",iu:"อินุกติตุต",izh:"อินเกรียน",ja:"ญี่ปุ่น",jam:"อังกฤษคลีโอลจาเมกา",jbo:"โลชบัน",jgo:"อึนกอมบา",jmc:"มาชาเม",jpr:"ยิว-เปอร์เซีย",jrb:"ยิว-อาหรับ",jut:"จัท",jv:"ชวา",ka:"จอร์เจีย",kaa:"การา-กาลพาก",kab:"กาไบล",kac:"กะฉิ่น",kaj:"คจู",kam:"คัมบา",kaw:"กวี",kbd:"คาร์บาเดีย",kbl:"คาเนมบู",kcg:"ทีแยป",kde:"มาคอนเด",kea:"คาบูเวอร์เดียนู",ken:"เกินยาง",kfo:"โคโร",kg:"คองโก",kgp:"เคนก่าง",kha:"กาสี",kho:"โคตัน",khq:"โคย์ราชีนี",khw:"โควาร์",ki:"กีกูยู",kiu:"เคอร์มานิกิ",kj:"กวนยามา",kk:"คาซัค",kkj:"คาโก",kl:"กรีนแลนด์",kln:"คาเลนจิน",km:"เขมร",kmb:"คิมบุนดู",kn:"กันนาดา",ko:"เกาหลี",koi:"โคมิ-เปียร์เมียค",kok:"กอนกานี",kos:"คูสไร",kpe:"กาแปล",kr:"คานูรี",krc:"คาราไช-บัลคาร์",kri:"คริโอ",krj:"กินารายอา",krl:"แกรเลียน",kru:"กุรุข",ks:"แคชเมียร์",ksb:"ชัมบาลา",ksf:"บาเฟีย",ksh:"โคโลญ",ku:"เคิร์ด",kum:"คูมืยค์",kut:"คูเทไน",kv:"โกมิ",kw:"คอร์นิช",ky:"คีร์กีซ",la:"ละติน",lad:"ลาดิโน",lag:"แลนจี",lah:"ลาฮ์นดา",lam:"แลมบา",lb:"ลักเซมเบิร์ก",lez:"เลซเกียน",lfn:"ลิงกัวฟรังกาโนวา",lg:"ยูกันดา",li:"ลิมเบิร์ก",lij:"ลิกูเรีย",liv:"ลิโวเนีย",lkt:"ลาโกตา",lmo:"ลอมบาร์ด",ln:"ลิงกาลา",lo:"ลาว",lol:"มองโก",lou:"ภาษาครีโอลุยเซียนา",loz:"โลซิ",lrc:"ลูรีเหนือ",lt:"ลิทัวเนีย",ltg:"ลัตเกล",lu:"ลูบา-กาตองกา",lua:"ลูบา-ลูลัว",lui:"ลุยเซโน",lun:"ลันดา",luo:"ลัว",lus:"มิโซ",luy:"ลูเยีย",lv:"ลัตเวีย",lzh:"จีนคลาสสิก",lzz:"แลซ",mad:"มาดูรา",maf:"มาฟา",mag:"มคหี",mai:"ไมถิลี",mak:"มากาซาร์",man:"มันดิงกา",mas:"มาไซ",mde:"มาบา",mdf:"มอคชา",mdr:"มานดาร์",men:"เมนเด",mer:"เมรู",mfe:"มอริสเยน",mg:"มาลากาซี",mga:"ไอริชกลาง",mgh:"มากัววา-มีทโท",mgo:"เมตา",mh:"มาร์แชลลิส",mi:"เมารี",mic:"มิกแมก",min:"มีนังกาเบา",mk:"มาซิโดเนีย",ml:"มาลายาลัม",mn:"มองโกเลีย",mnc:"แมนจู",mni:"มณีปุระ",moh:"โมฮอว์ก",mos:"โมซี",mr:"มราฐี",mrj:"มารีตะวันตก",ms:"มาเลย์",mt:"มอลตา",mua:"มันดัง",mus:"ครีก",mwl:"มีรันดา",mwr:"มารวาฑี",mwv:"เม็นตาไว",my:"พม่า",mye:"มยีน",myv:"เอียร์ซยา",mzn:"มาซันดารานี",na:"นาอูรู",nan:"จีนมินหนาน",nap:"นาโปลี",naq:"นามา",nb:"นอร์เวย์บุคมอล",nd:"เอ็นเดเบเลเหนือ",nds:"เยอรมันต่ำ","nds-NL":"แซกซอนใต้",ne:"เนปาล","new":"เนวาร์",ng:"ดองกา",nia:"นีอัส",niu:"นีวเว",njo:"อ๋าวนากา",nl:"ดัตช์","nl-BE":"เฟลมิช",nmg:"กวาซิโอ",nn:"นอร์เวย์นีนอสก์",nnh:"จีมบูน",no:"นอร์เวย์",nog:"โนไก",non:"นอร์สโบราณ",nov:"โนเวียล",nqo:"เอ็นโก",nr:"เอ็นเดเบเลใต้",nso:"โซโทเหนือ",nus:"เนือร์",nv:"นาวาโฮ",nwc:"เนวาร์ดั้งเดิม",ny:"เนียนจา",nym:"เนียมเวซี",nyn:"เนียนโกเล",nyo:"นิโอโร",nzi:"นซิมา",oc:"อ็อกซิตัน",oj:"โอจิบวา",om:"โอโรโม",or:"โอดิยา",os:"ออสเซเตีย",osa:"โอซากี",ota:"ตุรกีออตโตมัน",pa:"ปัญจาบ",pag:"ปางาซีนัน",pal:"ปะห์ลาวี",pam:"ปัมปางา",pap:"ปาเปียเมนโต",pau:"ปาเลา",pcd:"ปิการ์",pcm:"พิดจิน",pdc:"เยอรมันเพนซิลเวเนีย",pdt:"เพลาท์ดิช",peo:"เปอร์เซียโบราณ",pfl:"เยอรมันพาลาทิเนต",phn:"ฟินิเชีย",pi:"บาลี",pl:"โปแลนด์",pms:"พีดมอนต์",pnt:"พอนติก",pon:"พอห์นเพ",prg:"ปรัสเซีย",pro:"โปรวองซาลโบราณ",ps:"พัชโต",pt:"โปรตุเกส","pt-BR":"โปรตุเกส - บราซิล","pt-PT":"โปรตุเกส - ยุโรป",qu:"เคชวา",quc:"กีเช",qug:"ควิชัวไฮแลนด์ชิมโบราโซ",raj:"ราชสถาน",rap:"ราปานู",rar:"ราโรทองกา",rgn:"โรมัณโญ",rif:"ริฟฟิอัน",rm:"โรแมนซ์",rn:"บุรุนดี",ro:"โรมาเนีย","ro-MD":"มอลโดวา",rof:"รอมโบ",rom:"โรมานี",root:"รูท",rtm:"โรทูมัน",ru:"รัสเซีย",rue:"รูซิน",rug:"โรเวียนา",rup:"อาโรมาเนียน",rw:"รวันดา",rwk:"รวา",sa:"สันสกฤต",sad:"ซันดาเว",sah:"ซาคา",sam:"อราเมอิกซามาเรีย",saq:"แซมบูรู",sas:"ซาซัก",sat:"สันตาลี",saz:"เสาราษฏร์",sba:"กัมเบ",sbp:"แซงกู",sc:"ซาร์เดญา",scn:"ซิซิลี",sco:"สกอตส์",sd:"สินธิ",sdc:"ซาร์ดิเนียซาสซารี",sdh:"เคอร์ดิชใต้",se:"ซามิเหนือ",see:"เซนิกา",seh:"เซนา",sei:"เซรี",sel:"เซลคุป",ses:"โคย์ราโบโรเซนนี",sg:"ซันโก",sga:"ไอริชโบราณ",sgs:"ซาโมจิเตียน",sh:"เซอร์โบ-โครเอเชีย",shi:"ทาเชลีห์ท",shn:"ไทใหญ่",shu:"อาหรับ-ชาด",si:"สิงหล",sid:"ซิดาโม",sk:"สโลวัก",sl:"สโลวีเนีย",sli:"ไซลีเซียตอนล่าง",sly:"เซลายาร์",sm:"ซามัว",sma:"ซามิใต้",smj:"ซามิลูเล",smn:"ซามิอีนารี",sms:"ซามิสคอลต์",sn:"โชนา",snk:"โซนีนเก",so:"โซมาลี",sog:"ซอกดีน",sq:"แอลเบเนีย",sr:"เซอร์เบีย",srn:"ซูรินาเม",srr:"เซแรร์",ss:"สวาติ",ssy:"ซาโฮ",st:"โซโทใต้",stq:"ฟรีเซียนซัทเธอร์แลนด์",su:"ซุนดา",suk:"ซูคูมา",sus:"ซูซู",sux:"ซูเมอ",sv:"สวีเดน",sw:"สวาฮีลี","sw-CD":"สวาฮีลี - คองโก",swb:"โคเมอเรียน",syc:"ซีเรียแบบดั้งเดิม",syr:"ซีเรีย",szl:"ไซลีเซีย",ta:"ทมิฬ",tcy:"ตูลู",te:"เตลูกู",tem:"ทิมเน",teo:"เตโซ",ter:"เทเรโน",tet:"เตตุม",tg:"ทาจิก",th:"ไทย",ti:"ติกริญญา",tig:"ตีเกร",tiv:"ทิฟ",tk:"เติร์กเมน",tkl:"โตเกเลา",tkr:"แซคเซอร์",tl:"ตากาล็อก",tlh:"คลิงงอน",tli:"ทลิงกิต",tly:"ทาลิช",tmh:"ทามาเชก",tn:"บอตสวานา",to:"ตองกา",tog:"ไนอะซาตองกา",tpi:"ท็อกพิซิน",tr:"ตุรกี",tru:"ตูโรโย",trv:"ทาโรโก",ts:"ซิตซองกา",tsd:"ซาโคเนีย",tsi:"ซิมชีแอน",tt:"ตาตาร์",ttt:"ตัตมุสลิม",tum:"ทุมบูกา",tvl:"ตูวาลู",tw:"ทวิ",twq:"ตัสซาวัค",ty:"ตาฮิตี",tyv:"ตูวา",tzm:"ทามาไซต์แอตลาสกลาง",udm:"อุดมูร์ต",ug:"อุยกูร์",uga:"ยูการิต",uk:"ยูเครน",umb:"อุมบุนดู",ur:"อูรดู",uz:"อุซเบก",vai:"ไว",ve:"เวนดา",vec:"เวเนโต้",vep:"เวปส์",vi:"เวียดนาม",vls:"เฟลมิชตะวันตก",vmf:"เมน-ฟรานโกเนีย",vo:"โวลาพึค",vot:"โวทิก",vro:"โวโร",vun:"วุนจู",wa:"วาโลนี",wae:"วัลเซอร์",wal:"วาลาโม",war:"วาเรย์",was:"วาโช",wbp:"วอล์เพอร์รี",wo:"โวลอฟ",wuu:"จีนอู๋",xal:"คัลมืยค์",xh:"คะห์โอซา",xmf:"เมเกรเลีย",xog:"โซกา",yao:"เย้า",yap:"ยัป",yav:"แยงเบน",ybb:"เยมบา",yi:"ยิดดิช",yo:"โยรูบา",yrl:"เหงงกาตุ",yue:"กวางตุ้ง",za:"จ้วง",zap:"ซาโปเตก",zbl:"บลิสซิมโบลส์",zea:"เซแลนด์",zen:"เซนากา",zgh:"ทามาไซต์โมร็อกโกมาตรฐาน",zh:"จีน","zh-Hans":"จีน (ตัวย่อ)","zh-Hant":"จีน (ตัวเต็ม)",zu:"ซูลู",zun:"ซูนิ",zza:"ซาซา"},scriptNames:{Cyrl:"ซีริลลิก",Latn:"ละติน",Arab:"อาหรับ",Guru:"กูร์มูคี",Tfng:"ทิฟินาก",Vaii:"ไว",Hans:"ตัวย่อ",Hant:"ตัวเต็ม"}},tl:{rtl:false,languageNames:{},scriptNames:{}},tr:{rtl:false,languageNames:{aa:"Afar",ab:"Abhazca",ace:"Açece",ach:"Acoli",ada:"Adangme",ady:"Adigece",ae:"Avestçe",aeb:"Tunus Arapçası",af:"Afrikaanca",afh:"Afrihili",agq:"Aghem",ain:"Ayni Dili",ak:"Akan",akk:"Akad Dili",akz:"Alabamaca",ale:"Aleut dili",aln:"Gheg Arnavutçası",alt:"Güney Altayca",am:"Amharca",an:"Aragonca",ang:"Eski İngilizce",anp:"Angika",ar:"Arapça","ar-001":"Modern Standart Arapça",arc:"Aramice",arn:"Mapuçe dili",aro:"Araona",arp:"Arapaho Dili",arq:"Cezayir Arapçası",ars:"Necd Arapçası",arw:"Arawak Dili",ary:"Fas Arapçası",arz:"Mısır Arapçası",as:"Assamca",asa:"Asu",ase:"Amerikan İşaret Dili",ast:"Asturyasça",av:"Avar Dili",avk:"Kotava",awa:"Awadhi",ay:"Aymara",az:"Azerbaycan dili","az-Arab":"Güney Azerice",ba:"Başkırtça",bal:"Beluçça",ban:"Bali dili",bar:"Bavyera dili",bas:"Basa Dili",bax:"Bamun",bbc:"Batak Toba",bbj:"Ghomala",be:"Belarusça",bej:"Beja dili",bem:"Bemba",bew:"Betawi",bez:"Bena",bfd:"Bafut",bfq:"Badaga",bg:"Bulgarca",bgn:"Batı Balochi",bho:"Arayanice",bi:"Bislama",bik:"Bikol",bin:"Bini",bjn:"Banjar Dili",bkm:"Kom",bla:"Karaayak dili",bm:"Bambara",bn:"Bengalce",bo:"Tibetçe",bpy:"Bishnupriya",bqi:"Bahtiyari",br:"Bretonca",bra:"Braj",brh:"Brohice",brx:"Bodo",bs:"Boşnakça",bss:"Akoose",bua:"Buryatça",bug:"Bugis",bum:"Bulu",byn:"Blin",byv:"Medumba",ca:"Katalanca",cad:"Kado dili",car:"Carib",cay:"Kayuga dili",cch:"Atsam",ccp:"Chakma",ce:"Çeçence",ceb:"Sebuano dili",cgg:"Kiga",ch:"Çamorro dili",chb:"Çibça dili",chg:"Çağatayca",chk:"Chuukese",chm:"Mari dili",chn:"Çinuk dili",cho:"Çoktav dili",chp:"Çipevya dili",chr:"Çerokice",chy:"Şayence",ckb:"Orta Kürtçe",co:"Korsikaca",cop:"Kıptice",cps:"Capiznon",cr:"Krice",crh:"Kırım Türkçesi",crs:"Seselwa Kreole Fransızcası",cs:"Çekçe",csb:"Kashubian",cu:"Kilise Slavcası",cv:"Çuvaşça",cy:"Galce",da:"Danca",dak:"Dakotaca",dar:"Dargince",dav:"Taita",de:"Almanca","de-AT":"Avusturya Almancası","de-CH":"İsviçre Yüksek Almancası",del:"Delaware",den:"Slavey dili",dgr:"Dogrib",din:"Dinka dili",dje:"Zarma",doi:"Dogri",dsb:"Aşağı Sorbça",dtp:"Orta Kadazan",dua:"Duala",dum:"Ortaçağ Felemenkçesi",dv:"Divehi dili",dyo:"Jola-Fonyi",dyu:"Dyula",dz:"Dzongkha",dzg:"Dazaga",ebu:"Embu",ee:"Ewe",efi:"Efik",egl:"Emilia Dili",egy:"Eski Mısır Dili",eka:"Ekajuk",el:"Yunanca",elx:"Elam",en:"İngilizce","en-AU":"Avustralya İngilizcesi","en-CA":"Kanada İngilizcesi","en-GB":"İngiliz İngilizcesi","en-US":"Amerikan İngilizcesi",enm:"Ortaçağ İngilizcesi",eo:"Esperanto",es:"İspanyolca","es-419":"Latin Amerika İspanyolcası","es-ES":"Avrupa İspanyolcası","es-MX":"Meksika İspanyolcası",esu:"Merkezi Yupikçe",et:"Estonca",eu:"Baskça",ewo:"Ewondo",ext:"Ekstremadura Dili",fa:"Farsça",fan:"Fang",fat:"Fanti",ff:"Fula dili",fi:"Fince",fil:"Filipince",fit:"Tornedalin Fincesi",fj:"Fiji dili",fo:"Faroe dili",fon:"Fon",fr:"Fransızca","fr-CA":"Kanada Fransızcası","fr-CH":"İsviçre Fransızcası",frc:"Cajun Fransızcası",frm:"Ortaçağ Fransızcası",fro:"Eski Fransızca",frp:"Arpitanca",frr:"Kuzey Frizce",frs:"Doğu Frizcesi",fur:"Friuli dili",fy:"Batı Frizcesi",ga:"İrlandaca",gaa:"Ga dili",gag:"Gagavuzca",gan:"Gan Çincesi",gay:"Gayo dili",gba:"Gbaya",gbz:"Zerdüşt Daricesi",gd:"İskoç Gaelcesi",gez:"Geez",gil:"Kiribatice",gl:"Galiçyaca",glk:"Gilanice",gmh:"Ortaçağ Yüksek Almancası",gn:"Guarani dili",goh:"Eski Yüksek Almanca",gom:"Goa Konkanicesi",gon:"Gondi dili",gor:"Gorontalo dili",got:"Gotça",grb:"Grebo dili",grc:"Antik Yunanca",gsw:"İsviçre Almancası",gu:"Güceratça",guc:"Wayuu dili",gur:"Frafra",guz:"Gusii",gv:"Man dili",gwi:"Guçince",ha:"Hausa dili",hai:"Haydaca",hak:"Hakka Çincesi",haw:"Hawaii dili",he:"İbranice",hi:"Hintçe",hif:"Fiji Hintçesi",hil:"Hiligaynon dili",hit:"Hititçe",hmn:"Hmong",ho:"Hiri Motu",hr:"Hırvatça",hsb:"Yukarı Sorbça",hsn:"Xiang Çincesi",ht:"Haiti Kreyolu",hu:"Macarca",hup:"Hupaca",hy:"Ermenice",hz:"Herero dili",ia:"İnterlingua",iba:"Iban",ibb:"İbibio dili",id:"Endonezce",ie:"Interlingue",ig:"İbo dili",ii:"Sichuan Yi",ik:"İnyupikçe",ilo:"Iloko",inh:"İnguşça",io:"Ido",is:"İzlandaca",it:"İtalyanca",iu:"İnuktitut dili",izh:"İngriya Dili",ja:"Japonca",jam:"Jamaika Patois Dili",jbo:"Lojban",jgo:"Ngomba",jmc:"Machame",jpr:"Yahudi Farsçası",jrb:"Yahudi Arapçası",jut:"Yutland Dili",jv:"Cava dili",ka:"Gürcüce",kaa:"Karakalpakça",kab:"Kabiliyece",kac:"Kaçin dili",kaj:"Jju",kam:"Kamba",kaw:"Kawi",kbd:"Kabardeyce",kbl:"Kanembu",kcg:"Tyap",kde:"Makonde",kea:"Kabuverdianu",ken:"Kenyang",kfo:"Koro",kg:"Kongo dili",kgp:"Kaingang",kha:"Khasi dili",kho:"Hotanca",khq:"Koyra Chiini",khw:"Çitral Dili",ki:"Kikuyu",kiu:"Kırmançça",kj:"Kuanyama",kk:"Kazakça",kkj:"Kako",kl:"Grönland dili",kln:"Kalenjin",km:"Khmer dili",kmb:"Kimbundu",kn:"Kannada dili",ko:"Korece",koi:"Komi-Permyak",kok:"Konkani dili",kos:"Kosraean",kpe:"Kpelle dili",kr:"Kanuri dili",krc:"Karaçay-Balkarca",kri:"Krio",krj:"Kinaray-a",krl:"Karelyaca",kru:"Kurukh dili",ks:"Keşmir dili",ksb:"Şambala",ksf:"Bafia",ksh:"Köln lehçesi",ku:"Kürtçe",kum:"Kumukça",kut:"Kutenai dili",kv:"Komi",kw:"Kernevekçe",ky:"Kırgızca",la:"Latince",lad:"Ladino",lag:"Langi",lah:"Lahnda",lam:"Lamba dili",lb:"Lüksemburgca",lez:"Lezgice",lfn:"Lingua Franca Nova",lg:"Ganda",li:"Limburgca",lij:"Ligurca",liv:"Livonca",lkt:"Lakotaca",lmo:"Lombardça",ln:"Lingala",lo:"Lao dili",lol:"Mongo",lou:"Louisiana Kreolcesi",loz:"Lozi",lrc:"Kuzey Luri",lt:"Litvanca",ltg:"Latgalian",lu:"Luba-Katanga",lua:"Luba-Lulua",lui:"Luiseno",lun:"Lunda",luo:"Luo",lus:"Lushai",luy:"Luyia",lv:"Letonca",lzh:"Edebi Çince",lzz:"Lazca",mad:"Madura Dili",maf:"Mafa",mag:"Magahi",mai:"Maithili",mak:"Makasar",man:"Mandingo",mas:"Masai",mde:"Maba",mdf:"Mokşa dili",mdr:"Mandar",men:"Mende dili",mer:"Meru",mfe:"Morisyen",mg:"Malgaşça",mga:"Ortaçağ İrlandacası",mgh:"Makhuwa-Meetto",mgo:"Meta’",mh:"Marshall Adaları dili",mi:"Maori dili",mic:"Micmac",min:"Minangkabau",mk:"Makedonca",ml:"Malayalam dili",mn:"Moğolca",mnc:"Mançurya dili",mni:"Manipuri dili",moh:"Mohavk dili",mos:"Mossi",mr:"Marathi dili",mrj:"Ova Çirmişçesi",ms:"Malayca",mt:"Maltaca",mua:"Mundang",mus:"Krikçe",mwl:"Miranda dili",mwr:"Marvari",mwv:"Mentawai",my:"Birman dili",mye:"Myene",myv:"Erzya",mzn:"Mazenderanca",na:"Nauru dili",nan:"Min Nan Çincesi",nap:"Napolice",naq:"Nama",nb:"Norveççe Bokmål",nd:"Kuzey Ndebele",nds:"Aşağı Almanca","nds-NL":"Aşağı Saksonca",ne:"Nepalce","new":"Nevari",ng:"Ndonga",nia:"Nias",niu:"Niue dili",njo:"Ao Naga",nl:"Felemenkçe","nl-BE":"Flamanca",nmg:"Kwasio",nn:"Norveççe Nynorsk",nnh:"Ngiemboon",no:"Norveççe",nog:"Nogayca",non:"Eski Nors dili",nov:"Novial",nqo:"N’Ko",nr:"Güney Ndebele",nso:"Kuzey Sotho dili",nus:"Nuer",nv:"Navaho dili",nwc:"Klasik Nevari",ny:"Nyanja",nym:"Nyamvezi",nyn:"Nyankole",nyo:"Nyoro",nzi:"Nzima dili",oc:"Oksitan dili",oj:"Ojibva dili",om:"Oromo dili",or:"Oriya Dili",os:"Osetçe",osa:"Osage",ota:"Osmanlı Türkçesi",pa:"Pencapça",pag:"Pangasinan dili",pal:"Pehlevi Dili",pam:"Pampanga",pap:"Papiamento",pau:"Palau dili",pcd:"Picard Dili",pcm:"Nijerya Pidgin dili",pdc:"Pensilvanya Almancası",pdt:"Plautdietsch",peo:"Eski Farsça",pfl:"Palatin Almancası",phn:"Fenike dili",pi:"Pali",pl:"Lehçe",pms:"Piyemontece",pnt:"Kuzeybatı Kafkasya",pon:"Pohnpeian",prg:"Prusyaca",pro:"Eski Provensal",ps:"Peştuca",pt:"Portekizce","pt-BR":"Brezilya Portekizcesi","pt-PT":"Avrupa Portekizcesi",qu:"Keçuva dili",quc:"Kiçece",qug:"Chimborazo Highland Quichua",raj:"Rajasthani",rap:"Rapanui dili",rar:"Rarotongan",rgn:"Romanyolca",rif:"Rif Berbericesi",rm:"Romanşça",rn:"Kirundi",ro:"Rumence","ro-MD":"Moldovaca",rof:"Rombo",rom:"Romanca",root:"Köken",rtm:"Rotuman",ru:"Rusça",rue:"Rusince",rug:"Roviana",rup:"Ulahça",rw:"Kinyarwanda",rwk:"Rwa",sa:"Sanskrit",sad:"Sandave",sah:"Yakutça",sam:"Samarit Aramcası",saq:"Samburu",sas:"Sasak",sat:"Santali",saz:"Saurashtra",sba:"Ngambay",sbp:"Sangu",sc:"Sardunya dili",scn:"Sicilyaca",sco:"İskoçça",sd:"Sindhi dili",sdc:"Sassari Sarduca",sdh:"Güney Kürtçesi",se:"Kuzey Laponcası",see:"Seneca dili",seh:"Sena",sei:"Seri",sel:"Selkup dili",ses:"Koyraboro Senni",sg:"Sango",sga:"Eski İrlandaca",sgs:"Samogitçe",sh:"Sırp-Hırvat Dili",shi:"Taşelit",shn:"Shan dili",shu:"Çad Arapçası",si:"Sinhali dili",sid:"Sidamo dili",sk:"Slovakça",sl:"Slovence",sli:"Aşağı Silezyaca",sly:"Selayar",sm:"Samoa dili",sma:"Güney Laponcası",smj:"Lule Laponcası",smn:"İnari Laponcası",sms:"Skolt Laponcası",sn:"Şona dili",snk:"Soninke",so:"Somalice",sog:"Sogdiana Dili",sq:"Arnavutça",sr:"Sırpça",srn:"Sranan Tongo",srr:"Serer dili",ss:"Sisvati",ssy:"Saho",st:"Güney Sotho dili",stq:"Saterland Frizcesi",su:"Sunda dili",suk:"Sukuma dili",sus:"Susu",sux:"Sümerce",sv:"İsveççe",sw:"Svahili dili","sw-CD":"Kongo Svahili",swb:"Komorca",syc:"Klasik Süryanice",syr:"Süryanice",szl:"Silezyaca",ta:"Tamilce",tcy:"Tuluca",te:"Telugu dili",tem:"Timne",teo:"Teso",ter:"Tereno",tet:"Tetum",tg:"Tacikçe",th:"Tayca",ti:"Tigrinya dili",tig:"Tigre",tiv:"Tiv",tk:"Türkmence",tkl:"Tokelau dili",tkr:"Sahurca",tl:"Tagalogca",tlh:"Klingonca",tli:"Tlingit",tly:"Talışça",tmh:"Tamaşek",tn:"Setsvana",to:"Tonga dili",tog:"Nyasa Tonga",tpi:"Tok Pisin",tr:"Türkçe",tru:"Turoyo",trv:"Taroko",ts:"Tsonga",tsd:"Tsakonca",tsi:"Tsimshian",tt:"Tatarca",ttt:"Tatça",tum:"Tumbuka",tvl:"Tuvalyanca",tw:"Tvi",twq:"Tasawaq",ty:"Tahiti dili",tyv:"Tuvaca",tzm:"Orta Atlas Tamazigti",udm:"Udmurtça",ug:"Uygurca",uga:"Ugarit dili",uk:"Ukraynaca",umb:"Umbundu",ur:"Urduca",uz:"Özbekçe",vai:"Vai",ve:"Venda dili",vec:"Venedikçe",vep:"Veps dili",vi:"Vietnamca",vls:"Batı Flamanca",vmf:"Main Frankonya Dili",vo:"Volapük",vot:"Votça",vro:"Võro",vun:"Vunjo",wa:"Valonca",wae:"Walser",wal:"Valamo",war:"Varay",was:"Vaşo",wbp:"Warlpiri",wo:"Volofça",wuu:"Wu Çincesi",xal:"Kalmıkça",xh:"Zosa dili",xmf:"Megrelce",xog:"Soga",yao:"Yao",yap:"Yapça",yav:"Yangben",ybb:"Yemba",yi:"Yidiş",yo:"Yorubaca",yrl:"Nheengatu",yue:"Kantonca",za:"Zhuangca",zap:"Zapotek dili",zbl:"Blis Sembolleri",zea:"Zelandaca",zen:"Zenaga dili",zgh:"Standart Fas Tamazigti",zh:"Çince","zh-Hans":"Basitleştirilmiş Çince (Mandarin)","zh-Hant":"Geleneksel Çince (Mandarin)",zu:"Zuluca",zun:"Zunice",zza:"Zazaca"},scriptNames:{Cyrl:"Kiril",Latn:"Latin",Arab:"Arap",Guru:"Gurmukhi",Tfng:"Tifinagh",Vaii:"Vai",Hans:"Basitleştirilmiş",Hant:"Geleneksel"}},uk:{rtl:false,languageNames:{aa:"афарська",ab:"абхазька",ace:"ачехська",ach:"ачолі",ada:"адангме",ady:"адигейська",ae:"авестійська",af:"африкаанс",afh:"африхілі",agq:"агем",ain:"айнська",ak:"акан",akk:"аккадська",akz:"алабама",ale:"алеутська",alt:"південноалтайська",am:"амхарська",an:"арагонська",ang:"давньоанглійська",anp:"ангіка",ar:"арабська","ar-001":"сучасна стандартна арабська",arc:"арамейська",arn:"арауканська",aro:"араона",arp:"арапахо",arq:"алжирська арабська",ars:"надждійська арабська",arw:"аравакська",as:"асамська",asa:"асу",ase:"американська мова рухів",ast:"астурська",av:"аварська",awa:"авадхі",ay:"аймара",az:"азербайджанська","az-Arab":"південноазербайджанська",ba:"башкирська",bal:"балучі",ban:"балійська",bar:"баеріш",bas:"баса",bax:"бамум",bbc:"батак тоба",bbj:"гомала",be:"білоруська",bej:"беджа",bem:"бемба",bew:"бетаві",bez:"бена",bfd:"бафут",bfq:"бадага",bg:"болгарська",bgn:"східнобелуджійська",bho:"бходжпурі",bi:"біслама",bik:"бікольська",bin:"біні",bjn:"банджарська",bkm:"ком",bla:"сіксіка",bm:"бамбара",bn:"банґла",bo:"тибетська",bqi:"бахтіарі",br:"бретонська",bra:"брадж",brx:"бодо",bs:"боснійська",bss:"акус",bua:"бурятська",bug:"бугійська",bum:"булу",byn:"блін",byv:"медумба",ca:"каталонська",cad:"каддо",car:"карібська",cay:"кайюга",cch:"атсам",ccp:"чакма",ce:"чеченська",ceb:"себуанська",cgg:"кіга",ch:"чаморро",chb:"чібча",chg:"чагатайська",chk:"чуукська",chm:"марійська",chn:"чинук жаргон",cho:"чокто",chp:"чіпевʼян",chr:"черокі",chy:"чейєнн",ckb:"центральнокурдська",co:"корсиканська",cop:"коптська",cr:"крі",crh:"кримськотатарська",crs:"сейшельська креольська",cs:"чеська",csb:"кашубська",cu:"церковнословʼянська",cv:"чуваська",cy:"валлійська",da:"данська",dak:"дакота",dar:"даргінська",dav:"таіта",de:"німецька","de-AT":"австрійська німецька","de-CH":"верхньонімецька (Швейцарія)",del:"делаварська",den:"слейв",dgr:"догрибська",din:"дінка",dje:"джерма",doi:"догрі",dsb:"нижньолужицька",dua:"дуала",dum:"середньонідерландська",dv:"дівехі",dyo:"дьола-фоні",dyu:"діула",dz:"дзонг-ке",dzg:"дазага",ebu:"ембу",ee:"еве",efi:"ефік",egy:"давньоєгипетська",eka:"екаджук",el:"грецька",elx:"еламська",en:"англійська","en-AU":"австралійська англійська","en-CA":"канадська англійська","en-GB":"британська англійська","en-US":"англійська (США)",enm:"середньоанглійська",eo:"есперанто",es:"іспанська","es-419":"латиноамериканська іспанська","es-ES":"іспанська (Європа)","es-MX":"мексиканська іспанська",et:"естонська",eu:"баскська",ewo:"евондо",fa:"перська",fan:"фанг",fat:"фанті",ff:"фула",fi:"фінська",fil:"філіппінська",fj:"фіджі",fo:"фарерська",fon:"фон",fr:"французька","fr-CA":"канадська французька","fr-CH":"швейцарська французька",frc:"кажунська французька",frm:"середньофранцузька",fro:"давньофранцузька",frp:"арпітанська",frr:"фризька північна",frs:"фризька східна",fur:"фріульська",fy:"західнофризька",ga:"ірландська",gaa:"га",gag:"гагаузька",gan:"ґань",gay:"гайо",gba:"гбайя",gd:"гаельська",gez:"гєез",gil:"гільбертська",gl:"галісійська",gmh:"середньоверхньонімецька",gn:"гуарані",goh:"давньоверхньонімецька",gon:"гонді",gor:"горонтало",got:"готська",grb:"гребо",grc:"давньогрецька",gsw:"німецька (Швейцарія)",gu:"гуджараті",guz:"гусії",gv:"менкська",gwi:"кучін",ha:"хауса",hai:"хайда",hak:"хаккаська",haw:"гавайська",he:"іврит",hi:"гінді",hil:"хілігайнон",hit:"хітіті",hmn:"хмонг",ho:"хірі-моту",hr:"хорватська",hsb:"верхньолужицька",hsn:"сянська китайська",ht:"гаїтянська",hu:"угорська",hup:"хупа",hy:"вірменська",hz:"гереро",ia:"інтерлінгва",iba:"ібанська",ibb:"ібібіо",id:"індонезійська",ie:"інтерлінгве",ig:"ігбо",ii:"сичуань",ik:"інупіак",ilo:"ілоканська",inh:"інгуська",io:"ідо",is:"ісландська",it:"італійська",iu:"інуктітут",ja:"японська",jbo:"ложбан",jgo:"нгомба",jmc:"мачаме",jpr:"юдео-перська",jrb:"юдео-арабська",jv:"яванська",ka:"грузинська",kaa:"каракалпацька",kab:"кабільська",kac:"качін",kaj:"йю",kam:"камба",kaw:"каві",kbd:"кабардинська",kbl:"канембу",kcg:"тіап",kde:"маконде",kea:"кабувердіану",kfo:"коро",kg:"конґолезька",kha:"кхасі",kho:"хотаносакська",khq:"койра чіїні",ki:"кікуйю",kj:"кунама",kk:"казахська",kkj:"како",kl:"калааллісут",kln:"календжин",km:"кхмерська",kmb:"кімбунду",kn:"каннада",ko:"корейська",koi:"комі-перм’яцька",kok:"конкані",kos:"косрае",kpe:"кпеллє",kr:"канурі",krc:"карачаєво-балкарська",krl:"карельська",kru:"курукх",ks:"кашмірська",ksb:"шамбала",ksf:"бафіа",ksh:"колоніан",ku:"курдська",kum:"кумицька",kut:"кутенаї",kv:"комі",kw:"корнійська",ky:"киргизька",la:"латинська",lad:"ладіно",lag:"лангі",lah:"ланда",lam:"ламба",lb:"люксембурзька",lez:"лезгінська",lg:"ганда",li:"лімбургійська",lkt:"лакота",ln:"лінгала",lo:"лаоська",lol:"монго",lou:"луїзіанська креольська",loz:"лозі",lrc:"північнолурська",lt:"литовська",lu:"луба-катанга",lua:"луба-лулуа",lui:"луїсеньо",lun:"лунда",luo:"луо",lus:"мізо",luy:"луйя",lv:"латвійська",mad:"мадурська",maf:"мафа",mag:"магадхі",mai:"майтхілі",mak:"макасарська",man:"мандінго",mas:"масаї",mde:"маба",mdf:"мокша",mdr:"мандарська",men:"менде",mer:"меру",mfe:"маврикійська креольська",mg:"малагасійська",mga:"середньоірландська",mgh:"макува-меето",mgo:"мета",mh:"маршалльська",mi:"маорі",mic:"мікмак",min:"мінангкабау",mk:"македонська",ml:"малаялам",mn:"монгольська",mnc:"манчжурська",mni:"маніпурі",moh:"магавк",mos:"моссі",mr:"маратхі",ms:"малайська",mt:"мальтійська",mua:"мунданг",mus:"крік",mwl:"мірандська",mwr:"марварі",my:"бірманська",mye:"миін",myv:"ерзя",mzn:"мазандеранська",na:"науру",nan:"південноміньська",nap:"неаполітанська",naq:"нама",nb:"норвезька (букмол)",nd:"північна ндебеле",nds:"нижньонімецька","nds-NL":"нижньосаксонська",ne:"непальська","new":"неварі",ng:"ндонга",nia:"ніаська",niu:"ніуе",njo:"ао нага",nl:"нідерландська","nl-BE":"фламандська",nmg:"квазіо",nn:"норвезька (нюношк)",nnh:"нгємбун",no:"норвезька",nog:"ногайська",non:"давньонорвезька",nqo:"нко",nr:"ндебелє південна",nso:"північна сото",nus:"нуер",nv:"навахо",nwc:"неварі класична",ny:"ньянджа",nym:"ньямвезі",nyn:"ньянколе",nyo:"ньоро",nzi:"нзіма",oc:"окситанська",oj:"оджібва",om:"оромо",or:"одія",os:"осетинська",osa:"осейдж",ota:"османська",pa:"панджабі",pag:"пангасінанська",pal:"пехлеві",pam:"пампанга",pap:"папʼяменто",pau:"палауанська",pcm:"нігерійсько-креольська",peo:"давньоперська",phn:"фінікійсько-пунічна",pi:"палі",pl:"польська",pon:"понапе",prg:"пруська",pro:"давньопровансальська",ps:"пушту",pt:"портуґальська","pt-BR":"португальська (Бразилія)","pt-PT":"європейська портуґальська",qu:"кечуа",quc:"кіче",raj:"раджастхані",rap:"рапануї",rar:"раротонга",rm:"ретороманська",rn:"рунді",ro:"румунська","ro-MD":"молдавська",rof:"ромбо",rom:"циганська",root:"коренева",ru:"російська",rup:"арумунська",rw:"кіньяруанда",rwk:"рва",sa:"санскрит",sad:"сандаве",sah:"якутська",sam:"самаритянська арамейська",saq:"самбуру",sas:"сасакська",sat:"сантальська",sba:"нгамбай",sbp:"сангу",sc:"сардинська",scn:"сицилійська",sco:"шотландська",sd:"сіндхі",sdh:"південнокурдська",se:"північносаамська",see:"сенека",seh:"сена",sel:"селькупська",ses:"койраборо сені",sg:"санго",sga:"давньоірландська",sh:"сербсько-хорватська",shi:"тачеліт",shn:"шанська",shu:"чадійська арабська",si:"сингальська",sid:"сідамо",sk:"словацька",sl:"словенська",sm:"самоанська",sma:"південносаамська",smj:"саамська луле",smn:"саамська інарі",sms:"скольт-саамська",sn:"шона",snk:"сонінке",so:"сомалі",sog:"согдійська",sq:"албанська",sr:"сербська",srn:"сранан тонго",srr:"серер",ss:"сісваті",ssy:"сахо",st:"сото південна",su:"сунданська",suk:"сукума",sus:"сусу",sux:"шумерська",sv:"шведська",sw:"суахілі","sw-CD":"суахілі (Конго)",swb:"коморська",syc:"сирійська класична",syr:"сирійська",ta:"тамільська",te:"телугу",tem:"темне",teo:"тесо",ter:"терено",tet:"тетум",tg:"таджицька",th:"тайська",ti:"тигринья",tig:"тигре",tiv:"тів",tk:"туркменська",tkl:"токелау",tl:"тагальська",tlh:"клінгонська",tli:"тлінгіт",tmh:"тамашек",tn:"тсвана",to:"тонґанська",tog:"ньяса тонга",tpi:"ток-пісін",tr:"турецька",trv:"тароко",ts:"тсонга",tsi:"цимшиан",tt:"татарська",tum:"тумбука",tvl:"тувалу",tw:"тві",twq:"тасавак",ty:"таїтянська",tyv:"тувинська",tzm:"центральноатласька тамазігт",udm:"удмуртська",ug:"уйгурська",uga:"угаритська",uk:"українська",umb:"умбунду",ur:"урду",uz:"узбецька",vai:"ваї",ve:"венда",vi:"вʼєтнамська",vo:"волапʼюк",vot:"водська",vun:"вуньо",wa:"валлонська",wae:"валзерська",wal:"волайтта",war:"варай",was:"вашо",wbp:"валпірі",wo:"волоф",wuu:"уська китайська",xal:"калмицька",xh:"кхоса",xog:"сога",yao:"яо",yap:"яп",yav:"янгбен",ybb:"ємба",yi:"їдиш",yo:"йоруба",yue:"кантонська",za:"чжуан",zap:"сапотекська",zbl:"блісса мова",zen:"зенага",zgh:"стандартна марокканська берберська",zh:"китайська","zh-Hans":"китайська мандаринська (спрощене письмо)","zh-Hant":"китайська мандаринська (традиційне письмо)",zu:"зулуська",zun:"зуньї",zza:"зазакі"},scriptNames:{Cyrl:"кирилиця",Latn:"латиниця",Arab:"арабиця",Guru:"гурмухі",Tfng:"тифінаг",Vaii:"ваї",Hans:"спрощена",Hant:"традиційна"}},ur:{rtl:true,languageNames:{aa:"افار",ab:"ابقازیان",ace:"اچائینیز",ach:"اکولی",ada:"ادانگمے",ady:"ادیگھے",af:"افریقی",agq:"اغم",ain:"اینو",ak:"اکان",ale:"الیوت",alt:"جنوبی الٹائی",am:"امہاری",an:"اراگونیز",anp:"انگیکا",ar:"عربی","ar-001":"ماڈرن اسٹینڈرڈ عربی",arn:"ماپوچے",arp:"اراپاہو",as:"آسامی",asa:"آسو",ast:"اسٹوریائی",av:"اواری",awa:"اوادھی",ay:"ایمارا",az:"آذربائیجانی","az-Arab":"آزربائیجانی (عربی)",ba:"باشکیر",ban:"بالینیز",bas:"باسا",be:"بیلاروسی",bem:"بیمبا",bez:"بینا",bg:"بلغاری",bgn:"مغربی بلوچی",bho:"بھوجپوری",bi:"بسلاما",bin:"بینی",bla:"سکسیکا",bm:"بمبارا",bn:"بنگلہ",bo:"تبتی",br:"بریٹن",brx:"بوڈو",bs:"بوسنیائی",bug:"بگینیز",byn:"بلین",ca:"کیٹالان",ccp:"چکمہ",ce:"چیچن",ceb:"سیبوآنو",cgg:"چیگا",ch:"چیمارو",chk:"چوکیز",chm:"ماری",cho:"چاکٹاؤ",chr:"چیروکی",chy:"چینّے",ckb:"سینٹرل کردش",co:"کوراسیکن",crs:"سیسلوا کریولے فرانسیسی",cs:"چیک",cu:"چرچ سلاوک",cv:"چوواش",cy:"ویلش",da:"ڈینش",dak:"ڈاکوٹا",dar:"درگوا",dav:"تائتا",de:"جرمن","de-AT":"آسٹریائی جرمن","de-CH":"سوئس ہائی جرمن",dgr:"دوگریب",dje:"زرما",dsb:"ذیلی سربیائی",dua:"دوالا",dv:"ڈیویہی",dyo:"جولا فونيا",dz:"ژونگکھا",dzg:"دزاگا",ebu:"امبو",ee:"ایو",efi:"ایفِک",eka:"ایکاجوی",el:"یونانی",en:"انگریزی","en-AU":"آسٹریلیائی انگریزی","en-CA":"کینیڈین انگریزی","en-GB":"برطانوی انگریزی","en-US":"امریکی انگریزی",eo:"ایسپرانٹو",es:"ہسپانوی","es-419":"لاطینی امریکی ہسپانوی","es-ES":"یورپی ہسپانوی","es-MX":"میکسیکن ہسپانوی",et:"اسٹونین",eu:"باسکی",ewo:"ایوانڈو",fa:"فارسی",ff:"فولہ",fi:"فینیش",fil:"فلیپینو",fj:"فجی",fo:"فیروئیز",fon:"فون",fr:"فرانسیسی","fr-CA":"کینیڈین فرانسیسی","fr-CH":"سوئس فرینچ",frc:"کاجن فرانسیسی",fur:"فریولیائی",fy:"مغربی فریسیئن",ga:"آئیرِش",gaa:"گا",gag:"غاغاوز",gd:"سکاٹش گیلک",gez:"گیز",gil:"گلبرتیز",gl:"گالیشیائی",gn:"گُارانی",gor:"گورانٹالو",gsw:"سوئس جرمن",gu:"گجراتی",guz:"گسی",gv:"مینکس",gwi:"گوئچ ان",ha:"ہؤسا",haw:"ہوائی",he:"عبرانی",hi:"ہندی",hil:"ہالیگینون",hmn:"ہمانگ",hr:"کراتی",hsb:"اپر سربیائی",ht:"ہیتی",hu:"ہنگیرین",hup:"ہیوپا",hy:"آرمینیائی",hz:"ہریرو",ia:"بین لسانیات",iba:"ایبان",ibb:"ابی بیو",id:"انڈونیثیائی",ig:"اِگبو",ii:"سچوان ای",ilo:"ایلوکو",inh:"انگوش",io:"ایڈو",is:"آئس لینڈک",it:"اطالوی",iu:"اینُکٹیٹٹ",ja:"جاپانی",jbo:"لوجبان",jgo:"نگومبا",jmc:"ماشیم",jv:"جاوی",ka:"جارجیائی",kab:"قبائلی",kac:"کاچن",kaj:"جے جو",kam:"کامبا",kbd:"کبارڈین",kcg:"تیاپ",kde:"ماکونده",kea:"کابويرديانو",kfo:"کورو",kg:"کانگو",kha:"کھاسی",khq:"کويرا شيني",ki:"کیکویو",kj:"کونیاما",kk:"قزاخ",kkj:"کاکو",kl:"کالاليست",kln:"کالينجين",km:"خمیر",kmb:"کیمبونڈو",kn:"کنّاڈا",ko:"کوریائی",koi:"کومی پرمیاک",kok:"کونکنی",kpe:"کیپیلّے",kr:"کنوری",krc:"کراچے بالکر",krl:"کیرلین",kru:"کوروکھ",ks:"کشمیری",ksb:"شامبالا",ksf:"بافيا",ksh:"کولوگنیائی",ku:"کردش",kum:"کومیک",kv:"کومی",kw:"کورنش",ky:"کرغیزی",la:"لاطینی",lad:"لیڈینو",lag:"لانگی",lb:"لکسمبرگیش",lez:"لیزگیان",lg:"گینڈا",li:"لیمبرگش",lkt:"لاکوٹا",ln:"لِنگَلا",lo:"لاؤ",lou:"لوزیانا کریول",loz:"لوزی",lrc:"شمالی لری",lt:"لیتھوینین",lu:"لبا-کاتانجا",lua:"لیوبا لولوآ",lun:"لونڈا",luo:"لو",lus:"میزو",luy:"لویا",lv:"لیٹوین",mad:"مدورسی",mag:"مگاہی",mai:"میتھیلی",mak:"مکاسر",mas:"مسائی",mdf:"موکشا",men:"میندے",mer:"میرو",mfe:"موریسیین",mg:"ملاگاسی",mgh:"ماخاوا-ميتو",mgo:"میٹا",mh:"مارشلیز",mi:"ماؤری",mic:"مکمیک",min:"منانگکباؤ",mk:"مقدونیائی",ml:"مالایالم",mn:"منگولین",mni:"منی پوری",moh:"موہاک",mos:"موسی",mr:"مراٹهی",ms:"مالے",mt:"مالٹی",mua:"منڈانگ",mus:"کریک",mwl:"میرانڈیز",my:"برمی",myv:"ارزیا",mzn:"مزندرانی",na:"ناؤرو",nap:"نیاپولیٹن",naq:"ناما",nb:"نارویجین بوکمل",nd:"شمالی دبیل",nds:"ادنی جرمن","nds-NL":"ادنی سیکسن",ne:"نیپالی","new":"نیواری",ng:"نڈونگا",nia:"نیاس",niu:"نیویائی",nl:"ڈچ","nl-BE":"فلیمِش",nmg:"کوايسو",nn:"نارویجین نینورسک",nnh:"نگیمبون",no:"نارویجین",nog:"نوگائی",nqo:"اینکو",nr:"جنوبی نڈیبیلی",nso:"شمالی سوتھو",nus:"نویر",nv:"نواجو",ny:"نیانجا",nyn:"نینکول",oc:"آکسیٹان",om:"اورومو",or:"اڑیہ",os:"اوسیٹک",pa:"پنجابی",pag:"پنگاسنان",pam:"پامپنگا",pap:"پاپیامینٹو",pau:"پالاون",pcm:"نائجیریائی پڈگن",pl:"پولش",prg:"پارسی",ps:"پشتو",pt:"پُرتگالی","pt-BR":"برازیلی پرتگالی","pt-PT":"یورپی پرتگالی",qu:"کویچوآ",quc:"کيشی",rap:"رپانوی",rar:"راروتونگان",rm:"رومانش",rn:"رونڈی",ro:"رومینین","ro-MD":"مالدووا",rof:"رومبو",root:"روٹ",ru:"روسی",rup:"ارومانی",rw:"کینیاروانڈا",rwk:"روا",sa:"سنسکرت",sad:"سنڈاوے",sah:"ساکھا",saq:"سامبورو",sat:"سنتالی",sba:"نگامبے",sbp:"سانگو",sc:"سردینین",scn:"سیسیلین",sco:"سکاٹ",sd:"سندھی",sdh:"جنوبی کرد",se:"شمالی سامی",seh:"سینا",ses:"کويرابورو سينی",sg:"ساںغو",sh:"سربو-کروئیشین",shi:"تشلحيت",shn:"شان",si:"سنہالا",sk:"سلوواک",sl:"سلووینیائی",sm:"ساموآن",sma:"جنوبی سامی",smj:"لول سامی",smn:"اناری سامی",sms:"سکولٹ سامی",sn:"شونا",snk:"سوننکے",so:"صومالی",sq:"البانی",sr:"سربین",srn:"سرانن ٹونگو",ss:"سواتی",ssy:"ساہو",st:"جنوبی سوتھو",su:"سنڈانیز",suk:"سکوما",sv:"سویڈش",sw:"سواحلی","sw-CD":"کانگو سواحلی",swb:"کوموریائی",syr:"سریانی",ta:"تمل",te:"تیلگو",tem:"ٹمنے",teo:"تیسو",tet:"ٹیٹم",tg:"تاجک",th:"تھائی",ti:"ٹگرینیا",tig:"ٹگرے",tk:"ترکمان",tl:"ٹیگا لوگ",tlh:"کلنگن",tn:"سوانا",to:"ٹونگن",tpi:"ٹوک پِسِن",tr:"ترکی",trv:"ٹوروکو",ts:"زونگا",tt:"تاتار",tum:"ٹمبوکا",tvl:"تووالو",tw:"توی",twq:"تاساواق",ty:"تاہیتی",tyv:"تووینین",tzm:"سینٹرل ایٹلس ٹمازائٹ",udm:"ادمورت",ug:"یوئگہر",uk:"یوکرینیائی",umb:"اومبوندو",ur:"اردو",uz:"ازبیک",vai:"وائی",ve:"وینڈا",vi:"ویتنامی",vo:"وولاپوک",vun:"ونجو",wa:"والون",wae:"والسر",wal:"وولایتا",war:"وارے",wbp:"وارلپیری",wo:"وولوف",xal:"کالمیک",xh:"ژوسا",xog:"سوگا",yav:"یانگبین",ybb:"یمبا",yi:"یدش",yo:"یوروبا",yue:"کینٹونیز",zgh:"اسٹینڈرڈ مراقشی تمازیقی",zh:"چینی","zh-Hans":"سادہ مندارن چینی","zh-Hant":"روایتی مندارن چینی",zu:"زولو",zun:"زونی",zza:"زازا"},scriptNames:{Cyrl:"سیریلک",Latn:"لاطینی",Arab:"عربی",Guru:"گرمکھی",Hans:"آسان",Hant:"روایتی"}},vi:{rtl:false,languageNames:{aa:"Tiếng Afar",ab:"Tiếng Abkhazia",ace:"Tiếng Achinese",ach:"Tiếng Acoli",ada:"Tiếng Adangme",ady:"Tiếng Adyghe",ae:"Tiếng Avestan",af:"Tiếng Afrikaans",afh:"Tiếng Afrihili",agq:"Tiếng Aghem",ain:"Tiếng Ainu",ak:"Tiếng Akan",akk:"Tiếng Akkadia",akz:"Tiếng Alabama",ale:"Tiếng Aleut",aln:"Tiếng Gheg Albani",alt:"Tiếng Altai Miền Nam",am:"Tiếng Amharic",an:"Tiếng Aragon",ang:"Tiếng Anh cổ",anp:"Tiếng Angika",ar:"Tiếng Ả Rập","ar-001":"Tiếng Ả Rập Hiện đại",arc:"Tiếng Aramaic",arn:"Tiếng Mapuche",aro:"Tiếng Araona",arp:"Tiếng Arapaho",arq:"Tiếng Ả Rập Algeria",ars:"Tiếng Ả Rập Najdi",arw:"Tiếng Arawak",arz:"Tiếng Ả Rập Ai Cập",as:"Tiếng Assam",asa:"Tiếng Asu",ase:"Ngôn ngữ Ký hiệu Mỹ",ast:"Tiếng Asturias",av:"Tiếng Avaric",awa:"Tiếng Awadhi",ay:"Tiếng Aymara",az:"Tiếng Azerbaijan",ba:"Tiếng Bashkir",bal:"Tiếng Baluchi",ban:"Tiếng Bali",bar:"Tiếng Bavaria",bas:"Tiếng Basaa",bax:"Tiếng Bamun",bbc:"Tiếng Batak Toba",bbj:"Tiếng Ghomala",be:"Tiếng Belarus",bej:"Tiếng Beja",bem:"Tiếng Bemba",bew:"Tiếng Betawi",bez:"Tiếng Bena",bfd:"Tiếng Bafut",bfq:"Tiếng Badaga",bg:"Tiếng Bulgaria",bgn:"Tiếng Tây Balochi",bho:"Tiếng Bhojpuri",bi:"Tiếng Bislama",bik:"Tiếng Bikol",bin:"Tiếng Bini",bjn:"Tiếng Banjar",bkm:"Tiếng Kom",bla:"Tiếng Siksika",bm:"Tiếng Bambara",bn:"Tiếng Bangla",bo:"Tiếng Tây Tạng",bpy:"Tiếng Bishnupriya",bqi:"Tiếng Bakhtiari",br:"Tiếng Breton",bra:"Tiếng Braj",brh:"Tiếng Brahui",brx:"Tiếng Bodo",bs:"Tiếng Bosnia",bss:"Tiếng Akoose",bua:"Tiếng Buriat",bug:"Tiếng Bugin",bum:"Tiếng Bulu",byn:"Tiếng Blin",byv:"Tiếng Medumba",ca:"Tiếng Catalan",cad:"Tiếng Caddo",car:"Tiếng Carib",cay:"Tiếng Cayuga",cch:"Tiếng Atsam",ccp:"Tiếng Chakma",ce:"Tiếng Chechen",ceb:"Tiếng Cebuano",cgg:"Tiếng Chiga",ch:"Tiếng Chamorro",chb:"Tiếng Chibcha",chg:"Tiếng Chagatai",chk:"Tiếng Chuuk",chm:"Tiếng Mari",chn:"Biệt ngữ Chinook",cho:"Tiếng Choctaw",chp:"Tiếng Chipewyan",chr:"Tiếng Cherokee",chy:"Tiếng Cheyenne",ckb:"Tiếng Kurd Miền Trung",co:"Tiếng Corsica",cop:"Tiếng Coptic",cps:"Tiếng Capiznon",cr:"Tiếng Cree",crh:"Tiếng Thổ Nhĩ Kỳ Crimean",crs:"Tiếng Pháp Seselwa Creole",cs:"Tiếng Séc",csb:"Tiếng Kashubia",cu:"Tiếng Slavơ Nhà thờ",cv:"Tiếng Chuvash",cy:"Tiếng Wales",da:"Tiếng Đan Mạch",dak:"Tiếng Dakota",dar:"Tiếng Dargwa",dav:"Tiếng Taita",de:"Tiếng Đức","de-AT":"Tiếng Đức (Áo)","de-CH":"Tiếng Thượng Giéc-man (Thụy Sĩ)",del:"Tiếng Delaware",den:"Tiếng Slave",dgr:"Tiếng Dogrib",din:"Tiếng Dinka",dje:"Tiếng Zarma",doi:"Tiếng Dogri",dsb:"Tiếng Hạ Sorbia",dtp:"Tiếng Dusun Miền Trung",dua:"Tiếng Duala",dum:"Tiếng Hà Lan Trung cổ",dv:"Tiếng Divehi",dyo:"Tiếng Jola-Fonyi",dyu:"Tiếng Dyula",dz:"Tiếng Dzongkha",dzg:"Tiếng Dazaga",ebu:"Tiếng Embu",ee:"Tiếng Ewe",efi:"Tiếng Efik",egl:"Tiếng Emilia",egy:"Tiếng Ai Cập cổ",eka:"Tiếng Ekajuk",el:"Tiếng Hy Lạp",elx:"Tiếng Elamite",en:"Tiếng Anh","en-AU":"Tiếng Anh (Australia)","en-CA":"Tiếng Anh (Canada)","en-GB":"Tiếng Anh (Anh)","en-US":"Tiếng Anh (Mỹ)",enm:"Tiếng Anh Trung cổ",eo:"Tiếng Quốc Tế Ngữ",es:"Tiếng Tây Ban Nha","es-419":"Tiếng Tây Ban Nha (Mỹ La tinh)","es-ES":"Tiếng Tây Ban Nha (Châu Âu)","es-MX":"Tiếng Tây Ban Nha (Mexico)",esu:"Tiếng Yupik Miền Trung",et:"Tiếng Estonia",eu:"Tiếng Basque",ewo:"Tiếng Ewondo",ext:"Tiếng Extremadura",fa:"Tiếng Ba Tư",fan:"Tiếng Fang",fat:"Tiếng Fanti",ff:"Tiếng Fulah",fi:"Tiếng Phần Lan",fil:"Tiếng Philippines",fj:"Tiếng Fiji",fo:"Tiếng Faroe",fon:"Tiếng Fon",fr:"Tiếng Pháp","fr-CA":"Tiếng Pháp (Canada)","fr-CH":"Tiếng Pháp (Thụy Sĩ)",frc:"Tiếng Pháp Cajun",frm:"Tiếng Pháp Trung cổ",fro:"Tiếng Pháp cổ",frp:"Tiếng Arpitan",frr:"Tiếng Frisia Miền Bắc",frs:"Tiếng Frisian Miền Đông",fur:"Tiếng Friulian",fy:"Tiếng Frisia",ga:"Tiếng Ireland",gaa:"Tiếng Ga",gag:"Tiếng Gagauz",gan:"Tiếng Cám",gay:"Tiếng Gayo",gba:"Tiếng Gbaya",gd:"Tiếng Gael Scotland",gez:"Tiếng Geez",gil:"Tiếng Gilbert",gl:"Tiếng Galician",glk:"Tiếng Gilaki",gmh:"Tiếng Thượng Giéc-man Trung cổ",gn:"Tiếng Guarani",goh:"Tiếng Thượng Giéc-man cổ",gom:"Tiếng Goan Konkani",gon:"Tiếng Gondi",gor:"Tiếng Gorontalo",got:"Tiếng Gô-tích",grb:"Tiếng Grebo",grc:"Tiếng Hy Lạp cổ",gsw:"Tiếng Đức (Thụy Sĩ)",gu:"Tiếng Gujarati",gur:"Tiếng Frafra",guz:"Tiếng Gusii",gv:"Tiếng Manx",gwi:"Tiếng Gwichʼin",ha:"Tiếng Hausa",hai:"Tiếng Haida",hak:"Tiếng Khách Gia",haw:"Tiếng Hawaii",he:"Tiếng Do Thái",hi:"Tiếng Hindi",hif:"Tiếng Fiji Hindi",hil:"Tiếng Hiligaynon",hit:"Tiếng Hittite",hmn:"Tiếng Hmông",ho:"Tiếng Hiri Motu",hr:"Tiếng Croatia",hsb:"Tiếng Thượng Sorbia",hsn:"Tiếng Tương",ht:"Tiếng Haiti",hu:"Tiếng Hungary",hup:"Tiếng Hupa",hy:"Tiếng Armenia",hz:"Tiếng Herero",ia:"Tiếng Khoa Học Quốc Tế",iba:"Tiếng Iban",ibb:"Tiếng Ibibio",id:"Tiếng Indonesia",ie:"Tiếng Interlingue",ig:"Tiếng Igbo",ii:"Tiếng Di Tứ Xuyên",ik:"Tiếng Inupiaq",ilo:"Tiếng Iloko",inh:"Tiếng Ingush",io:"Tiếng Ido",is:"Tiếng Iceland",it:"Tiếng Italy",iu:"Tiếng Inuktitut",izh:"Tiếng Ingria",ja:"Tiếng Nhật",jam:"Tiếng Anh Jamaica Creole",jbo:"Tiếng Lojban",jgo:"Tiếng Ngomba",jmc:"Tiếng Machame",jpr:"Tiếng Judeo-Ba Tư",jrb:"Tiếng Judeo-Ả Rập",jut:"Tiếng Jutish",jv:"Tiếng Java",ka:"Tiếng Georgia",kaa:"Tiếng Kara-Kalpak",kab:"Tiếng Kabyle",kac:"Tiếng Kachin",kaj:"Tiếng Jju",kam:"Tiếng Kamba",kaw:"Tiếng Kawi",kbd:"Tiếng Kabardian",kbl:"Tiếng Kanembu",kcg:"Tiếng Tyap",kde:"Tiếng Makonde",kea:"Tiếng Kabuverdianu",kfo:"Tiếng Koro",kg:"Tiếng Kongo",kha:"Tiếng Khasi",kho:"Tiếng Khotan",khq:"Tiếng Koyra Chiini",ki:"Tiếng Kikuyu",kj:"Tiếng Kuanyama",kk:"Tiếng Kazakh",kkj:"Tiếng Kako",kl:"Tiếng Kalaallisut",kln:"Tiếng Kalenjin",km:"Tiếng Khmer",kmb:"Tiếng Kimbundu",kn:"Tiếng Kannada",ko:"Tiếng Hàn",koi:"Tiếng Komi-Permyak",kok:"Tiếng Konkani",kos:"Tiếng Kosrae",kpe:"Tiếng Kpelle",kr:"Tiếng Kanuri",krc:"Tiếng Karachay-Balkar",krl:"Tiếng Karelian",kru:"Tiếng Kurukh",ks:"Tiếng Kashmir",ksb:"Tiếng Shambala",ksf:"Tiếng Bafia",ksh:"Tiếng Cologne",ku:"Tiếng Kurd",kum:"Tiếng Kumyk",kut:"Tiếng Kutenai",kv:"Tiếng Komi",kw:"Tiếng Cornwall",ky:"Tiếng Kyrgyz",la:"Tiếng La-tinh",lad:"Tiếng Ladino",lag:"Tiếng Langi",lah:"Tiếng Lahnda",lam:"Tiếng Lamba",lb:"Tiếng Luxembourg",lez:"Tiếng Lezghian",lg:"Tiếng Ganda",li:"Tiếng Limburg",lkt:"Tiếng Lakota",ln:"Tiếng Lingala",lo:"Tiếng Lào",lol:"Tiếng Mongo",lou:"Tiếng Creole Louisiana",loz:"Tiếng Lozi",lrc:"Tiếng Bắc Luri",lt:"Tiếng Litva",lu:"Tiếng Luba-Katanga",lua:"Tiếng Luba-Lulua",lui:"Tiếng Luiseno",lun:"Tiếng Lunda",luo:"Tiếng Luo",lus:"Tiếng Lushai",luy:"Tiếng Luyia",lv:"Tiếng Latvia",mad:"Tiếng Madura",maf:"Tiếng Mafa",mag:"Tiếng Magahi",mai:"Tiếng Maithili",mak:"Tiếng Makasar",man:"Tiếng Mandingo",mas:"Tiếng Masai",mde:"Tiếng Maba",mdf:"Tiếng Moksha",mdr:"Tiếng Mandar",men:"Tiếng Mende",mer:"Tiếng Meru",mfe:"Tiếng Morisyen",mg:"Tiếng Malagasy",mga:"Tiếng Ai-len Trung cổ",mgh:"Tiếng Makhuwa-Meetto",mgo:"Tiếng Meta’",mh:"Tiếng Marshall",mi:"Tiếng Maori",mic:"Tiếng Micmac",min:"Tiếng Minangkabau",mk:"Tiếng Macedonia",ml:"Tiếng Malayalam",mn:"Tiếng Mông Cổ",mnc:"Tiếng Mãn Châu",mni:"Tiếng Manipuri",moh:"Tiếng Mohawk",mos:"Tiếng Mossi",mr:"Tiếng Marathi",ms:"Tiếng Mã Lai",mt:"Tiếng Malta",mua:"Tiếng Mundang",mus:"Tiếng Creek",mwl:"Tiếng Miranda",mwr:"Tiếng Marwari",my:"Tiếng Miến Điện",mye:"Tiếng Myene",myv:"Tiếng Erzya",mzn:"Tiếng Mazanderani",na:"Tiếng Nauru",nan:"Tiếng Mân Nam",nap:"Tiếng Napoli",naq:"Tiếng Nama",nb:"Tiếng Na Uy (Bokmål)",nd:"Tiếng Ndebele Miền Bắc",nds:"Tiếng Hạ Giéc-man","nds-NL":"Tiếng Hạ Saxon",ne:"Tiếng Nepal","new":"Tiếng Newari",ng:"Tiếng Ndonga",nia:"Tiếng Nias",niu:"Tiếng Niuean",njo:"Tiếng Ao Naga",nl:"Tiếng Hà Lan","nl-BE":"Tiếng Flemish",nmg:"Tiếng Kwasio",nn:"Tiếng Na Uy (Nynorsk)",nnh:"Tiếng Ngiemboon",no:"Tiếng Na Uy",nog:"Tiếng Nogai",non:"Tiếng Na Uy cổ",nqo:"Tiếng N’Ko",nr:"Tiếng Ndebele Miền Nam",nso:"Tiếng Sotho Miền Bắc",nus:"Tiếng Nuer",nv:"Tiếng Navajo",nwc:"Tiếng Newari cổ",ny:"Tiếng Nyanja",nym:"Tiếng Nyamwezi",nyn:"Tiếng Nyankole",nyo:"Tiếng Nyoro",nzi:"Tiếng Nzima",oc:"Tiếng Occitan",oj:"Tiếng Ojibwa",om:"Tiếng Oromo",or:"Tiếng Odia",os:"Tiếng Ossetic",osa:"Tiếng Osage",ota:"Tiếng Thổ Nhĩ Kỳ Ottoman",pa:"Tiếng Punjab",pag:"Tiếng Pangasinan",pal:"Tiếng Pahlavi",pam:"Tiếng Pampanga",pap:"Tiếng Papiamento",pau:"Tiếng Palauan",pcm:"Tiếng Nigeria Pidgin",peo:"Tiếng Ba Tư cổ",phn:"Tiếng Phoenicia",pi:"Tiếng Pali",pl:"Tiếng Ba Lan",pon:"Tiếng Pohnpeian",prg:"Tiếng Prussia",pro:"Tiếng Provençal cổ",ps:"Tiếng Pashto",pt:"Tiếng Bồ Đào Nha","pt-BR":"Tiếng Bồ Đào Nha (Brazil)","pt-PT":"Tiếng Bồ Đào Nha (Châu Âu)",qu:"Tiếng Quechua",quc:"Tiếng Kʼicheʼ",qug:"Tiếng Quechua ở Cao nguyên Chimborazo",raj:"Tiếng Rajasthani",rap:"Tiếng Rapanui",rar:"Tiếng Rarotongan",rm:"Tiếng Romansh",rn:"Tiếng Rundi",ro:"Tiếng Romania","ro-MD":"Tiếng Moldova",rof:"Tiếng Rombo",rom:"Tiếng Romany",root:"Tiếng Root",ru:"Tiếng Nga",rup:"Tiếng Aromania",rw:"Tiếng Kinyarwanda",rwk:"Tiếng Rwa",sa:"Tiếng Phạn",sad:"Tiếng Sandawe",sah:"Tiếng Sakha",sam:"Tiếng Samaritan Aramaic",saq:"Tiếng Samburu",sas:"Tiếng Sasak",sat:"Tiếng Santali",sba:"Tiếng Ngambay",sbp:"Tiếng Sangu",sc:"Tiếng Sardinia",scn:"Tiếng Sicilia",sco:"Tiếng Scots",sd:"Tiếng Sindhi",sdh:"Tiếng Kurd Miền Nam",se:"Tiếng Sami Miền Bắc",see:"Tiếng Seneca",seh:"Tiếng Sena",sel:"Tiếng Selkup",ses:"Tiếng Koyraboro Senni",sg:"Tiếng Sango",sga:"Tiếng Ai-len cổ",sh:"Tiếng Serbo-Croatia",shi:"Tiếng Tachelhit",shn:"Tiếng Shan",shu:"Tiếng Ả-Rập Chad",si:"Tiếng Sinhala",sid:"Tiếng Sidamo",sk:"Tiếng Slovak",sl:"Tiếng Slovenia",sm:"Tiếng Samoa",sma:"Tiếng Sami Miền Nam",smj:"Tiếng Lule Sami",smn:"Tiếng Inari Sami",sms:"Tiếng Skolt Sami",sn:"Tiếng Shona",snk:"Tiếng Soninke",so:"Tiếng Somali",sog:"Tiếng Sogdien",sq:"Tiếng Albania",sr:"Tiếng Serbia",srn:"Tiếng Sranan Tongo",srr:"Tiếng Serer",ss:"Tiếng Swati",ssy:"Tiếng Saho",st:"Tiếng Sotho Miền Nam",su:"Tiếng Sunda",suk:"Tiếng Sukuma",sus:"Tiếng Susu",sux:"Tiếng Sumeria",sv:"Tiếng Thụy Điển",sw:"Tiếng Swahili","sw-CD":"Tiếng Swahili Congo",swb:"Tiếng Cômo",syc:"Tiếng Syriac cổ",syr:"Tiếng Syriac",ta:"Tiếng Tamil",te:"Tiếng Telugu",tem:"Tiếng Timne",teo:"Tiếng Teso",ter:"Tiếng Tereno",tet:"Tiếng Tetum",tg:"Tiếng Tajik",th:"Tiếng Thái",ti:"Tiếng Tigrinya",tig:"Tiếng Tigre",tiv:"Tiếng Tiv",tk:"Tiếng Turkmen",tkl:"Tiếng Tokelau",tl:"Tiếng Tagalog",tlh:"Tiếng Klingon",tli:"Tiếng Tlingit",tmh:"Tiếng Tamashek",tn:"Tiếng Tswana",to:"Tiếng Tonga",tog:"Tiếng Nyasa Tonga",tpi:"Tiếng Tok Pisin",tr:"Tiếng Thổ Nhĩ Kỳ",trv:"Tiếng Taroko",ts:"Tiếng Tsonga",tsi:"Tiếng Tsimshian",tt:"Tiếng Tatar",tum:"Tiếng Tumbuka",tvl:"Tiếng Tuvalu",tw:"Tiếng Twi",twq:"Tiếng Tasawaq",ty:"Tiếng Tahiti",tyv:"Tiếng Tuvinian",tzm:"Tiếng Tamazight Miền Trung Ma-rốc",udm:"Tiếng Udmurt",ug:"Tiếng Uyghur",uga:"Tiếng Ugaritic",uk:"Tiếng Ukraina",umb:"Tiếng Umbundu",ur:"Tiếng Urdu",uz:"Tiếng Uzbek",vai:"Tiếng Vai",ve:"Tiếng Venda",vi:"Tiếng Việt",vo:"Tiếng Volapük",vot:"Tiếng Votic",vun:"Tiếng Vunjo",wa:"Tiếng Walloon",wae:"Tiếng Walser",wal:"Tiếng Walamo",war:"Tiếng Waray",was:"Tiếng Washo",wbp:"Tiếng Warlpiri",wo:"Tiếng Wolof",wuu:"Tiếng Ngô",xal:"Tiếng Kalmyk",xh:"Tiếng Xhosa",xog:"Tiếng Soga",yao:"Tiếng Yao",yap:"Tiếng Yap",yav:"Tiếng Yangben",ybb:"Tiếng Yemba",yi:"Tiếng Yiddish",yo:"Tiếng Yoruba",yue:"Tiếng Quảng Đông",za:"Tiếng Choang",zap:"Tiếng Zapotec",zbl:"Ký hiệu Blissymbols",zen:"Tiếng Zenaga",zgh:"Tiếng Tamazight Chuẩn của Ma-rốc",zh:"Tiếng Trung","zh-Hans":"Tiếng Trung Phổ thông (Giản thể)","zh-Hant":"Tiếng Trung Phổ thông (Phồn thể)",zu:"Tiếng Zulu",zun:"Tiếng Zuni",zza:"Tiếng Zaza"},scriptNames:{Cyrl:"Chữ Kirin",Latn:"Chữ La tinh",Arab:"Chữ Ả Rập",Guru:"Chữ Gurmukhi",Tfng:"Chữ Tifinagh",Vaii:"Chữ Vai",Hans:"Giản thể",Hant:"Phồn thể"}},yue:{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿緯斯陀文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什客爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰羅尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"索拉尼庫爾德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克裡文",crh:"克里米亞半島的土耳其文;克里米亞半島的塔塔爾文",crs:"法語克里奧爾混合語",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文 (奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文 (澳洲)","en-CA":"英文 (加拿大)","en-GB":"英文 (英國)","en-US":"英文 (美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文 (拉丁美洲)","es-ES":"西班牙文 (西班牙)","es-MX":"西班牙文 (墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文 (加拿大)","fr-CH":"法文 (瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地日耳曼文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"北印度文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格裏亞文",ja:"日文",jam:"牙買加克裏奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努裡文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫爾德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"盧晒文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬拉加什文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普裡文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬裏文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬爾尼裡文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐利亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽語",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文 (巴西)","pt-PT":"葡萄牙文 (葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"散塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫爾德文",se:"北方薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"瑟爾卡普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納裡薩米文",sms:"斯科特薩米文",sn:"塞內加爾文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"土凡文",tzm:"塔馬齊格特文",udm:"沃蒂艾克文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"簡體中文 (普通話)","zh-Hant":"繁體中文 (普通話)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}},zh:{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-CN":{rtl:false,languageNames:{aa:"阿法尔语",ab:"阿布哈西亚语",ace:"亚齐语",ach:"阿乔利语",ada:"阿当梅语",ady:"阿迪格语",ae:"阿维斯塔语",af:"南非荷兰语",afh:"阿弗里希利语",agq:"亚罕语",ain:"阿伊努语",ak:"阿肯语",akk:"阿卡德语",ale:"阿留申语",alt:"南阿尔泰语",am:"阿姆哈拉语",an:"阿拉贡语",ang:"古英语",anp:"昂加语",ar:"阿拉伯语","ar-001":"现代标准阿拉伯语",arc:"阿拉米语",arn:"马普切语",arp:"阿拉帕霍语",ars:"纳吉迪阿拉伯语",arw:"阿拉瓦克语",as:"阿萨姆语",asa:"帕雷语",ast:"阿斯图里亚斯语",av:"阿瓦尔语",awa:"阿瓦德语",ay:"艾马拉语",az:"阿塞拜疆语","az-Arab":"南阿塞拜疆语",ba:"巴什基尔语",bal:"俾路支语",ban:"巴厘语",bas:"巴萨语",bax:"巴姆穆语",bbj:"戈马拉语",be:"白俄罗斯语",bej:"贝沙语",bem:"本巴语",bez:"贝纳语",bfd:"巴非特语",bg:"保加利亚语",bgn:"西俾路支语",bho:"博杰普尔语",bi:"比斯拉马语",bik:"比科尔语",bin:"比尼语",bkm:"科姆语",bla:"西克西卡语",bm:"班巴拉语",bn:"孟加拉语",bo:"藏语",br:"布列塔尼语",bra:"布拉杰语",brx:"博多语",bs:"波斯尼亚语",bss:"阿库色语",bua:"布里亚特语",bug:"布吉语",bum:"布鲁语",byn:"比林语",byv:"梅敦巴语",ca:"加泰罗尼亚语",cad:"卡多语",car:"加勒比语",cay:"卡尤加语",cch:"阿灿语",ccp:"查克玛语",ce:"车臣语",ceb:"宿务语",cgg:"奇加语",ch:"查莫罗语",chb:"奇布查语",chg:"察合台语",chk:"楚克语",chm:"马里语",chn:"奇努克混合语",cho:"乔克托语",chp:"奇佩维安语",chr:"切罗基语",chy:"夏延语",ckb:"中库尔德语",co:"科西嘉语",cop:"科普特语",cr:"克里族语",crh:"克里米亚土耳其语",crs:"塞舌尔克里奥尔语",cs:"捷克语",csb:"卡舒比语",cu:"教会斯拉夫语",cv:"楚瓦什语",cy:"威尔士语",da:"丹麦语",dak:"达科他语",dar:"达尔格瓦语",dav:"台塔语",de:"德语","de-AT":"奥地利德语","de-CH":"瑞士高地德语",del:"特拉华语",den:"史拉维语",dgr:"多格里布语",din:"丁卡语",dje:"哲尔马语",doi:"多格拉语",dsb:"下索布语",dua:"都阿拉语",dum:"中古荷兰语",dv:"迪维希语",dyo:"朱拉语",dyu:"迪尤拉语",dz:"宗卡语",dzg:"达扎葛语",ebu:"恩布语",ee:"埃维语",efi:"埃菲克语",egy:"古埃及语",eka:"艾卡朱克语",el:"希腊语",elx:"埃兰语",en:"英语","en-AU":"澳大利亚英语","en-CA":"加拿大英语","en-GB":"英国英语","en-US":"美国英语",enm:"中古英语",eo:"世界语",es:"西班牙语","es-419":"拉丁美洲西班牙语","es-ES":"欧洲西班牙语","es-MX":"墨西哥西班牙语",et:"爱沙尼亚语",eu:"巴斯克语",ewo:"旺杜语",fa:"波斯语",fan:"芳格语",fat:"芳蒂语",ff:"富拉语",fi:"芬兰语",fil:"菲律宾语",fj:"斐济语",fo:"法罗语",fon:"丰语",fr:"法语","fr-CA":"加拿大法语","fr-CH":"瑞士法语",frc:"卡真法语",frm:"中古法语",fro:"古法语",frr:"北弗里西亚语",frs:"东弗里西亚语",fur:"弗留利语",fy:"西弗里西亚语",ga:"爱尔兰语",gaa:"加族语",gag:"加告兹语",gan:"赣语",gay:"迦约语",gba:"格巴亚语",gd:"苏格兰盖尔语",gez:"吉兹语",gil:"吉尔伯特语",gl:"加利西亚语",gmh:"中古高地德语",gn:"瓜拉尼语",goh:"古高地德语",gon:"冈德语",gor:"哥伦打洛语",got:"哥特语",grb:"格列博语",grc:"古希腊语",gsw:"瑞士德语",gu:"古吉拉特语",guz:"古西语",gv:"马恩语",gwi:"哥威迅语",ha:"豪萨语",hai:"海达语",hak:"客家语",haw:"夏威夷语",he:"希伯来语",hi:"印地语",hil:"希利盖农语",hit:"赫梯语",hmn:"苗语",ho:"希里莫图语",hr:"克罗地亚语",hsb:"上索布语",hsn:"湘语",ht:"海地克里奥尔语",hu:"匈牙利语",hup:"胡帕语",hy:"亚美尼亚语",hz:"赫雷罗语",ia:"国际语",iba:"伊班语",ibb:"伊比比奥语",id:"印度尼西亚语",ie:"国际文字(E)",ig:"伊博语",ii:"四川彝语",ik:"伊努皮克语",ilo:"伊洛卡诺语",inh:"印古什语",io:"伊多语",is:"冰岛语",it:"意大利语",iu:"因纽特语",ja:"日语",jbo:"逻辑语",jgo:"恩艮巴语",jmc:"马切姆语",jpr:"犹太波斯语",jrb:"犹太阿拉伯语",jv:"爪哇语",ka:"格鲁吉亚语",kaa:"卡拉卡尔帕克语",kab:"卡拜尔语",kac:"克钦语",kaj:"卡捷语",kam:"卡姆巴语",kaw:"卡威语",kbd:"卡巴尔德语",kbl:"加涅姆布语",kcg:"卡塔布语",kde:"马孔德语",kea:"卡布佛得鲁语",kfo:"克罗语",kg:"刚果语",kha:"卡西语",kho:"和田语",khq:"西桑海语",ki:"吉库尤语",kj:"宽亚玛语",kk:"哈萨克语",kkj:"卡库语",kl:"格陵兰语",kln:"卡伦金语",km:"高棉语",kmb:"金邦杜语",kn:"卡纳达语",ko:"韩语",koi:"科米-彼尔米亚克语",kok:"孔卡尼语",kos:"科斯拉伊语",kpe:"克佩列语",kr:"卡努里语",krc:"卡拉恰伊巴尔卡尔语",krl:"卡累利阿语",kru:"库鲁克语",ks:"克什米尔语",ksb:"香巴拉语",ksf:"巴菲亚语",ksh:"科隆语",ku:"库尔德语",kum:"库梅克语",kut:"库特奈语",kv:"科米语",kw:"康沃尔语",ky:"柯尔克孜语",la:"拉丁语",lad:"拉迪诺语",lag:"朗吉语",lah:"印度-雅利安语",lam:"兰巴语",lb:"卢森堡语",lez:"列兹金语",lg:"卢干达语",li:"林堡语",lkt:"拉科塔语",ln:"林加拉语",lo:"老挝语",lol:"蒙戈语",lou:"路易斯安那克里奥尔语",loz:"洛齐语",lrc:"北卢尔语",lt:"立陶宛语",lu:"鲁巴加丹加语",lua:"卢巴-卢拉语",lui:"卢伊塞诺语",lun:"隆达语",luo:"卢奥语",lus:"米佐语",luy:"卢雅语",lv:"拉脱维亚语",mad:"马都拉语",maf:"马法语",mag:"摩揭陀语",mai:"迈蒂利语",mak:"望加锡语",man:"曼丁哥语",mas:"马赛语",mde:"马坝语",mdf:"莫克沙语",mdr:"曼达尔语",men:"门德语",mer:"梅鲁语",mfe:"毛里求斯克里奥尔语",mg:"马拉加斯语",mga:"中古爱尔兰语",mgh:"马库阿语",mgo:"梅塔语",mh:"马绍尔语",mi:"毛利语",mic:"密克马克语",min:"米南佳保语",mk:"马其顿语",ml:"马拉雅拉姆语",mn:"蒙古语",mnc:"满语",mni:"曼尼普尔语",moh:"摩霍克语",mos:"莫西语",mr:"马拉地语",ms:"马来语",mt:"马耳他语",mua:"蒙当语",mus:"克里克语",mwl:"米兰德斯语",mwr:"马尔瓦里语",my:"缅甸语",mye:"姆耶内语",myv:"厄尔兹亚语",mzn:"马赞德兰语",na:"瑙鲁语",nan:"闽南语",nap:"那不勒斯语",naq:"纳马语",nb:"书面挪威语",nd:"北恩德贝勒语",nds:"低地德语","nds-NL":"低萨克森语",ne:"尼泊尔语","new":"尼瓦尔语",ng:"恩东加语",nia:"尼亚斯语",niu:"纽埃语",nl:"荷兰语","nl-BE":"弗拉芒语",nmg:"夸西奥语",nn:"挪威尼诺斯克语",nnh:"恩甘澎语",no:"挪威语",nog:"诺盖语",non:"古诺尔斯语",nqo:"西非书面文字",nr:"南恩德贝勒语",nso:"北索托语",nus:"努埃尔语",nv:"纳瓦霍语",nwc:"古典尼瓦尔语",ny:"齐切瓦语",nym:"尼扬韦齐语",nyn:"尼昂科勒语",nyo:"尼奥罗语",nzi:"恩济马语",oc:"奥克语",oj:"奥吉布瓦语",om:"奥罗莫语",or:"奥里亚语",os:"奥塞梯语",osa:"奥塞治语",ota:"奥斯曼土耳其语",pa:"旁遮普语",pag:"邦阿西南语",pal:"巴拉维语",pam:"邦板牙语",pap:"帕皮阿门托语",pau:"帕劳语",pcm:"尼日利亚皮钦语",peo:"古波斯语",phn:"腓尼基语",pi:"巴利语",pl:"波兰语",pon:"波纳佩语",prg:"普鲁士语",pro:"古普罗文斯语",ps:"普什图语",pt:"葡萄牙语","pt-BR":"巴西葡萄牙语","pt-PT":"欧洲葡萄牙语",qu:"克丘亚语",quc:"基切语",raj:"拉贾斯坦语",rap:"拉帕努伊语",rar:"拉罗汤加语",rm:"罗曼什语",rn:"隆迪语",ro:"罗马尼亚语","ro-MD":"摩尔多瓦语",rof:"兰博语",rom:"吉普赛语",root:"根语言",ru:"俄语",rup:"阿罗马尼亚语",rw:"卢旺达语",rwk:"罗瓦语",sa:"梵语",sad:"桑达韦语",sah:"萨哈语",sam:"萨马利亚阿拉姆语",saq:"桑布鲁语",sas:"萨萨克文",sat:"桑塔利语",sba:"甘拜语",sbp:"桑古语",sc:"萨丁语",scn:"西西里语",sco:"苏格兰语",sd:"信德语",sdh:"南库尔德语",se:"北方萨米语",see:"塞内卡语",seh:"塞纳语",sel:"塞尔库普语",ses:"东桑海语",sg:"桑戈语",sga:"古爱尔兰语",sh:"塞尔维亚-克罗地亚语",shi:"希尔哈语",shn:"掸语",shu:"乍得阿拉伯语",si:"僧伽罗语",sid:"悉达摩语",sk:"斯洛伐克语",sl:"斯洛文尼亚语",sm:"萨摩亚语",sma:"南萨米语",smj:"吕勒萨米语",smn:"伊纳里萨米语",sms:"斯科特萨米语",sn:"绍纳语",snk:"索宁克语",so:"索马里语",sog:"粟特语",sq:"阿尔巴尼亚语",sr:"塞尔维亚语",srn:"苏里南汤加语",srr:"塞雷尔语",ss:"斯瓦蒂语",ssy:"萨霍语",st:"南索托语",su:"巽他语",suk:"苏库马语",sus:"苏苏语",sux:"苏美尔语",sv:"瑞典语",sw:"斯瓦希里语","sw-CD":"刚果斯瓦希里语",swb:"科摩罗语",syc:"古典叙利亚语",syr:"叙利亚语",ta:"泰米尔语",te:"泰卢固语",tem:"泰姆奈语",teo:"特索语",ter:"特伦诺语",tet:"德顿语",tg:"塔吉克语",th:"泰语",ti:"提格利尼亚语",tig:"提格雷语",tiv:"蒂夫语",tk:"土库曼语",tkl:"托克劳语",tl:"他加禄语",tlh:"克林贡语",tli:"特林吉特语",tmh:"塔马奇克语",tn:"茨瓦纳语",to:"汤加语",tog:"尼亚萨汤加语",tpi:"托克皮辛语",tr:"土耳其语",trv:"赛德克语",ts:"聪加语",tsi:"钦西安语",tt:"鞑靼语",tum:"通布卡语",tvl:"图瓦卢语",tw:"契维语",twq:"北桑海语",ty:"塔希提语",tyv:"图瓦语",tzm:"塔马齐格特语",udm:"乌德穆尔特语",ug:"维吾尔语",uga:"乌加里特语",uk:"乌克兰语",umb:"翁本杜语",ur:"乌尔都语",uz:"乌兹别克语",vai:"瓦伊语",ve:"文达语",vep:"维普森语",vi:"越南语",vo:"沃拉普克语",vot:"沃提克语",vun:"温旧语",wa:"瓦隆语",wae:"瓦尔瑟语",wal:"瓦拉莫语",war:"瓦瑞语",was:"瓦绍语",wbp:"瓦尔皮瑞语",wo:"沃洛夫语",wuu:"吴语",xal:"卡尔梅克语",xh:"科萨语",xog:"索加语",yao:"瑶族语",yap:"雅浦语",yav:"洋卞语",ybb:"耶姆巴语",yi:"意第绪语",yo:"约鲁巴语",yue:"粤语",za:"壮语",zap:"萨波蒂克语",zbl:"布里斯符号",zen:"泽纳加语",zgh:"标准摩洛哥塔马塞特语",zh:"中文","zh-Hans":"现代标准汉语","zh-Hant":"台湾国语",zu:"祖鲁语",zun:"祖尼语",zza:"扎扎语"},scriptNames:{Cyrl:"西里尔文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"果鲁穆奇文",Tfng:"提非纳文",Vaii:"瓦依文",Hans:"简体",Hant:"繁体"}},"zh-HK":{rtl:false,languageNames:{aa:"阿法爾文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"阿塞拜疆文","az-Arab":"南阿塞拜疆文",ba:"巴什基爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布里多尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波斯尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰隆尼亞文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"克里米亞韃靼文",crs:"塞舌爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"奧地利德文","de-CH":"瑞士德語",del:"德拉瓦文",den:"斯拉夫文",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"澳洲英文","en-CA":"加拿大英文","en-GB":"英國英文","en-US":"美國英文",enm:"中古英文",eo:"世界語",es:"西班牙文","es-419":"拉丁美洲西班牙文","es-ES":"歐洲西班牙文","es-MX":"墨西哥西班牙文",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"加拿大法文","fr-CH":"瑞士法文",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特文",gl:"加里西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"瑞士德文",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"苗語",ho:"西里莫圖土文",hr:"克羅地亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"意大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"格魯吉亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"扎扎其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎納達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"克裡奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"老撾文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧歐文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"毛里裘斯克里奧爾文",mg:"馬拉加斯文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬拉雅拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬耳他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"比利時荷蘭文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"西非書面語言(N’ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"奧里雅文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"尼日利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"巴西葡萄牙文","pt-PT":"歐洲葡萄牙文",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦羅馬尼亞文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"阿羅馬尼亞語",rw:"盧旺達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛文尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"修納文",snk:"索尼基文",so:"索馬里文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"剛果史瓦希里文",swb:"葛摩文",syc:"古敘利亞文",syr:"敍利亞文",szl:"西利西亞文",ta:"泰米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"突尼西亞文",to:"湯加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏爾都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"瓦爾皮里文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"廣東話",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"摩洛哥標準塔馬齊格特文",zh:"中文","zh-Hans":"中文(簡體字)","zh-Hant":"中文(繁體字)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"西里爾文",Latn:"拉丁字母",Arab:"阿拉伯文",Guru:"古木基文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體字",Hant:"繁體字"}},"zh-TW":{rtl:false,languageNames:{aa:"阿法文",ab:"阿布哈茲文",ace:"亞齊文",ach:"阿僑利文",ada:"阿當莫文",ady:"阿迪各文",ae:"阿維斯塔文",aeb:"突尼斯阿拉伯文",af:"南非荷蘭文",afh:"阿弗里希利文",agq:"亞罕文",ain:"阿伊努文",ak:"阿坎文",akk:"阿卡德文",akz:"阿拉巴馬文",ale:"阿留申文",aln:"蓋格阿爾巴尼亞文",alt:"南阿爾泰文",am:"阿姆哈拉文",an:"阿拉貢文",ang:"古英文",anp:"昂加文",ar:"阿拉伯文","ar-001":"現代標準阿拉伯文",arc:"阿拉米文",arn:"馬普切文",aro:"阿拉奧納文",arp:"阿拉帕霍文",arq:"阿爾及利亞阿拉伯文",ars:"納吉迪阿拉伯文",arw:"阿拉瓦克文",ary:"摩洛哥阿拉伯文",arz:"埃及阿拉伯文",as:"阿薩姆文",asa:"阿蘇文",ase:"美國手語",ast:"阿斯圖里亞文",av:"阿瓦爾文",avk:"科塔瓦文",awa:"阿瓦文",ay:"艾馬拉文",az:"亞塞拜然文",ba:"巴什喀爾文",bal:"俾路支文",ban:"峇里文",bar:"巴伐利亞文",bas:"巴薩文",bax:"巴姆穆文",bbc:"巴塔克托巴文",bbj:"戈馬拉文",be:"白俄羅斯文",bej:"貝扎文",bem:"別姆巴文",bew:"貝塔維文",bez:"貝納文",bfd:"富特文",bfq:"巴達加文",bg:"保加利亞文",bgn:"西俾路支文",bho:"博傑普爾文",bi:"比斯拉馬文",bik:"比科爾文",bin:"比尼文",bjn:"班亞爾文",bkm:"康姆文",bla:"錫克錫卡文",bm:"班巴拉文",bn:"孟加拉文",bo:"藏文",bpy:"比什奴普萊利亞文",bqi:"巴赫蒂亞里文",br:"布列塔尼文",bra:"布拉杰文",brh:"布拉維文",brx:"博多文",bs:"波士尼亞文",bss:"阿庫色文",bua:"布里阿特文",bug:"布吉斯文",bum:"布魯文",byn:"比林文",byv:"梅敦巴文",ca:"加泰蘭文",cad:"卡多文",car:"加勒比文",cay:"卡尤加文",cch:"阿燦文",ccp:"查克馬文",ce:"車臣文",ceb:"宿霧文",cgg:"奇加文",ch:"查莫洛文",chb:"奇布查文",chg:"查加文",chk:"處奇斯文",chm:"馬里文",chn:"契奴克文",cho:"喬克托文",chp:"奇佩瓦揚文",chr:"柴羅基文",chy:"沙伊安文",ckb:"中庫德文",co:"科西嘉文",cop:"科普特文",cps:"卡皮茲文",cr:"克里文",crh:"土耳其文(克里米亞半島)",crs:"塞席爾克里奧爾法文",cs:"捷克文",csb:"卡舒布文",cu:"宗教斯拉夫文",cv:"楚瓦什文",cy:"威爾斯文",da:"丹麥文",dak:"達科他文",dar:"達爾格瓦文",dav:"台塔文",de:"德文","de-AT":"德文(奧地利)","de-CH":"高地德文(瑞士)",del:"德拉瓦文",den:"斯拉夫",dgr:"多格里布文",din:"丁卡文",dje:"扎爾馬文",doi:"多格來文",dsb:"下索布文",dtp:"中部杜順文",dua:"杜亞拉文",dum:"中古荷蘭文",dv:"迪維西文",dyo:"朱拉文",dyu:"迪尤拉文",dz:"宗卡文",dzg:"達薩文",ebu:"恩布文",ee:"埃維文",efi:"埃菲克文",egl:"埃米利安文",egy:"古埃及文",eka:"艾卡朱克文",el:"希臘文",elx:"埃蘭文",en:"英文","en-AU":"英文(澳洲)","en-CA":"英文(加拿大)","en-GB":"英文(英國)","en-US":"英文(美國)",enm:"中古英文",eo:"世界文",es:"西班牙文","es-419":"西班牙文(拉丁美洲)","es-ES":"西班牙文(西班牙)","es-MX":"西班牙文(墨西哥)",esu:"中尤皮克文",et:"愛沙尼亞文",eu:"巴斯克文",ewo:"依汪都文",ext:"埃斯特雷馬杜拉文",fa:"波斯文",fan:"芳族文",fat:"芳蒂文",ff:"富拉文",fi:"芬蘭文",fil:"菲律賓文",fit:"托爾訥芬蘭文",fj:"斐濟文",fo:"法羅文",fon:"豐文",fr:"法文","fr-CA":"法文(加拿大)","fr-CH":"法文(瑞士)",frc:"卡真法文",frm:"中古法文",fro:"古法文",frp:"法蘭克-普羅旺斯文",frr:"北弗里西亞文",frs:"東弗里西亞文",fur:"弗留利文",fy:"西弗里西亞文",ga:"愛爾蘭文",gaa:"加族文",gag:"加告茲文",gan:"贛語",gay:"加約文",gba:"葛巴亞文",gbz:"索羅亞斯德教達里文",gd:"蘇格蘭蓋爾文",gez:"吉茲文",gil:"吉爾伯特群島文",gl:"加利西亞文",glk:"吉拉基文",gmh:"中古高地德文",gn:"瓜拉尼文",goh:"古高地德文",gom:"孔卡尼文",gon:"岡德文",gor:"科隆達羅文",got:"哥德文",grb:"格列博文",grc:"古希臘文",gsw:"德文(瑞士)",gu:"古吉拉特文",guc:"瓦尤文",gur:"弗拉弗拉文",guz:"古西文",gv:"曼島文",gwi:"圭契文",ha:"豪撒文",hai:"海達文",hak:"客家話",haw:"夏威夷文",he:"希伯來文",hi:"印地文",hif:"斐濟印地文",hil:"希利蓋農文",hit:"赫梯文",hmn:"孟文",ho:"西里莫圖土文",hr:"克羅埃西亞文",hsb:"上索布文",hsn:"湘語",ht:"海地文",hu:"匈牙利文",hup:"胡帕文",hy:"亞美尼亞文",hz:"赫雷羅文",ia:"國際文",iba:"伊班文",ibb:"伊比比奧文",id:"印尼文",ie:"國際文(E)",ig:"伊布文",ii:"四川彝文",ik:"依奴皮維克文",ilo:"伊洛闊文",inh:"印古什文",io:"伊多文",is:"冰島文",it:"義大利文",iu:"因紐特文",izh:"英格里亞文",ja:"日文",jam:"牙買加克里奧爾英文",jbo:"邏輯文",jgo:"恩格姆巴文",jmc:"馬恰美文",jpr:"猶太教-波斯文",jrb:"猶太阿拉伯文",jut:"日德蘭文",jv:"爪哇文",ka:"喬治亞文",kaa:"卡拉卡爾帕克文",kab:"卡比爾文",kac:"卡琴文",kaj:"卡捷文",kam:"卡姆巴文",kaw:"卡威文",kbd:"卡巴爾達文",kbl:"卡念布文",kcg:"卡塔布文",kde:"馬孔德文",kea:"卡布威爾第文",ken:"肯揚文",kfo:"科羅文",kg:"剛果文",kgp:"坎剛文",kha:"卡西文",kho:"和闐文",khq:"西桑海文",khw:"科瓦文",ki:"吉庫尤文",kiu:"北紮紮其文",kj:"廣亞馬文",kk:"哈薩克文",kkj:"卡庫文",kl:"格陵蘭文",kln:"卡倫金文",km:"高棉文",kmb:"金邦杜文",kn:"坎那達文",ko:"韓文",koi:"科米-彼爾米亞克文",kok:"貢根文",kos:"科斯雷恩文",kpe:"克佩列文",kr:"卡努里文",krc:"卡拉柴-包爾卡爾文",kri:"塞拉利昂克裏奧爾文",krj:"基那來阿文",krl:"卡累利阿文",kru:"庫魯科文",ks:"喀什米爾文",ksb:"尚巴拉文",ksf:"巴菲亞文",ksh:"科隆文",ku:"庫德文",kum:"庫密克文",kut:"庫特奈文",kv:"科米文",kw:"康瓦耳文",ky:"吉爾吉斯文",la:"拉丁文",lad:"拉迪諾文",lag:"朗吉文",lah:"拉亨達文",lam:"蘭巴文",lb:"盧森堡文",lez:"列茲干文",lfn:"新共同語言",lg:"干達文",li:"林堡文",lij:"利古里亞文",liv:"利伏尼亞文",lkt:"拉科塔文",lmo:"倫巴底文",ln:"林加拉文",lo:"寮文",lol:"芒戈文",lou:"路易斯安那克里奧爾文",loz:"洛齊文",lrc:"北盧爾文",lt:"立陶宛文",ltg:"拉特加萊文",lu:"魯巴加丹加文",lua:"魯巴魯魯亞文",lui:"路易塞諾文",lun:"盧恩達文",luo:"盧奧文",lus:"米佐文",luy:"盧雅文",lv:"拉脫維亞文",lzh:"文言文",lzz:"拉茲文",mad:"馬都拉文",maf:"馬法文",mag:"馬加伊文",mai:"邁蒂利文",mak:"望加錫文",man:"曼丁哥文",mas:"馬賽文",mde:"馬巴文",mdf:"莫克沙文",mdr:"曼達文",men:"門德文",mer:"梅魯文",mfe:"克里奧文(模里西斯)",mg:"馬達加斯加文",mga:"中古愛爾蘭文",mgh:"馬夸文",mgo:"美塔文",mh:"馬紹爾文",mi:"毛利文",mic:"米克馬克文",min:"米南卡堡文",mk:"馬其頓文",ml:"馬來亞拉姆文",mn:"蒙古文",mnc:"滿族文",mni:"曼尼普爾文",moh:"莫霍克文",mos:"莫西文",mr:"馬拉地文",mrj:"西馬里文",ms:"馬來文",mt:"馬爾他文",mua:"蒙當文",mus:"克里克文",mwl:"米蘭德斯文",mwr:"馬瓦里文",mwv:"明打威文",my:"緬甸文",mye:"姆耶內文",myv:"厄爾茲亞文",mzn:"馬贊德蘭文",na:"諾魯文",nan:"閩南語",nap:"拿波里文",naq:"納馬文",nb:"巴克摩挪威文",nd:"北地畢列文",nds:"低地德文","nds-NL":"低地薩克遜文",ne:"尼泊爾文","new":"尼瓦爾文",ng:"恩東加文",nia:"尼亞斯文",niu:"紐埃文",njo:"阿沃那加文",nl:"荷蘭文","nl-BE":"佛蘭芒文",nmg:"夸西奧文",nn:"耐諾斯克挪威文",nnh:"恩甘澎文",no:"挪威文",nog:"諾蓋文",non:"古諾爾斯文",nov:"諾維亞文",nqo:"曼德文字 (N’Ko)",nr:"南地畢列文",nso:"北索托文",nus:"努埃爾文",nv:"納瓦霍文",nwc:"古尼瓦爾文",ny:"尼揚賈文",nym:"尼揚韋齊文",nyn:"尼揚科萊文",nyo:"尼奧囉文",nzi:"尼茲馬文",oc:"奧克西坦文",oj:"奧杰布瓦文",om:"奧羅莫文",or:"歐迪亞文",os:"奧塞提文",osa:"歐塞奇文",ota:"鄂圖曼土耳其文",pa:"旁遮普文",pag:"潘加辛文",pal:"巴列維文",pam:"潘帕嘉文",pap:"帕皮阿門托文",pau:"帛琉文",pcd:"庇卡底文",pcm:"奈及利亞皮欽文",pdc:"賓夕法尼亞德文",pdt:"門諾低地德文",peo:"古波斯文",pfl:"普法爾茨德文",phn:"腓尼基文",pi:"巴利文",pl:"波蘭文",pms:"皮埃蒙特文",pnt:"旁狄希臘文",pon:"波那貝文",prg:"普魯士文",pro:"古普羅旺斯文",ps:"普什圖文",pt:"葡萄牙文","pt-BR":"葡萄牙文(巴西)","pt-PT":"葡萄牙文(葡萄牙)",qu:"蓋楚瓦文",quc:"基切文",qug:"欽博拉索海蘭蓋丘亞文",raj:"拉賈斯坦諸文",rap:"復活島文",rar:"拉羅通加文",rgn:"羅馬格諾里文",rif:"里菲亞諾文",rm:"羅曼斯文",rn:"隆迪文",ro:"羅馬尼亞文","ro-MD":"摩爾多瓦文",rof:"蘭博文",rom:"吉普賽文",root:"根語言",rtm:"羅圖馬島文",ru:"俄文",rue:"盧森尼亞文",rug:"羅維阿納文",rup:"羅馬尼亞語系",rw:"盧安達文",rwk:"羅瓦文",sa:"梵文",sad:"桑達韋文",sah:"雅庫特文",sam:"薩瑪利亞阿拉姆文",saq:"薩布魯文",sas:"撒撒克文",sat:"桑塔利文",saz:"索拉什特拉文",sba:"甘拜文",sbp:"桑古文",sc:"撒丁文",scn:"西西里文",sco:"蘇格蘭文",sd:"信德文",sdc:"薩丁尼亞-薩薩里文",sdh:"南庫德文",se:"北薩米文",see:"塞訥卡文",seh:"賽納文",sei:"瑟里文",sel:"塞爾庫普文",ses:"東桑海文",sg:"桑戈文",sga:"古愛爾蘭文",sgs:"薩莫吉希亞文",sh:"塞爾維亞克羅埃西亞文",shi:"希爾哈文",shn:"撣文",shu:"阿拉伯文(查德)",si:"僧伽羅文",sid:"希達摩文",sk:"斯洛伐克文",sl:"斯洛維尼亞文",sli:"下西利西亞文",sly:"塞拉亞文",sm:"薩摩亞文",sma:"南薩米文",smj:"魯勒薩米文",smn:"伊納里薩米文",sms:"斯科特薩米文",sn:"紹納文",snk:"索尼基文",so:"索馬利文",sog:"索格底亞納文",sq:"阿爾巴尼亞文",sr:"塞爾維亞文",srn:"蘇拉南東墎文",srr:"塞雷爾文",ss:"斯瓦特文",ssy:"薩霍文",st:"塞索托文",stq:"沙特菲士蘭文",su:"巽他文",suk:"蘇庫馬文",sus:"蘇蘇文",sux:"蘇美文",sv:"瑞典文",sw:"史瓦希里文","sw-CD":"史瓦希里文(剛果)",swb:"葛摩文",syc:"古敘利亞文",syr:"敘利亞文",szl:"西利西亞文",ta:"坦米爾文",tcy:"圖盧文",te:"泰盧固文",tem:"提姆文",teo:"特索文",ter:"泰雷諾文",tet:"泰頓文",tg:"塔吉克文",th:"泰文",ti:"提格利尼亞文",tig:"蒂格雷文",tiv:"提夫文",tk:"土庫曼文",tkl:"托克勞文",tkr:"查庫爾文",tl:"塔加路族文",tlh:"克林貢文",tli:"特林基特文",tly:"塔里什文",tmh:"塔馬奇克文",tn:"塞茲瓦納文",to:"東加文",tog:"東加文(尼亞薩)",tpi:"托比辛文",tr:"土耳其文",tru:"圖羅尤文",trv:"太魯閣文",ts:"特松加文",tsd:"特薩克尼恩文",tsi:"欽西安文",tt:"韃靼文",ttt:"穆斯林塔特文",tum:"圖姆布卡文",tvl:"吐瓦魯文",tw:"特威文",twq:"北桑海文",ty:"大溪地文",tyv:"圖瓦文",tzm:"中阿特拉斯塔馬塞特文",udm:"烏德穆爾特文",ug:"維吾爾文",uga:"烏加列文",uk:"烏克蘭文",umb:"姆本杜文",ur:"烏都文",uz:"烏茲別克文",vai:"瓦伊文",ve:"溫達文",vec:"威尼斯文",vep:"維普森文",vi:"越南文",vls:"西佛蘭德文",vmf:"美茵-法蘭克尼亞文",vo:"沃拉普克文",vot:"沃提克文",vro:"佛羅文",vun:"溫舊文",wa:"瓦隆文",wae:"瓦爾瑟文",wal:"瓦拉莫文",war:"瓦瑞文",was:"瓦紹文",wbp:"沃皮瑞文",wo:"沃洛夫文",wuu:"吳語",xal:"卡爾梅克文",xh:"科薩文",xmf:"明格列爾文",xog:"索加文",yao:"瑤文",yap:"雅浦文",yav:"洋卞文",ybb:"耶姆巴文",yi:"意第緒文",yo:"約魯巴文",yrl:"奈恩加圖文",yue:"粵語",za:"壯文",zap:"薩波特克文",zbl:"布列斯符號",zea:"西蘭文",zen:"澤納加文",zgh:"標準摩洛哥塔馬塞特文",zh:"中文","zh-Hans":"中文(簡體)","zh-Hant":"中文(繁體)",zu:"祖魯文",zun:"祖尼文",zza:"扎扎文"},scriptNames:{Cyrl:"斯拉夫文",Latn:"拉丁文",Arab:"阿拉伯文",Guru:"古魯穆奇文",Tfng:"提非納文",Vaii:"瓦依文",Hans:"簡體",Hant:"繁體"}}};
24751
24752         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"};
24753
24754         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"},{shortcuts:["map_data.highlight_edits.key"],text:"shortcuts.browsing.display_options.highlight_edits"}]},{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"}]}]}];
24755
24756         var dataTerritoryLanguages = {ac:["en"],ad:["ca","es","fr"],ae:["ar","en","ml","ps","bal","fa"],af:["fa","ps","haz","uz-Arab","tk","prd","bal","bgn","ug","kk-Arab"],ag:["en","pt"],ai:["en"],al:["sq","el","mk"],am:["hy","ku","az"],ao:["pt","umb","kmb","ln"],aq:["und"],ar:["es","en","cy","gn"],as:["sm","en"],at:["de","bar","en","fr","it","hr","sl","hu"],au:["en","zh-Hant","it","wbp"],aw:["nl","pap","en"],ax:["sv"],az:["az","az-Cyrl","tly","ku","ttt","tkr"],ba:["bs","bs-Cyrl","en","hr","sr","sr-Latn"],bb:["en"],bd:["bn","en","rkt","syl","ccp","my","grt","mro","mni"],be:["en","nl","fr","de","vls","wa"],bf:["mos","dyu","fr","ff","ff-Adlm"],bg:["bg","en","ru","tr","de"],bh:["ar","ml"],bi:["rn","fr","sw","en"],bj:["fr","fon","yo"],bl:["fr"],bm:["en"],bn:["ms","zh-Hant","ms-Arab","en"],bo:["es","qu","ay","gn","aro"],bq:["pap","nl"],br:["pt","en","de","it","ja","es","ko","kgp","gub","yrl","xav"],bs:["en"],bt:["dz","ne","tsj","en","lep"],bv:["und"],bw:["en","tn","af"],by:["be","ru"],bz:["en","es"],ca:["en","fr","it","de","pdt","cr","crk","yi","iu","iu-Latn","moe","crj","atj","crl","csw","crm","ikt","moh","dgr","den","scs","nsk","chp","gwi"],cc:["ms-Arab","en"],cd:["sw","lua","fr","ln","lu","kg","lol","rw"],cf:["fr","sg","ln"],cg:["fr","ln"],ch:["de","gsw","en","fr","it","lmo","pt","rm","rmo","wae"],ci:["fr","bci","sef","dnj","kfo","bqv"],ck:["en"],cl:["es","en","arn"],cm:["fr","en","bum","ff","ewo","ybb","bbj","nnh","bkm","bas","bax","byv","mua","maf","bfd","bss","kkj","dua","mgo","ar","jgo","ksf","agq","ha-Arab","nmg","yav","ff-Adlm"],cn:["zh","wuu","yue-Hans","hsn","hak","nan","gan","ii","ug","za","mn-Mong","bo","ko","kk-Arab","lis","ky-Arab","nxq","khb","tdd","lcp","en","ru","vi","uz-Cyrl","lzh"],co:["es","guc"],cp:["und"],cr:["es"],cu:["es"],cv:["kea","pt"],cw:["pap","nl","es"],cx:["en"],cy:["el","en","tr","fr","hy","ar"],cz:["cs","en","sk","de","pl"],de:["de","en","fr","bar","nds","nl","it","es","ru","vmf","tr","gsw","da","swg","hr","ku","el","ksh","pl","hsb","frr","dsb","frs","stq","pfl"],dg:["en"],dj:["aa","so","ar","fr"],dk:["da","en","de","sv","fo","kl","jut"],dm:["en"],"do":["es","en"],dz:["arq","ar","fr","kab","en"],ea:["es"],ec:["es","qu","qug"],ee:["et","ru","en","fi","vro"],eg:["ar","arz","en","el"],eh:["ar"],er:["ti","en","tig","ar","aa","ssy","byn"],es:["es","en","ca","gl","eu","ast","ext","an"],et:["en","am","om","so","ti","sid","wal","aa"],fi:["fi","en","sv","de","ru","et","rmf","se","smn","sms"],fj:["en","hi","hif","fj","rtm"],fk:["en"],fm:["en","chk","pon","kos","yap","uli"],fo:["fo"],fr:["fr","en","es","de","oc","it","pt","pcd","gsw","br","co","ca","eu","nl","frp","ia"],ga:["fr","puu"],gb:["en","fr","de","sco","pa","cy","bn","zh-Hant","syl","el","it","ks","gd","yi","ml","ga","kw"],gd:["en"],ge:["ka","xmf","ru","hy","ab","os","ku"],gf:["fr","gcr","zh-Hant"],gg:["en"],gh:["ak","en","ee","abr","gur","ada","gaa","nzi","ha","saf","ff","ff-Adlm"],gi:["en","es"],gl:["kl","da"],gm:["en","man","ff","ff-Adlm"],gn:["fr","ff","man-Nkoo","sus","nqo","kpe","ff-Adlm"],gp:["fr"],gq:["es","fan","fr","bvb","pt"],gr:["el","en","fr","de","pnt","mk","tr","bg","sq","tsd"],gs:["und"],gt:["es","quc"],gu:["en","ch"],gw:["pt","knf","ff","ff-Adlm"],gy:["en"],hk:["zh-Hant","yue","en","zh"],hm:["und"],hn:["es","en"],hr:["hr","en","it"],ht:["ht","fr"],hu:["hu","en","de","fr","ro","hr","sk","sl"],ic:["es"],id:["id","jv","su","mad","ms-Arab","min","bew","ban","bug","bjn","ace","sas","bbc","zh-Hant","mak","ljp","rej","gor","nij","kge","aoz","kvr","lbw","gay","rob","mdr","sxn","sly","mwv"],ie:["en","ga","fr"],il:["he","en","ar","ru","ro","yi","pl","lad","hu","am","ti","ml"],im:["en","gv"],"in":["hi","en","bn","te","mr","ta","ur","gu","kn","ml","or","pa","bho","awa","as","bgc","mag","mai","mwr","hne","dcc","bjj","ne","sat","wtm","rkt","ks","kok","gom","swv","gbm","lmn","sd","gon","kfy","doi","kru","sck","wbq","xnr","khn","tcy","wbr","brx","noe","bhb","mni","raj","hoc","mtr","unr","bhi","hoj","kha","kfr","grt","unx","bfy","srx","saz","ccp","sd-Deva","bfq","njo","ria","bo","bpy","bft","bra","lep","btv","lif","lah","sa","kht","dv","dz"],io:["en"],iq:["ar","en","ckb","az-Arab","fa","lrc","syr"],ir:["fa","az-Arab","mzn","glk","ckb","sdh","tk","lrc","ar","bal","rmt","bqi","luz","lki","bgn","prd","hy","ps","ka","gbz","kk-Arab"],is:["is","da"],it:["it","en","fr","sc","de","vec","nap","lij","scn","sdc","sl","fur","egl","ca","el","lmo","pms","hr","rgn"],je:["en"],jm:["en","jam"],jo:["ar","en"],jp:["ja","ryu","ko"],ke:["sw","en","ki","luy","luo","kam","kln","guz","mer","mas","ebu","so","dav","teo","pko","om","saq","ar","pa","gu"],kg:["ky","ru"],kh:["km","cja","kdt"],ki:["en","gil"],km:["ar","fr","zdj","wni"],kn:["en"],kp:["ko"],kr:["ko"],kw:["ar"],ky:["en"],kz:["ru","kk","en","de","ug-Cyrl"],la:["lo","kjg","kdt"],lb:["ar","en","hy","ku-Arab","fr"],lc:["en"],li:["de","gsw","wae"],lk:["si","ta","en"],lr:["en","kpe","vai","men","ff","ff-Adlm","vai-Latn"],ls:["st","en","zu","ss","xh"],lt:["lt","ru","en","de","sgs"],lu:["fr","lb","de","en","pt"],lv:["lv","en","ru","ltg"],ly:["ar"],ma:["ary","ar","zgh","fr","en","tzm","shi","shi-Latn","rif","rif-Latn","es"],mc:["fr"],md:["ro","uk","bg","gag","ru"],me:["sr-Latn","sq","sr"],mf:["fr"],mg:["mg","fr","en"],mh:["en","mh"],mk:["mk","sq","tr"],ml:["bm","fr","ffm","snk","mwk","ses","tmh","bm-Nkoo","khq","dtm","kao","ar","bmq","bze"],mm:["my","shn","kac","mnw","kht"],mn:["mn","kk-Arab","zh","ru","ug-Cyrl"],mo:["zh-Hant","pt","zh","en"],mp:["en","ch"],mq:["fr"],mr:["ar","fr","ff","wo","ff-Adlm"],ms:["en"],mt:["mt","en","it","fr"],mu:["mfe","en","bho","ur","fr","ta"],mv:["dv"],mw:["en","ny","tum","tog","zu"],mx:["es","en","yua","nhe","nhw","maz","nch","sei"],my:["ms","en","zh-Hant","ta","iba","jv","zmi","dtp","ml","bug","bjn"],mz:["pt","vmw","ndc","ts","ngl","seh","mgh","rng","ny","yao","sw","zu"],na:["af","kj","ng","naq","hz","en","de","tn"],nc:["fr"],ne:["ha","fr","dje","fuq","tmh","ar","twq","ff","ff-Adlm"],nf:["en"],ng:["en","pcm","ha","ig","yo","fuv","tiv","efi","ibb","ha-Arab","bin","kaj","kcg","ar","cch","amo","ff","ff-Adlm"],ni:["es"],nl:["nl","en","de","fr","nds","li","fy","gos","id","zea","rif-Latn","tr"],no:["nb","nn","se"],np:["ne","mai","bho","new","jml","en","dty","awa","thl","bap","tdg","thr","lif","mgp","thq","mrd","bfy","xsr","rjs","taj","hi","gvr","bo","tkt","tdh","bn","unr-Deva","lep"],nr:["en","na"],nu:["en","niu"],nz:["en","mi"],om:["ar","bal","fa"],pa:["es","en","zh-Hant"],pe:["es","qu","ay"],pf:["fr","ty","zh-Hant"],pg:["tpi","en","ho"],ph:["en","fil","es","ceb","ilo","hil","bik","war","bhk","pam","pag","mdh","tsg","zh-Hant","cps","krj","bto","hnn","tbw","bku"],pk:["ur","pa-Arab","en","lah","ps","sd","skr","bal","brh","hno","fa","bgn","hnd","tg-Arab","gju","bft","kvx","khw","mvy","gjk","kxp","ks","btv"],pl:["pl","en","de","ru","szl","be","uk","csb","sli","lt"],pm:["fr","en"],pn:["en"],pr:["es","en"],ps:["ar"],pt:["pt","en","fr","es","gl"],pw:["pau","en"],py:["gn","es","de"],qa:["ar","fa","ml"],re:["fr","rcf","ta"],ro:["ro","en","fr","es","hu","de","tr","sr-Latn","bg","el","pl"],rs:["sr","sr-Latn","sq","hu","ro","hr","sk","uk"],ru:["ru","tt","ba","cv","hy","ce","av","udm","chm","os","sah","kbd","myv","dar","bua","mdf","kum","kv","lez","krc","inh","tyv","az-Cyrl","ady","krl","lbe","koi","mrj","alt","fi","sr-Latn","vep","mn","izh","cu","vot"],rw:["rw","en","fr"],sa:["ar","ars"],sb:["en","rug"],sc:["crs","fr","en"],sd:["ar","en","bej","fvr","ha-Arab","mls","fia","zag"],se:["sv","en","fi","fit","se","rmu","yi","smj","sma","ia"],sg:["en","zh","ms","ta","ml","pa"],sh:["en"],si:["sl","hr","en","de","hu","it"],sj:["nb","ru"],sk:["sk","cs","en","de","hu","uk","pl"],sl:["kri","en","men","tem","ff","ff-Adlm"],sm:["it","eo"],sn:["wo","fr","ff","srr","dyo","sav","mfv","bjt","snf","knf","bsc","mey","tnr","ff-Adlm"],so:["so","ar","sw","om"],sr:["nl","srn","zh-Hant"],ss:["ar","en","nus"],st:["pt"],sv:["es"],sx:["en","es","vic","nl"],sy:["ar","ku","fr","hy","syr"],sz:["en","ss","zu","ts"],ta:["en"],tc:["en"],td:["fr","ar"],tf:["fr"],tg:["fr","ee","ife"],th:["th","en","tts","nod","sou","mfa","zh-Hant","kxm","kdt","mnw","shn","lcp","lwl"],tj:["tg","ru","fa","ar"],tk:["en","tkl"],tl:["pt","tet"],tm:["tk","ru","uz","ku"],tn:["aeb","ar","fr"],to:["to","en"],tr:["tr","en","ku","zza","kbd","az","az-Arab","ar","bgx","bg","ady","kiu","hy","ka","lzz","sr-Latn","sq","ab","el","tru","uz","ky-Latn","kk"],tt:["en","es"],tv:["tvl","en"],tw:["zh-Hant","trv"],tz:["sw","en","suk","nym","kde","bez","ksb","mas","mgy","asa","lag","jmc","rof","vun","rwk","sbp"],ua:["uk","ru","pl","yi","rue","be","crh","ro","bg","tr","hu","el"],ug:["sw","lg","nyn","cgg","xog","en","teo","laj","ach","myx","rw","ttj","hi"],um:["en"],us:["en","es","zh-Hant","fr","de","fil","it","vi","ko","ru","nv","yi","pdc","haw","frc","chr","esu","dak","cho","lkt","ik","mus","cic","osa"],uy:["es"],uz:["uz","uz-Cyrl","ru","kaa","tr"],va:["it","la"],vc:["en"],ve:["es"],vg:["en"],vi:["en"],vn:["vi","zh-Hant","cjm"],vu:["bi","en","fr"],wf:["wls","fr","fud"],ws:["sm","en"],xk:["sq","aln","sr","sr-Latn"],ye:["ar","en"],yt:["swb","fr","buc","sw"],za:["en","zu","xh","af","nso","tn","st","ts","ss","ve","hi","nr","sw"],zm:["bem","en","ny","loz"],zw:["sn","en","nd","mxc","ndc","kck","ny","ve","tn"]};
24757
24758         var type$1 = "FeatureCollection";
24759         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]]]}}];
24760         var dataImperial = {
24761         type: type$1,
24762         features: features
24763         };
24764
24765         var type$2 = "FeatureCollection";
24766         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]]]}}];
24767         var dataMPH = {
24768         type: type$2,
24769         features: features$1
24770         };
24771
24772         var type$3 = "FeatureCollection";
24773         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],[58.49,-1.62],[49.26,-1.62],[49.3,-8.23],[57.78,-8.27],[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]]]}},{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-130.21,-25.16],[-129.99,-25.16],[-129.99,-24.98],[-130.21,-24.98],[-130.21,-25.16]]]}}];
24774         var dataDriveLeft = {
24775         type: type$3,
24776         features: features$2
24777         };
24778
24779         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:{point:"Flip the direction of this point.",points:"Flip the direction of these points.",line:"Make this line go in the opposite direction.",lines:"Make these lines go in the opposite direction.",features:"Flip the directions of these features."},key:"V",annotation:{point:"Reversed a point.",points:"Reversed multiple points.",line:"Reversed a line.",lines:"Reversed multiple lines.",features:"Reversed multiple features."}},split:{title:"Split",description:{line:"Split this line into two at this node.",area:"Split the boundary of this area into two.",multiple:"Split the lines/area boundaries at this node into two."},key:"X",annotation:{line:"Split a line.",area:"Split an area boundary.",multiple:"Split {n} lines/area boundaries."},not_eligible:"Lines can't be split at their beginning or end.",multiple_ways:"There are too many lines here to split.",connected_to_hidden:"This can't be split because it is connected to a hidden feature."},restriction:{annotation:{create:"Added a turn restriction","delete":"Deleted a turn restriction"}},extract:{title:"Extract",key:"E",description:{vertex:{single:"Extract this point from its parent lines/areas."},area:{single:"Extract a point from this area."}},annotation:{single:"Extracted a point."},too_large:{area:{single:"A point can't be extracted from this area because not enough of it is currently visible."}},restriction:{vertex:{single:"This point can't be extracted because it would damage a \"{relation}\" relation."}},connected_to_hidden:{vertex:{single:"This point can't be extracted because it is connected to a hidden feature."}}}},restriction:{controls:{distance:"Distance",distance_up_to:"Up to {distance}",via:"Via",via_node_only:"Node only",via_up_to_one:"Up to 1 way",via_up_to_two:"Up to 2 ways"},help:{indirect:"(indirect)",turn:{no_left_turn:"NO Left Turn {indirect}",no_right_turn:"NO Right Turn {indirect}",no_u_turn:"NO U-Turn {indirect}",no_straight_on:"NO Straight On {indirect}",only_left_turn:"ONLY Left Turn {indirect}",only_right_turn:"ONLY Right Turn {indirect}",only_u_turn:"ONLY U-Turn {indirect}",only_straight_on:"ONLY Straight On {indirect}",allowed_left_turn:"Left Turn Allowed {indirect}",allowed_right_turn:"Right Turn Allowed {indirect}",allowed_u_turn:"U-Turn Allowed {indirect}",allowed_straight_on:"Straight On Allowed {indirect}"},from:"FROM",via:"VIA",to:"TO",from_name:"{from} {fromName}",from_name_to_name:"{from} {fromName} {to} {toName}",via_names:"{via} {viaNames}",select_from:"Click to select a {from} segment",select_from_name:"Click to select {from} {fromName}",toggle:"Click for \"{turn}\""}},undo:{tooltip:"Undo: {action}",nothing:"Nothing to undo."},redo:{tooltip:"Redo: {action}",nothing:"Nothing to redo."},tooltip_keyhint:"Shortcut:",browser_notice:"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.",translate:{translate:"Translate",localized_translation_label:"Multilingual Name",localized_translation_language:"Choose language",localized_translation_name:"Name",language_and_code:"{language} ({code})"},zoom_in_edit:"Zoom in to edit",login:"Log In",logout:"Log Out",loading_auth:"Connecting to OpenStreetMap...",report_a_bug:"Report a bug",help_translate:"Help translate",sidebar:{key:"`",tooltip:"Toggle the sidebar."},feature_info:{hidden_warning:"{count} hidden features",hidden_details:"These features are currently hidden: {details}"},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_problem_faq:"Report an Imagery Problem",reset:"reset",reset_all:"Reset All",display_options:"Display Options",brightness:"Brightness",contrast:"Contrast",saturation:"Saturation",sharpness:"Sharpness",minimap:{description:"Show Minimap",tooltip:"Show a zoomed out map to help locate the area currently displayed.",key:"/"},panel:{description:"Show Detail Panel",tooltip:"Show advanced background information."},fix_misalignment:"Adjust imagery offset",offset:"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters."},map_data:{title:"Map Data",description:"Map Data",key:"F",data_layers:"Data Layers",layers:{osm:{tooltip:"Map data from OpenStreetMap",title:"OpenStreetMap data"},notes:{tooltip:"Note data from OpenStreetMap",title:"OpenStreetMap notes"},keepRight:{tooltip:"Automatically detected map issues from keepright.at",title:"KeepRight Issues"},improveOSM:{tooltip:"Missing data automatically detected by improveosm.org",title:"ImproveOSM Issues"},custom:{tooltip:"Drag and drop a data file onto the page, or click the button to setup",title:"Custom Map Data",zoom:"Zoom to data"}},style_options:"Style Options",highlight_edits:{key:"G"},map_features:"Map Features",autohidden:"These features have been automatically hidden because too many would be shown on the screen.  You can zoom in to edit them.",osmhidden:"These features have been automatically hidden because the OpenStreetMap layer is hidden."},visual_diff:{highlight_edits:{description:"Highlight Changes",tooltip:"Outline edited features"}},photo_overlays:{title:"Photo Overlays",traffic_signs:{title:"Traffic Signs"},photo_type:{flat:{title:"Flat Photos",tooltip:"Traditional photos"},panoramic:{title:"Panoramic Photos",tooltip:"360° photos"}}},feature:{points:{description:"Points",tooltip:"Points of Interest"},traffic_roads:{description:"Traffic Roads",tooltip:"Highways, Streets, etc."},service_roads:{description:"Service Roads",tooltip:"Service Roads, Parking Aisles, Tracks, etc."},paths:{description:"Paths",tooltip:"Sidewalks, Foot Paths, Cycle Paths, etc."},buildings:{description:"Buildings",tooltip:"Buildings, Shelters, Garages, etc."},building_parts:{description:"Building Parts",tooltip:"3D Building and Roof Components"},indoor:{description:"Indoor Features",tooltip:"Rooms, Corridors, Stairwells, etc."},landuse:{description:"Landuse Features",tooltip:"Forests, Farmland, Parks, Residential, Commercial, etc."},boundaries:{description:"Boundaries",tooltip:"Administrative Boundaries"},water:{description:"Water Features",tooltip:"Rivers, Lakes, Ponds, Basins, etc."},rail:{description:"Rail Features",tooltip:"Railways"},pistes:{description:"Pistes",tooltip:"Ski Slopes, Sled Runs, Ice Skating Trails, etc."},aerialways:{description:"Aerial Features",tooltip:"Chair Lifts, Gondolas, Zip Lines, etc."},power:{description:"Power Features",tooltip:"Power Lines, Power Plants, Substations, etc."},past_future:{description:"Past/Future Features",tooltip:"Proposed, Construction, Abandoned, Demolished, etc."},others:{description:"Other Features",tooltip:"Everything Else"}},area_fill:{wireframe:{description:"No Fill (Wireframe)",tooltip:"Enabling wireframe mode makes it easy to see the background imagery.",key:"W"},partial:{description:"Partial Fill",tooltip:"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},full:{description:"Full Fill",tooltip:"Areas are drawn fully filled."}},settings:{custom_background:{tooltip:"Edit custom background",header:"Custom Background Settings",instructions:"Enter a tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme\n   {-y} or {ty} for flipped TMS-style Y coordinates\n   {u} for quadtile scheme\n   {switch:a,b,c} for DNS server multiplexing\n\nExample:\n{example}",template:{placeholder:"Enter a url template"}},custom_data:{tooltip:"Edit custom data layer",header:"Custom Map Data Settings",file:{instructions:"Choose a local data file. Supported types are:\n   .gpx, .kml, .geojson, .json",label:"Browse files"},or:"Or",url:{instructions:"Enter a data file URL or vector tile URL template. Valid tokens are:\n   {zoom} or {z}, {x}, {y} for Z/X/Y tile scheme",placeholder:"Enter a url"}}},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_map_features:{title:"Map Features",tooltip:"Map features from Mapillary",request_data:"Request Data"},mapillary:{title:"Mapillary",signs:{tooltip:"Traffic signs from Mapillary"},view_on_mapillary:"View this image on Mapillary"},openstreetcam_images:{tooltip:"Street-level photos from OpenStreetCam"},openstreetcam:{title:"OpenStreetCam",view_on_openstreetcam:"View this image on OpenStreetCam"},note:{note:"Note",title:"Edit note",anonymous:"anonymous",closed:"(Closed)",commentTitle:"Comments",status:{opened:"opened {when}",reopened:"reopened {when}",commented:"commented {when}",closed:"closed {when}"},newComment:"New Comment",inputPlaceholder:"Enter a comment to share with other users.",close:"Close Note",open:"Reopen Note",comment:"Comment",close_comment:"Close and Comment",open_comment:"Reopen and Comment",report:"Report","new":"New Note",newDescription:"Describe the issue.",save:"Save Note",login:"You must log in to change or comment on this note.",upload_explanation:"Your comments will be publicly visible to all OpenStreetMap users.",upload_explanation_with_user:"Your comments as {user} will be publicly visible to all OpenStreetMap users."},help:{title:"Help",key:"H",help:{title:"Help",welcome:"Welcome to the iD editor for [OpenStreetMap](https://www.openstreetmap.org/). With this editor you can update OpenStreetMap right from your web browser.",open_data_h:"Open Data",open_data:"Edits that you make on this map will be visible to everyone who uses OpenStreetMap. Your edits can be based on personal knowledge, on-the-ground surveying, or imagery collected from aerial or street level photos. Copying from commercial sources, like Google Maps, [is strictly forbidden](https://www.openstreetmap.org/copyright).",before_start_h:"Before you start",before_start:"You should be familiar with OpenStreetMap and this editor before you start editing. iD contains a walkthrough to teach you the basics of editing OpenStreetMap. Click \"Start the Walkthrough\" on this screen to take the tutorial - it takes only about 15 minutes.",open_source_h:"Open Source",open_source:"The iD editor is a collaborative open source project, and you are using version {version} now. The source code is available [on GitHub](https://github.com/openstreetmap/iD).",open_source_help:"You can help iD by [translating](https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating) or [reporting bugs](https://github.com/openstreetmap/iD/issues)."},overview:{title:"Overview",navigation_h:"Navigation",navigation_drag:"You can drag the map by pressing and holding down the {leftclick} left mouse button and moving the mouse around. You can also use the `↓`, `↑`, `←`, `→` arrow keys on your keyboard.",navigation_zoom:"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons along the side of the map. You can also use the `+`, `-` keys on your keyboard.",features_h:"Map Features",features:"We use the word *features* to describe things that appear on the map, such as roads, buildings, or points of interest. Anything in the real world can be mapped as a feature on OpenStreetMap. Map features are represented on the map using *points*, *lines*, or *areas*.",nodes_ways:"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*."},editing:{title:"Editing & Saving",select_h:"Select",select_left_click:"{leftclick} Left-click on a feature to select it. This will highlight it with a pulsing glow, and the sidebar will display details about that feature, such as its name or address.",select_right_click:"{rightclick} Right-click on a feature to display the editing menu, which shows the commands that are available, such as rotating, moving, and deleting.",multiselect_h:"Multiselect",multiselect_shift_click:"`{shift}`+{leftclick} left-click to select several features together.  This makes it easier to move or delete multiple items.",multiselect_lasso:"Another way to select multiple features is to hold down the `{shift}` key, then press and hold down the {leftclick} left mouse button and drag the mouse to draw a selection lasso. All of the points inside the lasso area will be selected.",undo_redo_h:"Undo & Redo",undo_redo:"Your edits are stored locally in your browser until you choose to save them to the OpenStreetMap server. You can undo edits by clicking the {undo} **Undo** button, and redo them by clicking the {redo} **Redo** button.",save_h:"Save",save:"Click {save} **Save** to finish your edits and send them to OpenStreetMap. You should remember to save your work frequently!",save_validation:"On the save screen, you'll have a chance to review what you've done. iD will also perform some basic checks for missing data and may offer helpful suggestions and warnings if something doesn't seem right.",upload_h:"Upload",upload:"Before uploading your changes you must enter a [changeset comment](https://wiki.openstreetmap.org/wiki/Good_changeset_comments). Then click **Upload** to send your changes to OpenStreetMap, where they will be merged into the map and publicly visible to everyone.",backups_h:"Automatic Backups",backups:"If you can't finish your edits in one sitting, for example if your computer crashes or you close the browser tab, your edits are still saved in your browser's storage. You can come back later (on the same browser and computer), and iD will offer to restore your work.",keyboard_h:"Keyboard Shortcuts",keyboard:"You can view a list of keyboard shortcuts by pressing the `?` key."},feature_editor:{title:"Feature Editor",intro:"The *feature editor* appears alongside the map, and allows you to see and edit all of the information for the selected feature.",definitions:"The top section displays the feature's type. The middle section contains *fields* showing the feature's attributes, such as its name or address.",type_h:"Feature Type",type:"You can click on the feature type to change the feature to a different type. Everything that exists in the real world can be added to OpenStreetMap, so there are thousands of feature types to choose from.",type_picker:"The type picker displays the most common feature types, such as parks, hospitals, restaurants, roads, and buildings. You can search for anything by typing what you're looking for in the search box. You can also click the {inspect} **Info** icon next to the feature type to learn more about it.",fields_h:"Fields",fields_all_fields:"The \"All fields\" section contains all of the feature's details that you may edit. In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.",fields_example:"Each feature type will display different fields. For example, a road may display fields for its surface and speed limit, but a restaurant may display fields for the type of food it serves and the hours it is open.",fields_add_field:"You can also click the \"Add field\" dropdown to add more fields, such as a description, Wikipedia link, wheelchair access, and more.",tags_h:"Tags",tags_all_tags:"Below the fields section, you can expand the \"All tags\" section to edit any of the OpenStreetMap *tags* for the selected feature. Each tag consists of a *key* and *value*, data elements that define all of the features stored in OpenStreetMap.",tags_resources:"Editing a feature's tags requires intermediate knowledge about OpenStreetMap. You should consult resources like the [OpenStreetMap Wiki](https://wiki.openstreetmap.org/wiki/Main_Page) or [Taginfo](https://taginfo.openstreetmap.org/) to learn more about accepted OpenStreetMap tagging practices."},points:{title:"Points",intro:"*Points* can be used to represent features such as shops, restaurants, and monuments. They mark a specific location, and describe what's there.",add_point_h:"Adding Points",add_point:"To add a point, click the {point} **Point** button on the toolbar above the map, or press the shortcut key `1`. This will change the mouse cursor to a cross symbol.",add_point_finish:"To place the new point on the map, position the mouse cursor where the point should go, then {leftclick} left-click or press `Space`.",move_point_h:"Moving Points",move_point:"To move a point, place the mouse cursor over the point, then press and hold the {leftclick} left mouse button while dragging the point to its new location.",delete_point_h:"Deleting Points",delete_point:"It's OK to delete features that don't exist in the real world. Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it.",delete_point_command:"To delete a point, {rightclick} right-click on the point to select it and show the edit menu, then use the {delete} **Delete** command."},lines:{title:"Lines",intro:"*Lines* are used to represent features such as roads, railroads, and rivers. Lines should be drawn down the center of the feature that they represent.",add_line_h:"Adding Lines",add_line:"To add a line, click the {line} **Line** button on the toolbar above the map, or press the shortcut key `2`. This will change the mouse cursor to a cross symbol.",add_line_draw:"Next, position the mouse cursor where the line should begin and {leftclick} left-click or press `Space` to begin placing nodes along the line. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_line_finish:"To finish a line, press `{return}` or click again on the last node.",modify_line_h:"Modifying Lines",modify_line_dragnode:"Often you'll see lines that aren't shaped correctly, for example a road that does not match up with the background imagery. To adjust the shape of a line, first {leftclick} left-click to select it. All nodes of the line will be drawn as small circles. You can then drag the nodes to better locations.",modify_line_addnode:"You can also create new nodes along a line either by {leftclick}**x2** double-clicking on the line or by dragging the small triangles at the midpoints between nodes.",connect_line_h:"Connecting Lines",connect_line:"Having roads connected properly is important for the map and essential for providing driving directions.",connect_line_display:"The connections between roads are drawn with gray circles. The endpoints of a line are drawn with larger white circles if they don't connect to anything.",connect_line_drag:"To connect a line to another feature, drag one of the line's nodes onto the other feature until both features snap together. Tip: You can hold down the `{alt}` key to prevent nodes from connecting to other features.",connect_line_tag:"If you know that the connection has traffic lights or crosswalks, you can add them by selecting the connecting node and using the feature editor to select the correct feature's type.",disconnect_line_h:"Disconnecting Lines",disconnect_line_command:"To disconnect a road from another feature, {rightclick} right-click the connecting node and select the {disconnect} **Disconnect** command from the editing menu.",move_line_h:"Moving Lines",move_line_command:"To move an entire line, {rightclick} right-click the line and select the {move} **Move** command from the editing menu. Then move the mouse, and {leftclick} left-click to place the line in a new location.",move_line_connected:"Lines that are connected to other features will stay connected as you move the line to a new location. iD may prevent you from moving a line across another connected line.",delete_line_h:"Deleting Lines",delete_line:"If a line is entirely incorrect, for example a road that doesn't exist in the real world, it's OK to delete it. Be careful when deleting features: the background imagery you are using might be outdated, and a road that looks wrong could simply be newly built.",delete_line_command:"To delete a line, {rightclick} right-click on the line to select it and show the edit menu, then use the {delete} **Delete** command."},areas:{title:"Areas",intro:"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas. Areas should be traced around the edge of the feature that they represent, for example, around the base of a building.",point_or_area_h:"Points or Areas?",point_or_area:"Many features can be represented as points or areas. You should map buildings and property outlines as areas whenever possible. Place points inside a building area to represent businesses, amenities, and other features located inside the building.",add_area_h:"Adding Areas",add_area_command:"To add an area, click the {area} **Area** button on the toolbar above the map, or press the shortcut key `3`. This will change the mouse cursor to a cross symbol.",add_area_draw:"Next, position the mouse cursor at one of the corners of the feature and {leftclick} left-click or press `Space` to begin placing nodes around the outer edge of the area. Continue placing more nodes by clicking or pressing `Space`. While drawing, you can zoom in or drag the map in order to add more detail.",add_area_finish:"To finish an area, press `{return}` or click again on either the first or last node.",square_area_h:"Square Corners",square_area_command:"Many area features like buildings have square corners. To square the corners of an area, {rightclick} right-click the edge of the area and select the {orthogonalize} **Square** command from the editing menu.",modify_area_h:"Modifying Areas",modify_area_dragnode:"Often you'll see areas that aren't shaped correctly, for example a building that does not match up with the background imagery. To adjust the shape of an area, first {leftclick} left-click to select it. All nodes of the area will be drawn as small circles. You can then drag the nodes to better locations.",modify_area_addnode:"You can also create new nodes along an area either by {leftclick}**x2** double-clicking on the edge of the area or by dragging the small triangles at the midpoints between nodes.",delete_area_h:"Deleting Areas",delete_area:"If an area is entirely incorrect, for example a building that doesn't exist in the real world, it's OK to delete it. Be cautious when deleting features - the background imagery you are using might be outdated, and a building that looks wrong could simply be newly built.",delete_area_command:"To delete an area, {rightclick} right-click on the area to select it and show the edit menu, then use the {delete} **Delete** command."},relations:{title:"Relations",intro:"A *relation* is a special type of feature in OpenStreetMap that groups together other features. The features that belong to a relation are called *members*, and each member can have a *role* in the relation.",edit_relation_h:"Editing Relations",edit_relation:"At the bottom of the feature editor, you can expand the \"All relations\" section to see if the selected feature is a member of any relations. You can then click on the relation to select and edit it.",edit_relation_add:"To add a feature to a relation, select the feature, then click the {plus} add button in the \"All relations\" section of the feature editor. You can choose from a list of nearby relations, or choose the \"New relation...\" option.",edit_relation_delete:"You can also click the {delete} **Delete** button to remove the selected feature from the relation. If you remove all of the members from a relation, the relation will be deleted automatically.",maintain_relation_h:"Maintaining Relations",maintain_relation:"For the most part, iD will maintain relations automatically as you edit. You should take care when replacing features that might be members of relations. For example if you delete a section of road and draw a new section of road to replace it, you should add the new section to the same relations (routes, turn restrictions, etc.) as the original.",relation_types_h:"Relation Types",multipolygon_h:"Multipolygons",multipolygon:"A *multipolygon* relation is a group of one or more *outer* features and one or more inner features. The outer features define the outer edges of the multipolygon, and the inner features define sub-areas or holes cut out from the inside of the multipolygon.",multipolygon_create:"To create a multipolygon, for example a building with a hole in it, draw the outer edge as an area and the inner edge as a line or different kind of area. Then `{shift}`+{leftclick} left-click to select both features, {rightclick} right-click to show the edit menu, and select the {merge} **Merge** command.",multipolygon_merge:"Merging several lines or areas will create a new multipolygon relation with all selected areas as members. iD will choose the inner and outer roles automatically, based on which features are contained inside other features.",turn_restriction_h:"Turn restrictions",turn_restriction:"A *turn restriction* relation is a group of several road segments in an intersection. Turn restrictions consist of a *from* road, *via* node or roads, and a *to* road.",turn_restriction_field:"To edit turn restrictions, select a junction node where two or more roads meet. The feature editor will display a special \"Turn Restrictions\" field containing a model of the intersection.",turn_restriction_editing:"In the \"Turn Restrictions\" field, click to select a \"from\" road, and see whether turns are allowed or restricted to any of the \"to\" roads. You can click on the turn icons to toggle them between allowed and restricted. iD will create relations automatically and set the from, via, and to roles based on your choices.",route_h:"Routes",route:"A *route* relation is a group of one or more line features that together form a route network, like a bus route, train route, or highway route.",route_add:"To add a feature to a route relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation.",boundary_h:"Boundaries",boundary:"A *boundary* relation is a group of one or more line features that together form an administrative boundary.",boundary_add:"To add a feature to a boundary relation, select the feature and scroll down to the \"All relations\" section of the feature editor, then click the {plus} add button to add this feature to a nearby existing relation or a new relation."},notes:{title:"Notes",intro:"*Notes* are used to alert other users that a feature requires fixing or attention. Notes mark a specific location on the map. To view existing notes or add new ones, click the {data} **Map data** panel to enable the OpenStreetMap notes layer.",add_note_h:"Adding Notes",add_note:"To add a new note, click the {note} **Note** button on the toolbar above the map, or press the shortcut key `4`. This will change the mouse cursor to a cross symbol. To place the new note on the map, position the mouse cursor where the note should go, then {leftclick} left-click or press `Space`.",move_note:"Only new notes can be moved. To move a note, place the mouse cursor over the new note, then press and hold the {leftclick} left mouse button while dragging the note to its new location.",update_note_h:"Closing, Reopening, and Commenting",update_note:"An existing note can be updated by closing it, reopening it, or adding a comment to it. Closing a note indicates that the problem has been resolved. Reopening a note indicates that the original issue is not resolved.",save_note_h:"Saving Notes",save_note:"You must save any note edits individually by clicking the buttons below the note comments. Note edits are **not** included in changesets that you upload to OpenStreetMap."},imagery:{title:"Background Imagery",intro:"The background imagery that appears beneath the map data is an important resource for mapping. This imagery can be aerial photos collected from satellites, airplanes, and drones, or it can be scanned historical maps or other freely available source data.",sources_h:"Imagery Sources",choosing:"To see which imagery sources are available for editing, click the {layers} **Background settings** button on the side of the map.",sources:"By default, a [Bing Maps](https://www.bing.com/maps/) satellite layer is chosen as the background image. Depending on where you are editing, other imagery sources will be available. Some may be newer or have higher resolution, so it is always useful to check and see which layer is the best one to use as a mapping reference.",offsets_h:"Adjusting Imagery Offset",offset:"Imagery is sometimes offset slightly from accurate map data. If you see a lot of roads or buildings shifted from the background imagery, it may be the imagery that's incorrect, so don't move them all to match the background. Instead, you can adjust the background so that it matches the existing data by expanding the \"Adjust Imagery Offset\" section at the bottom of the Background Settings pane.",offset_change:"Click on the small triangles to adjust the imagery offset in small steps, or hold the {leftclick} left mouse button and drag within the gray square to slide the imagery into alignment."},streetlevel:{title:"Street Level Photos",intro:"Street level photos are useful for mapping traffic signs, businesses, and other details that you can't see from satellite and aerial images. The iD editor supports street level photos from [Bing Streetside](https://www.microsoft.com/en-us/maps/streetside), [Mapillary](https://www.mapillary.com), and [OpenStreetCam](https://www.openstreetcam.org).",using_h:"Using Street Level Photos",using:"To use street level photos for mapping, click the {data} **Map data** panel on the side of the map to enable or disable the available photo layers.",photos:"When enabled, the photo layer displays a line along the sequence of photos. At higher zoom levels, a circle marks at each photo location, and at even higher zoom levels, a cone indicates the direction the camera was facing when the photo was taken.",viewer:"When you click on one of the photo locations, a photo viewer appears in the bottom corner of the map. The photo viewer contains controls to step forward and backward in the image sequence. It also shows the username of the person who captured the image, the date it was captured, and a link to view the image on the original site."},gps:{title:"GPS Traces",intro:"Collected GPS traces are a valuable source of data for OpenStreetMap. This editor supports *.gpx*, *.geojson*, and *.kml* files on your local computer. You can collect GPS traces with a smartphone, sports watch, or other GPS device.",survey:"For information on how to perform a GPS survey, read [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).",using_h:"Using GPS Traces",using:"To use a GPS trace for mapping, drag and drop the data file onto the map editor. If it's recognized, it will be drawn on the map as a bright purple line. Click the {data} **Map data** panel on the side of the map to enable, disable, or zoom to your GPS data.",tracing:"The GPS track isn't sent to OpenStreetMap - the best way to use it is to draw on the map, using it as a guide for the new features that you add.",upload:"You can also [upload your GPS data to OpenStreetMap](https://www.openstreetmap.org/trace/create) for other users to use."},qa:{title:"Quality Assurance",intro:"*Quality Assurance* (Q/A) tools can find improper tags, disconnected roads, and other issues with OpenStreetMap, which mappers can then fix. To view existing Q/A issues, click the {data} **Map data** panel to enable a specific Q/A layer.",tools_h:"Tools",tools:"The following tools are currently supported: [KeepRight](https://www.keepright.at/) and [ImproveOSM](https://improveosm.org/en/). Expect iD to support [Osmose](https://osmose.openstreetmap.fr/) and more Q/A tools in the future.",issues_h:"Handling Issues",issues:"Handling Q/A issues is similar to handling notes. Click on a marker to view the issue details in the sidebar. Each tool has its own capabilities, but generally you can comment and/or close an issue."},field:{restrictions:{title:"Turn Restrictions Help",about:{title:"About",about:"This field allows you to inspect and modify turn restrictions. It displays a model of the selected intersection including other nearby connected roads.",from_via_to:"A turn restriction always contains: one **FROM way**, one **TO way**, and either one **VIA node** or one or more **VIA ways**.",maxdist:"The \"{distField}\" slider controls how far to search for additional connected roads.",maxvia:"The \"{viaField}\" slider adjusts how many via ways may be included in the search. (Tip: simple is better)"},inspecting:{title:"Inspecting",about:"Hover over any **FROM** segment to see whether it has any turn restrictions. Each possible **TO** destination will be drawn with a colored shadow showing whether a restriction exists.",from_shadow:"{fromShadow} **FROM segment**",allow_shadow:"{allowShadow} **TO Allowed**",restrict_shadow:"{restrictShadow} **TO Restricted**",only_shadow:"{onlyShadow} **TO Only**",restricted:"\"Restricted\" means that there is a turn restriction, for example \"No Left Turn\".",only:"\"Only\" means that a vehicle taking that path may only make that choice, for example \"Only Straight On\"."},modifying:{title:"Modifying",about:"To modify turn restrictions, first click on any starting **FROM** segment to select it. The selected segment will pulse, and all possible **TO** destinations will appear as turn symbols.",indicators:"Then, click on a turn symbol to toggle it between \"Allowed\", \"Restricted\", and \"Only\".",allow_turn:"{allowTurn} **TO Allowed**",restrict_turn:"{restrictTurn} **TO Restricted**",only_turn:"{onlyTurn} **TO Only**"},tips:{title:"Tips",simple:"**Prefer simple restrictions over complex ones.**",simple_example:"For example, avoid creating a via-way restriction if a simpler via-node turn restriction will do.",indirect:"**Some restrictions display the text \"(indirect)\" and are drawn lighter.**",indirect_example:"These restrictions exist because of another nearby restriction. For example, an \"Only Straight On\" restriction will indirectly create \"No Turn\" restrictions for all other paths through the intersection.",indirect_noedit:"You may not edit indirect restrictions. Instead, edit the nearby direct restriction."}}}},issues:{title:"Issues",key:"I",list_title:"Issues ({count})",errors:{list_title:"Errors ({count})"},warnings:{list_title:"Warnings ({count})"},rules:{title:"Rules"},user_resolved_issues:"Issues resolved by your edits",warnings_and_errors:"Warnings and errors",no_issues:{message:{everything:"Everything looks fine",everything_in_view:"Everything in view looks fine",edits:"Your edits look fine",edits_in_view:"Your edits in view look fine",no_edits:"You have no edits yet"},hidden_issues:{none:"Detected issues will appear here",elsewhere:"Issues elsewhere: {count}",everything_else:"Issues with everything else: {count}",everything_else_elsewhere:"Issues elsewhere with everything else: {count}",disabled_rules:"Issues with disabled rules: {count}",disabled_rules_elsewhere:"Issues elsewhere with disabled rules: {count}",ignored_issues:"Ignored issues: {count}",ignored_issues_elsewhere:"Ignored issues elsewhere: {count}"}},options:{what:{title:"Check:",edited:"My Edits",all:"Everything"},where:{title:"Where:",visible:"In View",all:"Everywhere"}},suggested:"Suggested updates:",enable_all:"Enable All",disable_all:"Disable All",reset_ignored:"Reset Ignored ({count})",fix_one:{title:"fix"},fix_all:{title:"Fix All",annotation:"Fixed several validation issues."},almost_junction:{title:"Almost Junctions",message:"{feature} is very close but not connected to {feature2}",tip:"Find features that should possibly be connected to other nearby features",self:{message:"{feature} ends very close to itself but does not reconnect"},"highway-highway":{reference:"Intersecting highways should share a junction vertex."}},close_nodes:{title:"Very Close Points",tip:"Find redundant and crowded points",message:"Two points in {way} are very close together",reference:"Redundant points in a way should be merged or moved apart.",detached:{message:"{feature} is too close to {feature2}",reference:"Separate points should not share a location."}},crossing_ways:{title:"Crossings Ways",message:"{feature} crosses {feature2}",tip:"Find features that incorrectly cross over one another","building-building":{reference:"Buildings should not intersect except on different layers."},"building-highway":{reference:"Highways crossing buildings should use bridges, tunnels, 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:{message:"{feature} has a \"Fix Me\" request",reference:"A \"fixme\" tag indicates that a mapper has requested help with a feature."},generic_name:{message:"{feature} has the suspicious name \"{name}\"",message_language:"{feature} has the suspicious name \"{name}\" in {language}",reference:"Names should be the actual, on-the-ground names of features."},help_request:{title:"Help Requests",tip:"Find features where others requested assistance"},incompatible_source:{title:"Suspicious Sources",tip:"Find features with suspicious source tags",google:{feature:{message:"{feature} lists Google as a data source"},reference:"Google products are proprietary and must not be used as references."}},incorrect_name:{message:"{feature} has the mistaken name \"{name}\"",message_language:"{feature} has the mistaken name \"{name}\" in {language}"},invalid_format:{title:"Invalid Formatting",tip:"Find tags with unexpected formats",email:{message:"{feature} has an invalid email address",message_multi:"{feature} has multiple invalid email addresses",reference:"Email addresses must look like \"user@example.com\"."}},mismatched_geometry:{title:"Mismatched Geometry",tip:"Find features with conflicting tags and geometry"},missing_role:{title:"Missing Roles",message:"{member} has no role within {relation}",tip:"Find relations with missing or incorrect member roles",multipolygon:{reference:"Multipolygon members must have an inner or outer role."}},missing_tag:{title:"Missing Tags",tip:"Find features that are missing descriptive tags",reference:"Features must have tags that define what they are.",any:{message:"{feature} has no tags"},descriptive:{message:"{feature} has no descriptive tags"},relation_type:{message:"{feature} is a relation without a type"}},old_multipolygon:{message:"{multipolygon} has misplaced tags",reference:"Multipolygons should be tagged on their relation, not their outer way."},outdated_tags:{title:"Outdated Tags",message:"{feature} has outdated tags",tip:"Find features with deprecated tags that can be updated",reference:"Some tags change over time and should be updated.",incomplete:{message:"{feature} has incomplete tags",reference:"Some features should have additional tags."},noncanonical_brand:{message:"{feature} looks like a brand with nonstandard tags",message_incomplete:"{feature} looks like a brand with incomplete tags",reference:"All features of the same brand should be tagged the same way."}},point_as_vertex:{message:"{feature} should be a standalone point based on its tags",reference:"Some features shouldn't be part of lines or areas."},private_data:{title:"Private Information",tip:"Find features that may contain private information",reference:"Sensitive data like personal phone numbers should not be tagged.",contact:{message:"{feature} might be tagged with private contact information"}},suspicious_name:{title:"Suspicious Names",tip:"Find features with generic or suspicious names"},tag_suggests_area:{message:"{feature} should be a closed area based on the tag \"{tag}\"",reference:"Areas must have connected endpoints."},unknown_road:{message:"{feature} has no classification",reference:"Roads without a specific type may not appear in maps or routing."},impossible_oneway:{title:"Impossible One-Ways",tip:"Find route issues with one-way features",waterway:{connected:{start:{message:"{feature} flows away from a connected waterway"},end:{message:"{feature} flows against a connected waterway"},reference:"Waterway segments should all flow in the same direction."}},highway:{start:{message:"{feature} is unreachable",reference:"One-way roads must be accessible via other roads."},end:{message:"{feature} has no outlet",reference:"One-way roads must lead to other roads."}}},unsquare_way:{title:"Unsquare Corners (up to {val}°)",message:"{feature} has unsquare corners",tip:"Find features with unsquare corners that can be drawn better",buildings:{reference:"Buildings with unsquare corners can often be drawn more accurately."}},vertex_as_point:{message:"{feature} should be part of a line or area based on its tags",reference:"Some features shouldn't be standalone points."},fix:{address_the_concern:{title:"Address the concern"},connect_almost_junction:{annotation:"Connected very close features."},connect_crossing_features:{annotation:"Connected crossing features."},connect_endpoints:{title:"Connect the ends",annotation:"Connected the endpoints of a way."},connect_feature:{title:"Connect this feature"},connect_features:{title:"Connect the features"},connect_using_ford:{title:"Connect using a ford"},continue_from_start:{title:"Continue drawing from start"},continue_from_end:{title:"Continue drawing from end"},delete_feature:{title:"Delete this feature"},extract_point:{title:"Extract this point"},ignore_issue:{title:"Ignore this issue"},merge_close_vertices:{annotation:"Merged very close points in a way."},merge_points:{title:"Merge these points"},move_points_apart:{title:"Move these points apart"},move_tags:{title:"Move the tags",annotation:"Moved tags."},remove_from_relation:{title:"Remove from relation"},remove_generic_name:{annotation:"Removed a generic name."},remove_mistaken_name:{annotation:"Removed a mistaken name."},remove_private_info:{annotation:"Removed private information."},remove_proprietary_data:{title:"Remove any proprietary data"},remove_tag:{title:"Remove the tag",annotation:"Removed tag."},remove_tags:{title:"Remove the tags"},remove_the_name:{title:"Remove the name"},reposition_features:{title:"Reposition the features"},reverse_feature:{title:"Reverse this feature"},select_preset:{title:"Select a feature type"},select_road_type:{title:"Select a road type"},set_as_inner:{title:"Set as inner"},set_as_outer:{title:"Set as outer"},square_feature:{title:"Square this feature"},tag_as_disconnected:{title:"Tag as disconnected",annotation:"Tagged very close features as disconnected."},tag_as_unsquare:{title:"Tag as physically unsquare",annotation:"Tagged a way as having unsquare corners."},tag_this_as_higher:{title:"Tag this as higher"},tag_this_as_lower:{title:"Tag this as lower"},upgrade_tags:{title:"Upgrade the tags",annotation:"Upgraded old tags."},use_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",highlight_edits:"Highlight unsaved edits"},selecting:{title:"Selecting features",select_one:"Select a single feature",select_multi:"Select multiple features",lasso:"Draw a selection lasso around features",search:"Find features matching search text"},with_selected:{title:"With 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 selected features",move:"Move selected features",rotate:"Rotate selected features",orthogonalize:"Square corners of a line or area",straighten:"Straighten a line or points",circularize:"Circularize a closed line or area",reflect_long:"Reflect features across the longer axis",reflect_short:"Reflect features across the shorter axis","delete":"Delete selected features"},commands:{title:"Commands",copy:"Copy selected features",paste:"Paste copied features",undo:"Undo last action",redo:"Redo last action",save:"Save changes"}},tools:{title:"Tools",info:{title:"Information",all:"Toggle all information panels",background:"Toggle background panel",history:"Toggle history panel",location:"Toggle location panel",measurement:"Toggle measurement panel"}}},units:{feet:"{quantity} ft",miles:"{quantity} mi",square_feet:"{quantity} sq ft",square_miles:"{quantity} sq mi",acres:"{quantity} ac",meters:"{quantity} m",kilometers:"{quantity} km",square_meters:"{quantity} m²",square_kilometers:"{quantity} km²",hectares:"{quantity} ha",area_pair:"{area1} ({area2})",arcdegrees:"{quantity}°",arcminutes:"{quantity}′",arcseconds:"{quantity}″",north:"N",south:"S",east:"E",west:"W",coordinate:"{coordinate}{direction}",coordinate_pair:"{latitude}, {longitude}"},wikidata:{identifier:"Identifier",label:"Label",description:"Description"},presets:{categories:{"category-barrier":{name:"Barrier Features"},"category-building":{name:"Building Features"},"category-golf":{name:"Golf Features"},"category-landuse":{name:"Land Use Features"},"category-natural":{name:"Natural Features"},"category-path":{name:"Paths"},"category-rail":{name:"Rails"},"category-restriction":{name:"Restriction Features"},"category-road_major":{name:"Major Roads"},"category-road_minor":{name:"Minor Roads"},"category-road_service":{name:"Service Roads"},"category-route":{name:"Route Features"},"category-utility":{name:"Utility Features"},"category-water":{name:"Water Bodies"},"category-waterway":{name:"Waterways"}},fields:{access_simple:{label:"Allowed Access",terms:"permitted,private,public"},access:{label:"Allowed Access",terms:"",placeholder:"Not Specified",types:{access:"All",foot:"Foot",motor_vehicle:"Motor Vehicles",bicycle:"Bicycles",horse:"Horses"},options:{yes:{title:"Allowed",description:"Access allowed by law; a right of way"},no:{title:"Prohibited",description:"Access not allowed to the general public"},permissive:{title:"Permissive",description:"Access allowed until such time as the owner revokes the permission"},"private":{title:"Private",description:"Access allowed only with permission of the owner on an individual basis"},designated:{title:"Designated",description:"Access allowed according to signs or specific local laws"},destination:{title:"Destination",description:"Access allowed only to reach a destination"},dismount:{title:"Dismount",description:"Access allowed but rider must dismount"},permit:{title:"Permit",description:"Access allowed only with a valid permit or license"}}},"addr/interpolation":{label:"Type",options:{all:"All",even:"Even",odd:"Odd",alphabetic:"Alphabetic"}},address:{label:"Address",terms:"location",placeholders:{block_number:"Block Number","block_number!jp":"Block No.",city:"City","city!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"},aerialway:{label:"Type"},"aerialway/access":{label:"Access",options:{entry:"Entry",exit:"Exit",both:"Both"}},"aerialway/bubble":{label:"Bubble"},"aerialway/capacity":{label:"Capacity (per hour)",placeholder:"500, 2500, 5000..."},"aerialway/duration":{label:"Duration (minutes)",placeholder:"1, 2, 3..."},"aerialway/heating":{label:"Heated"},"aerialway/occupancy":{label:"Occupancy",placeholder:"2, 4, 8..."},"aerialway/summer/access":{label:"Access (summer)",options:{entry:"Entry",exit:"Exit",both:"Both"}},aeroway:{label:"Type"},agrarian:{label:"Products"},air_conditioning:{label:"Air Conditioning",terms:"cooling system,refrigeration"},amenity:{label:"Type"},animal_boarding:{label:"For Animals"},animal_breeding:{label:"For Animals"},animal_shelter:{label:"For Animals"},architect:{label:"Architect",terms:"building designer"},"area/highway":{label:"Type"},artist:{label:"Artist"},artwork_type:{label:"Type"},atm:{label:"ATM"},attraction:{label:"Type"},baby_seat:{label:"Baby Seat"},backrest:{label:"Backrest"},bar:{label:"Bar",terms:""},barrier:{label:"Type"},basin:{label:"Type"},"bath/open_air":{label:"Open Air"},"bath/sand_bath":{label:"Sand Bath"},"bath/type":{label:"Specialty",options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}},beauty:{label:"Beauty Specialty"},bench:{label:"Bench",terms:"seating"},bicycle_parking:{label:"Type"},bin:{label:"Waste Bin",terms:"garbage can,trash can"},blind:{label:"Blind Person Access",terms:"sight impairment,vision impairment",options:{yes:"Yes",limited:"Limited",no:"No"}},blood_components:{label:"Blood Components",options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}},board_type:{label:"Type"},bollard:{label:"Type"},booth:{label:"Booth"},boules:{label:"Type"},boundary:{label:"Type"},brand:{label:"Brand",terms:""},brewery:{label:"Draft Beers",terms:"on tap"},bridge:{label:"Type",placeholder:"Default"},"bridge/support":{label:"Type"},building_area:{label:"Building"},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"},cables:{label:"Cables",placeholder:"1, 2, 3..."},"camera/direction":{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},"camera/mount":{label:"Camera Mount"},"camera/type":{label:"Camera Type",options:{fixed:"Fixed",panning:"Panning",dome:"Dome"}},capacity:{label:"Capacity",terms:"",placeholder:"50, 100, 200..."},cash_in:{label:"Cash In"},castle_type:{label:"Type"},changing_table:{label:"Diaper Changing Table"},charge_fee:{label:"Fee Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},charge_toll:{label:"Toll Amount",terms:"",placeholder:"1 EUR, 5 USD, 10 JPY…"},check_date:{label:"Last Checked Date"},clothes:{label:"Clothes"},club:{label:"Type"},collection_times:{label:"Collection Times"},colour:{label:"Color",terms:""},comment:{label:"Changeset Comment",placeholder:"Brief description of your contributions (required)"},communication_multi:{label:"Communication Types",terms:""},construction:{label:"Type"},consulate:{label:"Type"},"contact/webcam":{label:"Webcam URL",placeholder:"http://example.com/"},content:{label:"Content"},conveying_escalator:{label:"Escalator"},conveying:{label:"Movement Direction",options:{forward:"Forward",backward:"Backward",reversible:"Reversible"}},country:{label:"Country"},couplings:{label:"Couplings",placeholder:"1, 2, 3..."},covered:{label:"Covered",terms:""},craft:{label:"Type"},"crane/type":{label:"Crane Type",options:{portal_crane:"Portal Crane","floor-mounted_crane":"Floor-mounted Crane",travel_lift:"Travel Lift"}},crop:{label:"Crops"},crossing:{label:"Type"},"crossing/island":{label:"Refuge Island"},cuisine:{label:"Cuisines"},currency_multi:{label:"Currency Types",terms:"bills,cash,coins,money"},cutting:{label:"Type",placeholder:"Default"},cycle_network:{label:"Network"},cycleway:{label:"Bike Lanes",terms:"",placeholder:"none",types:{"cycleway:left":"Left side","cycleway:right":"Right side"},options:{none:{title:"None",description:"No bike lane"},lane:{title:"Standard bike lane",description:"A bike lane separated from auto traffic by a painted line"},shared_lane:{title:"Shared bike lane",description:"A bike lane with no separation from auto traffic"},track:{title:"Bike track",description:"A bike lane separated from traffic by a physical barrier"},share_busway:{title:"Bike lane shared with bus",description:"A bike lane shared with a bus lane"},opposite_lane:{title:"Opposite bike lane",description:"A bike lane that travels in the opposite direction of traffic"},opposite:{title:"Contraflow bike lane",description:"A bike lane that travels in both directions on a one-way street"}}},"dance/style":{label:"Dance Styles"},date:{label:"Date"},delivery:{label:"Delivery",terms:""},denomination:{label:"Denomination",terms:""},denotation:{label:"Denotation"},departures_board:{label:"Departures Board",options:{yes:"Yes",timetable:"Timetable",realtime:"Realtime",no:"None"}},description:{label:"Description",terms:"summary"},design:{label:"Design"},destination_oneway:{label:"Destinations"},"destination/ref_oneway":{label:"Destination Road Numbers"},"destination/symbol_oneway":{label:"Destination Symbols",terms:""},devices:{label:"Devices",placeholder:"1, 2, 3..."},diameter:{label:"Diameter",placeholder:"5 mm, 10 cm, 15 in…"},diet_multi:{label:"Diet Types",terms:"gluten free,fruitarian,halal,kosher,lactose free,meat,pescatarian,raw,vegan,vegetarian"},diplomatic:{label:"Type"},"diplomatic/services":{label:"Services"},direction_cardinal:{label:"Direction",options:{N:"North",E:"East",S:"South",W:"West",NE:"Northeast",SE:"Southeast",SW:"Southwest",NW:"Northwest",NNE:"North-northeast",ENE:"East-northeast",ESE:"East-southeast",SSE:"South-southeast",SSW:"South-southwest",WSW:"West-southwest",WNW:"West-northwest",NNW:"North-northwest"}},direction_clock:{label:"Direction",options:{clockwise:"Clockwise",anticlockwise:"Counterclockwise"}},direction_vertex:{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},direction:{label:"Direction (Degrees Clockwise)",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance"},dock:{label:"Type"},dog:{label:"Dogs",terms:"animals,pets",options:{yes:"Allowed",leashed:"Leashed Only",no:"Not Allowed"}},door_type:{label:"Type"},door:{label:"Door"},drive_through:{label:"Drive-Through",terms:""},duration:{label:"Duration",terms:"",placeholder:"00:00"},electrified:{label:"Electrification",placeholder:"Contact Line, Electrified Rail...",options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}},elevation:{label:"Elevation",terms:"altitude"},email:{label:"Email",terms:"",placeholder:"example@example.com"},embankment:{label:"Type",placeholder:"Default"},embassy:{label:"Type"},emergency_combo:{label:"Type"},emergency:{label:"Emergency"},enforcement:{label:"Type"},entrance:{label:"Type"},except:{label:"Exceptions"},faces:{label:"Faces"},fax:{label:"Fax",terms:"",placeholder:"+31 42 123 4567"},fee:{label:"Fee",terms:""},fence_type:{label:"Type"},"fire_hydrant/diameter":{label:"Diameter (mm, in, or letters)",terms:""},"fire_hydrant/pressure":{label:"Pressure (bar)",terms:""},"fire_hydrant/type":{label:"Shape",options:{pillar:"Pillar/Aboveground",underground:"Underground",wall:"Wall",pipe:"Capped Pipe"}},fireplace:{label:"Fireplace"},fishing:{label:"Fishing",terms:""},fitness_station:{label:"Equipment Type"},fixme:{label:"Fix Me",terms:"help request"},"flag/type":{label:"Flag Type"},floating:{label:"Floating"},flood_prone:{label:"Flood Prone",terms:""},ford:{label:"Type",placeholder:"Default"},frequency_electrified:{label:"Operating Frequency",terms:""},frequency:{label:"Operating Frequency",terms:""},from:{label:"From"},fuel_multi:{label:"Fuel Types"},fuel:{label:"Fuel"},gauge:{label:"Gauge"},gender:{label:"Gender",terms:"access,female,male,unisex",placeholder:"Unknown",options:{male:"Male",female:"Female",unisex:"Unisex"}},"generator/method":{label:"Method"},"generator/output/electricity":{label:"Power Output",placeholder:"50 MW, 100 MW, 200 MW..."},"generator/source":{label:"Source"},"generator/type":{label:"Type"},government:{label:"Type"},grape_variety:{label:"Grape Varieties"},guest_house:{label:"Type"},handicap:{label:"Handicap",placeholder:"1-18"},handrail:{label:"Handrail",terms:""},hashtags:{label:"Suggested Hashtags",placeholder:"#example"},healthcare:{label:"Type"},"healthcare/speciality":{label:"Specialties"},height_building:{label:"Building Height (Meters)",terms:""},height:{label:"Height (Meters)",terms:""},highspeed:{label:"High-Speed",terms:""},highway:{label:"Type"},historic:{label:"Type"},"historic/civilization":{label:"Historic Civilization"},"historic/wreck/date_sunk":{label:"Date Sunk"},"historic/wreck/visible_at_high_tide":{label:"Visible At High Tide"},"historic/wreck/visible_at_low_tide":{label:"Visible At Low Tide"},hoops:{label:"Hoops",placeholder:"1, 2, 4..."},horse_dressage:{label:"Dressage Riding",options:{"undefined":"No",equestrian:"Yes"}},horse_riding:{label:"Horseback Riding",options:{"undefined":"No",horse_riding:"Yes"}},horse_scale:{label:"Horseback Riding Difficulty",terms:"",placeholder:"Difficult, Dangerous...",options:{common:"Easy: No problems or difficulties. (default)",demanding:"Use with caution: Uneven way, occasional difficult passages.",difficult:"Difficult: Way narrow and exposed. May contain obstacles to step over and narrow passages.",critical:"Borderline: Passable only for experienced riders and horses. Major obstacles. Bridges should be examined carefully.",dangerous:"Dangerous: Passable only for very experienced riders and horses and only in good weather. Dismount.",impossible:"Impassable: Way or bridge not passable for horses. Too narrow, insuffient support, obstacles like ladders. Danger of life."}},horse_stables:{label:"Riding Stable",options:{"undefined":"No",stables:"Yes"}},iata:{label:"IATA Airport Code"},icao:{label:"ICAO Airport Code"},incline_steps:{label:"Incline",options:{up:"Up",down:"Down"}},incline:{label:"Incline",terms:""},indoor_type:{label:"Type"},indoor:{label:"Indoor",terms:""},industrial:{label:"Type"},informal:{label:"Informal",terms:""},information:{label:"Type"},inscription:{label:"Inscription",terms:""},intermittent_yes:{label:"Intermittent"},intermittent:{label:"Intermittent",terms:""},internet_access:{label:"Internet Access",terms:"wifi,wlan",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access Fee",terms:"wifi fee"},"internet_access/ssid":{label:"Wifi Network Name",terms:"ssid"},interval:{label:"Interval",terms:""},junction_line:{label:"Junction",terms:"",options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}},"junction/ref_oneway":{label:"Junction Number",terms:""},kerb:{label:"Curb"},"kerb/height":{label:"Height"},label:{label:"Label"},lamp_type:{label:"Type"},landuse:{label:"Type"},lanes:{label:"Lanes",terms:"",placeholder:"1, 2, 3..."},language_multi:{label:"Languages"},layer:{label:"Layer",terms:"",placeholder:"0"},leaf_cycle_singular:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}},leaf_cycle:{label:"Leaf Cycle",options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}},leaf_type_singular:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}},leaf_type:{label:"Leaf Type",options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}},leisure:{label:"Type"},length:{label:"Length (Meters)"},level_semi:{label:"Levels",terms:"building floors,decks,stories,storeys,storys"},level:{label:"Level",terms:"building floor,deck,storey,story"},levels:{label:"Levels",terms:"",placeholder:"2, 4, 6..."},liaison:{label:"Type"},line_attachment:{label:"Line Attachment"},lit:{label:"Lit",terms:"lamp,lighting"},location_pool:{label:"Location",options:{outdoor:"Outdoor",indoor:"Indoor",roof:"Rooftop"}},location:{label:"Location",terms:""},lock:{label:"Lock"},lockable:{label:"Lockable",terms:""},man_made:{label:"Type"},manhole:{label:"Type"},manufacturer:{label:"Manufacturer",terms:""},map_size:{label:"Coverage"},map_type:{label:"Type"},material:{label:"Material",terms:""},max_age:{label:"Maximum Age",terms:"upper age limit"},maxheight:{label:"Max Height",terms:"",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},maxspeed:{label:"Speed Limit",terms:"",placeholder:"40, 50, 60..."},"maxspeed/advisory":{label:"Advisory Speed Limit",terms:"",placeholder:"40, 50, 60..."},maxstay:{label:"Max Stay",terms:""},maxweight_bridge:{label:"Max Weight",terms:""},maxweight:{label:"Max Weight",terms:""},memorial:{label:"Type"},microbrewery:{label:"Microbrewery",terms:"brewpub,craft beer"},min_age:{label:"Minimum Age",terms:"lower age limit"},minspeed:{label:"Minimum Speed Limit",terms:"",placeholder:"20, 30, 40..."},monitoring_multi:{label:"Monitoring"},"mtb/scale":{label:"Mountain Biking Difficulty",terms:"",placeholder:"0, 1, 2, 3...",options:{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{label:"IMBA Trail Difficulty",terms:"",placeholder:"Easy, Medium, Difficult...",options:{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{label:"Mountain Biking Uphill Difficulty",terms:"",placeholder:"0, 1, 2, 3...",options:{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},name:{label:"Name",terms:"label,title",placeholder:"Common name (if any)"},natural:{label:"Natural"},network_bicycle:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lcn:"Local",rcn:"Regional",ncn:"National",icn:"International"}},network_foot:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lwn:"Local",rwn:"Regional",nwn:"National",iwn:"International"}},network_horse:{label:"Network Type",placeholder:"Local, Regional, National, International",options:{lhn:"Local",rhn:"Regional",nhn:"National",ihn:"International"}},network_road:{label:"Network"},network:{label:"Network",terms:""},"not/name":{label:"Incorrect Names",terms:"common mistake names,wrong names"},note:{label:"Note",terms:"comment"},office:{label:"Type"},oneway_yes:{label:"One Way",options:{"undefined":"Assumed to be Yes",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},oneway:{label:"One Way",options:{"undefined":"Assumed to be No",yes:"Yes",no:"No",reversible:"Reversible",alternating:"Alternating"}},"oneway/bicycle":{label:"One Way (Bicycles)",terms:""},opening_date:{label:"Expected Opening Date"},opening_hours:{label:"Hours",terms:"",placeholder:"Unknown"},operator:{label:"Operator",terms:""},"operator/type":{label:"Operator Type"},outdoor_seating:{label:"Outdoor Seating",terms:""},par:{label:"Par",placeholder:"3, 4, 5..."},park_ride:{label:"Park and Ride",terms:""},parking:{label:"Type",options:{surface:"Surface","multi-storey":"Multilevel",underground:"Underground",sheds:"Sheds",carports:"Carports",garage_boxes:"Garage Boxes",lane:"Roadside Lane"}},payment_multi_fee:{label:"Payment Types",terms:""},payment_multi:{label:"Payment Types",terms:""},phases:{label:"Phases",placeholder:"1, 2, 3..."},phone:{label:"Telephone",terms:"phone number",placeholder:"+31 42 123 4567"},"piste/difficulty_downhill":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice (instructional)",easy:"Easy (green circle)",intermediate:"Intermediate (blue square)",advanced:"Advanced (black diamond)",expert:"Expert (double black diamond)",freeride:"Freeride (off-piste)",extreme:"Extreme (climbing equipment required)"}},"piste/difficulty_nordic":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - Flat, no effort needed",easy:"Easy - Soft hills, short steep section",intermediate:"Intermediate - Steep section",advanced:"Advanced - Narrow, steep or icy section, sharp turn",expert:"Expert - Dangerous terrain around"}},"piste/difficulty_skitour":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice - L: <30° incline",easy:"Easy - WS: 30-35° incline",intermediate:"Intermediate - ZS: 35-40° incline",advanced:"Advanced - S: 40-45° incline",expert:"Expert - SS: 45–50° incline",freeride:"Freeride - AS: 50–55° incline",extreme:"Extreme - EX: >55° incline"}},"piste/difficulty":{label:"Difficulty",placeholder:"Easy, Intermediate, Advanced...",options:{novice:"Novice",easy:"Easy",intermediate:"Intermediate",advanced:"Advanced",expert:"Expert",freeride:"Freeride",extreme:"Extreme"}},"piste/grooming_downhill":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry - no grooming"}},"piste/grooming_hike":{label:"Grooming",options:{classic:"Classic - Winter Hiking",backcountry:"Backcountry - Snowshoeing"}},"piste/grooming_nordic":{label:"Grooming",options:{classic:"Classic",backcountry:"Backcountry, no grooming","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/grooming":{label:"Grooming",options:{classic:"Classic",mogul:"Mogul",backcountry:"Backcountry","classic+skating":"Classic and Skating",scooter:"Scooter/Snowmobile",skating:"Skating"}},"piste/type":{label:"Type",options:{downhill:"Downhill",nordic:"Nordic",skitour:"Skitour",sled:"Sled",hike:"Hike",sleigh:"Sleigh",ice_skate:"Ice Skate",snow_park:"Snow Park",playground:"Playground",connection:"Connection"}},place:{label:"Type"},plant:{label:"Plant"},"plant/output/electricity":{label:"Power Output",placeholder:"500 MW, 1000 MW, 2000 MW..."},playground:{label:"Type"},"playground/theme":{label:"Theme"},polling_station:{label:"Polling Place",terms:"voting place"},population:{label:"Population"},post:{label:"Delivery Address"},power_supply:{label:"Power Supply",terms:""},power:{label:"Type"},preschool:{label:"Preschool"},produce:{label:"Produce"},product:{label:"Products",terms:""},"public_bookcase/type":{label:"Type"},railway:{label:"Type"},"railway/position":{label:"Milestone Position",placeholder:"Distance to one decimal (123.4)"},"railway/signal/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},rating:{label:"Power Rating"},recycling_accepts:{label:"Accepts"},recycling_type:{label:"Type",placeholder:"Container, Center",options:{container:"Container",centre:"Center"}},ref_aeroway_gate:{label:"Gate Number"},ref_golf_hole:{label:"Hole Number",placeholder:"1-18"},ref_highway_junction:{label:"Junction Number"},ref_platform:{label:"Platform Number"},ref_road_number:{label:"Road Number",terms:""},ref_room_number:{label:"Room Number"},ref_route:{label:"Route Number",terms:""},ref_runway:{label:"Runway Number",placeholder:"e.g. 01L/19R"},ref_stop_position:{label:"Stop Number"},ref_taxiway:{label:"Taxiway Name",placeholder:"e.g. A5"},ref:{label:"Reference Code",terms:""},"ref/isil":{label:"ISIL Code"},relation:{label:"Type"},religion:{label:"Religion",terms:""},reservation:{label:"Reservations",terms:"",options:{yes:"Accepted",no:"Not Accepted",required:"Required",recommended:"Recommended"}},residential:{label:"Type"},resort:{label:"Type"},resource:{label:"Resources"},restriction:{label:"Type"},restrictions:{label:"Turn Restrictions"},"roof/colour":{label:"Roof Color",terms:""},room:{label:"Type"},rooms:{label:"Rooms"},route_master:{label:"Type"},route:{label:"Type"},sac_scale:{label:"Hiking Difficulty",terms:"",placeholder:"Mountain Hiking, Alpine Hiking...",options:{hiking:"T1: Hiking",mountain_hiking:"T2: Mountain Hiking",demanding_mountain_hiking:"T3: Demanding Mountain Hiking",alpine_hiking:"T4: Alpine Hiking",demanding_alpine_hiking:"T5: Demanding Alpine Hiking",difficult_alpine_hiking:"T6: Difficult Alpine Hiking"}},salt:{label:"Salt",terms:"saline,salinated"},sanitary_dump_station:{label:"Toilet Disposal",terms:""},screen:{label:"Screens",placeholder:"1, 4, 8…"},scuba_diving:{label:"Services"},"seamark/beacon_isolated_danger/shape":{label:"Shape"},"seamark/beacon_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right"}},"seamark/beacon_lateral/colour":{label:"Color",options:{red:"Red",green:"Green",grey:"Grey"}},"seamark/beacon_lateral/shape":{label:"Shape"},"seamark/beacon_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/buoy_lateral/category":{label:"Category",options:{port:"Port",starboard:"Starboard",channel_left:"Channel Left",channel_right:"Channel Right",waterway_left:"Waterway Left",waterway_right:"Waterway Right",danger_left:"Danger Left",danger_right:"Danger Right",preferred_channel_port:"Preferred Channel Port",preferred_channel_starboard:"Preferred Channel Starboard"}},"seamark/buoy_lateral/colour":{label:"Color",options:{red:"Red",green:"Green","red;white;red;white":"Red-White-Red-White","green;white;green;white":"Green-White-Green-White","red;green;red":"Red-Green-Red","green;red;green":"Green-Red-Green",white:"White",yellow:"Yellow"}},"seamark/buoy_lateral/shape":{label:"Shape"},"seamark/buoy_lateral/system":{label:"System",options:{"iala-a":"IALA A","iala-b":"IALA B",cevni:"CEVNI",other:"Other"}},"seamark/mooring/category":{label:"Category"},"seamark/type":{label:"Seamark",terms:"marine"},"seamark/wreck/category":{label:"Category"},seasonal:{label:"Seasonal"},seats:{label:"Seats",placeholder:"2, 4, 6..."},second_hand:{label:"Sells Used",terms:"",placeholder:"Yes, No, Only",options:{yes:"Yes",no:"No",only:"Only"}},self_service:{label:"Self-Service"},service_rail:{label:"Service Type",terms:"",options:{spur:"Spur",yard:"Yard",siding:"Siding",crossover:"Crossover"}},service_times:{label:"Service Times"},service:{label:"Type"},"service/bicycle":{label:"Services"},"service/vehicle":{label:"Services"},shelter_type:{label:"Type"},shelter:{label:"Shelter"},shop:{label:"Type"},"siren/purpose":{label:"Purpose"},"siren/type":{label:"Type",options:{pneumatic:"Pneumatic",electronic:"Electronic",other:"Other"}},site_type:{label:"Site Type"},site:{label:"Type"},smoking:{label:"Smoking",terms:"",placeholder:"No, Separated, Yes...",options:{no:"No smoking anywhere",separated:"In smoking areas, not physically isolated",isolated:"In smoking areas, physically isolated",outside:"Allowed outside",yes:"Allowed everywhere",dedicated:"Dedicated to smokers (e.g. smokers' club)"}},smoothness:{label:"Smoothness",terms:"",placeholder:"Thin Rollers, Wheels, Off-Road...",options:{excellent:"Thin Rollers: rollerblade, skateboard",good:"Thin Wheels: racing bike",intermediate:"Wheels: city bike, wheelchair, scooter",bad:"Robust Wheels: trekking bike, car, rickshaw",very_bad:"High Clearance: light duty off-road vehicle",horrible:"Off-Road: heavy duty off-road vehicle",very_horrible:"Specialized off-road: tractor, ATV",impassable:"Impassable / No wheeled vehicle"}},social_facility_for:{label:"People Served"},social_facility:{label:"Type"},source:{label:"Sources",terms:"reference"},"species/wikidata":{label:"Species Wikidata",terms:""},sport_ice:{label:"Sports"},sport_racing_motor:{label:"Sports"},sport_racing_nonmotor:{label:"Sports"},sport:{label:"Sports"},stars:{label:"Stars",terms:"rating"},start_date:{label:"Start Date",terms:"inception"},step_count:{label:"Number of Steps",terms:""},stile:{label:"Type"},stop:{label:"Stop Type",options:{all:"All Ways",minor:"Minor Road"}},street_cabinet:{label:"Type"},stroller:{label:"Stroller Access",terms:"baby carriage,perambulator,pram,pushchair",options:{yes:"Yes",limited:"Limited",no:"No"}},structure_waterway:{label:"Structure",placeholder:"Unknown",options:{tunnel:"Tunnel"}},structure:{label:"Structure",terms:"",placeholder:"Unknown",options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}},studio:{label:"Type"},substance:{label:"Substance"},substation:{label:"Type"},supervised:{label:"Supervised",terms:"guarded,manned"},support:{label:"Support"},surface:{label:"Surface",terms:""},surveillance:{label:"Surveillance Kind"},"surveillance/type":{label:"Surveillance Type",options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}},"surveillance/zone":{label:"Surveillance Zone"},"survey/date":{label:"Last Survey Date",terms:""},swimming_pool:{label:"Type"},"switch":{label:"Type",options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}},tactile_paving:{label:"Tactile Paving",terms:""},takeaway:{label:"Takeaway",terms:"take out,takeout",placeholder:"Yes, No, Takeaway Only...",options:{yes:"Yes",no:"No",only:"Takeaway Only"}},target:{label:"Target"},tidal:{label:"Tidal",terms:""},to:{label:"To"},"toilets/disposal":{label:"Disposal",options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}},"toilets/handwashing":{label:"Handwashing",terms:""},"toilets/position":{label:"Positions",terms:""},toll:{label:"Toll",terms:""},tomb:{label:"Type"},tourism:{label:"Type"},"tower/construction":{label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{label:"Type"},"townhall/type":{label:"Type"},tracktype:{label:"Track Type",placeholder:"Solid, Mostly Solid, Soft...",options:{grade1:"Solid: paved or heavily compacted hardcore surface",grade2:"Mostly Solid: gravel/rock with some soft material mixed in",grade3:"Even mixture of hard and soft materials",grade4:"Mostly Soft: soil/sand/grass with some hard material mixed in",grade5:"Soft: soil/sand/grass"}},trade:{label:"Type"},traffic_calming:{label:"Type"},traffic_sign:{label:"Traffic Sign"},"traffic_sign/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},traffic_signals:{label:"Type"},"traffic_signals/direction":{label:"Direction Affected",options:{forward:"Forward",backward:"Backward",both:"Both / All"}},trail_visibility:{label:"Trail Visibility",terms:"",placeholder:"Excellent, Good, Bad...",options:{excellent:"Excellent: unambiguous path or markers everywhere",good:"Good: markers visible, sometimes require searching",intermediate:"Intermediate: few markers, path mostly visible",bad:"Bad: no markers, path sometimes invisible/pathless",horrible:"Horrible: often pathless, some orientation skills required",no:"No: pathless, excellent orientation skills required"}},transformer:{label:"Type",options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}},trees:{label:"Trees"},trench:{label:"Type"},trolley_wire:{label:"Overhead Trolley Wires",terms:""},tunnel:{label:"Type",placeholder:"Default"},usage_rail:{label:"Usage Type",terms:"",options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}},valve:{label:"Type"},vending:{label:"Types of Goods"},visibility:{label:"Visibility",options:{house:"Up to 5m (16ft)",street:"5 to 20m (16 to 65ft)",area:"Over 20m (65ft)"}},"volcano/status":{label:"Volcano Status",options:{active:"Active",dormant:"Dormant",extinct:"Extinct"}},"volcano/type":{label:"Volcano Type",options:{stratovolcano:"Stratovolcano",shield:"Shield",scoria:"Scoria"}},voltage_electrified:{label:"Voltage",terms:""},voltage:{label:"Voltage"},"voltage/primary":{label:"Primary Voltage",terms:""},"voltage/secondary":{label:"Secondary Voltage",terms:""},"voltage/tertiary":{label:"Tertiary Voltage",terms:""},wall:{label:"Type"},waste:{label:"Waste"},water_point:{label:"Water Point"},water_source:{label:"Water Source"},water_volume:{label:"Water Reserve Volume (m³)",terms:""},water:{label:"Type"},waterway:{label:"Type"},website:{label:"Website",terms:"internet presence,uri,url,webpage",placeholder:"https://example.com"},wetland:{label:"Type"},wheelchair:{label:"Wheelchair Access",terms:"handicap access",options:{yes:"Yes",limited:"Limited",no:"No"}},wholesale:{label:"Wholesale"},width:{label:"Width (Meters)",terms:""},wikidata:{label:"Wikidata",terms:""},wikipedia:{label:"Wikipedia",terms:""},windings:{label:"Windings",terms:"",placeholder:"1, 2, 3..."},"windings/configuration":{label:"Windings Configuration",terms:"",options:{star:"Star / Wye",delta:"Delta","open-delta":"Open Delta",zigzag:"Zig Zag",open:"Open",scott:"Scott",leblanc:"Leblanc"}}},presets:{aerialway:{name:"Aerialway"},aeroway:{name:"Aeroway"},amenity:{name:"Amenity"},attraction:{name:"Attraction"},boundary:{name:"Boundary"},building_point:{name:"Building"},embankment:{name:"Embankment"},emergency:{name:"Emergency Feature"},ford_line:{name:"Ford"},highway:{name:"Highway"},indoor:{name:"Indoor Feature"},landuse:{name:"Land Use"},leisure:{name:"Leisure"},man_made:{name:"Man Made"},natural:{name:"Natural"},place:{name:"Place"},playground:{name:"Playground Equipment"},power:{name:"Power"},railway:{name:"Railway"},seamark:{name:"Seamark"},tourism:{name:"Tourism"},waterway:{name:"Waterway"},"addr/interpolation":{name:"Address Interpolation"},address:{name:"Address",terms:""},"advertising/billboard":{name:"Billboard",terms:""},"advertising/column":{name:"Advertising Column",terms:""},"aerialway/station":{name:"Aerialway Station"},"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/spaceport":{name:"Spaceport",terms:"cosmodrome,rocket launch center,rocket launch complex,rocket launch site,rocket range,space port"},"aeroway/taxiway":{name:"Taxiway",terms:""},"aeroway/terminal":{name:"Airport Terminal",terms:"airport,aerodrome"},"aeroway/windsock":{name:"Windsock",terms:""},"allotments/plot":{name:"Community Garden Plot",terms:""},"amenity/bus_station":{name:"Bus Station / Terminal"},"amenity/coworking_space":{name:"Coworking Space"},"amenity/embassy":{name:"Embassy"},"amenity/ferry_terminal":{name:"Ferry Station / Terminal"},"amenity/nursing_home":{name:"Nursing Home"},"amenity/recycling":{name:"Recycling"},"amenity/register_office":{name:"Register Office"},"amenity/scrapyard":{name:"Scrap Yard"},"amenity/swimming_pool":{name:"Swimming Pool"},"amenity/animal_boarding":{name:"Animal Boarding Facility",terms:"boarding,cat,cattery,dog,horse,kennel,kitten,pet,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{name:"Animal Breeding Facility",terms:"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{name:"Animal Shelter",terms:"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca,pound"},"amenity/arts_centre":{name:"Arts Center",terms:""},"amenity/atm":{name:"ATM",terms:"money,cash,machine"},"amenity/bank":{name:"Bank",terms:"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{name:"Bar",terms:"dive,beer,bier,booze"},"amenity/bar/lgbtq":{name:"LGBTQ+ Bar",terms:"gay bar,lesbian bar,lgbtq bar,lgbt bar,lgb bar"},"amenity/bbq":{name:"Barbecue/Grill",terms:"bbq,grill"},"amenity/bench":{name:"Bench",terms:"seat,chair"},"amenity/bicycle_parking":{name:"Bicycle Parking",terms:"bike,cycle parking,cycling"},"amenity/bicycle_parking/building":{name:"Bicycle Parking Garage",terms:"Bike Parking Station,cycle parking,cycling,Multi-Storey Bicycle Park,Multi-Storey Bike Park"},"amenity/bicycle_parking/lockers":{name:"Bicycle Lockers",terms:"cycle locker,cycling,Bike Lockers"},"amenity/bicycle_parking/shed":{name:"Bicycle Shed",terms:"cycle shed,cycling,Bike Shed"},"amenity/bicycle_rental":{name:"Bicycle Rental",terms:"bike,bicycle,bikeshare,bike share,bicycle share,cycle dock,cycle hub,cycleshare,cycling"},"amenity/bicycle_repair_station":{name:"Bicycle Repair Tool Stand",terms:"bike chain,bike multitool,bike repair,bike tools,cycle pump,cycle repair,cycling"},"amenity/biergarten":{name:"Biergarten",terms:"beer,bier,booze"},"amenity/boat_rental":{name:"Boat Rental",terms:""},"amenity/bureau_de_change":{name:"Currency Exchange",terms:"bureau de change,money changer"},"amenity/cafe":{name:"Cafe",terms:"bistro,coffee,tea"},"amenity/car_pooling":{name:"Car Pooling",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"},"amenity/fast_food/burger":{name:"Burger Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/chicken":{name:"Chicken Fast Food",terms:"breakfast,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/donut":{name:"Donut Fast Food",terms:"breakfast,brunch,cafe,canteen,coffee,dine,diner,donut,doughnut,dining,eat,lunch,table"},"amenity/fast_food/fish_and_chips":{name:"Fish & Chips Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table,french fries"},"amenity/fast_food/hot_dog":{name:"Hot Dog Fast Food",terms:"ballpark,frankfurter,frank,hotdog stand,sandwich,sausage,wiener"},"amenity/fast_food/kebab":{name:"Kebab Fast Food",terms:"bar,breakfast,cafe,café,canteen,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fast_food/mexican":{name:"Mexican Fast Food",terms:"breakfast,dine,dining,dinner,drive-in,eat,grill,lunch,table,tacos,burritos,enchiladas,fajitas,nachos,tortillas,salsa,tamales,quesadillas"},"amenity/fast_food/pizza":{name:"Pizza Fast Food",terms:"dine,dining,dinner,drive-in,eat,lunch,table,deep dish,thin crust,slice"},"amenity/fast_food/sandwich":{name:"Sandwich Fast Food",terms:"breakfast,cafe,café,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/fire_station":{name:"Fire Station",terms:""},"amenity/food_court":{name:"Food Court",terms:"fast food,restaurant,food"},"amenity/fountain":{name:"Fountain",terms:""},"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/loading_dock":{name:"Loading Dock",terms:"door,loading bay,shipping,unloading,warehouse"},"amenity/love_hotel":{name:"Love Hotel",terms:""},"amenity/marketplace":{name:"Marketplace",terms:""},"amenity/monastery":{name:"Monastery Grounds",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,monastery,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/money_transfer":{name:"Money Transfer Station",terms:"money order,check,bill,currency,finance,wire transfer,cable,person to person,cash to cash,exchange"},"amenity/motorcycle_parking":{name:"Motorcycle Parking",terms:""},"amenity/music_school":{name:"Music School",terms:"school of music"},"amenity/nightclub":{name:"Nightclub",terms:"disco*,night club,dancing,dance club"},"amenity/nightclub/lgbtq":{name:"LGBTQ+ Nightclub",terms:"gay nightclub,lesbian nightclub,lgbtq nightclub,lgbt nightclub,lgb nightclub"},"amenity/parking_entrance":{name:"Parking Garage Entrance/Exit",terms:""},"amenity/parking_space":{name:"Parking Space",terms:""},"amenity/parking":{name:"Parking Lot",terms:"automobile parking,car lot,car parking,rv parking,truck parking,vehicle parking"},"amenity/parking/multi-storey":{name:"Multilevel Parking Garage",terms:"car,indoor parking,multistorey car park,parkade,parking building,parking deck,parking garage,parking ramp,parking structure"},"amenity/parking/park_ride":{name:"Park & Ride Lot",terms:"commuter parking lot,incentive parking lot,metro parking lot,park and pool lot,park and ride lot,P+R,public transport parking lot,public transit parking lot,train parking lot"},"amenity/parking/underground":{name:"Underground Parking",terms:"automobile parking,car lot,car parking,rv parking,subsurface parking,truck parking,vehicle parking"},"amenity/payment_centre":{name:"Payment Center",terms:"check,tax pay,bill pay,currency,finance,cash,money"},"amenity/payment_terminal":{name:"Payment Terminal",terms:"interactive kiosk,ekiosk,atm,bill pay,tax pay,phone pay,finance,cash,money transfer,card"},"amenity/pharmacy":{name:"Pharmacy Counter",terms:"apothecary,drug store,drugstore,med*,prescription"},"amenity/photo_booth":{name:"Photo Booth",terms:"photobooth,photo,booth,kiosk,camera"},"amenity/place_of_worship":{name:"Place of Worship",terms:"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{name:"Buddhist Temple",terms:"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{name:"Christian Church",terms:"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/christian/jehovahs_witness":{name:"Kingdom Hall of Jehovah's Witnesses",terms:"christian,church,house of God,house of prayer,house of worship"},"amenity/place_of_worship/christian/la_luz_del_mundo":{name:"La Luz del Mundo Temple",terms:"christian,church,house of God,house of prayer,house of worship,the light of the world church"},"amenity/place_of_worship/christian/quaker":{name:"Quaker Friends Meeting House",terms:"christian,church,house of God,house of prayer,house of worship"},"amenity/place_of_worship/hindu":{name:"Hindu Temple",terms:"kovil,devasthana,mandir,kshetram,alayam,shrine,temple"},"amenity/place_of_worship/jewish":{name:"Jewish Synagogue",terms:"jewish"},"amenity/place_of_worship/muslim":{name:"Muslim Mosque",terms:"islam,islamic center,muslim"},"amenity/place_of_worship/shinto":{name:"Shinto Shrine",terms:"kami,torii"},"amenity/place_of_worship/sikh":{name:"Sikh Temple",terms:"gurudwara,temple"},"amenity/place_of_worship/taoist":{name:"Taoist Temple",terms:"daoist,monastery,temple"},"amenity/planetarium":{name:"Planetarium",terms:"museum,astronomy,observatory"},"amenity/police":{name:"Police",terms:"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/polling_station":{name:"Permanent Polling Place",terms:"ballot box,ballot drop,democracy,elections,polling place,vote,voting booth,voting machine"},"amenity/post_box":{name:"Mail Drop Box",terms:"drop box,dropbox,letter drop,mail box,mail collection box,mail drop,mail dropoff,mailbox,package drop,pillar box,pillarbox,post box,postal box,postbox"},"amenity/post_depot":{name:"Post Sorting Office",terms:"mail processing and distribution center,post depot"},"amenity/post_office":{name:"Post Office",terms:"letter,mail"},"amenity/prep_school":{name:"Test Prep / Tutoring School",terms:"academic,ACT,SAT,homework,math,reading,test prep,tutoring,writing"},"amenity/prison":{name:"Prison Grounds",terms:"cell,jail,correction"},"amenity/pub":{name:"Pub",terms:"alcohol,drink,dive,beer,bier,booze"},"amenity/pub/lgbtq":{name:"LGBTQ+ Pub",terms:"gay pub,lesbian pub,lgbtq pub,lgbt pub,lgb pub"},"amenity/pub/microbrewery":{name:"Brewpub",terms:"alcohol,drink,dive,beer,bier,booze,craft brewery,microbrewery,small batch brewery"},"amenity/public_bath":{name:"Public Bath",terms:"onsen,foot bath,hot springs"},"amenity/public_bookcase":{name:"Public Bookcase",terms:"library,bookcrossing"},"amenity/ranger_station":{name:"Ranger Station",terms:"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{name:"Recycling Center",terms:"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling_container":{name:"Recycling Container",terms:"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/recycling/container/electrical_items":{name:"E-Waste Container",terms:"computers,electronic waste,electronics recycling,ewaste bin,phones,tablets"},"amenity/recycling/container/green_waste":{name:"Green Waste Container",terms:"biodegradable,biological,compost,decomposable,garbage bin,garden waste,organic,rubbish,food scrap"},"amenity/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/studio/audio":{name:"Recording Studio",terms:"audio mixing,audio production,audio recording,audio studio"},"amenity/studio/radio":{name:"Radio Station",terms:"am radio,fm radio,radio broadcast,radio studio"},"amenity/studio/television":{name:"Television Station",terms:"television broadcast,television studio,tv broadcast,tv station,tv studio"},"amenity/studio/video":{name:"Film Studio",terms:"movie production,movie studio,video production,video recording,video studio"},"amenity/taxi":{name:"Taxi Stand",terms:"cab"},"amenity/telephone":{name:"Telephone",terms:"phone"},"amenity/theatre":{name:"Theater",terms:"theatre,performance,play,musical"},"amenity/theatre/type/amphi":{name:"Amphitheatre",terms:"open air,outdoor,greek,ampi"},"amenity/toilets":{name:"Toilets",terms:"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/toilets/disposal/flush":{name:"Flush Toilets",terms:"bathroom,head,lavatory,privy,restroom,water closet,WC,W.C."},"amenity/toilets/disposal/pitlatrine":{name:"Pit Latrine",terms:"head,lavatory,long drop,outhouse,pit toilet,privy"},"amenity/townhall":{name:"Town Hall",terms:"village,city,government,courthouse,municipal"},"amenity/townhall/city":{name:"City Hall",terms:"council,courthouse,government,mayor,municipality"},"amenity/toy_library":{name:"Toy Library",terms:"game,toy"},"amenity/university":{name:"University Grounds",terms:"college,graduate school,PhD program,master's degree program"},"amenity/vehicle_inspection":{name:"Vehicle Inspection",terms:"car inspection"},"amenity/vending_machine":{name:"Vending Machine",terms:""},"amenity/vending_machine/bottle_return":{name:"Bottle Return Machine",terms:"bottle return"},"amenity/vending_machine/bread":{name:"Bread Vending Machine",terms:"baguette,bread"},"amenity/vending_machine/cigarettes":{name:"Cigarette Vending Machine",terms:"cigarette"},"amenity/vending_machine/coffee":{name:"Coffee Vending Machine",terms:"coffee"},"amenity/vending_machine/condoms":{name:"Condom Vending Machine",terms:"condom"},"amenity/vending_machine/drinks":{name:"Drink Vending Machine",terms:"drink,soda,beverage,juice,pop"},"amenity/vending_machine/eggs":{name:"Egg Vending Machine",terms:"egg"},"amenity/vending_machine/electronics":{name:"Electronics Vending Machine",terms:"cable,charger,earbud,headphone,phone,tablet"},"amenity/vending_machine/elongated_coin":{name:"Flat Coin Vending Machine",terms:"coin,crush,elongated,flatten,penny,souvenir"},"amenity/vending_machine/excrement_bags":{name:"Excrement Bag Dispenser",terms:"excrement bags,poop,waste,dog,animal"},"amenity/vending_machine/feminine_hygiene":{name:"Feminine Hygiene Vending Machine",terms:"condom,tampon,pad,woman,women,menstrual hygiene products,personal care"},"amenity/vending_machine/food":{name:"Food Vending Machine",terms:"food"},"amenity/vending_machine/fuel":{name:"Gas Pump",terms:"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/vending_machine/ice_cream":{name:"Ice Cream Vending Machine",terms:"chocolate,ice cream,frozen,popsicle,vanilla"},"amenity/vending_machine/ice_cubes":{name:"Ice Vending Machine",terms:"cubes,ice"},"amenity/vending_machine/newspapers":{name:"Newspaper Vending Machine",terms:"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{name:"Parcel Pickup/Dropoff Locker",terms:"mail,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:""},"amenity/weighbridge":{name:"Truck Scale",terms:"weigh station,weighbridge"},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 Cars",terms:"theme park,dodgem cars,autoscooter"},"attraction/bungee_jumping":{name:"Bungee Jumping",terms:"theme park,bungy jumping,jumping platform"},"attraction/carousel":{name:"Carousel",terms:"theme park,roundabout,merry-go-round,galloper,jumper,horseabout,flying horses"},"attraction/dark_ride":{name:"Dark Ride",terms:"theme park,ghost train"},"attraction/drop_tower":{name:"Drop Tower",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"},"barrier/block":{name:"Block",terms:""},"barrier/bollard_line":{name:"Bollard Row",terms:""},"barrier/bollard":{name:"Bollard",terms:""},"barrier/border_control":{name:"Border Control",terms:""},"barrier/cattle_grid":{name:"Cattle Grid",terms:""},"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:""},"barrier/wall/noise_barrier":{name:"Noise Barrier",terms:"acoustical barrier,noise wall,noisewall,sound barrier,sound berm,sound wall,soundberm,soundwall"},"boundary/administrative":{name:"Administrative Boundary",terms:""},"bridge/support":{name:"Bridge Support",terms:""},"bridge/support/pier":{name:"Bridge Pier",terms:""},building_part:{name:"Building Part",terms:"roof,simple 3D buildings"},building:{name:"Building",terms:""},"building/bunker":{name:"Bunker"},"building/entrance":{name:"Entrance/Exit"},"building/train_station":{name:"Train Station Building"},"building/apartments":{name:"Apartment Building",terms:""},"building/barn":{name:"Barn",terms:""},"building/boathouse":{name:"Boathouse",terms:""},"building/bungalow":{name:"Bungalow",terms:"home,detached"},"building/cabin":{name:"Cabin",terms:""},"building/carport":{name:"Carport",terms:"covered parking space,garage,car,porch"},"building/cathedral":{name:"Cathedral Building",terms:""},"building/chapel":{name:"Chapel Building",terms:""},"building/church":{name:"Church Building",terms:""},"building/civic":{name:"Civic Building",terms:""},"building/college":{name:"College Building",terms:"university"},"building/commercial":{name:"Commercial Building",terms:""},"building/construction":{name:"Building Under Construction",terms:""},"building/detached":{name:"Detached House",terms:"home,single,family,residence,dwelling"},"building/dormitory":{name:"Dormitory",terms:""},"building/farm_auxiliary":{name:"Farm Building",terms:""},"building/farm":{name:"Farm House",terms:""},"building/garage":{name:"Garage",terms:""},"building/garages":{name:"Garages",terms:""},"building/grandstand":{name:"Grandstand",terms:"tribune,stand,stands,bleachers"},"building/greenhouse":{name:"Greenhouse",terms:""},"building/hangar":{name:"Hangar Building",terms:""},"building/hospital":{name:"Hospital Building",terms:""},"building/hotel":{name:"Hotel Building",terms:""},"building/house":{name:"House",terms:"home,family,residence,dwelling"},"building/houseboat":{name:"Houseboat",terms:"home,family,residence,dwelling"},"building/hut":{name:"Hut",terms:""},"building/industrial":{name:"Industrial Building",terms:""},"building/kindergarten":{name:"Preschool/Kindergarten Building",terms:"kindergarden,pre-school"},"building/mosque":{name:"Mosque Building",terms:""},"building/pavilion":{name:"Pavilion Building",terms:"sports"},"building/public":{name:"Public Building",terms:""},"building/residential":{name:"Residential Building",terms:""},"building/retail":{name:"Retail Building",terms:""},"building/roof":{name:"Roof",terms:""},"building/ruins":{name:"Building Ruins",terms:""},"building/school":{name:"School Building",terms:"academy,elementary school,middle school,high school"},"building/semidetached_house":{name:"Semi-Detached House",terms:"home,double,duplex,twin,family,residence,dwelling"},"building/service":{name:"Service Building",terms:""},"building/shed":{name:"Shed",terms:""},"building/stable":{name:"Stable",terms:""},"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"},"craft/locksmith":{name:"Locksmith"},"craft/optician":{name:"Optician"},"craft/tailor":{name:"Tailor"},"craft/agricultural_engines":{name:"Argricultural Engines Mechanic",terms:""},"craft/basket_maker":{name:"Basket Maker",terms:""},"craft/beekeeper":{name:"Beekeeper",terms:""},"craft/blacksmith":{name:"Blacksmith",terms:""},"craft/boatbuilder":{name:"Boat Builder",terms:""},"craft/bookbinder":{name:"Bookbinder",terms:"book repair"},"craft/brewery":{name:"Brewery",terms:"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{name:"Carpenter",terms:"woodworker"},"craft/carpet_layer":{name:"Carpet Layer",terms:""},"craft/caterer":{name:"Caterer",terms:""},"craft/chimney_sweeper":{name:"Chimney Sweeper",terms:""},"craft/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"},"emergency/destination":{name:"Emergency Access Destination"},"emergency/no":{name:"Emergency Access No"},"emergency/official":{name:"Emergency Access Official"},"emergency/private":{name:"Emergency Access Private"},"emergency/yes":{name:"Emergency Access Yes"},"emergency/ambulance_station":{name:"Ambulance Station",terms:"EMS,EMT,rescue"},"emergency/defibrillator":{name:"Defibrillator",terms:"AED"},"emergency/fire_alarm":{name:"Fire Alarm Call Box",terms:""},"emergency/fire_extinguisher":{name:"Fire Extinguisher",terms:""},"emergency/fire_hose":{name:"Fire Hose",terms:""},"emergency/fire_hydrant":{name:"Fire Hydrant",terms:"fire plug,fire water well,hydrant"},"emergency/first_aid_kit":{name:"First Aid Kit",terms:"bandage,first aid,med,med kit,medic*,medkit"},"emergency/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"},"highway/crossing":{name:"Crossing"},"highway/bridleway":{name:"Bridle Path",terms:"bridleway,equestrian,horse,trail"},"highway/bus_guideway":{name:"Bus Guideway",terms:""},"highway/construction":{name:"Road Closed",terms:"closed,closure,construction"},"highway/corridor":{name:"Indoor Corridor",terms:"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing/zebra-raised":{name:"Marked Crosswalk (Raised)"},"highway/crossing/zebra":{name:"Marked Crosswalk"},"highway/crossing/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/crossing/marked":{name:"Marked Crosswalk",terms:"zebra crossing,marked crossing,crosswalk"},"highway/crossing/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/crossing/unmarked":{name:"Unmarked Crossing",terms:""},"highway/cycleway":{name:"Cycle Path",terms:"bicyle path,bike path,cycling path"},"highway/cycleway/crossing":{name:"Cycle Crossing"},"highway/cycleway/bicycle_foot":{name:"Cycle & Foot Path",terms:"bicycle and foot path,bike and pedestrian path,green way,greenway,mixed-use trail,multi-use trail,segregated trail,rail trail"},"highway/cycleway/crossing/marked":{name:"Marked Cycle Crossing",terms:"cycle crosswalk,cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/cycleway/crossing/unmarked":{name:"Unmarked Cycle Crossing",terms:"cycle path crossing,cycleway crossing,bicycle crossing,bike crossing"},"highway/elevator":{name:"Elevator",terms:"lift"},"highway/emergency_bay":{name:"Emergency Stopping Place",terms:"Highway Emergency Bay"},"highway/footway":{name:"Foot Path",terms:"hike,hiking,promenade,trackway,trail,walk"},"highway/footway/crossing":{name:"Pedestrian Crossing"},"highway/footway/zebra-raised":{name:"Marked Crosswalk (Raised)"},"highway/footway/zebra":{name:"Marked Crosswalk"},"highway/footway/conveying":{name:"Moving Walkway",terms:"moving sidewalk,autwalk,skywalk,travolator,travelator,travellator,conveyor"},"highway/footway/marked-raised":{name:"Marked Crosswalk (Raised)",terms:"zebra crossing,marked crossing,crosswalk,flat top,hump,speed,slow"},"highway/footway/marked":{name:"Marked Crosswalk",terms:"marked foot path crossing,marked crossing,marked pedestrian crosswalk,zebra crossing"},"highway/footway/sidewalk":{name:"Sidewalk",terms:"pavement,sidepath"},"highway/footway/unmarked-raised":{name:"Unmarked Crossing (Raised)",terms:"flat top,hump,speed,slow"},"highway/footway/unmarked":{name:"Unmarked Crossing",terms:"unmarked foot path crossing,unmarked crosswalk,unmarked pedestrian crossing"},"highway/give_way":{name:"Yield Sign",terms:"give way,yield,sign"},"highway/living_street":{name:"Living Street",terms:""},"highway/milestone":{name:"Highway Milestone",terms:"mile marker,mile post,mile stone,mileage marker,milemarker,milepost"},"highway/mini_roundabout":{name:"Mini-Roundabout",terms:"traffic circle"},"highway/motorway_junction":{name:"Motorway Junction / Exit",terms:"exit"},"highway/motorway_link":{name:"Motorway Link",terms:"exit,ramp,road,street,on ramp,off ramp"},"highway/motorway":{name:"Motorway",terms:"autobahn,expressway,freeway,highway,interstate,parkway,road,street,thruway,turnpike"},"highway/passing_place":{name:"Passing Place",terms:"turnout, pullout"},"highway/path":{name:"Path",terms:"hike,hiking,trackway,trail,walk"},"highway/path/informal":{name:"Informal Path",terms:"bootleg trail,cow path,desire line,desire path,desireline,desirepath,elephant path,game trail,goat track,herd path,pig trail,shortcut,social trail,use trail"},"highway/pedestrian_area":{name:"Pedestrian Area",terms:"center,centre,plaza,quad,square,walkway"},"highway/pedestrian_line":{name:"Pedestrian Street",terms:"center,centre,plaza,quad,square,walkway"},"highway/primary_link":{name:"Primary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/primary":{name:"Primary Road",terms:"road,street"},"highway/raceway":{name:"Motorsport Racetrack",terms:"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/raceway/karting":{name:"Karting Racetrack",terms:"carting,go carts,go karts,go-karts,gokarts,kart racing,karting track,motorsports,shifter karts,superkarts"},"highway/raceway/motocross":{name:"Motocross Racetrack",terms:"off-road racing,offroad moto racing,motocross circuit,motorcycle track,motorsports"},"highway/residential":{name:"Residential Road",terms:"road,street"},"highway/rest_area":{name:"Rest Area",terms:"rest stop"},"highway/road":{name:"Unknown Road",terms:"road,street"},"highway/secondary_link":{name:"Secondary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/secondary":{name:"Secondary Road",terms:"road,street"},"highway/service":{name:"Service Road",terms:"road,street"},"highway/service/alley":{name:"Alley",terms:""},"highway/service/drive-through":{name:"Drive-Through",terms:""},"highway/service/driveway":{name:"Driveway",terms:""},"highway/service/emergency_access":{name:"Emergency Access",terms:""},"highway/service/parking_aisle":{name:"Parking Aisle",terms:""},"highway/services":{name:"Service Area",terms:"services,travel plaza,service station"},"highway/speed_camera":{name:"Speed Camera",terms:""},"highway/steps":{name:"Steps",terms:"stairs,staircase,stairway"},"highway/steps/conveying":{name:"Escalator",terms:"moving staircase,moving stairway,people mover"},"highway/stop":{name:"Stop Sign",terms:"stop,halt,sign"},"highway/street_lamp":{name:"Street Lamp",terms:"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{name:"Tertiary Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/tertiary":{name:"Tertiary Road",terms:"road,street"},"highway/track":{name:"Unmaintained Track Road",terms:"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{name:"Traffic Mirror",terms:"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{name:"Traffic Signals",terms:"light,stoplight,traffic light"},"highway/trailhead":{name:"Trailhead",terms:"hiking,mile zero,mountain biking,mountaineering,trail endpoint,trail start,staging area,trekking"},"highway/trunk_link":{name:"Trunk Link",terms:"on ramp,off ramp,ramp,road,street"},"highway/trunk":{name:"Trunk Road",terms:"road,street"},"highway/turning_circle":{name:"Turning Circle",terms:"cul-de-sac"},"highway/turning_loop":{name:"Turning Loop (Island)",terms:"cul-de-sac"},"highway/unclassified":{name:"Minor/Unclassified Road",terms:"road,street"},historic:{name:"Historic Site",terms:""},"historic/archaeological_site":{name:"Archaeological Site",terms:""},"historic/boundary_stone":{name:"Boundary Stone",terms:""},"historic/castle":{name:"Castle",terms:""},"historic/castle/fortress":{name:"Historic Fortress",terms:"citadel,military"},"historic/castle/palace":{name:"Palace",terms:"Royal Residence,royal,king,queen"},"historic/castle/stately":{name:"Château",terms:"Historic Country House,Stately Home,nobility,gentry,representative"},"historic/city_gate":{name:"City Gate",terms:"Town Gate"},"historic/fort":{name:"Historic Fort",terms:"military"},"historic/manor":{name:"Manor House",terms:"Mansion,gentry,nobility,estate"},"historic/memorial":{name:"Memorial",terms:"dedicatory,epitaph,remember,remembrance,memory,monument,stolperstein"},"historic/memorial/plaque":{name:"Commemorative Plaque",terms:"dedicatory,epitaph,historical marker,remember,remembrance,memory"},"historic/monument":{name:"Monument",terms:""},"historic/ruins":{name:"Ruins",terms:""},"historic/tomb":{name:"Tomb",terms:""},"historic/wayside_cross":{name:"Wayside Cross",terms:""},"historic/wayside_shrine":{name:"Wayside Shrine",terms:""},"historic/wreck":{name:"Shipwreck",terms:"hull,mast,maritime,remains,ship,boat"},"indoor/corridor_line":{name:"Indoor Corridor"},"indoor/area":{name:"Indoor Area",terms:"indoor space"},"indoor/corridor":{name:"Indoor Corridor",terms:"concourse,foyer,hallway,passageway"},"indoor/door":{name:"Indoor Door",terms:"doorframe,doorway,portal,room access,threshold"},"indoor/elevator":{name:"Indoor Elevator Shaft",terms:"elevator,lift"},"indoor/room":{name:"Room",terms:"antechamber,anteroom,atrium,cell,chamber,concourse,foyer,indoor room,lobby,vestibule"},"indoor/stairs":{name:"Indoor Stairwell",terms:"stair,stairs,staircase,stairway,stairwell,steps"},"indoor/wall":{name:"Indoor Wall",terms:"indoor barrier,room divider,room partition"},"internet_access/wlan":{name:"Wi-Fi Hotspot",terms:"wi-fi,wifi,hotspot"},junction:{name:"Junction",terms:""},"junction/circular":{name:"Traffic Circle"},"junction/jughandle":{name:"Jughandle"},"junction/roundabout":{name:"Roundabout"},"landuse/basin":{name:"Basin"},"landuse/farm":{name:"Farmland"},"landuse/pond":{name:"Pond"},"landuse/reservoir":{name:"Reservoir"},"landuse/allotments":{name:"Community Garden",terms:"allotment,garden"},"landuse/aquaculture":{name:"Aquaculture",terms:"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/brownfield":{name:"Brownfield",terms:""},"landuse/cemetery":{name:"Cemetery",terms:""},"landuse/churchyard":{name:"Churchyard",terms:""},"landuse/commercial":{name:"Commercial Area",terms:""},"landuse/construction":{name:"Construction Area",terms:"building,bulldozer,construction site,construction zone,crane,demolition,development,infrastructure"},"landuse/farmland":{name:"Farmland",terms:"crop,grow,plant"},"landuse/farmyard":{name:"Farmyard",terms:"crop,grow,plant"},"landuse/flowerbed":{name:"Flowerbed",terms:"floral garden,flower garden"},"landuse/forest":{name:"Managed Forest",terms:"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/manhole":{name:"Manhole",terms:"cover,hole,sewer,sewage,telecom"},"man_made/manhole/drain":{name:"Storm Drain",terms:"cover,drain,hole,rain,sewer,sewage,storm"},"man_made/manhole/gas":{name:"Gas Utility Manhole",terms:"cover,gas,heat,hole,utility"},"man_made/manhole/power":{name:"Power Utility Manhole",terms:"cover,hole,electric,hole,power,utility"},"man_made/manhole/sewer":{name:"Sewer Utility Manhole",terms:"cover,drain,hole,sewer,sewage,utility"},"man_made/manhole/telecom":{name:"Telecom Utility Manhole",terms:"bt,cable,cover,phone,hole,telecom,telephone,utility"},"man_made/manhole/water":{name:"Water Utility Manhole",terms:"cover,drinking,hole,utility,water"},"man_made/mast":{name:"Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication":{name:"Communication Mast",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/mast/communication/mobile_phone":{name:"Mobile Phone Mast",terms:"antenna,cell mast,cell phone mast,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,transmission mast,transmission tower"},"man_made/mast/communication/radio":{name:"Radio Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,radio mast,radio tower,transmission mast,transmission tower"},"man_made/mast/communication/television":{name:"Television Broadcast Mast",terms:"antenna,broadcast tower,communication mast,communication tower,guyed tower,television mast,television tower,transmission mast,transmission tower,tv mast,tv tower"},"man_made/mineshaft":{name:"Mineshaft",terms:"cave,mine shaft,tunnel,underground,vertical mine entrance"},"man_made/monitoring_station":{name:"Monitoring Station",terms:"weather,earthquake,seismology,air,gps"},"man_made/obelisk":{name:"Obelisk",terms:""},"man_made/observatory":{name:"Observatory",terms:"astronomical,meteorological"},"man_made/petroleum_well":{name:"Oil Well",terms:"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{name:"Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pier/floating":{name:"Floating Pier",terms:"berth,dock,jetty,landing,promenade,wharf"},"man_made/pipeline":{name:"Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/underground":{name:"Underground Pipeline",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pipeline/valve":{name:"Pipeline Valve",terms:"oil,natural gas,water,sewer,sewage"},"man_made/pumping_station":{name:"Pumping Station",terms:""},"man_made/silo":{name:"Silo",terms:"grain,corn,wheat"},"man_made/storage_tank":{name:"Storage Tank",terms:"water,oil,gas,petrol"},"man_made/storage_tank/water":{name:"Water Tank",terms:"cistern,water tower"},"man_made/street_cabinet":{name:"Street Cabinet",terms:"cable tv,monitoring box,technical box,telecommunications,traffic signal controls"},"man_made/surveillance":{name:"Surveillance",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance/camera":{name:"Surveillance Camera",terms:"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{name:"Survey Point",terms:"trig point,triangulation pillar,trigonometrical station"},"man_made/torii":{name:"Torii",terms:"Japanese gate,Shinto shrine"},"man_made/tower":{name:"Tower",terms:""},"man_made/tower/bell_tower":{name:"Bell Tower",terms:"belfry,bell gable,campanile,church tower,klockstapel"},"man_made/tower/communication":{name:"Communication Tower",terms:"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/tower/defensive":{name:"Fortified Tower",terms:"Defensive Tower,Castle Tower"},"man_made/tower/minaret":{name:"Minaret",terms:"Islam,mosque,Muezzin,Muslim"},"man_made/tower/observation":{name:"Observation Tower",terms:"lookout tower,fire tower"},"man_made/tunnel":{name:"Tunnel",terms:"bore,dig,shaft,underground passage,underpass"},"man_made/utility_pole":{name:"Utility Pole",terms:""},"man_made/wastewater_plant":{name:"Wastewater Plant",terms:"sewage*,water treatment plant,reclamation plant"},"man_made/water_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"},"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"},"office/physician":{name:"Physician"},"office/travel_agent":{name:"Travel Agency"},"office/accountant":{name:"Accountant Office",terms:""},"office/adoption_agency":{name:"Adoption Agency",terms:""},"office/advertising_agency":{name:"Advertising Agency",terms:"ad,ad agency,advert agency,advertising,marketing"},"office/architect":{name:"Architect Office",terms:""},"office/association":{name:"Nonprofit Organization Office",terms:"association,non-profit,nonprofit,organization,society"},"office/bail_bond_agent":{name:"Bail Bond Agent",terms:"bail bond dealer,bail bond man,bail bondsman,bail bondsperson"},"office/charity":{name:"Charity Office",terms:"charitable organization"},"office/company":{name:"Corporate Office",terms:""},"office/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"},"office/moving_company":{name:"Moving Company Office",terms:"relocation"},"office/newspaper":{name:"Newspaper Office",terms:""},"office/ngo":{name:"NGO Office",terms:"ngo,non government,non-government,organization,organisation"},"office/notary":{name:"Notary Office",terms:"clerk,deeds,estate,signature,wills"},"office/political_party":{name:"Political Party Office",terms:""},"office/private_investigator":{name:"Private Investigator Office",terms:"PI,private eye,private detective"},"office/quango":{name:"Quasi-NGO Office",terms:"ngo,non government,non-government,organization,organisation,quasi autonomous,quasi-autonomous"},"office/religion":{name:"Religious Office",terms:""},"office/research":{name:"Research Office",terms:"R and D,research and development,research lab"},"office/surveyor":{name:"Surveyor Office",terms:""},"office/tax_advisor":{name:"Tax Advisor Office",terms:"tax,tax consultant"},"office/telecommunication":{name:"Telecom Office",terms:"communication,internet service provider,isp,network,telephone,voice"},"office/therapist":{name:"Therapist Office",terms:"therapy"},"office/water_utility":{name:"Water Utility Office",terms:"water board,utility"},"piste/downhill":{name:"Downhill 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"},"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"},"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"},"public_transport/platform/ferry_point":{name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{name:"Subway Stop / Platform"},"public_transport/platform/train_point":{name:"Train Stop / Platform"},"public_transport/platform/aerialway":{name:"Aerialway Platform",terms:"aerialway,cable car,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus_point":{name:"Bus Stop",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/bus":{name:"Bus Platform",terms:"bus,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/ferry":{name:"Ferry Platform",terms:"boat,dock,ferry,pier,platform,public transit,public transportation,transit,transportation"},"public_transport/platform/light_rail":{name:"Light Rail Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/platform/monorail":{name:"Monorail Platform",terms:"monorail,platform,public transit,public transportation,rail,transit,transportation"},"public_transport/platform/subway":{name:"Subway Platform",terms:"metro,platform,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/platform/train":{name:"Train Platform",terms:"platform,public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/platform/tram_point":{name:"Tram Stop / Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/tram":{name:"Tram Platform",terms:"electric,light rail,platform,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus_point":{name:"Trolleybus Stop",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/platform/trolleybus":{name:"Trolleybus Platform",terms:"bus,electric,platform,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/station_aerialway":{name:"Aerialway Station",terms:"aerialway,cable car,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_bus":{name:"Bus Station / Terminal",terms:"bus,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_ferry":{name:"Ferry Station / Terminal",terms:"boat,dock,ferry,pier,public transit,public transportation,station,terminal,transit,transportation"},"public_transport/station_light_rail":{name:"Light Rail Station",terms:"electric,light rail,public transit,public transportation,rail,station,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_monorail":{name:"Monorail Station",terms:"monorail,public transit,public transportation,rail,station,terminal,transit,transportation"},"public_transport/station_subway":{name:"Subway Station",terms:"metro,public transit,public transportation,rail,station,subway,terminal,track,transit,transportation,underground"},"public_transport/station_train_halt":{name:"Train Station (Halt / Request)",terms:"halt,public transit,public transportation,rail,station,track,train,transit,transportation,whistle stop"},"public_transport/station_train":{name:"Train Station",terms:"public transit,public transportation,rail,station,terminal,track,train,transit,transportation"},"public_transport/station_tram":{name:"Tram Station",terms:"electric,light rail,public transit,public transportation,rail,station,streetcar,terminal,track,tram,trolley,transit,transportation"},"public_transport/station_trolleybus":{name:"Trolleybus Station / Terminal",terms:"bus,electric,public transit,public transportation,station,streetcar,terminal,trackless,tram,trolley,transit,transportation"},"public_transport/station":{name:"Transit Station",terms:"public transit,public transportation,station,terminal,transit,transportation"},"public_transport/stop_area":{name:"Transit Stop Area",terms:""},"public_transport/stop_position_aerialway":{name:"Aerialway Stopping Location",terms:"aerialway,cable car,public transit,public transportation,transit,transportation"},"public_transport/stop_position_bus":{name:"Bus Stopping Location",terms:"bus,public transit,public transportation,transit,transportation"},"public_transport/stop_position_ferry":{name:"Ferry Stopping Location",terms:"boat,dock,ferry,pier,public transit,public transportation,transit,transportation"},"public_transport/stop_position_light_rail":{name:"Light Rail Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,track,tram,trolley,transit,transportation"},"public_transport/stop_position_monorail":{name:"Monorail Stopping Location",terms:"monorail,public transit,public transportation,rail,transit,transportation"},"public_transport/stop_position_subway":{name:"Subway Stopping Location",terms:"metro,public transit,public transportation,rail,subway,track,transit,transportation,underground"},"public_transport/stop_position_train":{name:"Train Stopping Location",terms:"public transit,public transportation,rail,track,train,transit,transportation"},"public_transport/stop_position_tram":{name:"Tram Stopping Location",terms:"electric,light rail,public transit,public transportation,rail,streetcar,track,tram,trolley,transit,transportation"},"public_transport/stop_position_trolleybus":{name:"Trolleybus Stopping Location",terms:"bus,electric,public transit,public transportation,streetcar,trackless,tram,trolley,transit,transportation"},"public_transport/stop_position":{name:"Transit Stopping Location",terms:"public transit,public transportation,transit,transportation"},"railway/halt":{name:"Train Station (Halt / Request)"},"railway/platform":{name:"Train Platform"},"railway/station":{name:"Train Station"},"railway/tram_stop":{name:"Tram Stopping Position"},"railway/abandoned":{name:"Abandoned Railway",terms:""},"railway/buffer_stop":{name:"Buffer Stop",terms:"stop,halt,buffer"},"railway/construction":{name:"Railway Under Construction",terms:""},"railway/crossing":{name:"Railway Crossing (Path)",terms:"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/derail":{name:"Railway Derailer",terms:"derailer"},"railway/disused":{name:"Disused Railway",terms:""},"railway/funicular":{name:"Funicular",terms:"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/level_crossing":{name:"Railway Crossing (Road)",terms:"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/light_rail":{name:"Light Rail",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Railway",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail",terms:""},"railway/narrow_gauge":{name:"Narrow Gauge Rail",terms:"narrow gauge railway,narrow gauge railroad"},"railway/rail":{name:"Rail",terms:"rail line,railroad track,train track"},"railway/rail/highspeed":{name:"High-Speed Rail",terms:"bullet train,fast rail,high speed rail,highspeed rail,HSR"},"railway/signal":{name:"Railway Signal",terms:"signal,lights"},"railway/subway_entrance":{name:"Subway Entrance",terms:"metro,transit"},"railway/subway":{name:"Subway",terms:"metro,transit"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram",terms:"light rail,streetcar,tram,trolley"},relation:{name:"Relation",terms:""},"route/ferry":{name:"Ferry Route",terms:"boat,merchant vessel,ship,water bus,water shuttle,water taxi"},"seamark/beacon_isolated_danger":{name:"Danger Beacon",terms:"beacon isolated danger,isolated danger beacon,iala"},"seamark/beacon_lateral":{name:"Channel Beacon",terms:"lateral beacon,beacon lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral":{name:"Channel Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/green":{name:"Green Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/buoy_lateral/red":{name:"Red Buoy",terms:"lateral buoy,buoy lateral,cevni,channel marker,iala,lateral mark"},"seamark/mooring":{name:"Mooring",terms:"dolphin,pile,bollard,buoy,post"},shop:{name:"Shop",terms:""},"shop/boutique":{name:"Boutique"},"shop/fashion":{name:"Fashion Store"},"shop/fishmonger":{name:"Fishmonger"},"shop/furnace":{name:"Furnace Store"},"shop/vacant":{name:"Vacant Shop"},"shop/agrarian":{name:"Farm Supply Shop",terms:"agricultural inputs,agricultural machines,seeds,pesticides,fertilizer,agricultural tools"},"shop/alcohol":{name:"Liquor Store",terms:"alcohol,beer,booze,wine"},"shop/anime":{name:"Anime 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/brewing_supplies":{name:"Brewing Supply Store",terms:"brew shop,homebrew supply store"},"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/electrical":{name:"Electrical Equipment Store",terms:"cable,electric,fan,LED,lighting,power,wire"},"shop/electronics":{name:"Electronics Store",terms:"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{name:"Erotic Store",terms:"sex,porn"},"shop/erotic/lgbtq":{name:"LGBTQ+ Erotic Store",terms:"sex,porn"},"shop/fabric":{name:"Fabric Store",terms:"sew"},"shop/farm":{name:"Produce Stand",terms:"baked goods,farm shop,farm stand,fresh food,fruits,greengrocer,organics,vegetables"},"shop/fashion_accessories":{name:"Fashion Accessories Store",terms:"bag,cologne,fragrance,hat,jewellery,purfume,purse,scarf,sunglasses,umbrella,wallet,watch"},"shop/fireplace":{name:"Fireplace Store",terms:"fireplace,stove,masonry heater"},"shop/fishing":{name:"Fishing Shop",terms:"bait,fishing line,flies,fly,lure,reel,rod,tackle"},"shop/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/psychic":{name:"Psychic",terms:"astrology,crystal ball,divination,fortune teller,seer,spirit"},"shop/pyrotechnics":{name:"Fireworks Store",terms:"fireworks"},"shop/radiotechnics":{name:"Radio/Electronic Component Store",terms:"antenna,transistor"},"shop/religion":{name:"Religious Store",terms:""},"shop/rental":{name:"Rental Shop",terms:""},"shop/scuba_diving":{name:"Scuba Diving Shop",terms:"diving,scuba"},"shop/seafood":{name:"Seafood Shop",terms:"fishmonger"},"shop/second_hand":{name:"Consignment/Thrift Store",terms:"secondhand,second hand,resale,thrift,used"},"shop/sewing":{name:"Sewing Supply Shop",terms:"haberdashery"},"shop/shoes":{name:"Shoe Store",terms:"boots,cleats,clogs,heels,loafers,oxfords,sneakers"},"shop/sports":{name:"Sporting Goods Store",terms:"athletics"},"shop/stationery":{name:"Stationery Store",terms:"card,paper"},"shop/storage_rental":{name:"Storage Rental",terms:"garages"},"shop/supermarket":{name:"Supermarket",terms:"grocery,store,shop"},"shop/swimming_pool":{name:"Pool Supply Store",terms:"hot tub equipment store,hot tub maintenance store,hot tub supply store,pool shop,pool store,swimming pool equipment store,swimming pool installation store,swimming pool maintenance store,swimming pool supply shop"},"shop/tailor":{name:"Tailor",terms:"clothes,suit"},"shop/tattoo":{name:"Tattoo Parlor",terms:"ink"},"shop/tea":{name:"Tea Store",terms:""},"shop/telecommunication":{name:"Telecom Retail Store",terms:"communication,internet service provider,isp,network,telephone,voice"},"shop/ticket":{name:"Ticket Seller",terms:"box office"},"shop/tiles":{name:"Tile Shop",terms:""},"shop/tobacco":{name:"Tobacco Shop",terms:"cigarettes,cigars"},"shop/toys":{name:"Toy Store",terms:"games"},"shop/trade":{name:"Trade Shop",terms:""},"shop/travel_agency":{name:"Travel Agency",terms:"cruises,flights,hotels,tickets,travel packages"},"shop/tyres":{name:"Tire Store",terms:""},"shop/vacuum_cleaner":{name:"Vacuum Cleaner Store",terms:""},"shop/variety_store":{name:"Variety Store",terms:""},"shop/video_games":{name:"Video Game Store",terms:""},"shop/video":{name:"Video Store",terms:"DVD,VHS,video casette"},"shop/watches":{name:"Watches Shop",terms:""},"shop/water_sports":{name:"Watersport/Swim Shop",terms:""},"shop/water":{name:"Drinking Water Shop",terms:""},"shop/weapons":{name:"Weapon Shop",terms:"ammo,gun,knife,knives"},"shop/wholesale":{name:"Wholesale Store",terms:"warehouse club,cash and carry"},"shop/window_blind":{name:"Window Blind Store",terms:""},"shop/wine":{name:"Wine Shop",terms:""},"telecom/data_center":{name:"Data Center",terms:"computer systems storage,information technology,server farm,the cloud,telecommunications"},"tourism/alpine_hut":{name:"Alpine Hut",terms:"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"},"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"},"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"},"US-TIGER-Roads-2019":{description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",name:"TIGER Roads 2019"},"USDA-NAIP":{description:"The most recent year of DOQQs from the National Agriculture Imagery Program (NAIP) for each state in the contiguous United States.",name:"National Agriculture Imagery Program"},US_Forest_Service_roads_overlay:{description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",name:"U.S. Forest Roads Overlay"},UrbISOrtho2016:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2016"},UrbISOrtho2017:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2017"},UrbISOrtho2018:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2018"},UrbISOrtho2019:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbIS-Ortho 2019"},UrbisAdmFR:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm FR"},UrbisAdmNL:{attribution:{text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB"},name:"UrbisAdm NL"},"Waymarked_Trails-Cycling":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Cycling"},"Waymarked_Trails-Hiking":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Hiking"},"Waymarked_Trails-MTB":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: MTB"},"Waymarked_Trails-Skating":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Skating"},"Waymarked_Trails-Winter_Sports":{attribution:{text:"© waymarkedtrails.org, OpenStreetMap contributors, CC by-SA 3.0"},name:"Waymarked Trails: Winter Sports"},"basemap.at":{attribution:{text:"basemap.at"},description:"Basemap of Austria, based on government data.",name:"basemap.at"},"basemap.at-orthofoto":{attribution:{text:"basemap.at"},description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",name:"basemap.at Orthofoto"},"basemap.at-overlay":{attribution:{text:"basemap.at"},description:"Annotation overlay provided by basemap.at.",name:"basemap.at Overlay"},"basemap.at-surface":{attribution:{text:"basemap.at"},description:"Surface layer provided by basemap.at.",name:"basemap.at Surface"},"basemap.at-terrain":{attribution:{text:"basemap.at"},description:"Terrain layer provided by basemap.at.",name:"basemap.at Terrain"},"eufar-balaton":{attribution:{text:"EUFAR Balaton ortofotó 2010"},description:"1940 geo-tagged photography from Balaton Limnological Institute.",name:"EUFAR Balaton orthophotos"},"finds.jp_KBN_2500":{attribution:{text:"GSI KIBAN 2500"},description:"GSI Kiban 2500 via finds.jp. Good for tracing, but a bit older.",name:"Japan GSI KIBAN 2500"},"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."},"map-kibera":{name:"Map Kibera Trust",description:"Map Kibera is a registered organization working in Kenya",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action."},"osm-kenya":{name:"OSM Kenya",description:"OSM Kenya is a community of OSM contributors and users",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country."},"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-Enugu-Campus":{name:"LionMappersTeam (LMT) Enugu",description:"YouthMappers chapter at University of Nigeria, Enugu Campus",extendedDescription:"The LionMappersTeam(LMT)Enugu Campus is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of Geoinformatics and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for Crowdsourced Mapping and Geographic Information provision using Openstreetmap, Citizen Science and other Geospatial Technology for research, training and response to resilient community challenges. We are involved in Web-Cartography, GIS and Remote Sensing Applications and ResearchWe are passionate about Volunteered Geographic Information.Paticipatory GIS and Citizen Science.Our major activities include online crowdsourced-Cartography, Field Mapping ,Training workshops and outreaches to High School as well as Humanitarian/Disaster Response Mapping."},"ym-University-of-Nigeria-Nsukka":{name:"LionMappersTeam (LMT) Nsukka",description:"YouthMappers chapter at University of Nigeria, Nsukka",extendedDescription:"The LionMappersTeam is an affiliate of YouthMappers Network, with the sole aim of providing members the opportunity to learn and improve their skills in the field of mapping science and to create open geographic data and analysis that addresses locally defined challenges globally. It is a team of volunteers for crowdsourced mapping and geographic information provision using Openstreetmap, citizen science  and other geospatial  technology for research, training and response to resilient community challenges. We are involved in GIS and Remote Sensing Applications and Research.Paticipatory GIS and Citizen Science,field mapping ,training workshops and outreaches to High Schools."},"ym-University-of-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."},"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!",events:{sotmasia2019:{name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh"}}},"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:"Khulna University YouthMappers",description:"YouthMappers chapter at Khulna University",extendedDescription:"KU students and faculty from multiple disciplines are experienced at creating open data for OSM to address local challenges of development, including food security and other topics."},"ym-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!"},"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-telegram":{name:"OpenStreetMap Japan Telegram",description:"A Telegram group for the OSM Japan community: {url}"},"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-Korea-mailinglist":{name:"OpenStreetMap Korea Mailinglist",description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea"},"OSM-Korea-telegram":{name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss."},"OSM-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-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-TW-telegram":{name:"OpenStreetMap Taiwan Telegram",description:"A Telegram group for the OSM Taiwan community: {url}"},"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-chapter":{name:"OpenStreetMap Belgium Local Chapter",description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!"},"be-facebook":{name:"OpenStreetMap BE Facebook Community",description:"Mappers and OpenStreetMap on Facebook in Belgium"},"be-forum":{name:"OpenStreetMap BE forum",description:"OpenStreetMap Belgium web forum"},"be-irc":{name:"OpenStreetMap Belgium IRC",description:"Join #osmbe on irc.oftc.net (port 6667)",extendedDescription:"Join #osmbe on irc.oftc.net (port 6667), it is bridged with the Matrix chat channel"},"be-mailinglist":{name:"Talk-be Mailing List",description:"Talk-be is the official mailing list for the Belgian OSM community"},"be-matrix":{name:"OpenStreetMap BE Matrix channel",description:"All mappers are welcome!",extendedDescription:"Most talk is happening at the \"OpenStreetMap Belgium\" channel. You can ask anything there! The other rooms are for specific subjects."},"be-meetup":{name:"OpenStreetMap Belgium Meetup",description:"Real life meetups of everyone who is interested in OpenStreetMap",extendedDescription:"Physical meetups are great to meet other mappers, ask them questions and to learn a lot. Especially new contributors are very welcome!"},"be-twitter":{name:"OpenStreetMap Belgium Twitter",description:"OSM Belgium on Twitter: @osm_be"},"OSM-BiH-telegram":{name:"OpenStreetMap BiH Telegram",description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}"},"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!"},"OSM-CZ-telegram":{name:"OpenStreetMap CZ Telegram",description:"A Telegram group for the OSM Czech community: {url}"},"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"},"fi-forum":{name:"OpenStreetMap FI forum",description:"OpenStreetMap Finland web forum"},"fi-irc":{name:"OpenStreetMap Finland IRC",description:"Join #osm-fi on irc.oftc.net (port 6667)"},"fi-mailinglist":{name:"Talk-fi Mailing List",description:"Talk-fi is the official mailing list for the Finnish OSM community"},"fr-chapter":{name:"OpenStreetMap France Local Chapter",description:"We help grow and improve OpenStreetMap in France."},"fr-facebook":{name:"OpenStreetMap France Facebook page",description:"OpenStreetMap France Facebook page"},"fr-forum":{name:"OpenStreetMap France web forum",description:"OpenStreetMap France web forum"},"fr-irc":{name:"OpenStreetMap France on IRC",description:"Join #osm-fr on irc.oftc.net (port 6667)"},"fr-mailinglist":{name:"Talk-fr Mailing List",description:"Talk-fr mailing list"},"fr-telegram":{name:"OpenStreetMap France on Telegram",description:"A Telegram group for the OSM France community: {url}"},"fr-twitter":{name:"OpenStreetMap France on Twitter",description:"OpenStreetMap France on Twitter: {url}"},"de-berlin-mailinglist":{name:"Berlin Mailing List",description:"This is the mailing list for the Berlin OSM community"},"de-berlin-meetup":{name:"OpenStreetMap Berlin-Brandenburg Meetup",description:"Mappers and OpenStreetMap users in the Berlin area"},"de-berlin-telegram":{name:"@osmberlin on Telegram",description:"OpenStreetMap Berlin Telegram chat"},"de-berlin-twitter":{name:"OpenStreetMap Berlin Twitter",description:"Follow us on Twitter: {url}"},"de-forum":{name:"OpenStreetMap DE forum",description:"OpenStreetMap Germany web forum"},"de-hamburg-telegram":{name:"OSM Hamburg on Telegram",description:"OpenStreetMap Hamburg Telegram chat: {url}"},"de-irc":{name:"OpenStreetMap Germany IRC",description:"Join #osm-de on irc.oftc.net (port 6667)"},"de-mailinglist":{name:"Talk-de Mailing List",description:"Talk-de is the official mailing list for the German OSM community"},"de-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-chapter":{name:"OpenStreetMap Iceland Local Chapter",description:"We help grow and improve OpenStreetMap in Iceland."},"is-facebook":{name:"OSM Iceland on Facebook",description:"Page of OpenStreetMap in Iceland"},"is-mailinglist":{name:"Talk-is Mailing List",description:"Talk-is is the official mailing list for the Icelandic OSM community"},"is-twitter":{name:"OSM Iceland on Twitter",description:"Twitter of OpenStreetMap in Iceland"},"ireland-chapter":{name:"OpenStreetMap Ireland Local Chapter",description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives."},"ireland-facebook":{name:"OpenStreetMap Ireland Facebook group",description:"OpenStreetMap Ireland Facebook page"},"ireland-irc":{name:"OpenStreetMap Ireland IRC",description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question"},"ireland-mailinglist":{name:"Talk-ie Mailing List",description:"Talk-ie is the mailing list for the Irish OSM community"},"ireland-telegram":{name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat"},"ireland-twitter":{name:"OpenStreetMap IE on Twitter",description:"OpenStreetMap IE on Twitter: {url}"},"it-chapter":{name:"OpenStreetMap Italy Local Chapter",description:"We help grow and improve OpenStreetMap in Italy."},"it-facebook":{name:"OpenStreetMap Italy Facebook",description:"Join the OpenStreetMap Italy community on Facebook"},"it-irc":{name:"OpenStreetMap Italy IRC",description:"Join #osm-it on irc.oftc.net (port 6667)"},"it-mailinglist":{name:"Talk-it Mailing List",description:"Talk-it is the official mailing list for the Italian OSM community"},"it-telegram":{name:"@OpenStreetMapItalia on Telegram",description:"OpenStreetMap Italy Telegram chat"},"it-twitter":{name:"OpenStreetMap Italy Twitter",description:"Follow us on Twitter at {url}"},"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."},"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"},"nl-forum":{name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum"},"nl-telegram":{name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}"},"no-forum":{name:"OpenStreetMap Norway Web Forum",description:"OpenStreetMap Norway web forum"},"no-irc":{name:"OpenStreetMap Norway on IRC",description:"Chat room for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-mailinglist":{name:"OpenStreetMap Norway mailing list",description:"Mailing list for mappers and OpenStreetMap users, developers and enthusiasts in Norway"},"no-telegram":{name:"@OSM_no on Telegram",description:"OpenStreetMap Norway Telegram chat"},"OSM-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 on 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}"},"Galicia-Telegram":{name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia"},"Galicia-Twitter":{name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}"},"galicia-wiki":{name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {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}"},"ch-irc":{name:"OpenStreetMap Switzerland IRC",description:"Join #osm-ch on irc.oftc.net (port 6667)"},"ch-mailinglist":{name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",description:"Mailing list for Switzerland"},"ch-twitter":{name:"OpenStreetMap Switzerland Twitter",description:"Follow us on Twitter: {url}"},"osm-ch":{name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland"},"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."},"ua-facebook":{name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook"},"ua-forum":{name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine"},"ua-github":{name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub"},"ua-slack":{name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack"},"ua-telegram":{name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat"},"ua-twitter":{name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}"},"ua-osm":{name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine"},"scotland-twitter":{name:"OpenStreetMap Alba on Twitter",description:"OpenStreetMap Alba on Twitter: {url}"},"Nottingham-OSM-pub-meetup":{name:"East Midlands (Nottingham) Monthly pub meet-up",description:"Social gathering for East Midlands mappers and users",extendedDescription:"A group have been meeting since March 2011, initially in Nottingham, and, more recently in Derby, and from time to time elsewhere in the East Midlands. These are social gatherings, but are an excellent place to come and ask specific questions about OSM either in the area or in general. In the summer months we usually do some light mapping for an hour in the vicinity of our meeting place. The group as a whole has a special interest in mapping public rights of way and from time to time has mapping meetings for this purpose."},"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"},"uk-localchapter":{name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}"},"uk-london-twitter":{name:"OpenStreetMap London on Twitter",description:"OpenStreetMap London on Twitter: {url}"},"gb-mailinglist":{name:"Talk-gb Mailing List",description:"Talk-gb is the main communication forum list for the UK (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."},"uk-twitter":{name:"OpenStreetMap UK on Twitter",description:"OpenStreetMap UK on Twitter: {url}"},"ym-Queen-Mary-University-of-London":{name:"Queen Mary YouthMappers",description:"YouthMappers chapter at Queen Mary University of London",extendedDescription:"This chapter will be part of the activities of the Queen Mary Geography Society."},"ym-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."},"il-telegram":{name:"OSM Israel on Telegram",description:"A Telegram group for the OpenStreetMap community in Israel: {url}"},"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."},"sa-telegram":{name:"OSM Saudi Arabia on Telegram",description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}"},"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-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}"},"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"},"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}"}}};
24780
24781         var features$3 = {africa_full:{type:"Feature",id:"africa_full",properties:{area:52303711.75},geometry:{type:"Polygon",coordinates:[[[-30,18],[-13,34],[-5.4,36],[-3,36],[6,38],[12.1,37.4],[14,35],[33.6,33],[34.93,29.5],[34.34,27.6],[42.5,13.7],[44.2,11.5],[55,15],[65,-11.3],[50,-40],[11,-40],[2,-10],[-30,18]]]}},botswana:{type:"Feature",id:"botswana",properties:{area:586298.89},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-3.98799,5.5686],[-3.82846,5.5028],[-3.76243,5.34398],[-3.82854,5.1852],[-3.98799,5.11944],[-4.14745,5.1852],[-4.21355,5.34398],[-4.14753,5.5028],[-3.98799,5.5686]]]}},"The-Gambia-YMCA-University-of-the-Gambia":{type:"Feature",id:"The-Gambia-YMCA-University-of-the-Gambia",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-16.6763,13.68253],[-16.5129,13.6167],[-16.44538,13.45785],[-16.51312,13.2991],[-16.6763,13.23337],[-16.83948,13.2991],[-16.90722,13.45785],[-16.83969,13.6167],[-16.6763,13.68253]]]}},cape_coast_gh:{type:"Feature",id:"cape_coast_gh",properties:{area:2961.84},geometry:{type:"Polygon",coordinates:[[[-1.6,5],[-1.6,5.4],[-1,5.4],[-1,5],[-1.6,5]]]}},ghana:{type:"Feature",properties:{area:297118.3},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:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[-1.56831,6.89695],[-1.40837,6.83115],[-1.3422,6.67232],[-1.40848,6.51354],[-1.56831,6.44779],[-1.72814,6.51354],[-1.79442,6.67232],[-1.72825,6.83115],[-1.56831,6.89695]]]}},"University-of-Cape-Coast":{type:"Feature",id:"University-of-Cape-Coast",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-1.23047,5.31552],[-1.071,5.24973],[-1.005,5.0909],[-1.07108,4.93212],[-1.23047,4.86637],[-1.38986,4.93212],[-1.45594,5.0909],[-1.38994,5.24973],[-1.23047,5.31552]]]}},"University-of-Energy-and-Natural-Resources":{type:"Feature",id:"University-of-Energy-and-Natural-Resources",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-2.343,7.57482],[-2.18283,7.50901],[-2.11656,7.35018],[-2.18294,7.19141],[-2.343,7.12566],[-2.50306,7.19141],[-2.56944,7.35018],[-2.50317,7.50901],[-2.343,7.57482]]]}},"University-of-Ghana":{type:"Feature",id:"University-of-Ghana",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-0.19624,5.87573],[-0.03662,5.80993],[0.02944,5.65111],[-0.0367,5.49233],[-0.19624,5.42657],[-0.35577,5.49233],[-0.42191,5.65111],[-0.35586,5.80993],[-0.19624,5.87573]]]}},"University-of-Mines-and-Technology":{type:"Feature",id:"University-of-Mines-and-Technology",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-2.00125,5.52338],[-1.84173,5.45759],[-1.77571,5.29876],[-1.84181,5.13998],[-2.00125,5.07423],[-2.16069,5.13998],[-2.22679,5.29876],[-2.16077,5.45759],[-2.00125,5.52338]]]}},"General-Lansana-Conte-University":{type:"Feature",id:"General-Lansana-Conte-University",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-13.62305,9.93364],[-13.46186,9.86782],[-13.3952,9.70898],[-13.46201,9.55022],[-13.62305,9.48448],[-13.78408,9.55022],[-13.85089,9.70898],[-13.78423,9.86782],[-13.62305,9.93364]]]}},"Institute-of-Science-and-Veterinary-Medicine":{type:"Feature",id:"Institute-of-Science-and-Veterinary-Medicine",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-12.1175,10.91114],[-11.95581,10.84532],[-11.88896,10.68648],[-11.95598,10.52772],[-12.1175,10.46198],[-12.27902,10.52772],[-12.34604,10.68648],[-12.27919,10.84532],[-12.1175,10.91114]]]}},"Universit-de-NZrkor":{type:"Feature",id:"Universit-de-NZrkor",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-8.83716,7.95701],[-8.67684,7.8912],[-8.61052,7.73237],[-8.67696,7.5736],[-8.83716,7.50785],[-8.99736,7.5736],[-9.0638,7.73237],[-8.99748,7.8912],[-8.83716,7.95701]]]}},"Dedan-Kimathi-University-of-Technology":{type:"Feature",id:"Dedan-Kimathi-University-of-Technology",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[37.00195,-0.21487],[37.16076,-0.28065],[37.22654,-0.43945],[37.16076,-0.59825],[37.00195,-0.66403],[36.84314,-0.59825],[36.77737,-0.43945],[36.84315,-0.28065],[37.00195,-0.21487]]]}},"Jomo-Kenyatta-University-of-Agriculture-and-Technology":{type:"Feature",id:"Jomo-Kenyatta-University-of-Agriculture-and-Technology",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[37.0105,-0.86452],[37.16932,-0.93029],[37.23512,-1.08909],[37.16934,-1.2479],[37.0105,-1.31368],[36.85166,-1.2479],[36.78588,-1.08909],[36.85168,-0.93029],[37.0105,-0.86452]]]}},"Karatina-University":{type:"Feature",id:"Karatina-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[37.12789,-0.25676],[37.28669,-0.32254],[37.35247,-0.48134],[37.2867,-0.64014],[37.12789,-0.70592],[36.96908,-0.64014],[36.9033,-0.48134],[36.96908,-0.32254],[37.12789,-0.25676]]]}},kenya:{type:"Feature",properties:{area:612152.39},id:"kenya",geometry:{type:"Polygon",coordinates:[[[37.67349,-3.05961],[34.08165,-1.02099],[34.03976,-1.04296],[33.93127,-0.98872],[33.92578,-0.51086],[33.98071,-0.08789],[33.90656,0.10986],[34.10774,0.37697],[34.08852,0.45661],[34.11598,0.48408],[34.13727,0.58295],[34.27803,0.64131],[34.27872,0.68045],[34.31511,0.69761],[34.31305,0.76627],[34.41124,0.81296],[34.5266,1.10543],[34.5726,1.10131],[34.58015,1.15143],[34.66805,1.20772],[34.80125,1.22557],[34.8349,1.30108],[34.78958,1.36835],[34.88022,1.55437],[34.94202,1.57771],[34.98871,1.67106],[34.93378,2.51506],[34.59183,2.97733],[34.54651,3.13229],[34.45313,3.20633],[34.42017,3.68611],[33.98346,4.2259],[34.38446,4.61202],[35.94315,4.62297],[35.961,4.53125],[36.05026,4.44226],[36.88385,4.445],[38.13629,3.61211],[38.54004,3.63678],[38.95134,3.51411],[39.02103,3.50999],[39.08987,3.53604],[39.28711,3.46682],[39.4931,3.45996],[39.5192,3.40787],[39.55353,3.40376],[39.58786,3.48875],[39.76227,3.65596],[39.86389,3.8807],[40.77301,4.28068],[41.18225,3.94098],[41.91833,3.99852],[40.991,2.82989],[40.995,-0.835],[41.8,-1.9],[39.9,-4.7],[39.35,-4.85],[39.19853,-4.66882],[37.81219,-3.6916],[37.58972,-3.44762],[37.70508,-3.29408],[37.67349,-3.05961]]]}},"Kenyatta-University":{type:"Feature",id:"Kenyatta-University",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[36.93493,-0.95538],[37.09376,-1.02116],[37.15956,-1.17995],[37.09378,-1.33876],[36.93493,-1.40454],[36.77609,-1.33876],[36.7103,-1.17995],[36.7761,-1.02116],[36.93493,-0.95538]]]}},"Moi-University":{type:"Feature",id:"Moi-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[35.50781,-0.12698],[35.66661,-0.19276],[35.7324,-0.35156],[35.66662,-0.51036],[35.50781,-0.57614],[35.34901,-0.51036],[35.28323,-0.35156],[35.34901,-0.19276],[35.50781,-0.12698]]]}},nairobi:{type:"Feature",properties:{area:687.96},id:"nairobi",geometry:{type:"Polygon",coordinates:[[[36.64146,-1.31412],[36.78566,-1.19193],[36.83853,-1.20841],[36.89896,-1.15349],[36.94359,-1.18026],[36.92368,-1.22008],[36.99783,-1.22763],[36.9175,-1.42739],[36.73485,-1.38826],[36.64146,-1.31412]]]}},"Technical-University-of-Kenya":{type:"Feature",id:"Technical-University-of-Kenya",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[36.82449,-1.06703],[36.98332,-1.1328],[37.04913,-1.2916],[36.98334,-1.4504],[36.82449,-1.51618],[36.66564,-1.4504],[36.59986,-1.2916],[36.66566,-1.1328],[36.82449,-1.06703]]]}},"University-of-Nairobi":{type:"Feature",id:"University-of-Nairobi",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[36.82617,-1.09366],[36.98501,-1.15944],[37.05081,-1.31823],[36.98503,-1.47704],[36.82617,-1.54282],[36.66732,-1.47704],[36.60153,-1.31823],[36.66734,-1.15944],[36.82617,-1.09366]]]}},"African-Methodist-Episcopal-University":{type:"Feature",id:"African-Methodist-Episcopal-University",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-10.80063,6.53533],[-10.64081,6.46953],[-10.57468,6.3107],[-10.64091,6.15193],[-10.80063,6.08617],[-10.96035,6.15193],[-11.02658,6.3107],[-10.96045,6.46953],[-10.80063,6.53533]]]}},"Cuttington-University":{type:"Feature",id:"Cuttington-University",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[-9.5539,7.26498],[-9.39384,7.19917],[-9.32762,7.04035],[-9.39395,6.88157],[-9.5539,6.81582],[-9.71385,6.88157],[-9.78018,7.04035],[-9.71396,7.19917],[-9.5539,7.26498]]]}},"Grand-Gedeh-County-Community-College":{type:"Feature",id:"Grand-Gedeh-County-Community-College",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-8.11817,6.28853],[-7.95843,6.22273],[-7.89233,6.0639],[-7.95852,5.90512],[-8.11817,5.83937],[-8.27782,5.90512],[-8.34401,6.0639],[-8.27791,6.22273],[-8.11817,6.28853]]]}},"Nimba-County-Community-College":{type:"Feature",id:"Nimba-County-Community-College",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[-8.71645,7.57669],[-8.55628,7.51088],[-8.49001,7.35205],[-8.55639,7.19328],[-8.71645,7.12753],[-8.87652,7.19328],[-8.9429,7.35205],[-8.87663,7.51088],[-8.71645,7.57669]]]}},"Stella-Maris-Polytechnic":{type:"Feature",id:"Stella-Maris-Polytechnic",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-10.7944,6.51458],[-10.63459,6.44878],[-10.56846,6.28995],[-10.63469,6.13117],[-10.7944,6.06542],[-10.95411,6.13117],[-11.02034,6.28995],[-10.95421,6.44878],[-10.7944,6.51458]]]}},"University-of-Liberia-YouthMappers":{type:"Feature",id:"University-of-Liberia-YouthMappers",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-10.61986,6.60165],[-10.46002,6.53584],[-10.39389,6.37702],[-10.46012,6.21824],[-10.61986,6.15249],[-10.7796,6.21824],[-10.84584,6.37702],[-10.7797,6.53584],[-10.61986,6.60165]]]}},madagascar:{type:"Feature",id:"madagascar",properties:{area:964945.85},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:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[35.33203,-15.14437],[35.4966,-15.21009],[35.56494,-15.36883],[35.49685,-15.52769],[35.33203,-15.59353],[35.16721,-15.52769],[35.09912,-15.36883],[35.16747,-15.21009],[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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-7.98832,12.83993],[-7.82549,12.77411],[-7.75819,12.61526],[-7.82569,12.45651],[-7.98832,12.39078],[-8.15095,12.45651],[-8.21846,12.61526],[-8.15116,12.77411],[-7.98832,12.83993]]]}},"Universidade-Eduardo-Mondlane":{type:"Feature",id:"Universidade-Eduardo-Mondlane",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[32.60357,-25.72761],[32.77994,-25.79328],[32.85334,-25.95197],[32.78042,-26.11088],[32.60357,-26.17677],[32.42672,-26.11088],[32.35381,-25.95197],[32.4272,-25.79328],[32.60357,-25.72761]]]}},"Namibia-University-of-Science-and-Technology":{type:"Feature",id:"Namibia-University-of-Science-and-Technology",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[17.07709,-22.34124],[17.24886,-22.40692],[17.32029,-22.56563],[17.24926,-22.72453],[17.07709,-22.79039],[16.90493,-22.72453],[16.83389,-22.56563],[16.90532,-22.40692],[17.07709,-22.34124]]]}},"Abia-State-University":{type:"Feature",id:"Abia-State-University",properties:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[7.41909,6.0554],[7.57877,5.9896],[7.64484,5.83077],[7.57868,5.67199],[7.41909,5.60624],[7.25951,5.67199],[7.19335,5.83077],[7.25942,5.9896],[7.41909,6.0554]]]}},"Ahmadu-Bello-University":{type:"Feature",id:"Ahmadu-Bello-University",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[7.64648,11.40298],[7.80845,11.33716],[7.87541,11.17831],[7.80827,11.01956],[7.64648,10.95382],[7.4847,11.01956],[7.41756,11.17831],[7.48452,11.33716],[7.64648,11.40298]]]}},"Federal-School-of-Surveys":{type:"Feature",id:"Federal-School-of-Surveys",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[3.95129,8.06678],[4.11165,8.00098],[4.17798,7.84215],[4.11153,7.68337],[3.95129,7.61763],[3.79105,7.68337],[3.72459,7.84215],[3.79092,8.00098],[3.95129,8.06678]]]}},"Federal-University-of-Technology-Akure":{type:"Feature",id:"Federal-University-of-Technology-Akure",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[5.18555,7.49987],[5.34569,7.43407],[5.41195,7.27524],[5.34558,7.11646],[5.18555,7.05071],[5.02551,7.11646],[4.95915,7.27524],[5.0254,7.43407],[5.18555,7.49987]]]}},"Ignatius-Ajuru-University-of-Education":{type:"Feature",id:"Ignatius-Ajuru-University-of-Education",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[6.93364,5.03111],[7.09304,4.96531],[7.15901,4.80649],[7.09296,4.64771],[6.93364,4.58195],[6.77431,4.64771],[6.70826,4.80649],[6.77424,4.96531],[6.93364,5.03111]]]}},"University-of-Nigeria-Enugu-Campus":{type:"Feature",id:"University-of-Nigeria-Enugu-Campus",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[7.50373,6.651],[7.66359,6.58519],[7.72973,6.42637],[7.66349,6.26759],[7.50373,6.20184],[7.34398,6.26759],[7.27773,6.42637],[7.34388,6.58519],[7.50373,6.651]]]}},"University-of-Nigeria-Nsukka":{type:"Feature",id:"University-of-Nigeria-Nsukka",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[7.40821,7.08921],[7.56821,7.02341],[7.63441,6.86458],[7.5681,6.70581],[7.40821,6.64006],[7.24831,6.70581],[7.18201,6.86458],[7.24821,7.02341],[7.40821,7.08921]]]}},"University-of-Port-Harcourt":{type:"Feature",id:"University-of-Port-Harcourt",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[6.92037,5.12633],[7.07979,5.06053],[7.14577,4.90171],[7.07971,4.74293],[6.92037,4.67717],[6.76102,4.74293],[6.69496,4.90171],[6.76094,5.06053],[6.92037,5.12633]]]}},"Insititue-d-Enseignement-Superieur-de-Ruhengeri":{type:"Feature",id:"Insititue-d-Enseignement-Superieur-de-Ruhengeri",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[29.6112,-1.27634],[29.77005,-1.34211],[29.83586,-1.5009],[29.77007,-1.65971],[29.6112,-1.72549],[29.45233,-1.65971],[29.38655,-1.5009],[29.45236,-1.34211],[29.6112,-1.27634]]]}},"University-of-Rwanda-Huye-Campus":{type:"Feature",id:"University-of-Rwanda-Huye-Campus",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[29.7397,-2.39052],[29.89865,-2.45629],[29.96451,-2.61508],[29.89869,-2.77389],[29.7397,-2.83968],[29.58071,-2.77389],[29.51489,-2.61508],[29.58075,-2.45629],[29.7397,-2.39052]]]}},"Institut-Suprieur-de-Management-Kolda":{type:"Feature",id:"Institut-Suprieur-de-Management-Kolda",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-14.94108,13.11445],[-14.77807,13.04862],[-14.7107,12.88977],[-14.77828,12.73102],[-14.94108,12.66529],[-15.10389,12.73102],[-15.17147,12.88977],[-15.1041,13.04862],[-14.94108,13.11445]]]}},"Universit-Gaston-Berger":{type:"Feature",id:"Universit-Gaston-Berger",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-16.42556,16.28748],[-16.26018,16.22164],[-16.19186,16.06278],[-16.26044,15.90404],[-16.42556,15.83833],[-16.59069,15.90404],[-16.65927,16.06278],[-16.59095,16.22164],[-16.42556,16.28748]]]}},"Fourah-Bay-College":{type:"Feature",id:"Fourah-Bay-College",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-13.18359,8.71868],[-13.02296,8.65287],[-12.95652,8.49404],[-13.0231,8.33527],[-13.18359,8.26953],[-13.34409,8.33527],[-13.41066,8.49404],[-13.34422,8.65287],[-13.18359,8.71868]]]}},"Njala-University-Freetown-Campus":{type:"Feature",id:"Njala-University-Freetown-Campus",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-13.23673,8.7042],[-13.07611,8.63839],[-13.00967,8.47955],[-13.07624,8.32078],[-13.23673,8.25504],[-13.39722,8.32078],[-13.46379,8.47955],[-13.39735,8.63839],[-13.23673,8.7042]]]}},"Njala-University-Njala-Campus":{type:"Feature",id:"Njala-University-Njala-Campus",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-11.76548,8.16057],[-11.60508,8.09476],[-11.53873,7.93593],[-11.60521,7.77716],[-11.76548,7.71141],[-11.92576,7.77716],[-11.99223,7.93593],[-11.92588,8.09476],[-11.76548,8.16057]]]}},"University-of-Pretoria":{type:"Feature",id:"University-of-Pretoria",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[28.21289,-25.49616],[28.38892,-25.56183],[28.46217,-25.72052],[28.38939,-25.87943],[28.21289,-25.94531],[28.03639,-25.87943],[27.96361,-25.72052],[28.03686,-25.56183],[28.21289,-25.49616]]]}},"Ardhi-University":{type:"Feature",id:"Ardhi-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[39.21541,-6.54158],[39.37527,-6.60733],[39.44156,-6.7661],[39.37538,-6.92493],[39.21541,-6.99074],[39.05544,-6.92493],[38.98926,-6.7661],[39.05555,-6.60733],[39.21541,-6.54158]]]}},"Institute-of-Finance-Management":{type:"Feature",id:"Institute-of-Finance-Management",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[39.2935,-5.91323],[39.45317,-5.97899],[39.51937,-6.13776],[39.45326,-6.29659],[39.2935,-6.36239],[39.13373,-6.29659],[39.06763,-6.13776],[39.13383,-5.97899],[39.2935,-5.91323]]]}},"Institute-of-Rural-Development-Planning-Mwanza":{type:"Feature",id:"Institute-of-Rural-Development-Planning-Mwanza",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[32.89851,-2.29201],[33.05745,-2.35778],[33.12331,-2.51657],[33.05749,-2.67538],[32.89851,-2.74116],[32.73954,-2.67538],[32.67372,-2.51657],[32.73958,-2.35778],[32.89851,-2.29201]]]}},"Institute-of-Rural-Development-Planning":{type:"Feature",id:"Institute-of-Rural-Development-Planning",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[35.74578,-5.89759],[35.90545,-5.96335],[35.97165,-6.12212],[35.90554,-6.28095],[35.74578,-6.34675],[35.58602,-6.28095],[35.51992,-6.12212],[35.58612,-5.96335],[35.74578,-5.89759]]]}},"Open-University-of-Tanzania":{type:"Feature",id:"Open-University-of-Tanzania",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[39.26466,-6.55895],[39.42453,-6.6247],[39.49082,-6.78347],[39.42463,-6.9423],[39.26466,-7.0081],[39.10469,-6.9423],[39.0385,-6.78347],[39.10479,-6.6247],[39.26466,-6.55895]]]}},"Sokoine-University-of-Agriculture":{type:"Feature",id:"Sokoine-University-of-Agriculture",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[37.65636,-6.62796],[37.81625,-6.69371],[37.88255,-6.85249],[37.81636,-7.01131],[37.65636,-7.07712],[37.49636,-7.01131],[37.43017,-6.85249],[37.49647,-6.69371],[37.65636,-6.62796]]]}},"University-of-Dar-es-Salaam":{type:"Feature",id:"University-of-Dar-es-Salaam",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[39.20531,-6.55579],[39.36518,-6.62155],[39.43147,-6.78032],[39.36528,-6.93915],[39.20531,-7.00495],[39.04534,-6.93915],[38.97915,-6.78032],[39.04544,-6.62155],[39.20531,-6.55579]]]}},"Busitema-University":{type:"Feature",id:"Busitema-University",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[34.01367,0.75192],[34.17248,0.68614],[34.23826,0.52733],[34.17248,0.36853],[34.01367,0.30276],[33.85487,0.36853],[33.78908,0.52733],[33.85486,0.68614],[34.01367,0.75192]]]}},"Gulu-University":{type:"Feature",id:"Gulu-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[32.34375,3.03595],[32.50276,2.97016],[32.5686,2.81135],[32.50272,2.65256],[32.34375,2.58679],[32.18478,2.65256],[32.1189,2.81135],[32.18474,2.97016],[32.34375,3.03595]]]}},"Kumi-University":{type:"Feature",id:"Kumi-University",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[33.83789,1.71855],[33.99676,1.65277],[34.06255,1.49396],[33.99673,1.33516],[33.83789,1.26939],[33.67905,1.33516],[33.61324,1.49396],[33.67902,1.65277],[33.83789,1.71855]]]}},"Makerere-University":{type:"Feature",id:"Makerere-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[32.60742,0.57614],[32.76623,0.51036],[32.832,0.35156],[32.76622,0.19276],[32.60742,0.12698],[32.44862,0.19276],[32.38284,0.35156],[32.44861,0.51036],[32.60742,0.57614]]]}},"Mbarara-University-of-Science-and-Technology":{type:"Feature",id:"Mbarara-University-of-Science-and-Technology",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[30.65679,-0.39187],[30.81559,-0.45764],[30.88138,-0.61644],[30.8156,-0.77524],[30.65679,-0.84102],[30.49797,-0.77524],[30.4322,-0.61644],[30.49798,-0.45764],[30.65679,-0.39187]]]}},"St.-Augustine-International-University":{type:"Feature",id:"St.-Augustine-International-University",properties:{area:1767.81},geometry:{type:"Polygon",coordinates:[[[32.62161,0.49696],[32.78042,0.43118],[32.8462,0.27237],[32.78042,0.11357],[32.62161,0.0478],[32.46281,0.11357],[32.39703,0.27237],[32.46281,0.43118],[32.62161,0.49696]]]}},"Uganda-Christian-University-Mbale-Campus":{type:"Feature",id:"Uganda-Christian-University-Mbale-Campus",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[34.17487,1.30046],[34.3337,1.23468],[34.39949,1.07587],[34.33369,0.91707],[34.17487,0.8513],[34.01605,0.91707],[33.95025,1.07587],[34.01603,1.23468],[34.17487,1.30046]]]}},"Uganda-Pentecostal-University":{type:"Feature",id:"Uganda-Pentecostal-University",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[30.26621,0.88664],[30.42503,0.82086],[30.4908,0.66206],[30.42502,0.50326],[30.26621,0.43749],[30.1074,0.50326],[30.04162,0.66206],[30.10739,0.82086],[30.26621,0.88664]]]}},"St.-Mawaggali-Trades-Training-Institute":{type:"Feature",id:"St.-Mawaggali-Trades-Training-Institute",properties:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[26.9671,-16.59033],[27.13286,-16.65604],[27.20171,-16.81478],[27.13314,-16.97365],[26.9671,-17.03949],[26.80107,-16.97365],[26.73249,-16.81478],[26.80135,-16.65604],[26.9671,-16.59033]]]}},"The-University-of-Zambia":{type:"Feature",id:"The-University-of-Zambia",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[28.33027,-15.16737],[28.49485,-15.23309],[28.5632,-15.39183],[28.49511,-15.55069],[28.33027,-15.61653],[28.16544,-15.55069],[28.09734,-15.39183],[28.16569,-15.23309],[28.33027,-15.16737]]]}},"University-of-Zimbabwe":{type:"Feature",id:"University-of-Zimbabwe",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[31.05466,-17.56016],[31.22128,-17.62587],[31.29051,-17.7846],[31.22158,-17.94347],[31.05466,-18.00932],[30.88774,-17.94347],[30.81881,-17.7846],[30.88803,-17.62587],[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",area:653958.06}},asia_full:{type:"Feature",id:"asia_full",properties:{area:91922406.48},geometry:{type:"Polygon",coordinates:[[[65,-11.3],[55,15],[44.2,11.5],[42.5,13.7],[34.34,27.6],[34.93,29.5],[33.6,33],[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]]]}},"Asian-University-for-Women":{type:"Feature",id:"Asian-University-for-Women",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[91.8457,22.57465],[92.0176,22.50879],[92.08852,22.34989],[92.01721,22.19118],[91.8457,22.1255],[91.6742,22.19118],[91.60288,22.34989],[91.67381,22.50879],[91.8457,22.57465]]]}},BGD:{type:"Feature",id:"BGD",properties:{name:"Bangladesh",area:134364.93},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:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.52524,23.88372],[90.59687,23.72482],[90.52481,23.56611],[90.35156,23.50043],[90.17831,23.56611],[90.10625,23.72482],[90.17789,23.88372],[90.35156,23.94959]]]}},"Dhaka-University":{type:"Feature",id:"Dhaka-University",properties:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[90.35156,23.94959],[90.52524,23.88372],[90.59687,23.72482],[90.52481,23.56611],[90.35156,23.50043],[90.17831,23.56611],[90.10625,23.72482],[90.17789,23.88372],[90.35156,23.94959]]]}},"Eastern-University":{type:"Feature",id:"Eastern-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[90.38063,23.96703],[90.55432,23.90116],[90.62597,23.74226],[90.5539,23.58356],[90.38063,23.51788],[90.20735,23.58356],[90.13528,23.74226],[90.20693,23.90116],[90.38063,23.96703]]]}},"Jahangirnagar-University":{type:"Feature",id:"Jahangirnagar-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[90.26753,24.10689],[90.44141,24.04102],[90.51314,23.88212],[90.44099,23.72342],[90.26753,23.65774],[90.09407,23.72342],[90.02192,23.88212],[90.09364,24.04102],[90.26753,24.10689]]]}},"Khulna-University":{type:"Feature",id:"Khulna-University",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[89.56055,23.06152],[89.73306,22.99565],[89.80423,22.83676],[89.73265,22.67805],[89.56055,22.61237],[89.38844,22.67805],[89.31687,22.83676],[89.38804,22.99565],[89.56055,23.06152]]]}},"Rajshahi-University-of-Engineering-Technology":{type:"Feature",id:"Rajshahi-University-of-Engineering-Technology",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[88.62839,24.58841],[88.80293,24.52253],[88.87492,24.36363],[88.8025,24.20493],[88.62839,24.13925],[88.45428,24.20493],[88.38185,24.36363],[88.45384,24.52253],[88.62839,24.58841]]]}},"Sherubtse-College":{type:"Feature",id:"Sherubtse-College",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[91.52369,27.51129],[91.70263,27.4454],[91.77639,27.28649],[91.70212,27.1278],[91.52369,27.06214],[91.34526,27.1278],[91.271,27.28649],[91.34475,27.4454],[91.52369,27.51129]]]}},"Gujarat-University":{type:"Feature",id:"Gujarat-University",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[72.50977,23.22343],[72.68248,23.15756],[72.75374,22.99866],[72.68208,22.83996],[72.50977,22.77427],[72.33745,22.83996],[72.26579,22.99866],[72.33705,23.15756],[72.50977,23.22343]]]}},india_andhrapradesh:{type:"Feature",id:"india_andhrapradesh",properties:{area:229542.28},geometry:{type:"Polygon",coordinates:[[[76.76365,14.98503],[76.78952,15.01589],[76.77614,15.05336],[76.80034,15.09466],[76.86072,15.05669],[76.87678,15.02859],[76.94279,15.02725],[76.98159,15.0103],[77.00077,15.02948],[77.04671,15.02904],[77.07882,15.00004],[77.1096,15.02859],[77.12744,15.09371],[77.14751,15.10753],[77.16873,15.17462],[77.14554,15.22413],[77.15223,15.29148],[77.12118,15.29418],[77.11387,15.3334],[77.07705,15.32577],[77.0421,15.36103],[77.027,15.44075],[76.97414,15.50807],[77.02697,15.5037],[77.03509,15.63815],[77.08728,15.65733],[77.08192,15.69524],[77.05293,15.72914],[77.05561,15.82458],[77.03333,15.85326],[77.07659,15.90991],[77.14448,15.94265],[77.2479,15.96378],[77.3564,15.95008],[77.42745,15.94836],[77.46652,15.93453],[77.61152,15.91691],[77.6536,15.88393],[77.72205,15.89199],[77.80554,15.87083],[77.8616,15.88138],[77.89376,15.90154],[78.00803,15.86506],[78.03641,15.90188],[78.06997,15.85048],[78.10755,15.83401],[78.17153,15.85511],[78.17371,15.89569],[78.20995,15.9197],[78.2507,15.96993],[78.2682,16.02857],[78.29785,16.01169],[78.40727,16.0756],[78.45394,16.07503],[78.55814,16.04517],[78.59917,16.08361],[78.64311,16.08312],[78.68277,16.03346],[78.73718,16.0097],[78.78267,16.02125],[78.8419,16.08707],[78.83228,16.13919],[78.87606,16.13902],[78.88876,16.0879],[78.92138,16.10307],[78.9049,16.17711],[78.92807,16.19871],[78.98352,16.21074],[79.01236,16.24173],[79.09802,16.2236],[79.12305,16.23187],[79.1593,16.20893],[79.22111,16.23251],[79.23438,16.32518],[79.21143,16.35493],[79.21112,16.44396],[79.22091,16.51631],[79.25265,16.57381],[79.37802,16.58412],[79.41773,16.57986],[79.44409,16.61796],[79.49421,16.63408],[79.53884,16.63046],[79.60613,16.67239],[79.63566,16.6594],[79.68544,16.69755],[79.72286,16.68966],[79.74673,16.72106],[79.79256,16.72485],[79.81796,16.69098],[79.84286,16.70561],[79.88555,16.68642],[79.90723,16.63408],[79.95306,16.63621],[80.00576,16.70857],[80.05536,16.74833],[80.07093,16.81323],[80.0332,16.85233],[79.99173,16.86303],[80.04569,16.96517],[80.08405,16.96339],[80.134,16.98524],[80.18217,17.04501],[80.19555,17.01825],[80.26201,17.01066],[80.28877,16.97677],[80.31553,16.91254],[80.3191,16.87106],[80.35879,16.85501],[80.37306,16.8113],[80.41856,16.84252],[80.45647,16.78989],[80.56262,16.76268],[80.6041,16.78766],[80.55593,16.81843],[80.56485,16.86883],[80.59027,16.91165],[80.53184,16.95001],[80.44264,16.9451],[80.35835,16.97052],[80.38778,17.0071],[80.36682,17.0566],[80.39001,17.07623],[80.42034,17.02494],[80.48234,17.05036],[80.49616,17.10789],[80.56039,17.13822],[80.68393,17.06865],[80.82309,17.03787],[80.85877,17.05081],[80.87714,17.10478],[80.88011,17.1644],[80.91689,17.15439],[80.91892,17.22003],[80.99838,17.19012],[81.03576,17.19196],[81.05653,17.22041],[81.16295,17.23278],[81.18035,17.25463],[81.17053,17.29656],[81.19016,17.32733],[81.26732,17.3202],[81.31385,17.37576],[81.24132,17.40667],[81.22725,17.43762],[81.17746,17.45203],[81.15755,17.47938],[81.11343,17.49477],[81.08374,17.45957],[81.01198,17.49248],[80.99962,17.53013],[80.95671,17.58749],[80.85431,17.59347],[80.86444,17.62914],[80.90266,17.63912],[80.90684,17.67993],[80.89153,17.74125],[80.94636,17.76025],[81.03556,17.74495],[81.07481,17.76038],[81.08891,17.81081],[81.15938,17.85273],[81.19194,17.84694],[81.25394,17.81215],[81.40915,17.80501],[81.47025,17.8233],[81.48096,17.80278],[81.5541,17.81616],[81.61119,17.81527],[81.66293,17.87682],[81.70307,17.86121],[81.78246,17.90982],[81.80119,17.93614],[81.89932,17.9687],[82.0019,18.02356],[82.03316,18.06597],[82.08072,18.07378],[82.14091,18.0439],[82.17228,18.04993],[82.25028,17.9883],[82.27583,17.995],[82.2667,18.04332],[82.29628,18.06899],[82.34354,18.07485],[82.33329,18.1422],[82.30608,18.19572],[82.33284,18.21579],[82.33685,18.26619],[82.37209,18.27421],[82.39305,18.30633],[82.33462,18.31703],[82.38458,18.36922],[82.36138,18.4098],[82.43513,18.48477],[82.48969,18.52285],[82.53139,18.51177],[82.54422,18.41638],[82.60918,18.37427],[82.59758,18.26516],[82.64005,18.23708],[82.67329,18.29908],[82.70644,18.30476],[82.77538,18.33958],[82.79251,18.36262],[82.78448,18.42803],[82.80742,18.44772],[82.89919,18.40074],[82.91103,18.36453],[82.98471,18.36362],[83.0002,18.38368],[83.04775,18.37883],[83.07472,18.401],[83.04552,18.44345],[83.05997,18.48603],[83.09665,18.54123],[83.05931,18.54334],[83.0336,18.57266],[83.05776,18.62215],[83.09414,18.63021],[83.15495,18.70089],[83.23099,18.75616],[83.27407,18.76523],[83.28745,18.79777],[83.36791,18.81557],[83.40661,18.84174],[83.39569,18.87914],[83.35554,18.92896],[83.36892,18.96132],[83.32119,18.97447],[83.3428,19.01449],[83.41665,19.00408],[83.45049,18.95576],[83.48237,19.00825],[83.46716,19.07746],[83.51314,19.07262],[83.52143,19.03271],[83.61209,19.10076],[83.62679,19.14969],[83.69206,19.05202],[83.71342,18.99346],[83.73398,18.98382],[83.79596,19.01607],[83.84255,18.9178],[83.85136,18.86003],[83.87788,18.82716],[84.05557,18.79246],[84.0894,18.75373],[84.16689,18.78415],[84.22422,18.79642],[84.2535,18.78262],[84.2914,18.8],[84.33966,18.80123],[84.39349,18.89211],[84.43671,18.92277],[84.42292,18.94711],[84.47894,18.99017],[84.51711,19.04634],[84.62687,19.08543],[84.61653,19.12624],[84.66828,19.13065],[84.6721,19.16552],[84.71352,19.1524],[84.70468,19.11772],[84.76857,19.08003],[85.15481,18.87834],[80.22545,13.48346],[80.14774,13.49443],[80.08045,13.49111],[80.08,13.52565],[80.00213,13.53964],[80.01841,13.50074],[79.97441,13.46419],[79.96622,13.38714],[79.93821,13.34898],[79.86379,13.31632],[79.8129,13.31712],[79.79245,13.29487],[79.73437,13.27843],[79.79598,13.24103],[79.75102,13.21106],[79.68369,13.24845],[79.68102,13.29448],[79.57781,13.26176],[79.54809,13.32329],[79.42941,13.33391],[79.41957,13.24971],[79.43293,13.1966],[79.39666,13.19679],[79.36005,13.17504],[79.36244,13.13752],[79.31106,13.1268],[79.28351,13.14994],[79.23853,13.1464],[79.20549,13.10147],[79.16498,13.01908],[79.06532,13.04951],[78.99361,13.08754],[78.95768,13.07478],[78.81243,13.08649],[78.75104,13.05634],[78.71387,13.06691],[78.70525,13.01518],[78.6625,13.02861],[78.63167,12.98455],[78.63629,12.92494],[78.60313,12.84933],[78.59178,12.77804],[78.55737,12.73938],[78.55312,12.69582],[78.50595,12.74103],[78.50517,12.68031],[78.46933,12.67292],[78.47136,12.62811],[78.3799,12.62235],[78.30177,12.66322],[78.27563,12.70205],[78.23857,12.6994],[78.23025,12.75702],[78.2528,12.82236],[78.25198,12.85741],[78.31411,12.85733],[78.32741,12.90272],[78.35638,12.93819],[78.38944,12.90542],[78.41213,12.94302],[78.46924,12.97546],[78.46092,13.03126],[78.5219,13.06638],[78.54509,13.11098],[78.57956,13.21461],[78.57797,13.28201],[78.51185,13.28722],[78.44649,13.30825],[78.43949,13.327],[78.36546,13.36503],[78.38151,13.40071],[78.37259,13.46181],[78.38241,13.52477],[78.40574,13.57659],[78.39268,13.5915],[78.32632,13.59445],[78.25894,13.58461],[78.20436,13.60369],[78.16645,13.65721],[78.11784,13.65587],[78.12295,13.71405],[78.09423,13.74251],[78.12795,13.78565],[78.11441,13.8625],[78.04999,13.89494],[78.04642,13.86104],[78.00476,13.87355],[77.95566,13.82664],[77.95098,13.88825],[77.98752,13.89784],[77.97015,13.95827],[77.92868,13.90698],[77.89567,13.93954],[77.83858,13.93508],[77.81494,13.91679],[77.83635,13.86863],[77.79261,13.8211],[77.6267,13.76984],[77.53033,13.69514],[77.45805,13.68671],[77.47014,13.7502],[77.45855,13.79212],[77.41662,13.80595],[77.43223,13.84163],[77.32787,13.83226],[77.31449,13.86393],[77.25829,13.84609],[77.21904,13.86794],[77.18236,13.8682],[77.15308,13.84278],[77.18088,13.78098],[77.17444,13.76135],[77.10308,13.76759],[77.06516,13.74405],[77.0277,13.77651],[77.00003,13.74482],[76.97723,13.81547],[77.01323,13.85558],[77.04239,13.9332],[76.99574,13.96114],[77.00108,13.98729],[76.93324,14.03009],[76.97878,14.07002],[76.89779,14.16518],[76.96469,14.18169],[77.02696,14.17477],[77.02154,14.13052],[77.03389,14.05587],[77.13014,14.04533],[77.1441,14.00245],[77.28518,14.01342],[77.31997,14.03126],[77.3503,13.95767],[77.35476,13.90325],[77.39713,13.90415],[77.42702,13.98353],[77.39,14.01386],[77.33291,14.02947],[77.40204,14.1102],[77.38331,14.13607],[77.39624,14.17175],[77.51711,14.17844],[77.49659,14.23419],[77.50284,14.27834],[77.45021,14.28414],[77.44887,14.31625],[77.37617,14.33081],[77.38984,14.26937],[77.28608,14.2828],[77.28786,14.33766],[77.23835,14.31759],[77.1661,14.34301],[77.13845,14.33721],[77.11838,14.29395],[77.11539,14.22104],[77.0818,14.2159],[77.05638,14.24623],[76.9426,14.2444],[76.92967,14.27651],[76.94748,14.31179],[76.9038,14.32379],[76.88373,14.35055],[76.88774,14.3947],[76.97828,14.48256],[76.91138,14.48836],[76.87481,14.47275],[76.83244,14.52761],[76.80434,14.53207],[76.76554,14.60075],[76.77639,14.68002],[76.80359,14.7398],[76.78371,14.78455],[76.83756,14.78968],[76.86771,14.96792],[76.76736,14.97267],[76.76365,14.98503]]]}},india_full:{type:"Feature",id:"india_full",properties:{name:"India",area:4274433.91},geometry:{type:"Polygon",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],[80.90881,30.29702],[80.08843,28.79447],[83.30425,27.36451],[84.67502,27.2349],[85.29785,26.75542],[85.64392,26.87798],[85.7428,26.80446],[85.74417,26.64378],[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.51685,26.49024],[88.08838,25.86911],[89.00299,25.2894],[88.94531,25.17015],[88.47839,25.21488],[88.35754,24.85653],[88.19275,24.9512],[88.04993,24.68196],[88.12683,24.52713],[88.72284,24.28953],[88.74756,23.91095],[88.59375,23.85067],[88.56079,23.62943],[88.85742,23.22115],[89.2,21],[79.5,9.6],[79.45,9.1],[77,7],[72,8],[67.9,23.7],[68.8426,24.35913],[71.04324,24.35652],[70.78491,25.24966],[70.08728,25.92841],[70.16893,26.49187],[69.44458,26.77504],[70.3125,28.0041],[71.77767,27.91318],[73.45064,29.97641],[74.55872,31.03882],[74.55872,31.83557],[75.41016,32.26856],[74.47632,32.70411],[73.74995,34.3177],[74.2402,34.74889],[75.75706,34.50492],[77.83745,35.49401]]]}},india_karnataka:{type:"Feature",id:"india_karnataka",properties:{area:200460.96},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:{area:56032.32},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",area:323369.3},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",area:649.41},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:{area:160506.91},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:{area:115460.77},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:{area:6397922.94},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:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[119.4292,-4.96157],[119.58862,-5.02733],[119.6547,-5.18611],[119.5887,-5.34493],[119.4292,-5.41072],[119.26971,-5.34493],[119.2037,-5.18611],[119.26979,-5.02733],[119.4292,-4.96157]]]}},"University-Muhammadiyah-Surakarta":{type:"Feature",id:"University-Muhammadiyah-Surakarta",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[110.76899,-7.33303],[110.92912,-7.39878],[110.99553,-7.55755],[110.92924,-7.71638],[110.76899,-7.78219],[110.60873,-7.71638],[110.54244,-7.55755],[110.60885,-7.39878],[110.76899,-7.33303]]]}},iran:{type:"Feature",properties:{area:1812060.29},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:{area:1057773.51},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]]]}},korea:{type:"Feature",id:"korea",properties:{area:545707.12},geometry:{type:"Polygon",coordinates:[[[125,33],[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],[132.2,37.2],[127.3,33],[125,33]]]}},malaysia:{type:"Feature",id:"malaysia",properties:{area:519952.94},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",area:1543736.23},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",area:734123.47},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:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[85.34173,27.95228],[85.5214,27.88639],[85.59544,27.72747],[85.52087,27.56879],[85.34173,27.50313],[85.16259,27.56879],[85.08802,27.72747],[85.16207,27.88639],[85.34173,27.95228]]]}},"Kathmandu-University":{type:"Feature",id:"Kathmandu-University",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[85.53873,27.84494],[85.71822,27.77905],[85.79219,27.62013],[85.7177,27.46145],[85.53873,27.39578],[85.35976,27.46145],[85.28527,27.62013],[85.35924,27.77905],[85.53873,27.84494]]]}},NPL:{type:"Feature",id:"NPL",properties:{name:"Nepal",area:151278.45},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:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[83.97645,28.47849],[84.157,28.4126],[84.23141,28.25368],[84.15647,28.09499],[83.97645,28.02933],[83.79644,28.09499],[83.7215,28.25368],[83.7959,28.4126],[83.97645,28.47849]]]}},north_korea:{type:"Feature",id:"north_korea",properties:{area:219680.43},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:{area:0},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:{area:1356977.59},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:{area:57.55},geometry:{type:"Polygon",coordinates:[[[121.02,14.68],[121.1,14.68],[121.1,14.62],[121.02,14.62],[121.02,14.68]]]}},russia:{type:"Feature",id:"russia",properties:{area:21507057.78},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:{area:262060.8},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",area:65782.81},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:{area:106714.83},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:{area:12746.21},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:{area:874326.44},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:{area:40.04},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:{area:28910.8},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:{area:84686.54},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:{area:703.82},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:{area:227492.9},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:{area:31752.99},geometry:{type:"Polygon",coordinates:[[[3.33,51.45],[3.38379,51.33404],[3.35907,51.31688],[3.42499,51.24644],[3.52798,51.24902],[3.51151,51.29198],[3.59802,51.30143],[3.79028,51.25762],[3.79166,51.21119],[3.88779,51.21205],[4.16245,51.29112],[4.24347,51.37521],[4.33823,51.3795],[4.34509,51.36406],[4.42749,51.37264],[4.3808,51.44887],[4.53598,51.48737],[4.53049,51.4249],[4.66232,51.43004],[4.7612,51.50703],[5.0798,51.46684],[5.10864,51.42747],[5.07019,51.38892],[5.13199,51.34691],[5.25146,51.30572],[5.23361,51.2602],[5.41626,51.26535],[5.50278,51.30229],[5.56595,51.22237],[5.85846,51.15351],[5.68268,50.88571],[5.64697,50.86924],[5.65384,50.81548],[5.69366,50.8068],[5.68268,50.75731],[6.01501,50.75644],[6.0466,50.72689],[6.11664,50.72255],[6.17432,50.66078],[6.26633,50.63553],[6.20178,50.5274],[6.3501,50.48547],[6.34872,50.38576],[6.4119,50.32793],[6.31165,50.32179],[6.27869,50.26915],[6.1702,50.22788],[6.19217,50.18305],[6.14479,50.17734],[6.13586,50.12938],[6.10909,50.17646],[6.05209,50.15623],[6.02325,50.18217],[5.96626,50.17294],[5.95665,50.12982],[5.89485,50.11485],[5.80971,49.96977],[5.73761,49.89773],[5.78224,49.87915],[5.74379,49.8309],[5.75546,49.79323],[5.78911,49.79722],[5.83443,49.73868],[5.82893,49.72492],[5.86327,49.7267],[5.88661,49.70938],[5.86601,49.69029],[5.86258,49.6774],[5.90927,49.66363],[5.90652,49.6374],[5.88455,49.62717],[5.85022,49.59513],[5.87219,49.58623],[5.84267,49.55462],[5.8152,49.54571],[5.77057,49.56085],[5.75272,49.53947],[5.69641,49.54125],[5.66208,49.55061],[5.61813,49.52699],[5.60989,49.5047],[5.59616,49.51986],[5.55428,49.52699],[5.48424,49.5047],[5.47325,49.49712],[5.46432,49.50069],[5.46432,49.50827],[5.44716,49.51674],[5.46192,49.52543],[5.4669,49.52599],[5.46518,49.53913],[5.44081,49.55228],[5.45677,49.56698],[5.43755,49.56998],[5.42553,49.59781],[5.39429,49.61627],[5.34794,49.63028],[5.33627,49.61449],[5.31017,49.61049],[5.30331,49.62873],[5.32871,49.65696],[5.26897,49.69584],[5.21885,49.6874],[5.16289,49.69295],[5.16426,49.71271],[5.12272,49.71693],[5.12203,49.7267],[5.08839,49.76574],[5.06401,49.76086],[5.00599,49.7837],[4.99466,49.799],[4.949,49.79744],[4.92771,49.7857],[4.84978,49.7908],[4.87347,49.81894],[4.84497,49.86698],[4.88789,49.90945],[4.84222,49.94813],[4.78935,49.95696],[4.83742,50.03906],[4.81682,50.06507],[4.89647,50.14039],[4.81956,50.1659],[4.74678,50.11265],[4.69254,50.08711],[4.68842,49.99538],[4.54559,49.96756],[4.50645,49.94459],[4.44122,49.93752],[4.30664,49.96491],[4.19403,49.95608],[4.14322,49.9817],[4.13429,50.02186],[4.15833,50.04832],[4.23454,50.07124],[4.19403,50.1307],[4.12331,50.13422],[4.15077,50.17206],[4.14871,50.21426],[4.2215,50.25686],[4.20158,50.2731],[4.16313,50.28539],[4.14665,50.25555],[4.0258,50.3586],[3.89053,50.32574],[3.80127,50.35335],[3.74496,50.34634],[3.72299,50.30995],[3.68866,50.31697],[3.65707,50.37131],[3.67287,50.39407],[3.64883,50.46625],[3.5994,50.49552],[3.49983,50.48984],[3.51906,50.52347],[3.47374,50.53263],[3.44421,50.50688],[3.3728,50.49159],[3.28835,50.52783],[3.26981,50.60982],[3.23891,50.65164],[3.24165,50.66905],[3.26157,50.67645],[3.24715,50.71081],[3.20526,50.71124],[3.14896,50.78857],[3.12355,50.7864],[3.11325,50.79292],[3.0851,50.77294],[3.05351,50.77989],[2.93884,50.74297],[2.94296,50.73124],[2.92923,50.72515],[2.92099,50.70385],[2.90176,50.69385],[2.87979,50.70429],[2.84477,50.72168],[2.81113,50.71646],[2.71156,50.81114],[2.63535,50.81418],[2.59895,50.85494],[2.60239,50.92554],[2.62985,50.94588],[2.59895,50.99301],[2.56805,51.00987],[2.55844,51.07117],[2.4,51.25],[3.33,51.45]]]}},be_brussels:{type:"Feature",id:"be_brussels",properties:{area:175.91},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:{area:15565.45},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:{area:16809.63},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]]]}},bosnia_herzegovina:{type:"Feature",id:"bosnia_herzegovina",properties:{area:50742.34},geometry:{type:"Polygon",coordinates:[[[18.4996,42.58747],[18.44437,42.56076],[18.3609,42.61526],[18.24898,42.61375],[17.90239,42.81647],[17.85896,42.89458],[17.80815,42.92073],[17.7903,42.89961],[17.67975,42.92174],[17.64267,42.88351],[17.53967,42.93531],[17.71339,42.97351],[17.63424,43.09863],[17.43805,43.18365],[17.44734,43.1998],[17.37488,43.2502],[17.26227,43.39108],[17.30151,43.4393],[17.282,43.47769],[17.22656,43.49776],[17.1476,43.49677],[16.39709,44.06983],[16.15253,44.38405],[16.14789,44.48088],[15.90458,44.75089],[15.82858,44.72686],[15.74818,44.81311],[15.78598,44.84029],[15.7338,44.9371],[15.78598,44.96966],[15.75505,45.05587],[15.80439,45.1121],[15.77283,45.16143],[15.81894,45.2072],[15.99747,45.21978],[16.11145,45.08758],[16.29175,44.9865],[16.36047,44.99622],[16.40374,45.10639],[16.46738,45.13326],[16.5105,45.20898],[16.81812,45.17296],[16.92275,45.23503],[17.16882,45.13674],[17.59713,45.09425],[17.66404,45.12204],[17.84756,45.03242],[17.93891,45.07086],[17.93745,45.09903],[18.0011,45.14282],[18.11746,45.06832],[18.2011,45.0684],[18.22841,45.09274],[18.41889,45.09637],[18.46602,45.05359],[18.66267,45.04785],[18.72157,44.98326],[18.77858,44.98426],[18.78491,44.94261],[18.75375,44.95245],[18.73803,44.94119],[18.75065,44.90197],[18.83764,44.84591],[19.01733,44.85538],[19.18213,44.91036],[19.37645,44.8875],[19.09973,44.35135],[19.32495,44.24126],[19.61746,44.0338],[19.52545,43.95378],[19.40048,43.95872],[19.21234,44.01306],[19.52271,43.7061],[19.50966,43.5779],[19.28787,43.59929],[19.23157,43.5381],[18.9267,43.50523],[19.01459,43.44345],[19.0757,43.31319],[19.01871,43.26221],[18.91365,43.36063],[18.84018,43.34665],[18.67126,43.22519],[18.66302,43.03778],[18.50441,43.00967],[18.46802,42.75609],[18.56689,42.71877],[18.54767,42.62335],[18.4996,42.58747]]]}},croatia:{type:"Feature",id:"croatia",properties:{area:104087.62},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:{area:93626.15},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:{area:89267.55},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]]]}},finland:{type:"Feature",id:"finland",properties:{area:388872.27},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:{area:763687.44},geometry:{type:"Polygon",coordinates:[[[1.2,50.9],[2.4,51.3],[2.55981,51.06772],[2.56942,51],[2.60032,50.98955],[2.63122,50.94242],[2.60376,50.92208],[2.60032,50.85147],[2.63672,50.81071],[2.71293,50.80767],[2.8125,50.71298],[2.84614,50.7182],[2.88116,50.70081],[2.90313,50.69037],[2.92236,50.70037],[2.9306,50.72167],[2.94433,50.72776],[2.94021,50.73949],[3.05488,50.77642],[3.08647,50.76947],[3.11462,50.78945],[3.12492,50.78293],[3.15033,50.7851],[3.20663,50.70776],[3.24852,50.70733],[3.26294,50.67297],[3.24302,50.66557],[3.24028,50.64816],[3.27118,50.60633],[3.28972,50.52434],[3.37417,50.4881],[3.44558,50.50339],[3.47511,50.52914],[3.52043,50.51998],[3.5012,50.48635],[3.60077,50.49203],[3.6502,50.46275],[3.67424,50.39057],[3.65844,50.36781],[3.69003,50.31346],[3.72436,50.30644],[3.74633,50.34283],[3.80264,50.34984],[3.8919,50.32223],[4.02717,50.3551],[4.14802,50.25204],[4.1645,50.28188],[4.20295,50.26959],[4.22287,50.25335],[4.15008,50.21074],[4.15214,50.16854],[4.12468,50.1307],[4.1954,50.12718],[4.23591,50.06771],[4.1597,50.04479],[4.13566,50.01833],[4.14459,49.97817],[4.1954,49.95255],[4.30801,49.96138],[4.44259,49.93398],[4.50782,49.94105],[4.54696,49.96403],[4.68979,49.99185],[4.69391,50.08359],[4.74815,50.10913],[4.82093,50.16238],[4.89784,50.13687],[4.81819,50.06154],[4.83879,50.03553],[4.79072,49.95343],[4.84359,49.9446],[4.88926,49.90591],[4.84634,49.86344],[4.87484,49.8154],[4.85115,49.78725],[4.92908,49.78215],[4.95037,49.79389],[4.99603,49.79545],[5.00736,49.78015],[5.06538,49.75731],[5.08976,49.76219],[5.1234,49.72315],[5.12409,49.71338],[5.16563,49.70916],[5.16426,49.6894],[5.22022,49.68385],[5.27034,49.69229],[5.33008,49.6534],[5.30468,49.62517],[5.31154,49.60693],[5.33764,49.61093],[5.34931,49.62672],[5.39566,49.61271],[5.4269,49.59425],[5.43892,49.56642],[5.45814,49.56342],[5.44218,49.54872],[5.46655,49.53557],[5.46827,49.52242],[5.46329,49.52186],[5.44853,49.51317],[5.46569,49.5047],[5.46569,49.49712],[5.47462,49.49355],[5.48561,49.50113],[5.55565,49.52342],[5.59753,49.51629],[5.61126,49.50113],[5.6195,49.52342],[5.66345,49.54705],[5.69778,49.53769],[5.75409,49.53591],[5.77194,49.55729],[5.81657,49.54215],[5.87151,49.49645],[5.91408,49.49779],[5.97107,49.48619],[6.04317,49.44648],[6.12007,49.46879],[6.1338,49.48842],[6.17706,49.50403],[6.27319,49.50047],[6.36246,49.45674],[6.42632,49.47102],[6.5506,49.42147],[6.53961,49.39824],[6.57738,49.38707],[6.60278,49.36069],[6.57051,49.35398],[6.58836,49.31863],[6.66115,49.28012],[6.74423,49.16015],[6.8383,49.15005],[6.84242,49.16801],[6.8589,49.17699],[6.83624,49.20975],[6.8644,49.22455],[6.89529,49.2093],[6.92207,49.22141],[6.94267,49.21872],[6.96053,49.20212],[6.97906,49.20885],[7.01614,49.19135],[7.0388,49.18686],[7.03812,49.15724],[7.05048,49.11411],[7.06627,49.11231],[7.0903,49.12714],[7.08069,49.1505],[7.11365,49.1514],[7.10712,49.14466],[7.10815,49.1359],[7.1291,49.14039],[7.13493,49.12759],[7.15862,49.12017],[7.24686,49.12602],[7.29836,49.11141],[7.32376,49.14241],[7.36359,49.14084],[7.36599,49.16981],[7.4477,49.1826],[7.43946,49.16285],[7.49405,49.16734],[7.50744,49.14983],[7.49062,49.13702],[7.55173,49.08219],[7.67601,49.04372],[7.76836,49.04507],[7.79617,49.06329],[7.86861,49.03179],[7.89024,49.04664],[7.92046,49.03989],[7.9335,49.05632],[8.08594,48.99283],[8.14327,48.97729],[8.19683,48.97503],[8.2346,48.96692],[8.19889,48.95475],[8.1625,48.9146],[8.11512,48.84822],[8.10551,48.81432],[8.08937,48.79872],[8.0674,48.78674],[8.04234,48.78764],[8.02895,48.78176],[8.02311,48.76253],[8.01075,48.75642],[7.98122,48.7589],[7.97092,48.75279],[7.96886,48.72155],[7.89333,48.66036],[7.84492,48.64221],[7.80373,48.58524],[7.80819,48.5116],[7.77111,48.48726],[7.73266,48.38385],[7.74776,48.32339],[7.69558,48.29781],[7.66811,48.21712],[7.60872,48.16128],[7.57851,48.11775],[7.57198,48.07441],[7.57267,48.04022],[7.57087,48.02989],[7.62691,47.98165],[7.58915,47.92946],[7.56409,47.83805],[7.53078,47.78064],[7.54795,47.7227],[7.51465,47.69775],[7.52151,47.66099],[7.57095,47.62028],[7.59447,47.59887],[7.58554,47.57224],[7.56752,47.57433],[7.55774,47.56888],[7.55859,47.5624],[7.50607,47.5405],[7.49868,47.53354],[7.50298,47.52508],[7.52151,47.53181],[7.53319,47.52694],[7.52375,47.51268],[7.50074,47.51569],[7.51619,47.4947],[7.47997,47.47638],[7.43568,47.4954],[7.42229,47.47881],[7.45817,47.46976],[7.44598,47.45932],[7.43036,47.45479],[7.42161,47.44295],[7.40238,47.43343],[7.31964,47.43389],[7.24789,47.41787],[7.17064,47.44132],[7.18678,47.47823],[7.20257,47.4896],[7.16377,47.48658],[7.12841,47.49818],[7.07588,47.48589],[7.02129,47.50143],[6.98524,47.48983],[7.00172,47.44945],[6.94405,47.42669],[6.93787,47.40555],[6.91864,47.39858],[6.91383,47.38185],[6.88705,47.37534],[6.8795,47.35185],[7.02438,47.35743],[7.06421,47.32672],[6.95709,47.23076],[6.74835,47.09818],[6.72501,47.03831],[6.4476,46.93057],[6.45309,46.76997],[6.14273,46.59756],[6.06995,46.41798],[6.1647,46.37346],[6.10565,46.28243],[6.12694,46.25442],[6.10359,46.2378],[6.0569,46.24113],[5.97107,46.21025],[5.99167,46.18458],[5.95665,46.13132],[6.12625,46.14226],[6.25191,46.2074],[6.29791,46.22783],[6.31165,46.25585],[6.26427,46.24825],[6.23749,46.27911],[6.24985,46.30093],[6.22032,46.31089],[6.28967,46.38389],[6.51901,46.45584],[6.82388,46.43407],[6.7717,46.34693],[6.87057,46.26724],[6.78818,46.13988],[6.89529,46.09419],[7.05734,45.90339],[6.82114,45.82497],[6.8074,45.70426],[6.98868,45.62172],[6.99692,45.51982],[7.18643,45.39459],[7.10541,45.23138],[6.63986,45.11715],[6.74698,44.90841],[7.00516,44.8364],[6.88431,44.35233],[7.31827,44.12703],[7.65335,44.17038],[7.73575,44.07575],[7.49954,43.86226],[7.8,43.2],[9.6,43.2],[9.9,41.9],[9.3,41.3],[8,41.3],[3.3,42.43],[2.90451,42.45386],[2.57492,42.34028],[2.26181,42.43157],[2.00638,42.34941],[1.94046,42.45487],[1.73035,42.4964],[1.73378,42.5551],[1.78391,42.57078],[1.73859,42.60111],[1.55525,42.64709],[1.48041,42.64659],[1.44196,42.59859],[1.34995,42.70666],[0.72647,42.84778],[0.66055,42.68445],[-0.04257,42.68849],[-0.3035,42.83167],[-0.49026,42.78532],[-1.306,43.10098],[-1.36368,43.03276],[-1.47354,43.07089],[-1.38016,43.2452],[-1.73447,43.2952],[-6,49.1],[0,50.3],[1.2,50.9]]]}},"de-berlin-brandenburg":{type:"Feature",id:"de-berlin-brandenburg",properties:{area:30992.44},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-hamburg":{type:"Feature",properties:{area:2944.94},id:"de-hamburg",geometry:{type:"Polygon",coordinates:[[[9.6,53.8],[10.4,53.8],[10.4,53.3],[9.6,53.3],[9.6,53.8]]]}},"de-ostwestfalen-lippe":{type:"Feature",id:"de-ostwestfalen-lippe",properties:{area:8309.26},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:{area:384279.97},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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[8.67039,49.64365],[8.91529,49.57762],[9.01561,49.41856],[8.91371,49.26002],[8.67039,49.19449],[8.42706,49.26002],[8.32516,49.41856],[8.42548,49.57762],[8.67039,49.64365]]]}},hungary:{type:"Feature",id:"hungary",properties:{area:93206.18},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:{area:272273.78},geometry:{type:"Polygon",coordinates:[[[-25,67],[-12,67],[-12,63],[-25,63],[-25,67]]]}},ireland:{type:"Feature",id:"ireland",properties:{area:169589.93},geometry:{type:"Polygon",coordinates:[[[-5,54.4],[-5.4,52.2],[-11,50.7],[-11,55.5],[-6.1,55.5],[-5,54.4]]]}},italy:{type:"Feature",id:"italy",properties:{area:688027.24},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],[8,39],[7.5,41],[10,41.45],[9.6,43.2],[7.6,43.5]]]}},IT_Lazio:{type:"Feature",id:"IT_Lazio",properties:{area:31965.66},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[9.22852,45.68471],[9.45556,45.61871],[9.5487,45.45968],[9.45428,45.30111],[9.22852,45.23555],[9.00275,45.30111],[8.90833,45.45968],[9.00147,45.61871],[9.22852,45.68471]]]}},IT_Roma_Capitale:{type:"Feature",id:"IT_Roma_Capitale",properties:{area:9122.36},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:{area:8631.87},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:{area:7414.09},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]]]}},kosovo:{type:"Feature",id:"kosovo",properties:{area:11288.29},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:{area:2614.92},geometry:{type:"Polygon",coordinates:[[[5.80833,49.54348],[5.86945,49.5751],[5.86739,49.58712],[5.84885,49.58757],[5.84885,49.59959],[5.87769,49.60893],[5.87494,49.62228],[5.90378,49.64273],[5.90446,49.66541],[5.86121,49.67696],[5.88524,49.71116],[5.86258,49.72714],[5.82481,49.72537],[5.82756,49.75066],[5.78842,49.79634],[5.75615,49.79279],[5.73967,49.83798],[5.77744,49.88269],[5.73349,49.89685],[5.78087,49.96271],[5.84267,49.98479],[5.81795,50.01392],[5.86945,50.04744],[5.85503,50.06772],[5.88799,50.0827],[5.89348,50.11221],[5.96214,50.13466],[5.96352,50.1747],[6.02737,50.18349],[6.0363,50.16326],[6.06239,50.15579],[6.08093,50.1703],[6.12213,50.16238],[6.11183,50.13819],[6.13998,50.1307],[6.12282,50.05978],[6.16882,49.9839],[6.1805,49.95255],[6.22307,49.94945],[6.23131,49.90702],[6.31096,49.86986],[6.32401,49.83621],[6.34254,49.84994],[6.36623,49.85082],[6.40125,49.82049],[6.42666,49.81628],[6.4267,49.81199],[6.43082,49.8103],[6.43361,49.81151],[6.43623,49.81315],[6.44091,49.81415],[6.44292,49.81182],[6.45395,49.81146],[6.46854,49.82226],[6.47644,49.82115],[6.48228,49.81694],[6.48365,49.81495],[6.50648,49.80897],[6.5118,49.80099],[6.5209,49.8134],[6.53034,49.80852],[6.52639,49.80243],[6.50682,49.79068],[6.51678,49.78315],[6.50957,49.77373],[6.51781,49.76885],[6.51712,49.75987],[6.50047,49.75366],[6.50253,49.73191],[6.5173,49.72448],[6.51163,49.72093],[6.4979,49.72847],[6.49549,49.72481],[6.50751,49.71405],[6.47781,49.69617],[6.45773,49.69051],[6.42408,49.66241],[6.43833,49.65918],[6.43885,49.65118],[6.41756,49.61638],[6.39404,49.60003],[6.38666,49.59992],[6.37499,49.59135],[6.37705,49.5839],[6.38254,49.58056],[6.38014,49.57677],[6.3707,49.57933],[6.35765,49.57366],[6.38271,49.55729],[6.37739,49.54805],[6.35611,49.53067],[6.36829,49.50281],[6.36829,49.45976],[6.33345,49.46902],[6.31079,49.48062],[6.29482,49.48129],[6.27697,49.50325],[6.26307,49.50426],[6.24041,49.51418],[6.19457,49.5057],[6.17329,49.50916],[6.15406,49.50158],[6.16161,49.49288],[6.13981,49.48764],[6.129,49.49311],[6.1235,49.47314],[6.10376,49.47069],[6.10033,49.45262],[6.08248,49.45752],[6.07819,49.46377],[6.05639,49.46589],[6.04145,49.44782],[6.02669,49.44927],[6.02308,49.45518],[5.97965,49.45217],[5.98806,49.46176],[5.97691,49.46344],[5.97313,49.49088],[5.93674,49.49957],[5.90687,49.50002],[5.8667,49.50002],[5.8334,49.52632],[5.8437,49.53011],[5.83546,49.54192],[5.81657,49.53746],[5.80833,49.54348]]]}},"Universit-Mohammed-V-Rabat":{type:"Feature",id:"Universit-Mohammed-V-Rabat",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-6.84395,34.22335],[-6.65205,34.15742],[-6.57307,33.99847],[-6.65276,33.83982],[-6.84395,33.77419],[-7.03514,33.83982],[-7.11484,33.99847],[-7.03586,34.15742],[-6.84395,34.22335]]]}},netherlands:{type:"Feature",id:"netherlands",properties:{area:57045.6},geometry:{type:"Polygon",coordinates:[[[6.02737,50.77512],[6.0157,50.75644],[5.68337,50.75731],[5.69435,50.8068],[5.65453,50.81548],[5.64766,50.86924],[5.68337,50.88571],[5.85915,51.15351],[5.56664,51.22237],[5.50347,51.30229],[5.41695,51.26535],[5.2343,51.2602],[5.25215,51.30572],[5.13268,51.34691],[5.07088,51.38892],[5.10933,51.42747],[5.08049,51.46684],[5.00908,51.47796],[5.00496,51.43946],[4.91982,51.39064],[4.76601,51.41377],[4.77837,51.43261],[4.82368,51.42661],[4.83879,51.47967],[4.76189,51.50703],[4.66301,51.43004],[4.53118,51.4249],[4.53667,51.48737],[4.38149,51.44887],[4.42818,51.37264],[4.34578,51.36406],[4.33892,51.3795],[4.24416,51.37521],[4.16314,51.29112],[3.88848,51.21205],[3.79235,51.21119],[3.79097,51.25762],[3.59871,51.30143],[3.5122,51.29198],[3.52867,51.24902],[3.42568,51.24644],[3.35976,51.31688],[3.38448,51.33404],[3.3,51.45],[4,53.7],[6.25,53.7],[6.91658,53.45862],[6.97701,53.34399],[7.1981,53.28738],[7.22557,53.18053],[7.18163,53.12782],[7.2242,52.98503],[7.09099,52.84094],[7.04842,52.63306],[6.77376,52.65473],[6.71333,52.61639],[6.70097,52.48278],[6.94405,52.43592],[6.98799,52.46689],[7.06627,52.35799],[7.03194,52.29504],[7.06215,52.23621],[6.99211,52.22359],[6.95366,52.18277],[6.90765,52.17477],[6.85753,52.12084],[6.76346,52.11831],[6.75179,52.0871],[6.6893,52.05165],[6.82251,51.99503],[6.83006,51.96754],[6.8026,51.95823],[6.79058,51.93093],[6.72226,51.89472],[6.68724,51.91801],[6.46889,51.85444],[6.39336,51.87225],[6.40503,51.82772],[6.2677,51.86759],[6.21277,51.86674],[6.15509,51.907],[6.11183,51.89641],[6.16402,51.8608],[6.16814,51.83917],[6.06583,51.86292],[5.99648,51.83196],[5.94978,51.82644],[5.9951,51.76657],[5.96077,51.74234],[6.04385,51.71724],[6.02943,51.67426],[6.11526,51.65594],[6.09123,51.60693],[6.21071,51.52284],[6.22444,51.44759],[6.22032,51.35892],[6.07681,51.23914],[6.07132,51.17289],[6.1647,51.19312],[6.17157,51.15695],[6.09398,51.13111],[5.96832,51.05952],[5.9539,51.03362],[5.91476,51.06513],[5.86945,51.05003],[5.90515,50.99647],[5.89897,50.97616],[6.02119,50.98221],[6.01913,50.9355],[6.09604,50.91559],[6.07544,50.84627],[6.05072,50.85451],[6.01845,50.8441],[6.02737,50.80854],[5.97656,50.79943],[6.02737,50.77512]]]}},norway:{type:"Feature",id:"norway",properties:{area:2044029.2},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:{area:339252.64},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:{area:595445.26},geometry:{type:"MultiPolygon",coordinates:[[[[-8.87097,41.863],[-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.3,36.7],[-10,36.7],[-10,41.86],[-8.87097,41.863]]],[[[-32,40],[-24,40],[-24,36],[-32,36],[-32,40]]],[[[-18,34],[-15,34],[-15,29.7],[-18,29.7],[-18,34]]]]}},slovenia:{type:"Feature",id:"slovenia",properties:{area:21482.14},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]]]}},galicia:{type:"Feature",properties:{area:37013.86},id:"galicia",geometry:{type:"Polygon",coordinates:[[[-7.17133,43.43198],[-7.17545,43.38808],[-7.13837,43.3811],[-7.12807,43.33567],[-7.09511,43.3017],[-7.06627,43.30519],[-7.06764,43.2457],[-6.96808,43.18966],[-6.98181,43.16512],[-6.95297,43.13507],[-6.86096,43.17564],[-6.81908,43.13657],[-6.91315,43.07441],[-6.94405,43.07842],[-6.97083,43.03678],[-6.83556,42.95894],[-6.83281,42.91772],[-6.86783,42.87345],[-6.84174,42.82462],[-7.04224,42.69758],[-7.00584,42.64457],[-7.04361,42.63547],[-7.03949,42.58797],[-7.07726,42.50956],[-6.82182,42.49438],[-6.80603,42.46602],[-6.84105,42.40318],[-6.73325,42.35854],[-6.77307,42.25648],[-6.93649,42.16646],[-7.04361,42.06],[-6.96877,42.05082],[-6.96465,42.02583],[-6.99623,41.96664],[-7.07382,41.94979],[-7.14729,41.99063],[-7.18781,41.9697],[-7.19055,41.88439],[-7.42264,41.81124],[-7.70142,41.90125],[-8.16833,41.81943],[-8.22739,41.91045],[-8.09143,42.01869],[-8.19855,42.14508],[-8.23168,42.13248],[-8.24232,42.13884],[-8.25657,42.13349],[-8.25932,42.12191],[-8.27391,42.12356],[-8.30154,42.10535],[-8.32266,42.10064],[-8.32558,42.09045],[-8.33347,42.08434],[-8.3606,42.09032],[-8.37055,42.08752],[-8.38188,42.07631],[-8.39081,42.07593],[-8.39167,42.07924],[-8.41158,42.0772],[-8.43063,42.07211],[-8.44265,42.08294],[-8.47801,42.0809],[-8.48419,42.08204],[-8.5017,42.07797],[-8.52608,42.07771],[-8.52591,42.06331],[-8.55251,42.05337],[-8.58667,42.05222],[-8.59594,42.05592],[-8.64023,42.04713],[-8.64607,42.03667],[-8.65791,42.03081],[-8.65826,42.0155],[-8.66392,42.00109],[-8.67268,41.99637],[-8.70632,41.98208],[-8.74718,41.96409],[-8.74838,41.94302],[-8.76,41.9311],[-8.9,41.85],[-9.6,43.2],[-7.5,44],[-7.02885,43.55178],[-7.04807,43.50698],[-7.04807,43.47684],[-7.06181,43.47335],[-7.09099,43.45242],[-7.08858,43.4437],[-7.11983,43.42525],[-7.17133,43.43198]]]}},spain:{type:"Feature",id:"spain",properties:{area:826232.89},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-3.69437,40.77124],[-3.48489,40.70527],[-3.39883,40.54628],[-3.48588,40.38767],[-3.69437,40.32208],[-3.90286,40.38767],[-3.98992,40.54628],[-3.90385,40.70527],[-3.69437,40.77124]]]}},"Universidad-Politcnica-de-Madrid":{type:"Feature",id:"Universidad-Politcnica-de-Madrid",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-3.7173,40.67259],[-3.50813,40.60662],[-3.42219,40.44764],[-3.50912,40.28902],[-3.7173,40.22343],[-3.92549,40.28902],[-4.01241,40.44764],[-3.92647,40.60662],[-3.7173,40.67259]]]}},sweden:{type:"Feature",id:"sweden",properties:{area:565641.63},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]]]}},switzerland:{type:"Feature",id:"switzerland",properties:{area:41651.39},geometry:{type:"Polygon",coordinates:[[[6.10909,46.57727],[6.45584,46.77702],[6.42838,46.80805],[6.45996,46.89633],[6.4325,46.92823],[6.6433,47.00929],[6.71745,47.05188],[6.68999,47.07106],[6.74561,47.10846],[6.86096,47.16638],[6.8438,47.17198],[6.95641,47.24241],[6.94199,47.29181],[7.06352,47.33975],[7.01477,47.3751],[6.87332,47.35418],[6.94473,47.43273],[7.00104,47.45642],[6.9825,47.49494],[7.02026,47.50421],[7.07657,47.49076],[7.13356,47.50236],[7.16103,47.48844],[7.19879,47.49494],[7.17064,47.44295],[7.20634,47.43552],[7.26471,47.42484],[7.3217,47.43877],[7.3938,47.43505],[7.4556,47.4722],[7.42264,47.48148],[7.435,47.49308],[7.47757,47.48148],[7.51122,47.49865],[7.50572,47.5172],[7.52563,47.52137],[7.52632,47.53343],[7.5016,47.53157],[7.49886,47.54316],[7.55653,47.56911],[7.5634,47.57884],[7.58194,47.57884],[7.58812,47.59088],[7.60597,47.58672],[7.60597,47.5793],[7.62383,47.57884],[7.6458,47.59876],[7.68013,47.59135],[7.687,47.56726],[7.63481,47.56402],[7.67601,47.53575],[7.79823,47.55938],[7.81815,47.58625],[7.89711,47.58672],[7.91153,47.55197],[7.9226,47.54687],[7.93256,47.54705],[7.94432,47.54421],[7.95041,47.54745],[7.95178,47.5551],[7.9602,47.55823],[7.97951,47.55463],[8.00251,47.55579],[8.0195,47.55046],[8.04886,47.55626],[8.05984,47.56344],[8.06843,47.56413],[8.07186,47.56413],[8.08113,47.55823],[8.08954,47.55799],[8.09881,47.56182],[8.10242,47.57108],[8.10362,47.5778],[8.11031,47.58301],[8.12096,47.58359],[8.13641,47.58463],[8.13709,47.58961],[8.15014,47.59551],[8.16044,47.59355],[8.18859,47.61021],[8.19958,47.62028],[8.20936,47.62121],[8.22018,47.6175],[8.22481,47.60501],[8.22824,47.60547],[8.23803,47.61288],[8.24867,47.61357],[8.26069,47.61542],[8.26447,47.60975],[8.2806,47.61183],[8.29794,47.60582],[8.29502,47.59274],[8.30017,47.58729],[8.31184,47.58324],[8.32386,47.57259],[8.33639,47.57062],[8.35236,47.57085],[8.38326,47.56587],[8.3951,47.5778],[8.43184,47.56668],[8.45552,47.57212],[8.47836,47.57757],[8.48608,47.5778],[8.49432,47.58127],[8.48831,47.58822],[8.46651,47.5844],[8.45415,47.60119],[8.47939,47.61311],[8.50891,47.61843],[8.51784,47.63416],[8.55801,47.62468],[8.57449,47.61056],[8.56041,47.60061],[8.57964,47.59575],[8.60641,47.61357],[8.59371,47.64319],[8.60573,47.65198],[8.61294,47.65082],[8.61397,47.64342],[8.60401,47.64087],[8.60641,47.63717],[8.62289,47.64018],[8.62976,47.65267],[8.60641,47.66677],[8.59989,47.67279],[8.57689,47.66215],[8.56007,47.66978],[8.53191,47.64827],[8.46359,47.64712],[8.40557,47.67371],[8.41827,47.68411],[8.4042,47.69844],[8.4557,47.72916],[8.45673,47.74879],[8.48797,47.7721],[8.56865,47.78779],[8.56281,47.79932],[8.62015,47.80139],[8.61465,47.78271],[8.62289,47.77671],[8.62873,47.75825],[8.64967,47.77348],[8.65482,47.80093],[8.68332,47.78479],[8.69053,47.75825],[8.71353,47.76448],[8.74271,47.75271],[8.73825,47.74602],[8.71422,47.73748],[8.71593,47.72478],[8.73619,47.71646],[8.72726,47.69266],[8.76331,47.6885],[8.79559,47.67625],[8.79559,47.70399],[8.77121,47.70907],[8.77224,47.71923],[8.80486,47.73655],[8.81996,47.71207],[8.84674,47.70514],[8.87661,47.65521],[8.90236,47.64897],[8.96828,47.66862],[9.01978,47.68596],[9.26971,47.64781],[9.55124,47.52647],[9.65424,47.44388],[9.67072,47.38347],[9.6199,47.35929],[9.53888,47.27457],[9.48395,47.18505],[9.52103,47.0907],[9.47433,47.06264],[9.87534,47.02053],[9.87534,46.93526],[10.1239,46.84141],[10.40131,46.99524],[10.49469,46.92963],[10.40131,46.64755],[10.50293,46.61171],[10.45624,46.53052],[10.11566,46.62492],[10.04425,46.45867],[10.17334,46.39999],[10.11292,46.33745],[10.17609,46.24825],[10.05524,46.21595],[9.94537,46.37536],[9.55536,46.29192],[9.43451,46.39431],[9.34662,46.50595],[9.25049,46.44353],[9.28619,46.31848],[9.00604,46.03702],[9.08295,45.89192],[9.01154,45.81157],[8.91541,45.84219],[8.81927,46.07704],[8.58582,46.13417],[8.43475,46.25964],[8.45398,46.45678],[8.10516,46.26724],[8.17383,46.17032],[7.82227,45.91868],[7.09442,45.87471],[6.81427,46.14749],[6.85547,46.28053],[6.79504,46.43029],[6.50391,46.4511],[6.27869,46.37915],[6.22925,46.309],[6.3089,46.23875],[6.11938,46.14559],[5.95734,46.13417],[5.96283,46.21215],[6.1084,46.25964],[6.15784,46.37725],[6.06171,46.41703],[6.15234,46.54564],[6.10909,46.57727]]]}},"Istanbul-Technical-University":{type:"Feature",id:"Istanbul-Technical-University",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[29.02465,41.33019],[29.23592,41.26422],[29.3227,41.10523],[29.2349,40.94662],[29.02465,40.88103],[28.81441,40.94662],[28.72661,41.10523],[28.81339,41.26422],[29.02465,41.33019]]]}},ukraine:{type:"Feature",id:"ukraine",properties:{area:614942.59},geometry:{type:"Polygon",coordinates:[[[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]]]}},east_midlands_uk:{type:"Feature",id:"east_midlands_uk",properties:{area:15714.38},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:{area:16886.07},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:{area:2308.48},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]]]}},"Queen-Mary-University-of-London":{type:"Feature",id:"Queen-Mary-University-of-London",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-0.04049,51.74867],[0.21563,51.68262],[0.32046,51.52354],[0.21385,51.36502],[-0.04049,51.29952],[-0.29484,51.36502],[-0.40144,51.52354],[-0.29662,51.68262],[-0.04049,51.74867]]]}},scotland:{type:"Feature",id:"scotland",properties:{area:433889.66},geometry:{type:"Polygon",coordinates:[[[-3.05969,54.98352],[-3.12904,54.95199],[-3.21625,54.96579],[-5,54.4],[-6.1,55.5],[-9,55.5],[-9,63],[0,63],[0,56.6],[-2.08637,55.79086],[-2.08569,55.7619],[-2.10251,55.76132],[-2.24258,55.64505],[-2.32979,55.64079],[-2.16019,55.46095],[-2.56805,55.31274],[-2.70401,55.1773],[-2.96082,55.05084],[-3.04939,55.05517],[-3.03017,55.03314],[-3.05969,54.98352]]]}},united_kingdom:{type:"Feature",id:"united_kingdom",properties:{name:"United Kingdom",source:"OpenStreetMap",area:631309.53},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:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-3.53515,50.96148],[-3.28338,50.89544],[-3.1803,50.73637],[-3.28508,50.57784],[-3.53515,50.51233],[-3.78522,50.57784],[-3.89,50.73637],[-3.78692,50.89544],[-3.53515,50.96148]]]}},"University-of-Warwick":{type:"Feature",id:"University-of-Warwick",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-1.56119,52.60392],[-1.30011,52.53785],[-1.19329,52.37877],[-1.30198,52.22025],[-1.56119,52.15476],[-1.8204,52.22025],[-1.92909,52.37877],[-1.82228,52.53785],[-1.56119,52.60392]]]}},israel:{type:"Feature",properties:{area:35079.74},id:"israel",geometry:{type:"Polygon",coordinates:[[[35.56824,32.644],[35.56686,32.19886],[35.5188,32.03835],[35.54901,31.77021],[35.45975,31.3595],[35.40619,31.25742],[35.46387,31.11174],[35.39246,30.92343],[35.25925,30.65682],[35.16037,30.12019],[34.93378,29.41926],[34.86511,29.57823],[34.8761,29.66419],[34.61243,30.37051],[34.54651,30.40841],[34.51904,30.58827],[34.17572,31.41929],[34.7,33.11685],[35.19779,33.08924],[35.21324,33.09902],[35.31384,33.10362],[35.3643,33.05357],[35.43091,33.0691],[35.44464,33.09384],[35.503,33.09212],[35.503,33.11685],[35.53116,33.12548],[35.5394,33.22778],[35.5648,33.28577],[35.6218,33.27027],[35.76462,33.33397],[35.83878,33.17377],[35.81749,33.11167],[35.84427,33.10305],[35.88547,32.94242],[35.75706,32.74397],[35.56824,32.644]]]}},"Yarmouk-University":{type:"Feature",id:"Yarmouk-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[35.85811,32.76124],[36.04681,32.69532],[36.1245,32.53638],[36.04615,32.37772],[35.85811,32.31208],[35.67008,32.37772],[35.59173,32.53638],[35.66941,32.69532],[35.85811,32.76124]]]}},saudi_arabia:{type:"Feature",properties:{area:2139114.31},id:"saudi_arabia",geometry:{type:"Polygon",coordinates:[[[39.26514,32.2128],[43.00049,30.75128],[42.97852,30.52441],[44.71436,29.19053],[47.48291,28.99853],[47.63672,28.53627],[49.59229,28.49766],[50.75684,26.5099],[50.58105,25.18506],[50.95459,24.46715],[51.61377,24.76678],[52.05322,24.20689],[51.72363,23.96618],[52.58057,22.97862],[55.32715,22.69512],[55.63477,22.02455],[54.97559,20.03529],[52.00928,18.9998],[49.13086,18.62542],[48.22998,18.20848],[47.37305,17.11979],[47.02148,16.99376],[46.75781,17.30869],[43.65967,17.39258],[43.37402,17.60214],[43.06641,16.59408],[41.63818,15.96133],[34.38721,27.78077],[34.82666,29.40132],[36.10107,29.20971],[36.45264,29.49699],[36.73828,29.87876],[37.48535,30.01203],[37.66113,30.33495],[37.96875,30.46761],[37.00195,31.54109],[39.00146,31.98944],[39.26514,32.2128]]]}},"Sacred-Heart-Junior-College":{type:"Feature",id:"Sacred-Heart-Junior-College",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-89.07411,17.38565],[-88.90777,17.3198],[-88.83907,17.16093],[-88.90805,17.0022],[-89.07411,16.93649],[-89.24017,17.0022],[-89.30915,17.16093],[-89.24045,17.3198],[-89.07411,17.38565]]]}},canada_full:{type:"Feature",id:"canada_full",properties:{area:13830848.16},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:{area:4073.81},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:{area:3553.36},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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-84.05105,10.16183],[-83.88975,10.09601],[-83.82305,9.93717],[-83.88991,9.77841],[-84.05105,9.71267],[-84.21219,9.77841],[-84.27905,9.93717],[-84.21235,10.09601],[-84.05105,10.16183]]]}},cuba:{type:"Feature",id:"cuba",properties:{area:314422.89},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-87.16598,14.30969],[-87.00214,14.24385],[-86.93444,14.085],[-87.00237,13.92625],[-87.16598,13.86053],[-87.32959,13.92625],[-87.39752,14.085],[-87.32982,14.24385],[-87.16598,14.30969]]]}},"University-of-the-West-Indies-Mona-Campus":{type:"Feature",id:"University-of-the-West-Indies-Mona-Campus",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[-76.74601,18.23094],[-76.57888,18.16509],[-76.50987,18.00622],[-76.57918,17.84749],[-76.74601,17.78179],[-76.91284,17.84749],[-76.98215,18.00622],[-76.91314,18.16509],[-76.74601,18.23094]]]}},nicaragua:{type:"Feature",id:"nicaragua",properties:{area:173619.09},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:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-86.27051,12.35623],[-86.10798,12.2904],[-86.0408,12.13156],[-86.10817,11.9728],[-86.27051,11.90707],[-86.43284,11.9728],[-86.50021,12.13156],[-86.43303,12.2904],[-86.27051,12.35623]]]}},"University-of-Panama":{type:"Feature",id:"University-of-Panama",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-79.54102,9.23988],[-79.38016,9.17407],[-79.31363,9.01523],[-79.3803,8.85647],[-79.54102,8.79072],[-79.70173,8.85647],[-79.7684,9.01523],[-79.70187,9.17407],[-79.54102,9.23988]]]}},"Universidad-de-Puerto-Rico-Rio-Piedras":{type:"Feature",id:"Universidad-de-Puerto-Rico-Rio-Piedras",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-66.04978,18.62742],[-65.88227,18.56157],[-65.8131,18.40269],[-65.88258,18.24397],[-66.04978,18.17826],[-66.21699,18.24397],[-66.28647,18.40269],[-66.2173,18.56157],[-66.04978,18.62742]]]}},"Ball-State-University":{type:"Feature",id:"Ball-State-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-85.40688,40.43064],[-85.19846,40.36468],[-85.11283,40.20569],[-85.19944,40.04708],[-85.40688,39.98148],[-85.61432,40.04708],[-85.70094,40.20569],[-85.6153,40.36468],[-85.40688,40.43064]]]}},boston_metro:{type:"Feature",id:"boston_metro",properties:{area:6992.97},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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-79.89258,40.26902],[-79.68466,40.20305],[-79.59922,40.04407],[-79.68562,39.88545],[-79.89258,39.81986],[-80.09953,39.88545],[-80.18593,40.04407],[-80.1005,40.20305],[-79.89258,40.26902]]]}},central_pa:{type:"Feature",id:"central_pa",properties:{area:43193.43},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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-120.49805,47.20483],[-120.26459,47.13882],[-120.16888,46.97978],[-120.26598,46.82122],[-120.49805,46.75567],[-120.73012,46.82122],[-120.82722,46.97978],[-120.7315,47.13882],[-120.49805,47.20483]]]}},chattanooga:{type:"Feature",id:"chattanooga",properties:{area:3834.83},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-82.79297,34.89394],[-82.59951,34.82801],[-82.51991,34.66905],[-82.60025,34.51041],[-82.79297,34.44478],[-82.98568,34.51041],[-83.06603,34.66905],[-82.98642,34.82801],[-82.79297,34.89394]]]}},cleveland:{type:"Feature",id:"cleveland",properties:{area:10803},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-76.72852,37.52485],[-76.52846,37.45891],[-76.44619,37.29994],[-76.5293,37.14131],[-76.72852,37.0757],[-76.92773,37.14131],[-77.01084,37.29994],[-76.92857,37.45891],[-76.72852,37.52485]]]}},colorado:{type:"Feature",id:"colorado",properties:{area:269596.87},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-76.4735,42.67798],[-76.25772,42.612],[-76.16912,42.453],[-76.25882,42.2944],[-76.4735,42.22882],[-76.68818,42.2944],[-76.77788,42.453],[-76.68928,42.612],[-76.4735,42.67798]]]}},dc_metro:{type:"Feature",id:"dc_metro",properties:{area:3371.08},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:{area:20956.61},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:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-77.34375,39.04717],[-77.13947,38.98121],[-77.05549,38.82224],[-77.14037,38.66361],[-77.34375,38.59801],[-77.54713,38.66361],[-77.63201,38.82224],[-77.54803,38.98121],[-77.34375,39.04717]]]}},grand_junction_co:{type:"Feature",id:"grand_junction_co",properties:{area:7597.76},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:{area:8418.99},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-79.16139,40.83872],[-78.9517,40.77275],[-78.86555,40.61377],[-78.95269,40.45515],[-79.16139,40.38956],[-79.37009,40.45515],[-79.45724,40.61377],[-79.37108,40.77275],[-79.16139,40.83872]]]}},"Jacksonville-State-University":{type:"Feature",id:"Jacksonville-State-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-85.76795,34.04756],[-85.57644,33.98163],[-85.49762,33.82268],[-85.57715,33.66403],[-85.76795,33.5984],[-85.95874,33.66403],[-86.03828,33.82268],[-85.95945,33.98163],[-85.76795,34.04756]]]}},"Kansas-State-University":{type:"Feature",id:"Kansas-State-University",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-96.5918,39.38872],[-96.38652,39.32276],[-96.30215,39.16378],[-96.38744,39.00516],[-96.5918,38.93956],[-96.79615,39.00516],[-96.88145,39.16378],[-96.79708,39.32276],[-96.5918,39.38872]]]}},la_metro:{type:"Feature",id:"la_metro",properties:{area:7875.76},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:{area:58665.67},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-73.5787,45.73088],[-73.35147,45.66488],[-73.25825,45.50585],[-73.35274,45.34728],[-73.5787,45.28172],[-73.80465,45.34728],[-73.89914,45.50585],[-73.80593,45.66488],[-73.5787,45.73088]]]}},"Miami-University":{type:"Feature",id:"Miami-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-84.73174,39.73566],[-84.52543,39.6697],[-84.44065,39.51072],[-84.52638,39.3521],[-84.73174,39.2865],[-84.9371,39.3521],[-85.02283,39.51072],[-84.93805,39.6697],[-84.73174,39.73566]]]}},minneapolis_st_paul_metro:{type:"Feature",id:"minneapolis_st_paul_metro",properties:{area:7662.86},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-77.61025,43.32617],[-77.39219,43.26018],[-77.30267,43.10118],[-77.39332,42.94258],[-77.61025,42.87701],[-77.82718,42.94258],[-77.91783,43.10118],[-77.82831,43.26018],[-77.61025,43.32617]]]}},"Montgomery-College":{type:"Feature",id:"Montgomery-College",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-77.15782,39.32194],[-76.95274,39.25598],[-76.86844,39.097],[-76.95366,38.93838],[-77.15782,38.87278],[-77.36198,38.93838],[-77.4472,39.097],[-77.3629,39.25598],[-77.15782,39.32194]]]}},mt_vernon_wa:{type:"Feature",id:"mt_vernon_wa",properties:{area:8116.36},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:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[-74.00391,40.93853],[-73.7939,40.87257],[-73.70762,40.71358],[-73.7949,40.55497],[-74.00391,40.48938],[-74.21291,40.55497],[-74.30019,40.71358],[-74.21391,40.87257],[-74.00391,40.93853]]]}},nyc_metro:{type:"Feature",id:"nyc_metro",properties:{area:7203.85},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:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-83.06823,40.52082],[-82.85953,40.45485],[-82.77378,40.29586],[-82.86051,40.13725],[-83.06823,40.07166],[-83.27595,40.13725],[-83.36268,40.29586],[-83.27692,40.45485],[-83.06823,40.52082]]]}},"Oklahoma-State-University":{type:"Feature",id:"Oklahoma-State-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-97.07253,36.34551],[-96.87554,36.27957],[-96.79451,36.12061],[-96.87634,35.96197],[-97.07253,35.89636],[-97.26873,35.96197],[-97.35055,36.12061],[-97.26952,36.27957],[-97.07253,36.34551]]]}},philly_metro:{type:"Feature",id:"philly_metro",properties:{area:9339.06},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:{area:25567.43},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:{area:17148.97},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:{area:37748.1},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:{area:15136},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:{area:5767.44},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:{area:26601.97},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:{area:4030.01},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:{area:15521.97},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:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-77.7832,43.0361],[-77.56618,42.97012],[-77.47707,42.81111],[-77.56729,42.65252],[-77.7832,42.58694],[-77.99912,42.65252],[-78.08934,42.81111],[-78.00023,42.97012],[-77.7832,43.0361]]]}},"SUNY-at-Fredonia":{type:"Feature",id:"SUNY-at-Fredonia",properties:{area:1767.81},geometry:{type:"Polygon",coordinates:[[[-79.36523,42.64804],[-79.14956,42.58206],[-79.061,42.42305],[-79.15065,42.26445],[-79.36523,42.19888],[-79.57982,42.26445],[-79.66947,42.42305],[-79.58091,42.58206],[-79.36523,42.64804]]]}},tampa_bay:{type:"Feature",id:"tampa_bay",properties:{area:5696.14},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:{area:1767.72},geometry:{type:"Polygon",coordinates:[[[-101.86523,33.80259],[-101.67428,33.73667],[-101.59568,33.57772],[-101.67498,33.41907],[-101.86523,33.35344],[-102.05549,33.41907],[-102.13479,33.57772],[-102.05619,33.73667],[-101.86523,33.80259]]]}},"The-Citadel":{type:"Feature",id:"The-Citadel",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-79.96064,33.02165],[-79.77138,32.95573],[-79.69347,32.79679],[-79.77206,32.63813],[-79.96064,32.57249],[-80.14921,32.63813],[-80.2278,32.79679],[-80.14989,32.95573],[-79.96064,33.02165]]]}},"The-George-Washington-University":{type:"Feature",id:"The-George-Washington-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-77.04812,39.12442],[-76.84362,39.05846],[-76.75955,38.89948],[-76.84453,38.74086],[-77.04812,38.67526],[-77.25172,38.74086],[-77.33669,38.89948],[-77.25263,39.05846],[-77.04812,39.12442]]]}},"The-Johns-Hopkins-University-SAIS":{type:"Feature",id:"The-Johns-Hopkins-University-SAIS",properties:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[-77.04027,39.13272],[-76.83574,39.06677],[-76.75167,38.90779],[-76.83665,38.74916],[-77.04027,38.68356],[-77.24389,38.74916],[-77.32888,38.90779],[-77.2448,39.06677],[-77.04027,39.13272]]]}},"The-Pennsylvania-State-University":{type:"Feature",id:"The-Pennsylvania-State-University",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-77.85976,41.02277],[-77.64948,40.9568],[-77.5631,40.79781],[-77.65049,40.6392],[-77.85976,40.57361],[-78.06903,40.6392],[-78.15642,40.79781],[-78.07003,40.9568],[-77.85976,41.02277]]]}},"University-of-California-Davis":{type:"Feature",id:"University-of-California-Davis",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-121.72852,38.77274],[-121.52502,38.70679],[-121.44136,38.54781],[-121.52591,38.38919],[-121.72852,38.32359],[-121.93112,38.38919],[-122.01567,38.54781],[-121.93201,38.70679],[-121.72852,38.77274]]]}},"University-of-Central-Florida":{type:"Feature",id:"University-of-Central-Florida",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-81.38672,28.68361],[-81.20582,28.61771],[-81.13127,28.45879],[-81.20636,28.30011],[-81.38672,28.23445],[-81.56708,28.30011],[-81.64217,28.45879],[-81.56762,28.61771],[-81.38672,28.68361]]]}},"University-of-Chicago":{type:"Feature",id:"University-of-Chicago",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-87.59878,42.0135],[-87.38527,41.94752],[-87.29758,41.78852],[-87.38632,41.62992],[-87.59878,41.56434],[-87.81124,41.62992],[-87.89998,41.78852],[-87.81229,41.94752],[-87.59878,42.0135]]]}},"University-of-Maryland-College-Park":{type:"Feature",id:"University-of-Maryland-College-Park",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-76.94332,39.21148],[-76.73856,39.14552],[-76.65439,38.98654],[-76.73947,38.82792],[-76.94332,38.76232],[-77.14716,38.82792],[-77.23224,38.98654],[-77.14808,39.14552],[-76.94332,39.21148]]]}},"University-of-North-Texas":{type:"Feature",id:"University-of-North-Texas",properties:{area:1767.79},geometry:{type:"Polygon",coordinates:[[[-97.15255,33.43207],[-96.9624,33.36615],[-96.88413,33.2072],[-96.96309,33.04855],[-97.15255,32.98291],[-97.342,33.04855],[-97.42096,33.2072],[-97.34269,33.36615],[-97.15255,33.43207]]]}},"University-of-Northern-Colorado":{type:"Feature",id:"University-of-Northern-Colorado",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-104.69563,40.62872],[-104.4866,40.56275],[-104.40071,40.40377],[-104.48758,40.24515],[-104.69563,40.17956],[-104.90368,40.24515],[-104.99055,40.40377],[-104.90466,40.56275],[-104.69563,40.62872]]]}},"University-of-Oregon":{type:"Feature",id:"University-of-Oregon",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-123.04688,44.249],[-122.82543,44.18301],[-122.73455,44.024],[-122.82661,43.86541],[-123.04688,43.79984],[-123.26714,43.86541],[-123.3592,44.024],[-123.26832,44.18301],[-123.04688,44.249]]]}},"University-of-Redlands":{type:"Feature",id:"University-of-Redlands",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-117.16339,34.28768],[-116.97134,34.22175],[-116.8923,34.06281],[-116.97206,33.90415],[-117.16339,33.83852],[-117.35473,33.90415],[-117.43448,34.06281],[-117.35544,34.22175],[-117.16339,34.28768]]]}},"University-of-South-Carolina":{type:"Feature",id:"University-of-South-Carolina",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-81.03516,34.24082],[-80.84321,34.17489],[-80.76421,34.01594],[-80.84393,33.85729],[-81.03516,33.79166],[-81.22638,33.85729],[-81.3061,34.01594],[-81.2271,34.17489],[-81.03516,34.24082]]]}},"University-of-Southern-California":{type:"Feature",id:"University-of-Southern-California",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-118.30078,34.24082],[-118.10884,34.17489],[-118.02984,34.01594],[-118.10955,33.85729],[-118.30078,33.79166],[-118.49201,33.85729],[-118.57172,34.01594],[-118.49273,34.17489],[-118.30078,34.24082]]]}},"University-of-Vermont":{type:"Feature",id:"University-of-Vermont",properties:{area:1767.81},geometry:{type:"Polygon",coordinates:[[[-73.21289,44.68973],[-72.98977,44.62374],[-72.89821,44.46472],[-72.99098,44.30613],[-73.21289,44.24057],[-73.4348,44.30613],[-73.52757,44.46472],[-73.43601,44.62374],[-73.21289,44.68973]]]}},"University-of-Victoria":{type:"Feature",id:"University-of-Victoria",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-123.31186,48.68804],[-123.07162,48.62201],[-122.97318,48.46297],[-123.07312,48.30441],[-123.31186,48.23888],[-123.55059,48.30441],[-123.65053,48.46297],[-123.55209,48.62201],[-123.31186,48.68804]]]}},"University-of-Wyoming":{type:"Feature",id:"University-of-Wyoming",properties:{area:1767.73},geometry:{type:"Polygon",coordinates:[[[-105.56651,41.53953],[-105.35457,41.47356],[-105.26751,41.31457],[-105.3556,41.15596],[-105.56651,41.09038],[-105.77742,41.15596],[-105.86551,41.31457],[-105.77845,41.47356],[-105.56651,41.53953]]]}},usa_full:{type:"Feature",id:"usa_full",properties:{area:11645277.77},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:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-89.41268,43.30123],[-89.19471,43.23525],[-89.10523,43.07624],[-89.19584,42.91765],[-89.41268,42.85208],[-89.62952,42.91765],[-89.72014,43.07624],[-89.63065,43.23525],[-89.41268,43.30123]]]}},"Vassar-College":{type:"Feature",id:"Vassar-College",properties:{area:1767.75},geometry:{type:"Polygon",coordinates:[[[-73.89515,41.91136],[-73.68198,41.84538],[-73.59443,41.68639],[-73.68303,41.52778],[-73.89515,41.4622],[-74.10727,41.52778],[-74.19587,41.68639],[-74.10832,41.84538],[-73.89515,41.91136]]]}},"Villanova-University":{type:"Feature",id:"Villanova-University",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-75.34361,40.26191],[-75.13571,40.19594],[-75.05028,40.03696],[-75.13667,39.87834],[-75.34361,39.81275],[-75.55054,39.87834],[-75.63693,40.03696],[-75.5515,40.19594],[-75.34361,40.26191]]]}},"West-Virginia-University":{type:"Feature",id:"West-Virginia-University",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-79.98047,39.86412],[-79.77378,39.79816],[-79.68884,39.63917],[-79.77473,39.48055],[-79.98047,39.41496],[-80.18621,39.48055],[-80.2721,39.63917],[-80.18716,39.79816],[-79.98047,39.86412]]]}},"Western-Michigan-University":{type:"Feature",id:"Western-Michigan-University",properties:{area:1767.78},geometry:{type:"Polygon",coordinates:[[[-85.61042,42.5082],[-85.39523,42.44222],[-85.30686,42.28322],[-85.39631,42.12462],[-85.61042,42.05904],[-85.82453,42.12462],[-85.91398,42.28322],[-85.82561,42.44222],[-85.61042,42.5082]]]}},wyoming:{type:"Feature",id:"wyoming",properties:{area:253711.25},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:{area:19340705.94},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:{area:8156753.18},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:{area:3153468.28},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:{area:52750511.11},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:{area:3414619.96},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:{area:1091688.47},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:{area:640271.37},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:{area:11177941.94},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:{area:5794.12},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:{area:325696.77},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:{area:1952325.7},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:{area:3842.38},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:{area:1322895.81},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:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.42614,6.38671],[-75.36003,6.22789],[-75.42624,6.06911],[-75.58594,6.00336],[-75.74563,6.06911],[-75.81185,6.22789],[-75.74573,6.38671],[-75.58594,6.45251]]]}},"Universidad-de-La-Guajira":{type:"Feature",id:"Universidad-de-La-Guajira",properties:{area:1767.77},geometry:{type:"Polygon",coordinates:[[[-72.86133,11.74767],[-72.69917,11.68184],[-72.63213,11.523],[-72.69935,11.36424],[-72.86133,11.29851],[-73.0233,11.36424],[-73.09053,11.523],[-73.02349,11.68184],[-72.86133,11.74767]]]}},"Universidad-de-Los-Andes":{type:"Feature",id:"Universidad-de-Los-Andes",properties:{area:1767.8},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.79005],[-73.93245,4.72426],[-73.8665,4.56544],[-73.93253,4.40665],[-74.0918,4.34089],[-74.25107,4.40665],[-74.31709,4.56544],[-74.25114,4.72426],[-74.0918,4.79005]]]}},"Universidad-de-San-Buenaventura":{type:"Feature",id:"Universidad-de-San-Buenaventura",properties:{area:1767.74},geometry:{type:"Polygon",coordinates:[[[-75.58594,6.45251],[-75.42614,6.38671],[-75.36003,6.22789],[-75.42624,6.06911],[-75.58594,6.00336],[-75.74563,6.06911],[-75.81185,6.22789],[-75.74573,6.38671],[-75.58594,6.45251]]]}},"Universidad-Distrital-Francisco-Jose-de-Caldas":{type:"Feature",id:"Universidad-Distrital-Francisco-Jose-de-Caldas",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-73.93243,4.81186],[-73.86648,4.65304],[-73.93251,4.49426],[-74.0918,4.4285],[-74.25109,4.49426],[-74.31712,4.65304],[-74.25116,4.81186],[-74.0918,4.87766]]]}},"Universidad-Nacional-de-Colombia":{type:"Feature",id:"Universidad-Nacional-de-Colombia",properties:{area:1767.76},geometry:{type:"Polygon",coordinates:[[[-74.0918,4.87766],[-73.93243,4.81186],[-73.86648,4.65304],[-73.93251,4.49426],[-74.0918,4.4285],[-74.25109,4.49426],[-74.31712,4.65304],[-74.25116,4.81186],[-74.0918,4.87766]]]}},ecuador:{type:"Feature",id:"ecuador",properties:{area:309097.28},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:{area:403607.46},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:{area:1638173.5},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:{area:211478.1},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:{area:1133785.95},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],[-71.1,12.7],[-68,11.6],[-67.9,12.3],[-64.5,12.3],[-61.7,11],[-62,10],[-61.6,10],[-59.49,8.64],[-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.3,15.7],[-63.6,15.4],[-63.9,15.7],[-63.6,15.9],[-63.3,15.7]]]]}},latam:{type:"Feature",id:"latam",properties:{area:61582904.13},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]]]}}};
24782
24783         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"}],order:3},"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"}],order:3},"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"}],order:-3},"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"},"map-kibera":{id:"map-kibera",featureId:"nairobi",type:"group",name:"Map Kibera Trust",countryCodes:["ke"],languageCodes:["en"],description:"Map Kibera is a registered organization working in Kenya",url:"https://mapkibera.org/",extendedDescription:"Map Kibera Trust’s mission is to increase influence and representation of marginalized communities through the creative use of digital tools for action.",contacts:[{name:"Map Kibera",email:"contact@mapkibera.org"}],order:4},"osm-kenya":{id:"osm-kenya",featureId:"kenya",type:"twitter",name:"OSM Kenya",countryCodes:["ke"],languageCodes:["en"],description:"OSM Kenya is a community of OSM contributors and users",url:"https://twitter.com/OSMKenya",extendedDescription:"OSM is a local community for individuals interested in OpenStreetMap including organizations, developers, and YouthMappers chapters in the country.",contacts:[{name:"OSM Kenya",email:"osmkenya@gmail.com"}],order:4},"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"}],order:3},"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"}],order:-3},"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-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/"},"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/"},"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"}],order:3},"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"}],events:[{id:"sotmasia2019",i18n:true,name:"State of the Map Asia 2019",description:"Join the 2019 OpenStreetMap region-wide event at State of the Map Asia in Dhaka",where:"Krishibid Institution Bangladesh (KIB), Dhaka, Bangladesh",when:"2019-11-01",url:"http://stateofthemap.asia/"}],order:3},"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:"Khulna University YouthMappers",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"}],order:3},"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"}],order:-2},"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"}],order:-3},"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"}],order:3},"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"}],order:-3},"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"}],order:3},"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"}],order:-2},"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"}],order:3},"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"}],order:-3},"OSM-Japan-telegram":{id:"OSM-Japan-telegram",featureId:"japan",type:"telegram",name:"OpenStreetMap Japan Telegram",countryCodes:["jp"],languageCodes:["ja"],description:"A Telegram group for the OSM Japan community: {url}",url:"https://t.me/osmjapan",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}],order:5},"OSM-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:"osm",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-Korea-mailinglist":{id:"OSM-Korea-mailinglist",featureId:"korea",type:"mailinglist",name:"OpenStreetMap Korea Mailinglist",countryCodes:["kp","kr"],languageCodes:["ko","en"],description:"Talk-ko is an Official Mailinglist for the Communities to dicuss matters about Korea",url:"https://lists.openstreetmap.org/listinfo/talk-ko",contacts:[{name:"Talk-ko-owner",email:"talk-ko-owner@openstreetmap.org"}],order:-3},"OSM-Korea-telegram":{id:"OSM-Korea-telegram",featureId:"korea",type:"telegram",countryCodes:["kp","kr"],languageCodes:["ko","en"],name:"OSM Korea Telegram",description:"Unofficial Group for OpenStreetMap contributors, communities, and users in Korea to share and discuss.",url:"https://t.me/osmKorea",contacts:[{name:"Yongmin Hong",email:"revi@pobox.com"},{name:"Max N",email:"abonnements@revolwear.com"}]},"OSM-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"}],order:3},"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"}],order:-2},"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"}],order:3},"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"}],order:3},"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"}],order:3},"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"}],order:-3},"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"}],order:3},"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"}],order:-3},"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"}],order:4},"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"}],order:-2},"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-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"}],order:3},"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"}],order:3},"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"}],order:-3},"OSM-TW-telegram":{id:"OSM-TW-telegram",featureId:"taiwan",type:"telegram",name:"OpenStreetMap Taiwan Telegram",countryCodes:["tw"],languageCodes:["zh-tw"],description:"A Telegram group for the OSM Taiwan community: {url}",url:"https://t.me/OSMTaiwan",contacts:[{name:"Nobody 沒有人 (Public mail)",email:"hiboard@openstreetmap.tw"}],order:5},"OSM-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"}],order:5},"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"}],order:3},"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"}],order:-2},"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"}],order:-2},"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"}],order:-2},"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"}],order:-3},"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"}],order:5},"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:"osm",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-chapter":{id:"be-chapter",featureId:"belgium",type:"osm-lc",name:"OpenStreetMap Belgium Local Chapter",countryCodes:["be"],languageCodes:["en","nl","fr","de"],description:"We help grow and improve OpenStreetMap in Belgium.",extendedDescription:"If you want to help to improve and grow the mapping community in Belgium, to make even more people crazy about mapping, OpenStreetMap Belgium is the right place for you!",url:"https://openstreetmap.be/",contacts:[{name:"BE community",email:"community@osm.be"}],order:1},"be-facebook":{id:"be-facebook",featureId:"belgium",type:"facebook",name:"OpenStreetMap BE Facebook 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"}],order:0},"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"}],order:3},"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"}],order:2},"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"}],order:4},"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"}],order:6},"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"}],order:5},"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"}],order:4},"OSM-BiH-telegram":{id:"OSM-BiH-telegram",featureId:"bosnia_herzegovina",type:"telegram",name:"OpenStreetMap BiH Telegram",countryCodes:["ba"],description:"A Telegram group for the OSM Bosnia and Herzegovina community: {url}",url:"https://t.me/osmbih",order:5},"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"}],order:3},"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"}],order:-4},"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"}],order:-3},"czech-community":{id:"czech-community",featureId:"czechia",type:"osm",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"}],order:3},"OSM-CZ-telegram":{id:"OSM-CZ-telegram",featureId:"czechia",type:"telegram",name:"OpenStreetMap CZ Telegram",countryCodes:["cz"],languageCodes:["cs","sk","en"],description:"A Telegram group for the OSM Czech community: {url}",url:"https://t.me/OSM_cz",order:5},"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"}],order:-3},"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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"fr-chapter":{id:"fr-chapter",featureId:"france",type:"osm-lc",name:"OpenStreetMap France Local Chapter",countryCodes:["fr"],languageCodes:["fr"],description:"We help grow and improve OpenStreetMap in France.",url:"https://www.openstreetmap.fr/",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:1},"fr-facebook":{id:"fr-facebook",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"}],order:3},"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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"fr-telegram":{id:"fr-telegram",featureId:"france",type:"telegram",name:"OpenStreetMap France on Telegram",countryCodes:["fr"],description:"A Telegram group for the OSM France community: {url}",url:"https://t.me/osmfr",contacts:[{name:"OpenStreetMap France",email:"contact@openstreetmap.fr"}],order:5},"fr-twitter":{id:"fr-twitter",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"}],order:-3},"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"}],order:5},"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"}],order:-2},"de-hamburg-telegram":{id:"de-hamburg-telegram",featureId:"de-hamburg",type:"telegram",name:"OSM Hamburg on Telegram",countryCodes:["de"],languageCodes:["de"],description:"OpenStreetMap Hamburg Telegram chat: {url}",url:"https://t.me/osm_de_hh"},"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"}],order:-4},"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"}],order:-3},"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"}],order:-3},"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:"osm-lc",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"}],order:3},"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"}],order:-2},"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"}],order:5},"is-chapter":{id:"is-chapter",featureId:"iceland",type:"osm-lc",name:"OpenStreetMap Iceland Local Chapter",countryCodes:["is"],languageCodes:["is","en"],description:"We help grow and improve OpenStreetMap in Iceland.",url:"https://www.hlidskjalf.is/",contacts:[{name:"Talk-is-owner",email:"talk-is-owner@openstreetmap.org"}],order:1},"is-facebook":{id:"is-facebook",type:"facebook",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"}],order:3},"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"}],order:-3},"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"}]},"ireland-chapter":{id:"ireland-chapter",featureId:"ireland",type:"osm-lc",name:"OpenStreetMap Ireland Local Chapter",countryCodes:["gb","ie"],languageCodes:["en"],description:"We help grow and improve OpenStreetMap in Ireland.",extendedDescription:"OpenStreetMap Ireland provides an advocate voice for the OpenStreetMap project on the island of Ireland, in addition to interacting with other open initiatives.",url:"https://www.openstreetmap.ie/",order:1},"ireland-facebook":{id:"ireland-facebook",featureId:"ireland",type:"facebook",name:"OpenStreetMap Ireland Facebook group",countryCodes:["gb","ie"],languageCodes:["en"],description:"OpenStreetMap Ireland Facebook page",url:"https://www.facebook.com/groups/OpenStreetMapIreland",order:3},"ireland-irc":{id:"ireland-irc",featureId:"ireland",type:"irc",name:"OpenStreetMap Ireland IRC",countryCodes:["gb","ie"],languageCodes:["en"],description:"Join #osm-ie on irc.oftc.net (port 6667)",extendedDescription:"Join #osm-ie on irc.oftc.net (port 6667), please be patient and wait for a few minutes if you ask a question",url:"https://webchat.oftc.net/?channels=osm-ie",order:-1},"ireland-mailinglist":{id:"ireland-mailinglist",featureId:"ireland",type:"mailinglist",name:"Talk-ie Mailing List",countryCodes:["gb","ie"],languageCodes:["en"],description:"Talk-ie is the mailing list for the Irish OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-ie",order:2},"ireland-telegram":{id:"ireland-telegram",type:"telegram",featureId:"ireland",countryCodes:["gb","ie"],languageCodes:["en"],name:"OSM Ireland on Telegram",description:"OpenStreetMap Ireland Telegram chat",url:"https://t.me/joinchat/BDLI7w9jCWm7Bwm2T06jwQ?fbclid=IwAR1ltY85Y7_4_CZhhwLOsLLppzis1MOVRRy897epT99JuZ9ZHZF8wpDRIfk",order:4},"ireland-twitter":{id:"ireland-twitter",featureId:"ireland",type:"twitter",name:"OpenStreetMap IE on Twitter",countryCodes:["gb","ie"],languageCodes:["en"],description:"OpenStreetMap IE on Twitter: {url}",url:"https://twitter.com/osm_ie",order:5},"it-chapter":{id:"it-chapter",featureId:"italy",type:"osm-lc",name:"OpenStreetMap Italy Local Chapter",countryCodes:["it"],languageCodes:["it"],description:"We help grow and improve OpenStreetMap in Italy.",url:"https://www.wikimedia.it/",contacts:[{name:"Simone Cortesi",email:"simone@cortesi.com"},{name:"Stefano",email:"sabas88@gmail.com"},{name:"Alessandro Palmas",email:"alessandro.palmas@wikimedia.it"}],order:1},"it-facebook":{id:"it-facebook",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"}],order:3},"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"}],order:-4},"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"}],order:-3},"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"}],order:4},"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"}],order:2},"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"}],order:-3},"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"}],order:-3},"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"}],order:-3},"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/"},"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"}],order:-3},"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"},"nl-forum":{id:"nl-forum",type:"forum",featureId:"netherlands",countryCodes:["nl"],languageCodes:["nl"],name:"Netherlands OpenStreetMap forum",description:"OpenStreetMap Netherlands web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=12",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:3},"nl-telegram":{id:"nl-telegram",type:"telegram",featureId:"netherlands",countryCodes:["nl"],languageCodes:["nl"],name:"Netherlands OpenStreetMap Telegram",description:"A Telegram group for the OSM Netherlands community: {url}",url:"https://t.me/osm_nl",contacts:[{name:"Peter Elderson",email:"pelderson@gmail.com"}],order:5},"no-forum":{id:"no-forum",type:"forum",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"}],order:-2},"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",order:-4},"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",order:-3},"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"}],order:3},"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"}],order:-2},"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"}],order:-3},"pt-telegram":{id:"pt-telegram",featureId:"portugal_full",type:"telegram",name:"OpenStreetMap Portugal on 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"}],order:-2},"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"}],order:-3},"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"}]},"Galicia-Telegram":{id:"Galicia-Telegram",featureId:"galicia",type:"telegram",languageCodes:["gl","es"],name:"OpenStreetMap Galicia Telegram",description:"OpenStreetMap Telegram for Galicia",url:"https://t.me/joinchat/AAHZsRBs-mY3hrquk2kpig"},"Galicia-Twitter":{id:"Galicia-Twitter",featureId:"galicia",type:"twitter",languageCodes:["gl","es"],name:"OpenStreetMap Galicia Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/osmgalicia"},"galicia-wiki":{id:"galicia-wiki",featureId:"galicia",type:"wiki",name:"OpenStreetMap Wikiproject Galicia",description:"Everything you need to know about mapping in Galicia: {url}",url:"https://wiki.openstreetmap.org/wiki/Gl:P%C3%A1xina_principal"},"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"}],order:-3},"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:"osm",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"}],order:3},"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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"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"}]},"ch-irc":{id:"ch-irc",featureId:"switzerland",type:"irc",name:"OpenStreetMap Switzerland IRC",countryCodes:["ch"],languageCodes:["de","fr","en","it"],description:"Join #osm-ch on irc.oftc.net (port 6667)",url:"https://webchat.oftc.net/?channels=osm-ch",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}],order:-2},"ch-mailinglist":{id:"ch-mailinglist",featureId:"switzerland",type:"mailinglist",name:"Openstreetmap Schweiz/Suisse/Svizzera/Svizra Mailing List",countryCodes:["ch"],description:"Mailing list for Switzerland",url:"http://lists.openstreetmap.ch/mailman/listinfo/talk-ch",order:1},"ch-twitter":{id:"ch-twitter",featureId:"switzerland",type:"twitter",name:"OpenStreetMap Switzerland Twitter",countryCodes:["ch"],languageCodes:["de","en","fr","it"],description:"Follow us on Twitter: {url}",url:"https://twitter.com/SwissOSM",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"osm-ch":{id:"osm-ch",featureId:"switzerland",type:"osm-lc",countryCodes:["ch"],languageCodes:["de","en","fr","it"],name:"OpenStreetMap Switzerland",description:"The platform for information on OpenStreetMap in Switzerland",url:"https://osm.ch/",contacts:[{name:"Swiss OpenStreetMap Association",email:"board@sosm.ch"}]},"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"},"ua-facebook":{id:"ua-facebook",featureId:"ukraine",type:"facebook",countryCodes:["ua"],languageCodes:["ua"],name:"OpenStreetMap Ukraine Facebook group",description:"Join the OpenStreetMap Ukraine community on Facebook",url:"https://www.facebook.com/openstreetmapua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:3},"ua-forum":{id:"ua-forum",featureId:"ukraine",type:"forum",countryCodes:["ua"],languageCodes:["ua","ru"],name:"OpenStreetMap Ukraine Forum",description:"Forum of OpenStreetMap community in Ukraine",url:"https://forum.openstreetmap.org/viewforum.php?id=40",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:2},"ua-github":{id:"ua-github",featureId:"ukraine",type:"github",countryCodes:["ua"],languageCodes:["ua","en"],name:"OpenStreetMap Ukraine on GitHub",description:"OpenStreetMap Ukraine GitHub",url:"https://github.com/osm-ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}]},"ua-slack":{id:"ua-slack",featureId:"ukraine",type:"slack",countryCodes:["ua"],languageCodes:["ua","ru"],name:"OpenStreetMap Ukraine Slack",description:"Join the OpenStreetMap Ukraine community on Slack",url:"https://osmukraine.slack.com/",signupUrl:"http://bit.ly/SlackOsmUa",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:5},"ua-telegram":{id:"ua-telegram",featureId:"ukraine",type:"telegram",countryCodes:["ua"],languageCodes:["ua","ru","en"],name:"@osmUA on Telegram",description:"OpenStreetMap Ukraine Telegram chat",url:"https://t.me/osmUA",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:0},"ua-twitter":{id:"ua-twitter",featureId:"ukraine",type:"twitter",countryCodes:["ua"],languageCodes:["ua"],name:"OpenStreetMap UA Twitter",description:"OpenStreetMap Ukraine on Twitter: {url}",url:"https://twitter.com/osm_ua",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:1},"ua-osm":{id:"ua-osm",featureId:"ukraine",type:"osm",countryCodes:["ua"],languageCodes:["ua"],name:"OpenStreetMap Website Ukraine",description:"OpenStreetMap website in Ukraine",url:"https://openstreetmap.org.ua/",contacts:[{name:"Andrii Holovin",email:"andygol@ua.fm"}],order:4},"scotland-twitter":{id:"scotland-twitter",featureId:"scotland",type:"twitter",name:"OpenStreetMap Alba on Twitter",countryCodes:["gb"],languageCodes:["en"],description:"OpenStreetMap Alba on Twitter: {url}",url:"https://twitter.com/OSMScotland",order:4},"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"}],order:5},"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"}],order:2},"uk-localchapter":{id:"uk-localchapter",featureId:"united_kingdom",type:"osm-lc",countryCodes:["gb"],languageCodes:["en"],name:"OpenStreetMap UK",description:"The official Local Chapter for the UK (including Northern Ireland).",extendedDescription:"We support OpenStreetMap by holding events, providing community resources, building partnerships, and by spreading the word. Join OpenStreetMap UK here: {signupUrl}",signupUrl:"https://osmuk.org/become-member/",url:"https://osmuk.org/",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:3},"uk-london-twitter":{id:"uk-london-twitter",featureId:"london_uk",type:"twitter",name:"OpenStreetMap London on Twitter",countryCodes:["gb"],languageCodes:["en"],description:"OpenStreetMap London on Twitter: {url}",url:"https://twitter.com/OSMLondon",contacts:[{name:"Harry Wood",email:"mail@harrywood.co.uk"}],order:4},"gb-mailinglist":{id:"gb-mailinglist",featureId:"united_kingdom",type:"mailinglist",name:"Talk-gb Mailing List",countryCodes:["gb"],languageCodes:["en"],description:"Talk-gb is the main communication forum list for the UK (including Northern Ireland) OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-gb",contacts:[{name:"UK mailing list",email:"talk-gb-owner@lists.openstreetmap.org"}],order:4},"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"}],order:5},"uk-twitter":{id:"uk-twitter",featureId:"united_kingdom",type:"twitter",name:"OpenStreetMap UK on Twitter",countryCodes:["gb"],languageCodes:["en"],description:"OpenStreetMap UK on Twitter: {url}",url:"https://twitter.com/osmuk",contacts:[{name:"OpenStreetMap UK",email:"board@osmuk.org"}],order:2},"ym-Queen-Mary-University-of-London":{id:"ym-Queen-Mary-University-of-London",type:"youthmappers",name:"Queen Mary YouthMappers",description:"YouthMappers chapter at 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/"},"ym-University-of-Exeter":{id:"ym-University-of-Exeter",type:"youthmappers",name:"University of Exeter British Red Cross Missing Maps",description:"YouthMappers chapter at 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":{id:"ym-University-of-Warwick",type:"youthmappers",name:"University of Warwick Resilience Mapping Society",description:"YouthMappers chapter at 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"},"il-telegram":{id:"il-telegram",featureId:"israel",type:"telegram",name:"OSM Israel on Telegram",countryCodes:["il"],description:"A Telegram group for the OpenStreetMap community in Israel: {url}",url:"https://t.me/OSM_Israel",order:5},"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"},"sa-telegram":{id:"sa-telegram",featureId:"saudi_arabia",type:"telegram",name:"OSM Saudi Arabia on Telegram",countryCodes:["sa"],description:"A Telegram group for the OpenStreetMap community in Saudi Arabia: {url}",url:"https://t.me/OSMSaudi",order:5},"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"}],order:4},"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"}],order:5},"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"}],order:3},"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"}],order:-3},"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"}],order:5},"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"}],order:3},"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"}],order:4},"Dallas-Fort-Worth-OSM":{id:"Dallas-Fort-Worth-OSM",featureId:"dfw_metro",type:"osm",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"}],order:5},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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:-3},"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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:3},"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"}],order:5},"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"}],order:-2},"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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:4},"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"}]},"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"}],order:5},"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"}],order:5},"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"}],order:5},"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"}],order:3},"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"}],order:5},"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"}],order:0},"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"}],order:4},"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"}],order:3},"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"}],order:-3},"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"}],order:3},"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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"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"}],order:-3},"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"}],order:-3},"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"}]},"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"}],order:3},"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"}],order:-3},"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"}],order:5},"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"}],order:3},"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"}],order:-3},"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"}],order:3},"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"}],order:-3},"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:"osm",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"}],order:-2},"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"}],order:-4},"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"}],order:-3},"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"}],order:-2},"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"}],order:-3},"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"}],order:3},"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:"osm",languageCodes:["es","pt"],name:"OpenStreetMap Latam",description:"Supporting OpenStreetMap in Latin America",url:"https://osmlatam.org/",contacts:[{name:"OSM LATAM",email:"info@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"}],order:3},"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"}],order:-2},"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"}],order:-4},"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"}],order:2},"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:"osm",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"}]}};
24784
24785         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 Feb 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery2019mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-02-01T00:00:00.000Z",startDate:"2019-02-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[149.04053,-35.09056],[149.20498,-35.08747],[149.20618,-35.1237],[149.24944,-35.12314],[149.2515,-35.19499],[149.29596,-35.19429],[149.29716,-35.23861],[149.34111,-35.23847],[149.34196,-35.27435],[149.42986,-35.27253],[149.43226,-35.36288],[149.42127,-35.36316],[149.42179,-35.37239],[149.3224,-35.37435],[149.3224,-35.36498],[149.30042,-35.36512],[149.30094,-35.37435],[149.28995,-35.37449],[149.29201,-35.4376],[149.15932,-35.44039],[149.16121,-35.51197],[149.03984,-35.51448],[149.03984,-35.47829],[148.99504,-35.4794],[148.99315,-35.37995],[149.00396,-35.37981],[149.0007,-35.26272],[148.95641,-35.26286],[148.95435,-35.16399],[148.99864,-35.16342],[148.99796,-35.12721],[149.04156,-35.12665],[149.04053,-35.09056]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government",icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"ACT201906",name:"ACTmapi Imagery Jun 2019",type:"wms",template:"https://data.actmapi.act.gov.au/arcgis/rest/services/actmapi/imagery201906mga/ImageServer/exportImage?f=image&format=jpeg&imageSR=3857&bboxSR=3857&bbox={bbox}&size={width},{height}&foo={proj}",projection:"EPSG:3857",endDate:"2019-06-01T00:00:00.000Z",startDate:"2019-06-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[148.97478,-35.10074],[149.22712,-35.09632],[149.22811,-35.13237],[149.24983,-35.13198],[149.25025,-35.14107],[149.27223,-35.14062],[149.27416,-35.21263],[149.31806,-35.21184],[149.31905,-35.248],[149.40694,-35.24632],[149.40805,-35.28227],[149.45191,-35.28129],[149.45509,-35.38044],[149.41089,-35.38135],[149.41166,-35.39927],[149.40042,-35.39955],[149.40093,-35.41752],[149.31287,-35.41934],[149.3139,-35.44634],[149.2697,-35.44718],[149.2709,-35.48325],[149.22678,-35.48402],[149.22772,-35.52007],[149.18378,-35.52084],[149.18464,-35.55709],[149.01855,-35.55974],[149.01701,-35.48807],[148.97324,-35.48863],[148.97203,-35.44333],[148.98319,-35.44333],[148.9807,-35.34419],[148.93676,-35.34461],[148.93187,-35.13753],[148.97581,-35.1369],[148.97478,-35.10074]]],terms_url:"http://actmapi.act.gov.au/terms.html",terms_text:"Aerial Imagery from ACTMapi ©ACT Government and Spookfish Australia Pty Ltd",best:true,icon:"http://actmapi.act.gov.au/img/apple-touch-icon.png"},{id:"AGRI-black_and_white-2.5m",name:"AGRI black-and-white 2.5m",type:"tms",template:"https://{switch:a,b,c}.agri.openstreetmap.org/layer/au_ga_agri/{zoom}/{x}/{y}.png",endDate:"2011-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[112.28778,-28.78459],[112.71488,-31.13894],[114.11263,-34.17829],[113.60788,-37.39012],[117.17992,-37.45179],[119.31538,-37.42096],[121.72262,-36.70839],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.7274],[130.07031,-33.24166],[130.10913,-33.8887],[131.00214,-34.04971],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.36829],[142.3783,-40.64702],[142.49478,-42.07487],[144.009,-44.06013],[147.23161,-44.03222],[149.05645,-42.53431],[149.52237,-40.99959],[149.9494,-40.85292],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.66771],[156.20052,-20.10109],[156.62761,-17.41763],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.25677],[152.27905,-13.4135],[151.3472,-12.39177],[149.48354,-12.05024],[146.9598,-9.99241],[135.9719,-9.99241],[130.3032,-10.33636],[128.09016,-12.16414],[125.91588,-12.31591],[124.3239,-11.86033],[122.03323,-11.97429],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.59603],[112.28778,-28.78459]]],terms_url:"https://data.gov.au/dataset/agri-the-australian-geographic-reference-image",terms_text:"AGRI, Geoscience Australia"},{id:"AIV_DHMV_II_HILL_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, multidirectionale hillshade 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_HILL_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AIV_DHMV_II_SVF_25cm",name:"AIV Digitaal Hoogtemodel Vlaanderen II, Skyview factor 0,25 m",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/dhmv/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DHMV_II_SVF_25cm&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV10cm",name:"AIV Flanders 2013-2015 aerial imagery 10cm",type:"wms",template:"https://geoservices.informatievlaanderen.be/raadpleegdiensten/OGW/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OGWRGB13_15VL&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[5.98494,50.70723],[5.98494,50.7672],[5.91079,50.82275],[5.75561,50.83533],[5.75423,50.86264],[5.8332,50.93323],[5.85517,51.02661],[5.90941,51.07754],[5.91216,51.18225],[5.87851,51.20807],[5.77414,51.23689],[5.68419,51.24075],[5.62308,51.26998],[5.62308,51.29789],[5.54,51.34724],[5.4473,51.34853],[5.39855,51.32107],[5.31203,51.32322],[5.26671,51.36182],[5.19942,51.37254],[5.18294,51.39611],[5.15891,51.4924],[5.08338,51.53086],[5.03257,51.53983],[4.95566,51.50522],[4.90142,51.50565],[4.83825,51.54367],[4.77096,51.55862],[4.7119,51.54709],[4.64049,51.49667],[4.6144,51.4971],[4.56565,51.53171],[4.48256,51.53043],[4.42626,51.52189],[4.3006,51.46974],[4.29511,51.42566],[4.18113,51.42437],[4.13718,51.39525],[4.13856,51.35067],[4.05204,51.30047],[3.93325,51.27298],[3.86527,51.27084],[3.86321,51.29016],[3.76296,51.32407],[3.59336,51.35925],[3.47732,51.33137],[3.42582,51.39739],[3.23562,51.35153],[3.226,51.36568],[3.17794,51.36182],[3.16009,51.33223],[3.06258,51.30219],[2.75084,51.1702],[2.47001,51.07452],[2.49267,50.99378],[2.53112,50.95573],[2.50915,50.91159],[2.53043,50.82145],[2.5991,50.76416],[2.66501,50.76459],[2.77007,50.66677],[2.8971,50.65894],[2.99186,50.72549],[3.11339,50.72636],[3.23699,50.70592],[3.36265,50.6585],[3.47114,50.70201],[3.63936,50.66721],[3.69842,50.68156],[3.72794,50.71245],[3.81858,50.68418],[3.87488,50.64152],[4.09255,50.64283],[4.15023,50.66329],[4.20653,50.64413],[4.31365,50.64283],[4.45235,50.68766],[4.53475,50.67808],[4.61303,50.69549],[4.67689,50.69592],[4.72701,50.73201],[4.78057,50.73201],[4.79979,50.71288],[4.86228,50.71288],[4.88563,50.69549],[4.96116,50.69549],[5.03119,50.65763],[5.10741,50.65023],[5.2008,50.64892],[5.23581,50.66546],[5.32508,50.6659],[5.36696,50.682],[5.42121,50.66416],[5.52215,50.6746],[5.6224,50.72418],[5.67527,50.69853],[5.73981,50.69723],[5.77277,50.67199],[5.8126,50.66024],[5.90804,50.65981],[5.98494,50.70723]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIVFlandersGRB",name:"AIV Flanders GRB",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.40434,50.78177],[4.45538,50.79328],[4.40268,50.8961],[4.331,50.90094],[4.27142,50.82002],[4.30648,50.81244],[4.36348,50.77251],[4.40434,50.78177],[4.43104,50.73831],[4.31859,50.72022],[4.29031,50.69402],[4.14853,50.72834],[3.95877,50.68947],[3.9097,50.69245],[3.89113,50.74333],[3.77568,50.74789],[3.75857,50.78045],[3.67752,50.77062],[3.64047,50.72242],[3.54139,50.73377],[3.54062,50.76307],[3.46005,50.76556],[3.3522,50.70614],[3.30562,50.75466],[3.17839,50.75609],[3.15329,50.78564],[3.02008,50.77312],[2.99943,50.81035],[2.91648,50.75356],[2.85476,50.75745],[2.86521,50.70565],[2.78473,50.7369],[2.713,50.81534],[2.63518,50.8129],[2.59909,50.85306],[2.59031,50.91893],[2.63262,50.94575],[2.57372,51.00842],[2.54165,51.09345],[3.15582,51.32714],[3.18307,51.37128],[3.23443,51.34669],[3.36356,51.37228],[3.38101,51.27446],[3.44201,51.24313],[3.52759,51.24604],[3.51511,51.28753],[3.58984,51.30577],[3.7783,51.26235],[3.79088,51.21429],[3.92412,51.21938],[4.16613,51.2929],[4.26163,51.37647],[4.42065,51.36473],[4.39108,51.45149],[4.54747,51.48571],[4.53541,51.42303],[4.64953,51.42758],[4.76359,51.5088],[4.84188,51.48074],[4.8383,51.42174],[4.89366,51.41698],[4.92785,51.39544],[5.02894,51.48789],[5.08018,51.46948],[5.10202,51.42892],[5.07117,51.3935],[5.13109,51.35137],[5.13448,51.31547],[5.20031,51.32172],[5.24189,51.30534],[5.23036,51.26436],[5.34828,51.27492],[5.41741,51.26229],[5.4863,51.30197],[5.5556,51.26986],[5.56045,51.22233],[5.76027,51.18505],[5.85578,51.14463],[5.75909,51.03588],[5.72665,50.91307],[5.64522,50.8372],[5.68732,50.804],[5.47863,50.72352],[5.41196,50.72368],[5.38908,50.74775],[5.30912,50.71802],[5.16984,50.72257],[5.16508,50.6957],[5.05642,50.71567],[5.00339,50.76594],[4.92545,50.74275],[4.90869,50.76968],[4.83106,50.77028],[4.76014,50.80544],[4.64309,50.79755],[4.65486,50.7552],[4.62021,50.74348],[4.59727,50.76359],[4.52399,50.72724],[4.49455,50.75679],[4.43104,50.73831],[4.40434,50.78177]],[[5.67393,50.75373],[5.88438,50.70114],[5.94172,50.76524],[5.76662,50.78761],[5.67393,50.75373]],[[4.91171,51.43492],[4.93711,51.42614],[4.95891,51.45471],[4.92801,51.46049],[4.91171,51.43492]]],terms_text:"© agentschap Informatie Vlaanderen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"AGIV",name:"AIV Flanders most recent aerial imagery",type:"tms",template:"https://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,21],polygon:[[[4.7737,50.79368],[4.8379,50.75916],[4.92511,50.73483],[4.98862,50.76264],[5.036,50.73527],[5.0645,50.69875],[5.1644,50.69005],[5.19393,50.71179],[5.3086,50.71245],[5.36422,50.74396],[5.43391,50.70766],[5.54378,50.74396],[5.61141,50.73527],[5.71166,50.73505],[5.77105,50.74092],[5.81946,50.70484],[5.89568,50.70614],[5.9204,50.72831],[5.91971,50.74504],[5.89843,50.77675],[5.81569,50.76351],[5.77517,50.79216],[5.69552,50.79737],[5.69072,50.82319],[5.66325,50.82904],[5.65467,50.86481],[5.72368,50.9012],[5.77174,50.95443],[5.75114,50.97368],[5.78273,51.00048],[5.78032,51.0523],[5.80848,51.05338],[5.80951,51.07668],[5.84315,51.09372],[5.84418,51.1101],[5.82599,51.11851],[5.86959,51.14953],[5.8277,51.17365],[5.792,51.16891],[5.7738,51.19344],[5.666,51.1928],[5.64059,51.21065],[5.5709,51.22829],[5.56231,51.27535],[5.49811,51.30605],[5.47099,51.30219],[5.45794,51.2893],[5.43048,51.28823],[5.41434,51.27363],[5.36593,51.282],[5.33641,51.28265],[5.32577,51.26718],[5.24337,51.27406],[5.24989,51.31335],[5.20972,51.32794],[5.14174,51.31914],[5.14209,51.35367],[5.08647,51.39482],[5.11565,51.43615],[5.08853,51.47508],[5.05214,51.47636],[5.04561,51.4939],[5.02364,51.4939],[5.01609,51.48663],[4.82966,51.48663],[4.83001,51.50009],[4.76855,51.51099],[4.74727,51.50394],[4.658,51.4492],[4.65663,51.43144],[4.53956,51.43379],[4.55466,51.48171],[4.5296,51.48748],[4.46368,51.48235],[4.37167,51.45562],[4.37751,51.40553],[4.4139,51.37511],[4.39776,51.36118],[4.34798,51.36675],[4.34627,51.38497],[4.20344,51.38111],[4.2213,51.3511],[4.15641,51.29832],[4.05101,51.25193],[4.00638,51.25279],[3.95144,51.22205],[3.88484,51.22936],[3.81926,51.21797],[3.80038,51.22872],[3.80107,51.26074],[3.74442,51.28007],[3.63593,51.29746],[3.58615,51.31378],[3.5065,51.28308],[3.51371,51.25021],[3.43921,51.25064],[3.39766,51.27513],[3.37329,51.31678],[3.39114,51.34274],[3.3623,51.37961],[3.24283,51.35474],[3.20266,51.37039],[3.15631,51.35196],[3.14223,51.33051],[2.53318,51.09092],[2.56476,50.9968],[2.61832,50.9527],[2.57781,50.91852],[2.5936,50.88431],[2.58948,50.85051],[2.6245,50.80757],[2.71033,50.8054],[2.78449,50.71853],[2.87375,50.69983],[2.86483,50.74765],[2.92525,50.75156],[2.97263,50.77024],[2.97332,50.79889],[3.00078,50.79759],[3.01383,50.76676],[3.09863,50.76611],[3.13537,50.78196],[3.16832,50.75004],[3.30428,50.74613],[3.31561,50.71484],[3.3678,50.70179],[3.44848,50.75091],[3.53293,50.75156],[3.53328,50.72549],[3.63902,50.7131],[3.69086,50.7672],[3.75163,50.76177],[3.7712,50.73874],[3.87729,50.73983],[3.87969,50.70418],[3.9202,50.68352],[3.99951,50.682],[4.06749,50.68961],[4.16018,50.72049],[4.17632,50.70331],[4.24739,50.68222],[4.31708,50.69418],[4.31846,50.70962],[4.38403,50.71027],[4.38437,50.72353],[4.47226,50.74743],[4.52617,50.71853],[4.55226,50.73766],[4.64908,50.73722],[4.6532,50.78717],[4.72426,50.78218],[4.73731,50.79585],[4.7737,50.79368]]],terms_text:"© agentschap Informatie Vlaanderen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/BE_GRB_Flanders_TMS.png"},{id:"alagoas_litoral",name:"Alagoas Litoral 2006",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Ortofotos%202006&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.52384,-9.48089],[-35.5236,-9.44515],[-35.51572,-9.44518],[-35.51584,-9.44229],[-35.50542,-9.44238],[-35.50518,-9.43064],[-35.49334,-9.43073],[-35.49304,-9.3982],[-35.4893,-9.39817],[-35.48921,-9.38628],[-35.4854,-9.38634],[-35.48525,-9.37809],[-35.48127,-9.37812],[-35.48114,-9.36987],[-35.47698,-9.36996],[-35.47686,-9.36385],[-35.47459,-9.36388],[-35.47447,-9.36153],[-35.47212,-9.36141],[-35.47206,-9.35917],[-35.46976,-9.3592],[-35.46967,-9.35682],[-35.46653,-9.35676],[-35.46641,-9.35289],[-35.46387,-9.35277],[-35.46387,-9.35119],[-35.44135,-9.35131],[-35.44125,-9.34541],[-35.43177,-9.34538],[-35.43171,-9.33602],[-35.39463,-9.33632],[-35.39442,-9.30125],[-35.38165,-9.30143],[-35.38147,-9.28638],[-35.37799,-9.28626],[-35.37796,-9.2811],[-35.36942,-9.28122],[-35.36921,-9.27261],[-35.35966,-9.27276],[-35.35969,-9.26465],[-35.35051,-9.26474],[-35.35036,-9.25562],[-35.34115,-9.25565],[-35.34118,-9.24501],[-35.31775,-9.24519],[-35.3176,-9.22567],[-35.30292,-9.22579],[-35.30283,-9.2113],[-35.30794,-9.21136],[-35.30785,-9.19979],[-35.29103,-9.19988],[-35.29091,-9.1966],[-35.29018,-9.19669],[-35.28997,-9.16516],[-35.27759,-9.16522],[-35.2775,-9.16417],[-35.27541,-9.1642],[-35.27535,-9.16152],[-35.27375,-9.16149],[-35.27366,-9.15839],[-35.27182,-9.15842],[-35.27185,-9.15729],[-35.27149,-9.15729],[-35.27143,-9.15469],[-35.26965,-9.15463],[-35.26959,-9.15362],[-35.26919,-9.15362],[-35.26907,-9.13159],[-35.26403,-9.13165],[-35.264,-9.12318],[-35.26056,-9.12321],[-35.26053,-9.11781],[-35.256,-9.11784],[-35.25573,-9.08946],[-35.25114,-9.08955],[-35.25108,-9.08651],[-35.25026,-9.08648],[-35.25029,-9.08475],[-35.24449,-9.08478],[-35.24449,-9.07989],[-35.24093,-9.07997],[-35.24081,-9.07312],[-35.23734,-9.07312],[-35.23719,-9.06322],[-35.23655,-9.06322],[-35.23652,-9.04655],[-35.23323,-9.04652],[-35.23332,-9.04345],[-35.2306,-9.04348],[-35.2306,-9.04014],[-35.22897,-9.04008],[-35.229,-9.03835],[-35.22505,-9.03826],[-35.22502,-9.03167],[-35.2223,-9.03161],[-35.22233,-9.02012],[-35.21834,-9.02009],[-35.21831,-9.01341],[-35.21671,-9.01341],[-35.21668,-9.00998],[-35.21176,-9.00998],[-35.21173,-9.00647],[-35.20971,-9.00653],[-35.20974,-9.00438],[-35.20765,-9.00432],[-35.20768,-9.00226],[-35.20566,-9.00226],[-35.20563,-8.99987],[-35.20391,-8.99987],[-35.20394,-8.99785],[-35.20213,-8.99791],[-35.20213,-8.99579],[-35.19844,-8.99582],[-35.19844,-8.99361],[-35.19434,-8.99361],[-35.19428,-8.99122],[-35.19065,-8.99131],[-35.19062,-8.98833],[-35.18766,-8.98842],[-35.18763,-8.98544],[-35.18473,-8.98541],[-35.18467,-8.98255],[-35.18238,-8.98252],[-35.18235,-8.98052],[-35.17951,-8.98061],[-35.17948,-8.97742],[-35.17809,-8.97745],[-35.17803,-8.97306],[-35.17558,-8.97303],[-35.17549,-8.96912],[-35.17293,-8.96909],[-35.17284,-8.96292],[-35.17063,-8.96289],[-35.17048,-8.95579],[-35.16852,-8.95564],[-35.16852,-8.94806],[-35.16794,-8.948],[-35.16791,-8.93995],[-35.16245,-8.93995],[-35.16242,-8.92978],[-35.1587,-8.92981],[-35.15873,-8.92662],[-35.15547,-8.92668],[-35.1555,-8.92378],[-35.15348,-8.92381],[-35.15339,-8.92065],[-35.15131,-8.92062],[-35.15122,-8.91194],[-35.15263,-8.91194],[-35.15263,-8.90821],[-35.15439,-8.90824],[-35.1543,-8.90215],[-35.15593,-8.90212],[-35.15593,-8.90051],[-35.15768,-8.90048],[-35.15774,-8.89905],[-35.15958,-8.89908],[-35.15955,-8.89747],[-35.16139,-8.8975],[-35.16133,-8.89625],[-35.16363,-8.89625],[-35.1636,-8.89526],[-35.16553,-8.89526],[-35.1655,-8.89315],[-35.16794,-8.89315],[-35.16791,-8.89147],[-35.17024,-8.89153],[-35.17027,-8.8904],[-35.17302,-8.89043],[-35.17302,-8.88876],[-35.17791,-8.88876],[-35.17794,-8.88795],[-35.17894,-8.88792],[-35.17894,-8.88891],[-35.17966,-8.88894],[-35.17978,-8.88858],[-35.18099,-8.88861],[-35.18099,-8.88816],[-35.18519,-8.88816],[-35.18519,-8.88897],[-35.18591,-8.889],[-35.18591,-8.88971],[-35.18932,-8.88971],[-35.18947,-8.8893],[-35.19014,-8.88927],[-35.19017,-8.88831],[-35.19071,-8.88831],[-35.19077,-8.88789],[-35.19153,-8.88792],[-35.19156,-8.88619],[-35.19754,-8.88607],[-35.19757,-8.8873],[-35.19968,-8.8873],[-35.19974,-8.88777],[-35.2008,-8.88777],[-35.2008,-8.88822],[-35.2033,-8.88822],[-35.20337,-8.8887],[-35.20563,-8.88861],[-35.20557,-8.88983],[-35.20741,-8.8898],[-35.20744,-8.89022],[-35.21125,-8.89025],[-35.21128,-8.88769],[-35.21245,-8.88777],[-35.21248,-8.88861],[-35.21623,-8.88858],[-35.21623,-8.88748],[-35.21871,-8.88745],[-35.21871,-8.88897],[-35.22136,-8.88897],[-35.22263,-8.88792],[-35.22402,-8.88748],[-35.22453,-8.88763],[-35.22644,-8.88718],[-35.22707,-8.88598],[-35.23311,-8.88446],[-35.23933,-8.88339],[-35.24129,-8.88416],[-35.25011,-8.88515],[-35.25624,-8.88506],[-35.26168,-8.88294],[-35.26161,-8.88094],[-35.26406,-8.88109],[-35.26877,-8.8793],[-35.27421,-8.87748],[-35.2781,-8.87518],[-35.28499,-8.87507],[-35.28502,-8.87581],[-35.2881,-8.87578],[-35.29405,-8.87545],[-35.30782,-8.87208],[-35.31757,-8.86961],[-35.32784,-8.86716],[-35.33206,-8.86614],[-35.34103,-8.86376],[-35.3471,-8.86244],[-35.3522,-8.86113],[-35.35257,-8.86391],[-35.34903,-8.86611],[-35.34496,-8.87205],[-35.34327,-8.87489],[-35.34318,-8.87569],[-35.34381,-8.87668],[-35.34481,-8.8768],[-35.34888,-8.87721],[-35.35042,-8.87781],[-35.35254,-8.87891],[-35.35399,-8.88011],[-35.35577,-8.88252],[-35.35755,-8.88396],[-35.36036,-8.88512],[-35.36114,-8.88509],[-35.3612,-8.88587],[-35.36175,-8.8859],[-35.36178,-8.88777],[-35.36253,-8.88783],[-35.36247,-8.891],[-35.36311,-8.89112],[-35.36311,-8.89482],[-35.3644,-8.89488],[-35.36507,-8.8967],[-35.36637,-8.90022],[-35.36754,-8.90427],[-35.36794,-8.90782],[-35.36863,-8.90917],[-35.37207,-8.91155],[-35.3741,-8.91349],[-35.37277,-8.916],[-35.37262,-8.91817],[-35.37084,-8.92229],[-35.37062,-8.92486],[-35.37235,-8.93038],[-35.37153,-8.93193],[-35.37153,-8.93363],[-35.37171,-8.93387],[-35.37171,-8.94362],[-35.36818,-8.94377],[-35.36815,-8.94505],[-35.36927,-8.94511],[-35.36921,-8.94863],[-35.37078,-8.94872],[-35.37081,-8.95182],[-35.37219,-8.95176],[-35.37222,-8.95528],[-35.37319,-8.95531],[-35.37313,-8.95737],[-35.3744,-8.95737],[-35.37446,-8.96012],[-35.37567,-8.96018],[-35.3757,-8.96205],[-35.37688,-8.96208],[-35.37694,-8.96444],[-35.37781,-8.96444],[-35.37775,-8.96617],[-35.38074,-8.96617],[-35.38074,-8.96331],[-35.38288,-8.96328],[-35.38291,-8.95982],[-35.38542,-8.95985],[-35.38542,-8.95722],[-35.38723,-8.95722],[-35.3872,-8.95406],[-35.38947,-8.95409],[-35.38947,-8.95084],[-35.39158,-8.95087],[-35.39158,-8.94792],[-35.39587,-8.94792],[-35.39581,-8.94651],[-35.3972,-8.94654],[-35.39711,-8.94472],[-35.39838,-8.94469],[-35.39838,-8.93915],[-35.40107,-8.93915],[-35.40106,-8.93895],[-35.40167,-8.93894],[-35.40173,-8.93688],[-35.40236,-8.93688],[-35.40236,-8.93628],[-35.40324,-8.9364],[-35.4033,-8.93583],[-35.40426,-8.9358],[-35.4042,-8.93363],[-35.40574,-8.9336],[-35.40577,-8.93124],[-35.4081,-8.93133],[-35.40804,-8.92927],[-35.40937,-8.9293],[-35.40928,-8.92739],[-35.41085,-8.92742],[-35.41085,-8.92542],[-35.41239,-8.92545],[-35.41236,-8.9239],[-35.41335,-8.92387],[-35.41329,-8.92193],[-35.41523,-8.92196],[-35.41523,-8.91999],[-35.41655,-8.92002],[-35.41655,-8.91755],[-35.4196,-8.91755],[-35.41966,-8.91964],[-35.42184,-8.91964],[-35.42187,-8.92265],[-35.42389,-8.92268],[-35.42392,-8.92513],[-35.42537,-8.92513],[-35.42537,-8.92766],[-35.42724,-8.92766],[-35.42727,-8.92987],[-35.42815,-8.92984],[-35.42818,-8.9316],[-35.42987,-8.93154],[-35.4299,-8.93407],[-35.43141,-8.93407],[-35.43141,-8.9356],[-35.43226,-8.93557],[-35.43229,-8.93586],[-35.4334,-8.93583],[-35.4334,-8.94001],[-35.43434,-8.94004],[-35.43434,-8.94097],[-35.43531,-8.94097],[-35.43534,-8.94261],[-35.43567,-8.94264],[-35.4357,-8.94329],[-35.43627,-8.94332],[-35.43624,-8.94422],[-35.4373,-8.94422],[-35.43727,-8.9452],[-35.43823,-8.9452],[-35.43827,-8.94684],[-35.43902,-8.94687],[-35.43902,-8.94798],[-35.44026,-8.94798],[-35.44032,-8.94953],[-35.44159,-8.94956],[-35.44165,-8.95152],[-35.44273,-8.95152],[-35.44273,-8.95334],[-35.44436,-8.95334],[-35.44436,-8.95498],[-35.44569,-8.95501],[-35.44563,-8.95674],[-35.4472,-8.9568],[-35.44717,-8.95865],[-35.44895,-8.95871],[-35.44892,-8.96],[-35.45101,-8.95994],[-35.45098,-8.96101],[-35.45469,-8.96095],[-35.45466,-8.96235],[-35.46049,-8.96235],[-35.46055,-8.96557],[-35.46653,-8.96548],[-35.46659,-8.96885],[-35.46771,-8.96883],[-35.46774,-8.97053],[-35.4739,-8.97053],[-35.47399,-8.9753],[-35.47791,-8.97521],[-35.47797,-8.97816],[-35.4841,-8.97813],[-35.48416,-8.98201],[-35.49084,-8.98195],[-35.49084,-8.98562],[-35.49721,-8.98562],[-35.49721,-8.99069],[-35.50225,-8.99057],[-35.50234,-8.99567],[-35.50648,-8.99567],[-35.50651,-8.99856],[-35.51204,-8.9985],[-35.51207,-9.00163],[-35.51663,-9.00166],[-35.51666,-9.00617],[-35.52119,-9.00614],[-35.52122,-9.00739],[-35.53127,-9.00733],[-35.53127,-9.01064],[-35.54818,-9.01049],[-35.54818,-9.01359],[-35.56968,-9.01344],[-35.56974,-9.01738],[-35.58575,-9.01732],[-35.58578,-9.01995],[-35.60957,-9.01983],[-35.60954,-9.02302],[-35.62911,-9.02287],[-35.62905,-9.02508],[-35.65221,-9.0249],[-35.65224,-9.02758],[-35.67552,-9.0274],[-35.67555,-9.03056],[-35.68295,-9.03056],[-35.68298,-9.03435],[-35.69128,-9.03432],[-35.69128,-9.03766],[-35.6995,-9.0376],[-35.6995,-9.04034],[-35.70668,-9.04031],[-35.70671,-9.04518],[-35.71115,-9.04518],[-35.71133,-9.06691],[-35.70871,-9.06691],[-35.70877,-9.07869],[-35.70656,-9.07872],[-35.70656,-9.08653],[-35.7043,-9.08653],[-35.70433,-9.09104],[-35.69992,-9.09107],[-35.69989,-9.0956],[-35.69536,-9.09557],[-35.69542,-9.10001],[-35.69092,-9.10013],[-35.69101,-9.10207],[-35.63367,-9.10246],[-35.6337,-9.10541],[-35.62585,-9.10553],[-35.62591,-9.10964],[-35.62231,-9.10964],[-35.62234,-9.11203],[-35.6199,-9.112],[-35.6199,-9.11501],[-35.61473,-9.11507],[-35.61473,-9.11707],[-35.61177,-9.11701],[-35.61181,-9.1182],[-35.6096,-9.11826],[-35.60963,-9.12571],[-35.59976,-9.12583],[-35.59979,-9.12923],[-35.59634,-9.12926],[-35.5964,-9.13502],[-35.59197,-9.13507],[-35.59209,-9.149],[-35.59018,-9.14897],[-35.59015,-9.15108],[-35.6016,-9.15105],[-35.60154,-9.14912],[-35.60552,-9.14912],[-35.60549,-9.14557],[-35.61184,-9.14554],[-35.61184,-9.14235],[-35.6176,-9.14238],[-35.61757,-9.13853],[-35.624,-9.13853],[-35.62397,-9.13466],[-35.63177,-9.13466],[-35.63164,-9.13063],[-35.63922,-9.1306],[-35.63919,-9.12878],[-35.66386,-9.12869],[-35.6638,-9.1261],[-35.71278,-9.12577],[-35.71275,-9.12407],[-35.72426,-9.12401],[-35.71964,-9.15323],[-35.72112,-9.1532],[-35.72124,-9.17258],[-35.72066,-9.17255],[-35.72082,-9.18558],[-35.71212,-9.18566],[-35.7133,-9.34416],[-35.69041,-9.34433],[-35.69065,-9.37189],[-35.68899,-9.37189],[-35.68902,-9.37598],[-35.68757,-9.37598],[-35.68766,-9.38232],[-35.68497,-9.38235],[-35.68503,-9.39093],[-35.68168,-9.39099],[-35.68177,-9.39936],[-35.67715,-9.39933],[-35.67724,-9.4089],[-35.67292,-9.40893],[-35.67301,-9.41754],[-35.66972,-9.4176],[-35.66978,-9.42498],[-35.66722,-9.42498],[-35.66728,-9.4327],[-35.66075,-9.43288],[-35.66075,-9.43705],[-35.6513,-9.43708],[-35.65142,-9.44211],[-35.64514,-9.44217],[-35.64523,-9.44652],[-35.63645,-9.44661],[-35.63645,-9.44992],[-35.62711,-9.45],[-35.62727,-9.46505],[-35.62086,-9.46511],[-35.62092,-9.4722],[-35.60939,-9.47222],[-35.60939,-9.47529],[-35.59674,-9.47535],[-35.59674,-9.47351],[-35.57844,-9.47371],[-35.57847,-9.47595],[-35.57267,-9.47604],[-35.5727,-9.48042],[-35.56823,-9.48048],[-35.56826,-9.48881],[-35.54169,-9.48893],[-35.54163,-9.48071],[-35.52384,-9.48089]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"arapiraca_al",name:"Arapiraca AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Arapiraca&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.60875,-9.83072],[-36.60784,-9.74047],[-36.61718,-9.74051],[-36.61631,-9.65075],[-36.70737,-9.64977],[-36.70832,-9.74043],[-36.69898,-9.74047],[-36.69997,-9.82968],[-36.60875,-9.83072]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"CRAIG-Auvergne-2013",name:"Auvergne 2013 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/osm/wmts/1.0.0/ortho_2013/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.94012,44.63388],[2.99719,44.63393],[2.99717,44.64734],[3.01597,44.64735],[3.01593,44.67412],[3.03495,44.67413],[3.0349,44.70152],[3.05363,44.70154],[3.05357,44.7419],[3.07233,44.74191],[3.07222,44.80917],[3.09216,44.80919],[3.09214,44.82213],[3.13014,44.82216],[3.13005,44.87707],[3.14856,44.87709],[3.14858,44.8637],[3.16823,44.86371],[3.16825,44.85003],[3.2064,44.85006],[3.20638,44.86284],[3.24395,44.86287],[3.24393,44.87679],[3.26315,44.87681],[3.26308,44.91752],[3.32004,44.91757],[3.32002,44.93033],[3.33908,44.93035],[3.33906,44.9442],[3.377,44.94423],[3.37702,44.93029],[3.39603,44.9303],[3.39612,44.87627],[3.41483,44.87629],[3.41489,44.83553],[3.43334,44.83554],[3.43338,44.80828],[3.45255,44.80829],[3.45258,44.79463],[3.50893,44.79468],[3.5089,44.80815],[3.60426,44.80823],[3.60422,44.83482],[3.62361,44.83484],[3.62357,44.86166],[3.64248,44.86167],[3.64255,44.8211],[3.66101,44.82112],[3.66103,44.80777],[3.6993,44.8078],[3.69928,44.82099],[3.73611,44.82102],[3.73618,44.77971],[3.77511,44.77974],[3.77515,44.75223],[3.81184,44.75226],[3.81186,44.7392],[3.83118,44.73922],[3.83121,44.72468],[3.88782,44.72472],[3.8878,44.73818],[3.92563,44.73821],[3.9256,44.75167],[3.94541,44.75168],[3.94537,44.77847],[3.96437,44.77848],[3.96435,44.79193],[4.00332,44.79196],[4.0033,44.80526],[4.02169,44.80527],[4.02167,44.81857],[4.05965,44.8186],[4.05961,44.84492],[4.07981,44.84494],[4.07979,44.85735],[4.17388,44.85743],[4.17386,44.87055],[4.19326,44.87056],[4.19323,44.88427],[4.21404,44.88429],[4.214,44.91002],[4.23241,44.91004],[4.23237,44.93731],[4.27155,44.93734],[4.27153,44.9503],[4.32887,44.95034],[4.32878,45.00367],[4.34893,45.00368],[4.3489,45.01707],[4.40608,45.01711],[4.40599,45.071],[4.38847,45.07099],[4.38845,45.0846],[4.40794,45.08461],[4.40792,45.09663],[4.48436,45.09669],[4.48429,45.13705],[4.46636,45.13703],[4.46634,45.1502],[4.48645,45.15022],[4.4864,45.17724],[4.50655,45.17726],[4.50644,45.24501],[4.48813,45.24499],[4.48811,45.25921],[4.46986,45.25919],[4.46984,45.27298],[4.45088,45.27297],[4.45086,45.28642],[4.39368,45.28637],[4.39363,45.31352],[4.37509,45.3135],[4.37507,45.32741],[4.39507,45.32742],[4.39503,45.35458],[4.37679,45.35457],[4.37676,45.36855],[4.35766,45.36853],[4.35763,45.38234],[4.28146,45.38227],[4.28143,45.39688],[4.24446,45.39685],[4.24443,45.41079],[4.14812,45.41071],[4.14814,45.39807],[4.12919,45.39805],[4.12921,45.38409],[4.09021,45.38406],[4.09024,45.37121],[4.01355,45.37115],[4.01353,45.3861],[3.91709,45.38602],[3.91707,45.39974],[3.93757,45.39975],[3.93755,45.41311],[3.97528,45.41315],[3.97526,45.42621],[3.99537,45.42622],[3.9957,45.52096],[3.97778,45.52094],[3.97769,45.57439],[3.95818,45.57437],[3.95815,45.58837],[3.9396,45.58835],[3.93958,45.60262],[3.92023,45.60261],[3.9202,45.61646],[3.88189,45.61643],[3.88185,45.64328],[3.84413,45.64325],[3.84411,45.65709],[3.82617,45.65707],[3.82612,45.68389],[3.80722,45.68387],[3.80713,45.73758],[3.78821,45.73756],[3.78819,45.7518],[3.76885,45.75178],[3.7688,45.77897],[3.75072,45.77895],[3.75058,45.86066],[3.76967,45.86067],[3.76958,45.91433],[3.75166,45.91432],[3.75164,45.92809],[3.7329,45.92807],[3.73285,45.95472],[3.81018,45.95478],[3.81016,45.96823],[3.8496,45.96826],[3.84951,46.02162],[3.83188,46.0216],[3.83179,46.07591],[3.8505,46.07592],[3.85046,46.10295],[3.83247,46.10294],[3.83234,46.18456],[3.81422,46.18455],[3.81415,46.22442],[3.83369,46.22444],[3.83366,46.2381],[3.85289,46.23812],[3.85287,46.25147],[3.89314,46.25151],[3.89312,46.26447],[3.91306,46.26448],[3.91303,46.27793],[3.95189,46.27796],[3.95187,46.29082],[3.97152,46.29084],[3.9715,46.30369],[4.0105,46.30373],[4.01048,46.31776],[4.02983,46.31778],[4.02978,46.34428],[4.0116,46.34427],[4.01146,46.42534],[4.03153,46.42536],[4.03146,46.4658],[4.01324,46.46578],[4.01322,46.47938],[3.99437,46.47936],[3.99435,46.49361],[3.9746,46.4936],[3.97457,46.50753],[3.87754,46.50745],[3.8775,46.53478],[3.85836,46.53476],[3.85833,46.54832],[3.81869,46.54828],[3.81871,46.53553],[3.79924,46.53552],[3.79922,46.54907],[3.76104,46.54904],[3.76092,46.61681],[3.74233,46.61679],[3.74228,46.64396],[3.72286,46.64395],[3.72281,46.67104],[3.70387,46.67102],[3.70385,46.68467],[3.68411,46.68466],[3.68406,46.712],[3.66484,46.71198],[3.66479,46.73904],[3.64576,46.73902],[3.64572,46.76634],[3.62575,46.76632],[3.62573,46.77971],[3.56723,46.77966],[3.56725,46.76631],[3.54715,46.76629],[3.54719,46.73928],[3.52716,46.73927],[3.52723,46.6989],[3.48774,46.69887],[3.48776,46.68594],[3.46796,46.68593],[3.46794,46.69941],[3.46792,46.71279],[3.44865,46.71278],[3.44863,46.72679],[3.35043,46.72671],[3.35048,46.6999],[3.33039,46.69988],[3.33034,46.7272],[3.23272,46.72712],[3.23274,46.71351],[3.2129,46.7135],[3.21293,46.70013],[3.17354,46.7001],[3.1735,46.72751],[3.15412,46.72749],[3.1541,46.74073],[3.11478,46.7407],[3.11475,46.75428],[3.07534,46.75424],[3.0753,46.78135],[3.05597,46.78134],[3.05592,46.80831],[2.99704,46.80826],[2.99702,46.82196],[2.93794,46.82191],[2.93797,46.80826],[2.89866,46.80823],[2.89869,46.79424],[2.87899,46.79422],[2.87901,46.78104],[2.85942,46.78103],[2.85944,46.76771],[2.84004,46.76769],[2.84007,46.75447],[2.7414,46.75439],[2.74138,46.76682],[2.70234,46.76679],[2.70236,46.75389],[2.68266,46.75387],[2.68268,46.74048],[2.66349,46.74046],[2.66351,46.7259],[2.64342,46.72588],[2.64344,46.71309],[2.62414,46.71308],[2.62417,46.69981],[2.60397,46.69979],[2.60399,46.68584],[2.56512,46.68581],[2.56515,46.67261],[2.54593,46.6726],[2.546,46.63215],[2.56592,46.63217],[2.56595,46.61811],[2.54564,46.61809],[2.54569,46.59072],[2.56642,46.59074],[2.56644,46.57754],[2.5855,46.57756],[2.58552,46.56472],[2.56613,46.5647],[2.56616,46.55062],[2.46828,46.55055],[2.4683,46.53582],[2.33212,46.53571],[2.33217,46.50886],[2.31265,46.50884],[2.31267,46.49534],[2.29288,46.49533],[2.2929,46.48182],[2.27487,46.4818],[2.27492,46.45442],[2.25539,46.4544],[2.25553,46.37349],[2.27595,46.37351],[2.27604,46.32087],[2.31456,46.32091],[2.31458,46.30704],[2.35371,46.30707],[2.35373,46.29297],[2.39384,46.293],[2.39389,46.26729],[2.45157,46.26733],[2.4516,46.25349],[2.47094,46.25351],[2.47098,46.22656],[2.49151,46.22657],[2.49155,46.19933],[2.51088,46.19934],[2.51093,46.17278],[2.53117,46.1728],[2.53138,46.05135],[2.55163,46.05137],[2.55166,46.03777],[2.57056,46.03778],[2.57068,45.96994],[2.55144,45.96993],[2.55146,45.95662],[2.53226,45.9566],[2.53228,45.94301],[2.51307,45.94299],[2.51313,45.90203],[2.47494,45.902],[2.47496,45.88882],[2.43619,45.88879],[2.43622,45.87533],[2.41721,45.87531],[2.41725,45.84794],[2.37847,45.84791],[2.3785,45.83397],[2.35952,45.83396],[2.35956,45.80708],[2.37873,45.8071],[2.37875,45.79358],[2.3987,45.79359],[2.39872,45.78035],[2.41825,45.78036],[2.41832,45.74],[2.45722,45.74003],[2.45724,45.7267],[2.47589,45.72671],[2.47591,45.71324],[2.49533,45.71325],[2.49542,45.65913],[2.45769,45.6591],[2.45776,45.61834],[2.43912,45.61833],[2.43919,45.57766],[2.4585,45.57768],[2.45855,45.55053],[2.47809,45.55055],[2.47811,45.53725],[2.49755,45.53726],[2.49759,45.51068],[2.47855,45.51066],[2.47864,45.45613],[2.45978,45.45612],[2.45987,45.40176],[2.42249,45.40173],[2.42247,45.41528],[2.40232,45.41527],[2.40229,45.42882],[2.3256,45.42876],[2.32567,45.38796],[2.34562,45.38798],[2.34566,45.36111],[2.32626,45.36109],[2.32628,45.34721],[2.30738,45.3472],[2.3074,45.3336],[2.28811,45.33358],[2.28813,45.32082],[2.26963,45.3208],[2.26966,45.30621],[2.25066,45.3062],[2.25068,45.29251],[2.23169,45.2925],[2.23171,45.27924],[2.213,45.27922],[2.21305,45.25204],[2.19374,45.25202],[2.19376,45.23811],[2.17561,45.2381],[2.17574,45.15768],[2.15735,45.15767],[2.15744,45.10295],[2.12024,45.10292],[2.12026,45.08955],[2.10067,45.08953],[2.10069,45.07544],[2.08246,45.07543],[2.08255,45.0216],[2.10255,45.02161],[2.1026,44.99445],[2.04574,44.99441],[2.04585,44.92753],[2.06578,44.92755],[2.06589,44.85969],[2.0857,44.8597],[2.08572,44.84581],[2.10556,44.84583],[2.1056,44.81933],[2.12474,44.81934],[2.12477,44.80551],[2.14351,44.80553],[2.14355,44.7786],[2.12561,44.77858],[2.1257,44.72427],[2.10665,44.72426],[2.10671,44.68423],[2.12634,44.68424],[2.12636,44.67074],[2.14598,44.67075],[2.14607,44.61644],[2.18396,44.61648],[2.18398,44.60378],[2.24042,44.60383],[2.24037,44.63095],[2.25948,44.63097],[2.25946,44.64493],[2.31668,44.64498],[2.3167,44.63088],[2.33615,44.6309],[2.33617,44.61758],[2.37242,44.61761],[2.3724,44.63158],[2.41105,44.63161],[2.41107,44.61907],[2.44922,44.61911],[2.4492,44.63232],[2.50486,44.63237],[2.50481,44.65976],[2.52461,44.65977],[2.52457,44.68717],[2.54225,44.68719],[2.54223,44.70122],[2.58071,44.70125],[2.5806,44.76834],[2.61769,44.76837],[2.61762,44.80884],[2.63676,44.80885],[2.63669,44.84929],[2.67331,44.84933],[2.67329,44.86252],[2.69338,44.86253],[2.69333,44.88943],[2.73052,44.88946],[2.73048,44.91645],[2.74992,44.91646],[2.75005,44.83647],[2.80733,44.83652],[2.80731,44.8491],[2.82638,44.84912],[2.8264,44.83628],[2.8457,44.8363],[2.84577,44.79571],[2.86422,44.79573],[2.86426,44.76865],[2.88399,44.76866],[2.88403,44.74197],[2.90203,44.74198],[2.90214,44.67432],[2.92198,44.67434],[2.92202,44.6473],[2.9401,44.64731],[2.94012,44.63388]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/8cabc987-829c-4c9f-943b-6a0e255cd73",terms_text:"Orthophotographie CRAIG/Sintegra/IGN 2013"},{id:"CRAIG-Auvergne-2016",name:"Auvergne 2016 25cm CRAIG",type:"tms",template:"https://tiles.craig.fr/ortho/wmts/1.0.0/ortho_2016/webmercator/{zoom}/{x}/{y}.jpeg",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.49389,46.66829],[2.71362,46.84141],[3.64746,46.80758],[4.04846,46.48327],[4.03747,46.24825],[4.46044,46.25965],[4.4934,46.14559],[4.38354,46.09229],[4.45495,45.69084],[4.76257,45.57176],[4.81201,45.34443],[4.22424,44.84419],[3.86169,44.696],[3.37829,44.80523],[3.33435,44.89091],[3.18054,44.82471],[3.03222,44.60612],[2.92785,44.60221],[2.71911,44.85198],[2.51037,44.60221],[2.12585,44.58265],[2.005,44.97257],[2.30712,45.46784],[2.43347,45.44087],[2.41149,45.72919],[2.34558,45.82402],[2.54882,45.97979],[2.46093,46.22166],[2.21374,46.33935],[2.27828,46.53903],[2.54882,46.56642],[2.49389,46.66829]]],terms_url:"http://ids.craig.fr/geocat/srv/fre/catalog.search?node=srv#/metadata/e37c057b-5884-429b-8bec-5db0baef0ee",terms_text:"CRAIG - IGN -TopoGEODIS - Feder Auvergne-Rhône-Alpes 2016"},{id:"BANO",name:"BANO",type:"tms",template:"https://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)#Licence_du_r.C3.A9sultat",terms_text:"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL",description:"French address registry or Base Adresses Nationale Ouverte",overlay:true},{id:"lu.geoportail.opendata.basemap",name:"Basemap geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"basemap.at",name:"basemap.at",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Basemap of Austria, based on government data.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-orthofoto",name:"basemap.at Orthofoto",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",best:true,description:"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-overlay",name:"basemap.at Overlay",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoverlay/normal/google3857/{zoom}/{y}/{x}.png",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Annotation overlay provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg",overlay:true},{id:"basemap.at-surface",name:"basemap.at Surface",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapoberflaeche/grau/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Surface layer provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"basemap.at-terrain",name:"basemap.at Terrain",type:"tms",template:"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmapgelaende/grau/google3857/{zoom}/{y}/{x}.jpeg",zoomExtent:[0,19],polygon:[[[16.50733,46.99293],[16.28342,46.99293],[16.13584,46.8713],[15.98317,46.81909],[16.04933,46.65517],[15.86104,46.71801],[15.75926,46.69009],[15.56079,46.67962],[15.57606,46.63421],[15.47937,46.60276],[15.43357,46.65168],[15.22493,46.63421],[15.04682,46.64819],[14.99084,46.58877],[14.9603,46.62373],[14.85344,46.60276],[14.83308,46.50127],[14.75166,46.49776],[14.68041,46.43818],[14.61426,46.43818],[14.57864,46.37853],[14.44124,46.43116],[14.16135,46.42766],[14.12573,46.47674],[14.01886,46.47674],[13.91199,46.52578],[13.82548,46.50477],[13.44381,46.56078],[13.30641,46.55028],[13.1283,46.58877],[12.84332,46.61324],[12.72628,46.6412],[12.51255,46.66565],[12.35988,46.70405],[12.36497,46.77032],[12.28863,46.77729],[12.27337,46.88522],[12.20721,46.87478],[12.13088,46.90261],[12.11561,46.99987],[12.25301,47.06577],[12.2123,47.0935],[11.9833,47.04497],[11.73394,46.96168],[11.63217,47.01028],[11.54057,46.97557],[11.49986,47.00681],[11.41843,46.96515],[11.25559,46.97557],[11.1131,46.91304],[11.04185,46.76335],[10.88919,46.75986],[10.74161,46.78426],[10.70599,46.86435],[10.57877,46.83998],[10.45663,46.85043],[10.47699,46.92694],[10.38539,46.98946],[10.23272,46.86435],[10.12076,46.83302],[9.86632,46.94084],[9.90194,47.00334],[9.68312,47.05884],[9.61188,47.03804],[9.63223,47.12813],[9.58134,47.1662],[9.54063,47.26644],[9.60679,47.34926],[9.67294,47.36994],[9.64241,47.44571],[9.56608,47.48011],[9.71365,47.52824],[9.7849,47.59692],[9.83579,47.54542],[9.94774,47.53855],[10.09023,47.44915],[10.11059,47.36649],[10.2429,47.38717],[10.18692,47.2699],[10.32432,47.29751],[10.48208,47.44915],[10.43119,47.48699],[10.44137,47.59005],[10.48717,47.55229],[10.54823,47.53511],[10.59912,47.56602],[10.75688,47.53168],[10.88919,47.54542],[10.94008,47.48699],[10.99605,47.39061],[11.23523,47.44227],[11.28103,47.3975],[11.42352,47.51449],[11.57619,47.50762],[11.60672,47.59005],[11.83572,47.58662],[12.00366,47.62436],[12.20721,47.60378],[12.16141,47.69634],[12.2581,47.74427],[12.25301,47.67921],[12.43112,47.71004],[12.49219,47.63122],[12.56852,47.62779],[12.62959,47.68949],[12.77208,47.66893],[12.83315,47.54198],[12.97564,47.47323],[13.04179,47.49387],[13.0367,47.55572],[13.09777,47.64151],[13.03161,47.71004],[12.90439,47.72031],[13.00617,47.84683],[12.9451,47.93555],[12.86368,47.95941],[12.86368,48.00369],[12.75172,48.09894],[12.87386,48.21097],[12.96037,48.21097],[13.04179,48.2652],[13.18428,48.29907],[13.26061,48.2923],[13.39801,48.35659],[13.44381,48.41742],[13.43872,48.55234],[13.50997,48.58601],[13.61175,48.57255],[13.72879,48.5119],[13.78477,48.57255],[13.82039,48.62639],[13.79495,48.71713],[13.85093,48.77417],[14.05957,48.66338],[14.01377,48.63312],[14.07484,48.59274],[14.21733,48.59611],[14.3649,48.54897],[14.46668,48.64993],[14.55828,48.59611],[14.59899,48.62639],[14.72113,48.57591],[14.72113,48.6869],[14.8229,48.7272],[14.81782,48.77753],[14.96472,48.78518],[14.98936,49.01266],[15.14859,48.99503],[15.19439,48.93155],[15.30635,48.98501],[15.39286,48.98501],[15.48446,48.92821],[15.74908,48.8546],[15.84068,48.88807],[16.00862,48.78088],[16.20708,48.73391],[16.39537,48.73727],[16.49206,48.81105],[16.69053,48.77417],[16.7058,48.73391],[16.89917,48.71377],[16.97551,48.51527],[16.84828,48.45118],[16.85337,48.34644],[16.95515,48.25165],[16.99077,48.1499],[17.09255,48.13971],[17.08237,48.02412],[17.17397,48.02071],[17.08237,47.87414],[16.98568,47.86732],[17.08237,47.80925],[17.09255,47.70319],[16.74142,47.67921],[16.7058,47.75112],[16.53786,47.75454],[16.54804,47.70662],[16.42082,47.66893],[16.57348,47.6175],[16.67017,47.63122],[16.71088,47.53855],[16.66,47.44915],[16.54295,47.39406],[16.46153,47.39406],[16.49206,47.2768],[16.42591,47.19733],[16.47171,47.1489],[16.54804,47.1489],[16.47679,47.07964],[16.52768,47.05884],[16.50733,46.99293]]],terms_url:"https://basemap.at",terms_text:"basemap.at",description:"Terrain layer provided by basemap.at.",icon:"https://www.basemap.at/images/logo_basemap.jpg"},{id:"bavaria-80cm",name:"Bavaria (80 cm)",type:"wms",template:"https://geoservices.bayern.de/wms/v2/ogc_dop80_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=by_dop80c&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true},{id:"bavaria-DOP80",name:"Bavaria DOP 80cm",type:"tms",template:"https://mapproxy.osm.ch/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[7,18],polygon:[[[10.12359,50.56846],[10.14286,50.55078],[10.20281,50.55742],[10.25205,50.51796],[10.32698,50.49345],[10.41048,50.41848],[10.60317,50.33109],[10.62244,50.2271],[10.72521,50.21066],[10.72949,50.24765],[10.85153,50.24354],[10.71879,50.32015],[10.71236,50.36524],[10.85581,50.39664],[10.93717,50.39664],[10.99069,50.36661],[11.12772,50.36661],[11.1791,50.31332],[11.16197,50.29417],[11.24119,50.2928],[11.24975,50.37344],[11.24119,50.47982],[11.35895,50.5234],[11.43816,50.50979],[11.44244,50.48936],[11.42532,50.4771],[11.42532,50.44166],[11.48955,50.42257],[11.49169,50.39801],[11.51952,50.39801],[11.52594,50.37617],[11.59874,50.40347],[11.63727,50.38845],[11.79357,50.4212],[11.83639,50.39255],[11.92203,50.42802],[11.98626,50.38709],[11.98412,50.35705],[12.04835,50.33109],[12.09331,50.32972],[12.1297,50.29828],[12.14041,50.27228],[12.10615,50.25586],[12.11258,50.23532],[12.14897,50.23669],[12.19822,50.20107],[12.22391,50.16406],[12.20464,50.14348],[12.20678,50.10779],[12.24318,50.09955],[12.27743,50.07208],[12.49367,49.98543],[12.49796,49.94136],[12.55576,49.92206],[12.54934,49.86827],[12.48083,49.78817],[12.41018,49.75775],[12.46156,49.70655],[12.5472,49.68023],[12.58788,49.55261],[12.65425,49.53455],[12.66281,49.43302],[12.75274,49.41073],[12.7977,49.34661],[12.90475,49.35638],[12.99681,49.33685],[13.05462,49.27543],[13.13169,49.21952],[13.19164,49.14395],[13.2366,49.12153],[13.29655,49.12293],[13.37148,49.08088],[13.4143,49.02897],[13.4143,48.97981],[13.57916,48.96997],[13.63483,48.94326],[13.67765,48.88698],[13.73759,48.89261],[13.7847,48.83346],[13.84036,48.77423],[13.81681,48.70646],[13.84464,48.70081],[13.8425,48.60038],[13.76543,48.5423],[13.75258,48.50401],[13.67122,48.50543],[13.64339,48.54371],[13.45712,48.5508],[13.45712,48.41598],[13.40574,48.36053],[13.2837,48.27511],[13.09315,48.26941],[12.95827,48.19097],[12.87691,48.18526],[12.772,48.09382],[12.86407,48.01368],[12.89832,47.95492],[12.94543,47.95636],[12.99681,47.88461],[13.01394,47.83434],[12.93472,47.7322],[13.0589,47.72499],[13.11885,47.63851],[13.06532,47.56922],[13.05676,47.47379],[13.00323,47.45208],[12.76772,47.55044],[12.76986,47.63274],[12.73989,47.67312],[12.6671,47.67024],[12.57503,47.6212],[12.48083,47.61975],[12.41446,47.67024],[12.24318,47.67745],[12.2132,47.69186],[12.19179,47.68177],[12.2132,47.66591],[12.21106,47.60388],[12.17467,47.59521],[12.13827,47.60388],[11.89205,47.60388],[11.85137,47.57933],[11.63942,47.58222],[11.59445,47.54899],[11.59017,47.51285],[11.51738,47.49839],[11.4403,47.50417],[11.39534,47.47524],[11.42746,47.44484],[11.3461,47.44339],[11.27973,47.39559],[11.21336,47.38834],[11.24761,47.43181],[11.10203,47.39269],[10.965,47.38979],[10.97785,47.43615],[10.9179,47.47524],[10.8708,47.47524],[10.85581,47.49405],[10.90077,47.5143],[10.87294,47.53598],[10.81085,47.51285],[10.64385,47.54899],[10.59461,47.55477],[10.57962,47.52876],[10.46187,47.54032],[10.46615,47.48392],[10.48756,47.47813],[10.48756,47.41298],[10.45973,47.40283],[10.45973,47.37529],[10.41048,47.37384],[10.40834,47.34339],[10.32056,47.28678],[10.28202,47.27806],[10.28416,47.26208],[10.14714,47.26208],[10.1921,47.30275],[10.19424,47.37384],[10.16641,47.37384],[10.16641,47.34629],[10.10004,47.34339],[10.0615,47.36369],[10.06792,47.41877],[10.09361,47.42601],[10.09576,47.44194],[9.978,47.48537],[9.95659,47.52731],[9.8945,47.52876],[9.85596,47.50851],[9.81743,47.54465],[9.82171,47.57644],[9.77461,47.58222],[9.73821,47.52586],[9.67398,47.53454],[9.58406,47.56488],[9.63972,47.60532],[9.7168,47.60388],[9.85596,47.676],[9.978,47.65582],[10.02938,47.68177],[10.10004,47.66735],[10.13215,47.676],[10.14286,47.70195],[10.0615,47.7725],[10.11288,47.8099],[10.08291,47.85302],[10.1086,47.90902],[10.07649,47.96496],[10.13001,48.02084],[10.13429,48.10669],[10.10004,48.12813],[10.05508,48.26228],[9.96944,48.36765],[10.03153,48.42593],[10.02938,48.46144],[10.12359,48.47705],[10.15356,48.4515],[10.23492,48.51252],[10.31628,48.51678],[10.29915,48.61878],[10.24563,48.6683],[10.27346,48.70646],[10.3698,48.68385],[10.43189,48.69939],[10.45116,48.72765],[10.40192,48.746],[10.44046,48.84896],[10.43403,48.95873],[10.33769,49.02055],[10.24991,49.03599],[10.24991,49.07387],[10.20066,49.10331],[10.25205,49.13274],[10.12359,49.19714],[10.11931,49.26285],[10.15142,49.28939],[10.10432,49.34522],[10.14072,49.39401],[10.1086,49.44555],[10.11074,49.50537],[10.0722,49.53316],[10.01654,49.47616],[9.92662,49.47894],[9.92448,49.55678],[9.89878,49.58177],[9.85596,49.53872],[9.80672,49.55678],[9.86667,49.60675],[9.85382,49.6442],[9.81743,49.66083],[9.83455,49.68993],[9.79602,49.72039],[9.75748,49.70793],[9.74035,49.68577],[9.70609,49.71624],[9.67826,49.71624],[9.68254,49.68854],[9.62045,49.69131],[9.64615,49.78955],[9.55836,49.77434],[9.57121,49.73561],[9.50698,49.75222],[9.49199,49.77987],[9.46844,49.76051],[9.42562,49.77849],[9.40421,49.76466],[9.33356,49.7702],[9.32928,49.73423],[9.4085,49.72593],[9.42776,49.69824],[9.41492,49.6442],[9.38066,49.63865],[9.35925,49.64974],[9.33998,49.63727],[9.31215,49.64836],[9.27789,49.62617],[9.28432,49.60814],[9.2415,49.57483],[9.09805,49.57205],[9.06594,49.60814],[9.10019,49.65113],[9.09163,49.6927],[9.13017,49.71208],[9.13873,49.74253],[9.10876,49.75637],[9.13659,49.79093],[9.10019,49.78955],[9.07236,49.82824],[9.03596,49.83514],[9.01669,50.02671],[8.96317,50.03084],[8.95674,50.05971],[9.00171,50.0707],[9.02097,50.11054],[9.1216,50.12289],[9.15586,50.11328],[9.19654,50.11878],[9.18583,50.13525],[9.23507,50.1476],[9.37638,50.12701],[9.4085,50.0817],[9.52197,50.09543],[9.50484,50.14211],[9.53267,50.16406],[9.48985,50.16954],[9.49413,50.24354],[9.61403,50.22163],[9.66541,50.23532],[9.63544,50.24901],[9.66756,50.27228],[9.74249,50.30922],[9.72964,50.35841],[9.77032,50.42939],[9.86881,50.40074],[9.91805,50.40893],[10.03581,50.47982],[10.03795,50.51115],[10.12359,50.56846]]],terms_url:"https://www.ldbv.bayern.de/",terms_text:"Bayerische Vermessungsverwaltung",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"route500hydro",name:"BD Carthage",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500hydro/{zoom}/{x}/{y}.png",zoomExtent:[6,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"http://www.sandre.eaufrance.fr/actualite/la-bd-carthage-en-licence-ouverte-open-licence",terms_text:"Tiles © cquest@Openstreetmap France, data © Onema - IGN, LO/OL",description:"Réseau hydrographique: cours et plans d'eau et POI",overlay:true},{id:"fr.ign.bdortho",name:"BDOrtho IGN",type:"tms",template:"https://proxy-ign.openstreetmap.fr/94GjiyqD/bdortho/{zoom}/{x}/{y}.jpg",zoomExtent:[2,21],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]],[[-61.27501,14.90218],[-60.72368,14.90101],[-60.72489,14.36686],[-61.27622,14.36803],[-61.27501,14.90218]],[[-61.92802,16.58618],[-61.92686,15.7394],[-60.88128,15.74072],[-60.88243,16.5875],[-61.92802,16.58618]],[[-53.89344,6.004],[-52.46522,5.4465],[-51.52039,4.51072],[-51.53687,4.11633],[-52.2345,3.10213],[-52.641,2.25162],[-52.92664,2.07597],[-53.72864,2.21869],[-54.20106,2.03205],[-54.8053,2.27358],[-54.31092,2.80589],[-54.31641,3.20085],[-54.12415,3.46408],[-54.12964,3.59567],[-54.42078,4.00127],[-54.58008,4.95962],[-53.89344,6.004]],[[55.08816,-20.77935],[55.95959,-20.77281],[55.96576,-21.49],[55.09434,-21.49651],[55.08816,-20.77935]],[[44.92054,-12.57363],[45.34826,-12.57029],[45.35274,-13.1163],[44.92502,-13.11963],[44.92054,-12.57363]],[[-178.57728,-14.70582],[-178.42568,-14.00334],[-176.34156,-12.83858],[-175.71534,-12.9189],[-175.91858,-13.58726],[-177.84638,-14.64983],[-178.57728,-14.70582]]],terms_url:"https://openstreetmap.fr/bdortho",terms_text:"BDOrtho IGN",best:true,icon:"http://www.ign.fr/institut/sites/all/themes/ign_institut/logo.png"},{id:"Benin_cotonou_pleiade_2016",name:"Benin: Cotonou Pleiade 2016",type:"tms",template:"https://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[2.31954,6.55745],[2.33645,6.56024],[2.36377,6.56211],[2.36738,6.56068],[2.37777,6.5494],[2.37779,6.53485],[2.36994,6.49332],[2.37038,6.45527],[2.36958,6.45269],[2.36188,6.44177],[2.35392,6.40545],[2.36749,6.4015],[2.39526,6.40072],[2.40128,6.40374],[2.40588,6.40341],[2.42046,6.39383],[2.42485,6.39794],[2.42949,6.39887],[2.43625,6.39628],[2.43958,6.40042],[2.44439,6.40189],[2.45376,6.39899],[2.47145,6.39632],[2.48162,6.39106],[2.49453,6.3874],[2.50893,6.38888],[2.50719,6.39229],[2.5012,6.39162],[2.4963,6.39521],[2.4951,6.40123],[2.49543,6.40401],[2.4983,6.41022],[2.50191,6.41282],[2.51087,6.41321],[2.52219,6.40849],[2.53352,6.40517],[2.5381,6.40961],[2.54111,6.4109],[2.54651,6.41099],[2.54654,6.40651],[2.57639,6.40724],[2.57642,6.41177],[2.58576,6.41196],[2.58868,6.41095],[2.60877,6.39414],[2.6257,6.39488],[2.64555,6.39729],[2.65039,6.39339],[2.65367,6.36823],[2.64312,6.36659],[2.61251,6.36289],[2.56868,6.3607],[2.54683,6.36055],[2.54687,6.35546],[2.50207,6.35461],[2.47064,6.35596],[2.46777,6.35203],[2.46423,6.3502],[2.45254,6.35006],[2.45113,6.34813],[2.44737,6.34629],[2.43757,6.34654],[2.43298,6.33841],[2.43016,6.33707],[2.42245,6.33707],[2.39236,6.34115],[2.39315,6.34115],[2.36528,6.34445],[2.35386,6.3453],[2.34377,6.34458],[2.34094,6.34534],[2.31086,6.36567],[2.28435,6.37465],[2.28147,6.37762],[2.27599,6.39517],[2.27612,6.3982],[2.31529,6.49261],[2.3158,6.55307],[2.31954,6.55745]],[[1.69563,6.25076],[1.7001,6.24712],[1.70418,6.24697],[1.75875,6.25836],[1.77079,6.25995],[1.81712,6.27161],[1.84457,6.27657],[1.85768,6.27945],[1.88843,6.28326],[1.90482,6.28595],[1.90618,6.29435],[1.90083,6.29721],[1.89881,6.29954],[1.89404,6.30085],[1.89048,6.2997],[1.88748,6.29636],[1.88344,6.29622],[1.8697,6.29227],[1.8564,6.29198],[1.85207,6.28675],[1.84991,6.28906],[1.84691,6.29203],[1.84353,6.29333],[1.84041,6.29315],[1.83627,6.29129],[1.8341,6.28733],[1.83417,6.2852],[1.8323,6.28456],[1.82786,6.28644],[1.82182,6.29084],[1.81563,6.28998],[1.81211,6.29143],[1.80758,6.29571],[1.80472,6.29693],[1.80074,6.2971],[1.79776,6.29612],[1.79625,6.29492],[1.7949,6.28965],[1.79641,6.28608],[1.80098,6.28338],[1.79567,6.28013],[1.79156,6.28174],[1.78499,6.28122],[1.78092,6.27753],[1.77588,6.2755],[1.76745,6.27696],[1.75653,6.27496],[1.74833,6.27239],[1.74762,6.27726],[1.74572,6.27938],[1.73948,6.27985],[1.7368,6.27761],[1.73572,6.27892],[1.72902,6.27911],[1.72435,6.27422],[1.72449,6.26786],[1.72556,6.26683],[1.69934,6.26159],[1.69573,6.25726],[1.69563,6.25076]]],best:true},{id:"Berlin-2011",name:"Berlin aerial photography 2011",type:"wms",template:"https://fbinter.stadt-berlin.de/fb/wms/senstadt/k_luftbild2011_20?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[13.48699,52.68076],[13.52584,52.65196],[13.5299,52.64437],[13.54209,52.60921],[13.58109,52.58134],[13.59674,52.55936],[13.63477,52.55121],[13.66547,52.52854],[13.67199,52.50379],[13.65806,52.50372],[13.65796,52.49324],[13.7547,52.4565],[13.76644,52.43884],[13.76627,52.42973],[13.74494,52.39909],[13.65235,52.33133],[13.6417,52.33103],[13.62609,52.35491],[13.59432,52.37455],[13.53198,52.38376],[13.51948,52.39236],[13.48536,52.39227],[13.43552,52.38016],[13.42885,52.37401],[13.38689,52.37388],[13.38642,52.38667],[13.36857,52.38728],[13.37045,52.39349],[13.33968,52.40887],[13.31243,52.39775],[13.30557,52.40452],[13.23622,52.40342],[13.18886,52.40417],[13.17719,52.39067],[13.14859,52.38971],[13.14868,52.38421],[13.11889,52.38385],[13.11935,52.40025],[13.10487,52.40723],[13.07371,52.40668],[13.07367,52.41403],[13.10516,52.47897],[13.11685,52.47881],[13.112,52.55915],[13.11865,52.59156],[13.15251,52.60489],[13.16282,52.60462],[13.21264,52.6321],[13.22139,52.63215],[13.27292,52.66444],[13.31376,52.66442],[13.32714,52.64692],[13.36783,52.6468],[13.39158,52.65382],[13.42728,52.6549],[13.47594,52.68122],[13.48699,52.68076]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2011"},{id:"Berlin-2014",name:"Berlin aerial photography 2014",type:"tms",template:"https://tiles.codefor.de/berlin-2014/{zoom}/{x}/{y}.png",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[13.19746,52.64206],[13.25639,52.64285],[13.2558,52.66101],[13.31391,52.66185],[13.31476,52.64353],[13.37431,52.64462],[13.37386,52.66269],[13.4026,52.663],[13.40332,52.64501],[13.4334,52.64555],[13.43227,52.68001],[13.49082,52.68111],[13.49147,52.66428],[13.52092,52.66457],[13.5216,52.6465],[13.55096,52.6469],[13.55147,52.62938],[13.52219,52.62898],[13.52335,52.59248],[13.58263,52.59329],[13.58307,52.57535],[13.61246,52.57582],[13.61324,52.55784],[13.64268,52.55813],[13.64296,52.5401],[13.67253,52.54048],[13.67375,52.50475],[13.64413,52.5045],[13.64476,52.48608],[13.7037,52.48683],[13.70415,52.46901],[13.73362,52.4692],[13.73399,52.45121],[13.76358,52.45156],[13.76447,52.40209],[13.73546,52.39753],[13.73611,52.37963],[13.70678,52.37935],[13.70731,52.36136],[13.67785,52.36104],[13.67898,52.33017],[13.62102,52.32946],[13.61999,52.36033],[13.59046,52.36007],[13.5901,52.37806],[13.53116,52.37735],[13.53064,52.39525],[13.47168,52.39459],[13.47149,52.4125],[13.44101,52.41219],[13.44257,52.37604],[13.35487,52.37498],[13.35427,52.39306],[13.23667,52.39114],[13.23609,52.40922],[13.17635,52.40836],[13.17752,52.39029],[13.14791,52.38987],[13.14876,52.37459],[13.11971,52.37422],[13.11941,52.38955],[13.08981,52.38899],[13.08938,52.40707],[13.0618,52.40662],[13.06075,52.42408],[13.08842,52.42449],[13.086,52.47853],[13.11546,52.47896],[13.11462,52.49695],[13.1441,52.49729],[13.14332,52.5157],[13.1137,52.51528],[13.11077,52.6047],[13.19862,52.6062],[13.19746,52.64206]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2014"},{id:"Berlin-2015",name:"Berlin aerial photography 2015",type:"tms",template:"https://tiles.codefor.de/berlin-2015/{zoom}/{x}/{y}.png",endDate:"2015-08-03T00:00:00.000Z",startDate:"2015-08-02T00:00:00.000Z",polygon:[[[13.11068,52.59538],[13.13975,52.60527],[13.18355,52.61488],[13.21262,52.63315],[13.24167,52.64282],[13.256,52.65201],[13.27004,52.67021],[13.31368,52.67072],[13.32914,52.66204],[13.32948,52.6529],[13.43284,52.65414],[13.44733,52.6816],[13.50561,52.68244],[13.50654,52.65531],[13.53605,52.65572],[13.5376,52.61991],[13.52229,52.61977],[13.52304,52.60165],[13.59776,52.58469],[13.59865,52.55769],[13.62817,52.55805],[13.64303,52.5492],[13.65813,52.54042],[13.67312,52.53144],[13.67356,52.51358],[13.65913,52.51344],[13.65998,52.48643],[13.68931,52.48687],[13.73386,52.46933],[13.73405,52.46034],[13.76362,52.46068],[13.76431,52.42464],[13.74941,52.42474],[13.75045,52.39778],[13.73585,52.39762],[13.70661,52.37944],[13.707,52.3614],[13.67782,52.36125],[13.66405,52.33395],[13.62073,52.33337],[13.62031,52.36042],[13.58986,52.3781],[13.53149,52.37748],[13.53133,52.38641],[13.44223,52.38484],[13.42813,52.3667],[13.38464,52.3662],[13.35432,52.39301],[13.29537,52.39209],[13.29531,52.40103],[13.19171,52.39957],[13.19222,52.39056],[13.14774,52.38996],[13.14839,52.38095],[13.11964,52.38041],[13.0744,52.40683],[13.07392,52.42426],[13.10275,52.43374],[13.10123,52.47874],[13.11558,52.47897],[13.11068,52.59538]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2015"},{id:"Berlin-2016",name:"Berlin aerial photography 2016",type:"tms",template:"https://tiles.codefor.de/berlin-2016/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2016"},{id:"Berlin-2016-infrared",name:"Berlin aerial photography 2016 (infrared)",type:"tms",template:"https://tiles.codefor.de/berlin-2016i/{zoom}/{x}/{y}.png",endDate:"2016-04-03T00:00:00.000Z",startDate:"2016-04-02T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale Color-Infrarot-Orthophotos 2016"},{id:"Berlin-2017",name:"Berlin aerial photography 2017",type:"tms",template:"https://tiles.codefor.de/berlin-2017/{zoom}/{x}/{y}.png",endDate:"2017-03-28T00:00:00.000Z",startDate:"2017-03-27T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2017"},{id:"Berlin-2018",name:"Berlin aerial photography 2018",type:"tms",template:"https://tiles.codefor.de/berlin-2018/{zoom}/{x}/{y}.png",endDate:"2018-04-07T00:00:00.000Z",startDate:"2018-03-19T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2018"},{id:"Berlin-2019",name:"Berlin aerial photography 2019",type:"tms",template:"https://tiles.codefor.de/berlin-2019/{zoom}/{x}/{y}.png",endDate:"2019-04-06T00:00:00.000Z",startDate:"2019-04-01T00:00:00.000Z",polygon:[[[13.29535,52.392],[13.29502,52.40083],[13.19206,52.39937],[13.19241,52.39035],[13.14839,52.3897],[13.14877,52.38046],[13.11926,52.38001],[13.11888,52.38921],[13.08906,52.40693],[13.07431,52.4067],[13.07356,52.42447],[13.10259,52.43394],[13.10073,52.47912],[13.11534,52.47934],[13.11055,52.59579],[13.13972,52.60527],[13.18403,52.60593],[13.21212,52.63346],[13.27041,52.65222],[13.26973,52.67025],[13.31405,52.67086],[13.32953,52.65323],[13.43315,52.65458],[13.43254,52.67251],[13.44682,52.68189],[13.50593,52.68261],[13.50681,52.65545],[13.53643,52.6558],[13.53757,52.61964],[13.52288,52.61946],[13.52345,52.6017],[13.53842,52.59279],[13.56782,52.59313],[13.59798,52.58464],[13.5988,52.55755],[13.62826,52.55788],[13.65822,52.53124],[13.67314,52.53139],[13.67365,52.51359],[13.65912,52.51344],[13.65989,52.48661],[13.68929,52.48692],[13.7188,52.47807],[13.73406,52.4604],[13.7636,52.46069],[13.76454,52.42482],[13.75027,52.42468],[13.75097,52.39814],[13.70722,52.37923],[13.70772,52.36111],[13.67826,52.36081],[13.67876,52.34302],[13.66428,52.34287],[13.66454,52.33367],[13.62038,52.33319],[13.61959,52.36012],[13.58956,52.37786],[13.5313,52.37719],[13.53103,52.38581],[13.44254,52.38473],[13.42861,52.36674],[13.38418,52.36617],[13.35417,52.39279],[13.29535,52.392]]],terms_text:"Geoportal Berlin/Digitale farbige Orthophotos 2019 (DOP20RGB)",best:true},{id:"Bing",name:"Bing aerial imagery",type:"bing",template:"https://www.bing.com/maps",zoomExtent:[1,22],"default":true,description:"Satellite and aerial imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/Bing.png"},{id:"Bologna-Orthophoto-2017",name:"Bologna ortofoto 2017",type:"tms",template:"https://sitmappe.comune.bologna.it/tms/tileserver/Ortofoto2017/{zoom}/{x}/{y}.png",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[11.22962,44.53077],[11.23184,44.52461],[11.24123,44.52167],[11.23251,44.50893],[11.23572,44.50323],[11.25009,44.50116],[11.24765,44.49644],[11.25708,44.49765],[11.25653,44.49294],[11.29461,44.48981],[11.29676,44.4857],[11.28807,44.47586],[11.29226,44.4609],[11.28447,44.45459],[11.28228,44.42572],[11.29347,44.4276],[11.29254,44.43377],[11.31339,44.42103],[11.32504,44.42274],[11.33695,44.42772],[11.33765,44.43167],[11.3315,44.43273],[11.33453,44.43867],[11.34466,44.43594],[11.34498,44.44093],[11.36235,44.45099],[11.37312,44.44935],[11.37498,44.45897],[11.39499,44.46368],[11.4011,44.46122],[11.39464,44.46803],[11.41577,44.48376],[11.42559,44.4845],[11.42717,44.48921],[11.41727,44.4906],[11.43363,44.51312],[11.42692,44.51532],[11.43034,44.5196],[11.42466,44.51959],[11.41987,44.52934],[11.4143,44.52564],[11.40739,44.52851],[11.41487,44.53999],[11.38871,44.54145],[11.39082,44.54553],[11.36474,44.55253],[11.36414,44.55609],[11.3573,44.5519],[11.34375,44.55333],[11.33589,44.54299],[11.33145,44.54734],[11.31349,44.54722],[11.30929,44.5295],[11.29104,44.53581],[11.28179,44.54851],[11.26911,44.53248],[11.25118,44.55578],[11.24499,44.55569],[11.22962,44.53077]]],terms_url:"http://dati.comune.bologna.it/node/3449",terms_text:"© Comune di Bologna cc-by 4.0 ODbL compliant",best:true},{id:"Bonvillars-2013",name:"Bonvillars Orthophoto 2013",type:"tms",template:"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:"dgu-dof-2011",name:"dgu.hr: Croatia 2011 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/dof/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DOF5_2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112],[16.52327,46.48769],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22566,46.09251],[17.22386,46.08914],[17.22804,46.08377],[17.23785,46.08181],[17.24396,46.07774],[17.25602,46.07008],[17.26277,46.06307],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26276,46.04585],[17.26464,46.04381],[17.26713,46.04103],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.36794,45.99616],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39373,45.95228],[17.40598,45.94033],[17.41117,45.94306],[17.41445,45.93808],[17.42032,45.9457],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87535,45.91744],[18.87849,45.91784],[18.88401,45.92121],[18.90217,45.92088],[18.90522,45.9185],[18.90664,45.91579],[18.90702,45.91314],[18.90512,45.91023],[18.90122,45.90712],[18.89675,45.90573],[18.87764,45.90004],[18.87412,45.89779],[18.87259,45.89554],[18.87288,45.89382],[18.87773,45.88687],[18.88039,45.88448],[18.88648,45.8821],[18.89742,45.87859],[18.90084,45.87634],[18.90322,45.87396],[18.90512,45.86959],[18.90522,45.86687],[18.90284,45.86356],[18.89846,45.86197],[18.89466,45.85912],[18.88543,45.85733],[18.87735,45.85753],[18.86812,45.85806],[18.86071,45.85998],[18.86128,45.85773],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85291,45.81718],[18.85158,45.81307],[18.85272,45.80956],[18.8569,45.80969],[18.86337,45.8077],[18.87478,45.80936],[18.87887,45.81658],[18.87859,45.81996],[18.88172,45.82374],[18.88734,45.82593],[18.89314,45.82798],[18.89999,45.82732],[18.90807,45.82487],[18.91482,45.82209],[18.92176,45.81977],[18.92338,45.81566],[18.92576,45.80465],[18.92224,45.79663],[18.92214,45.78927],[18.92062,45.78781],[18.91682,45.78264],[18.90645,45.77892],[18.89475,45.77886],[18.89352,45.7772],[18.87764,45.78323],[18.87288,45.78264],[18.86527,45.77972],[18.85405,45.77335],[18.85747,45.76665],[18.86556,45.76247],[18.87792,45.75929],[18.89542,45.75351],[18.90769,45.74721],[18.91634,45.74661],[18.92376,45.74827],[18.93004,45.75225],[18.9366,45.75703],[18.94459,45.76114],[18.94687,45.76406],[18.9561,45.7691],[18.96085,45.7691],[18.96932,45.76765],[18.97265,45.76493],[18.97455,45.76008],[18.97293,45.75278],[18.97892,45.74966],[18.98168,45.74674],[18.98301,45.74223],[18.97968,45.73586],[18.97341,45.73061],[18.96313,45.72404],[18.96951,45.72318],[18.9755,45.72185],[18.97968,45.71594],[18.97987,45.70923],[18.9774,45.69881],[18.9716,45.69436],[18.95866,45.69243],[18.95049,45.69595],[18.94906,45.69847],[18.94459,45.70113],[18.9327,45.70233],[18.9289,45.70392],[18.92081,45.7012],[18.92719,45.69475],[18.93308,45.69083],[18.94059,45.6901],[18.94278,45.68897],[18.96447,45.6826],[18.96447,45.6713],[18.97131,45.67117],[18.97103,45.66904],[18.97284,45.66632],[18.97788,45.6594],[18.97826,45.65389],[18.97483,45.64983],[18.9676,45.64644],[18.95847,45.64558],[18.94944,45.64252],[18.94373,45.64192],[18.93841,45.63387],[18.94659,45.63593],[18.95106,45.63228],[18.95496,45.62755],[18.95419,45.6241],[18.94687,45.62064],[18.94735,45.61964],[18.94525,45.61432],[18.94782,45.60793],[18.94763,45.60321],[18.94193,45.59868],[18.92814,45.59562],[18.9249,45.59629],[18.91844,45.59728],[18.91748,45.59376],[18.91273,45.59056],[18.89979,45.57892],[18.90122,45.57133],[18.90731,45.56953],[18.91054,45.56893],[18.91406,45.57066],[18.9171,45.57046],[18.93127,45.56667],[18.93632,45.56114],[18.93527,45.55521],[18.93061,45.55062],[18.93185,45.54722],[18.93736,45.54336],[18.94487,45.54089],[18.94963,45.53863],[18.95733,45.53856],[18.97322,45.53996],[18.98187,45.54169],[18.99091,45.54516],[18.99946,45.55481],[19.00412,45.55987],[19.01059,45.56047],[19.02191,45.55954],[19.03247,45.55361],[19.03313,45.54649],[19.0377,45.53843],[19.04055,45.53663],[19.05624,45.53636],[19.07022,45.53543],[19.08106,45.53157],[19.09676,45.52424],[19.10208,45.52097],[19.10503,45.51651],[19.10712,45.51124],[19.10665,45.50338],[19.10284,45.49598],[19.08962,45.48478],[19.08297,45.48304],[19.06861,45.48231],[19.04892,45.48078],[19.03161,45.48278],[19.01925,45.48838],[19.00907,45.49311],[19.00346,45.49158],[19.00073,45.48768],[18.9988,45.48091],[18.99756,45.47438],[18.99775,45.47277],[18.99366,45.47284],[18.99271,45.4547],[18.99595,45.44796],[18.99965,45.44316],[19.00707,45.43828],[19.01287,45.43582],[19.01944,45.43375],[19.0259,45.43028],[19.03018,45.42547],[19.02952,45.41779],[19.03418,45.41766],[19.03342,45.40972],[19.02828,45.40397],[19.02258,45.40017],[19.01506,45.39843],[19.0007,45.3983],[18.98748,45.39496],[18.97873,45.39129],[18.97331,45.38815],[18.97303,45.38127],[18.97736,45.37577],[18.9832,45.37145],[18.99129,45.36797],[19.01335,45.35942],[19.02258,45.35507],[19.03037,45.35227],[19.05016,45.34993],[19.05577,45.34766],[19.06994,45.34679],[19.08915,45.34237],[19.09695,45.33749],[19.10227,45.33021],[19.10094,45.30821],[19.10513,45.30834],[19.1095,45.30091],[19.11661,45.29513],[19.12358,45.29175],[19.13147,45.28914],[19.15753,45.28104],[19.16818,45.27944],[19.17693,45.27529],[19.17636,45.27054],[19.19129,45.27027],[19.22001,45.26619],[19.22638,45.26746],[19.2378,45.27094],[19.24303,45.27388],[19.24683,45.27904],[19.25492,45.28185],[19.26129,45.28305],[19.26699,45.28238],[19.27384,45.2793],[19.27679,45.27542],[19.27717,45.27127],[19.27536,45.26672],[19.26747,45.26009],[19.26509,45.25675],[19.26176,45.25126],[19.26243,45.24597],[19.28383,45.24182],[19.32177,45.23753],[19.35934,45.23586],[19.42202,45.23666],[19.42439,45.22695],[19.42905,45.21924],[19.43799,45.20899],[19.44988,45.19546],[19.44284,45.19217],[19.43685,45.19177],[19.43666,45.18902],[19.434,45.18708],[19.43057,45.18654],[19.43771,45.1726],[19.43162,45.16858],[19.41821,45.16415],[19.41412,45.16542],[19.4048,45.16797],[19.40204,45.16831],[19.38749,45.17159],[19.38492,45.17039],[19.37484,45.17025],[19.37256,45.16878],[19.364,45.172],[19.36181,45.17153],[19.362,45.16878],[19.35658,45.16797],[19.35639,45.16308],[19.34736,45.16341],[19.34555,45.17099],[19.32748,45.17649],[19.32986,45.18138],[19.32682,45.18393],[19.31883,45.19975],[19.31769,45.20625],[19.29857,45.20397],[19.28602,45.20377],[19.28735,45.19881],[19.29125,45.19573],[19.2882,45.19217],[19.2844,45.19211],[19.29619,45.17964],[19.2961,45.17642],[19.298,45.1728],[19.298,45.16998],[19.29362,45.16965],[19.29144,45.17079],[19.28915,45.16938],[19.28459,45.16925],[19.27384,45.17045],[19.27137,45.17394],[19.24769,45.17099],[19.24626,45.17568],[19.23675,45.17374],[19.23,45.17991],[19.22619,45.18339],[19.21992,45.18453],[19.21364,45.18587],[19.20955,45.18922],[19.20365,45.19137],[19.18948,45.19955],[19.1852,45.20022],[19.17893,45.19854],[19.1756,45.20035],[19.17237,45.19807],[19.16837,45.19043],[19.17741,45.18788],[19.18749,45.18487],[19.19709,45.17897],[19.19034,45.1667],[19.16495,45.14537],[19.14222,45.12726],[19.13879,45.12894],[19.11835,45.13263],[19.10988,45.13719],[19.08905,45.14323],[19.09,45.13772],[19.08363,45.13356],[19.08401,45.13122],[19.08011,45.12732],[19.07888,45.11464],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50163,45.21198],[16.49998,45.21198],[16.49992,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.33056,44.99762],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57584,42.93452],[17.5649,42.93716],[17.56195,42.93632],[17.55758,42.9348],[17.55283,42.93751],[17.55068,42.9375],[17.54079,42.92978],[17.55227,42.92245],[17.57828,42.91352],[17.60211,42.9037],[17.61379,42.90241],[17.61921,42.89785],[17.62797,42.89436],[17.63398,42.88891],[17.64304,42.88436],[17.64799,42.88926],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.53683,42.39958],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.71107,44.9351],[13.7123,44.94594],[13.72398,44.94888],[13.72443,44.94412],[13.74003,44.94462],[13.74596,44.94366],[13.77423,44.9216],[13.79362,44.92123],[13.7959,44.92877],[13.78487,44.93867],[13.77079,44.95919],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50447,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.50549,45.46079],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.5136,45.5099],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.29963,46.3815]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2014-2016",name:"dgu.hr: Croatia 2014-2016 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/inspire/orthophoto_2014-2016/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2016-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[16.52249,46.49112],[16.52243,46.48295],[16.53499,46.48387],[16.54437,46.48076],[16.55592,46.4841],[16.57032,46.47695],[16.58004,46.47638],[16.59578,46.47995],[16.60968,46.47961],[16.61939,46.47165],[16.62559,46.47188],[16.63262,46.46934],[16.64719,46.46773],[16.66846,46.46184],[16.69994,46.42007],[16.70966,46.40541],[16.7192,46.40206],[16.73511,46.4046],[16.74231,46.40217],[16.74466,46.39848],[16.74466,46.38981],[16.75052,46.39224],[16.75789,46.39097],[16.7609,46.38566],[16.76509,46.38843],[16.77296,46.38877],[16.77899,46.38473],[16.78502,46.38947],[16.79624,46.39028],[16.80444,46.38739],[16.80896,46.3808],[16.81231,46.38011],[16.82069,46.37688],[16.82873,46.37768],[16.83743,46.37895],[16.84329,46.37399],[16.84329,46.36786],[16.85234,46.36451],[16.86172,46.35873],[16.86808,46.35769],[16.87361,46.35365],[16.86959,46.34775],[16.87277,46.34868],[16.88148,46.3407],[16.88583,46.33434],[16.87897,46.32544],[16.88198,46.32093],[16.88047,46.31364],[16.88365,46.306],[16.89019,46.30253],[16.89119,46.28633],[16.89119,46.28228],[16.90509,46.27789],[16.91263,46.26816],[16.91732,46.26434],[16.92519,46.26365],[16.93858,46.25774],[16.94344,46.25161],[16.95399,46.24442],[16.96287,46.24338],[16.96638,46.24547],[16.97559,46.24616],[16.98012,46.24049],[16.97777,46.2311],[16.97844,46.22821],[16.98983,46.22821],[16.99569,46.22612],[17.00641,46.22635],[17.05363,46.20631],[17.05748,46.20631],[17.06921,46.20492],[17.0749,46.19564],[17.07808,46.19286],[17.08327,46.19135],[17.08646,46.19344],[17.09902,46.1917],[17.10705,46.18857],[17.10722,46.18428],[17.11208,46.18185],[17.1238,46.18266],[17.13017,46.17918],[17.12866,46.17304],[17.13084,46.17234],[17.1377,46.17547],[17.15294,46.17617],[17.16198,46.17292],[17.16366,46.16167],[17.17153,46.16028],[17.18375,46.15227],[17.19179,46.13522],[17.19062,46.13092],[17.18342,46.12698],[17.18643,46.1199],[17.18392,46.11177],[17.21005,46.11699],[17.21624,46.11734],[17.22194,46.11398],[17.2231,46.10833],[17.21815,46.10213],[17.23366,46.10329],[17.23885,46.09946],[17.23751,46.09447],[17.22813,46.0904],[17.22529,46.08436],[17.23785,46.08181],[17.24396,46.07774],[17.24429,46.07071],[17.24488,46.06758],[17.25526,46.06764],[17.25669,46.06485],[17.25434,46.06183],[17.26908,46.06142],[17.27561,46.05758],[17.27594,46.05276],[17.26255,46.04282],[17.26673,46.03672],[17.28817,46.03556],[17.29813,46.03422],[17.30173,46.02643],[17.29629,46.02004],[17.27795,46.01771],[17.2762,46.01533],[17.26272,46.01265],[17.27092,46.01207],[17.2767,46.00759],[17.28356,46.00457],[17.29612,46.00643],[17.30182,46.00707],[17.30902,46.00335],[17.31011,45.99834],[17.30843,45.99154],[17.3153,45.99404],[17.32267,45.99439],[17.32912,45.99828],[17.33816,45.99951],[17.34377,45.99631],[17.34829,45.9863],[17.35231,45.97944],[17.35532,45.97792],[17.35591,45.98624],[17.35825,45.9927],[17.36194,45.99514],[17.37366,45.99398],[17.37936,45.99119],[17.38053,45.9838],[17.37308,45.97583],[17.38162,45.97146],[17.38748,45.96867],[17.39694,45.9643],[17.39635,45.96093],[17.39317,45.95522],[17.39049,45.9501],[17.39351,45.94428],[17.39024,45.93723],[17.39426,45.93514],[17.40657,45.94236],[17.41117,45.94306],[17.41511,45.9409],[17.41704,45.93403],[17.42566,45.93158],[17.43219,45.9324],[17.42474,45.93729],[17.42156,45.94498],[17.42507,45.95051],[17.43638,45.95377],[17.44835,45.95377],[17.4594,45.94905],[17.46778,45.94725],[17.49198,45.94556],[17.51517,45.94276],[17.53301,45.93793],[17.55947,45.9423],[17.57404,45.93991],[17.59313,45.92582],[17.61306,45.91586],[17.62863,45.90607],[17.6401,45.88701],[17.65249,45.86655],[17.65316,45.85507],[17.66053,45.84521],[17.67025,45.83833],[17.68565,45.84148],[17.70081,45.84072],[17.7106,45.83547],[17.72744,45.83477],[17.74937,45.83074],[17.75473,45.82438],[17.76394,45.81849],[17.77374,45.82],[17.78756,45.81971],[17.79585,45.81283],[17.8043,45.80833],[17.81075,45.80734],[17.8146,45.81172],[17.82339,45.81359],[17.83202,45.81131],[17.83629,45.80483],[17.83713,45.79339],[17.84341,45.78866],[17.85262,45.78702],[17.85655,45.78381],[17.85831,45.77762],[17.85957,45.77324],[17.86526,45.77067],[17.86811,45.77862],[17.88276,45.78755],[17.89457,45.79321],[17.90763,45.79537],[17.9196,45.7914],[17.92873,45.78948],[17.93518,45.79181],[17.94556,45.79485],[17.95352,45.7959],[17.9598,45.79461],[17.96901,45.79251],[17.97369,45.79269],[17.98282,45.79707],[18.00359,45.7973],[18.00719,45.79485],[18.01983,45.78422],[18.03465,45.77908],[18.04763,45.77762],[18.06028,45.77447],[18.08054,45.76834],[18.09335,45.76904],[18.10507,45.77435],[18.10951,45.78241],[18.1168,45.79],[18.12374,45.79257],[18.13538,45.79123],[18.14501,45.79175],[18.15757,45.78837],[18.1631,45.78183],[18.17055,45.77914],[18.17826,45.78767],[18.18763,45.79041],[18.19576,45.78977],[18.2048,45.78551],[18.21652,45.7837],[18.22933,45.78305],[18.2362,45.7792],[18.24633,45.76507],[18.24993,45.76547],[18.25906,45.76425],[18.27706,45.75852],[18.29054,45.76325],[18.29531,45.76372],[18.3,45.76296],[18.30871,45.75998],[18.31491,45.75952],[18.33249,45.75771],[18.34028,45.75291],[18.35033,45.76682],[18.35987,45.77511],[18.36506,45.77628],[18.3803,45.76781],[18.38533,45.76764],[18.39521,45.76466],[18.39864,45.75887],[18.40057,45.75952],[18.40475,45.75595],[18.403,45.74766],[18.41036,45.74222],[18.41849,45.74392],[18.42728,45.74479],[18.43599,45.7417],[18.44336,45.74187],[18.44344,45.75677],[18.44051,45.76033],[18.44922,45.77132],[18.45742,45.77248],[18.46504,45.76915],[18.47743,45.77003],[18.48028,45.78638],[18.48413,45.79491],[18.49401,45.79858],[18.50314,45.79736],[18.50858,45.7931],[18.5095,45.78854],[18.51612,45.78784],[18.52893,45.79561],[18.53278,45.79619],[18.53756,45.79567],[18.54308,45.79806],[18.54861,45.79683],[18.55212,45.79695],[18.55539,45.80442],[18.55757,45.80646],[18.57021,45.80425],[18.56829,45.8151],[18.58704,45.82129],[18.59885,45.82852],[18.59617,45.83576],[18.61719,45.84118],[18.61392,45.84696],[18.60906,45.85372],[18.62229,45.85938],[18.62334,45.87402],[18.62736,45.8792],[18.6333,45.87929],[18.63904,45.87186],[18.64775,45.87539],[18.63829,45.88288],[18.6372,45.88652],[18.63628,45.88972],[18.64402,45.89465],[18.6521,45.89812],[18.65708,45.89829],[18.65801,45.89963],[18.65587,45.90351],[18.6552,45.91536],[18.65566,45.91755],[18.65729,45.91935],[18.66462,45.91938],[18.67027,45.9149],[18.67299,45.91696],[18.68869,45.91895],[18.69954,45.92049],[18.70502,45.92093],[18.70703,45.92066],[18.70883,45.9183],[18.71365,45.91391],[18.72265,45.90788],[18.73852,45.90371],[18.74852,45.90272],[18.75137,45.90292],[18.75422,45.90211],[18.75438,45.89972],[18.75765,45.89951],[18.75962,45.89855],[18.76439,45.89447],[18.76393,45.89197],[18.77427,45.89136],[18.78034,45.88905],[18.78557,45.88378],[18.79064,45.88142],[18.79801,45.88151],[18.80609,45.88171],[18.80831,45.89101],[18.80814,45.89579],[18.80374,45.90144],[18.80274,45.90365],[18.81521,45.91536],[18.82036,45.91772],[18.82623,45.91743],[18.83033,45.90791],[18.86248,45.91303],[18.85984,45.91793],[18.86001,45.92116],[18.86257,45.92299],[18.86617,45.92296],[18.86918,45.9216],[18.87161,45.92017],[18.87237,45.91897],[18.87639,45.85638],[18.86651,45.85714],[18.86021,45.85912],[18.8592,45.85713],[18.86165,45.84448],[18.86005,45.83211],[18.85784,45.82581],[18.85114,45.81691],[18.85289,45.81577],[18.85373,45.81102],[18.8565,45.8114],[18.86248,45.80877],[18.87307,45.81026],[18.87617,45.8189],[18.87925,45.81794],[18.8774,45.78247],[18.87328,45.78159],[18.866,45.77791],[18.85574,45.7726],[18.85943,45.76673],[18.86592,45.76337],[18.87687,45.76008],[18.87611,45.74542],[18.90636,45.74482],[18.92405,45.74455],[18.92186,45.67243],[18.92709,45.66572],[18.92899,45.63999],[18.92814,45.59562],[18.92507,45.595],[18.91427,45.59755],[18.90833,45.59295],[18.90117,45.57833],[18.90242,45.57188],[18.90808,45.57012],[18.91084,45.56998],[18.91282,45.57206],[18.9171,45.57046],[18.92994,45.5682],[18.92709,45.55168],[18.9269,45.5301],[19.00355,45.53163],[19.00764,45.49465],[19.00317,45.49238],[19.00073,45.48768],[18.99591,45.48099],[18.99537,45.47391],[18.99524,45.47183],[18.99585,45.46597],[18.99509,45.46117],[18.99385,45.45303],[18.98625,45.4531],[18.98482,45.41993],[18.9852,45.4196],[18.9852,45.41719],[18.98758,45.41312],[18.98678,45.39609],[18.97879,45.39221],[18.97435,45.38718],[18.9741,45.38142],[18.97736,45.37577],[18.9832,45.37145],[18.98063,45.36516],[18.97769,45.36062],[18.97816,45.35728],[18.98187,45.3534],[18.97987,45.34745],[19.05577,45.34766],[19.05662,45.34565],[19.06927,45.34532],[19.06823,45.33161],[19.1036,45.33061],[19.10227,45.31021],[19.1079,45.30137],[19.11661,45.29513],[19.11739,45.28847],[19.13147,45.28914],[19.15525,45.27971],[19.1543,45.27328],[19.15905,45.22822],[19.15886,45.19398],[19.16038,45.18822],[19.15972,45.1844],[19.16324,45.18111],[19.16362,45.16268],[19.11207,45.16375],[19.11205,45.14601],[19.09091,45.14651],[19.07065,45.14698],[19.07503,45.14063],[19.09072,45.14058],[19.09117,45.1372],[19.0848,45.13299],[19.08456,45.13096],[19.08109,45.12669],[19.08045,45.11535],[19.08608,45.1136],[19.08767,45.11224],[19.0881,45.11083],[19.0876,45.11014],[19.08715,45.10956],[19.08898,45.10956],[19.09046,45.10885],[19.09671,45.10227],[19.09659,45.10033],[19.09766,45.09888],[19.09785,45.09754],[19.09699,45.09516],[19.09533,45.09269],[19.09797,45.09007],[19.10142,45.08705],[19.10287,45.08504],[19.10727,45.08324],[19.10838,45.08193],[19.10857,45.08104],[19.10967,45.07943],[19.10929,45.07809],[19.10631,45.07087],[19.09961,45.06035],[19.10408,45.05765],[19.10513,45.05629],[19.1076,45.05431],[19.10929,45.05206],[19.10952,45.05083],[19.10869,45.04876],[19.10612,45.04467],[19.10256,45.04021],[19.0979,45.03685],[19.09856,45.03544],[19.10073,45.0349],[19.1017,45.03432],[19.10237,45.03334],[19.10237,45.03242],[19.10158,45.0303],[19.10275,45.0283],[19.10275,45.02754],[19.10194,45.02595],[19.1008,45.02523],[19.10075,45.02354],[19.10173,45.0218],[19.10303,45.01546],[19.1042,45.01444],[19.10496,45.01316],[19.10532,45.01217],[19.10586,45.01163],[19.10612,45.01045],[19.10555,45.00926],[19.09928,45.00411],[19.09583,44.99369],[19.09483,44.99266],[19.09407,44.99246],[19.08882,44.99147],[19.08822,44.99038],[19.08202,44.98463],[19.07413,44.9833],[19.06536,44.98083],[19.06192,44.98015],[19.05936,44.97872],[19.05765,44.97822],[19.05879,44.97795],[19.06143,44.97743],[19.06582,44.97561],[19.07001,44.9756],[19.07517,44.9743],[19.08218,44.97666],[19.08708,44.97669],[19.09003,44.97608],[19.0944,44.97351],[19.09925,44.974],[19.10253,44.9737],[19.10708,44.97282],[19.11347,44.97662],[19.11768,44.97884],[19.12353,44.97955],[19.13071,44.98231],[19.13375,44.98345],[19.14008,44.98338],[19.14369,44.98234],[19.14854,44.97985],[19.15235,44.97706],[19.15149,44.96067],[19.15491,44.96078],[19.15682,44.96014],[19.15858,44.9566],[19.16024,44.95324],[19.15929,44.95108],[19.15605,44.94954],[19.15092,44.94745],[19.14778,44.94361],[19.14726,44.94015],[19.14459,44.93755],[19.13789,44.93624],[19.12648,44.93587],[19.11749,44.93099],[19.10831,44.9287],[19.10089,44.9256],[19.09172,44.92308],[19.08877,44.92119],[19.09129,44.91981],[19.09204,44.9164],[19.09072,44.91415],[19.08767,44.91358],[19.0901,44.9122],[19.0911,44.91042],[19.08649,44.90499],[19.08368,44.90361],[19.07698,44.90281],[19.07384,44.90065],[19.07103,44.89893],[19.06566,44.89843],[19.05781,44.90176],[19.04935,44.90678],[19.04193,44.91021],[19.03711,44.9148],[19.03284,44.91841],[19.02513,44.91871],[19.00562,44.91331],[18.99675,44.90679],[18.99708,44.89801],[19.01031,44.88508],[19.02756,44.85927],[19.02647,44.85137],[18.996,44.84823],[18.96225,44.84597],[18.92499,44.8468],[18.87835,44.84817],[18.85055,44.849],[18.83925,44.8547],[18.81915,44.87339],[18.78942,44.88449],[18.7633,44.8992],[18.75635,44.90792],[18.76338,44.91978],[18.74655,44.9263],[18.74471,44.93786],[18.74764,44.9455],[18.76271,44.94894],[18.78398,44.93857],[18.79579,44.93987],[18.79813,44.94485],[18.78214,44.95469],[18.7782,44.97596],[18.78901,44.99224],[18.78214,44.99165],[18.77251,44.99485],[18.76163,44.99591],[18.74613,44.98987],[18.73659,44.98934],[18.72679,44.99017],[18.72026,44.99728],[18.72621,45.00622],[18.73282,45.01545],[18.71892,45.02054],[18.71155,45.03475],[18.70109,45.03439],[18.68861,45.03764],[18.66466,45.05817],[18.6588,45.05326],[18.64725,45.05421],[18.64063,45.05776],[18.60864,45.05805],[18.59935,45.06409],[18.59843,45.06971],[18.60856,45.07627],[18.60211,45.07645],[18.58771,45.08384],[18.58704,45.06846],[18.57691,45.06154],[18.56703,45.06551],[18.56401,45.07432],[18.55598,45.07065],[18.54434,45.06137],[18.54467,45.05539],[18.54057,45.0409],[18.53161,45.03995],[18.52474,45.04303],[18.526,45.05155],[18.52299,45.05634],[18.51419,45.05344],[18.48983,45.05516],[18.46814,45.05995],[18.44804,45.07639],[18.43749,45.08265],[18.43088,45.0985],[18.41924,45.10518],[18.40015,45.10547],[18.36875,45.10269],[18.33676,45.09808],[18.32169,45.09696],[18.3098,45.10376],[18.3021,45.11191],[18.28929,45.10996],[18.27631,45.11174],[18.2722,45.12781],[18.26718,45.13318],[18.25755,45.13614],[18.23561,45.13194],[18.21493,45.12202],[18.21309,45.11705],[18.2161,45.10919],[18.22473,45.10287],[18.22699,45.09856],[18.22046,45.08827],[18.21192,45.08177],[18.19994,45.07562],[18.18286,45.07343],[18.16695,45.07396],[18.15062,45.08153],[18.1394,45.08183],[18.12115,45.07621],[18.1106,45.07863],[18.10139,45.08484],[18.08967,45.09714],[18.07652,45.10057],[18.06856,45.10352],[18.06664,45.10772],[18.06856,45.1115],[18.08054,45.119],[18.07242,45.13182],[18.06597,45.13909],[18.05709,45.13962],[18.04822,45.13631],[18.04462,45.12385],[18.03733,45.12196],[18.02862,45.12432],[18.02126,45.13868],[18.01732,45.14618],[18.0097,45.14872],[17.9948,45.14488],[17.9824,45.13543],[17.98106,45.12414],[17.97202,45.11292],[17.96105,45.10843],[17.94146,45.10813],[17.93576,45.1037],[17.9366,45.09483],[17.94221,45.08626],[17.94171,45.08141],[17.93024,45.07438],[17.90654,45.05882],[17.88418,45.04794],[17.86593,45.04114],[17.85061,45.04019],[17.83545,45.04327],[17.80824,45.05663],[17.78848,45.07308],[17.78504,45.0768],[17.77709,45.08124],[17.76905,45.08112],[17.76528,45.0807],[17.75616,45.08254],[17.73238,45.09584],[17.71747,45.10394],[17.7091,45.11032],[17.70047,45.11138],[17.68808,45.11357],[17.6777,45.12426],[17.67225,45.12934],[17.66363,45.13094],[17.65341,45.1281],[17.63483,45.11971],[17.62989,45.1151],[17.62629,45.1102],[17.61599,45.10967],[17.61063,45.106],[17.6005,45.10181],[17.59045,45.10281],[17.58358,45.10843],[17.57839,45.11256],[17.57445,45.11286],[17.5696,45.10654],[17.55729,45.10417],[17.54992,45.10701],[17.55059,45.11321],[17.55277,45.12184],[17.5495,45.12663],[17.54414,45.12544],[17.54582,45.11835],[17.54372,45.11292],[17.53594,45.10665],[17.52187,45.10488],[17.51283,45.10494],[17.50362,45.11109],[17.49801,45.10837],[17.48821,45.10589],[17.47757,45.10795],[17.47347,45.11239],[17.47699,45.11894],[17.48746,45.12515],[17.48821,45.13283],[17.47456,45.12267],[17.4589,45.12249],[17.44768,45.12456],[17.44408,45.1281],[17.44425,45.13265],[17.45086,45.14399],[17.44827,45.15627],[17.44509,45.15769],[17.44098,45.15639],[17.43814,45.14582],[17.4275,45.13655],[17.41754,45.13253],[17.40607,45.13141],[17.38312,45.13407],[17.35968,45.13608],[17.3426,45.13809],[17.32644,45.14895],[17.32225,45.15604],[17.32752,45.16295],[17.30927,45.16159],[17.30525,45.16619],[17.30659,45.17375],[17.29554,45.17233],[17.28264,45.17186],[17.27318,45.18585],[17.26824,45.17404],[17.26422,45.17257],[17.26389,45.16619],[17.25903,45.15332],[17.25141,45.1444],[17.2463,45.14263],[17.23492,45.14376],[17.22244,45.14257],[17.2144,45.14381],[17.2031,45.14659],[17.19096,45.14328],[17.17932,45.14352],[17.16542,45.14694],[17.14055,45.16047],[17.13125,45.16295],[17.10957,45.17334],[17.10262,45.17475],[17.06619,45.18904],[17.0605,45.196],[17.0507,45.19736],[17.04065,45.20414],[17.03437,45.21983],[17.02382,45.21087],[17.01771,45.20951],[17.00992,45.21081],[17.00415,45.21399],[17.00314,45.21889],[17.00004,45.21783],[16.99201,45.21889],[16.9864,45.22066],[16.97911,45.22573],[16.97559,45.22443],[16.96923,45.22384],[16.96362,45.22644],[16.95943,45.22844],[16.95583,45.22886],[16.95031,45.22514],[16.94361,45.22431],[16.93875,45.22426],[16.93264,45.22703],[16.93088,45.23682],[16.93054,45.24206],[16.9344,45.24878],[16.94637,45.25321],[16.94897,45.25468],[16.94913,45.25668],[16.93699,45.26158],[16.93465,45.26965],[16.93331,45.27307],[16.9282,45.27307],[16.92351,45.27142],[16.92259,45.26723],[16.91782,45.26275],[16.91874,45.25975],[16.91681,45.25509],[16.91237,45.25061],[16.90442,45.24749],[16.89814,45.24713],[16.89429,45.24401],[16.88658,45.24295],[16.88809,45.24136],[16.88525,45.23428],[16.88742,45.23062],[16.88684,45.22644],[16.88432,45.22296],[16.88508,45.22137],[16.88181,45.21647],[16.87737,45.216],[16.8721,45.21718],[16.86833,45.21635],[16.86724,45.21193],[16.86322,45.20821],[16.85778,45.20225],[16.85292,45.20115],[16.84775,45.20171],[16.84623,45.1975],[16.84723,45.19526],[16.84706,45.19367],[16.84438,45.19148],[16.84116,45.18842],[16.83484,45.18547],[16.8286,45.18402],[16.82178,45.1824],[16.81516,45.18187],[16.80691,45.18254],[16.80273,45.18299],[16.79109,45.18603],[16.77706,45.18948],[16.77124,45.19119],[16.76329,45.1957],[16.75965,45.19703],[16.75328,45.19665],[16.74889,45.1975],[16.73972,45.20143],[16.7326,45.20461],[16.73051,45.20467],[16.72611,45.20258],[16.72063,45.20205],[16.71615,45.20184],[16.71121,45.19951],[16.70409,45.1947],[16.69911,45.1934],[16.69429,45.1934],[16.68939,45.19491],[16.68349,45.19727],[16.67809,45.19871],[16.67051,45.19857],[16.66649,45.19945],[16.66168,45.20208],[16.65628,45.20452],[16.65125,45.20441],[16.64543,45.20517],[16.6343,45.21163],[16.63015,45.21113],[16.62802,45.21116],[16.62509,45.2124],[16.62278,45.21467],[16.62107,45.21718],[16.61941,45.21939],[16.61709,45.22137],[16.61451,45.22243],[16.60744,45.22516],[16.60455,45.22697],[16.60028,45.22828],[16.59808,45.22881],[16.59699,45.22877],[16.59356,45.22654],[16.59218,45.22426],[16.58755,45.22213],[16.58255,45.22004],[16.5792,45.21948],[16.57514,45.21974],[16.57133,45.2196],[16.56785,45.21976],[16.56528,45.21976],[16.56237,45.21855],[16.55883,45.21705],[16.55559,45.21654],[16.55249,45.21641],[16.54954,45.21688],[16.54772,45.21712],[16.54445,45.21777],[16.54198,45.21876],[16.53884,45.22048],[16.53725,45.22206],[16.5366,45.22433],[16.53589,45.22452],[16.53308,45.22445],[16.53074,45.22431],[16.52186,45.22151],[16.51946,45.21977],[16.5151,45.21845],[16.51263,45.21647],[16.50999,45.21581],[16.50512,45.21274],[16.50382,45.21198],[16.50337,45.2111],[16.50043,45.20883],[16.49773,45.2078],[16.49602,45.20668],[16.49455,45.20057],[16.49331,45.19698],[16.49086,45.19326],[16.48932,45.18999],[16.48662,45.1876],[16.47885,45.18086],[16.48026,45.17359],[16.48235,45.16972],[16.48439,45.16663],[16.48354,45.16026],[16.48149,45.15775],[16.47655,45.15548],[16.47612,45.15302],[16.47225,45.14839],[16.46768,45.13997],[16.46448,45.13997],[16.46184,45.13997],[16.46178,45.13692],[16.45031,45.13174],[16.44718,45.13001],[16.44457,45.12618],[16.43825,45.1231],[16.43392,45.12189],[16.42988,45.12175],[16.42383,45.1219],[16.42379,45.11924],[16.41105,45.11716],[16.3992,45.11095],[16.39792,45.10632],[16.40686,45.10061],[16.40786,45.09796],[16.40233,45.09449],[16.40087,45.09219],[16.4002,45.08792],[16.39641,45.08485],[16.39117,45.08037],[16.3924,45.07244],[16.39179,45.06563],[16.38817,45.06067],[16.38757,45.05236],[16.38594,45.04977],[16.38165,45.04794],[16.37718,45.04842],[16.37419,45.04278],[16.3686,45.03969],[16.36511,45.03522],[16.36345,45.03153],[16.3613,45.03023],[16.36354,45.02531],[16.36122,45.01706],[16.36268,45.01172],[16.36268,45.00928],[16.35984,45.00693],[16.3583,45.00232],[16.35817,45.00121],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.32583,44.99875],[16.32279,44.99882],[16.31546,44.99583],[16.3062,44.9957],[16.30148,44.99502],[16.29511,44.99478],[16.29188,44.99293],[16.28569,44.9923],[16.28427,44.99441],[16.28042,45.00406],[16.27552,45.00208],[16.26948,45.00393],[16.26777,45.01237],[16.26682,45.01324],[16.26468,45.01328],[16.26292,45.00958],[16.25802,45.00776],[16.25426,45.00796],[16.25155,45.01032],[16.24628,45.01139],[16.24152,45.01012],[16.22578,45.01489],[16.22497,45.02141],[16.22131,45.02161],[16.20971,45.02578],[16.20619,45.02924],[16.19625,45.02733],[16.19069,45.02823],[16.18707,45.03149],[16.18141,45.04477],[16.174,45.04836],[16.17124,45.05115],[16.17176,45.05656],[16.16962,45.06136],[16.16515,45.06626],[16.16715,45.07026],[16.16192,45.07231],[16.15322,45.07946],[16.14489,45.08081],[16.13857,45.0851],[16.13643,45.08524],[16.13472,45.08359],[16.13025,45.08332],[16.12573,45.08527],[16.12159,45.0893],[16.10628,45.08964],[16.09853,45.09705],[16.09282,45.10024],[16.08617,45.10185],[16.08065,45.10994],[16.08021,45.12308],[16.07989,45.13195],[16.07442,45.1393],[16.06672,45.14359],[16.05821,45.15315],[16.05136,45.15731],[16.0467,45.16804],[16.04199,45.17042],[16.04152,45.17619],[16.02321,45.17733],[16.01612,45.17582],[16.01137,45.178],[16.00914,45.18458],[16.02074,45.19412],[16.0224,45.19757],[16.01731,45.20001],[16.01122,45.21415],[16.00666,45.21352],[16.00209,45.21414],[15.99729,45.21784],[15.99299,45.21741],[15.98569,45.22062],[15.97876,45.2257],[15.97485,45.22537],[15.96924,45.219],[15.9602,45.21757],[15.9561,45.21445],[15.94777,45.21067],[15.91799,45.21049],[15.91602,45.21084],[15.91676,45.21425],[15.92107,45.22075],[15.92048,45.22437],[15.91837,45.22313],[15.91641,45.22182],[15.91103,45.22092],[15.90497,45.22186],[15.90076,45.22427],[15.89795,45.22354],[15.89976,45.21924],[15.89843,45.21553],[15.89596,45.21355],[15.88727,45.21269],[15.88478,45.21492],[15.87527,45.21472],[15.87009,45.21666],[15.8601,45.21395],[15.85538,45.21374],[15.84351,45.22157],[15.83464,45.21608],[15.83649,45.21177],[15.82967,45.20474],[15.82342,45.20258],[15.81405,45.20607],[15.81303,45.20303],[15.80651,45.20025],[15.80658,45.1968],[15.8047,45.19499],[15.79767,45.19164],[15.79069,45.19066],[15.78682,45.18517],[15.78216,45.18249],[15.78188,45.17495],[15.78039,45.17366],[15.77476,45.17354],[15.77487,45.16994],[15.77289,45.16881],[15.77021,45.16383],[15.77392,45.15274],[15.78071,45.14703],[15.78012,45.14014],[15.78483,45.1394],[15.7871,45.13525],[15.78302,45.1302],[15.78911,45.12464],[15.79444,45.12179],[15.79588,45.11433],[15.78558,45.10442],[15.78341,45.09297],[15.77534,45.09164],[15.77927,45.08366],[15.77597,45.08369],[15.776,45.08188],[15.77587,45.07994],[15.77589,45.07704],[15.77534,45.07382],[15.7611,45.06754],[15.75772,45.06344],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.90685,44.74324],[15.9156,44.73624],[15.92568,44.72287],[15.93043,44.71939],[15.93329,44.71273],[15.93666,44.71455],[15.95526,44.71499],[15.95896,44.71307],[15.96058,44.70783],[15.96139,44.70394],[15.95825,44.70009],[15.9622,44.69583],[15.96662,44.69482],[15.96914,44.69282],[15.97323,44.68336],[15.97256,44.67954],[15.97946,44.67328],[15.98431,44.67325],[15.9894,44.67156],[15.9932,44.66878],[15.9971,44.66608],[15.99957,44.66286],[16.01389,44.6586],[16.02287,44.66019],[16.03025,44.65833],[16.03586,44.65529],[16.03705,44.64872],[16.04423,44.64061],[16.04603,44.63739],[16.0476,44.63045],[16.04912,44.6293],[16.05274,44.62978],[16.05823,44.62811],[16.0592,44.627],[16.05963,44.61248],[16.06263,44.60805],[16.05868,44.60361],[16.05298,44.60341],[16.05084,44.60046],[16.05531,44.59799],[16.05564,44.59508],[16.04751,44.58986],[16.04499,44.58634],[16.03595,44.58438],[16.02497,44.58563],[16.02135,44.58329],[16.02316,44.5732],[16.02416,44.56754],[16.02335,44.56378],[16.04917,44.54877],[16.05778,44.54162],[16.08056,44.53881],[16.09458,44.53528],[16.11056,44.52942],[16.12673,44.51464],[16.12792,44.50341],[16.13543,44.49378],[16.13662,44.48788],[16.141,44.48581],[16.1458,44.48018],[16.14413,44.47424],[16.14033,44.47047],[16.14223,44.46243],[16.13748,44.45873],[16.13767,44.45734],[16.141,44.45727],[16.14423,44.45544],[16.14818,44.44916],[16.14713,44.4423],[16.14375,44.43918],[16.14594,44.42719],[16.14879,44.42542],[16.15559,44.42542],[16.16491,44.41802],[16.16858,44.41462],[16.17072,44.4098],[16.17599,44.4063],[16.17742,44.40236],[16.17571,44.39968],[16.16991,44.39747],[16.16092,44.39176],[16.15412,44.39111],[16.15108,44.39173],[16.14019,44.3886],[16.13367,44.39142],[16.134,44.3868],[16.13524,44.38112],[16.14608,44.3799],[16.14993,44.38085],[16.1536,44.3834],[16.15797,44.3834],[16.17276,44.37701],[16.17856,44.37018],[16.19915,44.3659],[16.20998,44.36191],[16.22406,44.3489],[16.22307,44.34118],[16.20923,44.33349],[16.20405,44.32822],[16.19963,44.31988],[16.19953,44.3143],[16.19368,44.30784],[16.1923,44.29936],[16.1923,44.29548],[16.19511,44.29218],[16.1972,44.28398],[16.19606,44.27162],[16.20077,44.26219],[16.20538,44.2582],[16.20495,44.25425],[16.209,44.25459],[16.21427,44.25177],[16.22269,44.24131],[16.22559,44.23409],[16.22412,44.22213],[16.22179,44.22032],[16.21908,44.21974],[16.21765,44.21695],[16.22307,44.21388],[16.22973,44.21207],[16.23192,44.20696],[16.23429,44.20488],[16.23722,44.20476],[16.23721,44.20365],[16.24017,44.20368],[16.24314,44.20014],[16.24685,44.19823],[16.24761,44.19602],[16.25488,44.19141],[16.25992,44.18586],[16.26577,44.18173],[16.26744,44.17852],[16.27395,44.17634],[16.27638,44.17307],[16.2934,44.16444],[16.29892,44.15594],[16.30915,44.14985],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61203,43.92134],[16.60461,43.91569],[16.60504,43.91517],[16.60009,43.91158],[16.6014,43.91125],[16.60432,43.91125],[16.60489,43.91087],[16.60658,43.91063],[16.60727,43.91029],[16.60958,43.90902],[16.61027,43.90854],[16.61198,43.90866],[16.61426,43.90794],[16.62066,43.90334],[16.6217,43.90179],[16.62437,43.89994],[16.62781,43.89753],[16.65,43.88009],[16.65,43.87782],[16.65228,43.8744],[16.65913,43.86939],[16.67073,43.87631],[16.6752,43.87433],[16.71695,43.84072],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56664,42.93852],[17.56426,42.93879],[17.54924,42.93892],[17.53481,42.93894],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6487,42.88431],[17.64423,42.88859],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.80041,42.9114],[17.80532,42.91742],[17.80747,42.91947],[17.80994,42.91968],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.86051,42.88881],[17.8618,42.88642],[17.86216,42.88405],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.50944,42.43283],[18.51866,42.42855],[18.52484,42.4237],[18.52851,42.42188],[18.52998,42.42174],[18.52979,42.41742],[18.52518,42.41753],[18.52247,42.41689],[18.5179,42.41746],[18.51614,42.41412],[18.51443,42.413],[18.51529,42.40784],[18.51976,42.40447],[18.52746,42.40018],[18.53293,42.3979],[18.53635,42.39597],[18.53816,42.39319],[18.53787,42.39042],[18.53516,42.38933],[18.52931,42.3893],[18.52232,42.39066],[18.51919,42.39242],[18.51662,42.39288],[18.51248,42.39541],[18.50758,42.39839],[18.50435,42.40095],[18.50335,42.4065],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.35138,42.37123],[16.23677,42.38453],[16.39023,42.73995],[15.43075,43.08152],[15.42676,43.10342],[15.63066,43.43802],[14.62071,44.3094],[14.29287,44.49332],[13.99641,44.82337],[14.00894,44.80997],[14.00808,44.80011],[13.9892,44.78854],[13.97152,44.78829],[13.95882,44.78768],[13.95367,44.7794],[13.95401,44.76916],[13.93564,44.75905],[13.88603,44.75271],[13.88535,44.76331],[13.89307,44.78049],[13.89153,44.8023],[13.86715,44.80388],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78447,44.85757],[13.78601,44.88862],[13.77793,44.89044],[13.76604,44.88889],[13.7571,44.8829],[13.74901,44.88263],[13.7396,44.88856],[13.72724,44.90183],[13.72647,44.90823],[13.71639,44.90809],[13.70853,44.9134],[13.70926,44.91746],[13.71972,44.92473],[13.71925,44.92803],[13.70279,44.94304],[13.70336,44.94822],[13.70945,44.95038],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76178,44.96316],[13.76116,44.98088],[13.73532,44.98052],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.57754,45.15724],[13.56139,45.19789],[13.57374,45.22722],[13.58211,45.24115],[13.56651,45.25347],[13.56571,45.27271],[13.55416,45.30856],[13.55372,45.31784],[13.54537,45.31771],[13.52898,45.32753],[13.53379,45.36116],[13.52818,45.37418],[13.52383,45.39419],[13.51034,45.4124],[13.51013,45.42486],[13.50659,45.4248],[13.50167,45.44254],[13.50872,45.44279],[13.5076,45.46073],[13.50045,45.46072],[13.48227,45.48675],[13.48555,45.496],[13.49894,45.50731],[13.50564,45.50971],[13.50899,45.50995],[13.62167,45.43361],[13.8722,45.40671],[13.88661,45.40668],[13.91067,45.41026],[13.92956,45.41151],[13.96571,45.41603],[14.0013,45.41872],[14.03128,45.42045],[14.0718,45.42525],[14.14737,45.43227],[14.19625,45.43889],[14.21856,45.44014],[14.27031,45.44792],[14.36464,45.45647],[14.435,45.46377],[14.46156,45.46406],[14.49866,45.46924],[14.51701,45.47116],[14.54973,45.47174],[14.55,45.47356],[14.58984,45.47778],[14.59052,45.463],[14.60996,45.46146],[14.6253,45.4726],[14.64679,45.45762],[14.66828,45.4558],[14.68457,45.46713],[14.70662,45.45196],[14.72044,45.45119],[14.75097,45.44773],[14.77808,45.44341],[14.81121,45.44158],[14.84023,45.44072],[14.85324,45.43947],[14.88264,45.43426],[14.88818,45.43488],[14.89232,45.43383],[14.89691,45.43308],[14.89941,45.43219],[14.91881,45.42948],[14.95886,45.42631],[14.96303,45.42496],[14.97741,45.4229],[14.98843,45.42304],[15.00205,45.42223],[15.00917,45.42088],[15.02142,45.42011],[15.06324,45.41444],[15.07166,45.42021],[15.08289,45.41228],[15.10267,45.40997],[15.11068,45.41041],[15.12985,45.40723],[15.16346,45.40526],[15.19316,45.40185],[15.23197,45.41199],[15.26572,45.41867],[15.30337,45.42919],[15.3636,45.44264],[15.40276,45.47625],[15.42028,45.58175],[15.42959,45.65356],[15.43753,45.70368],[15.50187,45.69852],[15.50119,45.68934],[15.53001,45.68943],[15.51454,45.70727],[15.54445,45.72027],[15.52357,45.74392],[15.54959,45.75486],[15.57286,45.76708],[15.59189,45.77472],[15.60873,45.7837],[15.66048,45.80775],[15.68703,45.82082],[15.72324,45.8379],[15.72749,45.88175],[15.73036,45.90157],[15.73166,45.91977],[15.73372,45.92915],[15.73399,45.93605],[15.73577,45.95142],[15.73618,45.95547],[15.74104,45.98073],[15.74111,45.98506],[15.7459,46.01834],[15.75028,46.04942],[15.7522,46.05527],[15.75357,46.07778],[15.75679,46.09691],[15.76007,46.11836],[15.82209,46.11376],[15.82565,46.11362],[15.82339,46.10066],[15.83092,46.10071],[15.83126,46.11988],[15.82524,46.11793],[15.79957,46.15536],[15.81723,46.16076],[15.80066,46.18612],[15.83468,46.19773],[15.85864,46.20512],[15.903,46.22],[15.88479,46.24679],[15.93969,46.26445],[15.97199,46.27457],[16.1297,46.32763],[16.17091,46.34181],[16.18926,46.3143],[16.30466,46.35117],[16.30501,46.38145],[16.2996,46.38154],[16.30063,46.38565],[16.2985,46.38985],[16.30063,46.39146],[16.30008,46.39566],[16.30213,46.39712],[16.29686,46.4008],[16.29515,46.40392],[16.28591,46.40689],[16.28208,46.41095],[16.27215,46.41194],[16.26825,46.41454],[16.26852,46.41869],[16.27003,46.42067],[16.26921,46.42699],[16.26236,46.437],[16.25839,46.44992],[16.2599,46.45275],[16.25469,46.46077],[16.25538,46.46746],[16.251,46.47227],[16.24648,46.47896],[16.23649,46.48339],[16.2369,46.4883],[16.2369,46.4981],[16.23881,46.50083],[16.24484,46.50262],[16.25825,46.50441],[16.26264,46.50799],[16.26168,46.5177],[16.26743,46.51911],[16.27112,46.52081],[16.27646,46.52109],[16.27783,46.51902],[16.28865,46.51939],[16.29672,46.51788],[16.30028,46.51581],[16.30288,46.51647],[16.30863,46.52307],[16.30918,46.52608],[16.32027,46.53154],[16.33232,46.53343],[16.33697,46.53192],[16.33684,46.53522],[16.3382,46.53795],[16.34094,46.53917],[16.33478,46.53974],[16.33163,46.54303],[16.33423,46.54689],[16.34546,46.54849],[16.34957,46.55094],[16.35326,46.55245],[16.35915,46.55009],[16.36203,46.54972],[16.36134,46.55452],[16.36449,46.55763],[16.3701,46.55838],[16.37394,46.5565],[16.37804,46.55602],[16.38434,46.55405],[16.38612,46.55141],[16.38667,46.54868],[16.38407,46.54557],[16.38804,46.54397],[16.38968,46.542],[16.39132,46.53917],[16.40022,46.54228],[16.40734,46.54162],[16.40844,46.5387],[16.40844,46.53691],[16.41268,46.53701],[16.41993,46.53333],[16.42568,46.53597],[16.43157,46.53569],[16.43527,46.53305],[16.44129,46.53107],[16.44554,46.52561],[16.44293,46.52099],[16.44334,46.51854],[16.45142,46.52156],[16.4569,46.52118],[16.45895,46.52297],[16.46251,46.52448],[16.46552,46.52467],[16.46958,46.52183],[16.47551,46.51842],[16.47648,46.51592],[16.48072,46.515],[16.48532,46.51267],[16.48544,46.51158],[16.49056,46.51044],[16.49337,46.50812],[16.49222,46.50562],[16.4921,46.50358],[16.49646,46.50012],[16.51184,46.49754],[16.51305,46.49516],[16.51662,46.49508],[16.52249,46.49112]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2017",name:"dgu.hr: Croatia 2017 Aerial imagery",type:"wms",template:"http://geoportal.dgu.hr/services/inspire/orthophoto_2017/ows?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[16.30898,45.22981],[16.5,45.22997],[16.50001,45.21197],[16.50382,45.21198],[16.50512,45.21274],[16.50999,45.21581],[16.51263,45.21647],[16.5151,45.21845],[16.51946,45.21977],[16.52186,45.22151],[16.53074,45.22431],[16.53308,45.22445],[16.53589,45.22452],[16.5366,45.22433],[16.53725,45.22206],[16.53884,45.22048],[16.54198,45.21876],[16.54445,45.21777],[16.54772,45.21712],[16.54954,45.21688],[16.55249,45.21641],[16.55559,45.21654],[16.55883,45.21705],[16.56237,45.21855],[16.56528,45.21976],[16.56785,45.21976],[16.57133,45.2196],[16.57514,45.21974],[16.5792,45.21948],[16.58255,45.22004],[16.58755,45.22213],[16.59218,45.22426],[16.59356,45.22654],[16.59699,45.22877],[16.59808,45.22881],[16.60028,45.22828],[16.60455,45.22697],[16.60744,45.22516],[16.61451,45.22243],[16.61709,45.22137],[16.61941,45.21939],[16.62107,45.21718],[16.62278,45.21467],[16.62509,45.2124],[16.62802,45.21116],[16.63015,45.21113],[16.6343,45.21163],[16.64543,45.20517],[16.65125,45.20441],[16.65628,45.20452],[16.66168,45.20208],[16.66649,45.19945],[16.67051,45.19857],[16.67809,45.19871],[16.68349,45.19727],[16.68939,45.19491],[16.69429,45.1934],[16.69911,45.1934],[16.70409,45.1947],[16.71121,45.19951],[16.71615,45.20184],[16.72063,45.20205],[16.72611,45.20258],[16.73051,45.20467],[16.7326,45.20461],[16.73972,45.20143],[16.74889,45.1975],[16.75328,45.19665],[16.75965,45.19703],[16.76329,45.1957],[16.77124,45.19119],[16.77706,45.18948],[16.79109,45.18603],[16.80273,45.18299],[16.80691,45.18254],[16.81516,45.18187],[16.82178,45.1824],[16.8286,45.18402],[16.83484,45.18547],[16.84116,45.18842],[16.84438,45.19148],[16.84706,45.19367],[16.84723,45.19526],[16.84623,45.1975],[16.84775,45.20171],[16.85292,45.20115],[16.85778,45.20225],[16.86322,45.20821],[16.86724,45.21193],[16.86833,45.21635],[16.8721,45.21718],[16.87737,45.216],[16.88181,45.21647],[16.88508,45.22137],[16.88432,45.22296],[16.88684,45.22644],[16.88742,45.23062],[16.88525,45.23428],[16.88809,45.24136],[16.88658,45.24295],[16.89429,45.24401],[16.89814,45.24713],[16.90442,45.24749],[16.91237,45.25061],[16.91681,45.25509],[16.91874,45.25975],[16.91782,45.26275],[16.92259,45.26723],[16.92351,45.27142],[16.9282,45.27307],[16.93331,45.27307],[16.93465,45.26965],[16.93699,45.26158],[16.94913,45.25668],[16.94897,45.25468],[16.94637,45.25321],[16.9344,45.24878],[16.93054,45.24206],[16.93088,45.23682],[16.93264,45.22703],[16.93875,45.22426],[16.94361,45.22431],[16.95031,45.22514],[16.95583,45.22886],[16.95943,45.22844],[16.96362,45.22644],[16.96923,45.22384],[16.97559,45.22443],[16.97911,45.22573],[16.9864,45.22066],[16.99201,45.21889],[17.00004,45.21783],[17.00314,45.21889],[17.00415,45.21399],[17.00992,45.21081],[17.01771,45.20951],[17.02382,45.21087],[17.03437,45.21983],[17.04065,45.20414],[17.0507,45.19736],[17.0605,45.196],[17.06619,45.18904],[17.10262,45.17475],[17.10957,45.17334],[17.13125,45.16295],[17.14055,45.16047],[17.16542,45.14694],[17.17932,45.14352],[17.19096,45.14328],[17.2031,45.14659],[17.2144,45.14381],[17.22244,45.14257],[17.23492,45.14376],[17.2463,45.14263],[17.25141,45.1444],[17.25903,45.15332],[17.26389,45.16619],[17.26422,45.17257],[17.26824,45.17404],[17.27318,45.18585],[17.28264,45.17186],[17.29554,45.17233],[17.30659,45.17375],[17.30525,45.16619],[17.30927,45.16159],[17.32752,45.16295],[17.32225,45.15604],[17.32644,45.14895],[17.3426,45.13809],[17.35968,45.13608],[17.38312,45.13407],[17.40607,45.13141],[17.41754,45.13253],[17.4275,45.13655],[17.43814,45.14582],[17.44098,45.15639],[17.44509,45.15769],[17.44827,45.15627],[17.45086,45.14399],[17.44425,45.13265],[17.44408,45.1281],[17.44768,45.12456],[17.4589,45.12249],[17.47456,45.12267],[17.48821,45.13283],[17.48746,45.12515],[17.47699,45.11894],[17.47347,45.11239],[17.47757,45.10795],[17.48821,45.10589],[17.49801,45.10837],[17.50362,45.11109],[17.51283,45.10494],[17.52187,45.10488],[17.53594,45.10665],[17.54372,45.11292],[17.54582,45.11835],[17.54414,45.12544],[17.5495,45.12663],[17.55277,45.12184],[17.55059,45.11321],[17.54992,45.10701],[17.55729,45.10417],[17.5696,45.10654],[17.57445,45.11286],[17.57839,45.11256],[17.58358,45.10843],[17.59045,45.10281],[17.6005,45.10181],[17.61063,45.106],[17.61599,45.10967],[17.62629,45.1102],[17.62989,45.1151],[17.63483,45.11971],[17.65341,45.1281],[17.66363,45.13094],[17.67225,45.12934],[17.6777,45.12426],[17.68808,45.11357],[17.70047,45.11138],[17.7091,45.11032],[17.71747,45.10394],[17.73238,45.09584],[17.75616,45.08254],[17.76528,45.0807],[17.76905,45.08112],[17.77709,45.08124],[17.78504,45.0768],[17.78848,45.07308],[17.80824,45.05663],[17.83545,45.04327],[17.85061,45.04019],[17.86593,45.04114],[17.88418,45.04794],[17.90654,45.05882],[17.93024,45.07438],[17.94171,45.08141],[17.94221,45.08626],[17.9366,45.09483],[17.93576,45.1037],[17.94146,45.10813],[17.96105,45.10843],[17.97202,45.11292],[17.98106,45.12414],[17.9824,45.13543],[17.9948,45.14488],[18.0097,45.14872],[18.01732,45.14618],[18.02126,45.13868],[18.02862,45.12432],[18.03733,45.12196],[18.04462,45.12385],[18.04822,45.13631],[18.05709,45.13962],[18.06597,45.13909],[18.07242,45.13182],[18.08054,45.119],[18.06856,45.1115],[18.06664,45.10772],[18.06856,45.10352],[18.07652,45.10057],[18.08967,45.09714],[18.10139,45.08484],[18.1106,45.07863],[18.12115,45.07621],[18.1394,45.08183],[18.15062,45.08153],[18.16695,45.07396],[18.18286,45.07343],[18.19994,45.07562],[18.21192,45.08177],[18.22046,45.08827],[18.22699,45.09856],[18.22473,45.10287],[18.2161,45.10919],[18.21309,45.11705],[18.21493,45.12202],[18.23561,45.13194],[18.25755,45.13614],[18.26718,45.13318],[18.2722,45.12781],[18.27631,45.11174],[18.28929,45.10996],[18.3021,45.11191],[18.3098,45.10376],[18.32169,45.09696],[18.33676,45.09808],[18.36875,45.10269],[18.40015,45.10547],[18.41924,45.10518],[18.43088,45.0985],[18.43749,45.08265],[18.44804,45.07639],[18.46814,45.05995],[18.48983,45.05516],[18.51419,45.05344],[18.52299,45.05634],[18.526,45.05155],[18.52474,45.04303],[18.53161,45.03995],[18.54057,45.0409],[18.54467,45.05539],[18.54434,45.06137],[18.55598,45.07065],[18.56401,45.07432],[18.56703,45.06551],[18.57691,45.06154],[18.58704,45.06846],[18.58771,45.08384],[18.60211,45.07645],[18.60856,45.07627],[18.59843,45.06971],[18.59935,45.06409],[18.60864,45.05805],[18.64063,45.05776],[18.64725,45.05421],[18.6588,45.05326],[18.66466,45.05817],[18.68861,45.03764],[18.70109,45.03439],[18.71155,45.03475],[18.71892,45.02054],[18.73282,45.01545],[18.72621,45.00622],[18.72026,44.99728],[18.72679,44.99017],[18.74613,44.98987],[18.76163,44.99591],[18.77251,44.99485],[18.78214,44.99165],[18.78901,44.99224],[18.7782,44.97596],[18.78214,44.95469],[18.79813,44.94485],[18.79579,44.93987],[18.78398,44.93857],[18.76271,44.94894],[18.74764,44.9455],[18.74471,44.93786],[18.74655,44.9263],[18.76338,44.91978],[18.75635,44.90792],[18.7633,44.8992],[18.78942,44.88449],[18.81915,44.87339],[18.83925,44.8547],[18.85055,44.849],[18.87835,44.84817],[18.92499,44.8468],[18.96225,44.84597],[18.996,44.84823],[19.02647,44.85137],[19.02756,44.85927],[19.01031,44.88508],[18.99708,44.89801],[18.99675,44.90679],[19.00562,44.91331],[19.02513,44.91871],[19.03284,44.91841],[19.03711,44.9148],[19.04021,44.91764],[19.09204,44.9164],[19.09514,44.97513],[19.08643,44.97779],[19.06357,44.97797],[19.08634,44.98608],[19.09656,44.99355],[19.09714,45.10453],[19.08325,45.11717],[19.08333,45.12745],[19.09354,45.1395],[19.11297,45.1343],[19.11908,45.12993],[19.13491,45.12692],[19.20164,45.17959],[19.21077,45.1852],[19.22609,45.18077],[19.23564,45.17127],[19.24803,45.17269],[19.27726,45.19446],[19.29434,45.19458],[19.29316,45.20196],[19.31561,45.20349],[19.31988,45.19252],[19.40162,45.19073],[19.40389,45.23548],[19.40191,45.23573],[19.3658,45.23519],[19.32988,45.23561],[19.2979,45.23909],[19.26369,45.24472],[19.26415,45.25153],[19.26478,45.25374],[19.25226,45.25438],[19.22676,45.2685],[19.20077,45.26891],[19.18444,45.27],[19.18113,45.27092],[19.17598,45.27395],[19.16773,45.27704],[19.1532,45.28096],[19.11661,45.29513],[19.1079,45.30137],[19.10133,45.31368],[19.102,45.32446],[19.10003,45.33149],[19.09426,45.33823],[19.07738,45.34462],[19.06097,45.34512],[19.05687,45.34571],[19.05377,45.34953],[19.04665,45.35233],[19.02472,45.35418],[19.01739,45.36021],[19.00923,45.36165],[19.00579,45.36083],[18.98825,45.36939],[18.97736,45.37577],[18.9741,45.38142],[18.97435,45.38718],[18.97879,45.39221],[18.98678,45.39609],[19.01345,45.39829],[19.01538,45.40732],[19.01597,45.42892],[19.0145,45.43459],[19.00508,45.43879],[18.997,45.44384],[18.99336,45.44854],[18.99248,45.45494],[18.99419,45.45823],[18.99524,45.47183],[18.99537,45.47391],[18.99591,45.48099],[19.00073,45.48768],[19.00596,45.49408],[19.01404,45.49226],[19.01957,45.48941],[19.03141,45.48422],[19.04184,45.48213],[19.05088,45.48204],[19.05766,45.48369],[19.07831,45.51814],[18.99206,45.54491],[18.98431,45.54081],[18.97196,45.5389],[18.94705,45.53685],[18.9306,45.54503],[18.92825,45.5489],[18.93474,45.55245],[18.93692,45.5567],[18.93642,45.56271],[18.93056,45.56409],[18.93144,45.56828],[18.91385,45.57112],[18.91084,45.56998],[18.90808,45.57012],[18.90242,45.57188],[18.90117,45.57833],[18.90833,45.59295],[18.91427,45.59755],[18.92507,45.595],[18.93152,45.59544],[18.93139,45.60889],[18.94923,45.60886],[18.94676,45.6141],[18.94957,45.62072],[18.95593,45.62403],[18.95626,45.62628],[18.95191,45.63325],[18.94643,45.6367],[18.94404,45.63679],[18.93981,45.63515],[18.93684,45.63869],[18.93751,45.64185],[18.94709,45.64071],[18.95451,45.64294],[18.95936,45.6454],[18.96012,45.68346],[18.9507,45.68846],[18.93391,45.69069],[18.92968,45.69402],[18.92583,45.69829],[18.92202,45.7023],[18.92805,45.70203],[18.92985,45.70311],[18.93424,45.70077],[18.94391,45.70162],[18.94709,45.70004],[18.9494,45.69604],[18.95241,45.69352],[18.95919,45.69186],[18.96062,45.70975],[18.96016,45.73185],[18.93328,45.73234],[18.93345,45.74777],[18.91691,45.74771],[18.90561,45.74766],[18.87927,45.74733],[18.87902,45.75969],[18.86592,45.76337],[18.85943,45.76673],[18.85574,45.7726],[18.866,45.77791],[18.87328,45.78159],[18.88061,45.78276],[18.88115,45.78419],[18.88203,45.82447],[18.88007,45.82348],[18.87617,45.8189],[18.87307,45.81026],[18.86248,45.80877],[18.8565,45.8114],[18.85373,45.81102],[18.85289,45.81577],[18.85114,45.81691],[18.85784,45.82581],[18.86005,45.83211],[18.86165,45.84448],[18.86056,45.85702],[18.87458,45.85609],[18.88233,45.85635],[18.88266,45.88468],[18.87902,45.88873],[18.87429,45.89488],[18.87793,45.89844],[18.88354,45.90118],[18.8835,45.92227],[18.87998,45.92087],[18.8758,45.91924],[18.87161,45.92017],[18.86918,45.9216],[18.86617,45.92296],[18.86257,45.92299],[18.86001,45.92116],[18.85984,45.91793],[18.86248,45.91303],[18.83033,45.90791],[18.82623,45.91743],[18.82036,45.91772],[18.81521,45.91536],[18.80274,45.90365],[18.80374,45.90144],[18.80814,45.89579],[18.80831,45.89101],[18.80609,45.88171],[18.79801,45.88151],[18.79064,45.88142],[18.78557,45.88378],[18.78034,45.88905],[18.77427,45.89136],[18.76393,45.89197],[18.76439,45.89447],[18.75962,45.89855],[18.75765,45.89951],[18.75438,45.89972],[18.75422,45.90211],[18.75137,45.90292],[18.74852,45.90272],[18.73852,45.90371],[18.72265,45.90788],[18.71365,45.91391],[18.70883,45.9183],[18.70703,45.92066],[18.70502,45.92093],[18.69954,45.92049],[18.68869,45.91895],[18.67299,45.91696],[18.67027,45.9149],[18.66462,45.91938],[18.65729,45.91935],[18.65566,45.91755],[18.6552,45.91536],[18.65587,45.90351],[18.65801,45.89963],[18.65708,45.89829],[18.6521,45.89812],[18.64402,45.89465],[18.63628,45.88972],[18.6372,45.88652],[18.63829,45.88288],[18.64775,45.87539],[18.63904,45.87186],[18.6333,45.87929],[18.62736,45.8792],[18.62334,45.87402],[18.62229,45.85938],[18.60906,45.85372],[18.61392,45.84696],[18.61719,45.84118],[18.59617,45.83576],[18.59885,45.82852],[18.58704,45.82129],[18.56829,45.8151],[18.57021,45.80425],[18.55757,45.80646],[18.55539,45.80442],[18.55212,45.79695],[18.54861,45.79683],[18.54308,45.79806],[18.53756,45.79567],[18.53278,45.79619],[18.52893,45.79561],[18.51612,45.78784],[18.5095,45.78854],[18.50858,45.7931],[18.50314,45.79736],[18.49401,45.79858],[18.48413,45.79491],[18.48028,45.78638],[18.47743,45.77003],[18.46504,45.76915],[18.45742,45.77248],[18.44922,45.77132],[18.44051,45.76033],[18.44344,45.75677],[18.44336,45.74187],[18.43599,45.7417],[18.42728,45.74479],[18.41849,45.74392],[18.41036,45.74222],[18.403,45.74766],[18.40475,45.75595],[18.40057,45.75952],[18.39864,45.75887],[18.39521,45.76466],[18.38533,45.76764],[18.3803,45.76781],[18.36506,45.77628],[18.35987,45.77511],[18.35033,45.76682],[18.34028,45.75291],[18.33249,45.75771],[18.31491,45.75952],[18.30871,45.75998],[18.3,45.76296],[18.29531,45.76372],[18.29054,45.76325],[18.27706,45.75852],[18.25906,45.76425],[18.24993,45.76547],[18.24633,45.76507],[18.2362,45.7792],[18.22933,45.78305],[18.21652,45.7837],[18.2048,45.78551],[18.19576,45.78977],[18.18763,45.79041],[18.17826,45.78767],[18.17055,45.77914],[18.1631,45.78183],[18.15757,45.78837],[18.14501,45.79175],[18.13538,45.79123],[18.12374,45.79257],[18.1168,45.79],[18.10951,45.78241],[18.10507,45.77435],[18.09335,45.76904],[18.08054,45.76834],[18.06028,45.77447],[18.04763,45.77762],[18.03465,45.77908],[18.01983,45.78422],[18.00719,45.79485],[18.00359,45.7973],[17.98282,45.79707],[17.97369,45.79269],[17.96901,45.79251],[17.9598,45.79461],[17.95352,45.7959],[17.94556,45.79485],[17.93518,45.79181],[17.92873,45.78948],[17.9196,45.7914],[17.90763,45.79537],[17.89457,45.79321],[17.88276,45.78755],[17.86811,45.77862],[17.86526,45.77067],[17.85957,45.77324],[17.85831,45.77762],[17.85655,45.78381],[17.85262,45.78702],[17.84341,45.78866],[17.83713,45.79339],[17.83629,45.80483],[17.83202,45.81131],[17.82339,45.81359],[17.8146,45.81172],[17.81075,45.80734],[17.8043,45.80833],[17.79585,45.81283],[17.78756,45.81971],[17.77374,45.82],[17.76394,45.81849],[17.75473,45.82438],[17.74937,45.83074],[17.72744,45.83477],[17.7106,45.83547],[17.70081,45.84072],[17.68565,45.84148],[17.67025,45.83833],[17.66053,45.84521],[17.65316,45.85507],[17.65249,45.86655],[17.6401,45.88701],[17.62863,45.90607],[17.61306,45.91586],[17.59313,45.92582],[17.57404,45.93991],[17.55947,45.9423],[17.53301,45.93793],[17.51517,45.94276],[17.49198,45.94556],[17.46778,45.94725],[17.4594,45.94905],[17.44835,45.95377],[17.43638,45.95377],[17.42507,45.95051],[17.42156,45.94498],[17.42474,45.93729],[17.43219,45.9324],[17.42566,45.93158],[17.41704,45.93403],[17.41511,45.9409],[17.41117,45.94306],[17.40657,45.94236],[17.39426,45.93514],[17.39024,45.93723],[17.39351,45.94428],[17.39049,45.9501],[17.39317,45.95522],[17.39635,45.96093],[17.39694,45.9643],[17.38748,45.96867],[17.38162,45.97146],[17.37308,45.97583],[17.38053,45.9838],[17.37936,45.99119],[17.37366,45.99398],[17.36194,45.99514],[17.35825,45.9927],[17.35591,45.98624],[17.35532,45.97792],[17.35231,45.97944],[17.34829,45.9863],[17.34377,45.99631],[17.33816,45.99951],[17.32912,45.99828],[17.32267,45.99439],[17.3153,45.99404],[17.30843,45.99154],[17.31011,45.99834],[17.30902,46.00335],[17.30182,46.00707],[17.29612,46.00643],[17.28356,46.00457],[17.2767,46.00759],[17.27092,46.01207],[17.26272,46.01265],[17.2762,46.01533],[17.27795,46.01771],[17.29629,46.02004],[17.30173,46.02643],[17.29813,46.03422],[17.28817,46.03556],[17.26673,46.03672],[17.26255,46.04282],[17.27594,46.05276],[17.27561,46.05758],[17.26908,46.06142],[17.25434,46.06183],[17.25669,46.06485],[17.25526,46.06764],[17.24488,46.06758],[17.24429,46.07071],[17.24396,46.07774],[17.23785,46.08181],[17.22529,46.08436],[17.22813,46.0904],[17.23751,46.09447],[17.23885,46.09946],[17.23366,46.10329],[17.22194,46.11398],[17.21624,46.11734],[17.21005,46.11699],[17.18392,46.11177],[17.18643,46.1199],[17.18342,46.12698],[17.19062,46.13092],[17.19179,46.13522],[17.18375,46.15227],[17.17153,46.16028],[17.16366,46.16167],[17.16198,46.17292],[17.15294,46.17617],[17.1377,46.17547],[17.13084,46.17234],[17.12866,46.17304],[17.13017,46.17918],[17.1238,46.18266],[17.11208,46.18185],[17.10722,46.18428],[17.10705,46.18857],[17.09902,46.1917],[17.08646,46.19344],[17.08327,46.19135],[17.07808,46.19286],[17.0749,46.19564],[17.06921,46.20492],[17.05748,46.20631],[17.05363,46.20631],[17.00641,46.22635],[16.99569,46.22612],[16.98983,46.22821],[16.97844,46.22821],[16.97777,46.2311],[16.98012,46.24049],[16.97559,46.24616],[16.96638,46.24547],[16.96287,46.24338],[16.95399,46.24442],[16.94344,46.25161],[16.93858,46.25774],[16.92519,46.26365],[16.91732,46.26434],[16.91263,46.26816],[16.90509,46.27789],[16.89119,46.28228],[16.89119,46.28633],[16.89019,46.30253],[16.88365,46.306],[16.88047,46.31364],[16.88198,46.32093],[16.87897,46.32544],[16.88583,46.33434],[16.88148,46.3407],[16.87277,46.34868],[16.86959,46.34775],[16.87361,46.35365],[16.86808,46.35769],[16.86172,46.35873],[16.85234,46.36451],[16.84329,46.36786],[16.84329,46.37399],[16.83743,46.37895],[16.82873,46.37768],[16.82069,46.37688],[16.81231,46.38011],[16.80896,46.3808],[16.80444,46.38739],[16.79624,46.39028],[16.78502,46.38947],[16.77899,46.38473],[16.77296,46.38877],[16.76509,46.38843],[16.7609,46.38566],[16.75789,46.39097],[16.75052,46.39224],[16.74466,46.38981],[16.74466,46.39848],[16.74231,46.40217],[16.73511,46.4046],[16.7192,46.40206],[16.70966,46.40541],[16.69994,46.42007],[16.66846,46.46184],[16.64719,46.46773],[16.63262,46.46934],[16.62559,46.47188],[16.61939,46.47165],[16.60968,46.47961],[16.59578,46.47995],[16.58004,46.47638],[16.57032,46.47695],[16.55592,46.4841],[16.54437,46.48076],[16.53499,46.48387],[16.52243,46.48295],[16.52377,46.49045],[16.51992,46.49517],[16.50987,46.49875],[16.49815,46.50001],[16.49295,46.5037],[16.49228,46.50981],[16.48592,46.51408],[16.46867,46.52237],[16.46532,46.52468],[16.45929,46.52422],[16.45561,46.52122],[16.44338,46.52018],[16.4459,46.52641],[16.43786,46.53274],[16.43032,46.53643],[16.41826,46.53597],[16.41073,46.53827],[16.40353,46.543],[16.39817,46.543],[16.3913,46.54012],[16.38695,46.5453],[16.38092,46.54461],[16.37137,46.53366],[16.35161,46.55198],[16.34609,46.55025],[16.33369,46.54622],[16.33219,46.54277],[16.33604,46.53297],[16.32432,46.5324],[16.31393,46.52952],[16.3074,46.52422],[16.30204,46.51661],[16.29467,46.51799],[16.28965,46.51938],[16.28144,46.51915],[16.27558,46.52122],[16.26972,46.52064],[16.26553,46.51707],[16.27391,46.51016],[16.25917,46.50428],[16.26319,46.49448],[16.24326,46.48837],[16.2374,46.48583],[16.2364,46.48318],[16.24544,46.47961],[16.25197,46.47026],[16.25465,46.46023],[16.25917,46.45377],[16.25934,46.44558],[16.26336,46.43415],[16.26721,46.42896],[16.26955,46.42122],[16.26738,46.41522],[16.26989,46.41129],[16.28044,46.41002],[16.29132,46.40425],[16.30054,46.39697],[16.29869,46.38762],[16.29869,46.38311],[16.2997,46.37942],[16.30489,46.3793],[16.30898,45.22981]],[[15.45776,43.0729],[15.43991,43.09697],[15.45639,43.10499],[16.30096,43.2312],[15.91713,43.51022],[15.8828,43.53461],[15.87353,43.56225],[15.86867,43.56547],[15.86851,43.58153],[15.87264,43.58117],[15.89619,43.57691],[15.91202,43.57501],[15.91561,43.58212],[15.90552,43.59036],[15.90545,43.59499],[15.91558,43.60086],[15.91328,43.60843],[16.12836,43.60933],[16.12499,44.14937],[16.3091,44.14984],[16.30916,44.14974],[16.31098,44.1463],[16.31266,44.14387],[16.31276,44.14256],[16.31157,44.12793],[16.31525,44.12639],[16.31598,44.125],[16.3168,44.12172],[16.32072,44.11655],[16.33606,44.11467],[16.3383,44.11357],[16.35283,44.10791],[16.36216,44.10334],[16.36388,44.10159],[16.36616,44.09926],[16.36664,44.09827],[16.36668,44.09748],[16.36514,44.09516],[16.37192,44.08445],[16.37753,44.08405],[16.37814,44.08379],[16.38276,44.08597],[16.38391,44.08599],[16.38536,44.08569],[16.38659,44.08507],[16.38961,44.08289],[16.39672,44.08247],[16.39834,44.08239],[16.40072,44.08215],[16.40256,44.08211],[16.42785,44.0856],[16.42923,44.08519],[16.4303,44.08448],[16.44441,44.0688],[16.44508,44.06805],[16.44565,44.06696],[16.44472,44.06462],[16.44389,44.06191],[16.43893,44.05434],[16.4396,44.049],[16.44177,44.04244],[16.44204,44.03718],[16.44144,44.03546],[16.43997,44.03188],[16.44156,44.03107],[16.44345,44.0311],[16.44897,44.03042],[16.45525,44.03049],[16.45923,44.03076],[16.46266,44.03126],[16.46731,44.03221],[16.46936,44.03212],[16.48295,44.0317],[16.50428,44.02631],[16.50539,44.02518],[16.5187,44.00519],[16.53769,43.98917],[16.53995,43.98722],[16.54742,43.97499],[16.54784,43.97359],[16.55289,43.9553],[16.58975,43.94507],[16.59094,43.94383],[16.59163,43.94198],[16.59304,43.93928],[16.60141,43.93673],[16.60252,43.93566],[16.6029,43.93479],[16.60614,43.9266],[16.61033,43.92476],[16.61114,43.92396],[16.61148,43.92265],[16.61232,43.92],[16.6123,43.91601],[16.61539,43.91597],[16.62603,43.90769],[16.62867,43.90324],[16.64786,43.88983],[16.64922,43.88855],[16.65117,43.88764],[16.65797,43.88589],[16.66067,43.88414],[16.66243,43.88224],[16.66266,43.88149],[16.66505,43.87972],[16.66869,43.87984],[16.67011,43.87971],[16.67173,43.87885],[16.67495,43.87646],[16.6753,43.87581],[16.68634,43.86798],[16.70704,43.86016],[16.70857,43.85933],[16.71315,43.85609],[16.7138,43.85502],[16.71809,43.84742],[16.71824,43.8464],[16.71843,43.8444],[16.72107,43.84185],[16.72161,43.84086],[16.72136,43.83616],[16.7236,43.83248],[16.72362,43.83172],[16.72335,43.83075],[16.72144,43.8294],[16.72347,43.82627],[16.72351,43.82517],[16.72268,43.82325],[16.72213,43.82148],[16.72148,43.81899],[16.72136,43.81635],[16.72215,43.80778],[16.72601,43.8053],[16.72799,43.80221],[16.72956,43.80045],[16.72977,43.7994],[16.72915,43.79709],[16.72868,43.79633],[16.7304,43.79518],[16.73067,43.79396],[16.7331,43.79121],[16.73685,43.78775],[16.74221,43.78312],[16.74761,43.77845],[16.7541,43.77221],[16.75707,43.77269],[16.76105,43.77219],[16.76113,43.77177],[16.76613,43.7717],[16.77987,43.77006],[16.80222,43.76488],[16.80474,43.7634],[16.81478,43.75664],[16.81822,43.75048],[16.81828,43.74988],[16.82743,43.73415],[16.83352,43.73241],[16.83664,43.7307],[16.85083,43.72098],[16.86975,43.71255],[16.87562,43.70733],[16.87926,43.70099],[16.87915,43.69905],[16.88031,43.69583],[16.88522,43.69357],[16.88617,43.6923],[16.88811,43.68718],[16.9022,43.68081],[16.91083,43.67631],[16.91177,43.67521],[16.91319,43.67263],[16.9151,43.67026],[16.91964,43.66446],[16.91987,43.66365],[16.9224,43.66007],[16.93025,43.65648],[16.93092,43.65531],[16.93161,43.65321],[16.9349,43.64722],[16.93502,43.6448],[16.96136,43.6273],[16.96701,43.62375],[16.97371,43.61948],[16.97438,43.61853],[16.98089,43.60728],[16.98424,43.6034],[16.98573,43.60235],[16.98596,43.6015],[16.98907,43.59903],[16.99,43.59768],[16.99288,43.59344],[16.99533,43.59303],[16.99672,43.59205],[16.99824,43.59048],[16.99849,43.58974],[17.00863,43.58314],[17.00982,43.58233],[17.01034,43.58107],[17.0107,43.58011],[17.01059,43.5779],[17.0165,43.5733],[17.02349,43.56986],[17.02745,43.56859],[17.0318,43.5659],[17.03477,43.56426],[17.03862,43.56096],[17.04442,43.55911],[17.05219,43.5578],[17.05378,43.55721],[17.05702,43.55681],[17.05702,43.55466],[17.06636,43.55462],[17.06808,43.55331],[17.06879,43.55202],[17.06852,43.55117],[17.07149,43.54991],[17.07346,43.54927],[17.07452,43.54838],[17.08097,43.54524],[17.08189,43.54413],[17.08518,43.54105],[17.08683,43.53952],[17.08861,43.53847],[17.09226,43.5361],[17.09602,43.53387],[17.09682,43.53308],[17.10538,43.53055],[17.10685,43.52958],[17.10814,43.52757],[17.10963,43.5258],[17.1252,43.52018],[17.12726,43.51848],[17.13247,43.5127],[17.13458,43.51098],[17.13502,43.51009],[17.13737,43.50974],[17.13969,43.50972],[17.14176,43.50901],[17.14208,43.5086],[17.14415,43.50792],[17.14524,43.50711],[17.14576,43.5059],[17.14771,43.50368],[17.15204,43.49746],[17.15583,43.49647],[17.16031,43.49604],[17.17436,43.49275],[17.17884,43.4963],[17.18005,43.49774],[17.18154,43.4982],[17.18405,43.49902],[17.18771,43.49984],[17.19003,43.49967],[17.19537,43.49993],[17.20701,43.49982],[17.2122,43.49881],[17.21509,43.49966],[17.21637,43.49946],[17.22093,43.49976],[17.22801,43.49976],[17.23196,43.49837],[17.23435,43.4967],[17.23701,43.49603],[17.23822,43.49496],[17.2404,43.49427],[17.24187,43.49351],[17.24561,43.49263],[17.24785,43.49156],[17.25275,43.48933],[17.25855,43.4861],[17.26052,43.48547],[17.26225,43.48455],[17.26728,43.48271],[17.26958,43.48124],[17.27243,43.47973],[17.27276,43.47849],[17.27632,43.47642],[17.27731,43.47519],[17.28139,43.47296],[17.28264,43.47171],[17.28532,43.46933],[17.28624,43.46797],[17.2866,43.46536],[17.28913,43.46188],[17.28899,43.45998],[17.28991,43.45711],[17.28926,43.4541],[17.28804,43.45238],[17.28972,43.44916],[17.28959,43.44726],[17.28865,43.4458],[17.28878,43.44351],[17.28788,43.44156],[17.28842,43.43857],[17.28733,43.43422],[17.28549,43.43054],[17.28216,43.42595],[17.27814,43.42043],[17.2745,43.41634],[17.27216,43.413],[17.26918,43.41219],[17.26382,43.40792],[17.26217,43.40486],[17.26075,43.40301],[17.25664,43.40208],[17.26104,43.3989],[17.26414,43.39479],[17.26516,43.39138],[17.26632,43.386],[17.26791,43.37838],[17.26885,43.3732],[17.27251,43.36888],[17.27391,43.36757],[17.27446,43.3659],[17.27438,43.36444],[17.27699,43.36022],[17.27712,43.35861],[17.27762,43.35677],[17.27756,43.35555],[17.27873,43.35526],[17.28313,43.34764],[17.29342,43.33131],[17.30111,43.31927],[17.30266,43.31749],[17.30441,43.31584],[17.30598,43.31389],[17.3095,43.30684],[17.31084,43.30487],[17.31178,43.30308],[17.31337,43.30084],[17.31383,43.29974],[17.31784,43.296],[17.32055,43.29333],[17.32438,43.28912],[17.32627,43.28879],[17.32901,43.28795],[17.33012,43.2867],[17.33138,43.28491],[17.33266,43.28267],[17.33254,43.28088],[17.3335,43.27866],[17.33408,43.27704],[17.33412,43.2747],[17.33478,43.27417],[17.33552,43.27283],[17.33602,43.2714],[17.33582,43.27005],[17.33559,43.26978],[17.33641,43.26898],[17.33653,43.26762],[17.33611,43.26646],[17.33564,43.26588],[17.3389,43.26232],[17.3407,43.25991],[17.341,43.25936],[17.34344,43.25777],[17.34447,43.25629],[17.34462,43.25537],[17.34752,43.25508],[17.35451,43.25395],[17.36082,43.25189],[17.36824,43.25169],[17.37011,43.25216],[17.37294,43.25218],[17.37646,43.252],[17.379,43.25122],[17.3817,43.25009],[17.38471,43.25012],[17.39222,43.24854],[17.39827,43.24763],[17.40078,43.24631],[17.40786,43.24182],[17.41663,43.23641],[17.42366,43.23203],[17.4234,43.22816],[17.42638,43.22814],[17.43036,43.22016],[17.43233,43.21821],[17.4327,43.21716],[17.43304,43.21537],[17.43274,43.21455],[17.43303,43.21187],[17.43455,43.21052],[17.43485,43.20942],[17.43455,43.20771],[17.43571,43.20556],[17.43552,43.20439],[17.43515,43.20269],[17.4345,43.19824],[17.43352,43.19711],[17.43303,43.19456],[17.43217,43.19342],[17.43154,43.19119],[17.43043,43.18933],[17.43053,43.18794],[17.43172,43.18519],[17.43346,43.18123],[17.43591,43.18263],[17.438,43.18288],[17.44028,43.18232],[17.44367,43.18111],[17.44761,43.18015],[17.45085,43.17971],[17.45279,43.17889],[17.4534,43.17815],[17.45524,43.17755],[17.45715,43.17643],[17.45855,43.1755],[17.45945,43.17458],[17.46034,43.17377],[17.46214,43.17318],[17.46327,43.17248],[17.46514,43.17164],[17.46668,43.17045],[17.46946,43.16877],[17.47561,43.16536],[17.47604,43.16418],[17.47869,43.1628],[17.48447,43.16096],[17.48814,43.16012],[17.49152,43.15872],[17.49323,43.15725],[17.49458,43.15644],[17.49585,43.15634],[17.49633,43.15603],[17.50096,43.15453],[17.50323,43.15328],[17.5041,43.15307],[17.5075,43.15153],[17.50916,43.1501],[17.51062,43.14917],[17.51568,43.14763],[17.52138,43.1462],[17.528,43.14377],[17.53268,43.14149],[17.53599,43.1394],[17.54105,43.13789],[17.54608,43.13624],[17.54735,43.1356],[17.54932,43.13385],[17.5514,43.13349],[17.55324,43.13339],[17.55662,43.1323],[17.55868,43.13126],[17.56014,43.13017],[17.56376,43.12737],[17.56486,43.12661],[17.5672,43.12577],[17.56843,43.12491],[17.5703,43.12428],[17.57361,43.12358],[17.57736,43.12229],[17.5818,43.12095],[17.58489,43.11943],[17.58694,43.11874],[17.58996,43.11716],[17.59436,43.11478],[17.59802,43.1129],[17.60069,43.11105],[17.60222,43.11094],[17.60363,43.11035],[17.60494,43.10942],[17.60589,43.1083],[17.61323,43.1047],[17.62194,43.10018],[17.62776,43.09777],[17.629,43.09757],[17.63049,43.09706],[17.63221,43.09613],[17.63334,43.09557],[17.63715,43.09477],[17.63904,43.09354],[17.64095,43.09229],[17.64304,43.09121],[17.64429,43.09027],[17.64522,43.08805],[17.65012,43.07925],[17.65267,43.07481],[17.65291,43.07368],[17.65295,43.07287],[17.65387,43.07064],[17.65413,43.07026],[17.65533,43.06911],[17.65625,43.06685],[17.65718,43.06482],[17.65969,43.06062],[17.66288,43.05543],[17.66398,43.05285],[17.66521,43.05078],[17.66695,43.04723],[17.669,43.04299],[17.67219,43.0381],[17.67612,43.03219],[17.67831,43.02874],[17.67986,43.0277],[17.68069,43.02618],[17.68167,43.0252],[17.68268,43.02425],[17.68431,43.02197],[17.68636,43.02069],[17.68689,43.01954],[17.68763,43.01635],[17.68846,43.01132],[17.69535,43.00363],[17.69763,43.00099],[17.69817,42.99964],[17.70499,42.98764],[17.70556,42.98527],[17.70669,42.98351],[17.7085,42.98023],[17.71408,42.97496],[17.71384,42.9707],[17.70105,42.96614],[17.68885,42.9633],[17.68698,42.96293],[17.68241,42.96273],[17.67891,42.96188],[17.67431,42.96167],[17.67178,42.96069],[17.67,42.95984],[17.66802,42.95943],[17.66662,42.95952],[17.66291,42.9585],[17.66149,42.95834],[17.66003,42.95843],[17.65517,42.95706],[17.65359,42.95674],[17.65131,42.95563],[17.64944,42.95519],[17.64297,42.95113],[17.64175,42.95083],[17.63991,42.95074],[17.63492,42.94772],[17.63317,42.94633],[17.63199,42.9452],[17.62938,42.94451],[17.62762,42.94357],[17.62611,42.9432],[17.62282,42.94183],[17.62121,42.94083],[17.61881,42.94012],[17.61537,42.93951],[17.60937,42.93868],[17.60543,42.93831],[17.6032,42.93825],[17.60213,42.93792],[17.59293,42.93768],[17.58964,42.93703],[17.58596,42.93632],[17.58424,42.93625],[17.58165,42.93547],[17.58002,42.93553],[17.57649,42.93745],[17.57444,42.9389],[17.56628,42.93853],[17.56426,42.93879],[17.56195,42.93632],[17.55993,42.93579],[17.55714,42.93584],[17.55358,42.9384],[17.54924,42.93892],[17.54776,42.93718],[17.54426,42.93619],[17.54064,42.93645],[17.53969,42.93831],[17.53589,42.93792],[17.5331,42.93936],[17.52978,42.9424],[17.52028,42.92815],[17.52748,42.92702],[17.53375,42.92469],[17.54671,42.91709],[17.548,42.91583],[17.55298,42.91602],[17.56242,42.91338],[17.56697,42.91111],[17.57452,42.90822],[17.58096,42.90634],[17.58714,42.90407],[17.59512,42.90112],[17.60087,42.89785],[17.60774,42.89873],[17.61263,42.89772],[17.62113,42.89213],[17.62671,42.8871],[17.63263,42.88269],[17.63752,42.88137],[17.64361,42.88081],[17.6467,42.88452],[17.64542,42.88942],[17.66215,42.90753],[17.6643,42.91162],[17.67305,42.92048],[17.67683,42.92325],[17.68764,42.92563],[17.70404,42.92431],[17.72558,42.92174],[17.75631,42.91476],[17.76858,42.90992],[17.7879,42.89439],[17.79974,42.91174],[17.80532,42.91742],[17.80648,42.91838],[17.81313,42.91834],[17.8145,42.91781],[17.81646,42.91693],[17.82294,42.9144],[17.83115,42.91166],[17.84137,42.90642],[17.84605,42.90453],[17.84684,42.90398],[17.84753,42.90304],[17.85276,42.89772],[17.85497,42.89507],[17.85905,42.88991],[17.85883,42.88178],[17.86074,42.88175],[17.8592,42.87944],[17.85757,42.8779],[17.8578,42.87662],[17.85961,42.86939],[17.86077,42.86793],[17.86188,42.8654],[17.86257,42.86362],[17.86613,42.85892],[17.86645,42.85802],[17.86733,42.85673],[17.87057,42.85152],[17.87315,42.84772],[17.87643,42.84496],[17.878,42.84334],[17.88046,42.83977],[17.88551,42.8398],[17.88933,42.83823],[17.89355,42.83672],[17.90126,42.83463],[17.90231,42.83418],[17.90334,42.8331],[17.90351,42.8322],[17.90241,42.82987],[17.90113,42.82794],[17.90003,42.82717],[17.8989,42.82512],[17.89754,42.82419],[17.89478,42.82156],[17.8933,42.82071],[17.89081,42.815],[17.89327,42.81196],[17.90171,42.81198],[17.90911,42.8131],[17.91046,42.81308],[17.91166,42.81273],[17.91362,42.81155],[17.91613,42.81011],[17.94119,42.80308],[17.95164,42.8011],[17.95338,42.79982],[17.96005,42.7946],[17.962,42.79191],[17.96683,42.78819],[17.96825,42.78757],[17.96921,42.78682],[17.96966,42.78627],[17.97529,42.78378],[17.97704,42.78202],[17.98146,42.78038],[17.98501,42.78065],[17.99464,42.77921],[17.99837,42.77783],[17.99975,42.77641],[17.99979,42.77518],[17.99975,42.7739],[18.00007,42.77231],[18.00018,42.76573],[18.00168,42.76442],[18.00219,42.76363],[18.00515,42.75962],[18.00663,42.75855],[18.01058,42.75648],[18.01161,42.75539],[18.0123,42.75465],[18.02601,42.75448],[18.02882,42.75358],[18.03268,42.75248],[18.03451,42.75242],[18.03698,42.7518],[18.04343,42.75042],[18.04496,42.74908],[18.05144,42.74422],[18.05339,42.74396],[18.05616,42.74279],[18.0588,42.74176],[18.06393,42.73857],[18.06562,42.73715],[18.06755,42.7354],[18.07105,42.73316],[18.07609,42.7296],[18.07667,42.7287],[18.07663,42.72749],[18.07691,42.7266],[18.07903,42.72698],[18.08019,42.72679],[18.08159,42.72632],[18.08416,42.72504],[18.0927,42.72184],[18.10032,42.71919],[18.10392,42.71713],[18.10843,42.71355],[18.10933,42.71193],[18.11045,42.70962],[18.11141,42.70663],[18.11131,42.7027],[18.11036,42.70155],[18.1107,42.69967],[18.11049,42.69906],[18.10873,42.69663],[18.10813,42.69359],[18.10592,42.68963],[18.1059,42.68878],[18.10976,42.68843],[18.1115,42.68857],[18.11246,42.68857],[18.11442,42.68876],[18.11626,42.68833],[18.11746,42.68747],[18.11948,42.68633],[18.12422,42.68545],[18.12667,42.68494],[18.12851,42.68472],[18.13373,42.68444],[18.13527,42.68384],[18.13813,42.68226],[18.14085,42.68261],[18.14253,42.68248],[18.14596,42.68086],[18.14686,42.67969],[18.14772,42.67676],[18.14931,42.67204],[18.15328,42.66798],[18.15613,42.66443],[18.15772,42.66199],[18.15828,42.65994],[18.15819,42.65896],[18.16598,42.66117],[18.17158,42.66197],[18.17261,42.66182],[18.17396,42.66295],[18.17501,42.66333],[18.17606,42.66339],[18.17913,42.66322],[18.18087,42.66254],[18.18338,42.66011],[18.18589,42.65781],[18.18772,42.65804],[18.19093,42.65757],[18.19327,42.65669],[18.1948,42.65524],[18.19497,42.65473],[18.19673,42.65381],[18.19782,42.65206],[18.19862,42.6508],[18.20424,42.64569],[18.20761,42.64051],[18.21389,42.63647],[18.21563,42.63405],[18.21844,42.63086],[18.22147,42.62796],[18.22422,42.62502],[18.22887,42.62202],[18.23381,42.62163],[18.23632,42.62041],[18.23728,42.61894],[18.23733,42.61801],[18.23911,42.6185],[18.24241,42.61822],[18.24368,42.61763],[18.24522,42.61563],[18.24619,42.61395],[18.2466,42.61106],[18.24679,42.60541],[18.24911,42.60547],[18.25844,42.60781],[18.26273,42.60892],[18.26477,42.61117],[18.27044,42.61342],[18.27312,42.61307],[18.2744,42.61517],[18.28073,42.61969],[18.28168,42.61995],[18.28503,42.61967],[18.28861,42.61945],[18.29249,42.61817],[18.31086,42.61733],[18.3235,42.61934],[18.33193,42.62142],[18.34811,42.6216],[18.36845,42.61827],[18.37062,42.61669],[18.37631,42.60993],[18.3824,42.60094],[18.38596,42.59811],[18.39259,42.59094],[18.40075,42.58794],[18.40066,42.586],[18.40545,42.58592],[18.41875,42.57781],[18.43351,42.56805],[18.43729,42.56658],[18.43954,42.56497],[18.44008,42.5637],[18.44096,42.5567],[18.44343,42.55112],[18.44341,42.54918],[18.44244,42.53503],[18.44201,42.52551],[18.44072,42.52124],[18.44021,42.52064],[18.446,42.5169],[18.45055,42.51001],[18.44931,42.50814],[18.44407,42.50121],[18.44394,42.49871],[18.44321,42.49754],[18.4433,42.4959],[18.44223,42.49397],[18.44171,42.49318],[18.44115,42.49026],[18.44175,42.48786],[18.44102,42.48631],[18.43987,42.48498],[18.44613,42.48264],[18.45077,42.47909],[18.45274,42.4765],[18.456,42.47482],[18.45815,42.47529],[18.46102,42.47444],[18.46634,42.47203],[18.47647,42.46665],[18.4787,42.46409],[18.48239,42.45883],[18.48673,42.45316],[18.49119,42.45006],[18.49437,42.4474],[18.49621,42.44357],[18.5069,42.43435],[18.48793,42.4169],[18.48287,42.41931],[18.47862,42.42371],[18.47561,42.42659],[18.47261,42.42935],[18.47124,42.43261],[18.46591,42.43701],[18.46385,42.43961],[18.45969,42.4424],[18.44974,42.44683],[18.44562,42.44309],[18.4306,42.43708],[18.42236,42.44081],[18.42253,42.44582],[18.40219,42.45741],[18.40716,42.46456],[18.37051,42.48292],[18.35026,42.49159],[18.30503,42.5133],[18.26941,42.52582],[18.26348,42.53474],[18.24091,42.54979],[18.22254,42.56181],[18.21945,42.56775],[18.19851,42.56648],[18.18718,42.57255],[18.18443,42.57887],[18.16795,42.58532],[18.16915,42.5905],[18.19868,42.59998],[18.21327,42.59833],[18.21568,42.60453],[18.2016,42.61501],[18.18237,42.60983],[18.16401,42.61476],[18.14461,42.62524],[18.13379,42.62676],[18.1307,42.61792],[18.12178,42.61678],[18.10822,42.62171],[18.10444,42.6351],[18.03989,42.64873],[17.94891,42.64128],[17.06039,42.69152],[16.34491,42.37123],[16.22612,42.3834],[16.39023,42.73995],[15.45776,43.0729]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-dof-2018",name:"dgu.hr: Croatia 2018 Aerial imagery",type:"wms",template:"https://geoportal.dgu.hr/services/inspire/orthophoto_2018/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.OrthoImagery&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[16.29963,46.3815],[16.30495,46.38151],[16.30862,45.22967],[16.49996,45.22994],[16.49997,45.20987],[16.49689,45.20907],[16.49491,45.20698],[16.49417,45.20094],[16.49086,45.19326],[16.48662,45.1876],[16.47863,45.18198],[16.47765,45.18004],[16.4782,45.17638],[16.48211,45.1696],[16.4831,45.16561],[16.48159,45.15965],[16.47876,45.15632],[16.47142,45.14842],[16.46679,45.14146],[16.46448,45.13997],[16.46184,45.13997],[16.46186,45.13855],[16.45391,45.13501],[16.45031,45.13174],[16.44722,45.13101],[16.44499,45.12871],[16.44087,45.12514],[16.43486,45.12272],[16.42988,45.12175],[16.42383,45.1219],[16.4237,45.12057],[16.41417,45.11902],[16.40499,45.11581],[16.39821,45.11157],[16.39752,45.10909],[16.39675,45.1063],[16.39744,45.10509],[16.40636,45.0997],[16.40645,45.09831],[16.40585,45.09661],[16.40233,45.09449],[16.39958,45.09255],[16.39915,45.08807],[16.39641,45.08485],[16.39057,45.08037],[16.3898,45.0771],[16.39152,45.07207],[16.39134,45.06613],[16.38817,45.06067],[16.38757,45.05236],[16.38165,45.04794],[16.37718,45.04842],[16.37315,45.0426],[16.3686,45.03969],[16.36362,45.03508],[16.3613,45.03023],[16.36311,45.02392],[16.36122,45.01706],[16.36268,45.01172],[16.35984,45.00693],[16.3583,45.00232],[16.35504,44.99959],[16.34706,44.99704],[16.3304,44.99691],[16.3062,44.9957],[16.28569,44.9923],[16.28191,44.99588],[16.27573,45.00001],[16.2541,45.00608],[16.22423,45.01567],[16.21599,45.02088],[16.17582,45.03205],[16.16707,45.05861],[16.16192,45.07231],[16.14407,45.08007],[16.10407,45.08891],[16.08175,45.10321],[16.08021,45.12308],[16.06441,45.14427],[16.04622,45.16074],[16.04158,45.17562],[16.01326,45.17683],[16.00914,45.18458],[16.02064,45.19631],[16.01395,45.20418],[16.00794,45.213],[15.99318,45.21651],[15.97876,45.2257],[15.97395,45.22316],[15.96605,45.21736],[15.9561,45.21445],[15.94429,45.2106],[15.91799,45.21049],[15.91619,45.21291],[15.92176,45.22222],[15.91837,45.22313],[15.90816,45.22098],[15.90099,45.22244],[15.89653,45.21288],[15.88537,45.21276],[15.85396,45.21397],[15.84108,45.21869],[15.83645,45.21615],[15.83611,45.20986],[15.82804,45.20345],[15.81842,45.20248],[15.80658,45.1968],[15.79216,45.18784],[15.77896,45.1736],[15.77476,45.17354],[15.77482,45.17128],[15.77087,45.16404],[15.77349,45.1522],[15.78109,45.14609],[15.7871,45.13525],[15.78564,45.12889],[15.79482,45.12108],[15.79516,45.11278],[15.78486,45.10321],[15.78341,45.09297],[15.77534,45.09164],[15.77785,45.08373],[15.77597,45.08369],[15.776,45.08188],[15.77439,45.08001],[15.77534,45.07382],[15.75122,45.06121],[15.75929,45.05309],[15.76032,45.04691],[15.77165,45.02161],[15.77654,45.01075],[15.78186,45.0096],[15.78701,45.00456],[15.79001,44.99352],[15.78572,44.98271],[15.78847,44.97482],[15.7871,44.96984],[15.781,44.96504],[15.77371,44.96583],[15.77182,44.96765],[15.75336,44.96619],[15.75113,44.95836],[15.75371,44.95083],[15.75113,44.94488],[15.74281,44.93655],[15.76487,44.88762],[15.76401,44.87071],[15.79834,44.84699],[15.79628,44.84419],[15.76143,44.82617],[15.73551,44.82288],[15.7477,44.80863],[15.74547,44.80121],[15.75972,44.78829],[15.76744,44.77794],[15.77465,44.77196],[15.77568,44.76758],[15.78289,44.75844],[15.7877,44.75051],[15.81242,44.74332],[15.81911,44.73686],[15.82615,44.72649],[15.8325,44.72393],[15.84726,44.7393],[15.85894,44.74003],[15.87147,44.73613],[15.87696,44.73564],[15.88005,44.74698],[15.89481,44.75271],[15.90631,44.74978],[15.93292,44.71734],[15.95884,44.71466],[15.96502,44.70807],[15.96605,44.69624],[15.97206,44.68525],[15.9767,44.6772],[15.99215,44.66902],[16.0251,44.66023],[16.0397,44.654],[16.0445,44.64081],[16.04828,44.63251],[16.05823,44.62811],[16.06167,44.622],[16.0651,44.60538],[16.0548,44.60122],[16.05617,44.59291],[16.04176,44.58387],[16.02562,44.58313],[16.02493,44.57506],[16.0294,44.56185],[16.05926,44.54253],[16.10287,44.53567],[16.12724,44.51585],[16.13377,44.49871],[16.1475,44.48132],[16.14269,44.45829],[16.15059,44.44432],[16.14716,44.43648],[16.14819,44.42716],[16.15711,44.42593],[16.17187,44.41318],[16.17977,44.4019],[16.16398,44.39135],[16.14578,44.38816],[16.13651,44.38816],[16.13754,44.38031],[16.15643,44.38399],[16.17634,44.37639],[16.20998,44.36191],[16.22406,44.3489],[16.22406,44.33809],[16.2038,44.3236],[16.19556,44.30592],[16.19797,44.272],[16.2244,44.24422],[16.22852,44.22355],[16.2347,44.20633],[16.23713,44.20428],[16.23721,44.20365],[16.23912,44.20362],[16.27178,44.17753],[16.29719,44.163],[16.30577,44.15084],[16.30509,44.14984],[16.12495,44.1494],[16.12815,43.60943],[15.92174,43.60849],[15.52195,43.61231],[14.78331,44.11942],[14.28198,44.49521],[13.88603,44.75271],[13.82578,44.82532],[13.81273,44.84467],[13.80363,44.85648],[13.78029,44.86633],[13.76638,44.87777],[13.73428,44.88604],[13.72673,44.90471],[13.72647,44.90823],[13.71858,44.90817],[13.70853,44.9134],[13.70544,44.92835],[13.70905,44.94646],[13.72398,44.94888],[13.74596,44.94366],[13.76862,44.94342],[13.76673,44.96128],[13.74956,44.98156],[13.72261,44.98289],[13.69926,44.98714],[13.69017,44.99661],[13.68347,45.00984],[13.68334,45.01524],[13.6745,45.01506],[13.64605,45.03605],[13.60777,45.03763],[13.60451,45.08431],[13.60193,45.12296],[13.57035,45.13967],[13.56262,45.20309],[13.56571,45.27271],[13.55421,45.3116],[13.55397,45.31264],[13.55372,45.31784],[13.54998,45.31787],[13.52898,45.32753],[13.52383,45.39773],[13.51044,45.4146],[13.50975,45.42779],[13.50357,45.44261],[13.50872,45.44279],[13.5076,45.46073],[13.5052,45.46085],[13.48331,45.48595],[13.48555,45.496],[13.49894,45.50731],[13.51439,45.51032],[13.5443,45.4977],[13.56091,45.49377],[13.58344,45.48213],[13.58341,45.48066],[13.58734,45.48071],[13.62264,45.46586],[13.62274,45.46366],[13.63102,45.46387],[13.64511,45.46236],[13.65952,45.45616],[13.66785,45.45194],[13.67463,45.44773],[13.68073,45.44797],[13.68596,45.4511],[13.69643,45.45802],[13.70399,45.46013],[13.71042,45.46013],[13.71317,45.45688],[13.71969,45.45869],[13.72184,45.46133],[13.72699,45.46278],[13.74175,45.46453],[13.75248,45.46362],[13.76432,45.47054],[13.77308,45.46934],[13.77602,45.46747],[13.78933,45.46771],[13.80501,45.46386],[13.81119,45.4586],[13.81187,45.45483],[13.80913,45.45047],[13.80969,45.44577],[13.81865,45.4421],[13.819,45.43779],[13.83243,45.43803],[13.84217,45.43677],[13.85427,45.43439],[13.85827,45.42999],[13.86286,45.4305],[13.88238,45.429],[13.8859,45.43439],[13.89204,45.44297],[13.90762,45.45432],[13.91371,45.45664],[13.94096,45.45718],[13.94573,45.45938],[13.9595,45.45844],[13.9701,45.45233],[13.98027,45.45832],[13.98186,45.47094],[13.98663,45.47319],[13.99019,45.47328],[13.98087,45.48255],[13.98281,45.48451],[13.97113,45.49161],[13.96633,45.49335],[13.96186,45.49444],[13.95822,45.5071],[13.96337,45.5105],[13.96688,45.51465],[13.97414,45.51768],[13.97804,45.51738],[13.9816,45.51654],[13.98396,45.51432],[13.98937,45.51185],[13.99542,45.51104],[13.99336,45.51483],[13.99435,45.51756],[13.99804,45.52147],[14.00195,45.52298],[14.01465,45.52213],[14.03173,45.51173],[14.04495,45.50078],[14.04941,45.50117],[14.05375,45.50006],[14.07602,45.48728],[14.09147,45.48502],[14.10915,45.48586],[14.1267,45.48135],[14.14189,45.47795],[14.14872,45.48306],[14.15481,45.48385],[14.17172,45.48258],[14.18854,45.47864],[14.20335,45.47325],[14.20288,45.483],[14.21043,45.49459],[14.217,45.49654],[14.22047,45.50397],[14.23137,45.50845],[14.24884,45.50803],[14.26656,45.48715],[14.27695,45.49305],[14.28914,45.49296],[14.29467,45.48676],[14.30622,45.48345],[14.31733,45.48607],[14.31982,45.4846],[14.32179,45.4827],[14.32381,45.47413],[14.33656,45.48195],[14.34862,45.48791],[14.35282,45.48857],[14.36578,45.48821],[14.3869,45.49693],[14.39243,45.4975],[14.39462,45.50553],[14.41007,45.5099],[14.4138,45.51251],[14.42913,45.51215],[14.43346,45.51353],[14.43998,45.51931],[14.45299,45.52283],[14.47341,45.53756],[14.48749,45.54141],[14.49376,45.54991],[14.49238,45.56596],[14.49577,45.58008],[14.50058,45.58455],[14.50178,45.58852],[14.49311,45.59638],[14.49324,45.60041],[14.4953,45.60824],[14.49998,45.6084],[14.49993,45.61037],[14.50305,45.61087],[14.5112,45.61024],[14.51311,45.6103],[14.51569,45.61242],[14.52614,45.61357],[14.53247,45.61654],[14.54144,45.62448],[14.54242,45.62709],[14.54453,45.62895],[14.54779,45.63655],[14.56186,45.65401],[14.56487,45.6756],[14.56821,45.67686],[14.57954,45.67464],[14.58418,45.66912],[14.59748,45.67254],[14.61164,45.66673],[14.61345,45.65737],[14.61027,45.65065],[14.60522,45.62774],[14.62551,45.61817],[14.63212,45.61512],[14.63507,45.60761],[14.64061,45.60736],[14.6471,45.60249],[14.65359,45.59515],[14.6544,45.59372],[14.65441,45.59304],[14.66074,45.59309],[14.67618,45.59236],[14.68164,45.59083],[14.68697,45.58689],[14.6881,45.5847],[14.69134,45.58365],[14.69391,45.58134],[14.69629,45.57799],[14.70107,45.56974],[14.70367,45.56282],[14.70119,45.55836],[14.69821,45.55431],[14.6947,45.55291],[14.69452,45.54617],[14.69276,45.54485],[14.69175,45.54122],[14.69211,45.53837],[14.68957,45.53456],[14.69169,45.53064],[14.69859,45.52874],[14.69724,45.53345],[14.69989,45.53651],[14.70526,45.53816],[14.72508,45.53642],[14.73145,45.53258],[14.73729,45.53237],[14.74024,45.5301],[14.74343,45.52568],[14.75239,45.52068],[14.76183,45.51444],[14.76891,45.51502],[14.77298,45.51369],[14.77363,45.51026],[14.7882,45.50911],[14.79239,45.50555],[14.79516,45.50609],[14.79864,45.50514],[14.80766,45.49592],[14.80725,45.49385],[14.80389,45.4912],[14.80796,45.48889],[14.80949,45.48475],[14.80996,45.47995],[14.82011,45.47205],[14.82058,45.46316],[14.83309,45.46353],[14.84553,45.46519],[14.86034,45.46974],[14.86689,45.46895],[14.87249,45.47437],[14.87904,45.4752],[14.88895,45.47917],[14.90252,45.47822],[14.90782,45.4814],[14.90776,45.48314],[14.90664,45.48736],[14.90735,45.4922],[14.91083,45.49401],[14.90718,45.49848],[14.90859,45.50377],[14.91184,45.50514],[14.90894,45.51097],[14.9093,45.51593],[14.91001,45.52055],[14.9162,45.52444],[14.91667,45.52845],[14.92157,45.53097],[14.93136,45.53217],[14.93561,45.53072],[14.94953,45.52378],[14.97395,45.51006],[14.98516,45.50063],[14.99253,45.49927],[15.00798,45.50055],[15.0143,45.5003],[15.01872,45.49811],[15.03046,45.48897],[15.04119,45.49067],[15.04639,45.49654],[15.057,45.49707],[15.06078,45.49352],[15.06255,45.49033],[15.07258,45.49062],[15.0793,45.48541],[15.08738,45.48583],[15.09116,45.48368],[15.09181,45.47995],[15.08809,45.47689],[15.0888,45.46924],[15.09558,45.46622],[15.10443,45.46618],[15.11499,45.45819],[15.12679,45.44959],[15.14018,45.44719],[15.14525,45.44164],[15.15085,45.43249],[15.15846,45.42765],[15.16778,45.42529],[15.17427,45.42633],[15.17775,45.42479],[15.18566,45.42951],[15.18453,45.43552],[15.18772,45.43759],[15.19142,45.43844],[15.19617,45.4385],[15.19971,45.43634],[15.2043,45.4303],[15.2073,45.42827],[15.22158,45.42864],[15.22412,45.43067],[15.22417,45.43742],[15.22972,45.44363],[15.23562,45.45042],[15.24152,45.45633],[15.25385,45.46101],[15.26429,45.46469],[15.26912,45.46833],[15.2749,45.46903],[15.27968,45.46845],[15.29767,45.46241],[15.32298,45.45819],[15.32782,45.45555],[15.33832,45.46006],[15.3438,45.45993],[15.34575,45.46585],[15.34976,45.46949],[15.35548,45.47822],[15.36156,45.48157],[15.37766,45.48781],[15.37459,45.48996],[15.36881,45.49261],[15.36144,45.49186],[15.35707,45.49472],[15.34622,45.50154],[15.33082,45.50724],[15.32298,45.51402],[15.32227,45.51824],[15.31484,45.51915],[15.31177,45.52105],[15.30941,45.52576],[15.30938,45.52971],[15.30487,45.52969],[15.29879,45.53386],[15.29661,45.53841],[15.29691,45.5425],[15.29431,45.54807],[15.29372,45.56947],[15.29396,45.58243],[15.27414,45.59903],[15.27225,45.6053],[15.28122,45.61198],[15.29372,45.61578],[15.30233,45.61603],[15.29738,45.62139],[15.2975,45.63162],[15.30363,45.63575],[15.33112,45.63806],[15.34044,45.63682],[15.34669,45.63806],[15.34103,45.63888],[15.33702,45.64309],[15.33702,45.6468],[15.34292,45.64903],[15.3553,45.6501],[15.37335,45.64845],[15.37831,45.64408],[15.38657,45.64292],[15.38916,45.64086],[15.39836,45.64787],[15.39176,45.65183],[15.38904,45.65604],[15.3881,45.659],[15.38338,45.66667],[15.37276,45.67566],[15.37005,45.67912],[15.36734,45.68233],[15.36639,45.67516],[15.352,45.66585],[15.34575,45.66692],[15.34327,45.67129],[15.34598,45.6858],[15.35778,45.69124],[15.35896,45.69321],[15.35212,45.69791],[15.35424,45.7101],[15.34315,45.7087],[15.33808,45.70195],[15.329,45.69445],[15.32392,45.69404],[15.33136,45.67368],[15.32451,45.67005],[15.31413,45.67211],[15.31071,45.67714],[15.30387,45.6844],[15.29938,45.6825],[15.28287,45.69041],[15.28263,45.70409],[15.28004,45.70483],[15.27296,45.70112],[15.27308,45.69297],[15.26859,45.69132],[15.26437,45.69142],[15.25461,45.69799],[15.25213,45.70458],[15.25042,45.70792],[15.24647,45.71076],[15.24724,45.71377],[15.24541,45.71525],[15.24087,45.71579],[15.2401,45.71772],[15.23532,45.719],[15.23367,45.72238],[15.23656,45.72608],[15.25379,45.73028],[15.25904,45.72921],[15.2703,45.73807],[15.27042,45.74132],[15.27933,45.74696],[15.29059,45.74963],[15.29278,45.75428],[15.29903,45.7577],[15.30723,45.7584],[15.31643,45.76297],[15.3228,45.76309],[15.32982,45.76597],[15.3533,45.77655],[15.36197,45.77959],[15.36775,45.77963],[15.3725,45.78229],[15.37772,45.78234],[15.3804,45.78186],[15.38204,45.78291],[15.38291,45.7856],[15.39323,45.79224],[15.39851,45.79415],[15.40482,45.79528],[15.41276,45.79759],[15.4168,45.7975],[15.42025,45.79874],[15.44906,45.79833],[15.46384,45.79761],[15.47062,45.79902],[15.46703,45.80238],[15.4662,45.81097],[15.4626,45.81716],[15.46272,45.82041],[15.4662,45.82215],[15.47278,45.82067],[15.47455,45.82141],[15.47387,45.82458],[15.47602,45.82937],[15.48071,45.83111],[15.49316,45.83504],[15.49738,45.83374],[15.49897,45.83202],[15.50569,45.83101],[15.50729,45.8291],[15.50661,45.82499],[15.51015,45.82458],[15.5131,45.82577],[15.51914,45.82501],[15.52513,45.82641],[15.53144,45.83115],[15.5315,45.83329],[15.53536,45.83666],[15.53445,45.84085],[15.53438,45.84594],[15.53477,45.8477],[15.5364,45.85015],[15.53989,45.85055],[15.54429,45.84863],[15.55131,45.84846],[15.55369,45.84675],[15.55563,45.84103],[15.55871,45.83936],[15.55824,45.84189],[15.5599,45.8459],[15.56453,45.8489],[15.56666,45.85054],[15.56722,45.85191],[15.56902,45.85535],[15.57099,45.85595],[15.57316,45.85585],[15.57674,45.85445],[15.58208,45.8507],[15.58645,45.84938],[15.59155,45.84904],[15.5936,45.84878],[15.59706,45.84726],[15.60159,45.84556],[15.6061,45.84455],[15.61125,45.84251],[15.61172,45.84169],[15.61175,45.8384],[15.61794,45.83844],[15.62135,45.83665],[15.62662,45.83504],[15.6301,45.83508],[15.6328,45.8345],[15.63617,45.83193],[15.63715,45.8304],[15.63749,45.82716],[15.63986,45.82649],[15.64191,45.82462],[15.64389,45.82588],[15.64679,45.83072],[15.64819,45.83258],[15.65461,45.83693],[15.65905,45.83958],[15.66213,45.84285],[15.66478,45.84397],[15.66841,45.84418],[15.67124,45.84315],[15.67615,45.84369],[15.67829,45.84494],[15.68003,45.84534],[15.68771,45.84555],[15.69097,45.84555],[15.69081,45.84835],[15.69212,45.84996],[15.69403,45.85136],[15.69633,45.85186],[15.69817,45.85137],[15.69404,45.8549],[15.68885,45.85909],[15.68248,45.86067],[15.67953,45.86276],[15.67553,45.86715],[15.67431,45.86884],[15.67484,45.87033],[15.67659,45.87161],[15.67733,45.87335],[15.67618,45.87521],[15.67599,45.87739],[15.6773,45.87991],[15.67782,45.88346],[15.67984,45.88498],[15.68217,45.88501],[15.67997,45.8865],[15.67935,45.88766],[15.6767,45.88933],[15.67639,45.89149],[15.67723,45.89276],[15.67885,45.89367],[15.67887,45.8942],[15.67718,45.89569],[15.67698,45.89707],[15.67789,45.89907],[15.67649,45.90062],[15.67639,45.90182],[15.67547,45.90472],[15.6763,45.90599],[15.67991,45.90833],[15.68067,45.9085],[15.68251,45.91063],[15.68561,45.91093],[15.68793,45.91095],[15.68787,45.91501],[15.68927,45.91582],[15.69103,45.9161],[15.69245,45.91687],[15.69442,45.9174],[15.69554,45.91715],[15.69563,45.91873],[15.69681,45.92187],[15.7023,45.92368],[15.70256,45.92448],[15.70003,45.92579],[15.69988,45.92749],[15.70156,45.92934],[15.70171,45.93176],[15.7041,45.93322],[15.70463,45.93664],[15.70401,45.93896],[15.70548,45.94101],[15.70531,45.94214],[15.70501,45.94349],[15.70525,45.94534],[15.70404,45.94866],[15.70534,45.95092],[15.70563,45.95752],[15.70575,45.96322],[15.69991,45.98064],[15.69625,45.98753],[15.69643,45.99138],[15.69779,45.99196],[15.69619,45.994],[15.69584,45.99749],[15.6982,46.00261],[15.70327,46.00413],[15.70817,46.00667],[15.7074,46.00974],[15.70663,46.01093],[15.70374,46.01162],[15.70233,46.01339],[15.70209,46.01601],[15.70292,46.01818],[15.70793,46.02027],[15.70947,46.02232],[15.70947,46.02498],[15.71247,46.03038],[15.71194,46.03599],[15.71584,46.04017],[15.71902,46.04083],[15.71991,46.04345],[15.72315,46.04492],[15.72545,46.04492],[15.72026,46.04635],[15.7189,46.04844],[15.7189,46.04992],[15.71265,46.05536],[15.70274,46.05675],[15.68923,46.06003],[15.68103,46.06428],[15.67354,46.06772],[15.66812,46.06903],[15.66015,46.06719],[15.65596,46.06903],[15.65343,46.07112],[15.65213,46.07496],[15.65408,46.07852],[15.64594,46.08053],[15.64417,46.08213],[15.63726,46.07996],[15.63054,46.08057],[15.62323,46.08368],[15.61497,46.08994],[15.61432,46.09235],[15.61556,46.09423],[15.61886,46.09522],[15.61951,46.09677],[15.61373,46.09653],[15.6106,46.09845],[15.60748,46.10508],[15.60743,46.10826],[15.60466,46.10824],[15.6009,46.1108],[15.60143,46.11691],[15.60352,46.12515],[15.60677,46.13378],[15.60069,46.13729],[15.5922,46.14346],[15.59179,46.14731],[15.5945,46.15025],[15.60181,46.15303],[15.60789,46.15495],[15.6073,46.15666],[15.59928,46.15907],[15.59963,46.1632],[15.60317,46.1659],[15.60411,46.1688],[15.61432,46.1746],[15.62305,46.17615],[15.62671,46.17872],[15.63284,46.18252],[15.63178,46.18599],[15.63349,46.18791],[15.64192,46.19008],[15.6444,46.19281],[15.64251,46.19967],[15.64263,46.20351],[15.63833,46.20478],[15.63709,46.20743],[15.63844,46.21388],[15.64198,46.2158],[15.64329,46.21654],[15.64456,46.21655],[15.64451,46.21888],[15.64602,46.21958],[15.64847,46.21976],[15.65007,46.22006],[15.65216,46.22133],[15.65511,46.22198],[15.65664,46.22198],[15.66065,46.22327],[15.66505,46.22522],[15.66756,46.22561],[15.67045,46.22835],[15.67652,46.22955],[15.68242,46.22937],[15.68587,46.22845],[15.68917,46.22678],[15.69602,46.22614],[15.70286,46.225],[15.70846,46.22578],[15.71359,46.22578],[15.71787,46.22496],[15.72642,46.2259],[15.73032,46.22504],[15.73229,46.2238],[15.73321,46.222],[15.74094,46.22431],[15.74742,46.2238],[15.75185,46.22261],[15.75592,46.2221],[15.75798,46.22027],[15.75916,46.21765],[15.75792,46.21445],[15.75497,46.21186],[15.75601,46.21035],[15.75778,46.2098],[15.76893,46.21269],[15.77774,46.21586],[15.7832,46.21908],[15.78556,46.22143],[15.78491,46.22365],[15.78957,46.22906],[15.78925,46.23608],[15.79181,46.23891],[15.79529,46.24004],[15.79694,46.24269],[15.79223,46.25019],[15.78916,46.25376],[15.78742,46.2588],[15.78813,46.26088],[15.79102,46.2621],[15.79715,46.26272],[15.80205,46.263],[15.81013,46.26465],[15.81974,46.26461],[15.82313,46.26416],[15.82974,46.26549],[15.83874,46.26855],[15.84753,46.26877],[15.85219,46.26902],[15.86154,46.27034],[15.86384,46.27207],[15.86392,46.27348],[15.86221,46.27554],[15.86336,46.27735],[15.86652,46.27874],[15.8703,46.2811],[15.87487,46.28251],[15.87755,46.2832],[15.88327,46.28261],[15.89486,46.28614],[15.89537,46.28936],[15.89668,46.29014],[15.91594,46.29024],[15.91596,46.29077],[15.91918,46.28974],[15.92608,46.29051],[15.92855,46.29127],[15.93006,46.29121],[15.93211,46.29242],[15.93459,46.29274],[15.93863,46.2925],[15.94279,46.29335],[15.94636,46.29647],[15.95326,46.29747],[15.95595,46.29896],[15.96043,46.29937],[15.96264,46.3004],[15.96668,46.30778],[15.9727,46.31224],[15.97386,46.31387],[15.97615,46.31511],[15.97807,46.31491],[15.9847,46.31391],[15.98618,46.31693],[15.98913,46.31725],[15.99284,46.31713],[16.00352,46.31114],[16.01013,46.3131],[16.01284,46.3133],[16.0165,46.31522],[16.01709,46.31636],[16.01614,46.31852],[16.01361,46.32063],[16.01408,46.32292],[16.02222,46.3285],[16.02405,46.33265],[16.02812,46.33546],[16.03525,46.33998],[16.03962,46.34051],[16.04546,46.34006],[16.04758,46.33868],[16.05189,46.33795],[16.05484,46.34104],[16.05879,46.3441],[16.06357,46.34499],[16.07131,46.3449],[16.0713,46.34703],[16.07116,46.36293],[16.0691,46.3629],[16.06271,46.36942],[16.05136,46.37687],[16.04534,46.38216],[16.0467,46.38488],[16.05625,46.39644],[16.08799,46.39139],[16.13842,46.40811],[16.1501,46.40762],[16.15883,46.40457],[16.17045,46.3957],[16.17765,46.392],[16.17818,46.38838],[16.17989,46.38822],[16.18679,46.39066],[16.19181,46.38907],[16.1947,46.38728],[16.19405,46.38224],[16.20266,46.38378],[16.20827,46.38732],[16.21788,46.38793],[16.22042,46.38598],[16.22484,46.39005],[16.23204,46.3905],[16.23888,46.38769],[16.24106,46.38236],[16.24985,46.38289],[16.26507,46.37886],[16.27191,46.3813],[16.29863,46.38102],[16.29963,46.3815]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-hok",name:"dgu.hr: HOK",type:"wms",template:"http://geoportal.dgu.hr/services/hok/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=HOK5&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2009-01-01T00:00:00.000Z",startDate:"1954-01-01T00:00:00.000Z",polygon:[[[15.34155,45.63868],[15.34189,45.6658],[15.28409,45.66592],[15.28413,45.69284],[15.22636,45.69305],[15.22662,45.74698],[15.28451,45.74695],[15.2846,45.7739],[15.34236,45.77372],[15.34254,45.80068],[15.45841,45.80029],[15.45879,45.85439],[15.66157,45.85331],[15.66243,45.93435],[15.69152,45.93405],[15.6929,46.04211],[15.6638,46.04223],[15.66414,46.06921],[15.60599,46.06951],[15.60621,46.09654],[15.57707,46.09666],[15.57806,46.17763],[15.63625,46.17733],[15.63702,46.23139],[15.7828,46.23041],[15.78358,46.28441],[15.87117,46.28382],[15.8716,46.3108],[15.95914,46.31006],[15.95979,46.33703],[16.01811,46.33653],[16.01862,46.36357],[16.04789,46.36331],[16.04884,46.41724],[16.19531,46.41579],[16.19471,46.38889],[16.25311,46.38812],[16.25492,46.47124],[16.22578,46.47156],[16.22694,46.5235],[16.3147,46.52252],[16.31551,46.54945],[16.49498,46.54726],[16.49507,46.52025],[16.5285,46.52066],[16.52923,46.49372],[16.61721,46.49476],[16.61798,46.46787],[16.67639,46.46855],[16.67703,46.44152],[16.7063,46.44188],[16.70699,46.41487],[16.76552,46.41549],[16.76617,46.38853],[16.85389,46.38939],[16.85449,46.36248],[16.88367,46.36271],[16.88474,46.30879],[16.91401,46.30911],[16.91452,46.2821],[16.94362,46.28228],[16.94422,46.25534],[16.9734,46.25567],[16.97392,46.2286],[17.06134,46.22946],[17.0619,46.20241],[17.14931,46.20303],[17.14974,46.17606],[17.20798,46.17647],[17.20888,46.12257],[17.23786,46.1227],[17.23824,46.0957],[17.26734,46.09594],[17.2678,46.06891],[17.29669,46.06918],[17.29746,46.01514],[17.38458,46.01562],[17.38501,45.98861],[17.41389,45.98879],[17.41432,45.96183],[17.58847,45.96255],[17.58864,45.93557],[17.61761,45.93566],[17.61786,45.9087],[17.64683,45.90879],[17.647,45.88182],[17.67597,45.88185],[17.67619,45.85487],[17.76296,45.85505],[17.76318,45.82808],[17.85004,45.82823],[17.85012,45.80125],[18.05273,45.80131],[18.05268,45.77432],[18.11053,45.77426],[18.11058,45.80131],[18.25533,45.80104],[18.2552,45.77405],[18.39974,45.7736],[18.39961,45.74662],[18.42871,45.74656],[18.42879,45.77354],[18.45772,45.77333],[18.45793,45.80038],[18.54488,45.80014],[18.54509,45.82698],[18.57415,45.82689],[18.57436,45.85388],[18.60329,45.8537],[18.60354,45.88072],[18.63264,45.8806],[18.63316,45.93459],[18.72019,45.93399],[18.71984,45.90706],[18.80688,45.90643],[18.80726,45.93339],[18.83627,45.93318],[18.8355,45.87925],[18.86438,45.87904],[18.8631,45.79808],[18.89206,45.79793],[18.89172,45.77085],[18.97845,45.7701],[18.97609,45.60815],[18.94674,45.60836],[18.94635,45.58143],[19.06167,45.58044],[19.06145,45.55343],[19.08986,45.55325],[19.08952,45.52622],[19.1181,45.52595],[19.11716,45.47187],[19.00223,45.47295],[19.00167,45.44598],[19.05918,45.44556],[19.05823,45.39143],[19.00055,45.39197],[19.00014,45.36502],[19.08625,45.36421],[19.08573,45.33727],[19.11448,45.3371],[19.11397,45.31],[19.14267,45.30979],[19.14207,45.28274],[19.28549,45.28127],[19.28489,45.25415],[19.4568,45.25211],[19.45472,45.17123],[19.16856,45.17445],[19.16817,45.14748],[19.13939,45.14775],[19.13879,45.12072],[19.08165,45.12126],[19.08114,45.09439],[19.10975,45.09406],[19.10873,45.04013],[19.08016,45.04028],[19.07909,44.98637],[19.13611,44.98592],[19.13517,44.93186],[19.10656,44.9321],[19.10609,44.90514],[18.99209,44.90614],[18.99124,44.85213],[18.79191,44.85367],[18.79234,44.8808],[18.73541,44.88107],[18.73651,44.96209],[18.76496,44.96185],[18.76538,44.98887],[18.70828,44.98926],[18.70866,45.0163],[18.68009,45.01642],[18.6803,45.04344],[18.42323,45.04465],[18.42374,45.09866],[18.2236,45.09923],[18.22349,45.07223],[18.08061,45.07241],[18.08057,45.09944],[18.02342,45.09938],[18.02346,45.12646],[17.99489,45.12649],[17.99502,45.0995],[17.9377,45.09947],[17.93774,45.04546],[17.88064,45.04546],[17.88077,45.01844],[17.82362,45.01831],[17.82354,45.04528],[17.76635,45.04519],[17.76626,45.0722],[17.70911,45.07196],[17.70894,45.09908],[17.42317,45.09794],[17.42287,45.12498],[17.30845,45.12429],[17.3082,45.1513],[17.27945,45.15115],[17.27988,45.1242],[17.16546,45.12342],[17.16503,45.15034],[17.10789,45.14992],[17.10755,45.17694],[17.05014,45.17634],[17.04972,45.20347],[16.93521,45.20239],[16.93428,45.25649],[16.90553,45.25619],[16.9066,45.20233],[16.84932,45.20161],[16.84996,45.17466],[16.67818,45.1727],[16.6775,45.19975],[16.49516,45.19753],[16.49495,45.17051],[16.48371,45.17063],[16.48239,45.11675],[16.42516,45.11744],[16.42384,45.06345],[16.39526,45.06375],[16.39462,45.03685],[16.36605,45.03715],[16.36473,44.98321],[16.25065,44.98453],[16.2512,45.01145],[16.16557,45.01229],[16.16668,45.06634],[16.10953,45.06691],[16.11017,45.0925],[16.10689,45.094],[16.08143,45.09424],[16.08202,45.12129],[16.05341,45.12147],[16.05405,45.14847],[16.02539,45.1488],[16.02581,45.17571],[15.99724,45.17598],[15.99775,45.20305],[15.79723,45.20455],[15.79531,45.06961],[15.76665,45.06979],[15.7664,45.04278],[15.79489,45.04263],[15.79382,44.96167],[15.76529,44.9618],[15.76423,44.88077],[15.79271,44.88062],[15.79199,44.82667],[15.76355,44.82685],[15.7632,44.79982],[15.79156,44.79967],[15.79088,44.74562],[15.87618,44.74498],[15.87656,44.77185],[15.9049,44.77176],[15.90449,44.74477],[15.93273,44.74465],[15.93243,44.71754],[15.98923,44.71706],[15.98885,44.69012],[16.01713,44.68985],[16.01679,44.66278],[16.0451,44.6626],[16.04459,44.6356],[16.07287,44.6353],[16.07197,44.5814],[16.01525,44.58182],[16.01483,44.55486],[16.12797,44.55379],[16.12712,44.49979],[16.15522,44.49954],[16.15429,44.44558],[16.1826,44.44527],[16.1815,44.39122],[16.20964,44.39101],[16.20905,44.36395],[16.23741,44.36368],[16.23673,44.33664],[16.20858,44.33691],[16.207,44.25603],[16.2349,44.25572],[16.23396,44.20168],[16.29013,44.20104],[16.2897,44.17414],[16.31772,44.17379],[16.31663,44.11979],[16.37272,44.11914],[16.37225,44.09218],[16.45636,44.09113],[16.4552,44.0371],[16.5352,44.0371],[16.53597,44.0101],[16.56391,44.01041],[16.56528,43.95653],[16.62128,43.95714],[16.6218,43.93011],[16.62798,43.93014],[16.62875,43.90327],[16.67858,43.90383],[16.67918,43.87683],[16.7351,43.87739],[16.73686,43.79647],[16.76479,43.79672],[16.76535,43.76982],[16.82123,43.77041],[16.82174,43.74335],[16.84959,43.74366],[16.85019,43.71671],[16.90603,43.71718],[16.90646,43.69013],[16.93431,43.69047],[16.93508,43.66353],[16.96272,43.66368],[16.96323,43.63673],[16.99104,43.63698],[16.99169,43.60998],[17.01932,43.61026],[17.01993,43.58328],[17.04773,43.58347],[17.04829,43.55648],[17.10378,43.55688],[17.10421,43.52991],[17.15987,43.53038],[17.1603,43.50337],[17.27149,43.50415],[17.27192,43.47709],[17.29969,43.47728],[17.30055,43.39625],[17.27283,43.39607],[17.27325,43.36912],[17.30093,43.36928],[17.30149,43.31522],[17.3293,43.31544],[17.32995,43.28845],[17.35728,43.28855],[17.35758,43.26158],[17.44067,43.26202],[17.44148,43.18102],[17.4968,43.18121],[17.49706,43.15426],[17.58006,43.15454],[17.58023,43.12755],[17.60782,43.12758],[17.60808,43.1007],[17.66331,43.10079],[17.66361,43.04688],[17.69116,43.04688],[17.69142,43.01974],[17.71897,43.01993],[17.71927,42.93889],[17.77442,42.93902],[17.77459,42.91203],[17.80223,42.91215],[17.80197,42.93911],[17.82952,42.93918],[17.82969,42.91221],[17.88476,42.91221],[17.88488,42.85819],[17.91248,42.85826],[17.91248,42.8312],[17.93999,42.83116],[17.9399,42.80422],[17.995,42.80428],[17.995,42.77726],[18.05002,42.77716],[18.05002,42.75023],[18.105,42.75023],[18.105,42.72318],[18.13229,42.72309],[18.13233,42.69616],[18.1598,42.69619],[18.15976,42.66906],[18.21456,42.66899],[18.21443,42.64201],[18.24203,42.64191],[18.2419,42.61495],[18.26928,42.61489],[18.26941,42.64185],[18.37913,42.64156],[18.37897,42.61457],[18.40648,42.61444],[18.40635,42.58753],[18.46111,42.58718],[18.46025,42.47925],[18.48763,42.47909],[18.48746,42.45215],[18.54218,42.45187],[18.54149,42.37078],[18.51411,42.37097],[18.51424,42.39792],[16.48009,42.74046],[15.71251,42.99134],[13.71386,44.87631],[13.59592,45.03763],[13.56502,45.11763],[13.56067,45.30623],[13.53207,45.30586],[13.52983,45.38682],[13.50211,45.38736],[13.49885,45.46741],[13.47018,45.46705],[13.46956,45.49407],[13.49675,45.49442],[13.49658,45.49889],[13.49816,45.49892],[13.49761,45.52141],[13.55507,45.52207],[13.5558,45.49522],[13.61331,45.49597],[13.61403,45.46895],[13.84428,45.47145],[13.84488,45.44442],[13.90234,45.44505],[13.90182,45.47205],[13.98808,45.47289],[13.98757,45.49985],[14.10275,45.50081],[14.10305,45.47379],[14.33334,45.47533],[14.33308,45.50232],[14.39059,45.50268],[14.39042,45.52959],[14.44797,45.52995],[14.44771,45.55697],[14.47642,45.55712],[14.47625,45.58419],[14.50504,45.58422],[14.50487,45.61128],[14.53375,45.61137],[14.53354,45.63832],[14.56229,45.63844],[14.56186,45.69242],[14.59074,45.69257],[14.59109,45.66553],[14.61984,45.66568],[14.62014,45.63868],[14.64885,45.63871],[14.6492,45.61173],[14.70683,45.61194],[14.70713,45.5579],[14.7358,45.55793],[14.73601,45.531],[14.79378,45.53112],[14.79382,45.50415],[14.82236,45.50421],[14.82262,45.47717],[14.88004,45.47735],[14.88008,45.5043],[15.11036,45.50421],[15.11028,45.47735],[15.1392,45.4772],[15.13899,45.45029],[15.22533,45.45011],[15.22593,45.47704],[15.34056,45.47674],[15.34073,45.50379],[15.28314,45.50394],[15.28391,45.63895],[15.34155,45.63868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25",name:"dgu.hr: Topo 25",type:"wms",template:"http://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2011-01-01T00:00:00.000Z",startDate:"1996-01-01T00:00:00.000Z",polygon:[[[16.245,46.6248],[16.49546,46.62492],[16.49503,46.50016],[16.87019,46.49981],[16.86968,46.375],[16.99482,46.375],[16.99448,46.25003],[17.24459,46.25015],[17.24476,46.12501],[17.3699,46.12489],[17.37007,46.00018],[17.74498,45.99994],[17.74481,45.87483],[18.61994,45.87507],[18.61959,46.00018],[18.99485,45.99982],[18.99485,45.62499],[19.1199,45.62496],[19.11982,45.37476],[19.36984,45.37494],[19.3701,45.25012],[19.49507,45.25],[19.49524,45.12502],[19.12016,45.12466],[19.11982,44.99989],[19.24444,45.00013],[19.24496,44.87509],[19.11982,44.87485],[19.11982,44.75015],[18.74474,44.74978],[18.74508,44.9903],[18.72568,44.9903],[18.72568,44.99977],[17.37007,44.99965],[17.37024,45.12514],[16.49528,45.1249],[16.49546,45.00001],[16.31693,45.00013],[16.31676,44.99491],[16.28483,44.99491],[16.28534,44.99977],[15.99524,45.00013],[15.99506,45.12514],[15.87009,45.12502],[15.87044,44.75015],[16.1202,44.75015],[16.11986,44.51671],[16.1257,44.51646],[16.12553,44.50006],[16.245,44.49993],[16.24517,44.25012],[16.37014,44.25012],[16.3698,44.12506],[16.62043,44.1253],[16.62077,44.00035],[16.74488,43.99998],[16.7454,43.87587],[16.87054,43.87538],[16.87019,43.75039],[16.99482,43.75002],[16.99533,43.62551],[17.24493,43.62489],[17.24527,43.50013],[17.36973,43.50001],[17.37024,43.24995],[17.61967,43.25008],[17.62018,43.12517],[17.74498,43.12529],[17.74498,43.00038],[17.87012,43.00025],[17.86995,42.87546],[18.11989,42.87559],[18.12006,42.75016],[18.24503,42.75016],[18.2452,42.62512],[18.49462,42.62537],[18.49514,42.50058],[18.61994,42.50033],[18.62011,42.37491],[18.37017,42.37529],[18.37017,42.48919],[18.34528,42.48931],[18.34528,42.50045],[18.12023,42.50007],[18.12006,42.61817],[18.11079,42.6183],[18.11062,42.62512],[17.49487,42.62487],[17.49453,42.73831],[17.43324,42.73806],[17.43324,42.74991],[17.2451,42.75016],[17.2451,42.87521],[16.99516,42.87508],[16.99516,42.83368],[17.17043,42.83343],[17.17026,42.75016],[16.95345,42.75016],[16.95345,42.66716],[16.77887,42.66716],[16.77835,42.75016],[16.72832,42.7502],[16.72829,42.74769],[16.70636,42.74775],[16.70628,42.75026],[16.62008,42.75029],[16.62008,42.97947],[16.60605,42.9795],[16.60601,42.99109],[16.62013,42.99137],[16.61991,43.12523],[16.36989,43.12504],[16.36989,43.00006],[16.12003,43.00038],[16.12038,42.95831],[16.01266,42.95824],[16.0124,42.9502],[15.99515,42.95008],[15.99524,43.08356],[16.1202,43.08356],[16.1202,43.12529],[16.24552,43.12492],[16.24466,43.37486],[15.99524,43.37511],[15.99524,43.48902],[15.99309,43.48911],[15.99313,43.49558],[15.99524,43.49558],[15.99524,43.49848],[15.9827,43.49854],[15.98266,43.49042],[15.95648,43.49032],[15.95657,43.50007],[15.87018,43.50007],[15.87018,43.62508],[15.74555,43.62483],[15.74547,43.61949],[15.62011,43.61936],[15.62024,43.62085],[15.49544,43.62085],[15.49527,43.62508],[15.3703,43.62502],[15.37028,43.74428],[15.35541,43.74433],[15.35537,43.74996],[15.12019,43.74996],[15.12011,43.87507],[14.99539,43.87507],[14.99522,44.00004],[14.87051,44.00004],[14.87025,44.12487],[14.7452,44.12493],[14.74545,44.24557],[14.7331,44.24557],[14.73292,44.24999],[14.49543,44.24993],[14.49552,44.4913],[14.48419,44.49987],[14.31004,44.49987],[14.31004,44.49706],[14.29871,44.49709],[14.29871,44.49999],[14.24549,44.50006],[14.24515,44.61552],[14.22884,44.61577],[14.22884,44.62493],[14.12035,44.62444],[14.12052,44.7499],[14.24532,44.75003],[14.24515,44.87497],[14.00448,44.87497],[14.00499,44.7995],[13.99555,44.79938],[13.99538,44.75015],[13.74544,44.74978],[13.74561,44.87497],[13.62064,44.87509],[13.62039,45.04157],[13.60382,45.04139],[13.60391,45.12478],[13.4955,45.12478],[13.49567,45.46519],[13.48675,45.46519],[13.4864,45.49648],[13.49533,45.49648],[13.49516,45.50683],[13.53807,45.50719],[13.53807,45.49997],[13.87041,45.49985],[13.87058,45.62472],[14.11983,45.62472],[14.12052,45.49997],[14.20618,45.50033],[14.20618,45.5096],[14.27708,45.50996],[14.27725,45.50021],[14.36995,45.50009],[14.37012,45.62484],[14.49526,45.62472],[14.4956,45.7498],[14.62023,45.74992],[14.6204,45.62496],[14.99514,45.62484],[14.99548,45.50009],[15.24508,45.49997],[15.24525,45.71649],[15.23701,45.71661],[15.23701,45.72524],[15.24542,45.72524],[15.24559,45.87483],[15.61998,45.87507],[15.61981,45.9997],[15.49519,45.99947],[15.49484,46.25003],[15.74512,46.24979],[15.7453,46.37489],[15.99472,46.37512],[15.99472,46.49993],[16.24517,46.49981],[16.245,46.6248]],[[15.68264,42.95868],[15.80795,42.95818],[15.80761,43.08318],[15.68264,43.08368],[15.68264,42.95868]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"dgu-topo-25-new",name:"dgu.hr: Topo 25 new",type:"wms",template:"http://geoportal.dgu.hr/services/tk/ows?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=tk:TK25_NOVI&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[16.49987,42.70991],[17.04993,42.70902],[17.04963,42.7443],[17.17218,42.74374],[17.17218,42.77966],[17.04993,42.78022],[17.05023,42.79823],[17.00138,42.79873],[17.00138,42.82574],[16.96479,42.82585],[16.96456,42.79895],[16.49941,42.79968],[16.49987,42.7711],[16.4826,42.7711],[16.4826,42.74363],[16.50002,42.74363],[16.49987,42.70991]],[[13.42719,45.54859],[13.61807,45.55389],[13.62292,45.46386],[13.76198,45.4671],[13.76191,45.46936],[13.77081,45.46955],[13.77088,45.46742],[14.58109,45.48389],[14.58723,45.30405],[14.77841,45.30701],[14.78114,45.21712],[14.97186,45.21981],[14.97694,45.03983],[14.78659,45.03716],[14.78924,44.94727],[14.5992,44.94406],[14.6051,44.76444],[14.2263,44.75745],[14.21941,44.93719],[14.05163,44.93381],[14.05277,44.91124],[14.03103,44.91065],[14.03717,44.75352],[13.8478,44.74922],[13.845,44.81933],[13.82273,44.8189],[13.82175,44.83856],[13.65443,44.83453],[13.64534,45.01441],[13.45529,45.00943],[13.42719,45.54859]],[[15.44375,43.10094],[15.48034,43.10133],[15.48064,43.08341],[15.44383,43.08352],[15.44375,43.10094]],[[15.72242,46.21722],[15.91671,46.21827],[15.91962,45.94844],[15.7261,45.94721],[15.72242,46.21722]],[[15.57866,43.0662],[15.58047,42.97671],[15.76423,42.97704],[15.76438,42.99522],[15.81316,42.99588],[15.81347,43.01328],[15.7715,43.0135],[15.77181,43.04041],[15.76363,43.04041],[15.76393,43.06764],[15.57866,43.0662]],[[16.3049,46.48965],[16.49957,46.48986],[16.49972,46.39978],[16.30505,46.39967],[16.3049,46.48965]],[[15.53442,45.85567],[16.30679,45.85976],[16.30619,46.03979],[16.50032,46.04037],[16.49998,46.12978],[16.69404,46.12965],[16.6944,46.21962],[16.88874,46.21911],[16.88837,46.12915],[17.27626,46.12721],[17.27514,46.03719],[17.0814,46.0383],[17.08045,45.94841],[17.27391,45.94717],[17.27268,45.85726],[17.46569,45.8558],[17.46429,45.76578],[17.84972,45.762],[17.84113,45.40218],[18.03272,45.39968],[18.03778,45.57956],[18.22977,45.57683],[18.22707,45.48686],[18.41895,45.48394],[18.42194,45.57372],[18.806,45.56667],[18.7986,45.38682],[19.18132,45.37853],[19.17731,45.28839],[18.98605,45.29292],[18.97825,45.11311],[18.78775,45.11707],[18.78419,45.02731],[18.59384,45.03073],[18.60395,45.30056],[18.22152,45.30697],[18.22428,45.39693],[18.03286,45.39964],[18.02795,45.21976],[18.21887,45.2172],[18.21341,45.03721],[17.4521,45.04599],[17.45339,45.12428],[17.44581,45.12431],[17.44577,45.13107],[17.45339,45.13107],[17.45346,45.13599],[17.42309,45.13617],[17.42309,45.13131],[17.35944,45.13181],[17.35954,45.13676],[16.49994,45.13997],[16.50032,44.96003],[16.11978,44.95936],[16.11914,45.04937],[15.92881,45.04857],[15.92784,45.13855],[15.54639,45.13604],[15.54942,44.95604],[15.7395,44.95747],[15.74304,44.68753],[15.93235,44.68862],[15.93144,44.7785],[16.12088,44.77934],[16.1258,44.50938],[16.31126,44.50983],[16.3125,44.14984],[16.49991,44.14998],[16.50002,44.06],[16.68726,44.05983],[16.68669,43.87982],[16.87325,43.87936],[16.87221,43.70925],[16.87842,43.70922],[16.87837,43.69932],[17.05822,43.6986],[17.05747,43.6086],[17.24319,43.6075],[17.24217,43.51755],[17.42761,43.51622],[17.4236,43.24615],[17.60821,43.24448],[17.60668,43.15452],[17.791,43.15255],[17.78723,42.97258],[17.9711,42.97037],[17.96681,42.79042],[18.15005,42.78789],[18.14778,42.69789],[18.3307,42.6951],[18.32853,42.62021],[18.37964,42.61937],[18.37926,42.60432],[18.51071,42.60206],[18.50551,42.43715],[18.55404,42.43625],[18.55355,42.42127],[18.68705,42.41881],[18.68394,42.32883],[18.50215,42.33212],[18.50454,42.40708],[18.48025,42.40746],[18.48072,42.42256],[18.32286,42.42516],[18.32527,42.5084],[18.31006,42.50865],[18.31025,42.51538],[18.14308,42.51789],[18.14539,42.60794],[17.59706,42.61447],[17.59861,42.70448],[17.23248,42.7074],[17.23346,42.79734],[17.33863,42.79667],[17.33875,42.80837],[17.40722,42.80784],[17.40714,42.7962],[17.41691,42.79617],[17.41813,42.88612],[16.50006,42.88987],[16.49994,43.06991],[16.31585,43.06971],[16.31611,42.97987],[16.13228,42.9792],[16.13273,42.88914],[15.94913,42.88859],[15.94746,43.07965],[16.13152,43.08075],[16.13114,43.15921],[16.31573,43.15987],[16.31543,43.16694],[16.30505,43.167],[16.30498,43.17777],[16.31558,43.17788],[16.31497,43.33975],[16.13008,43.33926],[16.12955,43.41313],[16.11724,43.41305],[16.11717,43.42569],[16.10607,43.42567],[16.106,43.42923],[15.9442,43.42857],[15.94344,43.5087],[15.91625,43.50859],[15.91618,43.51839],[15.75789,43.51755],[15.75673,43.60747],[15.3852,43.6044],[15.38335,43.69456],[15.19751,43.69259],[15.19372,43.8618],[15.17509,43.86158],[15.17463,43.87207],[15.00701,43.87026],[15.00481,43.96046],[15.37823,43.9646],[15.37687,44.05438],[15.18963,44.05242],[15.18357,44.32247],[14.99572,44.32011],[14.98633,44.67999],[15.17548,44.68236],[15.16299,45.22216],[15.35396,45.22424],[15.35218,45.31423],[15.5434,45.31596],[15.53442,45.85567]],[[16.23264,42.36768],[16.35459,42.36858],[16.35413,42.4036],[16.23218,42.40349],[16.23264,42.36768]]],terms_url:"https://dgu.gov.hr/",terms_text:"Sadrži podatke Državne geodetske uprave",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/dgu.png"},{id:"drone-imagery-2014",name:"Drone Imagery 2014 (Haiti)",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_2014/{zoom}/{x}/{y}",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[-72.3286,18.69461],[-72.33034,18.69412],[-72.33117,18.69284],[-72.33413,18.68542],[-72.33452,18.68414],[-72.33443,18.68355],[-72.33375,18.68235],[-72.32147,18.67721],[-72.32027,18.67698],[-72.31909,18.67713],[-72.3183,18.67804],[-72.31508,18.68457],[-72.31394,18.689],[-72.31553,18.68993],[-72.3286,18.69461]],[[-72.34695,18.61833],[-72.34553,18.62166],[-72.34355,18.62447],[-72.34245,18.62553],[-72.34076,18.62658],[-72.33786,18.62639],[-72.33649,18.62597],[-72.33589,18.62504],[-72.33482,18.62559],[-72.33472,18.6255],[-72.33459,18.62513],[-72.33343,18.62438],[-72.33174,18.62469],[-72.3313,18.62457],[-72.33126,18.62321],[-72.33088,18.62276],[-72.33066,18.62277],[-72.32985,18.62345],[-72.32862,18.62186],[-72.32829,18.6218],[-72.32817,18.62193],[-72.32809,18.6218],[-72.32734,18.62261],[-72.32541,18.62101],[-72.32422,18.62122],[-72.32396,18.61869],[-72.32354,18.61815],[-72.32325,18.61818],[-72.32351,18.61877],[-72.32058,18.62031],[-72.32043,18.61993],[-72.31978,18.62066],[-72.31807,18.61907],[-72.31742,18.61958],[-72.31523,18.61782],[-72.31463,18.61844],[-72.31324,18.6165],[-72.31275,18.61677],[-72.31232,18.6172],[-72.31198,18.61704],[-72.31042,18.61764],[-72.31062,18.61564],[-72.30996,18.61526],[-72.30936,18.61623],[-72.30786,18.61542],[-72.30669,18.61623],[-72.30604,18.61704],[-72.30419,18.61545],[-72.30288,18.61688],[-72.30191,18.61637],[-72.30131,18.61552],[-72.30118,18.6158],[-72.30087,18.61546],[-72.30076,18.61567],[-72.30062,18.6156],[-72.30012,18.61609],[-72.29198,18.61365],[-72.29194,18.61347],[-72.29143,18.61342],[-72.29094,18.61323],[-72.29105,18.61199],[-72.29057,18.61152],[-72.28772,18.61145],[-72.28801,18.6096],[-72.2865,18.60968],[-72.28635,18.60799],[-72.28448,18.60844],[-72.28436,18.60789],[-72.283,18.60808],[-72.283,18.60658],[-72.2828,18.60676],[-72.2816,18.60537],[-72.28106,18.60533],[-72.27973,18.60682],[-72.27805,18.60525],[-72.27793,18.6053],[-72.2778,18.60524],[-72.2772,18.60638],[-72.27589,18.60564],[-72.27544,18.60629],[-72.27385,18.60508],[-72.27341,18.60508],[-72.27241,18.60593],[-72.27099,18.60442],[-72.27047,18.60429],[-72.27038,18.60446],[-72.27024,18.60427],[-72.27011,18.60433],[-72.26862,18.60368],[-72.26778,18.6037],[-72.26751,18.60429],[-72.2655,18.60318],[-72.26539,18.60336],[-72.26515,18.60309],[-72.26471,18.603],[-72.26436,18.60331],[-72.26312,18.60193],[-72.26258,18.60188],[-72.262,18.60251],[-72.26139,18.60184],[-72.26106,18.60182],[-72.26106,18.60148],[-72.26014,18.6005],[-72.25994,18.60049],[-72.25803,18.60079],[-72.2576,18.60054],[-72.25691,18.60094],[-72.25413,18.59992],[-72.25093,18.59739],[-72.25062,18.59676],[-72.25033,18.59701],[-72.24451,18.59231],[-72.24215,18.58872],[-72.24167,18.58756],[-72.24077,18.58654],[-72.24147,18.58592],[-72.2413,18.58543],[-72.2395,18.58424],[-72.24007,18.58358],[-72.2382,18.58197],[-72.23868,18.58157],[-72.2385,18.58119],[-72.23703,18.58054],[-72.23612,18.57894],[-72.23646,18.57825],[-72.23636,18.5777],[-72.23467,18.57684],[-72.2353,18.57562],[-72.235,18.57499],[-72.23335,18.57423],[-72.23399,18.57293],[-72.23182,18.57169],[-72.23188,18.57137],[-72.23175,18.57127],[-72.23198,18.5708],[-72.23072,18.5694],[-72.23097,18.56874],[-72.23082,18.56844],[-72.23046,18.56855],[-72.23009,18.56754],[-72.22942,18.56715],[-72.22972,18.56651],[-72.22961,18.566],[-72.22908,18.56612],[-72.22848,18.56396],[-72.22818,18.56395],[-72.22733,18.56421],[-72.2265,18.56179],[-72.22623,18.56191],[-72.22436,18.55908],[-72.22471,18.55882],[-72.22357,18.55689],[-72.22379,18.55675],[-72.22325,18.55579],[-72.22387,18.55544],[-72.22382,18.55528],[-72.22458,18.55483],[-72.22453,18.55439],[-72.22625,18.55408],[-72.22705,18.55349],[-72.22692,18.55333],[-72.2271,18.55324],[-72.22687,18.55273],[-72.22592,18.55308],[-72.22465,18.55027],[-72.22483,18.5501],[-72.22457,18.54956],[-72.22327,18.55014],[-72.22261,18.54869],[-72.2208,18.54918],[-72.22051,18.54852],[-72.22034,18.54865],[-72.2201,18.54845],[-72.21952,18.54876],[-72.21862,18.54755],[-72.2174,18.5478],[-72.21714,18.54733],[-72.21694,18.54734],[-72.21583,18.54517],[-72.21505,18.54533],[-72.21477,18.54494],[-72.21442,18.54218],[-72.21421,18.54233],[-72.21293,18.5401],[-72.21199,18.5404],[-72.21188,18.54025],[-72.21145,18.53781],[-72.21085,18.53797],[-72.21028,18.53545],[-72.20993,18.53465],[-72.20942,18.53478],[-72.20942,18.53456],[-72.20851,18.53472],[-72.2057,18.53039],[-72.20444,18.52693],[-72.20438,18.52643],[-72.20418,18.52637],[-72.20399,18.52572],[-72.20263,18.5222],[-72.20182,18.5197],[-72.20148,18.51742],[-72.20301,18.51606],[-72.20503,18.51506],[-72.20767,18.51432],[-72.20936,18.5142],[-72.2095,18.51448],[-72.21082,18.51416],[-72.21095,18.51444],[-72.21189,18.51412],[-72.21266,18.51403],[-72.21277,18.51417],[-72.21462,18.51393],[-72.21697,18.51569],[-72.21731,18.51648],[-72.21787,18.51642],[-72.21818,18.51975],[-72.21798,18.51984],[-72.21909,18.52189],[-72.22031,18.52152],[-72.22096,18.52382],[-72.22209,18.52355],[-72.22251,18.52685],[-72.22229,18.52693],[-72.22271,18.52726],[-72.22289,18.52707],[-72.2231,18.52722],[-72.22404,18.52681],[-72.22551,18.52936],[-72.22596,18.5297],[-72.22642,18.52964],[-72.2265,18.53018],[-72.2275,18.53118],[-72.22673,18.53171],[-72.22885,18.53383],[-72.22811,18.53435],[-72.22981,18.53623],[-72.22912,18.5367],[-72.22935,18.53731],[-72.23059,18.53875],[-72.23222,18.54189],[-72.23215,18.5421],[-72.23258,18.54324],[-72.23311,18.54304],[-72.2342,18.54558],[-72.23436,18.5455],[-72.23554,18.54776],[-72.23571,18.54779],[-72.23601,18.54899],[-72.23839,18.55165],[-72.23747,18.55231],[-72.23951,18.55397],[-72.23918,18.55413],[-72.2407,18.55661],[-72.24014,18.5568],[-72.24079,18.55824],[-72.24063,18.55835],[-72.24067,18.55845],[-72.24117,18.55815],[-72.24161,18.55898],[-72.24216,18.55882],[-72.24242,18.56062],[-72.24262,18.56101],[-72.24294,18.56089],[-72.24399,18.56371],[-72.24466,18.56356],[-72.24475,18.56413],[-72.24536,18.56445],[-72.2449,18.56525],[-72.24518,18.56549],[-72.245,18.56581],[-72.24499,18.56607],[-72.24543,18.56633],[-72.24559,18.56618],[-72.24588,18.56662],[-72.24687,18.56727],[-72.24662,18.56749],[-72.24781,18.56897],[-72.24728,18.56938],[-72.24859,18.57137],[-72.24894,18.57159],[-72.24865,18.57222],[-72.2488,18.57219],[-72.24885,18.5723],[-72.24945,18.57197],[-72.25068,18.57411],[-72.25147,18.5737],[-72.25251,18.57598],[-72.25339,18.57551],[-72.25491,18.57848],[-72.25462,18.57863],[-72.25467,18.57878],[-72.25505,18.57894],[-72.25495,18.57913],[-72.256,18.58074],[-72.2563,18.58054],[-72.25752,18.58237],[-72.25769,18.58227],[-72.2578,18.5824],[-72.25808,18.5823],[-72.25857,18.5821],[-72.25862,18.58222],[-72.25889,18.58219],[-72.25894,18.58302],[-72.25958,18.58445],[-72.25984,18.58472],[-72.26072,18.58443],[-72.26094,18.58565],[-72.2622,18.58722],[-72.26351,18.58643],[-72.2643,18.58738],[-72.26474,18.58708],[-72.26594,18.58862],[-72.26756,18.58877],[-72.26742,18.58917],[-72.27039,18.58893],[-72.27021,18.5903],[-72.2722,18.59048],[-72.27211,18.59145],[-72.27381,18.59188],[-72.27384,18.59168],[-72.27729,18.59169],[-72.28014,18.59129],[-72.28059,18.59048],[-72.28106,18.59071],[-72.28226,18.58989],[-72.28286,18.59047],[-72.28367,18.58966],[-72.28401,18.59014],[-72.28468,18.59029],[-72.2851,18.58997],[-72.2857,18.59062],[-72.28661,18.59068],[-72.28681,18.59014],[-72.28728,18.59032],[-72.28741,18.59013],[-72.28801,18.59052],[-72.28991,18.59071],[-72.29077,18.58997],[-72.29196,18.59186],[-72.2945,18.59148],[-72.29454,18.59361],[-72.29654,18.59322],[-72.29689,18.59586],[-72.2976,18.59675],[-72.29824,18.59722],[-72.29871,18.5962],[-72.30053,18.59733],[-72.30081,18.59675],[-72.30113,18.59691],[-72.30131,18.59676],[-72.30175,18.59721],[-72.30303,18.59774],[-72.3033,18.59729],[-72.30394,18.59761],[-72.30394,18.59736],[-72.30555,18.59794],[-72.30598,18.59756],[-72.30703,18.59838],[-72.30723,18.59799],[-72.30862,18.59833],[-72.30938,18.59752],[-72.31013,18.5981],[-72.31037,18.59739],[-72.3121,18.5983],[-72.3122,18.59807],[-72.31424,18.59902],[-72.31456,18.59873],[-72.31524,18.59922],[-72.31681,18.59952],[-72.31662,18.60004],[-72.31958,18.60072],[-72.31907,18.60202],[-72.32042,18.60247],[-72.32061,18.60242],[-72.32082,18.60267],[-72.3211,18.6027],[-72.32105,18.60298],[-72.32144,18.60347],[-72.32368,18.60322],[-72.32375,18.60432],[-72.32584,18.60436],[-72.32588,18.60522],[-72.32617,18.60585],[-72.32864,18.60525],[-72.32897,18.60527],[-72.32916,18.60727],[-72.33006,18.60812],[-72.3294,18.60867],[-72.33004,18.60959],[-72.33282,18.60949],[-72.33258,18.61058],[-72.33302,18.61005],[-72.3335,18.61054],[-72.33477,18.61035],[-72.33485,18.61167],[-72.33735,18.61174],[-72.33725,18.61237],[-72.33767,18.61298],[-72.34038,18.61306],[-72.34016,18.6138],[-72.34153,18.61384],[-72.34258,18.61457],[-72.3426,18.61512],[-72.34306,18.61499],[-72.34682,18.61792],[-72.34695,18.61833]],[[-72.72363,19.09461],[-72.72302,19.09518],[-72.72206,19.0965],[-72.72169,19.09612],[-72.72164,19.0962],[-72.72132,19.09609],[-72.72073,19.0967],[-72.7198,19.09587],[-72.71965,19.09591],[-72.7197,19.09601],[-72.71955,19.09602],[-72.71911,19.09623],[-72.71906,19.09627],[-72.71904,19.09625],[-72.71888,19.09631],[-72.71886,19.09626],[-72.71817,19.09643],[-72.71776,19.09679],[-72.71756,19.09657],[-72.71693,19.09705],[-72.71713,19.09735],[-72.71495,19.0988],[-72.71479,19.09852],[-72.71483,19.09849],[-72.7148,19.0984],[-72.71455,19.09859],[-72.71449,19.09851],[-72.71413,19.09877],[-72.71413,19.09893],[-72.71419,19.09891],[-72.71417,19.09978],[-72.71324,19.09971],[-72.71287,19.09974],[-72.71295,19.09967],[-72.71278,19.09968],[-72.71278,19.09977],[-72.71282,19.09976],[-72.71285,19.09988],[-72.71266,19.09989],[-72.71266,19.09987],[-72.71245,19.09987],[-72.71182,19.09991],[-72.71178,19.10012],[-72.71157,19.10009],[-72.71147,19.10102],[-72.71042,19.10086],[-72.71039,19.10119],[-72.7103,19.1012],[-72.71031,19.10151],[-72.7097,19.10156],[-72.7097,19.10162],[-72.70917,19.10169],[-72.70917,19.1021],[-72.70828,19.10211],[-72.70809,19.10289],[-72.70788,19.10284],[-72.70798,19.10367],[-72.70724,19.1038],[-72.70731,19.10501],[-72.70723,19.10501],[-72.70736,19.10565],[-72.70637,19.10584],[-72.7062,19.10714],[-72.70588,19.10706],[-72.70591,19.10747],[-72.7053,19.10757],[-72.7054,19.10813],[-72.70568,19.10809],[-72.70568,19.10928],[-72.70591,19.11013],[-72.70589,19.11022],[-72.70574,19.11025],[-72.70574,19.11116],[-72.70538,19.11114],[-72.70557,19.11247],[-72.70499,19.11256],[-72.70537,19.11361],[-72.7047,19.11388],[-72.70496,19.11563],[-72.70418,19.11564],[-72.70442,19.11762],[-72.70371,19.11764],[-72.70371,19.1178],[-72.70352,19.11779],[-72.70339,19.12227],[-72.70264,19.12205],[-72.70253,19.12301],[-72.70289,19.12592],[-72.70308,19.12595],[-72.70316,19.12864],[-72.70234,19.12997],[-72.70206,19.1301],[-72.69987,19.1305],[-72.69325,19.13064],[-72.687,19.13075],[-72.68456,19.13073],[-72.68338,19.13056],[-72.6828,19.1297],[-72.68203,19.1283],[-72.68201,19.12715],[-72.68158,19.12714],[-72.68187,19.12508],[-72.68185,19.12507],[-72.68215,19.12414],[-72.68253,19.12295],[-72.68265,19.12243],[-72.68263,19.12185],[-72.68302,19.12185],[-72.68301,19.12132],[-72.68286,19.12133],[-72.68293,19.11947],[-72.68251,19.11946],[-72.68256,19.11803],[-72.68265,19.11751],[-72.68265,19.11703],[-72.68318,19.11704],[-72.68319,19.11685],[-72.68371,19.11687],[-72.68384,19.11684],[-72.684,19.11685],[-72.68398,19.11689],[-72.68426,19.11688],[-72.68426,19.11679],[-72.68481,19.11674],[-72.68546,19.11667],[-72.68557,19.11664],[-72.68551,19.11664],[-72.6856,19.11662],[-72.68595,19.11658],[-72.68596,19.11654],[-72.68608,19.11654],[-72.68661,19.11663],[-72.68662,19.11656],[-72.68713,19.11665],[-72.68721,19.11666],[-72.68721,19.11663],[-72.6878,19.11666],[-72.68779,19.11659],[-72.68833,19.11663],[-72.68832,19.11658],[-72.68928,19.11657],[-72.6897,19.11656],[-72.68998,19.11644],[-72.6902,19.11644],[-72.69019,19.11615],[-72.69027,19.11563],[-72.69029,19.11541],[-72.69017,19.11543],[-72.69018,19.11493],[-72.69018,19.11458],[-72.69019,19.11445],[-72.69022,19.11433],[-72.6902,19.11406],[-72.68972,19.11398],[-72.68968,19.11397],[-72.68973,19.11415],[-72.68974,19.1142],[-72.68937,19.11417],[-72.68872,19.11412],[-72.688,19.11412],[-72.68758,19.11409],[-72.68759,19.11401],[-72.68736,19.11403],[-72.68711,19.11406],[-72.68682,19.11406],[-72.68677,19.11405],[-72.68591,19.11422],[-72.68554,19.11421],[-72.68557,19.11369],[-72.68554,19.11308],[-72.68533,19.11314],[-72.6852,19.11316],[-72.68519,19.1132],[-72.68504,19.11325],[-72.68495,19.1127],[-72.68474,19.11278],[-72.68468,19.11277],[-72.68446,19.11281],[-72.68416,19.1128],[-72.6836,19.11254],[-72.68353,19.11102],[-72.68363,19.11007],[-72.68338,19.11003],[-72.68344,19.10974],[-72.68295,19.1096],[-72.68305,19.10892],[-72.68111,19.10826],[-72.68112,19.1081],[-72.67965,19.10781],[-72.67968,19.10765],[-72.67923,19.10749],[-72.67916,19.10802],[-72.67838,19.10755],[-72.67779,19.10753],[-72.67775,19.10769],[-72.67623,19.10765],[-72.67606,19.10762],[-72.67621,19.10797],[-72.67549,19.10804],[-72.67548,19.1079],[-72.67431,19.10804],[-72.67432,19.10795],[-72.67398,19.10794],[-72.67382,19.10798],[-72.6739,19.10864],[-72.67319,19.10856],[-72.67307,19.10852],[-72.67284,19.10855],[-72.67276,19.10855],[-72.67286,19.10907],[-72.67284,19.10915],[-72.67251,19.10903],[-72.67236,19.10906],[-72.6723,19.10905],[-72.67224,19.10913],[-72.67179,19.10912],[-72.67051,19.10679],[-72.6704,19.10401],[-72.67048,19.10396],[-72.67032,19.10223],[-72.67034,19.1016],[-72.67062,19.09856],[-72.67121,19.09697],[-72.67278,19.09595],[-72.67277,19.09629],[-72.67364,19.09636],[-72.6736,19.09662],[-72.67484,19.09623],[-72.67489,19.09666],[-72.67566,19.09655],[-72.67566,19.09648],[-72.67655,19.09642],[-72.67772,19.09626],[-72.67786,19.09675],[-72.67784,19.09689],[-72.67826,19.09677],[-72.67837,19.09698],[-72.67858,19.09698],[-72.67853,19.09665],[-72.67878,19.09666],[-72.67861,19.09635],[-72.67927,19.09633],[-72.67973,19.0962],[-72.68015,19.09604],[-72.68058,19.09598],[-72.68029,19.09501],[-72.68072,19.095],[-72.68066,19.09474],[-72.68048,19.09418],[-72.68037,19.09335],[-72.68064,19.09335],[-72.68064,19.09266],[-72.67973,19.09263],[-72.67972,19.09269],[-72.67943,19.09266],[-72.67966,19.09132],[-72.67977,19.09107],[-72.68249,19.0892],[-72.68272,19.08907],[-72.68506,19.0888],[-72.68508,19.08888],[-72.68616,19.08873],[-72.6862,19.08887],[-72.68718,19.08866],[-72.68717,19.0886],[-72.68849,19.08844],[-72.68852,19.08847],[-72.69006,19.0884],[-72.69018,19.08871],[-72.69227,19.08828],[-72.69229,19.08887],[-72.69218,19.08924],[-72.69222,19.08928],[-72.69277,19.08923],[-72.69279,19.08933],[-72.69335,19.08934],[-72.69289,19.0888],[-72.69274,19.0883],[-72.69496,19.08857],[-72.69571,19.08831],[-72.69579,19.08892],[-72.69625,19.08904],[-72.69649,19.08889],[-72.69849,19.08845],[-72.69849,19.08866],[-72.6988,19.08858],[-72.69885,19.08895],[-72.69884,19.08903],[-72.69926,19.08895],[-72.70023,19.08884],[-72.70023,19.08893],[-72.70088,19.08892],[-72.7014,19.08887],[-72.70128,19.08828],[-72.70257,19.08859],[-72.70282,19.08874],[-72.70309,19.08883],[-72.70293,19.08855],[-72.70341,19.08862],[-72.70557,19.08863],[-72.70552,19.08906],[-72.70665,19.08889],[-72.70666,19.08938],[-72.70902,19.08917],[-72.70898,19.0891],[-72.71116,19.08894],[-72.71121,19.0892],[-72.71281,19.08912],[-72.71286,19.0898],[-72.71502,19.08882],[-72.71569,19.08838],[-72.71573,19.08847],[-72.7161,19.08824],[-72.71598,19.08795],[-72.71653,19.0877],[-72.71653,19.08761],[-72.71579,19.08781],[-72.71676,19.08727],[-72.71671,19.08717],[-72.71815,19.08638],[-72.71795,19.08602],[-72.71954,19.08518],[-72.71954,19.08511],[-72.72217,19.08467],[-72.72327,19.08506],[-72.72622,19.08712],[-72.72763,19.0891],[-72.72752,19.08973],[-72.72548,19.09295],[-72.72482,19.09403],[-72.72399,19.09495],[-72.72363,19.09461]],[[-72.06537,19.65239],[-72.06565,19.6518],[-72.06603,19.65128],[-72.06697,19.65109],[-72.0676,19.6511],[-72.07102,19.65223],[-72.0719,19.65254],[-72.07189,19.65255],[-72.07264,19.6528],[-72.07262,19.65284],[-72.07268,19.65286],[-72.07269,19.65283],[-72.0733,19.65305],[-72.07393,19.65327],[-72.07416,19.65347],[-72.07418,19.65351],[-72.07435,19.65395],[-72.07432,19.65425],[-72.07419,19.65495],[-72.07399,19.65583],[-72.07384,19.65648],[-72.07307,19.65805],[-72.07274,19.65866],[-72.0727,19.65869],[-72.07228,19.65915],[-72.07221,19.65917],[-72.07196,19.65916],[-72.0714,19.65909],[-72.07012,19.65866],[-72.07017,19.65856],[-72.06983,19.65852],[-72.06984,19.65848],[-72.06939,19.65841],[-72.06944,19.65823],[-72.06941,19.65823],[-72.06937,19.65836],[-72.06842,19.65807],[-72.06707,19.65759],[-72.06451,19.65663],[-72.06434,19.65632],[-72.06421,19.65547],[-72.06422,19.65541],[-72.06472,19.65379],[-72.06487,19.65351],[-72.06537,19.65239]],[[-72.23222,18.69173],[-72.23182,18.69172],[-72.23115,18.69168],[-72.23128,18.69161],[-72.23072,18.69152],[-72.23068,18.69147],[-72.23135,18.69159],[-72.23157,18.69149],[-72.23162,18.69137],[-72.23165,18.69134],[-72.23165,18.69164],[-72.23222,18.69173]],[[-72.2406,18.69192],[-72.23953,18.6921],[-72.23891,18.69207],[-72.23878,18.69207],[-72.23856,18.692],[-72.23818,18.69192],[-72.23186,18.69054],[-72.22977,18.69113],[-72.21709,18.68967],[-72.21618,18.68724],[-72.21599,18.68673],[-72.21602,18.68659],[-72.2159,18.68601],[-72.21581,18.68593],[-72.21561,18.68483],[-72.21569,18.6847],[-72.21578,18.68435],[-72.21595,18.68347],[-72.21629,18.68289],[-72.2164,18.68221],[-72.21633,18.68211],[-72.21641,18.68208],[-72.21642,18.68189],[-72.21694,18.6813],[-72.21685,18.68096],[-72.21693,18.68099],[-72.21722,18.68091],[-72.21734,18.6808],[-72.21731,18.67964],[-72.21749,18.67958],[-72.21749,18.67946],[-72.21747,18.67908],[-72.21743,18.67853],[-72.21739,18.6785],[-72.21718,18.6786],[-72.2171,18.67856],[-72.21708,18.67838],[-72.21724,18.67767],[-72.21724,18.67745],[-72.21721,18.67744],[-72.21681,18.67754],[-72.21671,18.67688],[-72.21662,18.67612],[-72.21642,18.67621],[-72.21601,18.67548],[-72.21596,18.67551],[-72.21589,18.67549],[-72.21552,18.6756],[-72.2154,18.67561],[-72.21529,18.6757],[-72.21521,18.67571],[-72.21491,18.67472],[-72.21464,18.67387],[-72.21456,18.6737],[-72.21447,18.67348],[-72.21413,18.67301],[-72.21427,18.67293],[-72.21413,18.67271],[-72.21383,18.67278],[-72.21339,18.67181],[-72.21178,18.67209],[-72.21169,18.67172],[-72.21135,18.67183],[-72.21116,18.67196],[-72.21077,18.67121],[-72.21058,18.67129],[-72.20984,18.66963],[-72.20972,18.6697],[-72.20966,18.66968],[-72.20918,18.66838],[-72.20895,18.66773],[-72.2093,18.66606],[-72.20937,18.66571],[-72.20974,18.66536],[-72.21031,18.66477],[-72.21021,18.66416],[-72.21042,18.66401],[-72.2111,18.66329],[-72.21167,18.66268],[-72.21179,18.66236],[-72.21206,18.66242],[-72.21193,18.66185],[-72.21188,18.66155],[-72.21199,18.66147],[-72.21239,18.66137],[-72.21331,18.66103],[-72.21393,18.66039],[-72.21376,18.65992],[-72.21355,18.65956],[-72.21376,18.65943],[-72.21349,18.65869],[-72.21296,18.65736],[-72.21357,18.6572],[-72.21312,18.65639],[-72.21281,18.65534],[-72.21317,18.6551],[-72.21308,18.65459],[-72.21347,18.65438],[-72.21374,18.65436],[-72.21382,18.65416],[-72.2135,18.65353],[-72.21304,18.65171],[-72.21345,18.65143],[-72.21341,18.65133],[-72.21364,18.65105],[-72.21418,18.65077],[-72.21378,18.65016],[-72.21364,18.64989],[-72.21372,18.64975],[-72.21429,18.64943],[-72.21379,18.64934],[-72.21362,18.64922],[-72.21382,18.64869],[-72.21354,18.64765],[-72.21331,18.64717],[-72.21366,18.64552],[-72.21389,18.64539],[-72.21377,18.6451],[-72.214,18.64399],[-72.21412,18.64378],[-72.21437,18.64347],[-72.2158,18.64222],[-72.21601,18.64217],[-72.21761,18.64218],[-72.21778,18.64272],[-72.21798,18.64256],[-72.21816,18.64236],[-72.21821,18.6422],[-72.22119,18.64222],[-72.22125,18.6423],[-72.22135,18.64224],[-72.2215,18.64223],[-72.22293,18.64229],[-72.22299,18.64235],[-72.22311,18.64227],[-72.22717,18.64249],[-72.22828,18.64281],[-72.22811,18.6432],[-72.22848,18.64325],[-72.22919,18.64258],[-72.2304,18.64263],[-72.23711,18.64295],[-72.23719,18.64317],[-72.23807,18.64322],[-72.23828,18.64298],[-72.23988,18.64306],[-72.24332,18.6434],[-72.24367,18.64387],[-72.24518,18.64437],[-72.2456,18.64364],[-72.24562,18.64372],[-72.24574,18.64363],[-72.24723,18.64378],[-72.24853,18.64441],[-72.24918,18.64397],[-72.25155,18.64418],[-72.25382,18.64516],[-72.2546,18.64564],[-72.25517,18.64642],[-72.2554,18.64807],[-72.25531,18.64812],[-72.2552,18.64828],[-72.2555,18.64881],[-72.25586,18.64847],[-72.25603,18.64856],[-72.25625,18.64848],[-72.25685,18.64755],[-72.25965,18.64494],[-72.26253,18.64336],[-72.26304,18.64362],[-72.26388,18.64308],[-72.26486,18.64445],[-72.26525,18.64373],[-72.26533,18.64378],[-72.26576,18.64259],[-72.26652,18.64289],[-72.26641,18.64135],[-72.26714,18.64137],[-72.26737,18.6407],[-72.26824,18.64023],[-72.26853,18.6403],[-72.26901,18.63988],[-72.26908,18.63978],[-72.26948,18.63958],[-72.27214,18.63895],[-72.27383,18.63988],[-72.27375,18.64004],[-72.27476,18.64088],[-72.27501,18.64054],[-72.27622,18.64161],[-72.27639,18.64131],[-72.27652,18.64138],[-72.27845,18.643],[-72.27896,18.64273],[-72.2823,18.64457],[-72.28387,18.64607],[-72.28384,18.64611],[-72.28412,18.64641],[-72.28401,18.64647],[-72.28455,18.6471],[-72.28538,18.64803],[-72.28569,18.64785],[-72.28642,18.64857],[-72.28724,18.64936],[-72.28775,18.65003],[-72.28724,18.65028],[-72.28768,18.65089],[-72.28708,18.65122],[-72.28656,18.65188],[-72.28736,18.6532],[-72.2872,18.65332],[-72.2873,18.65355],[-72.28905,18.65383],[-72.28882,18.65459],[-72.28889,18.6546],[-72.28878,18.65512],[-72.29013,18.65481],[-72.29084,18.65766],[-72.2902,18.65767],[-72.29076,18.66015],[-72.28998,18.66022],[-72.29045,18.66151],[-72.29022,18.66161],[-72.29033,18.66256],[-72.29138,18.66227],[-72.29155,18.66276],[-72.29368,18.66243],[-72.29377,18.663],[-72.29441,18.66289],[-72.29444,18.66273],[-72.29656,18.66246],[-72.29662,18.66262],[-72.29708,18.66261],[-72.29692,18.66184],[-72.30025,18.66195],[-72.30141,18.66311],[-72.30141,18.66397],[-72.30192,18.66392],[-72.30197,18.66454],[-72.30311,18.66471],[-72.30471,18.66632],[-72.30471,18.66668],[-72.30505,18.66666],[-72.30529,18.66692],[-72.30519,18.66768],[-72.30607,18.66759],[-72.30749,18.66901],[-72.30782,18.67109],[-72.30784,18.67216],[-72.30757,18.67405],[-72.30716,18.67526],[-72.30674,18.67537],[-72.30687,18.67599],[-72.30657,18.67612],[-72.30611,18.67602],[-72.30585,18.67705],[-72.30607,18.67726],[-72.3061,18.67744],[-72.30635,18.678],[-72.30609,18.67871],[-72.30587,18.67881],[-72.3059,18.67951],[-72.30556,18.68062],[-72.30395,18.68368],[-72.30377,18.68373],[-72.30139,18.68415],[-72.29912,18.68452],[-72.29899,18.68432],[-72.29826,18.6844],[-72.29828,18.6845],[-72.29502,18.68412],[-72.29419,18.68422],[-72.29408,18.68376],[-72.29202,18.68398],[-72.29191,18.68364],[-72.29101,18.68377],[-72.29095,18.68347],[-72.29037,18.68378],[-72.29035,18.68363],[-72.28936,18.68384],[-72.28913,18.68345],[-72.28766,18.6835],[-72.2877,18.68329],[-72.28538,18.68344],[-72.2849,18.68243],[-72.28449,18.68243],[-72.28376,18.68198],[-72.28268,18.68186],[-72.2822,18.68284],[-72.28268,18.68296],[-72.28164,18.68413],[-72.28111,18.68523],[-72.28129,18.68628],[-72.28089,18.68726],[-72.28036,18.68726],[-72.28036,18.68762],[-72.2715,18.688],[-72.2715,18.68774],[-72.27171,18.6875],[-72.27193,18.68611],[-72.2713,18.68611],[-72.27115,18.68635],[-72.27115,18.68735],[-72.26903,18.68805],[-72.26661,18.68821],[-72.26315,18.68817],[-72.25798,18.6868],[-72.25503,18.68501],[-72.25415,18.68242],[-72.25408,18.68278],[-72.25266,18.68732],[-72.25106,18.68819],[-72.24828,18.68927],[-72.24695,18.68917],[-72.24718,18.68966],[-72.24628,18.68966],[-72.24632,18.68997],[-72.24527,18.69032],[-72.24487,18.69045],[-72.24361,18.69036],[-72.24351,18.69029],[-72.24321,18.6903],[-72.24318,18.69051],[-72.24324,18.69061],[-72.24325,18.691],[-72.24303,18.69122],[-72.24166,18.69171],[-72.24149,18.69178],[-72.2406,18.69192]],[[-72.27545,18.56614],[-72.27419,18.56701],[-72.27356,18.56701],[-72.27297,18.56706],[-72.27227,18.56707],[-72.27191,18.56707],[-72.27178,18.56718],[-72.2709,18.56724],[-72.27064,18.56724],[-72.26998,18.56708],[-72.26875,18.56671],[-72.2684,18.56661],[-72.26809,18.56639],[-72.26781,18.56611],[-72.26744,18.5652],[-72.26739,18.56308],[-72.26738,18.5626],[-72.26742,18.56195],[-72.26799,18.56064],[-72.26822,18.56014],[-72.26856,18.55975],[-72.26871,18.55962],[-72.2702,18.55963],[-72.27181,18.55967],[-72.27491,18.55982],[-72.27579,18.55986],[-72.27588,18.55999],[-72.2758,18.56491],[-72.27578,18.56541],[-72.27575,18.56556],[-72.27552,18.56608],[-72.27545,18.56614]],[[-72.33318,18.56014],[-72.33166,18.55959],[-72.33021,18.55904],[-72.32919,18.55866],[-72.3292,18.55861],[-72.32887,18.55838],[-72.32868,18.55826],[-72.3282,18.55827],[-72.32815,18.55828],[-72.3261,18.55752],[-72.32604,18.5575],[-72.32604,18.55745],[-72.32589,18.55732],[-72.32551,18.5573],[-72.32437,18.55688],[-72.32411,18.55678],[-72.32379,18.55662],[-72.32348,18.55633],[-72.32315,18.55628],[-72.32174,18.55556],[-72.32143,18.55541],[-72.3205,18.55488],[-72.32019,18.5547],[-72.32007,18.55453],[-72.31984,18.55412],[-72.31984,18.55385],[-72.31998,18.55322],[-72.32046,18.55124],[-72.32056,18.55083],[-72.32066,18.55047],[-72.32068,18.55039],[-72.32111,18.54857],[-72.32127,18.54791],[-72.32147,18.54719],[-72.32153,18.54699],[-72.322,18.5458],[-72.32203,18.54575],[-72.32354,18.54486],[-72.3236,18.54483],[-72.3236,18.54481],[-72.32486,18.54407],[-72.32534,18.54378],[-72.32533,18.5439],[-72.32534,18.54392],[-72.32555,18.54416],[-72.32588,18.54452],[-72.3259,18.54453],[-72.32621,18.54452],[-72.3266,18.54452],[-72.32666,18.54398],[-72.32669,18.54367],[-72.32666,18.54361],[-72.32666,18.54356],[-72.32669,18.54356],[-72.32677,18.5436],[-72.32704,18.54363],[-72.32714,18.5432],[-72.32713,18.54314],[-72.32704,18.54317],[-72.32697,18.54316],[-72.32698,18.54296],[-72.32697,18.54293],[-72.32697,18.54281],[-72.32728,18.54263],[-72.32814,18.5424],[-72.32864,18.54226],[-72.3297,18.54228],[-72.32979,18.54228],[-72.33174,18.54279],[-72.33242,18.54298],[-72.33329,18.54319],[-72.33328,18.54321],[-72.33529,18.54372],[-72.33589,18.54387],[-72.33689,18.54504],[-72.33734,18.54555],[-72.33761,18.546],[-72.33783,18.54639],[-72.33788,18.54658],[-72.33791,18.54693],[-72.33792,18.54705],[-72.33763,18.54705],[-72.33749,18.54705],[-72.33751,18.54753],[-72.33751,18.54764],[-72.33747,18.54764],[-72.33748,18.54773],[-72.33742,18.54773],[-72.33739,18.54776],[-72.33735,18.54773],[-72.33734,18.54774],[-72.33726,18.54774],[-72.33725,18.54782],[-72.33725,18.54804],[-72.33728,18.548],[-72.3373,18.54798],[-72.3373,18.54796],[-72.33737,18.54788],[-72.33739,18.54789],[-72.33741,18.5478],[-72.33744,18.5478],[-72.33755,18.5477],[-72.33752,18.54764],[-72.33773,18.54741],[-72.33775,18.54741],[-72.33775,18.54737],[-72.33789,18.54721],[-72.3389,18.54828],[-72.33902,18.54842],[-72.34008,18.55026],[-72.34014,18.55034],[-72.34028,18.55068],[-72.34041,18.55099],[-72.34029,18.55156],[-72.34021,18.55185],[-72.33985,18.55283],[-72.33973,18.55315],[-72.33927,18.55425],[-72.33914,18.55457],[-72.33915,18.55458],[-72.3391,18.5547],[-72.33896,18.55506],[-72.33847,18.55626],[-72.33842,18.55625],[-72.33844,18.55631],[-72.33832,18.55661],[-72.33822,18.55686],[-72.33821,18.55687],[-72.33816,18.55699],[-72.33815,18.55698],[-72.33807,18.557],[-72.33803,18.557],[-72.33806,18.55726],[-72.338,18.55742],[-72.33716,18.5593],[-72.33709,18.55945],[-72.33843,18.55931],[-72.33929,18.55922],[-72.33982,18.55941],[-72.33983,18.55943],[-72.34028,18.55975],[-72.34092,18.5598],[-72.34096,18.5598],[-72.34413,18.5609],[-72.3446,18.56107],[-72.34472,18.56111],[-72.34472,18.56109],[-72.34829,18.5623],[-72.34912,18.5626],[-72.35035,18.56335],[-72.35302,18.56496],[-72.35333,18.56616],[-72.35351,18.56901],[-72.35337,18.56949],[-72.35156,18.57185],[-72.35042,18.57341],[-72.35036,18.57338],[-72.34849,18.57592],[-72.34815,18.57636],[-72.34756,18.57636],[-72.34753,18.57634],[-72.34746,18.57647],[-72.34745,18.57639],[-72.34705,18.57703],[-72.34659,18.57672],[-72.34649,18.57683],[-72.34544,18.57618],[-72.34365,18.57629],[-72.34361,18.57636],[-72.34354,18.57631],[-72.34258,18.5764],[-72.34252,18.57699],[-72.3428,18.57707],[-72.343,18.57715],[-72.3429,18.57737],[-72.34338,18.5774],[-72.34321,18.57803],[-72.34324,18.57803],[-72.3432,18.57816],[-72.3444,18.57852],[-72.34395,18.57972],[-72.34414,18.57976],[-72.34377,18.58067],[-72.34424,18.58074],[-72.34398,18.58155],[-72.34388,18.58181],[-72.34392,18.5818],[-72.34371,18.5823],[-72.34375,18.58229],[-72.34371,18.58237],[-72.34283,18.58355],[-72.3424,18.58413],[-72.34238,18.58411],[-72.34234,18.58411],[-72.34209,18.58403],[-72.34207,18.58434],[-72.342,18.58433],[-72.34192,18.58474],[-72.34192,18.58477],[-72.34118,18.58575],[-72.3408,18.58627],[-72.34024,18.58655],[-72.33983,18.58675],[-72.33542,18.58843],[-72.33539,18.58845],[-72.33539,18.58843],[-72.33517,18.58851],[-72.3346,18.58806],[-72.33372,18.58896],[-72.33361,18.58917],[-72.33295,18.58941],[-72.33253,18.58912],[-72.33252,18.58916],[-72.33168,18.58889],[-72.33157,18.5891],[-72.33152,18.58918],[-72.33153,18.58917],[-72.33152,18.5892],[-72.33158,18.58929],[-72.33161,18.58934],[-72.33136,18.58951],[-72.33134,18.58953],[-72.33135,18.58954],[-72.3313,18.58963],[-72.33132,18.58976],[-72.33112,18.58977],[-72.33118,18.58983],[-72.33097,18.59017],[-72.33011,18.5905],[-72.32965,18.59068],[-72.32418,18.59182],[-72.3238,18.59189],[-72.32228,18.59068],[-72.32079,18.58947],[-72.32076,18.58801],[-72.32078,18.588],[-72.32078,18.58706],[-72.32073,18.58691],[-72.32073,18.58626],[-72.32092,18.58625],[-72.32081,18.58589],[-72.32074,18.58593],[-72.3207,18.58531],[-72.32114,18.58437],[-72.32185,18.58274],[-72.32202,18.58277],[-72.3222,18.58276],[-72.32211,18.58251],[-72.32196,18.58249],[-72.32242,18.5815],[-72.32245,18.5815],[-72.32295,18.58034],[-72.32368,18.579],[-72.32465,18.57947],[-72.32575,18.57852],[-72.32661,18.5778],[-72.32721,18.57838],[-72.32824,18.57817],[-72.32848,18.57756],[-72.32855,18.5776],[-72.32938,18.57666],[-72.32907,18.57629],[-72.32936,18.57607],[-72.32877,18.57563],[-72.32975,18.57451],[-72.32968,18.57443],[-72.32989,18.57408],[-72.32994,18.57359],[-72.3296,18.57363],[-72.32997,18.57247],[-72.33009,18.57153],[-72.33017,18.57152],[-72.33047,18.57045],[-72.3314,18.57052],[-72.33167,18.56999],[-72.33027,18.56999],[-72.33025,18.57003],[-72.33006,18.57004],[-72.3297,18.57],[-72.32981,18.56877],[-72.32877,18.56765],[-72.32858,18.56749],[-72.32877,18.56711],[-72.32912,18.5668],[-72.32897,18.56664],[-72.32938,18.56572],[-72.32946,18.56554],[-72.33052,18.56424],[-72.33056,18.56424],[-72.33056,18.5642],[-72.33105,18.56367],[-72.33112,18.56374],[-72.33111,18.56376],[-72.33117,18.56377],[-72.33131,18.56391],[-72.33153,18.5641],[-72.33154,18.56385],[-72.33161,18.56365],[-72.33168,18.56329],[-72.33169,18.56322],[-72.33171,18.56319],[-72.33181,18.5628],[-72.33187,18.5626],[-72.33299,18.56123],[-72.33318,18.561],[-72.33365,18.56064],[-72.33393,18.56042],[-72.33367,18.56033],[-72.33367,18.56027],[-72.33332,18.56011],[-72.33318,18.56014]],[[-72.31173,18.56168],[-72.31195,18.56259],[-72.31221,18.56365],[-72.31259,18.56628],[-72.31254,18.5663],[-72.31264,18.56654],[-72.31266,18.56682],[-72.3127,18.56687],[-72.31276,18.56734],[-72.31256,18.56746],[-72.31232,18.56754],[-72.31229,18.56757],[-72.31199,18.5677],[-72.31216,18.56801],[-72.31227,18.56815],[-72.31231,18.56828],[-72.31239,18.56841],[-72.31291,18.56909],[-72.31281,18.56916],[-72.31306,18.56945],[-72.31309,18.56956],[-72.31323,18.57061],[-72.31325,18.57137],[-72.31325,18.57213],[-72.31234,18.57268],[-72.31117,18.57341],[-72.30971,18.5739],[-72.30911,18.5739],[-72.30894,18.57369],[-72.3086,18.57389],[-72.30712,18.57389],[-72.307,18.57357],[-72.30666,18.57388],[-72.30605,18.57389],[-72.30581,18.57367],[-72.30555,18.57388],[-72.3007,18.57387],[-72.30059,18.57369],[-72.30044,18.57386],[-72.29691,18.57388],[-72.29518,18.57386],[-72.295,18.57371],[-72.29473,18.57341],[-72.29387,18.5722],[-72.29341,18.57156],[-72.29338,18.57142],[-72.2933,18.57075],[-72.29338,18.57008],[-72.29349,18.56992],[-72.29361,18.56978],[-72.29361,18.56985],[-72.29378,18.56959],[-72.29364,18.56957],[-72.29345,18.56951],[-72.29358,18.56919],[-72.29389,18.56859],[-72.29373,18.56847],[-72.29359,18.56827],[-72.29359,18.5681],[-72.29379,18.5679],[-72.29403,18.56774],[-72.29387,18.56762],[-72.29368,18.56743],[-72.29396,18.56457],[-72.29411,18.56426],[-72.29401,18.56418],[-72.29402,18.5638],[-72.29412,18.56283],[-72.29451,18.56209],[-72.29462,18.56196],[-72.29767,18.5617],[-72.29849,18.56192],[-72.29864,18.56184],[-72.29857,18.56174],[-72.2988,18.56157],[-72.30144,18.56133],[-72.30181,18.56176],[-72.30228,18.56125],[-72.30275,18.56122],[-72.30427,18.56126],[-72.30505,18.56147],[-72.30522,18.5613],[-72.30609,18.56132],[-72.30821,18.56138],[-72.31173,18.56168]]]},{id:"DroneImageryCanaanHaitiNovember2015",name:"Drone Imagery Canaan(Haiti) November 2015",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/haiti_canaan_nov2015/{zoom}/{x}/{y}",endDate:"2015-11-01T00:00:00.000Z",startDate:"2015-11-01T00:00:00.000Z",polygon:[[[-72.23109,18.67676],[-72.23101,18.67675],[-72.23108,18.67675],[-72.23104,18.67669],[-72.23105,18.67665],[-72.23151,18.67663],[-72.23153,18.67665],[-72.23146,18.67676],[-72.23285,18.67669],[-72.23506,18.67641],[-72.23507,18.67638],[-72.23507,18.67635],[-72.23505,18.67635],[-72.23511,18.6762],[-72.23509,18.67614],[-72.23523,18.67613],[-72.23522,18.67611],[-72.23523,18.67606],[-72.2352,18.67598],[-72.23515,18.6758],[-72.23629,18.67565],[-72.23625,18.67553],[-72.23624,18.67551],[-72.23648,18.67548],[-72.23648,18.67565],[-72.23648,18.67581],[-72.23689,18.67575],[-72.2372,18.67571],[-72.23747,18.67567],[-72.23772,18.67563],[-72.23805,18.6756],[-72.23854,18.67555],[-72.23888,18.67552],[-72.239,18.67551],[-72.23897,18.67565],[-72.23897,18.67571],[-72.23901,18.67576],[-72.239,18.67576],[-72.23902,18.67584],[-72.23905,18.67589],[-72.23929,18.67587],[-72.23981,18.67581],[-72.24059,18.67571],[-72.24142,18.67561],[-72.24177,18.67556],[-72.24179,18.67553],[-72.2421,18.67551],[-72.24272,18.67545],[-72.24276,18.67536],[-72.24278,18.67537],[-72.24279,18.67537],[-72.24299,18.67536],[-72.24334,18.67535],[-72.24339,18.67535],[-72.2434,18.67534],[-72.24372,18.67532],[-72.24424,18.67525],[-72.24443,18.67509],[-72.2474,18.67253],[-72.24731,18.67233],[-72.24681,18.67157],[-72.2469,18.67061],[-72.24652,18.67055],[-72.24661,18.66991],[-72.24669,18.66991],[-72.24688,18.66884],[-72.24707,18.66789],[-72.24709,18.66749],[-72.24728,18.66743],[-72.24716,18.66691],[-72.24717,18.66642],[-72.24703,18.66644],[-72.24701,18.66616],[-72.24971,18.66598],[-72.24947,18.66475],[-72.24989,18.66489],[-72.24989,18.66507],[-72.25113,18.66515],[-72.25102,18.66548],[-72.25111,18.66548],[-72.25111,18.66559],[-72.25219,18.66551],[-72.25387,18.66554],[-72.25387,18.66563],[-72.25551,18.66559],[-72.25638,18.66484],[-72.25719,18.66359],[-72.25763,18.66208],[-72.25768,18.65694],[-72.25779,18.64996],[-72.25713,18.64563],[-72.25696,18.64517],[-72.25564,18.64352],[-72.2493,18.64358],[-72.2482,18.64361],[-72.24637,18.64397],[-72.24629,18.64462],[-72.24454,18.64436],[-72.24442,18.64527],[-72.24311,18.6455],[-72.24326,18.64639],[-72.24286,18.64794],[-72.24272,18.64801],[-72.24282,18.6482],[-72.24257,18.64894],[-72.24109,18.64902],[-72.24109,18.64918],[-72.2405,18.64906],[-72.24036,18.6495],[-72.2403,18.64863],[-72.23753,18.64915],[-72.23664,18.64899],[-72.23666,18.64883],[-72.23582,18.64888],[-72.23488,18.64878],[-72.23487,18.64893],[-72.2338,18.649],[-72.23384,18.64932],[-72.23262,18.64927],[-72.2325,18.64824],[-72.23028,18.64837],[-72.23028,18.64821],[-72.22743,18.64815],[-72.2263,18.64775],[-72.22608,18.64845],[-72.22583,18.64841],[-72.22576,18.64828],[-72.22417,18.64849],[-72.22417,18.64805],[-72.22166,18.64804],[-72.21921,18.6485],[-72.21767,18.64995],[-72.21719,18.6509],[-72.21637,18.65422],[-72.21633,18.65888],[-72.21633,18.66198],[-72.2171,18.66448],[-72.21737,18.66441],[-72.21814,18.66454],[-72.21864,18.66568],[-72.21837,18.66588],[-72.21881,18.66817],[-72.21881,18.66893],[-72.21846,18.66888],[-72.21884,18.67018],[-72.22015,18.67173],[-72.22175,18.67311],[-72.22175,18.67288],[-72.2225,18.67317],[-72.22257,18.67357],[-72.22241,18.67368],[-72.22489,18.67588],[-72.2287,18.67693],[-72.23073,18.6768],[-72.23111,18.67678],[-72.23109,18.67676]]]},{id:"drone-imagery-2016",name:"Drone Imagery Matthew(Haiti) October 2016",type:"tms",template:"https://imagery.openstreetmap.fr/tms/1.0.0/haiti_uav_201610/{zoom}/{x}/{y}",endDate:"2016-10-01T00:00:00.000Z",startDate:"2016-10-01T00:00:00.000Z",polygon:[[[-74.11291,18.64948],[-74.10903,18.64598],[-74.10873,18.64446],[-74.1095,18.64452],[-74.1095,18.64181],[-74.10968,18.64187],[-74.11053,18.64103],[-74.10988,18.64034],[-74.11005,18.64014],[-74.11005,18.64009],[-74.11011,18.64002],[-74.10949,18.63959],[-74.1095,18.63924],[-74.10904,18.63926],[-74.10894,18.63917],[-74.10905,18.63912],[-74.10898,18.63899],[-74.10782,18.63839],[-74.10823,18.63775],[-74.10812,18.63764],[-74.10786,18.63774],[-74.10768,18.63733],[-74.10748,18.63719],[-74.10722,18.63559],[-74.10901,18.63394],[-74.11678,18.62847],[-74.11952,18.62815],[-74.12251,18.63132],[-74.12731,18.63703],[-74.12684,18.6374],[-74.12731,18.63771],[-74.12768,18.63756],[-74.13403,18.64671],[-74.13401,18.64897],[-74.13087,18.65167],[-74.13076,18.65153],[-74.13053,18.65179],[-74.13054,18.65195],[-74.12878,18.65342],[-74.1274,18.65412],[-74.12514,18.65497],[-74.11997,18.65432],[-74.11938,18.65429],[-74.11291,18.64948]],[[-74.11305,18.4922],[-74.10884,18.49216],[-74.10118,18.49095],[-74.10105,18.49057],[-74.10131,18.4902],[-74.10101,18.48996],[-74.10142,18.48933],[-74.10099,18.48931],[-74.1009,18.48886],[-74.10166,18.48725],[-74.10108,18.48713],[-74.10133,18.48664],[-74.10058,18.48654],[-74.10048,18.48552],[-74.10062,18.4849],[-74.10037,18.48478],[-74.10012,18.4827],[-74.09994,18.48123],[-74.10033,18.48114],[-74.10242,18.48116],[-74.10492,18.48149],[-74.10771,18.48189],[-74.1099,18.48226],[-74.10987,18.48243],[-74.10992,18.48246],[-74.11018,18.48232],[-74.11196,18.48261],[-74.11247,18.48278],[-74.11316,18.48382],[-74.1134,18.48521],[-74.11349,18.48709],[-74.11338,18.48704],[-74.11336,18.48717],[-74.11349,18.48727],[-74.11355,18.48931],[-74.11349,18.48949],[-74.1135,18.48951],[-74.11349,18.48952],[-74.11347,18.48951],[-74.11334,18.48957],[-74.11336,18.48962],[-74.11341,18.48958],[-74.11344,18.48959],[-74.11349,18.48956],[-74.11352,18.48957],[-74.11355,18.48956],[-74.11357,18.48998],[-74.11359,18.49067],[-74.11354,18.49108],[-74.11322,18.492],[-74.11305,18.4922]],[[-74.10198,18.24954],[-74.09767,18.24744],[-74.09419,18.2474],[-74.09338,18.24885],[-74.09638,18.25292],[-74.09934,18.25335],[-74.10198,18.24954]],[[-74.02901,18.59744],[-74.02881,18.60255],[-74.00847,18.60182],[-74.00867,18.59671],[-74.02901,18.59744]],[[-73.91991,18.07466],[-73.91468,18.07482],[-73.91535,18.07742],[-73.91478,18.08009],[-73.91997,18.08014],[-73.91924,18.07802],[-73.91999,18.07637],[-73.91991,18.07466]],[[-74.22365,18.3081],[-74.22061,18.30272],[-74.21902,18.30278],[-74.21592,18.30364],[-74.21615,18.30804],[-74.22365,18.3081]],[[-74.00508,18.17646],[-74.00072,18.17657],[-74.00186,18.18175],[-74.00269,18.18344],[-74.00653,18.18336],[-74.00715,18.18218],[-74.00649,18.18056],[-74.0052,18.17922],[-74.00508,18.17646]],[[-74.0653,18.22881],[-74.06361,18.2268],[-74.06114,18.22672],[-74.05968,18.22853],[-74.06281,18.23083],[-74.06446,18.23034],[-74.0653,18.22881]],[[-74.11371,18.47184],[-74.11002,18.47177],[-74.10959,18.47536],[-74.11341,18.47497],[-74.11371,18.47184]],[[-73.95852,18.47452],[-73.95446,18.47465],[-73.95548,18.4794],[-73.95965,18.47878],[-73.95852,18.47452]],[[-74.16719,18.27229],[-74.16196,18.27232],[-74.16175,18.27303],[-74.16255,18.27452],[-74.16372,18.27542],[-74.16341,18.27749],[-74.16404,18.27854],[-74.16756,18.27868],[-74.16742,18.27592],[-74.16775,18.27416],[-74.16719,18.27229]],[[-74.11091,18.45286],[-74.10701,18.45258],[-74.10684,18.4586],[-74.11102,18.45781],[-74.11091,18.45286]],[[-73.76854,18.18022],[-73.75773,18.18006],[-73.73559,18.19311],[-73.73567,18.20143],[-73.74563,18.20191],[-73.74468,18.22311],[-73.77121,18.22417],[-73.77129,18.20844],[-73.76915,18.2064],[-73.76854,18.18022]],[[-74.13455,18.60914],[-74.1388,18.60929],[-74.13871,18.61165],[-74.13447,18.6115],[-74.13455,18.60914]],[[-74.04228,18.20945],[-74.042,18.20484],[-74.04155,18.20239],[-74.03959,18.20051],[-74.03836,18.20028],[-74.03764,18.20242],[-74.03792,18.20562],[-74.03918,18.20932],[-74.04228,18.20945]],[[-74.08668,18.61121],[-74.08669,18.61217],[-74.09146,18.61689],[-74.09211,18.61603],[-74.09313,18.61699],[-74.09603,18.62025],[-74.09627,18.6206],[-74.0967,18.62202],[-74.09337,18.62651],[-74.09237,18.62754],[-74.08862,18.62596],[-74.08863,18.62561],[-74.08778,18.62561],[-74.08661,18.6251],[-74.08662,18.62368],[-74.08514,18.62367],[-74.08462,18.62289],[-74.08463,18.62175],[-74.08339,18.62174],[-74.08261,18.62057],[-74.08262,18.61982],[-74.07659,18.6198],[-74.07658,18.61596],[-74.07255,18.61591],[-74.07259,18.61403],[-74.07062,18.61402],[-74.06858,18.6129],[-74.06855,18.61208],[-74.06614,18.61207],[-74.06414,18.61206],[-74.0625,18.61105],[-74.06254,18.61011],[-74.05927,18.61013],[-74.0545,18.60876],[-74.05451,18.60817],[-74.05168,18.60816],[-74.04932,18.60776],[-74.04647,18.60664],[-74.04646,18.6062],[-74.04243,18.6062],[-74.04133,18.60592],[-74.03625,18.60378],[-74.03597,18.60345],[-74.03642,18.60252],[-74.03719,18.6019],[-74.04003,18.60217],[-74.05608,18.60473],[-74.05851,18.6054],[-74.05861,18.60623],[-74.0611,18.60627],[-74.06481,18.60745],[-74.06518,18.60686],[-74.06679,18.60802],[-74.0696,18.60885],[-74.07142,18.60711],[-74.07239,18.60736],[-74.07515,18.61024],[-74.07701,18.61019],[-74.07798,18.61096],[-74.07901,18.61013],[-74.08109,18.61234],[-74.08234,18.60896],[-74.08383,18.60922],[-74.08513,18.60977],[-74.08668,18.61121]],[[-74.45922,18.4663],[-74.45589,18.46471],[-74.44779,18.47],[-74.44693,18.4713],[-74.44726,18.47934],[-74.44554,18.47915],[-74.44515,18.48326],[-74.43968,18.4839],[-74.439,18.48762],[-74.44299,18.49004],[-74.44906,18.49104],[-74.45382,18.49311],[-74.45571,18.49635],[-74.45786,18.49725],[-74.46052,18.49523],[-74.46241,18.49143],[-74.46198,18.48799],[-74.45537,18.48597],[-74.45526,18.47111],[-74.45944,18.46871],[-74.45922,18.4663]],[[-74.41888,18.57551],[-74.41499,18.57331],[-74.41045,18.57648],[-74.40824,18.58233],[-74.40954,18.58894],[-74.4112,18.59195],[-74.41081,18.59689],[-74.41663,18.60063],[-74.42178,18.59671],[-74.42146,18.59416],[-74.41745,18.59419],[-74.41753,18.59067],[-74.41538,18.59002],[-74.41533,18.58382],[-74.41652,18.58382],[-74.41756,18.5814],[-74.41756,18.57967],[-74.41924,18.57754],[-74.41888,18.57551]]]},{id:"Erlangen-2011",name:"Erlangen Luftbild (2011 5,0 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2011/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio10_5cm_gk4.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.97194,49.52969],[10.97821,49.53568],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03663,49.57167],[11.04029,49.58572],[11.07287,49.58587],[11.07243,49.63486],[11.0054,49.6344],[11.00397,49.62599],[10.9748,49.62541],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2013",name:"Erlangen Luftbild (2013 6,25 cm)",type:"wms",template:"https://secure.erlangen.de/arcgiser/services/Luftbilder2013/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Erlangen_ratio5_6.25cm.jp2&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[10.92791,49.53196],[10.9726,49.52939],[10.97909,49.53475],[10.99934,49.53589],[11.03214,49.53089],[11.04425,49.54317],[11.03842,49.55239],[11.03743,49.57873],[11.0568,49.592],[11.05748,49.61358],[11.04681,49.61447],[11.04788,49.6187],[11.00308,49.62367],[10.98107,49.62339],[10.98069,49.62617],[10.96737,49.62781],[10.96539,49.63415],[10.94293,49.64563],[10.92532,49.64876],[10.91002,49.63793],[10.92235,49.60463],[10.91949,49.57823],[10.91135,49.57095],[10.91256,49.5606],[10.92907,49.55674],[10.92791,49.53196]]],terms_text:"© Stadt Erlangen | © Aerowest GmbH"},{id:"Erlangen-2016",name:"Erlangen Luftbild (2016 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2016/{zoom}/{x}/{y}.jpg",endDate:"2016-03-18T00:00:00.000Z",startDate:"2016-03-18T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.97664,49.53765],[10.99101,49.53392],[10.99389,49.53835],[11.02784,49.53254],[11.0346,49.53462],[11.03407,49.53759],[11.04318,49.54321],[11.03557,49.55303],[11.0384,49.55842],[11.03508,49.56929],[11.03791,49.58659],[11.04797,49.5902],[11.04922,49.5937],[11.05749,49.59521],[11.05623,49.59905],[11.05127,49.6003],[11.05351,49.60904],[11.04309,49.61381],[11.04076,49.61823],[11.0285,49.61735],[11.01929,49.61896],[11.0152,49.61372],[11.00581,49.61448],[11.00639,49.61931],[11.00083,49.6221],[10.9856,49.61651],[10.97837,49.61753],[10.9737,49.62495],[10.96539,49.62557],[10.96063,49.62856],[10.96382,49.63176],[10.95474,49.6379],[10.94837,49.637],[10.94185,49.64377],[10.9273,49.64837],[10.92063,49.63963],[10.91136,49.63773],[10.92429,49.60505],[10.92205,49.58004],[10.91221,49.57008],[10.91441,49.5618],[10.92353,49.55842],[10.92712,49.55976],[10.93345,49.55892],[10.93071,49.54467],[10.93067,49.53225],[10.9406,49.53325],[10.95488,49.53021],[10.97199,49.53126],[10.97664,49.53765]]],terms_text:"© Stadt Erlangen | © GEOCART GmbH"},{id:"Erlangen-2018",name:"Erlangen Luftbild (2018 5,0 cm)",type:"tms",template:"https://osm.rrze.fau.de/protected/YgktSWTTo6HS9nKi/lbe2018/{zoom}/{x}/{y}.jpg",endDate:"2018-04-09T00:00:00.000Z",startDate:"2018-04-09T00:00:00.000Z",zoomExtent:[0,21],polygon:[[[10.85157,49.55172],[10.93037,49.55272],[10.9326,49.55818],[10.91627,49.55882],[10.91144,49.56652],[10.92281,49.60584],[10.9108,49.63751],[10.92775,49.64838],[10.94444,49.64321],[10.96487,49.63317],[10.96384,49.62711],[10.9745,49.62483],[10.9786,49.61794],[10.98478,49.61694],[10.998,49.62228],[11.00813,49.62194],[11.0071,49.61449],[11.01448,49.61394],[11.02081,49.62292],[11.05757,49.63993],[11.08136,49.62614],[11.08312,49.62034],[11.10419,49.61524],[11.11767,49.61449],[11.11997,49.60377],[11.13132,49.60348],[11.1272,49.58815],[11.10271,49.58378],[11.08898,49.59124],[11.07988,49.60837],[11.05808,49.60971],[11.06049,49.59803],[11.06512,49.59614],[11.0689,49.58879],[11.06031,49.58556],[11.04469,49.58913],[11.03851,49.58556],[11.03577,49.57276],[11.03937,49.55785],[11.04272,49.5432],[11.03465,49.5324],[10.97531,49.53467],[10.97158,49.53084],[10.94279,49.52986],[10.94273,49.50582],[10.92163,49.50566],[10.91245,49.51829],[10.88818,49.52834],[10.87518,49.51725],[10.84872,49.52291],[10.84652,49.52797],[10.84637,49.53223],[10.85157,49.55172]]],terms_text:"© Stadt Erlangen | © Hansa Luftbild AG",best:true},{id:"EsriWorldImagery",name:"Esri World Imagery",type:"tms",template:"https://{switch:services,server}.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri world imagery.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"EsriWorldImageryClarity",name:"Esri World Imagery (Clarity) Beta",type:"tms",template:"https://clarity.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/tile/{zoom}/{y}/{x}",zoomExtent:[0,22],terms_url:"https://wiki.openstreetmap.org/wiki/Esri",terms_text:"Terms & Feedback","default":true,description:"Esri archive imagery that may be clearer and more accurate than the default layer.",icon:"https://osmlab.github.io/editor-layer-index/sources/world/EsriImageryClarity.png"},{id:"maaamet.ee-pohi_vr2",name:"Estonia Basemap (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti põhikaart"},{id:"Maaamet-Estonia_Cadastre",name:"Estonia Cadastre (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=of10000,TOPOYKSUS_6569,TOPOYKSUS_6573&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti katastrikaart ortofoto alusel"},{id:"maaamet.ee-cir_ngr",name:"Estonia Forestry (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti metsanduslik ortofoto"},{id:"maaamet.ee-reljeef",name:"Estonia Hillshading (Maaamet)",type:"wms",template:"https://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti reljeefikaart"},{id:"maaamet.ee-orto",name:"Estonia Ortho (Maaamet)",type:"tms",template:"https://tiles.maaamet.ee/tm/tms/1.0.0/foto@GMC/{zoom}/{x}/{-y}.png",zoomExtent:[6,18],polygon:[[[22.35364,58.85385],[22.09411,58.85038],[22.09179,58.8951],[22.00503,58.89371],[21.99979,58.98374],[22.34754,58.98845],[22.34535,59.03337],[22.51935,59.03538],[22.51556,59.1251],[22.69017,59.12686],[22.69212,59.08218],[22.77912,59.083],[22.78083,59.03814],[22.86808,59.03877],[22.8693,58.99399],[22.9563,58.99487],[22.95495,59.03959],[23.12895,59.04097],[23.12786,59.08582],[23.47671,59.0877],[23.47415,59.26726],[23.64924,59.26788],[23.64888,59.31281],[23.73698,59.313],[23.73649,59.3578],[23.91158,59.35787],[23.91207,59.4028],[24.176,59.4028],[24.17637,59.4478],[24.26446,59.44767],[24.26471,59.49236],[24.70605,59.49082],[24.70898,59.62553],[24.79744,59.62497],[24.79659,59.58009],[24.97327,59.57885],[24.97462,59.62386],[24.88603,59.62473],[24.88725,59.66918],[24.9762,59.66863],[24.9773,59.71346],[25.06601,59.71259],[25.0632,59.62306],[25.24037,59.62145],[25.24184,59.66647],[25.33055,59.66548],[25.32884,59.62078],[25.41755,59.61979],[25.41938,59.66468],[25.6855,59.66148],[25.68757,59.70613],[25.86511,59.70386],[25.86279,59.65901],[26.12855,59.65507],[26.12575,59.6101],[26.39114,59.60565],[26.38809,59.56099],[26.82967,59.55215],[26.82626,59.50729],[26.91423,59.50549],[26.91057,59.46051],[27.96689,59.43303],[27.9719,59.4778],[28.03669,59.4757],[28.04377,59.47223],[28.04767,59.46578],[28.05182,59.46342],[28.06915,59.46256],[28.08452,59.45939],[28.12174,59.44091],[28.13577,59.4277],[28.13711,59.42267],[28.14163,59.41901],[28.16652,59.41205],[28.17225,59.40789],[28.19275,59.4015],[28.21069,59.3836],[28.21069,59.37994],[28.20386,59.37459],[28.21057,59.37235],[28.21105,59.36937],[28.20678,59.36719],[28.20703,59.36377],[28.19971,59.36091],[28.20203,59.35731],[28.19263,59.35227],[28.19397,59.34642],[28.16969,59.33354],[28.13626,59.29244],[28.12515,59.28901],[28.11722,59.28895],[28.1099,59.29063],[28.05353,59.2902],[28.02022,59.28334],[27.99825,59.2753],[27.97983,59.27293],[27.96433,59.27268],[27.95335,59.26863],[27.9492,59.26533],[27.90564,59.24044],[27.90113,59.23488],[27.901,59.22639],[27.89783,59.21746],[27.90235,59.20728],[27.89234,59.19222],[27.88978,59.18379],[27.87648,59.17372],[27.87184,59.16841],[27.86818,59.16159],[27.84414,59.14814],[27.83206,59.14401],[27.82035,59.13362],[27.80986,59.12905],[27.80595,59.12166],[27.80534,59.1127],[27.81071,59.10819],[27.8101,59.10606],[27.80205,59.1028],[27.78887,59.0909],[27.7907,59.08112],[27.79375,59.07842],[27.79411,59.07566],[27.79277,59.0729],[27.79302,59.06927],[27.7885,59.06657],[27.78265,59.065],[27.77508,59.0581],[27.77313,59.05107],[27.77667,59.04743],[27.76983,59.03325],[27.76605,59.03155],[27.75153,59.03017],[27.74628,59.02716],[27.74567,59.01705],[27.74165,59.00951],[27.74787,58.99267],[27.74274,58.98845],[27.73213,58.9855],[27.6544,58.98783],[27.65501,58.99241],[27.39414,58.99964],[27.38974,58.95474],[27.12935,58.96135],[27.12557,58.9164],[27.03882,58.91841],[27.0271,58.7841],[27.11361,58.78183],[27.10934,58.73709],[27.19537,58.73512],[27.18731,58.64533],[27.27309,58.64305],[27.25259,58.41883],[27.53397,58.41142],[27.5552,58.36575],[27.51762,58.33265],[27.51408,58.32214],[27.49993,58.32246],[27.48687,58.18803],[27.52872,58.18687],[27.59205,58.11875],[27.63695,58.09735],[27.60938,58.05399],[27.62268,58.0058],[27.64489,58.00205],[27.65294,58.00644],[27.64781,58.01426],[27.64781,58.02086],[27.66172,58.01866],[27.66856,58.01045],[27.68393,58.00845],[27.6965,58.0045],[27.70065,57.99862],[27.69882,57.98827],[27.69125,57.98549],[27.68064,57.97449],[27.6821,57.9719],[27.68893,57.97184],[27.68588,57.95928],[27.65892,57.9554],[27.66758,57.951],[27.67161,57.94627],[27.66917,57.94174],[27.67649,57.93552],[27.68247,57.93655],[27.68613,57.92794],[27.68247,57.92437],[27.71078,57.92392],[27.72029,57.92036],[27.72054,57.91174],[27.70834,57.90616],[27.69882,57.90616],[27.70614,57.90136],[27.72896,57.90739],[27.74677,57.90169],[27.7536,57.90409],[27.75739,57.90318],[27.75592,57.89806],[27.76959,57.89566],[27.78094,57.89832],[27.799,57.89961],[27.81852,57.89579],[27.82096,57.89047],[27.81949,57.888],[27.81059,57.88612],[27.81827,57.88249],[27.81169,57.87204],[27.81583,57.87166],[27.8184,57.8651],[27.81632,57.86134],[27.79875,57.85205],[27.7946,57.84634],[27.80058,57.8442],[27.7957,57.84017],[27.78862,57.84186],[27.78411,57.83725],[27.77715,57.8325],[27.75849,57.83536],[27.74165,57.82679],[27.72383,57.83179],[27.70541,57.84192],[27.68771,57.83419],[27.66636,57.83653],[27.66026,57.83893],[27.64818,57.8377],[27.63634,57.83978],[27.62487,57.83751],[27.62207,57.83874],[27.59791,57.83328],[27.56252,57.83023],[27.5563,57.83127],[27.55227,57.82113],[27.54446,57.82204],[27.5452,57.81808],[27.55056,57.81769],[27.55667,57.81366],[27.5408,57.81288],[27.54471,57.808],[27.53726,57.80644],[27.53958,57.80144],[27.53592,57.79663],[27.53861,57.79396],[27.52921,57.78856],[27.5175,57.78876],[27.51847,57.79201],[27.50298,57.78798],[27.50005,57.78973],[27.4959,57.78869],[27.50774,57.78349],[27.51457,57.77516],[27.5081,57.77158],[27.51115,57.76416],[27.51591,57.7639],[27.52018,57.75993],[27.52811,57.75818],[27.53007,57.75368],[27.53116,57.74073],[27.548,57.7333],[27.5419,57.73037],[27.52799,57.72946],[27.5236,57.71616],[27.52762,57.70899],[27.5236,57.70802],[27.51652,57.70873],[27.51066,57.71101],[27.50859,57.70723],[27.49993,57.70495],[27.49529,57.70749],[27.48711,57.7191],[27.47357,57.71545],[27.47064,57.70802],[27.46149,57.70619],[27.44807,57.71616],[27.43086,57.70756],[27.42818,57.69902],[27.41341,57.69915],[27.41647,57.69524],[27.40744,57.69276],[27.40231,57.68493],[27.39133,57.68539],[27.39377,57.67913],[27.39145,57.67671],[27.38193,57.67332],[27.37779,57.66836],[27.38364,57.66059],[27.3801,57.65883],[27.38755,57.6555],[27.38047,57.6495],[27.38352,57.64799],[27.38157,57.64368],[27.39072,57.6431],[27.38816,57.64009],[27.40085,57.63742],[27.40317,57.62905],[27.40182,57.62376],[27.39597,57.62115],[27.39023,57.62036],[27.39084,57.6169],[27.40195,57.61775],[27.40634,57.61546],[27.40683,57.61246],[27.38572,57.60304],[27.37827,57.59513],[27.35692,57.59696],[27.3413,57.58984],[27.34179,57.58539],[27.32886,57.5797],[27.32141,57.57898],[27.3341,57.56596],[27.33178,57.56066],[27.33776,57.56007],[27.33886,57.54671],[27.34386,57.5454],[27.35472,57.52575],[27.35131,57.51632],[27.34569,57.52104],[27.32446,57.52274],[27.29664,57.53859],[27.28017,57.53643],[27.2737,57.54311],[27.26431,57.54377],[27.2637,57.54841],[27.25772,57.54979],[27.24796,57.54769],[27.2249,57.55385],[27.19329,57.54966],[27.16145,57.55922],[27.11654,57.56118],[27.10092,57.5653],[27.08506,57.57538],[27.07262,57.57734],[27.07225,57.57989],[27.0559,57.58251],[27.05285,57.58087],[27.04687,57.58048],[27.04492,57.58251],[27.0332,57.58532],[27.04126,57.58761],[27.04418,57.5967],[27.03101,57.60461],[26.99513,57.60461],[26.99233,57.61076],[26.98696,57.60867],[26.98366,57.61174],[26.97549,57.612],[26.97097,57.60448],[26.9595,57.60625],[26.9578,57.60468],[26.94596,57.60272],[26.93961,57.60932],[26.95133,57.61579],[26.94999,57.62056],[26.94059,57.61978],[26.92961,57.62376],[26.92644,57.6331],[26.90679,57.63304],[26.89971,57.63056],[26.90057,57.62918],[26.89581,57.62572],[26.88849,57.62357],[26.88898,57.62193],[26.87458,57.61906],[26.87275,57.61736],[26.86555,57.61592],[26.85786,57.60997],[26.86469,57.6084],[26.85811,57.60049],[26.85994,57.59598],[26.86433,57.59415],[26.86177,57.59108],[26.84688,57.5884],[26.83504,57.58244],[26.81589,57.58153],[26.80954,57.58473],[26.79685,57.58179],[26.79929,57.58002],[26.79295,57.57315],[26.78685,57.57525],[26.7766,57.55994],[26.76915,57.56039],[26.76354,57.56314],[26.75366,57.56249],[26.75817,57.5653],[26.76891,57.57041],[26.77379,57.57473],[26.76769,57.57754],[26.74804,57.5778],[26.75317,57.58009],[26.73816,57.58774],[26.72901,57.58016],[26.73828,57.57584],[26.73072,57.56903],[26.72388,57.57244],[26.71107,57.56596],[26.69972,57.57106],[26.69753,57.5706],[26.69741,57.56733],[26.69155,57.56615],[26.67569,57.56668],[26.67105,57.56327],[26.6719,57.55385],[26.66531,57.55287],[26.64652,57.55391],[26.64262,57.54658],[26.63444,57.54357],[26.61443,57.52909],[26.61712,57.50885],[26.60467,57.51212],[26.60479,57.51442],[26.5954,57.51376],[26.59479,57.51592],[26.58808,57.51619],[26.59015,57.52516],[26.58698,57.52621],[26.58771,57.53781],[26.58381,57.53957],[26.57978,57.53695],[26.57966,57.53375],[26.56123,57.5285],[26.56184,57.52261],[26.5666,57.51946],[26.55794,57.5137],[26.52585,57.51619],[26.49961,57.52451],[26.49095,57.54534],[26.46996,57.57551],[26.40151,57.57237],[26.34489,57.58408],[26.33476,57.5797],[26.32781,57.57963],[26.32635,57.58277],[26.3117,57.58473],[26.30853,57.59291],[26.3006,57.59343],[26.29291,57.59114],[26.28352,57.59232],[26.28217,57.5952],[26.27754,57.595],[26.27034,57.6001],[26.27022,57.60461],[26.25423,57.61383],[26.24715,57.62082],[26.24813,57.62775],[26.23947,57.63408],[26.24203,57.63539],[26.24667,57.63559],[26.23959,57.64649],[26.23239,57.6461],[26.23117,57.64904],[26.24215,57.65146],[26.2363,57.65753],[26.23032,57.65805],[26.21043,57.66601],[26.21372,57.66888],[26.21092,57.67071],[26.21018,57.67906],[26.20079,57.68102],[26.19896,57.68356],[26.19444,57.68519],[26.18541,57.68454],[26.17712,57.68761],[26.18871,57.69472],[26.19859,57.70906],[26.20567,57.71486],[26.1726,57.72867],[26.141,57.73278],[26.13563,57.73923],[26.13905,57.74548],[26.13551,57.7503],[26.10537,57.757],[26.08035,57.76547],[26.07974,57.76384],[26.07328,57.76371],[26.07047,57.7656],[26.05912,57.75987],[26.049,57.7611],[26.0435,57.76703],[26.03326,57.77054],[26.02374,57.76761],[26.01776,57.7723],[26.02459,57.77516],[26.02496,57.7816],[26.02252,57.78355],[26.02776,57.7898],[26.03081,57.79097],[26.03338,57.80105],[26.03679,57.80592],[26.03606,57.8108],[26.04851,57.82289],[26.05705,57.83842],[26.05558,57.84764],[26.03667,57.84926],[26.02008,57.84517],[26.00958,57.85731],[25.99848,57.85816],[25.96273,57.84491],[25.931,57.85244],[25.89537,57.84972],[25.8883,57.84595],[25.88085,57.84946],[25.88573,57.85277],[25.88427,57.85595],[25.87561,57.85796],[25.87475,57.86322],[25.8595,57.85614],[25.81923,57.86419],[25.78312,57.89948],[25.78629,57.90428],[25.77165,57.91206],[25.75102,57.91692],[25.73724,57.92295],[25.72833,57.92133],[25.72247,57.91245],[25.70356,57.90331],[25.67916,57.90461],[25.67549,57.91277],[25.66207,57.91511],[25.65609,57.91439],[25.64889,57.91666],[25.64987,57.91841],[25.63828,57.93059],[25.57983,57.9442],[25.59399,57.95961],[25.58935,57.96504],[25.58239,57.96783],[25.58044,57.9721],[25.57483,57.9741],[25.56556,57.96718],[25.56604,57.96258],[25.55714,57.96038],[25.55567,57.96711],[25.55079,57.97255],[25.53725,57.97139],[25.52566,57.97184],[25.5226,57.96802],[25.51638,57.96737],[25.51211,57.96977],[25.52212,57.97488],[25.51943,57.98031],[25.48539,57.97475],[25.47843,57.98006],[25.47843,57.98264],[25.44219,57.99616],[25.44817,58.00114],[25.46648,58.00515],[25.44817,58.01698],[25.40693,58.02893],[25.37155,58.02926],[25.36374,58.03171],[25.35336,58.04334],[25.34482,58.04676],[25.33604,58.05709],[25.3292,58.05858],[25.32664,58.0638],[25.31981,58.066],[25.31908,58.06929],[25.29553,58.08161],[25.28686,58.08149],[25.28113,58.07019],[25.266,58.06716],[25.26502,58.06],[25.27991,58.05063],[25.29309,58.0467],[25.30431,58.03449],[25.30114,58.01504],[25.29748,58.01459],[25.30285,58.00011],[25.29577,57.99972],[25.29736,57.99661],[25.30358,57.99396],[25.30138,57.99273],[25.29187,57.99286],[25.28308,57.98963],[25.26722,57.99454],[25.25611,57.9939],[25.25502,58.00347],[25.2455,58.00302],[25.22768,58.01782],[25.24587,58.01872],[25.23562,58.02286],[25.23635,58.02441],[25.22732,58.02435],[25.22537,58.02195],[25.21902,58.02977],[25.21658,58.04088],[25.22695,58.04799],[25.22817,58.05348],[25.22122,58.05302],[25.22146,58.05051],[25.2178,58.04908],[25.21597,58.05954],[25.21219,58.06226],[25.20523,58.06122],[25.20389,58.0651],[25.21621,58.07413],[25.21207,58.08052],[25.19962,58.08536],[25.18949,58.08007],[25.19169,58.07613],[25.1535,58.07478],[25.15154,58.07703],[25.13397,58.07974],[25.10579,58.07749],[25.10518,58.06645],[25.07662,58.06645],[25.02037,58.01769],[24.99512,58.01084],[24.94863,58.00942],[24.83234,57.97177],[24.80806,57.99066],[24.74229,57.98187],[24.74339,57.96491],[24.7329,57.96239],[24.71508,57.96271],[24.6919,57.94653],[24.67335,57.95896],[24.64468,57.95889],[24.64187,57.95423],[24.64577,57.95268],[24.62869,57.94193],[24.61612,57.94368],[24.60892,57.95125],[24.58464,57.96174],[24.57317,57.95436],[24.54792,57.94938],[24.54352,57.94478],[24.5301,57.94705],[24.5207,57.94303],[24.51839,57.93675],[24.5096,57.93442],[24.51326,57.93066],[24.4625,57.92496],[24.44579,57.90798],[24.46018,57.90662],[24.45225,57.89942],[24.46006,57.87977],[24.41138,57.86491],[24.40906,57.87191],[24.33707,57.87393],[24.33829,58.0109],[24.42272,58.01097],[24.42614,58.28002],[24.51155,58.2797],[24.51216,58.32471],[24.42638,58.32503],[24.42712,58.36972],[24.34182,58.37017],[24.34048,58.23547],[24.17014,58.23572],[24.17014,58.1908],[24.08485,58.19092],[24.0851,58.23605],[24.00066,58.23579],[23.99993,58.28092],[23.82971,58.28047],[23.82947,58.32554],[23.65864,58.32496],[23.65791,58.41493],[23.57225,58.41468],[23.57127,58.50436],[23.39935,58.50359],[23.40106,58.41391],[23.14421,58.41238],[23.14567,58.36735],[23.05989,58.36703],[23.06172,58.32221],[22.9757,58.32157],[22.97716,58.27681],[22.89187,58.27598],[22.89358,58.23103],[22.80865,58.2302],[22.81012,58.18539],[22.89529,58.1861],[22.89663,58.1413],[22.72641,58.13982],[22.72495,58.18475],[22.55522,58.18276],[22.55693,58.13744],[22.64173,58.13886],[22.64344,58.094],[22.38903,58.0909],[22.38525,58.18063],[22.29995,58.17967],[22.30679,58.04527],[22.22198,58.0436],[22.22626,57.95404],[22.14206,57.95281],[22.1445,57.90804],[22.06007,57.90681],[22.06263,57.86186],[21.97807,57.86043],[21.96831,58.04004],[22.05274,58.04134],[22.04506,58.17581],[21.96038,58.17471],[21.95781,58.21941],[21.78723,58.21638],[21.78211,58.30631],[21.69681,58.3049],[21.69401,58.34975],[21.77942,58.35122],[21.76795,58.53074],[22.02566,58.53488],[22.02797,58.49001],[22.11375,58.49167],[22.11144,58.53621],[22.19709,58.53742],[22.19453,58.5823],[22.45236,58.58573],[22.44638,58.7203],[22.36023,58.71916],[22.35364,58.85385]],[[23.47415,59.26726],[23.29868,59.26632],[23.29795,59.31138],[23.47293,59.31194],[23.47415,59.26726]],[[24.17014,58.1908],[24.25507,58.19073],[24.25458,58.14581],[24.17002,58.14588],[24.17014,58.1908]],[[24.08485,58.19092],[24.08497,58.10129],[23.99968,58.10116],[23.99993,58.05632],[23.91525,58.05612],[23.915,58.14613],[23.83032,58.146],[23.82971,58.23572],[23.91451,58.23585],[23.91476,58.19099],[24.08485,58.19092]],[[24.61854,59.53612],[24.44183,59.5368],[24.44309,59.62659],[24.62016,59.6258],[24.61854,59.53612]],[[26.40403,59.7852],[26.31501,59.78667],[26.31814,59.83152],[26.40732,59.82994],[26.40403,59.7852]],[[26.48308,59.649],[26.48647,59.69383],[26.57514,59.69202],[26.57166,59.64719],[26.48308,59.649]],[[23.15944,57.78408],[23.24346,57.78461],[23.24445,57.73971],[23.32848,57.74031],[23.32679,57.82998],[23.15845,57.82885],[23.15944,57.78408]]],terms_text:"Maa-Ameti ortofoto"},{id:"estrela_de_alagoas",name:"Estrela de Alagoas",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Estrela%20de%20Alagoas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.71382,-9.43476],[-36.71477,-9.34443],[-36.80586,-9.34498],[-36.80525,-9.43542],[-36.71382,-9.43476]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"eufar-balaton",name:"EUFAR Balaton orthophotos",type:"tms",template:"http://e.tile.openstreetmap.hu/balaton/0/{zoom}/{x}/{y}.jpg",endDate:"2010-08-31T00:00:00.000Z",startDate:"2010-08-01T00:00:00.000Z",zoomExtent:[12,19],polygon:[[[18.17918,46.98502],[18.17773,47.01816],[18.08176,47.05643],[18.10281,47.06311],[18.08152,47.09344],[18.06436,47.09049],[18.03537,47.07983],[18.03344,47.08262],[17.9582,47.05567],[17.99436,47.00449],[17.86441,46.95517],[17.80274,47.0103],[17.67184,46.97207],[17.23875,46.77079],[17.22244,46.6796],[17.47175,46.70306],[18.16735,46.94133],[18.17918,46.98502]]],terms_url:"http://www.bli.okologia.mta.hu/",terms_text:"EUFAR Balaton ortofotó 2010",best:true,description:"1940 geo-tagged photography from Balaton Limnological Institute."},{id:"Fiez-2013",name:"Fiez Orthophoto 2013",type:"tms",template:"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",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"Aargau-AGIS-2019",name:"Kanton Aargau 25cm (AGIS 2019)",type:"tms",template:"https://mapproxy.osm.ch/tiles/AGIS2019/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[8,19],polygon:[[[7.70438,47.55794],[7.77076,47.55772],[7.77103,47.58025],[7.80408,47.58017],[7.80433,47.60248],[7.93713,47.60217],[7.93703,47.57962],[8.00374,47.57917],[8.00338,47.55687],[8.0364,47.55665],[8.03681,47.57928],[8.10313,47.57881],[8.10387,47.60112],[8.17011,47.60086],[8.17036,47.6235],[8.30311,47.62235],[8.30305,47.59988],[8.3362,47.59927],[8.33585,47.5771],[8.36913,47.57694],[8.36943,47.59931],[8.43564,47.59877],[8.43454,47.53133],[8.40144,47.53162],[8.40096,47.50926],[8.3678,47.50959],[8.3675,47.48698],[8.40042,47.48666],[8.39939,47.41929],[8.46558,47.4187],[8.46515,47.39647],[8.43206,47.39654],[8.43125,47.3516],[8.46434,47.35128],[8.46327,47.28387],[8.42997,47.28421],[8.42714,47.12676],[8.3293,47.12753],[8.32937,47.13007],[8.32833,47.13007],[8.3285,47.14529],[8.3294,47.19502],[8.2964,47.19526],[8.29714,47.24022],[8.2641,47.24046],[8.26446,47.26297],[8.23141,47.26316],[8.23075,47.21822],[8.09886,47.21912],[8.09874,47.24135],[8.066,47.24176],[8.06552,47.2192],[7.99993,47.21952],[8.00003,47.26433],[7.96735,47.26462],[7.96675,47.21961],[7.80153,47.22029],[7.80244,47.28791],[7.83518,47.28772],[7.83543,47.31017],[7.86837,47.31017],[7.86885,47.35542],[8.00097,47.3543],[8.00156,47.39928],[7.9353,47.39976],[7.93607,47.46716],[7.90278,47.46729],[7.90303,47.48981],[7.86987,47.48998],[7.86993,47.5125],[7.83689,47.51258],[7.83665,47.4901],[7.77027,47.49026],[7.77045,47.51274],[7.70452,47.51307],[7.70438,47.55794]]],terms_text:"AGIS OF2019",best:true,description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",best:true,icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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:"https://www.spatial.nsw.gov.au/mapping_and_imagery/lpi_web_services",terms_text:"© Department of Customer Service 2019",icon:"https://www.spatial.nsw.gov.au/__data/assets/file/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/Nettanlegg2/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Sentralnett,Regionalnett,Distribusjonsnett,Sjokabler,Master og stolper,Transformatorstasjoner&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,22],polygon:[[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.nve.no/karttjenester/",terms_text:"© NVE",description:"Power lines (high voltage network) including transformers, submarine cables and pylons. Local distribution network is not included.",icon:"https://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-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-orbview",name:"osm-hr: Orbview",type:"tms",template:"https://tms.osm-hr.org/orbview/{zoom}/{x}/{-y}.png",endDate:"2007-01-01T00:00:00.000Z",startDate:"2003-01-01T00:00:00.000Z",zoomExtent:[0,17],polygon:[[[19.59394,45.00171],[19.70329,45.00547],[19.70441,43.01839],[19.77633,43.02304],[19.77427,42.11507],[19.66935,42.11019],[19.66656,42.98104],[19.59377,42.97665],[19.59394,45.00171]],[[21.49434,44.00064],[21.60243,44.00519],[21.60273,41.98521],[21.49527,41.97908],[21.49434,44.00064]],[[15.48386,45.51525],[15.59338,45.5102],[15.59355,44.51169],[15.66994,44.5156],[15.672,45.25531],[15.77499,45.25411],[15.77568,44.47642],[15.75886,44.47618],[15.75611,44.24569],[15.82169,44.2452],[15.82203,44.51156],[15.92279,44.51046],[15.92245,44.2618],[15.98837,44.26094],[15.98614,44.51022],[16.09531,44.5156],[16.09016,43.4736],[15.9918,43.4746],[15.98991,43.99825],[15.92365,43.99924],[15.92674,43.48132],[15.64453,43.46987],[15.65277,43.97898],[15.48385,43.97602],[15.48042,44.2393],[15.56145,44.24274],[15.55904,44.4725],[15.48489,44.47201],[15.48386,45.51525]],[[18.79237,44.00158],[18.90404,44.00813],[18.8994,42.19012],[18.79864,42.18821],[18.79237,44.00158]],[[19.39593,42.03272],[19.50138,42.03734],[19.50056,44.59982],[19.39748,44.59838],[19.39593,42.03272]],[[21.35021,45.06504],[21.46076,45.04982],[21.21554,44.33975],[21.11795,44.35651],[21.35021,45.06504]],[[16.90521,45.22606],[17.02057,45.22606],[17.01713,46.01461],[16.92238,46.02128],[16.92032,46.16889],[17.01096,46.16937],[17.01507,46.7963],[16.92169,46.79677],[16.92169,47.01397],[16.53511,47.01818],[16.53717,46.48397],[16.45889,46.48705],[16.46061,47.01561],[15.98305,47.01608],[15.98339,46.95542],[15.90031,46.95143],[15.90752,45.84399],[16.00965,45.84339],[16.00914,45.97334],[16.37031,45.97549],[16.36825,46.23258],[16.44379,46.23305],[16.44722,45.96452],[16.64978,45.95736],[16.64978,45.97358],[16.90315,45.97072],[16.90521,45.22606]],[[15.29674,45.59698],[15.40112,45.59795],[15.39974,45.00632],[15.2988,45.00632],[15.29674,45.59698]],[[15.97412,45.78345],[16.13153,45.78446],[16.13814,45.69833],[15.97936,45.69959],[15.97412,45.78345]],[[20.4847,44.95994],[20.67661,44.96091],[20.67541,44.65815],[20.48658,44.65937],[20.4847,44.95994]],[[18.98403,47.01631],[19.27586,47.01631],[19.27654,45.97788],[19.16977,45.97549],[19.17114,46.48965],[19.09098,46.48906],[19.09115,46.23329],[18.98678,46.23246],[18.98403,47.01631]],[[13.59695,45.63229],[14.01031,45.61884],[14.01581,44.96893],[13.70441,44.96796],[13.70407,44.87461],[13.59283,44.87242],[13.59695,45.63229]],[[16.30663,45.51074],[16.51623,45.51429],[16.51211,44.73015],[16.4043,44.73417],[16.4043,45.24903],[16.30955,45.25],[16.30663,45.51074]],[[20.33295,44.96067],[20.44933,44.9597],[20.4483,44.65449],[20.33535,44.65937],[20.33295,44.96067]],[[19.35362,47.01502],[19.46005,47.01549],[19.46056,45.96845],[19.35379,45.96666],[19.35362,47.01502]],[[16.15505,44.50899],[16.26595,44.51585],[16.26217,44.24077],[16.32465,44.24151],[16.32397,44.5112],[16.4352,44.51658],[16.42997,43.47553],[16.24535,43.47385],[16.24466,43.72707],[16.16055,43.72794],[16.15505,44.50899]],[[19.92714,43.97651],[20.03632,43.98244],[20.03717,46.00686],[20.0116,46.00573],[20.02052,47.02474],[19.533,47.01397],[19.53953,45.97382],[19.73556,45.97096],[19.73848,46.73951],[19.81007,46.7361],[19.81676,45.97442],[19.92336,45.97334],[19.92714,43.97651]],[[21.98055,42.96107],[21.98038,44.79377],[22.08801,44.79329],[22.08681,44.5868],[22.1517,44.58594],[22.14809,45.01542],[22.25933,45.01967],[22.25281,44.12407],[22.31872,44.12358],[22.31666,44.75697],[22.39357,44.75844],[22.39494,45.0022],[22.59484,45.01606],[22.5927,43.60377],[22.49382,43.60526],[22.49382,43.76961],[22.4231,43.7701],[22.42378,43.53312],[22.49794,43.53212],[22.50069,43.31818],[22.58789,43.31619],[22.5872,43.27521],[22.60368,43.27371],[22.603,42.97602],[22.5872,42.97451],[22.58446,42.88502],[22.48764,42.88603],[22.48695,42.97099],[22.22465,42.94587],[22.22603,42.97501],[21.98055,42.96107]],[[15.90666,45.64165],[16.00965,45.64201],[16.01352,44.96404],[15.90314,44.95927],[15.90666,45.64165]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-ustopo50",name:"osm-hr: US Topo 50",type:"tms",template:"https://tms.osm-hr.org/ustopo/{zoom}/{x}/{y}.png",endDate:"2002-01-01T00:00:00.000Z",startDate:"1992-01-01T00:00:00.000Z",zoomExtent:[0,15],polygon:[[[14.70005,45.75004],[15.00046,45.75004],[15.00046,45.50081],[14.70005,45.50033],[14.70005,45.75004]],[[20.99995,42.00004],[20.99899,41.49932],[21.90262,41.49932],[21.8985,41.7498],[22.19993,41.75004],[22.19959,41.50061],[22.80006,41.50086],[22.79938,41.99982],[22.50069,42.00084],[22.49931,42.24987],[22.19994,42.24987],[22.19788,42.00186],[21.59912,42.00084],[21.59981,42.24987],[21.30043,42.24987],[21.29974,42.00033],[20.99995,42.00004]],[[13.49962,46.50217],[13.49945,45.50009],[14.09958,45.50105],[14.09958,45.75028],[13.79883,45.75028],[13.8002,45.99982],[14.39964,46.0003],[14.40102,46.2492],[14.09958,46.24967],[14.10026,46.49981],[13.49962,46.50217]],[[15.89996,46.75115],[16.19968,46.75048],[16.19917,46.5004],[15.89979,46.5004],[15.89996,46.75115]],[[15.59964,45.25006],[16.80084,45.25],[16.80016,45.49985],[16.50009,45.50009],[16.49975,45.75004],[16.79981,45.75004],[16.80018,45.50012],[17.0997,45.50009],[17.10005,45.24988],[18.89854,45.25193],[18.89992,45.75052],[18.6002,45.75052],[18.60054,45.99982],[19.49936,45.99887],[19.49867,46.24944],[20.39921,46.24896],[20.39886,46.00006],[20.69893,45.99959],[20.69824,45.50009],[20.99899,45.50009],[21.00037,45.25024],[21.29837,45.25169],[21.297,45.00171],[21.60187,45.00171],[21.59912,44.74673],[21.89438,44.74673],[21.89987,44.50238],[22.1965,44.49944],[22.20062,44.75064],[22.49863,44.74868],[22.49863,43.50075],[22.798,43.49876],[22.79938,43.25021],[23.09875,43.2492],[23.1015,43.00164],[22.49588,42.99963],[22.49863,42.50045],[21.89712,42.50045],[21.90262,42.74903],[21.59775,42.74802],[21.59775,42.50147],[21.30112,42.50147],[21.29837,42.74903],[20.99762,42.75105],[20.99899,43.00063],[20.69961,43.00063],[20.69961,42.75105],[19.80148,42.75206],[19.80423,42.50248],[19.49936,42.49944],[19.50073,42.00237],[18.88962,42.00033],[18.88824,42.24987],[18.29773,42.24784],[18.2991,42.49944],[17.70035,42.50147],[17.69897,42.74903],[17.3996,42.75004],[17.40234,43.00164],[17.10022,43.00063],[17.10022,43.50075],[16.79947,43.50275],[16.80084,43.74927],[16.50284,43.74828],[16.49872,43.50374],[16.20209,43.50075],[16.19797,43.74927],[16.49803,43.75082],[16.49872,44.00121],[15.90134,43.99973],[15.89928,44.49993],[15.60059,44.49944],[15.59964,45.25006]],[[14.40033,45.25024],[14.69902,45.25024],[14.70002,44.99997],[14.4017,45.00074],[14.40033,45.25024]],[[21.59997,41.25002],[21.89996,41.25052],[21.90056,41.00218],[21.60118,41.00115],[21.59997,41.25002]],[[14.69996,46.49996],[14.99984,46.50017],[14.99951,46.25039],[14.69962,46.25005],[14.69996,46.49996]],[[13.7996,45.25018],[14.09992,45.25048],[14.10027,44.74966],[13.80089,44.75063],[13.7996,45.25018]],[[20.39886,41.75185],[20.40024,41.00218],[21.29974,41.00011],[21.29837,41.25045],[20.7003,41.25097],[20.69824,41.74929],[20.39886,41.75185]]],icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2012",name:"osm-hr: Zagreb 2012 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2012/{zoom}/{x}/{-y}.png",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[16.15334,45.96857],[16.17462,45.94041],[16.17599,45.91796],[16.18595,45.90793],[16.18423,45.89789],[16.19728,45.8924],[16.22578,45.86085],[16.22097,45.85248],[16.22938,45.84638],[16.22921,45.84148],[16.24088,45.83645],[16.21719,45.83885],[16.20655,45.82784],[16.19865,45.77638],[16.1602,45.79554],[16.12827,45.80224],[16.13033,45.79434],[16.12278,45.78716],[16.10081,45.7862],[16.07677,45.77303],[16.0572,45.75746],[16.03901,45.76082],[16.03695,45.7577],[16.03935,45.75411],[16.02699,45.75507],[16.01772,45.74453],[16.01772,45.71936],[15.98785,45.71601],[15.96554,45.69131],[15.96725,45.67236],[15.95077,45.65125],[15.95077,45.63589],[15.94768,45.62989],[15.94288,45.63109],[15.93395,45.62172],[15.92606,45.61932],[15.92125,45.6138],[15.90031,45.62244],[15.90717,45.63229],[15.89619,45.63565],[15.87421,45.65557],[15.83885,45.66517],[15.81722,45.67044],[15.8131,45.67716],[15.77568,45.68915],[15.77396,45.7081],[15.78941,45.73398],[15.79285,45.73159],[15.80898,45.7383],[15.81001,45.73063],[15.82237,45.72344],[15.83473,45.72871],[15.85155,45.71673],[15.87078,45.73159],[15.84434,45.73159],[15.84469,45.76465],[15.83834,45.76764],[15.81276,45.76764],[15.80555,45.77543],[15.80538,45.80403],[15.8325,45.80391],[15.82993,45.80762],[15.83319,45.81062],[15.82289,45.82581],[15.82186,45.83837],[15.82975,45.84136],[15.84074,45.83992],[15.8452,45.84112],[15.84434,45.84459],[15.84984,45.84805],[15.85052,45.85236],[15.85979,45.85511],[15.86031,45.85308],[15.86477,45.85272],[15.87301,45.85451],[15.87378,45.85755],[15.87328,45.86081],[15.87816,45.8621],[15.87782,45.86563],[15.88263,45.8618],[15.88649,45.86306],[15.88529,45.86545],[15.89026,45.87603],[15.89709,45.88143],[15.9082,45.88642],[15.92125,45.88953],[15.9288,45.88762],[15.93876,45.89359],[15.92194,45.89431],[15.91988,45.89789],[15.92983,45.90339],[15.94768,45.90434],[15.95352,45.90554],[15.95524,45.91223],[15.97412,45.91271],[15.99918,45.92369],[16.00811,45.9299],[16.02802,45.93324],[16.03043,45.93611],[16.04313,45.93969],[16.05206,45.93563],[16.05171,45.94447],[16.06476,45.94661],[16.06579,45.95115],[16.0778,45.95569],[16.09325,45.95903],[16.09497,45.95449],[16.10767,45.95688],[16.11317,45.96165],[16.11282,45.96762],[16.12038,45.96905],[16.13205,45.96475],[16.1372,45.96523],[16.13823,45.96786],[16.15334,45.96857]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osm-hr-zagreb-2018",name:"osm-hr: Zagreb 2018 Aerial imagery",type:"tms",template:"https://tms.osm-hr.org/zagreb-2018/{zoom}/{x}/{-y}.png",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,19],polygon:[[[15.87649,45.87423],[15.87739,45.87821],[15.88087,45.88248],[15.88503,45.8849],[15.88773,45.88741],[15.89112,45.88953],[15.89357,45.89019],[15.89773,45.89311],[15.90151,45.8944],[15.90687,45.89527],[15.91116,45.89652],[15.91455,45.89691],[15.91953,45.89837],[15.92378,45.89891],[15.92786,45.89849],[15.93035,45.90133],[15.9343,45.90408],[15.93854,45.90599],[15.94155,45.90817],[15.94567,45.9096],[15.9509,45.91008],[15.95326,45.91166],[15.95605,45.91378],[15.96138,45.9159],[15.96507,45.92053],[15.96923,45.92298],[15.97734,45.92536],[15.98232,45.92814],[15.9873,45.9305],[15.99047,45.93104],[15.99463,45.93405],[16.00287,45.93802],[16.00687,45.93924],[16.01219,45.93945],[16.01648,45.93996],[16.01789,45.94056],[16.0191,45.94262],[16.02219,45.9447],[16.02579,45.94605],[16.03141,45.94721],[16.03618,45.94834],[16.04103,45.94849],[16.04352,45.95094],[16.04759,45.95267],[16.05025,45.95339],[16.05326,45.95401],[16.05609,45.95673],[16.06008,45.95876],[16.06536,45.9598],[16.06819,45.96252],[16.07167,45.96407],[16.07549,45.96493],[16.07931,45.96508],[16.08141,45.96538],[16.08411,45.96669],[16.08707,45.96744],[16.09076,45.96762],[16.0936,45.96729],[16.09566,45.96657],[16.09755,45.96562],[16.09922,45.96463],[16.10034,45.96475],[16.10089,45.96565],[16.10098,45.96693],[16.10132,45.97027],[16.1027,45.97281],[16.10527,45.97504],[16.10827,45.97648],[16.11205,45.9774],[16.11407,45.97755],[16.11669,45.97803],[16.11948,45.97815],[16.12334,45.97758],[16.12707,45.97633],[16.12939,45.97603],[16.13179,45.9754],[16.13402,45.97618],[16.13703,45.97683],[16.13892,45.97698],[16.14145,45.97743],[16.14428,45.9774],[16.14557,45.97722],[16.1481,45.97767],[16.15145,45.97761],[16.15415,45.97797],[16.15724,45.97797],[16.1599,45.97734],[16.16235,45.97663],[16.16458,45.97525],[16.16651,45.97334],[16.16793,45.9712],[16.16844,45.9689],[16.16896,45.96726],[16.16913,45.96529],[16.17123,45.96443],[16.17376,45.96264],[16.17621,45.96076],[16.1778,45.95888],[16.17866,45.95664],[16.17866,45.95524],[16.17956,45.95321],[16.17964,45.95082],[16.17986,45.94945],[16.18278,45.94736],[16.18462,45.94521],[16.18582,45.94276],[16.18595,45.94065],[16.18578,45.93874],[16.18509,45.93727],[16.18582,45.93506],[16.18617,45.93256],[16.18578,45.93059],[16.18608,45.92721],[16.18728,45.92548],[16.18771,45.9228],[16.19067,45.92077],[16.1923,45.91856],[16.19308,45.91644],[16.19329,45.91515],[16.19535,45.91309],[16.19698,45.91059],[16.19741,45.90784],[16.19737,45.90605],[16.19647,45.90378],[16.19651,45.90279],[16.19951,45.9027],[16.20359,45.90163],[16.20625,45.90022],[16.20827,45.89822],[16.2117,45.89365],[16.21505,45.88854],[16.21664,45.88553],[16.21977,45.88338],[16.22204,45.8806],[16.22591,45.87531],[16.2338,45.86969],[16.2359,45.86862],[16.23874,45.86626],[16.24032,45.86327],[16.24071,45.85983],[16.2405,45.85855],[16.24002,45.85598],[16.23904,45.85409],[16.23779,45.85281],[16.23972,45.85122],[16.24093,45.84949],[16.2417,45.84737],[16.24487,45.84641],[16.24779,45.84474],[16.25041,45.84231],[16.25191,45.8401],[16.25247,45.83795],[16.25204,45.83517],[16.26826,45.83511],[16.26831,45.8236],[16.22974,45.82356],[16.2299,45.78591],[16.21109,45.78616],[16.21101,45.78447],[16.21243,45.7827],[16.21333,45.78039],[16.21333,45.77797],[16.2123,45.77558],[16.2099,45.77309],[16.20788,45.77129],[16.20543,45.76977],[16.20217,45.76878],[16.19934,45.76827],[16.19552,45.76851],[16.19174,45.7695],[16.17531,45.77818],[16.16934,45.78081],[16.1578,45.78497],[16.1508,45.78692],[16.14394,45.78701],[16.14368,45.77965],[16.11181,45.69503],[16.07629,45.69513],[16.07624,45.69708],[16.02624,45.69689],[16.01491,45.70991],[16.01129,45.70996],[16.00871,45.71028],[16.00373,45.71008],[15.99841,45.70879],[15.99472,45.70513],[15.99386,45.70237],[15.99172,45.69914],[15.9888,45.69698],[15.98657,45.69581],[15.98369,45.69365],[15.97949,45.69185],[15.97923,45.68954],[15.97803,45.68739],[15.98022,45.68427],[15.98077,45.68091],[15.98043,45.67911],[15.9797,45.67755],[15.97944,45.6756],[15.97858,45.67314],[15.97906,45.6711],[15.97871,45.66844],[15.97704,45.66604],[15.97459,45.66379],[15.97305,45.66196],[15.97052,45.65968],[15.97034,45.65614],[15.96846,45.6526],[15.96627,45.65023],[15.96215,45.64795],[15.96223,45.64567],[15.96288,45.64225],[15.96271,45.64],[15.96335,45.63724],[15.96279,45.63478],[15.95987,45.63049],[15.95944,45.6273],[15.95768,45.62454],[15.95429,45.62211],[15.95163,45.62118],[15.94803,45.62061],[15.94494,45.61761],[15.94082,45.61515],[15.93799,45.61389],[15.93408,45.61305],[15.93099,45.60935],[15.92764,45.60704],[15.92322,45.60542],[15.91816,45.605],[15.91352,45.60596],[15.91181,45.60671],[15.90885,45.6074],[15.90387,45.6083],[15.90074,45.60989],[15.89812,45.6114],[15.89464,45.61263],[15.89194,45.61431],[15.8885,45.61665],[15.8864,45.61911],[15.88554,45.62199],[15.88584,45.6246],[15.88747,45.62697],[15.88816,45.62808],[15.88464,45.63013],[15.88224,45.63256],[15.88134,45.63436],[15.88095,45.63577],[15.87778,45.63718],[15.87554,45.63859],[15.87215,45.64033],[15.86984,45.64267],[15.86821,45.64525],[15.86666,45.64738],[15.86318,45.64744],[15.85962,45.64807],[15.85696,45.64912],[15.85413,45.6502],[15.85138,45.65014],[15.84731,45.65104],[15.84426,45.65242],[15.84224,45.65395],[15.83967,45.65515],[15.83417,45.6562],[15.83027,45.65755],[15.82709,45.65923],[15.8246,45.66118],[15.82044,45.66112],[15.81563,45.66136],[15.81048,45.66271],[15.80641,45.66514],[15.80435,45.66796],[15.80306,45.67008],[15.79851,45.67149],[15.79529,45.67338],[15.7928,45.6735],[15.78817,45.6747],[15.78349,45.67632],[15.77521,45.67992],[15.76791,45.6837],[15.76525,45.68649],[15.76431,45.68909],[15.76427,45.69158],[15.76379,45.69539],[15.76405,45.69944],[15.76281,45.70246],[15.76079,45.70606],[15.7607,45.70957],[15.76221,45.71289],[15.76598,45.71652],[15.76856,45.72287],[15.77143,45.72748],[15.77345,45.73264],[15.77748,45.73713],[15.77989,45.73985],[15.78371,45.74183],[15.78787,45.74282],[15.79169,45.74255],[15.79551,45.74387],[15.79808,45.74474],[15.8013,45.74617],[15.80615,45.74716],[15.80438,45.87573],[15.83911,45.87594],[15.84298,45.8754],[15.84322,45.85968],[15.84542,45.86074],[15.84866,45.86191],[15.85106,45.86268],[15.85246,45.86304],[15.85518,45.86382],[15.85733,45.86421],[15.8599,45.86422],[15.8617,45.86397],[15.8637,45.86682],[15.86499,45.86781],[15.86726,45.87077],[15.87035,45.87286],[15.87301,45.8737],[15.87649,45.87423]]],terms_url:"https://geoportal.zagreb.hr/",terms_text:"Grad Zagreb, Gradski ured za strategijsko planiranje i razvoj Grada",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/hr/osm-hr.png"},{id:"osmie_barony",name:"OSMIE Baronies",type:"tms",template:"https://tile.openstreetmap.ie/barony/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_cps",name:"OSMIE Civil Parishes",type:"tms",template:"https://tile.openstreetmap.ie/civilparish/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_dail_ea",name:"OSMIE Dail Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/dail_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_eds",name:"OSMIE EDs",type:"tms",template:"https://tile.openstreetmap.ie/ed/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_local_ea",name:"OSMIE Local Election Areas",type:"tms",template:"https://tile.openstreetmap.ie/local_ea/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tie_not_counties",name:"OSMIE T.ie Land not in Counties",type:"tms",template:"https://www.townlands.ie/tiles/not_counties/{zoom}/{x}/{y}.png",zoomExtent:[2,19],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"osmie_tds",name:"OSMIE Townlands",type:"tms",template:"https://tile.openstreetmap.ie/townland/{zoom}/{x}/{y}.png",zoomExtent:[7,20],polygon:[[[-6.32987,52.38838],[-6.16508,52.58073],[-5.9893,52.9811],[-6.05796,53.31713],[-5.9838,53.50704],[-6.24473,53.86326],[-6.35459,53.91182],[-6.31614,53.98133],[-6.13487,53.97002],[-5.61851,54.23574],[-5.3878,54.44708],[-5.53886,54.67641],[-6.07444,55.21277],[-6.21452,55.33168],[-6.78306,55.17828],[-6.9506,55.25505],[-7.17582,55.35355],[-7.22526,55.45024],[-7.50816,55.28791],[-7.63999,55.28009],[-8.02451,55.2206],[-8.25797,55.27853],[-8.28269,55.172],[-8.58482,55.01168],[-8.38432,54.86021],[-8.69743,54.78901],[-8.85124,54.67641],[-8.46946,54.57942],[-8.17008,54.62397],[-8.33763,54.4854],[-8.68644,54.36556],[-8.62876,54.27625],[-9.04075,54.3051],[-9.13688,54.23614],[-9.2852,54.33834],[-9.90043,54.32233],[-10.15037,54.2245],[-10.27397,53.94578],[-9.98832,53.85678],[-10.3289,53.60982],[-10.22727,53.39418],[-9.78233,53.21857],[-8.96934,53.26952],[-9.04624,53.1762],[-9.2852,53.15644],[-9.40879,52.99433],[-9.57084,52.75562],[-9.97321,52.54316],[-9.70405,52.57071],[-9.69444,52.4855],[-9.97733,52.41854],[-9.87296,52.33387],[-9.92378,52.2381],[-10.06523,52.34478],[-10.15586,52.30113],[-10.65849,52.07212],[-9.90318,52.12274],[-10.45799,51.88772],[-10.39344,51.82411],[-10.56098,51.76635],[-10.32478,51.79014],[-10.25749,51.70937],[-9.80705,51.81816],[-10.28289,51.57045],[-9.89631,51.60032],[-9.51454,51.70256],[-9.83177,51.55082],[-9.83039,51.43368],[-9.43351,51.50468],[-9.53788,51.41741],[-8.63151,51.59179],[-7.70316,51.95209],[-7.46421,52.12105],[-6.33537,52.17667],[-6.32987,52.38838]],[[-9.89082,53.14368],[-9.51042,53.03605],[-9.45274,53.08557],[-9.82902,53.18279],[-9.89082,53.14368]]],icon:"https://www.townlands.ie/static/logo_small.png"},{id:"al_palestina",name:"Palestina AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palestina&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.28907,-9.71916],[-37.28904,-9.71114],[-37.28911,-9.7022],[-37.28915,-9.69175],[-37.28919,-9.68886],[-37.28927,-9.68069],[-37.28926,-9.67732],[-37.28936,-9.66999],[-37.28936,-9.66599],[-37.28931,-9.66133],[-37.28941,-9.65526],[-37.28946,-9.64556],[-37.2895,-9.63489],[-37.28954,-9.62926],[-37.2964,-9.62885],[-37.31188,-9.62897],[-37.32762,-9.62914],[-37.33181,-9.62919],[-37.34338,-9.62917],[-37.35876,-9.62923],[-37.37175,-9.6293],[-37.37839,-9.62913],[-37.38051,-9.62922],[-37.38061,-9.63143],[-37.38054,-9.63785],[-37.38043,-9.63895],[-37.38053,-9.64147],[-37.38051,-9.64876],[-37.3805,-9.6543],[-37.38043,-9.656],[-37.38024,-9.66028],[-37.38022,-9.66551],[-37.38019,-9.67054],[-37.38016,-9.67896],[-37.38013,-9.68781],[-37.38009,-9.70116],[-37.38003,-9.71053],[-37.3801,-9.71743],[-37.38005,-9.71959],[-37.37932,-9.71954],[-37.37392,-9.71956],[-37.36582,-9.71945],[-37.35849,-9.71946],[-37.35334,-9.71938],[-37.34414,-9.71937],[-37.33423,-9.71923],[-37.32933,-9.71927],[-37.3218,-9.71924],[-37.31983,-9.71927],[-37.31094,-9.7192],[-37.29589,-9.71921],[-37.28907,-9.71916]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"palmeira_dos_indios",name:"Palmeira dos Indios AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Palmeira%20dos%20Indios&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.58664,-9.46124],[-36.58665,-9.45851],[-36.58619,-9.41968],[-36.58604,-9.41452],[-36.58596,-9.40593],[-36.58585,-9.39509],[-36.58579,-9.39163],[-36.58565,-9.38983],[-36.58549,-9.38249],[-36.58529,-9.37965],[-36.58511,-9.37744],[-36.58503,-9.37059],[-36.5889,-9.37058],[-36.59064,-9.37065],[-36.59389,-9.3706],[-36.60037,-9.37073],[-36.61046,-9.37049],[-36.62288,-9.37021],[-36.63377,-9.37002],[-36.63835,-9.36986],[-36.64743,-9.36997],[-36.65141,-9.36994],[-36.65534,-9.36972],[-36.65647,-9.36974],[-36.66111,-9.37024],[-36.66276,-9.37026],[-36.66704,-9.36973],[-36.67052,-9.36966],[-36.67325,-9.36966],[-36.67602,-9.36987],[-36.67593,-9.3726],[-36.67597,-9.37679],[-36.67639,-9.38138],[-36.67654,-9.38464],[-36.67663,-9.39265],[-36.67675,-9.39829],[-36.67689,-9.40875],[-36.67707,-9.41887],[-36.67717,-9.43179],[-36.67724,-9.43395],[-36.67718,-9.43753],[-36.67728,-9.44311],[-36.6773,-9.44933],[-36.67741,-9.45528],[-36.6774,-9.45938],[-36.67735,-9.46017],[-36.67568,-9.46021],[-36.66625,-9.4603],[-36.66224,-9.4603],[-36.65736,-9.46042],[-36.6504,-9.46047],[-36.63543,-9.46065],[-36.61979,-9.46083],[-36.61433,-9.46083],[-36.61029,-9.46097],[-36.60647,-9.46097],[-36.60186,-9.46099],[-36.59426,-9.46112],[-36.58664,-9.46124]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Pangasinan_Bulacan_HiRes",name:"Pangasinán/Bulacan (Philippines HiRes)",type:"tms",template:"https://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png",zoomExtent:[12,19],polygon:[[[120.33659,15.98577],[120.44599,15.984],[120.44613,15.97446],[120.47646,15.97459],[120.59425,15.94683],[120.59806,16.09079],[120.59654,16.198],[120.36854,16.21853],[120.34758,16.04231],[120.33659,15.98577]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{id:"pao_de_acucar",name:"Pão de Açucar AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Pao%20de%20Acucar&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.39003,-9.78589],[-37.39019,-9.7762],[-37.38993,-9.76575],[-37.38991,-9.75256],[-37.39015,-9.74102],[-37.39003,-9.73201],[-37.39012,-9.72254],[-37.39015,-9.71289],[-37.39019,-9.70341],[-37.3902,-9.69548],[-37.40377,-9.6955],[-37.41728,-9.6956],[-37.43224,-9.69569],[-37.44319,-9.69573],[-37.44723,-9.69582],[-37.45682,-9.69585],[-37.47062,-9.69591],[-37.47373,-9.69591],[-37.47586,-9.69604],[-37.48128,-9.69605],[-37.48131,-9.6989],[-37.48122,-9.70087],[-37.48121,-9.70239],[-37.48135,-9.70545],[-37.48138,-9.71046],[-37.48134,-9.71617],[-37.4812,-9.71875],[-37.48125,-9.72035],[-37.48136,-9.72134],[-37.48134,-9.7241],[-37.4813,-9.72506],[-37.48103,-9.72732],[-37.48102,-9.73088],[-37.48127,-9.73462],[-37.48131,-9.73638],[-37.48131,-9.73893],[-37.48131,-9.74388],[-37.4813,-9.74989],[-37.48122,-9.75315],[-37.48102,-9.75855],[-37.48084,-9.7642],[-37.48085,-9.76526],[-37.48094,-9.76675],[-37.48093,-9.76881],[-37.48084,-9.7721],[-37.48087,-9.77486],[-37.48076,-9.77993],[-37.48081,-9.7863],[-37.46382,-9.78623],[-37.45353,-9.7862],[-37.43979,-9.78611],[-37.42998,-9.78607],[-37.4208,-9.786],[-37.40853,-9.78596],[-37.39545,-9.78593],[-37.39003,-9.78589]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PCN-Italy-2006",name:"PCN 2006 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_06.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2006.33,OI.ORTOIMMAGINI.2006.32&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2006-01-01T00:00:00.000Z",startDate:"2006-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"PCN-Lazio_Umbria-2008",name:"PCN 2008 - IT Lazio+Umbria",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_08.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=OI.ORTOIMMAGINI.2008.33&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2008-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",polygon:[[[12.33149,41.64637],[12.41178,41.64791],[12.41499,41.54635],[12.49574,41.54789],[12.4985,41.49619],[12.57948,41.49843],[12.58062,41.42932],[12.60632,41.4288],[12.60746,41.39663],[12.8293,41.39818],[12.83159,41.34688],[12.9128,41.34843],[12.9151,41.29726],[12.99585,41.2983],[12.99791,41.19636],[13.1679,41.19808],[13.16721,41.24692],[13.41337,41.24829],[13.4152,41.19705],[13.8341,41.19808],[13.83341,41.2476],[13.91737,41.24847],[13.91668,41.39749],[14.0011,41.39784],[13.99996,41.49774],[14.08415,41.49826],[14.08346,41.65014],[14.00087,41.6498],[13.99973,41.75051],[13.83433,41.74965],[13.83364,41.80047],[13.75151,41.79978],[13.7499,41.84987],[13.41841,41.8497],[13.41681,41.95027],[13.33445,41.94959],[13.3333,42.00041],[13.25141,41.99973],[13.25003,42.05051],[13.08509,42.04966],[13.08394,42.097],[13.33399,42.09819],[13.33376,42.1472],[13.41772,42.14822],[13.41635,42.25052],[13.33399,42.24984],[13.33353,42.30094],[13.25141,42.29992],[13.25003,42.54699],[13.41795,42.54817],[13.41589,42.75065],[13.33468,42.74947],[13.33307,42.90056],[13.16836,42.89938],[13.16721,42.95079],[12.96419,42.95012],[12.96258,43.0003],[12.91877,42.9998],[12.91601,43.25078],[12.83526,43.24994],[12.83228,43.50107],[12.66321,43.4994],[12.66482,43.45112],[12.58567,43.44996],[12.58246,43.5508],[12.50171,43.5498],[12.49987,43.65131],[12.16242,43.64915],[12.16494,43.60132],[12.07891,43.5995],[12.0819,43.45196],[11.99541,43.44913],[11.99862,43.34661],[12.07891,43.34795],[12.08075,43.30189],[11.9961,43.29955],[11.99862,43.20214],[11.91237,43.19929],[11.91466,43.15212],[11.83207,43.14944],[11.8323,43.09653],[11.91099,43.09837],[11.91466,42.90191],[11.82909,42.89922],[11.83139,42.85231],[11.74582,42.84945],[11.74811,42.65236],[11.6731,42.64966],[11.67493,42.6105],[11.49485,42.59936],[11.49852,42.49593],[11.57812,42.49796],[11.58156,42.45244],[11.41226,42.44872],[11.41524,42.34656],[11.49599,42.34792],[11.49921,42.29636],[11.57835,42.29822],[11.58225,42.24628],[11.66185,42.24832],[11.66621,42.09649],[11.74536,42.09819],[11.74903,41.99666],[11.91443,41.99922],[11.91535,41.98626],[11.99403,41.98745],[11.99862,41.89685],[12.07868,41.89907],[12.08144,41.84594],[12.16311,41.84799],[12.16563,41.6964],[12.3292,41.69863],[12.33149,41.64637]]]},{id:"PCN-Italy-2012",name:"PCN 2012 - Italy",type:"wms",template:"http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/ortofoto_colore_12.map&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OI.ORTOIMMAGINI.2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[7.54795,43.73118],[8.10697,43.86701],[8.73593,44.38944],[10.18338,43.85116],[9.55016,43.13605],[10.27725,42.27515],[11.69748,42.08118],[12.90059,40.84897],[14.97466,40.20869],[16.04773,38.8953],[13.1086,38.74113],[11.77717,37.93605],[14.40624,36.74299],[15.13467,36.59364],[15.42867,37.027],[15.21993,37.43376],[15.4836,37.92936],[16.01644,37.8036],[17.21669,38.87425],[17.21669,39.40468],[16.55477,39.78775],[17.05464,40.45144],[18.32906,39.70539],[18.68773,40.0587],[18.04964,40.67064],[16.00545,41.52122],[16.38448,41.85964],[15.51837,42.1537],[14.57997,42.2461],[13.56099,43.65128],[12.57889,44.0867],[12.28795,44.62204],[12.56398,44.97092],[12.34151,45.17458],[12.41696,45.40557],[13.09252,45.62826],[13.69549,45.70806],[13.78445,45.5825],[13.9191,45.6322],[13.8235,45.7176],[13.59784,45.8072],[13.64307,45.98326],[13.52963,45.96588],[13.47474,46.00546],[13.66472,46.17392],[13.47587,46.22725],[13.42218,46.20758],[13.37671,46.29668],[13.59777,46.44137],[13.68684,46.43881],[13.7148,46.5222],[12.9151,46.60953],[12.38708,46.71529],[12.27591,46.88651],[12.17486,46.90895],[12.11675,47.01241],[12.21781,47.03996],[12.19254,47.09331],[11.74789,46.98484],[11.33355,46.99862],[11.10618,46.92966],[11.00764,46.76896],[10.72974,46.78972],[10.75753,46.82258],[10.66405,46.87614],[10.47197,46.85698],[10.38659,46.67847],[10.49375,46.62049],[10.46136,46.53164],[10.25309,46.57432],[10.23674,46.63484],[10.10307,46.61003],[10.03715,46.44479],[10.165,46.41051],[10.10506,46.3372],[10.17862,46.25626],[10.07055,46.21668],[9.95249,46.38045],[9.73086,46.35071],[9.71273,46.29266],[9.57015,46.2958],[9.46117,46.37481],[9.45936,46.50873],[9.40487,46.46621],[9.36128,46.5081],[9.28136,46.49685],[9.24503,46.23616],[8.95601,45.96503],[9.09065,45.89906],[9.0298,45.82127],[8.90992,45.8333],[8.9408,45.86682],[8.88904,45.95465],[8.78551,45.99063],[8.85617,46.0748],[8.62242,46.12112],[8.45032,46.26869],[8.42464,46.46367],[8.08814,46.26692],[8.15493,46.1834],[8.11383,46.11577],[8.02906,46.10331],[7.98881,45.99867],[7.9049,45.99945],[7.85949,45.91485],[7.56343,45.97421],[7.10685,45.85653],[7.04151,45.92435],[6.95315,45.85163],[6.80785,45.83265],[6.80785,45.71864],[6.98948,45.63869],[7.00037,45.509],[7.18019,45.40071],[7.10572,45.32924],[7.13115,45.25386],[6.85144,45.13226],[6.7697,45.16044],[6.62803,45.11175],[6.66981,45.02324],[6.74791,45.01939],[6.75518,44.89915],[7.02217,44.82519],[7.07484,44.68073],[6.95133,44.66264],[6.85507,44.53072],[6.94504,44.43112],[6.88784,44.42043],[6.89171,44.36637],[7.00764,44.23736],[7.36364,44.11882],[7.68694,44.17487],[7.72508,44.07578],[7.49355,43.86551],[7.54795,43.73118]],[[8.17134,39.14848],[8.62453,38.75119],[9.09831,39.03764],[9.03102,39.13144],[9.26585,39.18575],[9.64076,39.0227],[9.89894,40.67991],[9.50068,41.39257],[8.30317,40.91071],[8.41304,41.16139],[8.21254,41.13864],[8.07521,40.59862],[8.36154,40.35],[8.27914,39.98585],[8.38283,39.6536],[8.17134,39.14848]],[[12.51489,35.53423],[12.64054,35.5306],[12.63861,35.48641],[12.51296,35.49005],[12.51489,35.53423]],[[11.91218,36.85688],[12.08179,36.85523],[12.07958,36.70974],[11.90998,36.71139],[11.91218,36.85688]],[[12.84019,35.88131],[12.89186,35.88145],[12.89198,35.85003],[12.84031,35.84989],[12.84019,35.88131]]]},{id:"Actueel_ortho25_WMS",name:"PDOK aerial imagery Beeldmateriaal.nl 25cm latest",type:"tms",template:"https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Actueel_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}",zoomExtent:[0,19],polygon:[[[3.14377,51.35984],[3.1575,51.24113],[3.33878,51.11544],[3.91281,51.05851],[4.65714,51.28067],[4.89334,51.26348],[5.17899,51.12579],[5.38498,51.13096],[5.54428,51.05678],[5.42069,50.85956],[5.46738,50.70326],[5.65689,50.61926],[6.14853,50.62143],[6.30234,50.85782],[6.29959,50.95438],[6.26389,51.01835],[6.37238,51.09259],[6.40122,51.20114],[6.37375,51.25102],[6.44516,51.31587],[6.42044,51.5496],[6.34354,51.67922],[6.79672,51.76429],[7.04666,51.91024],[7.07138,52.04559],[7.27188,52.17041],[7.30759,52.38551],[7.20596,52.53195],[7.28287,52.61458],[7.29935,52.77853],[7.44217,52.97827],[7.43393,53.28314],[7.04392,53.55159],[6.78299,53.63635],[6.23917,53.54016],[5.6871,53.51241],[5.17349,53.43885],[4.81644,53.23384],[4.65164,53.06583],[4.54178,52.48598],[4.32205,52.19568],[4.08104,52.01369],[4.02199,52.01623],[3.93684,51.96379],[3.95195,51.88079],[3.84483,51.84942],[3.62373,51.70752],[3.65532,51.66069],[3.63335,51.62746],[3.54683,51.62234],[3.39577,51.56091],[3.38203,51.51735],[3.49876,51.43267],[3.32985,51.38556],[3.14377,51.35984]]],terms_url:"https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance",terms_text:"Kadaster / Beeldmateriaal.nl, CC BY 4.0",best:true,description:"Nationwide data set 25cm resolution color aerial imagery of the most recent year.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/nl/PDOK-Luchtfoto-Beeldmateriaal-25cm-latest.png"},{id:"al_piranhas",name:"Piranhas AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Piranhas&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.71918,-9.65236],[-37.71918,-9.63874],[-37.71914,-9.6321],[-37.71924,-9.62114],[-37.71929,-9.61023],[-37.71934,-9.59988],[-37.7194,-9.58891],[-37.71945,-9.57802],[-37.71944,-9.57173],[-37.71952,-9.56684],[-37.71956,-9.56225],[-37.71998,-9.56218],[-37.72258,-9.56195],[-37.72818,-9.56203],[-37.73254,-9.562],[-37.74107,-9.56206],[-37.74845,-9.56202],[-37.75926,-9.56216],[-37.76972,-9.56227],[-37.78036,-9.56244],[-37.78537,-9.56236],[-37.78907,-9.56233],[-37.79562,-9.56245],[-37.79771,-9.56237],[-37.81006,-9.56243],[-37.81061,-9.56241],[-37.81053,-9.56531],[-37.81049,-9.57629],[-37.81046,-9.58742],[-37.81038,-9.59757],[-37.81031,-9.61798],[-37.81018,-9.65197],[-37.81018,-9.6523],[-37.81024,-9.65259],[-37.80664,-9.65245],[-37.80206,-9.65253],[-37.79597,-9.65237],[-37.79179,-9.65252],[-37.78815,-9.65246],[-37.78723,-9.65242],[-37.78035,-9.65241],[-37.77865,-9.65223],[-37.77625,-9.6523],[-37.77475,-9.65219],[-37.77234,-9.65223],[-37.7696,-9.65245],[-37.76623,-9.65251],[-37.76345,-9.65246],[-37.7604,-9.6525],[-37.75102,-9.65237],[-37.75012,-9.65249],[-37.74155,-9.65248],[-37.7403,-9.65239],[-37.73785,-9.65246],[-37.73443,-9.65238],[-37.73106,-9.65243],[-37.72651,-9.65237],[-37.72195,-9.65225],[-37.71992,-9.65228],[-37.71918,-9.65236]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"PNOA-Spain-TMS",name:"PNOA Spain",type:"tms",template:"https://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}",zoomExtent:[0,20],polygon:[[[-17.88463,28.44606],[-17.89395,28.52255],[-18.02125,28.74819],[-18.02241,28.80384],[-17.9424,28.87261],[-17.89118,28.87371],[-17.89033,28.85151],[-17.76759,28.85378],[-17.76698,28.83122],[-17.74127,28.832],[-17.73949,28.76422],[-17.71398,28.76497],[-17.71293,28.73037],[-17.75744,28.69318],[-17.75708,28.67413],[-17.74579,28.67435],[-17.74573,28.61656],[-17.75197,28.58337],[-17.76225,28.5592],[-17.78331,28.54167],[-17.78316,28.49366],[-17.80861,28.4925],[-17.80601,28.4469],[-17.88463,28.44606]],[[-18.1661,27.78516],[-18.16349,27.69492],[-18.08898,27.69634],[-18.08734,27.67387],[-18.03641,27.67537],[-18.03501,27.63026],[-17.959,27.6324],[-17.86033,27.7926],[-17.86303,27.83688],[-17.8884,27.83649],[-17.88913,27.85905],[-17.99065,27.85675],[-18.03868,27.76558],[-18.11464,27.76379],[-18.11546,27.78636],[-18.1661,27.78516]],[[-17.36038,28.06398],[-17.36297,28.17572],[-17.33756,28.17637],[-17.33846,28.2213],[-17.18579,28.22388],[-17.08208,28.13518],[-17.08084,28.068],[-17.13154,28.06681],[-17.15633,28.02146],[-17.23211,28.02037],[-17.23199,27.99804],[-17.25768,27.99784],[-17.25785,28.01997],[-17.30867,28.01923],[-17.36038,28.06398]],[[-16.92782,28.32758],[-16.92866,28.37219],[-16.87767,28.37293],[-16.87807,28.39542],[-16.52143,28.42261],[-16.44571,28.49113],[-16.44625,28.53597],[-16.42059,28.53627],[-16.42092,28.55884],[-16.34433,28.55976],[-16.3446,28.58221],[-16.19125,28.58372],[-16.19162,28.60684],[-16.12793,28.60782],[-16.1278,28.59218],[-16.09951,28.5925],[-16.09934,28.51638],[-16.16481,28.51612],[-16.16475,28.49386],[-16.23858,28.44847],[-16.26535,28.44761],[-16.26586,28.403],[-16.31675,28.40176],[-16.31631,28.38019],[-16.34208,28.37951],[-16.34083,28.2893],[-16.41584,28.19761],[-16.4151,28.13113],[-16.51533,28.01648],[-16.61684,28.01532],[-16.61681,27.99305],[-16.71842,27.99192],[-16.7191,28.03714],[-16.7447,28.03679],[-16.74534,28.08181],[-16.7707,28.08161],[-16.8224,28.1259],[-16.82317,28.17087],[-16.8487,28.17075],[-16.85028,28.26079],[-16.87565,28.26055],[-16.87608,28.28322],[-16.90151,28.28277],[-16.90239,28.32793],[-16.92782,28.32758]],[[-15.85374,27.90089],[-15.8542,27.99018],[-15.82895,27.99066],[-15.82911,28.03558],[-15.7783,28.03632],[-15.75328,28.08143],[-15.72788,28.08157],[-15.72826,28.17186],[-15.49897,28.1728],[-15.49874,28.15041],[-15.44978,28.15075],[-15.45016,28.19614],[-15.39728,28.19614],[-15.39644,28.03836],[-15.37103,28.03802],[-15.37065,28.01532],[-15.34578,28.01532],[-15.34548,27.92544],[-15.3708,27.92524],[-15.37057,27.83521],[-15.39598,27.83474],[-15.421,27.78797],[-15.47181,27.78939],[-15.47188,27.76665],[-15.52277,27.76678],[-15.54771,27.72161],[-15.62361,27.72134],[-15.62415,27.74199],[-15.70075,27.74335],[-15.80167,27.81105],[-15.85374,27.90089]],[[-14.52156,28.04678],[-14.52244,28.11841],[-14.41575,28.11561],[-14.21688,28.22788],[-14.21537,28.33903],[-14.16417,28.45283],[-14.11151,28.4748],[-14.03358,28.72267],[-13.95652,28.74494],[-13.95617,28.76659],[-13.82902,28.76643],[-13.82896,28.78798],[-13.80007,28.78793],[-13.8013,28.71899],[-13.82757,28.71935],[-13.82786,28.6518],[-13.80258,28.6519],[-13.80339,28.53842],[-13.82885,28.53847],[-13.83151,28.39702],[-13.91582,28.22414],[-13.98564,28.22357],[-14.03696,28.17958],[-14.13871,28.17999],[-14.13866,28.15791],[-14.21537,28.15781],[-14.21472,28.11189],[-14.29132,28.04524],[-14.33197,28.03687],[-14.44578,28.04698],[-14.44666,28.0658],[-14.49628,28.06826],[-14.49593,28.04585],[-14.52156,28.04678]],[[-13.80066,28.84566],[-13.80093,28.82311],[-13.77569,28.82305],[-13.69729,28.88982],[-13.69729,28.91277],[-13.60725,28.9118],[-13.43886,29.00024],[-13.43746,29.13513],[-13.4117,29.13499],[-13.41056,29.22298],[-13.45928,29.25559],[-13.45974,29.2942],[-13.50913,29.29456],[-13.51006,29.31635],[-13.56354,29.31729],[-13.56406,29.27138],[-13.53892,29.2712],[-13.53897,29.25004],[-13.56613,29.25013],[-13.5666,29.203],[-13.51565,29.20223],[-13.51565,29.18206],[-13.5398,29.18278],[-13.54089,29.13753],[-13.65782,29.13685],[-13.71322,29.09351],[-13.76634,29.09345],[-13.85025,29.01659],[-13.85182,28.98343],[-13.85244,28.91486],[-13.90131,28.89245],[-13.9024,28.84698],[-13.80066,28.84566]],[[1.64799,38.99907],[1.73217,38.99936],[1.73147,39.04417],[1.64895,39.04319],[1.64816,39.12764],[1.39486,39.12657],[1.39544,39.08642],[1.22811,39.08526],[1.22911,39.0029],[1.14487,39.0018],[1.14528,38.832],[1.31136,38.83316],[1.31219,38.79065],[1.39469,38.79162],[1.39519,38.75296],[1.31128,38.75193],[1.31259,38.62388],[1.6489,38.62511],[1.64807,38.71115],[1.58456,38.71012],[1.58116,38.70054],[1.54915,38.70028],[1.51972,38.70921],[1.50355,38.72532],[1.48133,38.91551],[1.55189,38.92544],[1.56673,38.95666],[1.64874,38.95833],[1.64799,38.99907]],[[2.54507,39.41667],[2.43933,39.41611],[2.43871,39.48469],[2.43902,39.49934],[2.31223,39.49934],[2.31192,39.54179],[2.22907,39.541],[2.22835,39.62606],[2.34601,39.62709],[2.92704,39.96016],[3.14566,39.96005],[3.14608,40.00198],[3.23139,40.00198],[3.23129,39.83292],[3.14823,39.83316],[3.14844,39.79357],[3.48148,39.79318],[3.48035,39.5959],[3.31506,39.47846],[3.31462,39.37855],[3.08302,39.24994],[2.97986,39.25015],[2.97904,39.3335],[2.72874,39.33342],[2.72885,39.45814],[2.64569,39.45774],[2.64538,39.49966],[2.54528,39.49942],[2.54507,39.41667]],[[3.81204,40.04344],[3.72908,40.0438],[3.72862,39.95842],[3.81266,39.9576],[3.81228,39.91644],[3.9609,39.91598],[4.19381,39.79131],[4.31503,39.79058],[4.31599,39.83293],[4.39874,39.83204],[4.39737,39.91858],[4.3158,39.91933],[4.31619,40.0434],[4.2319,40.04436],[4.23248,40.08478],[4.14915,40.08611],[4.14906,40.12552],[4.0628,40.12722],[4.06242,40.08499],[3.81287,40.08529],[3.81204,40.04344]],[[-8.89106,41.82289],[-9.1092,42.57511],[-9.03655,42.73066],[-9.08834,42.72696],[-9.14661,42.77503],[-9.21855,42.90163],[-9.2761,42.86051],[-9.30991,42.93113],[-9.27898,42.9822],[-9.30991,43.06004],[-9.25236,43.10417],[-9.2315,43.17032],[-9.14733,43.21018],[-9.06748,43.19916],[-9.03367,43.24267],[-8.99842,43.24477],[-8.99986,43.29558],[-8.93727,43.30553],[-8.92936,43.32699],[-8.8639,43.32908],[-8.87613,43.37407],[-8.82217,43.37354],[-8.78548,43.31914],[-8.70635,43.305],[-8.60996,43.3296],[-8.55097,43.32332],[-8.52435,43.3364],[-8.52507,43.36465],[-8.45745,43.39184],[-8.36105,43.41118],[-8.36033,43.46342],[-8.33444,43.57974],[-8.27761,43.57088],[-8.06467,43.72392],[-7.99921,43.7234],[-7.9172,43.78264],[-7.85605,43.79146],[-7.83591,43.73743],[-7.66284,43.80982],[-7.31889,43.67827],[-7.19975,43.58308],[-6.24882,43.6075],[-6.12293,43.57901],[-5.85204,43.6799],[-5.60363,43.57087],[-5.28553,43.56191],[-5.17875,43.49916],[-4.90899,43.48367],[-4.61562,43.4192],[-4.18399,43.42492],[-3.80295,43.51954],[-3.74,43.48693],[-3.56128,43.54236],[-3.1083,43.38163],[-2.93857,43.46246],[-2.74524,43.47551],[-2.30462,43.31706],[-1.9854,43.3563],[-1.85528,43.39725],[-1.7698,43.39644],[-1.77005,43.37605],[-1.71005,43.37569],[-1.71135,43.33125],[-1.72259,43.31318],[-1.68904,43.31291],[-1.68811,43.33413],[-1.64467,43.33372],[-1.64498,43.31332],[-1.60299,43.31295],[-1.60344,43.29266],[-1.56359,43.29212],[-1.56305,43.31338],[-1.47799,43.31284],[-1.36677,43.27614],[-1.35688,43.23815],[-1.37037,43.1713],[-1.44231,43.08336],[-1.41983,43.06036],[-1.37307,43.05117],[-1.36407,43.11159],[-1.30203,43.13522],[-1.23549,43.13325],[-1.27955,43.07744],[-1.19232,43.06496],[-1.00619,43.00778],[-0.94234,42.9749],[-0.7562,42.98213],[-0.71484,42.96108],[-0.69685,42.90314],[-0.55118,42.82207],[-0.50442,42.84845],[-0.42889,42.82009],[-0.31648,42.86558],[-0.14563,42.81086],[-0.03143,42.71249],[0.18618,42.7541],[0.30218,42.71777],[0.36422,42.74287],[0.44875,42.71447],[0.62769,42.7224],[0.64118,42.85767],[0.71492,42.88272],[0.9676,42.81811],[1.10878,42.79898],[1.17532,42.73429],[1.36326,42.74155],[1.41137,42.70939],[1.48061,42.71034],[1.4813,42.50107],[1.64436,42.50203],[1.64328,42.54245],[1.73041,42.54342],[1.73164,42.50118],[2.06386,42.50164],[2.06456,42.45902],[2.39693,42.45994],[2.39768,42.41784],[2.48048,42.41797],[2.48098,42.37594],[2.64479,42.37626],[2.64448,42.45924],[2.81133,42.45961],[2.81126,42.50104],[3.06388,42.50085],[3.06388,42.45915],[3.23078,42.45934],[3.23049,42.37644],[3.31415,42.37604],[3.31412,42.33399],[3.39785,42.33404],[3.39739,42.29009],[3.31389,42.29084],[3.31397,42.20702],[3.14759,42.2073],[3.14759,42.12606],[3.23055,42.126],[3.24668,41.95294],[3.19452,41.85589],[3.06054,41.76474],[2.78358,41.63718],[2.26293,41.42716],[2.16492,41.29893],[1.86008,41.22322],[1.3763,41.11627],[1.17937,41.04646],[1.08585,41.04849],[0.75854,40.81956],[0.9114,40.73376],[0.87813,40.67514],[0.66502,40.53587],[0.55801,40.55022],[0.43392,40.37576],[0.26756,40.19192],[0.16415,40.06472],[0.07513,40.01447],[0.01039,39.89522],[-0.09392,39.81169],[-0.18474,39.63117],[-0.29085,39.50363],[-0.28636,39.33343],[-0.18564,39.17746],[-0.21352,39.15585],[-0.11101,38.97222],[0.00949,38.88268],[0.12189,38.87218],[0.23429,38.79864],[0.25587,38.72642],[0.09581,38.61338],[-0.0022,38.60706],[-0.05705,38.52691],[-0.27197,38.47624],[-0.37987,38.39312],[-0.38347,38.33813],[-0.45091,38.33108],[-0.50487,38.28309],[-0.48238,38.19481],[-0.42933,38.16583],[-0.45451,38.14886],[-0.584,38.17219],[-0.61367,38.11986],[-0.63705,37.96122],[-0.68111,37.94562],[-0.73237,37.88107],[-0.72158,37.78306],[-0.68831,37.734],[-0.66415,37.62315],[-0.71939,37.58784],[-0.91963,37.53758],[-1.11071,37.51641],[-1.33832,37.52867],[-1.44089,37.39037],[-1.6767,37.27652],[-1.85408,36.91229],[-2.06835,36.69291],[-2.21588,36.66192],[-2.37219,36.78018],[-2.68129,36.65911],[-2.92015,36.66756],[-3.09402,36.71263],[-3.46108,36.65488],[-3.72804,36.69291],[-4.37435,36.66333],[-4.65712,36.44042],[-4.9188,36.45313],[-5.16995,36.35135],[-5.28411,36.19702],[-5.26809,36.12418],[-5.35248,36.12247],[-5.35161,36.04014],[-5.43658,36.03889],[-5.43532,36.00344],[-5.68886,36.00365],[-5.68996,36.04053],[-5.85506,36.03856],[-5.85668,36.12421],[-5.93848,36.12215],[-5.94003,36.16556],[-5.99834,36.1645],[-6.03573,36.1781],[-6.07752,36.22241],[-6.15061,36.28646],[-6.23154,36.37701],[-6.33585,36.53106],[-6.32146,36.58163],[-6.40419,36.6235],[-6.47433,36.74897],[-6.41588,36.79939],[-6.49052,36.91738],[-6.62989,37.0194],[-6.87448,37.10838],[-7.04264,37.18507],[-7.26474,37.18435],[-7.37535,37.15354],[-7.40832,37.16822],[-7.42029,37.21183],[-7.42492,37.23505],[-7.43805,37.2452],[-7.44597,37.33261],[-7.4481,37.39094],[-7.46963,37.40758],[-7.4647,37.45305],[-7.50197,37.51641],[-7.51916,37.52292],[-7.52196,37.57237],[-7.45013,37.66958],[-7.4249,37.75992],[-7.31666,37.83997],[-7.26833,37.98895],[-7.15368,38.01552],[-7.11771,38.05536],[-7.0143,38.02438],[-6.99632,38.10756],[-6.96147,38.20125],[-7.08062,38.15708],[-7.34027,38.44024],[-7.26383,38.73807],[-7.04352,38.87297],[-7.06151,38.90796],[-6.96934,39.01983],[-7.00081,39.08879],[-7.15368,39.09577],[-7.15255,39.16029],[-7.24472,39.19689],[-7.25596,39.28133],[-7.33689,39.35351],[-7.3279,39.45599],[-7.51449,39.58865],[-7.55271,39.67954],[-7.05027,39.67522],[-6.99519,39.81954],[-6.92213,39.87909],[-6.88616,40.02299],[-7.04128,40.13479],[-7.01767,40.26615],[-6.8086,40.34501],[-6.86818,40.44516],[-6.85356,40.60664],[-6.83783,40.87576],[-6.9536,41.03704],[-6.80186,41.03959],[-6.76814,41.13871],[-6.64112,41.26556],[-6.56244,41.26303],[-6.21737,41.5791],[-6.31628,41.64465],[-6.51523,41.64129],[-6.58717,41.68832],[-6.54783,41.85597],[-6.62988,41.91121],[-7.13345,41.94048],[-7.16829,41.87188],[-7.42569,41.78477],[-7.95398,41.84593],[-8.13045,41.78058],[-8.25185,41.90786],[-8.12933,42.03488],[-8.24848,42.1008],[-8.36762,42.05575],[-8.60704,42.03405],[-8.89106,41.82289]]],terms_text:"PNOA",best:true},{id:"poco_das_trincheiras",name:"Poço das Trincheiras AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Poco%20das%20Trincheiras&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.23942,-9.35157],[-37.23947,-9.34387],[-37.23942,-9.33792],[-37.23954,-9.33022],[-37.23973,-9.32791],[-37.23974,-9.3228],[-37.23964,-9.32085],[-37.23971,-9.31864],[-37.2398,-9.31706],[-37.23982,-9.31561],[-37.24053,-9.30933],[-37.24051,-9.30004],[-37.24008,-9.29687],[-37.23998,-9.29546],[-37.23992,-9.29319],[-37.23989,-9.28978],[-37.23995,-9.28818],[-37.24008,-9.28641],[-37.24036,-9.28212],[-37.24038,-9.27897],[-37.24051,-9.27557],[-37.24004,-9.26979],[-37.24018,-9.26721],[-37.24018,-9.26612],[-37.23995,-9.26455],[-37.23983,-9.26151],[-37.24333,-9.26136],[-37.24936,-9.26146],[-37.26445,-9.26161],[-37.28016,-9.26172],[-37.28294,-9.26171],[-37.29581,-9.26178],[-37.30685,-9.26178],[-37.31419,-9.26189],[-37.32437,-9.26192],[-37.33078,-9.26175],[-37.33057,-9.27275],[-37.33048,-9.28007],[-37.33054,-9.28117],[-37.33069,-9.28427],[-37.3307,-9.28535],[-37.33064,-9.28617],[-37.33071,-9.28717],[-37.33064,-9.28769],[-37.33062,-9.29027],[-37.33043,-9.29308],[-37.33038,-9.29655],[-37.33034,-9.30591],[-37.3304,-9.31203],[-37.33038,-9.32194],[-37.33041,-9.3342],[-37.33035,-9.34185],[-37.3303,-9.34783],[-37.33035,-9.35202],[-37.31509,-9.35194],[-37.30011,-9.3519],[-37.29531,-9.35183],[-37.28899,-9.35171],[-37.28497,-9.35182],[-37.27851,-9.35173],[-37.27431,-9.35181],[-37.27115,-9.3517],[-37.26351,-9.35168],[-37.26046,-9.35164],[-37.25402,-9.35177],[-37.24705,-9.35163],[-37.23942,-9.35157]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"e-mapa.net-buildings",name:"polska.e-mapa.net: Buildings",type:"wms",template:"http://integracja02.gugik.gov.pl/cgi-bin/KrajowaIntegracjaEwidencjiGruntow?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[15.9751,54.37092],[16.31116,54.55618],[17.13919,54.78457],[18.34485,54.90227],[19.66137,54.47372],[20.28152,54.42135],[21.46639,54.34064],[22.77599,54.37698],[22.8626,54.42336],[23.29567,54.26786],[23.53472,54.09553],[23.52086,53.97752],[23.71834,53.46296],[23.92968,53.18567],[23.92968,52.68873],[23.7322,52.60675],[23.5659,52.58781],[23.20905,52.33026],[23.19519,52.23701],[23.50354,52.18606],[23.69062,52.00301],[23.59708,51.7399],[23.66291,51.38886],[23.9366,50.98278],[24.16873,50.86048],[24.01975,50.80358],[24.10983,50.66105],[24.05786,50.41884],[23.61787,50.30834],[22.68244,49.51635],[22.73788,49.20949],[22.90417,49.07804],[22.8626,48.99401],[22.60969,49.03718],[22.07615,49.20044],[21.84749,49.37219],[21.37631,49.44883],[21.10262,49.37219],[20.91207,49.3022],[20.6453,49.39023],[20.18451,49.33156],[20.11869,49.20044],[19.942,49.13021],[19.76531,49.21176],[19.74798,49.39925],[19.60247,49.41503],[19.50893,49.58154],[19.42925,49.59052],[19.23177,49.41503],[18.99618,49.38798],[18.93382,49.4916],[18.83681,49.49386],[18.80216,49.66234],[18.6428,49.70941],[18.52154,49.89947],[18.08154,50.01092],[17.88753,49.98865],[17.73855,50.06877],[17.6069,50.17096],[17.74548,50.21532],[17.71084,50.3017],[17.41635,50.26407],[16.94864,50.44533],[16.89321,50.40339],[17.00061,50.31055],[17.01793,50.22419],[16.81352,50.18649],[16.64029,50.09767],[16.43242,50.28621],[16.19683,50.42767],[16.42203,50.58852],[16.33888,50.66324],[16.22802,50.63688],[16.05479,50.61271],[15.57322,50.76415],[15.26834,50.89764],[15.24409,50.9806],[15.02929,51.0133],[15.00157,50.85829],[14.81102,50.87359],[14.95653,51.07212],[15.01889,51.29146],[14.93921,51.46015],[14.72094,51.55718],[14.75212,51.62606],[14.59968,51.84276],[14.70362,52.07334],[14.55811,52.24974],[14.51654,52.42544],[14.60315,52.58781],[14.11465,52.82083],[14.15276,52.9734],[14.35024,53.07342],[14.42299,53.26656],[14.1978,53.87348],[14.22205,53.99585],[15.9751,54.37092]]],terms_url:"https://polska.e-mapa.net/",terms_text:"polska.e-mapa.net - Geoportal otwartych danych przestrzennych",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/polskae-mapanetBuildings.png"},{id:"debicki-buildings",name:"Powiat dębicki: Buildings",type:"wms",template:"https://debica.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,adresy,EBU,EBT,S&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.53768,50.01085],[21.51944,50.05423],[21.58099,50.1233],[21.48804,50.18059],[21.13725,50.14835],[21.13939,50.12721],[21.18058,50.12101],[21.14315,50.05965],[21.15356,49.92854],[21.27892,49.92554],[21.22448,49.8861],[21.22362,49.84258],[21.35177,49.8349],[21.36368,49.86838],[21.41585,49.82003],[21.47943,49.8398],[21.52679,49.88911],[21.47689,50.00135],[21.53768,50.01085]]],terms_text:"Powiat dębicki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lancucki-buildings",name:"Powiat łańcucki: Buildings",type:"wms",template:"https://lancut.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.17224,50.10121],[22.12574,50.1079],[22.0823,50.17206],[22.13591,50.1867],[22.173,50.18117],[22.18418,50.22914],[22.235,50.24718],[22.3856,50.16031],[22.40346,50.13331],[22.45275,50.12745],[22.45275,50.10676],[22.41768,50.08997],[22.38364,50.08915],[22.38542,50.05393],[22.35315,50.05067],[22.3562,50.00627],[22.31478,49.99451],[22.32139,49.94614],[22.29979,49.92455],[22.24161,49.92847],[22.20901,49.93728],[22.22382,49.96085],[22.16683,50.00412],[22.1387,50.00251],[22.12015,50.04626],[22.17224,50.10121]]],terms_text:"Powiat łańcucki",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"lubaczowski-buildings",name:"Powiat lubaczowski: Buildings",type:"wms",template:"https://lubaczow.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=S,EBT,adresy,budynki_ewid&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[23.29224,50.09693],[23.55763,50.25704],[23.51394,50.26643],[23.522,50.29892],[23.40991,50.3083],[23.44482,50.35653],[23.38072,50.3699],[23.38829,50.4058],[23.35821,50.41105],[23.2527,50.36601],[23.19379,50.40529],[23.01962,50.2928],[22.84161,50.30574],[22.83572,50.27037],[22.82426,50.26923],[22.79651,50.20933],[22.86603,50.18949],[22.87414,50.13786],[22.93233,50.1678],[22.88954,50.11501],[22.95351,50.07178],[23.05556,50.04967],[22.99884,49.99028],[23.14951,49.97563],[23.29224,50.09693]]],terms_text:"Powiat lubaczowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznanski-buildings",name:"Powiat poznański: Buildings",type:"wms",template:"http://wms.podgik.poznan.pl/cgi-bin/poznan?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",polygon:[[[16.9585,52.46312],[17.03946,52.33605],[16.84291,52.36501],[16.78596,52.46566],[16.70022,52.53819],[16.6415,52.5288],[16.44898,52.36793],[16.47775,52.2696],[16.5659,52.26813],[16.58375,52.17007],[17.08099,52.14981],[17.37124,52.34522],[17.39853,52.44037],[17.35338,52.53949],[17.13689,52.57783],[17.13126,52.6419],[17.01608,52.68366],[16.9158,52.65079],[16.85814,52.58191],[16.7367,52.57459],[16.70022,52.53824],[16.78598,52.46567],[16.9585,52.46312]]],terms_text:"PODGIK Poznań",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatpoznaskiOrthophotomap(aerialimage).png"},{id:"sropczyce-buildings",name:"Powiat ropczycko-sędziszowski: Buildings",type:"wms",template:"https://spropczyce.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[21.60041,50.21025],[21.74199,50.16538],[21.792,50.17829],[21.81459,50.15264],[21.78741,50.10859],[21.82597,50.09149],[21.82552,50.02925],[21.78666,49.97585],[21.70632,49.96022],[21.683,49.92431],[21.60062,49.91793],[21.54249,49.8862],[21.5188,49.89119],[21.45315,49.99268],[21.50364,50.0198],[21.49298,50.07161],[21.55535,50.11909],[21.50429,50.16559],[21.59816,50.17866],[21.60041,50.21025]]],terms_text:"Powiat ropczycko-sędziszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-buildings",name:"Powiat rzeszowski: Buildings",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,EBT,EBU&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"rzeszowski-aerial",name:"Powiat rzeszowski: Orthophotomap (aerial image)",type:"wms",template:"https://powiatrzeszowski.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.18219,50.17339],[22.09834,50.17176],[22.18016,50.09784],[22.13779,50.00695],[22.09444,50.00841],[22.02839,50.06668],[21.9354,50.06636],[21.98164,49.94977],[22.05278,50.0097],[22.1771,50.00555],[22.23319,49.96829],[22.31144,49.87008],[22.34961,49.72826],[21.99951,49.82808],[21.84961,49.95739],[21.7495,49.96981],[21.78503,50.14212],[21.93307,50.24748],[22.08291,50.26471],[21.98553,50.31545],[22.0901,50.37369],[22.19821,50.35265],[22.2536,50.2647],[22.18219,50.17339]]],terms_text:"Powiat rzeszowski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"stalowowolski-buildings",name:"Powiat stalowowolski: Buildings",type:"wms",template:"https://stalowawola.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=EBT,adresy,budynki,centroidy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.017,50.35811],[22.09292,50.44916],[22.06785,50.51434],[22.09722,50.54302],[22.16347,50.52686],[22.23795,50.5503],[22.26768,50.60465],[22.22757,50.6653],[22.16235,50.66969],[22.20843,50.75403],[22.16239,50.80039],[22.0546,50.82234],[21.94394,50.77639],[21.86228,50.80439],[21.83413,50.75035],[21.87465,50.70066],[21.84046,50.65749],[21.97582,50.53164],[21.84797,50.47196],[21.88045,50.3913],[22.017,50.35811]]],terms_text:"Powiat stalowowolski",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"poznan-buildings",name:"Poznań: Buildings",type:"wms",template:"http://wms2.geopoz.poznan.pl:8080/geoserver/sip/wms?SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki_ewidencyjne_sql&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2014",name:"Poznań: Orthophotomap 2014 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapa_2014/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2014_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"poznan-ortofotomapa2016",name:"Poznań: Orthophotomap 2016 (aerial image)",type:"wms",template:"http://wms1.geopoz.poznan.pl:6080/arcgis/services/sip/ortofotomapy/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa_2016_image&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",zoomExtent:[0,23],polygon:[[[16.72794,52.48838],[16.86925,52.48982],[16.86879,52.50779],[16.93948,52.50845],[16.93926,52.51743],[16.98639,52.51784],[16.98784,52.45494],[17.03491,52.45534],[17.0353,52.43736],[17.08235,52.43774],[17.0831,52.4018],[17.0596,52.40161],[17.06129,52.32075],[17.01438,52.32035],[17.01518,52.28441],[16.96829,52.28401],[16.96787,52.30198],[16.89752,52.30134],[16.89662,52.33728],[16.80273,52.33638],[16.80176,52.37232],[16.77828,52.3721],[16.77603,52.45294],[16.72897,52.45244],[16.72794,52.48838]]],terms_text:"Zarząd Geodezji i Katastru Miejskiego GEOPOZ"},{id:"PrahaIPRlatestorthophoto",name:"Praha IPR latest orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/letecke_snimky_posledni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.81232,49.93089],[14.18755,49.87687],[14.12025,50.19882],[14.74502,50.25247],[14.81232,49.93089]]]},{id:"PrahaIPRlow-vegetationorthophoto",name:"Praha IPR low-vegetation orthophoto",type:"wms",template:"http://giswa1.mag.mepnet.cz/arcgis/services/MAP/mimovegetacni_snimkovani_cache/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[1,20],polygon:[[[14.30454,49.99538],[14.31604,49.94205],[14.35,49.94508],[14.35384,49.92726],[14.42385,49.93352],[14.42009,49.95097],[14.48865,49.95709],[14.48479,49.97501],[14.55386,49.98117],[14.55012,49.99852],[14.58455,50.00159],[14.5883,49.98424],[14.69168,49.99346],[14.67634,50.06453],[14.71279,50.06777],[14.70115,50.12158],[14.6647,50.11834],[14.661,50.13543],[14.62755,50.13246],[14.61965,50.16895],[14.58543,50.16591],[14.58163,50.18344],[14.40776,50.168],[14.41156,50.15045],[14.37765,50.14744],[14.3738,50.16524],[14.33893,50.16214],[14.34278,50.14434],[14.27368,50.1382],[14.27749,50.12058],[14.2088,50.11447],[14.21289,50.09557],[14.24656,50.09857],[14.25417,50.06336],[14.21987,50.0603],[14.2237,50.04259],[14.258,50.04565],[14.26953,49.99226],[14.30454,49.99538]]]},{id:"przemysl-buildings",name:"Przemyśl: Buildings",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=adresy,budynki&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"przemysl-aerial",name:"Przemyśl: Ortophotomap (aerial image)",type:"wms",template:"http://przemysl.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.72268,49.76885],[22.73002,49.76787],[22.73097,49.77612],[22.72027,49.77662],[22.71787,49.78062],[22.73104,49.78553],[22.7244,49.79043],[22.73458,49.80441],[22.73167,49.81429],[22.7261,49.8165],[22.72762,49.82124],[22.74395,49.8187],[22.75952,49.80939],[22.79042,49.81462],[22.81169,49.80571],[22.79738,49.80146],[22.80384,49.79247],[22.83118,49.79664],[22.85752,49.78561],[22.84549,49.76746],[22.82485,49.77105],[22.82004,49.75674],[22.77358,49.74439],[22.73838,49.75895],[22.72205,49.74644],[22.71065,49.76288],[22.72268,49.76885]]],terms_text:"Miasto Przemyśl",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/pl/PowiatrzeszowskiBuildings.png"},{id:"RABA-KGZ-3000",name:"RABA-KGZ: Slovenia built-up areas",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA3000/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"RABA-KGZ",name:"RABA-KGZ: Slovenia farmland use",type:"tms",template:"https://wms.openstreetmap.de/tms/RABA/{zoom}/{x}/{y}.png",zoomExtent:[8,19],polygon:[[[15.17101,45.41273],[15.06731,45.4781],[14.98353,45.48726],[14.93027,45.51869],[14.91295,45.46869],[14.81398,45.45019],[14.77755,45.49724],[14.71885,45.52386],[14.68383,45.51924],[14.68367,45.57107],[14.58902,45.61966],[14.59477,45.65727],[14.51653,45.5974],[14.49636,45.52968],[14.32388,45.46048],[14.28251,45.47949],[14.26083,45.47352],[14.2367,45.49569],[14.21022,45.45962],[14.1328,45.46542],[14.06694,45.47615],[14.01187,45.50769],[13.98752,45.49945],[14.00668,45.4739],[13.99154,45.44854],[13.91789,45.44329],[13.88867,45.416],[13.81063,45.42531],[13.7856,45.45577],[13.67553,45.43241],[13.38,45.5666],[13.63822,45.64153],[13.72158,45.60472],[13.83759,45.59226],[13.89962,45.63295],[13.82754,45.67917],[13.82429,45.70266],[13.78961,45.73525],[13.66355,45.79008],[13.62279,45.78613],[13.58835,45.80154],[13.56531,45.85522],[13.62633,45.93894],[13.62975,45.97662],[13.59233,45.97929],[13.57124,45.9591],[13.52998,45.95627],[13.46729,46.00147],[13.49765,46.03741],[13.4896,46.06574],[13.58839,46.11268],[13.63712,46.14524],[13.65358,46.17505],[13.57147,46.17434],[13.54859,46.19982],[13.48189,46.21479],[13.42003,46.19662],[13.40026,46.21037],[13.40304,46.23284],[13.36653,46.30266],[13.43369,46.33243],[13.43247,46.36779],[13.56263,46.40895],[13.59357,46.44846],[13.68393,46.44947],[13.71321,46.53296],[13.79725,46.5164],[13.91305,46.53108],[14.00849,46.49169],[14.09406,46.49538],[14.12664,46.4852],[14.16569,46.44341],[14.28242,46.45347],[14.3259,46.44111],[14.43178,46.4568],[14.45113,46.43239],[14.52618,46.43623],[14.56677,46.38549],[14.58993,46.44479],[14.65658,46.45447],[14.71191,46.50954],[14.80818,46.51778],[14.81442,46.55093],[14.86094,46.61239],[14.9102,46.61569],[14.95398,46.64257],[14.98376,46.61868],[15.02973,46.65796],[15.10645,46.66965],[15.23727,46.64973],[15.41364,46.66553],[15.46237,46.64732],[15.47411,46.6226],[15.53427,46.64346],[15.53636,46.6761],[15.59201,46.69952],[15.62405,46.69039],[15.65624,46.71643],[15.767,46.70899],[15.83801,46.73237],[15.91476,46.71958],[16.02919,46.67033],[16.02955,46.68778],[15.99495,46.71178],[15.97505,46.74967],[15.98671,46.84189],[16.0553,46.85049],[16.11022,46.87912],[16.15425,46.86525],[16.23302,46.88667],[16.29431,46.8824],[16.34649,46.85476],[16.36058,46.8278],[16.34711,46.79707],[16.32245,46.79068],[16.33977,46.7799],[16.33186,46.75896],[16.38893,46.70785],[16.4383,46.69655],[16.42822,46.65301],[16.40159,46.6439],[16.51477,46.57299],[16.54136,46.53627],[16.5416,46.50887],[16.611,46.48393],[16.61889,46.46203],[16.52219,46.45842],[16.47451,46.50108],[16.36776,46.53371],[16.2582,46.489],[16.28533,46.42441],[16.3168,46.40141],[16.30574,46.36921],[16.18689,46.36804],[16.14548,46.39515],[16.06959,46.38154],[16.08614,46.34087],[16.04058,46.32708],[16.01819,46.29964],[15.80777,46.25091],[15.79649,46.21296],[15.77128,46.19937],[15.67996,46.21707],[15.65737,46.20838],[15.65639,46.18456],[15.62037,46.16163],[15.61899,46.11595],[15.63483,46.09529],[15.71869,46.06873],[15.74241,46.04578],[15.71612,45.99489],[15.71645,45.9178],[15.69237,45.90013],[15.69375,45.87111],[15.71776,45.8416],[15.6441,45.81058],[15.57467,45.83999],[15.52333,45.81155],[15.49115,45.82041],[15.47514,45.78666],[15.40343,45.78216],[15.28683,45.73391],[15.27435,45.72408],[15.29763,45.70782],[15.36329,45.72191],[15.41517,45.65443],[15.39705,45.62929],[15.31501,45.62356],[15.31503,45.60696],[15.29266,45.60163],[15.30852,45.58653],[15.31145,45.5423],[15.39496,45.48325],[15.34824,45.44665],[15.27515,45.45599],[15.22848,45.41683],[15.17101,45.41273]]],terms_url:"https://wiki.openstreetmap.org/wiki/Slovenia_Landcover_Import_-_RABA-KGZ",terms_text:"Copyright ©2019 Ministrstvo za kmetijstvo, gozdarstvo in prehrano (mkgp.gov.si). Some rights reserved.",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/si/RABA-KGZSloveniafarmlanduse.png"},{id:"riksantikvaren-kulturminner",name:"Riksantikvaren Heritage Sites overlay",type:"wms",template:"https://kart.ra.no/arcgis/services/Distribusjon/Kulturminner/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=3,6&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,22],polygon:[[[-10.95725,71.60964],[-6.16765,71.62095],[-6.13756,70.30991],[-10.92717,70.29784],[-10.95725,71.60964]],[[16.81947,74.9482],[21.25771,74.94213],[21.23712,73.8918],[16.79889,73.89828],[16.81947,74.9482]],[[4.04288,79.93593],[20.65421,81.54417],[36.6503,80.40108],[26.76265,75.8129],[13.88667,75.79135],[4.04288,79.93593]],[[31.90425,70.43681],[28.47652,71.32896],[23.6865,71.25143],[16.80906,70.07308],[11.16207,67.52539],[9.97554,64.81158],[4.21871,62.145],[4.37254,59.1872],[6.17431,57.8915],[7.93212,57.73936],[10.77758,58.86491],[11.7224,58.76251],[12.72216,60.11415],[13.05175,61.34935],[12.52439,63.61699],[14.23826,63.98561],[15.11717,65.90166],[18.69871,68.37491],[20.06101,68.26126],[21.00584,68.78415],[25.24656,68.3506],[26.93845,69.8472],[28.76219,69.61121],[28.5864,68.8556],[31.06931,69.51915],[31.90425,70.43681]]],terms_url:"https://www.riksantikvaren.no/Veiledning/Data-og-tjenester/Karttjenester",terms_text:"© Riksantikvaren",description:"Archeological and architectural monuments/sites and cultural environments protected by law (''enkeltminner'') from the Norwegian Directorate for Cultural Heritage",icon:"https://www.riksantikvaren.no/extension/riksantikvaren/design/internetsite/images/logo_na.png",overlay:true},{id:"rio2013",name:"Rio Mosaic 2013",type:"wms",template:"http://geo.rio.rj.gov.br/ArcGIS/services/Imagens/Mosaico_2013/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[-43.17709,-22.96971],[-43.14586,-22.96959],[-43.14605,-22.92719],[-43.15625,-22.92731],[-43.15647,-22.87557],[-43.17739,-22.87494],[-43.17742,-22.88553],[-43.19804,-22.88571],[-43.19804,-22.85429],[-43.21875,-22.85444],[-43.21901,-22.83365],[-43.22937,-22.83365],[-43.22934,-22.82371],[-43.19869,-22.82353],[-43.19856,-22.83413],[-43.18826,-22.83398],[-43.18804,-22.84448],[-43.16667,-22.84442],[-43.16683,-22.83404],[-43.15638,-22.83407],[-43.15654,-22.81336],[-43.10436,-22.81306],[-43.10446,-22.80288],[-43.09387,-22.80276],[-43.0941,-22.73998],[-43.13599,-22.73992],[-43.13569,-22.75067],[-43.12573,-22.75055],[-43.12556,-22.77118],[-43.14595,-22.77109],[-43.14612,-22.76055],[-43.17771,-22.76088],[-43.17758,-22.77115],[-43.18807,-22.7713],[-43.18807,-22.78166],[-43.25067,-22.78163],[-43.25057,-22.79198],[-43.28054,-22.79282],[-43.30343,-22.79312],[-43.33353,-22.79297],[-43.33347,-22.80258],[-43.38574,-22.8024],[-43.38542,-22.81255],[-43.41691,-22.81285],[-43.41675,-22.82341],[-43.42717,-22.82335],[-43.4274,-22.83374],[-43.45844,-22.83362],[-43.45864,-22.81276],[-43.48984,-22.813],[-43.48994,-22.7965],[-43.50208,-22.79746],[-43.51543,-22.79737],[-43.52078,-22.79591],[-43.54169,-22.79603],[-43.54179,-22.80234],[-43.54653,-22.80246],[-43.54666,-22.81189],[-43.55251,-22.81279],[-43.56991,-22.81294],[-43.56998,-22.8197],[-43.57361,-22.82326],[-43.58348,-22.82329],[-43.58352,-22.83347],[-43.59391,-22.83374],[-43.59394,-22.85468],[-43.66099,-22.85459],[-43.66099,-22.85983],[-43.70852,-22.86019],[-43.70836,-22.86503],[-43.72206,-22.86488],[-43.72213,-22.86847],[-43.75015,-22.86859],[-43.75009,-22.8753],[-43.76038,-22.87527],[-43.75992,-22.8785],[-43.75976,-22.88457],[-43.76132,-22.88586],[-43.78129,-22.8858],[-43.78126,-22.89591],[-43.80213,-22.89621],[-43.80135,-22.91137],[-43.80119,-22.92758],[-43.79213,-22.92776],[-43.7922,-22.93822],[-43.78191,-22.93799],[-43.78184,-22.94869],[-43.75067,-22.94845],[-43.7506,-22.95909],[-43.72986,-22.95886],[-43.72966,-22.97984],[-43.70904,-22.97966],[-43.70891,-22.99033],[-43.69846,-22.99006],[-43.69836,-23.00065],[-43.66735,-23.00044],[-43.66726,-23.01117],[-43.63125,-23.00937],[-43.63131,-23.02079],[-43.63586,-23.02091],[-43.63602,-23.03164],[-43.67771,-23.03164],[-43.67765,-23.04233],[-43.67086,-23.0423],[-43.67109,-23.0631],[-43.64599,-23.06304],[-43.64605,-23.05276],[-43.60475,-23.05255],[-43.60452,-23.06307],[-43.58381,-23.06289],[-43.58368,-23.08404],[-43.54186,-23.08383],[-43.54195,-23.06319],[-43.52147,-23.06301],[-43.5213,-23.07352],[-43.50043,-23.07337],[-43.50043,-23.04218],[-43.45877,-23.04221],[-43.4587,-23.03194],[-43.43782,-23.03182],[-43.43776,-23.02154],[-43.3235,-23.02121],[-43.3233,-23.04212],[-43.31291,-23.04195],[-43.31275,-23.05267],[-43.30239,-23.05258],[-43.30236,-23.04227],[-43.29194,-23.04215],[-43.29197,-23.03194],[-43.27109,-23.03182],[-43.27119,-23.01093],[-43.26061,-23.01087],[-43.26067,-23.00059],[-43.25057,-23.00047],[-43.25054,-23.01126],[-43.23989,-23.01102],[-43.23986,-23.00062],[-43.21908,-23.0005],[-43.21904,-22.99021],[-43.20901,-22.99009],[-43.20862,-23.08389],[-43.18768,-23.08377],[-43.18761,-23.07334],[-43.13582,-23.07337],[-43.13589,-23.05249],[-43.17732,-23.05255],[-43.17709,-22.96971]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2013_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"rio2015",name:"Rio Mosaic 2015",type:"wms",template:"https://pgeo3.rio.rj.gov.br/arcgis/services/Imagens/Mosaico_2015_UTM/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,13],polygon:[[[-42.30363,-22.43698],[-44.10842,-22.06579],[-44.5313,-23.7863],[-42.70469,-24.16178],[-42.30363,-22.43698]]],terms_url:"https://pgeo3.rio.rj.gov.br/arcgis/rest/services/Imagens/Mosaico_2015_UTM/MapServer",terms_text:"Instituto Pereira Passos - Prefeitura da Cidade do Rio de Janeiro."},{id:"route500",name:"Route 500",type:"tms",template:"https://{switch:a,b,c}.tile.openstreetmap.fr/route500/{zoom}/{x}/{y}.png",zoomExtent:[12,20],polygon:[[[-2.7,43.9],[-6.3,48.98],[-2.25,50.09],[1.31,50.88],[2.35816,51.32937],[2.5488,51.09759],[2.57048,51.07409],[2.58741,51.01763],[2.59845,51.0051],[2.61558,50.99749],[2.63986,50.95766],[2.64225,50.94578],[2.62452,50.9256],[2.61962,50.91067],[2.62396,50.86071],[2.62781,50.85054],[2.63786,50.83696],[2.6511,50.82906],[2.73267,50.81738],[2.79995,50.73795],[2.81655,50.73092],[2.85265,50.73335],[2.89072,50.7162],[2.90492,50.71536],[2.9161,50.72418],[2.93508,50.75592],[3.00718,50.78377],[3.08218,50.78749],[3.09244,50.79092],[3.11412,50.80566],[3.14877,50.80195],[3.2154,50.73111],[3.22149,50.7267],[3.27051,50.70375],[3.27545,50.67757],[3.26576,50.6604],[3.26588,50.64054],[3.28922,50.60028],[3.29219,50.55037],[3.3056,50.53267],[3.37551,50.50839],[3.3898,50.50884],[3.4748,50.54445],[3.52173,50.53459],[3.53266,50.51873],[3.54779,50.51012],[3.61523,50.50558],[3.67378,50.45642],[3.68415,50.35277],[3.6901,50.34044],[3.70258,50.33482],[3.71576,50.33854],[3.74935,50.36279],[3.84109,50.36558],[3.90189,50.3436],[3.91317,50.34291],[4.02672,50.36904],[4.13761,50.29984],[4.14388,50.29727],[4.21444,50.28167],[4.22904,50.26664],[4.23078,50.25233],[4.17084,50.18579],[4.16601,50.16888],[4.1764,50.1547],[4.21195,50.13602],[4.24074,50.07102],[4.23193,50.05551],[4.18164,50.03436],[4.17177,50.02537],[4.16976,50.01217],[4.1765,50.00065],[4.20633,49.97546],[4.22164,49.97089],[4.30877,49.98145],[4.44542,49.9523],[4.45469,49.95251],[4.6581,50.00609],[4.66936,50.01392],[4.67293,50.02716],[4.66924,50.06972],[4.69517,50.10472],[4.83123,50.17941],[4.8815,50.16436],[4.90479,50.14451],[4.90426,50.12639],[4.88076,50.0815],[4.86277,50.0745],[4.85104,50.06216],[4.84331,50.03884],[4.84331,50.03883],[4.8433,50.03881],[4.82678,49.989],[4.82662,49.97692],[4.83343,49.96696],[4.89654,49.91753],[4.89755,49.89424],[4.87913,49.86942],[4.87625,49.85111],[4.88924,49.81266],[4.89769,49.80204],[4.91098,49.79926],[4.99534,49.81116],[5.01867,49.79272],[5.02686,49.78886],[5.09944,49.77323],[5.13458,49.73462],[5.1412,49.72984],[5.18761,49.70906],[5.19602,49.70732],[5.28157,49.70836],[5.33363,49.67308],[5.344,49.65049],[5.3544,49.64041],[5.43141,49.60791],[5.48205,49.52815],[5.49294,49.51979],[5.50666,49.52042],[5.55401,49.54025],[5.59311,49.53424],[5.6076,49.53761],[5.641,49.56095],[5.70676,49.55267],[5.71578,49.55361],[5.77526,49.57414],[5.8399,49.55321],[5.86126,49.52038],[5.876,49.5114],[5.97516,49.50129],[5.99801,49.47317],[6.01627,49.46597],[6.08635,49.47562],[6.09319,49.47787],[6.17397,49.52187],[6.24643,49.52511],[6.334,49.48235],[6.34423,49.48037],[6.43515,49.487],[6.5451,49.44384],[6.60639,49.37868],[6.60497,49.33739],[6.61627,49.31869],[6.67013,49.29269],[6.72996,49.22917],[6.74328,49.19086],[6.76026,49.17752],[6.80904,49.17284],[6.82473,49.17826],[6.83093,49.19366],[6.82982,49.21802],[6.85119,49.23136],[6.88453,49.2239],[6.89322,49.22389],[6.93753,49.23369],[7.04055,49.19794],[7.0463,49.17503],[7.05478,49.16313],[7.06908,49.16018],[7.10494,49.16634],[7.14315,49.14159],[7.1535,49.13839],[7.28683,49.13488],[7.29893,49.13856],[7.36095,49.18259],[7.45012,49.19517],[7.50113,49.17672],[7.54379,49.10572],[7.5579,49.09626],[7.6296,49.08527],[7.64722,49.06722],[7.6612,49.06119],[7.75401,49.05963],[7.76073,49.06067],[7.80291,49.07489],[7.85525,49.05329],[7.8673,49.05227],[7.93826,49.06832],[8.08069,49.00688],[8.2225,48.98787],[8.23704,48.97683],[8.23589,48.95817],[8.20888,48.94863],[8.20089,48.94339],[8.15824,48.89753],[8.10087,48.7993],[7.99071,48.74478],[7.98534,48.7409],[7.90422,48.65865],[7.85605,48.63606],[7.8484,48.62977],[7.81842,48.58883],[7.81456,48.57704],[7.81449,48.50968],[7.78547,48.48337],[7.78055,48.47652],[7.74506,48.39484],[7.74357,48.38427],[7.75159,48.32322],[7.71085,48.29841],[7.70241,48.28803],[7.67661,48.21555],[7.59605,48.11698],[7.59165,48.10648],[7.58522,48.04694],[7.59127,48.03035],[7.62437,47.99865],[7.63205,47.97081],[7.57554,47.87436],[7.5728,47.86435],[7.57267,47.83631],[7.54581,47.78793],[7.54418,47.77232],[7.55758,47.72899],[7.53526,47.6989],[7.53136,47.68564],[7.537,47.67302],[7.60016,47.60822],[7.58967,47.56755],[7.55424,47.55128],[7.54511,47.54283],[7.51256,47.48439],[7.38747,47.42111],[7.32653,47.4273],[7.24435,47.40939],[7.16708,47.4335],[7.15212,47.47612],[7.14279,47.48707],[7.12853,47.48893],[7.0801,47.47718],[7.03557,47.48695],[7.02102,47.48458],[7.01205,47.47287],[7.003,47.44095],[6.9551,47.40808],[6.94716,47.39698],[6.94818,47.38337],[6.95769,47.37359],[6.97126,47.37218],[7.018,47.38386],[7.05623,47.37035],[7.07007,47.35005],[7.05958,47.32257],[6.97424,47.27856],[6.96347,47.26233],[6.96134,47.23479],[6.89443,47.19393],[6.88913,47.18922],[6.85545,47.14636],[6.76907,47.10751],[6.76011,47.09953],[6.72561,47.0418],[6.62355,46.9811],[6.4812,46.9445],[6.46892,46.93522],[6.46686,46.91997],[6.47548,46.88771],[6.4535,46.8239],[6.45644,46.80534],[6.46722,46.79104],[6.46098,46.76887],[6.15817,46.59343],[6.14872,46.58069],[6.15152,46.56508],[6.16549,46.54399],[6.15811,46.52456],[6.10174,46.46979],[6.09572,46.45418],[6.09704,46.43317],[6.10829,46.41643],[6.16622,46.38839],[6.17817,46.36922],[6.13748,46.31297],[6.13371,46.30227],[6.13038,46.23737],[6.1103,46.22344],[6.08865,46.23081],[6.07717,46.23123],[6.01857,46.21601],[6.00681,46.20752],[6.00388,46.19332],[6.00787,46.16977],[6.01783,46.15564],[6.03509,46.15456],[6.05564,46.16288],[6.12468,46.15415],[6.13778,46.15702],[6.24026,46.22094],[6.24906,46.23299],[6.24707,46.24777],[6.21148,46.31057],[6.21219,46.32485],[6.23946,46.36705],[6.31648,46.41557],[6.41083,46.42495],[6.41748,46.42682],[6.50498,46.46871],[6.63047,46.47435],[6.74665,46.45695],[6.82244,46.42925],[6.81832,46.38181],[6.80484,46.36179],[6.80189,46.34639],[6.81095,46.33359],[6.86491,46.30038],[6.87504,46.28007],[6.86092,46.2439],[6.82698,46.21188],[6.82075,46.19862],[6.81863,46.16592],[6.82259,46.15261],[6.83427,46.14509],[6.90382,46.12971],[6.90491,46.09595],[6.90932,46.08406],[6.92001,46.07721],[6.94898,46.0699],[7.01556,46.00883],[7.05191,45.93066],[7.04533,45.92217],[7.04497,45.92064],[7.04394,45.92036],[6.99582,45.85822],[6.94097,45.83551],[6.84376,45.82387],[6.83102,45.81711],[6.82614,45.80353],[6.82787,45.73217],[6.83174,45.72082],[6.8414,45.71373],[6.90729,45.69124],[6.92419,45.66935],[6.94247,45.66172],[6.97131,45.66528],[7.00597,45.64945],[7.01151,45.63652],[6.9978,45.60877],[6.99643,45.59465],[7.0158,45.52354],[7.02774,45.5102],[7.1072,45.47877],[7.1228,45.44924],[7.13304,45.44001],[7.1856,45.41894],[7.19515,45.40409],[7.17075,45.35069],[7.14232,45.32298],[7.13649,45.30576],[7.14458,45.25048],[7.08417,45.20279],[6.99279,45.19823],[6.98106,45.19368],[6.90009,45.12689],[6.85843,45.11699],[6.78283,45.14228],[6.77056,45.14242],[6.67751,45.11356],[6.6653,45.10289],[6.66501,45.08667],[6.68237,45.04558],[6.69602,45.03395],[6.75744,45.01884],[6.78375,44.9146],[6.7942,44.90161],[6.86698,44.86519],[6.8798,44.86346],[6.93633,44.87461],[7.01795,44.84402],[7.03453,44.82282],[7.03711,44.75009],[7.0496,44.73226],[7.07224,44.72311],[7.08651,44.6968],[7.08666,44.68085],[7.07671,44.67134],[6.99007,44.67203],[6.97413,44.66431],[6.97056,44.64696],[6.97819,44.61784],[6.94659,44.57124],[6.88235,44.53479],[6.87233,44.5195],[6.87892,44.50245],[6.95894,44.43129],[6.95872,44.42908],[6.92167,44.41436],[6.91223,44.40659],[6.90907,44.39477],[6.90972,44.38195],[6.91637,44.36804],[6.99909,44.29414],[7.01181,44.256],[7.01983,44.24558],[7.03259,44.2424],[7.07312,44.2461],[7.1651,44.22112],[7.24533,44.18544],[7.26053,44.16682],[7.27537,44.15947],[7.33878,44.1574],[7.36278,44.13834],[7.37776,44.13416],[7.56283,44.15792],[7.5642,44.15836],[7.56478,44.15817],[7.60548,44.1634],[7.6162,44.16827],[7.63989,44.18928],[7.68608,44.1861],[7.69422,44.17795],[7.68937,44.13869],[7.69445,44.12276],[7.72786,44.08615],[7.72403,44.05704],[7.68603,44.02371],[7.68077,44.0164],[7.66016,43.9672],[7.59624,43.94466],[7.58419,43.93287],[7.56858,43.89159],[7.5271,43.87434],[7.51649,43.86397],[7.51594,43.84915],[7.53622,43.79234],[9.8,43.1],[9.63227,41.43244],[9.36968,41.35052],[9.27311,41.29196],[8.94186,41.27688],[5.8,41.64],[3.17358,42.41768],[3.16081,42.42757],[3.0944,42.41457],[3.03402,42.45331],[3.02214,42.45645],[2.87822,42.4487],[2.87019,42.44653],[2.78424,42.40256],[2.7413,42.41128],[2.72928,42.40998],[2.69331,42.39417],[2.68378,42.3854],[2.68162,42.37263],[2.68585,42.34679],[2.66719,42.33008],[2.58106,42.34418],[2.56777,42.34173],[2.5338,42.32197],[2.47795,42.32986],[2.41933,42.37658],[2.41222,42.38021],[2.26719,42.42055],[2.25973,42.42117],[2.20694,42.41558],[2.20653,42.41526],[2.20526,42.41541],[2.16028,42.41065],[2.14881,42.40545],[2.09393,42.35474],[2.00861,42.33818],[1.965,42.36473],[1.93076,42.42442],[1.92089,42.43302],[1.88467,42.44761],[1.88459,42.44762],[1.88444,42.4477],[1.82774,42.47056],[1.72567,42.48452],[1.71561,42.50125],[1.7272,42.56103],[1.72479,42.57499],[1.71011,42.59992],[1.69377,42.60975],[1.60283,42.61382],[1.56069,42.6392],[1.54636,42.64166],[1.50444,42.6331],[1.4921,42.62502],[1.47238,42.59703],[1.43792,42.59264],[1.41936,42.60643],[1.38032,42.67415],[1.37335,42.68127],[1.33313,42.70563],[1.32364,42.7085],[1.23221,42.71248],[1.16554,42.69928],[1.08546,42.76635],[1.07564,42.77079],[0.95937,42.78852],[0.95073,42.78794],[0.92265,42.7797],[0.84606,42.8157],[0.71511,42.8464],[0.70017,42.84402],[0.69117,42.83186],[0.67409,42.76479],[0.67474,42.75286],[0.69192,42.70684],[0.669,42.67901],[0.43024,42.67863],[0.3715,42.70308],[0.35954,42.70415],[0.34912,42.69817],[0.32567,42.67274],[0.29571,42.66388],[0.24594,42.70175],[0.23972,42.70494],[0.18967,42.72039],[0.17919,42.72075],[-0.01993,42.67389],[-0.06726,42.6848],[-0.16949,42.77157],[-0.29987,42.82697],[-0.31683,42.82635],[-0.39208,42.78766],[-0.44354,42.78453],[-0.48842,42.80255],[-0.50868,42.79935],[-0.54499,42.76906],[-0.56721,42.76937],[-0.67446,42.86392],[-0.68094,42.86775],[-0.73372,42.88666],[-0.7476,42.93879],[-0.75711,42.95107],[-0.77253,42.95284],[-0.82114,42.93865],[-0.94508,42.94192],[-1.02313,42.98206],[-1.10852,43.00409],[-1.1156,43.00461],[-1.14775,43.00124],[-1.15845,43.01452],[-1.16736,43.02083],[-1.21622,43.0381],[-1.22612,43.03898],[-1.26236,43.03303],[-1.30643,43.05531],[-1.31992,43.05696],[-1.33135,43.0496],[-1.3542,43.0197],[-1.43868,43.03371],[-1.4775,43.06889],[-1.48311,43.08561],[-1.47641,43.10248],[-1.43479,43.13087],[-1.42732,43.1404],[-1.39411,43.22935],[-1.39531,43.24596],[-1.40868,43.25591],[-1.52629,43.28099],[-1.54626,43.2737],[-1.57149,43.2412],[-1.61053,43.24223],[-1.65,43.29323],[-1.66953,43.30065],[-1.73359,43.28856],[-1.75606,43.31966],[-1.76297,43.32565],[-1.79156,43.34067],[-1.80099,43.37017],[-1.78509,43.39037],[-1.7835,43.39686],[-2.7,43.9]]],terms_url:"https://wiki.openstreetmap.org/wiki/FR:Servers/tile.openstreetmap.fr#Route500.E2.84.A2.C2.A9.C2.AE",terms_text:"Tiles © cquest@Openstreetmap France, data © IGN, LO/OL",description:"Routes du réseau classé (autoroutes, nationales, départementales)",overlay:true},{id:"Ruda_Slaska-aerial_image",name:"Ruda Śląska: Orthophotomap (aerial image)",type:"wms",template:"https://rudaslaska.geoportal2.pl/map/wmsorto/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[18.84294,50.32508],[18.84008,50.33091],[18.85132,50.33437],[18.86262,50.3305],[18.88693,50.333],[18.89493,50.3319],[18.90045,50.32562],[18.89713,50.31146],[18.89312,50.31149],[18.89114,50.30778],[18.8972,50.2999],[18.89073,50.29586],[18.90211,50.29204],[18.90706,50.28637],[18.90853,50.27823],[18.93583,50.27379],[18.94106,50.25859],[18.93848,50.25317],[18.95086,50.24267],[18.96531,50.24084],[18.94611,50.22907],[18.89932,50.22516],[18.90251,50.21749],[18.89075,50.21557],[18.89292,50.20913],[18.86474,50.20512],[18.85673,50.22078],[18.85258,50.22331],[18.84619,50.21761],[18.83341,50.21715],[18.83533,50.22307],[18.83051,50.23099],[18.82411,50.23055],[18.81641,50.23709],[18.81619,50.24125],[18.80635,50.24596],[18.80344,50.24293],[18.78831,50.24456],[18.79552,50.2768],[18.81681,50.27732],[18.81919,50.28794],[18.83893,50.29795],[18.83849,50.3004],[18.82699,50.30342],[18.82691,50.32073],[18.83007,50.32371],[18.84294,50.32508]]],terms_text:"Urząd Miasta Ruda Śląska"},{id:"Rzeszow-buildings",name:"Rzeszów: Buildings",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=komunikacja,budynki,adresy&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"Rzeszow-aerial_image",name:"Rzeszów: Orthophotomap (aerial image)",type:"wms",template:"http://wms.erzeszow.pl/?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=rastry&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[22.09538,50.08157],[22.0947,50.05584],[22.08892,50.05589],[22.08874,50.03671],[22.09505,50.03682],[22.09435,49.98723],[22.0609,49.98754],[22.0605,49.96525],[22.04757,49.96509],[22.04724,49.95792],[22.03139,49.95845],[22.0312,49.9574],[22.0014,49.95833],[22.00019,49.9375],[22.0014,49.93746],[22.00029,49.92047],[21.96799,49.92088],[21.969,49.93683],[21.95393,49.93706],[21.95441,49.94373],[21.94192,49.94378],[21.94253,49.96646],[21.93676,49.9665],[21.93776,49.97828],[21.92898,49.97858],[21.92951,49.98858],[21.91606,49.9888],[21.9165,50.01192],[21.90572,50.01195],[21.90653,50.04136],[21.87425,50.04183],[21.87546,50.06072],[21.90465,50.06083],[21.90672,50.0835],[22.09538,50.08157]]],terms_text:"Urząd Miasta Rzeszowa"},{id:"SanJuanMetroAreaUSACEOrthophotos",name:"San Juan Metro Area: 2013 USACE Orthophotos",type:"tms",template:"http://imagery-pr-usace-2013.s3-website-us-east-1.amazonaws.com/tiles/{zoom}/{x}/{y}.jpg",endDate:"2013-03-15T00:00:00.000Z",startDate:"2013-03-13T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[-66.15007,18.35002],[-66.03337,18.35002],[-66.03328,18.45634],[-66.05464,18.45636],[-66.05463,18.46542],[-66.08303,18.46544],[-66.08302,18.47451],[-66.13034,18.47455],[-66.13034,18.4796],[-66.13983,18.47961],[-66.13984,18.46557],[-66.14995,18.46558],[-66.15007,18.35002]]]},{id:"santana_do_ipanema",name:"Santana do Ipanema AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Santana%20do%20Ipanema&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-37.20224,-9.41356],[-37.20188,-9.37768],[-37.20208,-9.37455],[-37.20192,-9.36733],[-37.20169,-9.36045],[-37.20172,-9.35501],[-37.20195,-9.35101],[-37.20191,-9.34773],[-37.20175,-9.33835],[-37.2017,-9.33505],[-37.20171,-9.33301],[-37.20142,-9.32833],[-37.20121,-9.32469],[-37.20117,-9.32351],[-37.21425,-9.32346],[-37.21537,-9.3234],[-37.22078,-9.32328],[-37.23727,-9.32313],[-37.25181,-9.32293],[-37.2656,-9.32276],[-37.2803,-9.32259],[-37.29191,-9.32245],[-37.29205,-9.33522],[-37.29304,-9.4122],[-37.28357,-9.41235],[-37.27789,-9.4125],[-37.2716,-9.41249],[-37.26506,-9.41262],[-37.26165,-9.41274],[-37.25499,-9.41276],[-37.24991,-9.41296],[-37.24616,-9.41297],[-37.24108,-9.41303],[-37.23461,-9.41321],[-37.2284,-9.41325],[-37.22165,-9.41335],[-37.21686,-9.41346],[-37.21292,-9.41343],[-37.20224,-9.41356]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"Sao_miguel_dos_campos",name:"São Miguel dos Campos AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Sao_miguel_dos_campos&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-36.1415,-9.83171],[-36.05047,-9.83246],[-36.04959,-9.74246],[-36.14059,-9.74166],[-36.1415,-9.83171]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"GEOSN-DOP-2005",name:"Saxony historical aerial imagery 2005",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-2005/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2005&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2005-01-01T00:00:00.000Z",startDate:"2005-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=3f38c3f3-03db-4a2a-b6da-2704b9a1d5f0",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-2012_2014",name:"Saxony historical aerial imagery 2012-2014",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop_2012_2014/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=dop_2012_2014_rgb&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[13.86571,50.71509],[13.86683,50.73012],[13.90116,50.73012],[13.90184,50.74446],[13.91043,50.74446],[13.91043,50.77378],[13.95266,50.77486],[13.95197,50.78897],[13.99969,50.78941],[13.999,50.79831],[14.16715,50.79762],[14.1747,50.8462],[14.32851,50.84534],[14.33503,50.87643],[14.41674,50.876],[14.41674,50.95025],[14.33263,50.95133],[14.3364,50.99802],[14.58188,50.99608],[14.57742,50.94895],[14.54068,50.95003],[14.54446,50.89831],[14.60557,50.89116],[14.60454,50.83439],[14.6605,50.83352],[14.65673,50.79578],[14.83422,50.79469],[14.84727,50.89138],[14.9204,50.88943],[14.9331,50.99478],[14.99902,50.99673],[15.00142,51.09709],[15.04159,51.09709],[15.04228,51.35317],[14.99696,51.35317],[15.00314,51.49959],[14.91593,51.50301],[14.91662,51.55043],[14.74908,51.55129],[14.75114,51.60121],[14.41056,51.59993],[14.41125,51.55129],[14.07891,51.54915],[14.07479,51.49831],[13.99446,51.50002],[13.99446,51.39817],[13.53921,51.39989],[13.53852,51.42516],[13.50041,51.42505],[13.50179,51.44945],[13.41596,51.45094],[13.41699,51.50013],[13.3315,51.50055],[13.33047,51.44966],[13.24945,51.44987],[13.25116,51.60036],[13.16773,51.60057],[13.16739,51.65023],[13.08328,51.65066],[13.08362,51.69941],[12.66202,51.70027],[12.66065,51.64832],[12.4162,51.65045],[12.41345,51.60057],[12.16146,51.60015],[12.16146,51.50109],[12.07631,51.50023],[12.07974,51.39625],[12.16008,51.39753],[12.16214,51.34995],[12.07906,51.35253],[12.07906,51.24562],[12.16214,51.24691],[12.16352,51.0958],[12.24317,51.09709],[12.2454,51.04813],[12.49688,51.04883],[12.49894,50.89966],[12.33346,50.89923],[12.32797,50.84984],[12.20712,50.8494],[12.20506,50.69829],[12.24694,50.69744],[12.24694,50.65023],[11.91529,50.64849],[11.91598,50.59839],[11.83221,50.59817],[11.83255,50.39922],[11.91495,50.39922],[11.91461,50.34886],[11.99486,50.34659],[11.99838,50.29897],[12.16506,50.29912],[12.16549,50.24904],[12.23673,50.24871],[12.24823,50.24212],[12.24772,50.14904],[12.33149,50.14893],[12.33852,50.19335],[12.33286,50.23927],[12.3538,50.23619],[12.35998,50.24926],[12.41457,50.24948],[12.41594,50.29906],[12.49851,50.29874],[12.49834,50.34948],[12.58142,50.34915],[12.58125,50.39896],[12.69489,50.39962],[12.70622,50.39426],[12.71257,50.39875],[13.0813,50.39907],[13.0813,50.4992],[13.24816,50.49898],[13.24884,50.54809],[13.33124,50.54918],[13.33056,50.59911],[13.50908,50.59759],[13.50462,50.62656],[13.5393,50.62635],[13.53827,50.65481],[13.54633,50.65547],[13.54599,50.66983],[13.5544,50.67027],[13.55457,50.68908],[13.54736,50.68887],[13.54582,50.69969],[13.63886,50.69947],[13.63955,50.71425],[13.86571,50.71509]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=8c276e3c-88af-462f-8128-6900bc7dd4f8",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-RGB",name:"Saxony latest aerial imagery",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-rgb/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=cd01c334-7e32-482f-bd43-af286707178a",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DOP-CIR",name:"Saxony latest aerial imagery infrared",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dop-cir/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dop_020_cir&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=ba87bbed-4cb5-4539-a9f5-f863de752f52",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-DTK",name:"Saxony topographic map",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_dtk-pg-color/guest?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=sn_dtk_pg_color&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=d6d24c6d-94ea-447d-8a0c-40afdedeb5c6",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"GEOSN-WebAtlas",name:"Saxony WebAtlasSN",type:"wms",template:"https://geodienste.sachsen.de/wms_geosn_webatlas-sn/guest?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vegetation,Siedlung,Gewaesser,Verkehr,Administrative_Einheiten,Beschriftung&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[13.54901,50.69792],[13.84251,50.71126],[13.93239,50.74504],[14.04614,50.79389],[14.25257,50.85953],[14.40002,50.88966],[14.42671,50.9357],[14.35649,50.97197],[14.32559,50.99319],[14.27504,50.99054],[14.31577,51.04266],[14.41547,51.01263],[14.51939,51.0038],[14.5882,50.9817],[14.54467,50.91977],[14.57977,50.90649],[14.64718,50.92243],[14.64437,50.90915],[14.60505,50.85687],[14.7202,50.81785],[14.81008,50.81341],[14.85642,50.89055],[14.91259,50.94721],[14.99685,51.08679],[15.05303,51.24793],[15.05583,51.29274],[14.99264,51.34452],[14.98843,51.398],[14.97719,51.45754],[14.90979,51.49603],[14.73986,51.5371],[14.73986,51.59122],[14.70054,51.60605],[14.67948,51.5982],[14.68369,51.57813],[14.67386,51.55806],[14.61769,51.55718],[14.58399,51.59035],[14.51939,51.56941],[14.43513,51.5598],[14.327,51.52574],[14.13461,51.55544],[14.0672,51.49952],[14.02788,51.47854],[14.04333,51.45229],[13.99558,51.39274],[13.95767,51.40588],[13.88886,51.38836],[13.72455,51.37434],[13.55463,51.39274],[13.40437,51.45929],[13.35241,51.43916],[13.3159,51.44354],[13.28641,51.41815],[13.22602,51.40063],[13.21339,51.46104],[13.219,51.52661],[13.17406,51.5982],[13.00274,51.67751],[12.90584,51.65312],[12.90303,51.66619],[12.85388,51.69318],[12.76401,51.65922],[12.68817,51.67054],[12.64324,51.62959],[12.57723,51.63046],[12.42557,51.61041],[12.23037,51.57028],[12.17701,51.53011],[12.13909,51.46017],[12.16718,51.41727],[12.1742,51.33487],[12.13207,51.3182],[12.18684,51.21364],[12.15875,51.18812],[12.22054,51.09296],[12.49017,51.05414],[12.52106,50.99319],[12.60532,50.97286],[12.62639,50.91889],[12.50281,50.91092],[12.23739,50.81874],[12.21352,50.72993],[12.28654,50.665],[12.21773,50.6463],[12.13347,50.6276],[12.05343,50.56342],[12.01972,50.64719],[11.85963,50.54825],[11.87649,50.50808],[11.92704,50.5054],[11.93687,50.48664],[11.87087,50.44194],[11.93406,50.39989],[11.96917,50.33987],[12.12083,50.29773],[12.17279,50.3067],[12.18543,50.26094],[12.21212,50.25375],[12.25705,50.21603],[12.28233,50.15668],[12.35535,50.15848],[12.35535,50.22142],[12.41433,50.28158],[12.51123,50.34705],[12.53791,50.38735],[12.67835,50.40257],[12.71205,50.38646],[12.7289,50.39631],[12.75699,50.42584],[12.78648,50.43389],[12.81737,50.41779],[12.84686,50.43657],[12.94797,50.38735],[13.00976,50.41421],[13.04627,50.44999],[13.0561,50.48753],[13.21479,50.49289],[13.27517,50.56609],[13.34118,50.56877],[13.39173,50.61334],[13.47739,50.58571],[13.54761,50.63473],[13.56867,50.67212],[13.54901,50.69792]]],terms_url:"https://geoportal.sachsen.de/cps/metadaten_portal.html?id=475a9197-620f-4dcb-b8aa-7f71b626443f",terms_text:"Staatsbetrieb Geobasisinformation und Vermessung Sachsen",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/de/SaxonyWebAtlasSN.png"},{id:"Geodatastyrelsen_Denmark",name:"SDFE aerial imagery",type:"tms",template:"https://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg",zoomExtent:[0,21],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_url:"https://download.kortforsyningen.dk/content/vilkaar-og-betingelser",terms_text:"Geodatastyrelsen og Danske Kommuner",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Cadastral_Parcels_INSPIRE_View",name:"SDFE Cadastral Parcels INSPIRE View",type:"wms",template:"https://kortforsyningen.kms.dk/cp_inspire?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=CP.CadastralParcel&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_DTK_Kort25",name:"SDFE DTK Kort25",type:"wms",template:"https://kortforsyningen.kms.dk/topo25?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=topo25_klassisk&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Geodatastyrelsen_Skaermkort",name:"SDFE Skærmkort",type:"wms",template:"https://kortforsyningen.kms.dk/topo_skaermkort?FORMAT=image/png&VERSION=1.1.1&login=OpenStreetMapDK2015&password=Gall4Peters&SERVICE=WMS&REQUEST=GetMap&Layers=dtk_skaermkort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,19],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Overflade_Skyggekort_40cm",name:"SDFE Surface Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_overflade_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"SDFE_Terraen_Skyggekort_40cm",name:"SDFE Terrain Shadow Map (40 cm)",type:"wms",template:"https://kortforsyningen.kms.dk/dhm?login=OpenStreetMapDK2015&password=Gall4Peters&FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=dhm_terraen_skyggekort&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[0,20],polygon:[[[8.37439,54.95517],[8.36838,55.40421],[8.2104,55.40398],[8.20873,55.49373],[8.05027,55.49247],[8.01851,56.75014],[8.18192,56.75099],[8.17633,57.02089],[8.34133,57.02199],[8.33925,57.11196],[8.50544,57.11232],[8.50339,57.20205],[9.33163,57.20276],[9.33191,57.29248],[9.49789,57.29196],[9.49886,57.38206],[9.66497,57.38116],[9.66873,57.56056],[9.8352,57.55963],[9.83749,57.64933],[10.17257,57.64628],[10.17542,57.73678],[10.51183,57.73303],[10.51521,57.82289],[10.68349,57.82077],[10.67516,57.6412],[10.5077,57.64331],[10.504,57.55351],[10.67104,57.55141],[10.65078,57.10245],[10.48577,57.10451],[10.47862,56.92491],[10.3144,56.92676],[10.31123,56.83693],[10.47503,56.83509],[10.4649,56.56567],[10.95242,56.55898],[10.94792,56.46922],[11.10993,56.46647],[11.10526,56.37683],[10.94299,56.37953],[10.93412,56.19948],[10.77197,56.20202],[10.76948,56.11201],[10.60797,56.11503],[10.44667,56.11672],[10.28659,56.11868],[10.28315,56.02819],[10.44393,56.02704],[10.44177,55.75792],[10.4335,55.66935],[10.74381,55.66469],[10.74381,55.57123],[10.8969,55.57123],[10.90518,55.39539],[11.06137,55.38128],[11.0593,55.11241],[11.04586,55.03186],[11.20308,55.02475],[11.20308,55.11714],[11.0593,55.11241],[11.06137,55.38128],[11.07896,55.57123],[10.8969,55.57123],[10.92587,55.66702],[10.74381,55.66469],[10.75623,55.75792],[10.44177,55.75792],[10.44393,56.02704],[10.44667,56.11672],[10.60797,56.11503],[10.60521,56.02475],[10.92587,56.02012],[10.91971,55.93094],[11.08028,55.92792],[11.08581,56.01783],[11.7265,56.00506],[11.732,56.09521],[12.05403,56.08713],[12.06085,56.17626],[12.70235,56.15944],[12.66111,55.71143],[12.97923,55.7014],[12.96129,55.52173],[12.32687,55.54121],[12.32061,55.45137],[12.47782,55.44707],[12.47024,55.35705],[12.62697,55.35238],[12.62009,55.26326],[12.46273,55.26722],[12.45529,55.17782],[12.2987,55.18223],[12.28973,55.09236],[12.60486,55.08329],[12.5872,54.90363],[12.27666,54.9119],[12.26102,54.73316],[12.10707,54.73782],[12.08586,54.46817],[11.7795,54.47536],[11.78374,54.56548],[11.16585,54.57822],[11.17064,54.66865],[10.86172,54.6734],[10.86512,54.76347],[10.77136,54.76439],[10.77073,54.73728],[10.75514,54.73758],[10.7544,54.71957],[10.73891,54.71976],[10.73844,54.71085],[10.70745,54.7113],[10.70411,54.67567],[10.5511,54.67817],[10.55472,54.76702],[10.2424,54.77059],[10.24598,54.86047],[10.09023,54.86221],[10.08737,54.77239],[9.15558,54.77696],[9.15628,54.86754],[8.5322,54.86638],[8.53143,54.95516],[8.37439,54.95517]],[[11.45777,56.81955],[11.78492,56.81274],[11.77167,56.63328],[11.44596,56.64011],[11.45777,56.81955]],[[11.32747,57.3613],[11.31618,57.1818],[11.15087,57.18473],[11.14566,57.09496],[10.81577,57.10017],[10.82906,57.36953],[11.32747,57.3613]],[[11.58433,56.27779],[11.57829,56.18804],[11.73923,56.18458],[11.74564,56.27432],[11.58433,56.27779]],[[14.68259,55.36394],[14.83952,55.35652],[14.82638,55.26713],[15.13934,55.25174],[15.1532,55.34108],[15.30992,55.33306],[15.29572,55.24374],[15.13934,55.25174],[15.12556,55.16238],[15.28158,55.15442],[15.25356,54.97576],[14.63175,55.00625],[14.68259,55.36394]]],terms_text:"Geodatastyrelsen og Danske Kommuner",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/dk/SDFESkrmkort.png"},{id:"Sicily-ATA2007",name:"Sicily - Italy",type:"wms",template:"http://map.sitr.regione.sicilia.it/ArcGIS/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0&STYLES=default&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[15.71165,38.25894],[15.23718,38.81938],[14.27124,38.55246],[13.15063,38.75408],[11.96411,37.97451],[12.52441,37.54022],[11.87897,36.79609],[12.49695,35.47409],[12.68921,35.46962],[14.57336,36.66401],[15.29709,36.62875],[15.39854,37.42171],[15.71165,38.25894]]]},{id:"Siemianowice_Slaskie-buildings",name:"Siemianowice Śląskie: Buildings",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/png&transparent=true&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=budynki,drogi,adresy,ulice&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,19],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"Siemianowice_Slaskie-aerial_image",name:"Siemianowice Śląskie: Orthophotomap (aerial image)",type:"wms",template:"https://siemianowice.geoportal2.pl/map/wms/wms.php?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortofotomapa&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:4326",zoomExtent:[0,23],polygon:[[[19.03103,50.33933],[19.0316,50.35413],[19.0656,50.35373],[19.06529,50.34219],[19.06118,50.33749],[19.06069,50.31967],[19.05603,50.31975],[19.05562,50.30155],[19.06432,50.3015],[19.06366,50.27175],[19.04379,50.27179],[19.04375,50.27478],[19.0213,50.27505],[19.02156,50.28398],[19.01027,50.28856],[18.98791,50.28871],[18.98822,50.3022],[18.98143,50.30226],[18.98213,50.33977],[19.03103,50.33933]]],terms_text:"Urząd Miasta Siemianowice Śląskie"},{id:"sc2012",name:"SIG Santa Catarina OrtoRGB 2012",type:"wms",template:"http://sigsc.sc.gov.br/sigserver/SIGSC/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=OrtoRGB-Landsat-2012&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[-48.62488,-26.91624],[-48.62416,-26.83409],[-48.56163,-26.83412],[-48.56165,-26.74919],[-48.62675,-26.74918],[-48.62715,-26.73276],[-48.64126,-26.733],[-48.64174,-26.70912],[-48.62414,-26.70913],[-48.62418,-26.50079],[-48.57099,-26.50077],[-48.57155,-26.47415],[-48.55418,-26.47381],[-48.5545,-26.45736],[-48.56155,-26.45747],[-48.56161,-26.41746],[-48.4991,-26.41747],[-48.49909,-26.25081],[-48.43664,-26.25079],[-48.43661,-26.20752],[-48.4601,-26.20751],[-48.46195,-26.1242],[-48.56161,-26.12419],[-48.56163,-25.95753],[-48.62411,-25.95753],[-48.62411,-25.94507],[-48.68838,-25.94607],[-48.6884,-25.95752],[-49.25089,-25.95752],[-49.2509,-25.9992],[-49.31339,-25.9992],[-49.31338,-26.0825],[-49.37591,-26.0825],[-49.37591,-26.12419],[-49.50093,-26.12418],[-49.50092,-26.16586],[-49.68661,-26.16585],[-49.68661,-26.12417],[-49.74907,-26.08246],[-49.74908,-26.04084],[-49.8116,-26.04085],[-49.81159,-25.99918],[-49.93657,-25.99915],[-49.93661,-25.98244],[-50.00091,-25.98288],[-50.00094,-25.99915],[-50.31338,-25.99916],[-50.31342,-26.04083],[-50.37411,-26.04084],[-50.3741,-25.9992],[-50.49914,-25.99918],[-50.49911,-25.98414],[-50.62593,-25.98452],[-50.62595,-26.04084],[-50.6884,-26.04161],[-50.68845,-26.12416],[-50.75094,-26.12414],[-50.75095,-26.20752],[-51.12595,-26.20747],[-51.12595,-26.24913],[-51.18848,-26.24918],[-51.31344,-26.33245],[-51.31347,-26.62414],[-51.4366,-26.62415],[-51.43659,-26.56476],[-51.62409,-26.5641],[-51.62411,-26.5408],[-51.99907,-26.5408],[-52.06158,-26.49911],[-52.06158,-26.45747],[-52.12408,-26.45749],[-52.12406,-26.41579],[-52.37407,-26.4158],[-52.37409,-26.39133],[-52.56156,-26.3894],[-52.56158,-26.37415],[-52.62408,-26.37417],[-52.62409,-26.33247],[-53.12408,-26.33247],[-53.1241,-26.31707],[-53.1618,-26.3165],[-53.16136,-26.29082],[-53.18656,-26.29083],[-53.24907,-26.24911],[-53.24906,-26.23919],[-53.31159,-26.23824],[-53.3741,-26.22882],[-53.43845,-26.22777],[-53.43843,-26.24914],[-53.5616,-26.24916],[-53.56159,-26.23983],[-53.65501,-26.23814],[-53.65623,-26.29263],[-53.67011,-26.31684],[-53.68846,-26.33242],[-53.70322,-26.3741],[-53.70929,-26.38449],[-53.7098,-26.39568],[-53.70619,-26.40722],[-53.70721,-26.45927],[-53.71438,-26.46168],[-53.71476,-26.48118],[-53.73047,-26.49913],[-53.73146,-26.54081],[-53.75096,-26.5408],[-53.75095,-26.62417],[-53.7602,-26.62414],[-53.76125,-26.6675],[-53.75098,-26.66751],[-53.75096,-26.74298],[-53.72737,-26.7434],[-53.72133,-26.74905],[-53.72141,-26.75093],[-53.74571,-26.75943],[-53.74612,-26.77704],[-53.71948,-26.77755],[-53.72084,-26.83416],[-53.70047,-26.83414],[-53.70277,-26.93108],[-53.71168,-26.93091],[-53.71224,-26.95557],[-53.751,-26.95479],[-53.75092,-26.99915],[-53.76467,-26.99915],[-53.8037,-27.03751],[-53.80454,-27.07258],[-53.80809,-27.07249],[-53.80862,-27.09613],[-53.8269,-27.09577],[-53.82762,-27.12414],[-53.84644,-27.12413],[-53.84765,-27.17014],[-53.83506,-27.18932],[-53.83536,-27.20054],[-53.68847,-27.20284],[-53.68849,-27.22789],[-53.43654,-27.23246],[-53.43655,-27.16751],[-53.37598,-27.16751],[-53.37601,-27.23352],[-53.24905,-27.23564],[-53.24905,-27.20922],[-53.06344,-27.20918],[-53.06345,-27.2334],[-52.81348,-27.23685],[-52.81346,-27.27653],[-52.75096,-27.27732],[-52.75096,-27.29249],[-52.4385,-27.29252],[-52.43848,-27.32689],[-52.37603,-27.32753],[-52.37599,-27.3342],[-52.25098,-27.33418],[-52.25099,-27.34669],[-52.18655,-27.34728],[-52.18657,-27.33419],[-52.12598,-27.3342],[-52.12599,-27.36413],[-52.02979,-27.36489],[-52.03036,-27.42442],[-51.97534,-27.42479],[-51.97603,-27.50088],[-51.93845,-27.50085],[-51.93845,-27.54252],[-51.68846,-27.54247],[-51.68847,-27.55742],[-51.59903,-27.5579],[-51.59923,-27.59481],[-51.56351,-27.59498],[-51.56348,-27.62586],[-51.50088,-27.62586],[-51.50095,-27.66754],[-51.43937,-27.6675],[-51.43954,-27.70932],[-51.37597,-27.7095],[-51.37601,-27.75089],[-51.31349,-27.7509],[-51.31346,-27.79253],[-51.18847,-27.79251],[-51.18848,-27.87586],[-51.12598,-27.87586],[-51.12597,-27.91752],[-51.06348,-27.9175],[-51.06347,-27.95919],[-51.00095,-28.00086],[-50.9385,-28.00086],[-50.93849,-28.16755],[-50.81346,-28.16752],[-50.81345,-28.29253],[-50.75096,-28.29251],[-50.68845,-28.33418],[-50.68849,-28.41754],[-50.626,-28.41752],[-50.56352,-28.44094],[-50.43848,-28.44051],[-50.43847,-28.45917],[-50.37597,-28.45921],[-50.37598,-28.47554],[-50.18844,-28.47454],[-50.18849,-28.51143],[-50.12398,-28.51104],[-50.12402,-28.50086],[-49.87597,-28.50085],[-49.87601,-28.5142],[-49.81347,-28.51369],[-49.81347,-28.58255],[-49.83003,-28.58251],[-49.82951,-28.62597],[-49.8759,-28.66572],[-50.001,-28.74915],[-50.001,-29.04083],[-50.03319,-29.04081],[-50.03219,-29.14711],[-50.12602,-29.14774],[-50.12598,-29.16579],[-50.13613,-29.16581],[-50.1885,-29.19623],[-50.1885,-29.31905],[-50.1422,-29.31873],[-50.14208,-29.33422],[-50.126,-29.33418],[-50.12599,-29.36238],[-49.99906,-29.36153],[-49.99904,-29.24031],[-49.93848,-29.23986],[-49.93851,-29.25087],[-49.87601,-29.25087],[-49.876,-29.30098],[-49.82262,-29.30052],[-49.82227,-29.33419],[-49.81347,-29.33422],[-49.81354,-29.3411],[-49.68654,-29.33991],[-49.68651,-29.29255],[-49.62399,-29.29252],[-49.62398,-29.25085],[-49.56149,-29.25083],[-49.56145,-29.16749],[-49.49901,-29.16746],[-49.49902,-29.08419],[-49.4365,-29.08418],[-49.43651,-29.04251],[-49.37405,-29.04248],[-49.37402,-28.9592],[-49.31153,-28.95917],[-49.31152,-28.91749],[-49.24898,-28.9175],[-49.24897,-28.87582],[-49.18655,-28.87585],[-49.18653,-28.83414],[-49.12402,-28.83418],[-49.12401,-28.7925],[-49.06149,-28.79247],[-49.06146,-28.75084],[-48.99903,-28.75085],[-48.99903,-28.70919],[-48.93658,-28.70918],[-48.93658,-28.66752],[-48.87405,-28.66751],[-48.87404,-28.62585],[-48.74912,-28.62585],[-48.74912,-28.54254],[-48.68656,-28.54253],[-48.68658,-28.33417],[-48.62408,-28.33416],[-48.62406,-28.08418],[-48.5616,-28.08418],[-48.56159,-27.95919],[-48.49905,-27.95916],[-48.49904,-27.91581],[-48.56157,-27.9158],[-48.5616,-27.87584],[-48.49902,-27.87586],[-48.49902,-27.83422],[-48.43657,-27.83418],[-48.43661,-27.62583],[-48.37406,-27.62585],[-48.37405,-27.50086],[-48.31157,-27.50086],[-48.31153,-27.24913],[-48.43657,-27.24913],[-48.43654,-27.20916],[-48.37402,-27.2092],[-48.37405,-27.1658],[-48.43656,-27.1658],[-48.43656,-27.12415],[-48.49906,-27.12413],[-48.49907,-27.08667],[-48.50022,-27.08666],[-48.50031,-27.08247],[-48.5616,-27.08248],[-48.56159,-27.04252],[-48.49906,-27.04252],[-48.49906,-26.99913],[-48.56156,-26.99913],[-48.56157,-26.91579],[-48.62488,-26.91624]]],terms_url:"http://sigsc.sds.sc.gov.br/download/termo_sigsc.pdf",terms_text:"Sistema de Informações Geográficas - Governo de Santa Catarina"},{id:"SIGIP-2012",name:"SIGIP - Orthophoto 2012",type:"tms",template:"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:"US-TIGER-Roads-2019",name:"TIGER Roads 2019",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/openstreetmapus/ck0dxfa7602e61cmjk7p86749/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcHVzIiwiYSI6ImNpcnF4Ym43dDBoOXZmYW04bWhlNWdrY2EifQ.4SFexuTUuKkZeerO3dgtmw",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.1572,68.722],[-164.8554,67.0255],[-168.0022,66.0018],[-169.0087,66.0015],[-169.0075,64.9988],[-172.5143,63.8767],[-173.8197,59.7401],[-178.0001,52.2446],[-177.9993,51.2554],[-171.4689,51.8215],[-162.4025,53.9567],[-159.0076,55.0025],[-158.0191,55.0028],[-151.9963,55.9992],[-151.5003,57.9988],[-151.5013,58.992],[-138.516,58.9953],[-138.515,57.9986],[-133.9948,54.0032],[-130.0044,54.0043],[-130.0071,57.0001],[-131.9759,56.9995],[-135.123,59.7566],[-138.0072,59.9918],[-139.1716,60.4127],[-140.9874,61.0119],[-140.9684,69.9535],[-156.1769,71.5633],[-160.4136,70.7398],[-163.0218,69.9707],[-164.9717,68.9947],[-167.1572,68.722]],[[-68.2,17.8],[-64.32,17.38],[-64.64,18.36],[-65.33,18.57],[-67.9,18.67],[-68.2,17.8]],[[146.2,15.4],[145.7,15.6],[144.2,13.2],[144.8,12.9],[146.2,15.4]],[[179.99,52.2],[172,53.5],[172,52.5],[179.99,51],[179.99,52.2]]],description:"Yellow = Public domain map data from the US Census. Red = Data not found in OpenStreetMap",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/TIGER2017RoadsOverlay.png",overlay:true},{id:"tirol.gv.at-contourlines",name:"Tiris: contour lines",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Hoehenschichtlinien_20m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[15,22],polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif",overlay:true},{id:"tirol.gv.at-DGM",name:"Tiris: DGM (Terrain model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Gelaendemodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-DOM",name:"Tiris: DOM (Surface model)",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/terrain/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Schummerung_Oberflaechenmodell&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto",name:"Tiris: orthophoto",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_RGB&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"tirol.gv.at-orthofoto-cir",name:"Tiris: orthophoto infrared",type:"wms",template:"https://gis.tirol.gv.at/arcgis/services/Service_Public/orthofoto/MapServer/WmsServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Image_Aktuell_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[10.43998,47.59768],[10.47886,47.59925],[10.50277,47.58656],[10.4838,47.55979],[10.51312,47.5435],[10.57177,47.54582],[10.57004,47.56212],[10.60109,47.58074],[10.63904,47.5691],[10.70804,47.57027],[10.71149,47.54932],[10.76841,47.55048],[10.78566,47.52603],[10.89605,47.55048],[10.93572,47.5237],[10.934,47.50506],[10.89088,47.49573],[10.95125,47.49107],[10.9547,47.46776],[11.003,47.43276],[10.99092,47.40825],[11.10304,47.40475],[11.11511,47.41993],[11.20998,47.4456],[11.26863,47.44093],[11.26691,47.41059],[11.29451,47.4421],[11.33073,47.46076],[11.38248,47.45843],[11.3704,47.47592],[11.4394,47.53069],[11.467,47.51787],[11.57394,47.5237],[11.57567,47.55863],[11.59809,47.59121],[11.63431,47.60633],[11.66881,47.5947],[11.793,47.60284],[11.83958,47.59238],[11.84993,47.61098],[12.00689,47.63656],[12.03622,47.62494],[12.07761,47.62726],[12.10866,47.61912],[12.19491,47.62261],[12.15351,47.68768],[12.15868,47.7167],[12.18111,47.71206],[12.21906,47.72482],[12.24148,47.75382],[12.27253,47.7515],[12.2846,47.73178],[12.26563,47.69581],[12.33635,47.7109],[12.37602,47.69581],[12.44329,47.70277],[12.45364,47.69232],[12.45364,47.6749],[12.51057,47.63191],[12.53126,47.64586],[12.58991,47.63424],[12.57956,47.61098],[12.66581,47.5947],[12.67961,47.57492],[12.64511,47.55048],[12.66753,47.53185],[12.68478,47.50389],[12.71238,47.48175],[12.66753,47.45609],[12.64166,47.45959],[12.65028,47.44326],[12.62096,47.40709],[12.57439,47.38607],[12.55024,47.39658],[12.49159,47.37205],[12.50884,47.35102],[12.48814,47.32063],[12.43467,47.32297],[12.41397,47.30426],[12.36395,47.30894],[12.3122,47.32764],[12.2708,47.29841],[12.17766,47.29373],[12.14833,47.28437],[12.11729,47.29958],[12.09831,47.27501],[12.12591,47.25042],[12.09659,47.19771],[12.11039,47.14846],[12.14143,47.10974],[12.13799,47.08977],[12.15006,47.07568],[12.00517,47.04395],[11.92065,47.02985],[11.83095,46.99103],[11.78783,46.98633],[11.77403,46.9675],[11.73091,46.96514],[11.70676,46.98986],[11.64294,46.99456],[11.61189,47.00515],[11.53254,46.97809],[11.49287,47.00868],[11.44457,46.9675],[11.4049,46.96161],[11.34453,46.98633],[11.20309,46.9569],[11.17549,46.96161],[11.17721,46.94395],[11.14616,46.92275],[11.12546,46.92275],[11.10822,46.90389],[11.11511,46.88857],[11.08234,46.85319],[11.09614,46.8237],[11.05129,46.80245],[11.02369,46.76229],[10.91848,46.77056],[10.88398,46.75756],[10.84085,46.77292],[10.82361,46.76938],[10.79083,46.78946],[10.75633,46.77883],[10.72529,46.79064],[10.74771,46.82724],[10.69424,46.84494],[10.67354,46.86971],[10.60799,46.85319],[10.55452,46.82724],[10.52002,46.83904],[10.46827,46.83668],[10.45103,46.8815],[10.47517,46.93217],[10.41308,46.95572],[10.3941,46.98868],[10.3665,46.98044],[10.33891,46.94748],[10.32856,46.91803],[10.29751,46.91332],[10.25956,46.9251],[10.23886,46.86263],[10.16642,46.83904],[10.13537,46.8473],[10.13192,46.87207],[10.10604,46.88621],[10.09224,46.92746],[10.12502,46.95219],[10.14572,47.00044],[10.11294,47.02514],[10.15262,47.04983],[10.13019,47.06276],[10.13364,47.09095],[10.15952,47.12617],[10.20091,47.1426],[10.19229,47.20005],[10.20954,47.21294],[10.18711,47.23989],[10.20091,47.25628],[10.16814,47.2633],[10.16814,47.28086],[10.20264,47.29139],[10.24404,47.28905],[10.33373,47.32063],[10.38893,47.39074],[10.4148,47.39424],[10.4562,47.43626],[10.44758,47.48175],[10.41998,47.50506],[10.4424,47.55514],[10.41308,47.57143],[10.43998,47.59768]],[[12.4019,47.16019],[12.35705,47.13908],[12.35015,47.11208],[12.31048,47.10739],[12.25528,47.07215],[12.21388,47.05923],[12.20008,47.02632],[12.14488,47.03102],[12.11556,47.0075],[12.13626,46.95926],[12.16731,46.9357],[12.14316,46.91096],[12.18973,46.90036],[12.21733,46.86617],[12.25528,46.88386],[12.27425,46.88268],[12.2984,46.83432],[12.27598,46.82016],[12.27943,46.77765],[12.35015,46.77174],[12.3812,46.715],[12.44329,46.68425],[12.51402,46.67004],[12.56576,46.64873],[12.62958,46.65347],[12.70203,46.65347],[12.70375,46.69844],[12.72963,46.70081],[12.72273,46.73747],[12.80207,46.74929],[12.85382,46.74456],[12.90384,46.77174],[12.92799,46.75992],[12.95732,46.77647],[12.97974,46.79772],[12.89522,46.83314],[12.89522,46.84848],[12.8452,46.86381],[12.84692,46.91568],[12.7969,46.93099],[12.78828,46.94748],[12.7486,46.96867],[12.73653,46.99691],[12.78138,47.0416],[12.7624,47.051],[12.7141,47.04513],[12.71065,47.07803],[12.62268,47.12617],[12.56921,47.14142],[12.55196,47.13321],[12.52609,47.15433],[12.48297,47.16488],[12.46054,47.14846],[12.43467,47.15785],[12.41915,47.14377],[12.4019,47.16019]]],terms_url:"https://tiris.tirol.gv.at",terms_text:"tiris.tirol.gv.at",icon:"https://static.tirol.gv.at/plainhtml/v1/tirollogo.gif"},{id:"lu.geoportail.opendata.topo",name:"Topographical Map geoportail.lu",type:"tms",template:"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png",endDate:"2010-07-20T00:00:00.000Z",startDate:"2013-07-19T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[5.96175,50.17631],[6.02627,50.18496],[6.03318,50.16395],[6.06069,50.15536],[6.07668,50.15913],[6.07824,50.17255],[6.10176,50.17199],[6.1225,50.16437],[6.1201,50.15594],[6.1277,50.14993],[6.11323,50.13739],[6.12369,50.13719],[6.14093,50.1305],[6.13555,50.11899],[6.13808,50.10263],[6.13108,50.09964],[6.13547,50.09119],[6.12194,50.09059],[6.12634,50.07817],[6.13186,50.07348],[6.12117,50.064],[6.11444,50.06139],[6.11563,50.05817],[6.12361,50.06323],[6.13661,50.04178],[6.13034,50.02975],[6.14821,50.02307],[6.13868,50.01572],[6.13594,50.01485],[6.13138,50.01905],[6.13024,50.01819],[6.13934,50.01116],[6.1517,50.01058],[6.14546,49.99689],[6.13966,49.9994],[6.13852,49.99829],[6.14218,49.99535],[6.15023,49.99518],[6.15625,49.98867],[6.17305,49.98589],[6.17348,49.98344],[6.17035,49.98376],[6.16549,49.97115],[6.17151,49.96298],[6.1763,49.962],[6.17995,49.95386],[6.18339,49.9548],[6.17983,49.96307],[6.18331,49.9686],[6.19277,49.97158],[6.19978,49.95352],[6.20707,49.95672],[6.21269,49.9514],[6.22502,49.95039],[6.22044,49.94369],[6.22824,49.93726],[6.22635,49.92766],[6.21913,49.92354],[6.22986,49.92125],[6.23603,49.91355],[6.23187,49.91064],[6.22769,49.91062],[6.23229,49.9072],[6.23381,49.90028],[6.24692,49.89535],[6.25781,49.88724],[6.26301,49.88101],[6.27646,49.87725],[6.28113,49.87957],[6.29166,49.87548],[6.2977,49.86673],[6.30989,49.87107],[6.31532,49.8673],[6.31465,49.86057],[6.32361,49.85188],[6.32158,49.8409],[6.32741,49.83673],[6.33656,49.83998],[6.33937,49.8507],[6.36465,49.85164],[6.4022,49.82098],[6.42643,49.81629],[6.42807,49.81186],[6.43097,49.81129],[6.44161,49.81547],[6.44344,49.81233],[6.45366,49.81275],[6.46454,49.81975],[6.47057,49.82385],[6.49681,49.81277],[6.50669,49.80993],[6.51155,49.80238],[6.51485,49.80513],[6.5196,49.81446],[6.52981,49.81048],[6.53225,49.80686],[6.53083,49.80116],[6.50622,49.78899],[6.51917,49.78344],[6.51105,49.77422],[6.52056,49.76818],[6.52052,49.76134],[6.50373,49.75086],[6.50263,49.73298],[6.50727,49.72938],[6.51809,49.7242],[6.51642,49.72129],[6.51176,49.72016],[6.50479,49.725],[6.49891,49.72639],[6.49558,49.72443],[6.50712,49.71655],[6.50788,49.71215],[6.5046,49.71227],[6.42714,49.66237],[6.4399,49.66025],[6.44251,49.65591],[6.42178,49.61809],[6.39898,49.60094],[6.37941,49.59526],[6.37551,49.58809],[6.38443,49.5801],[6.38119,49.57509],[6.36909,49.5783],[6.35791,49.57166],[6.3849,49.55817],[6.38009,49.54856],[6.35855,49.53296],[6.35932,49.52481],[6.37076,49.50545],[6.37056,49.45732],[6.3334,49.46493],[6.32189,49.47244],[6.29503,49.47928],[6.28789,49.48379],[6.27191,49.49995],[6.24133,49.50693],[6.19669,49.50331],[6.17337,49.50577],[6.16086,49.50085],[6.1671,49.49006],[6.14018,49.48525],[6.12937,49.48803],[6.12725,49.47081],[6.1014,49.46726],[6.10483,49.45076],[6.08167,49.45417],[6.07722,49.46139],[6.05917,49.46306],[6.05222,49.46028],[6.04421,49.44553],[6.02529,49.44703],[6.02154,49.45127],[6.01574,49.44885],[5.99412,49.45301],[5.97657,49.44885],[5.97773,49.45955],[5.97232,49.46087],[5.96891,49.48202],[5.9616,49.49026],[5.91578,49.49835],[5.89033,49.4948],[5.86332,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.83187,49.52639],[5.84308,49.53081],[5.83562,49.54114],[5.81625,49.53325],[5.8052,49.54272],[5.85943,49.57158],[5.86866,49.587],[5.86289,49.58525],[5.8511,49.58379],[5.84712,49.58961],[5.84565,49.5981],[5.8694,49.6106],[5.88182,49.63815],[5.89998,49.63907],[5.89934,49.66239],[5.85656,49.67628],[5.85628,49.68211],[5.8757,49.71118],[5.86481,49.72331],[5.84325,49.71822],[5.82191,49.72128],[5.82489,49.73767],[5.82073,49.74878],[5.78626,49.79079],[5.76517,49.78961],[5.75094,49.79094],[5.74159,49.82126],[5.74581,49.82435],[5.7372,49.83353],[5.74053,49.84142],[5.74701,49.84048],[5.74624,49.84783],[5.75399,49.84878],[5.74066,49.85152],[5.75229,49.85922],[5.74955,49.87554],[5.77567,49.87438],[5.77505,49.88057],[5.7346,49.89341],[5.73303,49.90285],[5.75783,49.91737],[5.76039,49.93252],[5.77073,49.93711],[5.76878,49.94239],[5.7688,49.96104],[5.78672,49.96816],[5.80524,49.96677],[5.80652,49.97321],[5.83129,49.97995],[5.83462,49.98656],[5.81806,49.99936],[5.81561,50.01437],[5.84792,50.02809],[5.86189,50.04581],[5.85087,50.0563],[5.85781,50.07186],[5.881,50.08069],[5.89196,50.12041],[5.95286,50.13384],[5.96175,50.17631]]],terms_url:"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts",terms_text:"Administration du Cadastre et de la Topographie",icon:"https://www.geoportail.lu/static/img/lion.png"},{id:"Torokbalint-orthophoto-2013",name:"Törökbálint orthophoto 2013",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ORTO_2013_5CM_2013SZEPT_TAKARASSAL_512_512&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2013-09-01T00:00:00.000Z",startDate:"2013-09-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu",terms_text:"Törökbálint",description:"5 cm resolution bald image"},{id:"Torokbalint-orthophoto-2015",name:"Törökbálint orthophoto 2015",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2015_20160218&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[18.91731,47.40854],[18.91691,47.40849],[18.91606,47.40885],[18.91565,47.40905],[18.91458,47.40938],[18.91385,47.4097],[18.91376,47.40976],[18.91314,47.41038],[18.9122,47.41098],[18.91041,47.41175],[18.90932,47.41258],[18.90841,47.41317],[18.90676,47.41443],[18.90481,47.41568],[18.90362,47.41597],[18.90317,47.41616],[18.90062,47.41742],[18.90042,47.41755],[18.89968,47.41797],[18.89888,47.41818],[18.89814,47.41835],[18.89752,47.41855],[18.89666,47.41901],[18.8958,47.41954],[18.89421,47.4205],[18.89055,47.42209],[18.88743,47.42332],[18.88554,47.42424],[18.88436,47.42476],[18.88189,47.42553],[18.88085,47.42598],[18.8801,47.42629],[18.87956,47.42649],[18.87741,47.42738],[18.87602,47.42789],[18.87508,47.42836],[18.87281,47.42934],[18.87164,47.42968],[18.8714,47.43001],[18.87259,47.4323],[18.87273,47.43278],[18.87274,47.43324],[18.87244,47.43482],[18.87206,47.43526],[18.86891,47.43712],[18.86561,47.4375],[18.86466,47.43774],[18.86404,47.43809],[18.86378,47.43791],[18.8634,47.43784],[18.863,47.43798],[18.85195,47.44715],[18.85217,47.44847],[18.8593,47.45387],[18.85839,47.45512],[18.85777,47.45568],[18.85718,47.456],[18.8572,47.45636],[18.86015,47.45839],[18.86194,47.4595],[18.86099,47.46071],[18.85979,47.46201],[18.85929,47.46236],[18.85859,47.46272],[18.85713,47.46333],[18.85634,47.4636],[18.85628,47.46403],[18.85719,47.46528],[18.85663,47.46551],[18.85653,47.4658],[18.85693,47.46656],[18.85836,47.46953],[18.85826,47.4698],[18.85827,47.46991],[18.85838,47.47019],[18.85844,47.47027],[18.85852,47.47033],[18.85862,47.47036],[18.85873,47.47038],[18.8589,47.47036],[18.86146,47.46973],[18.86277,47.46929],[18.86617,47.46785],[18.86794,47.46656],[18.86997,47.46524],[18.8708,47.46457],[18.87268,47.46333],[18.87536,47.46113],[18.87687,47.45927],[18.88943,47.45987],[18.89024,47.45988],[18.90371,47.45534],[18.90427,47.4552],[18.90493,47.45506],[18.90542,47.4551],[18.90567,47.45505],[18.90629,47.45477],[18.90648,47.45453],[18.9066,47.45447],[18.90678,47.45439],[18.90811,47.45399],[18.90837,47.45395],[18.9089,47.45384],[18.90954,47.4537],[18.91326,47.45317],[18.91353,47.4532],[18.91372,47.45317],[18.91386,47.45307],[18.91431,47.45294],[18.91598,47.453],[18.91807,47.45317],[18.91846,47.453],[18.91903,47.45161],[18.92173,47.4508],[18.92246,47.45069],[18.92418,47.45025],[18.92756,47.44989],[18.92972,47.44951],[18.93221,47.44922],[18.93347,47.44932],[18.93921,47.44935],[18.94229,47.44903],[18.94549,47.4489],[18.94826,47.4487],[18.95003,47.44824],[18.9547,47.44722],[18.95749,47.44692],[18.95802,47.44715],[18.95844,47.44708],[18.95877,47.44666],[18.96145,47.4393],[18.96368,47.4358],[18.96598,47.43288],[18.96899,47.4297],[18.9701,47.42704],[18.97009,47.42679],[18.96695,47.4246],[18.95735,47.41842],[18.95676,47.4184],[18.95606,47.41813],[18.95385,47.41739],[18.95144,47.41665],[18.95131,47.41664],[18.9327,47.41703],[18.93257,47.41696],[18.93201,47.41674],[18.93149,47.4164],[18.93114,47.41612],[18.92123,47.41091],[18.91957,47.40987],[18.91927,47.40961],[18.91731,47.40854]]],terms_url:"http://www.torokbalint.hu/",terms_text:"Törökbálint",best:true,description:"5 cm resolution bald image"},{id:"Toulouse-Orthophotoplan-2007",name:"Toulouse - Orthophotoplan 2007",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2007&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2007-01-01T00:00:00.000Z",startDate:"2007-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.192,43.63288],[1.20154,43.63297],[1.20111,43.65549],[1.2228,43.6557],[1.22262,43.66534],[1.22753,43.66538],[1.22754,43.66564],[1.23376,43.66569],[1.23376,43.66502],[1.23512,43.66503],[1.23509,43.66707],[1.24436,43.66716],[1.24416,43.67439],[1.2494,43.67443],[1.2494,43.67466],[1.25557,43.67472],[1.25557,43.67445],[1.25695,43.67447],[1.25688,43.67853],[1.28749,43.67883],[1.28708,43.70132],[1.30882,43.70146],[1.30865,43.71277],[1.33033,43.71295],[1.33002,43.73052],[1.33671,43.73058],[1.33673,43.73122],[1.37343,43.73105],[1.37358,43.72458],[1.46045,43.72529],[1.46078,43.7028],[1.48249,43.70295],[1.48298,43.66921],[1.50468,43.66936],[1.50484,43.65812],[1.52655,43.65827],[1.52669,43.64703],[1.54837,43.64716],[1.54854,43.63594],[1.57022,43.63608],[1.57051,43.61358],[1.54882,43.61343],[1.5491,43.59095],[1.57077,43.59107],[1.57094,43.57983],[1.57937,43.57989],[1.57948,43.57377],[1.58091,43.57378],[1.58109,43.55738],[1.57123,43.55731],[1.57165,43.52355],[1.39848,43.52226],[1.39865,43.51101],[1.3121,43.51025],[1.3119,43.52152],[1.29026,43.52131],[1.28986,43.54382],[1.31152,43.54401],[1.31133,43.55526],[1.30369,43.55519],[1.30361,43.55951],[1.29554,43.55943],[1.29554,43.55955],[1.28956,43.55945],[1.28929,43.57754],[1.26757,43.57736],[1.2674,43.58861],[1.25355,43.5885],[1.25338,43.59563],[1.2518,43.59563],[1.2518,43.59494],[1.23504,43.59478],[1.23504,43.5946],[1.22396,43.5946],[1.22394,43.59947],[1.21397,43.5993],[1.21388,43.60464],[1.20206,43.60448],[1.20195,43.61048],[1.19243,43.61037],[1.192,43.63288]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2011",name:"Toulouse - Orthophotoplan 2011",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2011&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2011-01-01T00:00:00.000Z",startDate:"2011-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2013",name:"Toulouse - Orthophotoplan 2013",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2013&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2015",name:"Toulouse - Orthophotoplan 2015",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2015&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole"},{id:"Toulouse-Orthophotoplan-2017",name:"Toulouse - Orthophotoplan 2017",type:"wms",template:"https://wms.plan.toulouse.fr/geocache/wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=ortho2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[1.11351,43.68676],[1.13518,43.68708],[1.13489,43.69835],[1.17829,43.69903],[1.17799,43.71028],[1.19966,43.71061],[1.19934,43.72187],[1.24274,43.72253],[1.24243,43.73375],[1.26415,43.73409],[1.26383,43.74536],[1.28553,43.74565],[1.28525,43.75693],[1.30692,43.75723],[1.30664,43.76848],[1.32834,43.76879],[1.32808,43.78003],[1.43673,43.78158],[1.43731,43.7591],[1.45901,43.75937],[1.45933,43.74815],[1.48103,43.7484],[1.48133,43.73718],[1.50303,43.73741],[1.50359,43.71497],[1.52531,43.71518],[1.52561,43.70401],[1.54727,43.70426],[1.54757,43.69304],[1.5692,43.69329],[1.56957,43.68203],[1.5912,43.68227],[1.59174,43.6598],[1.61342,43.66003],[1.61372,43.64883],[1.63538,43.64908],[1.63841,43.51407],[1.29216,43.50947],[1.29186,43.5207],[1.27021,43.5204],[1.26988,43.53164],[1.24823,43.53133],[1.2476,43.55378],[1.22596,43.55349],[1.22568,43.56472],[1.20398,43.56442],[1.20331,43.5869],[1.18162,43.58656],[1.18102,43.60904],[1.15928,43.60869],[1.15896,43.61995],[1.13726,43.61962],[1.13659,43.64209],[1.11491,43.64176],[1.11351,43.68676]]],terms_url:"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData",terms_text:"ToulouseMetropole",best:true},{id:"Tours-Orthophoto-2008_2010",name:"Tours - Orthophotos 2008-2010",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}",endDate:"2011-01-01T00:00:00.000Z",startDate:"2008-01-01T00:00:00.000Z",zoomExtent:[0,20],polygon:[[[0.54575,47.46526],[0.54585,47.46082],[0.53922,47.4607],[0.53935,47.45624],[0.5328,47.4561],[0.5329,47.45157],[0.52619,47.4514],[0.52659,47.44249],[0.50009,47.44207],[0.50024,47.43758],[0.4936,47.43743],[0.4937,47.43293],[0.46061,47.43246],[0.46072,47.42798],[0.4541,47.42781],[0.45493,47.40539],[0.46154,47.40545],[0.46191,47.39649],[0.46843,47.3966],[0.46913,47.37864],[0.47571,47.37876],[0.47621,47.3652],[0.48283,47.36535],[0.48296,47.36083],[0.47635,47.36074],[0.47665,47.35173],[0.47005,47.35162],[0.4702,47.34713],[0.46375,47.34701],[0.45714,47.34241],[0.45729,47.33791],[0.45067,47.33781],[0.45084,47.33331],[0.44422,47.3332],[0.44438,47.32871],[0.43114,47.3285],[0.43163,47.315],[0.43824,47.31511],[0.43838,47.31062],[0.47145,47.31114],[0.47131,47.31566],[0.47789,47.31575],[0.47807,47.31128],[0.48468,47.31136],[0.48486,47.30687],[0.49144,47.30698],[0.49174,47.29797],[0.48516,47.29787],[0.48543,47.28887],[0.47885,47.28877],[0.47916,47.27978],[0.48578,47.2799],[0.48591,47.27539],[0.49254,47.2755],[0.49267,47.27101],[0.4993,47.27111],[0.49943,47.26661],[0.51927,47.26692],[0.51942,47.26242],[0.52602,47.26252],[0.52587,47.26702],[0.5457,47.26734],[0.54555,47.27183],[0.55877,47.27204],[0.55863,47.27652],[0.56523,47.27663],[0.56508,47.28112],[0.57168,47.28123],[0.57152,47.28572],[0.57814,47.28583],[0.57799,47.29033],[0.5846,47.29043],[0.58431,47.29942],[0.5975,47.29961],[0.59766,47.29514],[0.65716,47.296],[0.6573,47.29151],[0.6705,47.29172],[0.67035,47.29621],[0.68362,47.29637],[0.68343,47.30089],[0.69006,47.30096],[0.68992,47.30547],[0.7362,47.30612],[0.73608,47.31061],[0.7559,47.31089],[0.75577,47.31539],[0.76238,47.31547],[0.76223,47.31999],[0.77549,47.32015],[0.77497,47.33882],[0.77458,47.35163],[0.76804,47.35159],[0.76759,47.36053],[0.77424,47.36062],[0.77335,47.39213],[0.76674,47.39202],[0.76644,47.40108],[0.77306,47.40111],[0.77289,47.41013],[0.76618,47.41002],[0.76603,47.4145],[0.75276,47.4143],[0.75298,47.40981],[0.74624,47.4097],[0.74594,47.42322],[0.73923,47.42315],[0.73887,47.43661],[0.73233,47.43652],[0.73219,47.44106],[0.7255,47.44098],[0.72542,47.44535],[0.73188,47.44548],[0.73185,47.45011],[0.73845,47.45023],[0.73831,47.45463],[0.74494,47.45474],[0.74432,47.4772],[0.73107,47.47697],[0.7309,47.48154],[0.71762,47.48126],[0.71779,47.47684],[0.69777,47.4765],[0.69805,47.47198],[0.69145,47.47189],[0.69173,47.46302],[0.6851,47.46293],[0.68494,47.46735],[0.67826,47.46733],[0.67798,47.47622],[0.67141,47.47616],[0.67104,47.4882],[0.65773,47.48797],[0.65782,47.48504],[0.65119,47.48483],[0.65147,47.47586],[0.64482,47.47572],[0.64493,47.47126],[0.6118,47.47075],[0.61188,47.46631],[0.60528,47.46612],[0.60542,47.46166],[0.59888,47.46155],[0.59902,47.45709],[0.57249,47.45669],[0.57218,47.46565],[0.54575,47.46526]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s) Plus 2008"},{id:"Tours-Orthophoto-2013",name:"Tours - Orthophotos 2013",type:"tms",template:"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",zoomExtent:[0,22],polygon:[[[0.77512,47.32983],[0.77427,47.35617],[0.77053,47.35611],[0.77024,47.36512],[0.77398,47.36517],[0.7728,47.40148],[0.7904,47.40147],[0.78988,47.4103],[0.79117,47.41047],[0.79108,47.41942],[0.79392,47.41942],[0.79319,47.43733],[0.79834,47.43742],[0.79808,47.45544],[0.80044,47.45541],[0.80138,47.46426],[0.80074,47.46899],[0.79396,47.47331],[0.78405,47.47323],[0.78387,47.47871],[0.77606,47.47859],[0.77585,47.48204],[0.77066,47.48219],[0.77044,47.4859],[0.76096,47.49092],[0.75718,47.49092],[0.73753,47.50336],[0.7259,47.50588],[0.71113,47.50576],[0.70418,47.50408],[0.69109,47.50038],[0.69045,47.49718],[0.67757,47.49683],[0.67757,47.49353],[0.66427,47.49301],[0.6635,47.48953],[0.65088,47.48958],[0.65133,47.48032],[0.64734,47.4803],[0.64747,47.47852],[0.64474,47.47846],[0.64479,47.47575],[0.64238,47.47578],[0.64225,47.47302],[0.63835,47.47294],[0.63792,47.47131],[0.60513,47.47079],[0.60513,47.46632],[0.59852,47.46603],[0.59878,47.46156],[0.592,47.46156],[0.59226,47.45976],[0.58084,47.45971],[0.58007,47.46145],[0.57234,47.46139],[0.57222,47.46512],[0.55874,47.46489],[0.5466,47.46052],[0.53269,47.45355],[0.52677,47.45315],[0.52677,47.45152],[0.52231,47.45123],[0.52256,47.44804],[0.51977,47.44776],[0.52007,47.44247],[0.4975,47.4416],[0.49716,47.44049],[0.49355,47.44015],[0.49355,47.43573],[0.47943,47.43575],[0.46171,47.42819],[0.45643,47.42088],[0.45489,47.41229],[0.45506,47.40218],[0.46149,47.40193],[0.46167,47.39641],[0.46879,47.39602],[0.47016,47.35173],[0.45677,47.3515],[0.45729,47.34254],[0.43085,47.34196],[0.43196,47.30602],[0.47154,47.3067],[0.47257,47.28004],[0.48527,47.28004],[0.48578,47.27084],[0.49935,47.27107],[0.49917,47.26245],[0.55273,47.26304],[0.55222,47.27201],[0.56561,47.27224],[0.56526,47.28156],[0.59118,47.28156],[0.59067,47.29099],[0.66912,47.29169],[0.6832,47.29564],[0.6832,47.30077],[0.69658,47.30123],[0.69641,47.3024],[0.71006,47.30245],[0.72293,47.30589],[0.72285,47.31043],[0.74165,47.31084],[0.75426,47.31392],[0.7625,47.31815],[0.76207,47.32013],[0.76619,47.32009],[0.76956,47.32207],[0.77233,47.32508],[0.77336,47.3267],[0.77512,47.32983]]],terms_url:"https://wiki.openstreetmap.org/wiki/Tours/Orthophoto",terms_text:"Orthophoto Tour(s)plus 2013"},{id:"trafikverket-baninfo",name:"Trafikverket Railway Network",type:"wms",template:"https://geo-baninfo.trafikverket.se/mapservice/wms.axd/BanInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Spar_Huvud_och_sidospar&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[7,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish railway network, including sidings",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat",name:"Trafikverket Road Network",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagtrafiknat,Funkvagklass,Farjeled&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[13,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB road network",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-extra",name:"Trafikverket Road Network extra",type:"wms",template:"https://geo-netinfo.trafikverket.se/mapservice/wms.axd/NetInfo?FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Vagnummer,Vaghinder,Rastplats,Rastficka,Hallplats,Farthinder,BroTunnel,ATK_Matplats&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[3,20],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB extra details: Highway reference, traffic calming, rest area, bus stop, bridge, tunnel, speed camera",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"trafikverket-vagnat-navn",name:"Trafikverket Street Names",type:"tms",template:"https://mapproxy.openstreetmap.se/tiles/1.0.0/nvdb_names/EPSG3857/{zoom}/{x}/{y}.png",zoomExtent:[15,19],polygon:[[[12.80182,55.19612],[14.22729,55.27286],[18.44604,56.69244],[19.74242,57.98481],[20.0061,59.5371],[19.08394,60.19308],[20.49499,63.2497],[24.25231,65.57437],[23.81835,67.92514],[23.23607,68.34655],[20.43456,69.17038],[18.08349,68.5644],[16.50145,67.88382],[14.43602,66.14275],[11.82128,63.30775],[12.20031,60.31063],[10.62377,58.5482],[12.64251,56.03062],[12.80182,55.19612]]],terms_url:"https://www.trafikverket.se",terms_text:"© Trafikverket, CC0",description:"Swedish NVDB street names",icon:"https://api.trafikinfo.trafikverket.se/img/apple-touch-icon-144-precomposed.png",overlay:true},{id:"US_Forest_Service_roads_overlay",name:"U.S. Forest Roads Overlay",type:"tms",template:"https://{switch:a,b,c,d}.tiles.mapbox.com/styles/v1/glassman/cjf4qjmps0tgv2qpahj977mvz/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1IjoiZ2xhc3NtYW4iLCJhIjoiRjk3dWdwYyJ9.Tg_fMJWxygeKBgVTrZHmGA",zoomExtent:[0,20],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]],description:"Highway: Green casing = unclassified. Brown casing = track. Surface: gravel = light brown fill, Asphalt = black, paved = gray, ground =white, concrete = blue, grass = green. Seasonal = white bars",icon:"https://osmlab.github.io/editor-layer-index/sources/north-america/us/USForestService-overlay.png",overlay:true},{id:"US_Forest_Service_roads",name:"U.S. Forest Service roads",type:"tms",template:"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png",zoomExtent:[0,19],polygon:[[[-124.76179,48.41301],[-124.60595,45.90245],[-124.99343,40.05576],[-122.53697,36.85661],[-119.97759,33.00641],[-117.67593,32.46302],[-114.86123,32.47999],[-111.00893,31.33601],[-108.19927,31.326],[-108.18711,31.77551],[-106.53072,31.78209],[-106.48421,31.74645],[-106.42932,31.75206],[-106.28689,31.56133],[-106.20525,31.4467],[-105.02053,30.5361],[-104.58819,29.69979],[-103.25189,28.89087],[-102.71736,29.39206],[-102.1514,29.74757],[-101.25529,29.48105],[-100.00624,28.00822],[-99.23511,26.4476],[-98.01091,25.9928],[-97.43502,25.8266],[-96.95553,25.98216],[-96.80617,27.79782],[-95.55633,28.58761],[-93.74053,29.47421],[-90.90285,28.85645],[-88.01567,28.99443],[-88.01625,30.00389],[-86.02775,30.00475],[-84.01879,28.99618],[-81.9972,25.98268],[-81.99666,25.01349],[-84.01656,25.01258],[-84.01601,24.00527],[-80.02,24.0071],[-79.89011,26.85507],[-80.02453,32.01613],[-75.41474,35.05319],[-74.02112,39.57279],[-72.00202,40.99125],[-69.87974,40.99205],[-69.84893,43.26199],[-66.94528,44.71049],[-67.75966,47.099],[-69.25051,47.51223],[-70.46149,46.21766],[-71.41227,45.25488],[-72.02225,45.00598],[-75.07988,44.98029],[-76.90231,43.80246],[-78.76239,43.62496],[-79.15798,43.44626],[-79.00601,42.80053],[-82.66248,41.68895],[-82.17616,43.58854],[-83.2814,46.13885],[-87.50645,48.01427],[-88.34922,48.29633],[-89.43531,47.98378],[-93.99811,49.00671],[-95.11054,49.412],[-96.01312,49.00605],[-123.32289,49.00429],[-123.22752,48.18499],[-124.76179,48.41301]],[[-160.57876,22.50629],[-160.57822,21.49846],[-158.74706,21.24398],[-157.50832,20.9958],[-155.99619,18.77902],[-154.62178,18.7587],[-154.68902,19.88057],[-156.29276,21.22259],[-157.50474,21.9985],[-159.00937,22.50702],[-160.57876,22.50629]],[[-167.15715,68.72197],[-164.8554,67.02551],[-168.0022,66.00175],[-169.00874,66.00155],[-169.00754,64.99877],[-172.51433,63.87673],[-173.8197,59.74014],[-162.50181,58.00058],[-160.0159,58.00124],[-160.01497,57.00003],[-160.50548,56.9999],[-165.80926,54.82485],[-178.0001,52.24465],[-177.9993,51.25543],[-171.46891,51.82153],[-162.40251,53.95666],[-159.00757,55.0025],[-158.01907,55.00278],[-151.99632,55.99919],[-151.50034,57.99879],[-151.50129,58.99198],[-138.516,58.99532],[-138.51505,57.99864],[-133.99482,54.00317],[-130.00444,54.00434],[-130.00708,57.00005],[-131.97588,56.99952],[-135.12299,59.7566],[-138.00718,59.9918],[-139.17159,60.41272],[-140.9874,61.01186],[-140.9684,69.95351],[-156.17689,71.56333],[-160.41363,70.73977],[-163.02183,69.97074],[-164.9717,68.99469],[-167.15715,68.72197]]]},{id:"Zuerich-zh_uebersichtsplan-tms",name:"Übersichtsplan Zürich",type:"tms",template:"https://mapproxy.osm.ch/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw",zoomExtent:[0,21],polygon:[[[8.45788,47.44582],[8.57392,47.44477],[8.57362,47.43124],[8.60266,47.43096],[8.60231,47.41746],[8.6318,47.41716],[8.6295,47.33628],[8.57162,47.33679],[8.57152,47.32292],[8.54236,47.3236],[8.54212,47.31013],[8.48418,47.31062],[8.48478,47.33762],[8.45582,47.33787],[8.45609,47.35135],[8.42713,47.35161],[8.42864,47.43259],[8.45745,47.43231],[8.45788,47.44582]]],terms_text:"Stadt Zürich Open Government Data",description:"This imagery is provided via a proxy operated by https://sosm.ch/"},{id:"UkraineKyiv2014DZK",name:"Ukraine - Kyiv 2014 (DZK)",type:"tms",template:"http://map.land.gov.ua/map/ortho_kiev/{zoom}/{x}/{-y}.jpg",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[30.30752,50.57184],[30.33155,50.57402],[30.37687,50.57925],[30.42288,50.58143],[30.4318,50.58579],[30.44416,50.58797],[30.45515,50.58754],[30.46545,50.58449],[30.46819,50.57751],[30.49085,50.57489],[30.51351,50.57489],[30.52519,50.57402],[30.55608,50.55221],[30.58424,50.53869],[30.5966,50.53781],[30.60896,50.5365],[30.64329,50.5352],[30.65496,50.53563],[30.65496,50.54305],[30.66045,50.54916],[30.66801,50.55439],[30.67762,50.55876],[30.68792,50.56137],[30.70783,50.55614],[30.71127,50.56356],[30.71127,50.57838],[30.72157,50.58231],[30.71882,50.58972],[30.72981,50.59103],[30.74011,50.58841],[30.76208,50.58536],[30.77306,50.58274],[30.78336,50.57795],[30.80259,50.57141],[30.81014,50.56617],[30.82182,50.55439],[30.82525,50.53956],[30.81701,50.53432],[30.79504,50.52909],[30.78474,50.52559],[30.76276,50.51992],[30.76208,50.5125],[30.75315,50.50769],[30.74354,50.50376],[30.73805,50.49721],[30.74629,50.49197],[30.75521,50.48847],[30.74835,50.48236],[30.75178,50.47537],[30.75315,50.46794],[30.74835,50.46138],[30.75178,50.45439],[30.78886,50.43646],[30.7971,50.43165],[30.80328,50.41765],[30.8225,50.40846],[30.82044,50.40102],[30.82319,50.39358],[30.81289,50.39095],[30.80122,50.39139],[30.78954,50.39314],[30.77787,50.3927],[30.77856,50.3857],[30.77169,50.38001],[30.76208,50.37519],[30.75109,50.37256],[30.73873,50.37256],[30.72775,50.37475],[30.71813,50.37957],[30.71539,50.36512],[30.71127,50.35855],[30.70577,50.35241],[30.69753,50.34716],[30.68586,50.34453],[30.65084,50.34058],[30.63848,50.34014],[30.62681,50.33795],[30.62887,50.3305],[30.64947,50.29279],[30.66663,50.28314],[30.67144,50.27656],[30.6632,50.27085],[30.65153,50.26997],[30.64535,50.27612],[30.63368,50.27787],[30.62132,50.27656],[30.61857,50.2691],[30.62956,50.25637],[30.6378,50.25154],[30.64535,50.23792],[30.64398,50.2309],[30.63917,50.22387],[30.62956,50.21992],[30.6069,50.2164],[30.59591,50.2186],[30.59042,50.23353],[30.5863,50.241],[30.57531,50.25505],[30.56501,50.25944],[30.5657,50.2669],[30.56432,50.29718],[30.56638,50.30463],[30.5657,50.31209],[30.55677,50.31691],[30.54441,50.31735],[30.52587,50.32699],[30.51489,50.3305],[30.50253,50.33182],[30.48055,50.33664],[30.47163,50.34146],[30.46957,50.34935],[30.47025,50.35679],[30.46201,50.36205],[30.4524,50.35679],[30.44004,50.35548],[30.43661,50.36512],[30.43111,50.37212],[30.43661,50.37826],[30.43455,50.3857],[30.40914,50.39883],[30.39678,50.40014],[30.3906,50.40671],[30.37069,50.41546],[30.36314,50.42159],[30.3597,50.42902],[30.3597,50.43646],[30.35696,50.44389],[30.3446,50.44477],[30.32056,50.44258],[30.29585,50.44477],[30.28349,50.44477],[30.27799,50.43864],[30.27525,50.43165],[30.26563,50.42771],[30.25396,50.42902],[30.24572,50.42377],[30.23542,50.42771],[30.2416,50.43427],[30.2416,50.44214],[30.23679,50.4487],[30.23885,50.45613],[30.24297,50.46313],[30.24915,50.46968],[30.25671,50.47493],[30.26083,50.48192],[30.26563,50.48847],[30.26907,50.49983],[30.26151,50.50595],[30.26357,50.51381],[30.26975,50.51992],[30.28898,50.52821],[30.29722,50.53345],[30.30271,50.54],[30.30203,50.54741],[30.30477,50.55483],[30.32743,50.55221],[30.33086,50.55919],[30.32262,50.56486],[30.31233,50.56835],[30.30752,50.57184]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"Ukraine-orto10000-2012",name:"Ukraine - Orthophotomaps 2012",type:"tms",template:"http://212.26.144.110/tile2/orto_10000/{zoom}/{x}/{-y}.jpg",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",zoomExtent:[0,16],polygon:[[[23.6193,51.65491],[24.09803,51.64047],[24.39723,51.89353],[25.19178,51.95913],[26.12263,51.92224],[26.49829,51.80933],[27.09005,51.77026],[27.62861,51.62603],[28.02422,51.59093],[28.28021,51.68172],[28.37662,51.5806],[28.82542,51.5682],[29.19111,51.64253],[29.41718,51.4399],[29.67316,51.51238],[29.82276,51.47512],[30.21837,51.50824],[30.54417,51.30709],[30.63726,51.38599],[30.51425,51.63634],[30.983,52.09005],[31.2822,52.07984],[31.48832,52.13497],[32.11,52.05531],[32.31279,52.11864],[32.43912,52.32434],[32.93114,52.28368],[33.29683,52.39337],[33.75561,52.35277],[34.35734,51.78055],[34.14457,51.76409],[34.05813,51.67965],[34.22103,51.47098],[34.25095,51.30085],[34.7197,51.19056],[35.11199,51.21139],[35.1818,51.08626],[35.38792,51.03402],[35.40787,50.62878],[35.62063,50.38563],[36.06944,50.4513],[36.21571,50.41106],[36.31212,50.28802],[36.4717,50.32624],[36.59138,50.2519],[37.46571,50.45977],[37.735,50.11353],[38.05747,49.9384],[38.19377,49.95765],[38.19045,50.07514],[38.35002,50.08154],[38.41651,49.98972],[38.73899,49.97476],[39.00827,49.83344],[39.14457,49.89987],[39.27755,49.78195],[39.54018,49.74544],[39.79949,49.58406],[40.18845,49.6013],[40.0588,49.50424],[40.20508,49.24666],[39.93247,49.06185],[39.71638,49.01608],[40.08872,48.85448],[39.79617,48.78443],[39.69311,48.65283],[39.86266,48.5693],[39.99231,48.31348],[39.83274,47.92287],[39.74297,47.83144],[39.57675,47.81135],[38.86532,47.85153],[38.77555,47.68618],[38.38327,47.60106],[38.30348,47.52704],[38.30016,47.23891],[38.13393,47.05577],[37.5455,47.05124],[37.31279,46.87654],[37.20973,46.92651],[36.96039,46.83107],[36.7443,46.61685],[36.72436,46.7719],[36.4451,46.72407],[36.10601,46.4728],[36.20574,46.66022],[35.92316,46.64424],[35.43114,46.39948],[35.10202,45.97138],[35.0455,45.75145],[35.47436,45.33],[35.86,45.53297],[35.9963,45.43274],[36.11598,45.51899],[36.66452,45.4514],[36.65454,45.34168],[36.50494,45.31363],[36.47502,45.24111],[36.48832,45.04884],[35.81013,44.98539],[35.5076,45.11222],[35.42782,44.93364],[35.12196,44.76394],[34.67649,44.75686],[33.985,44.37078],[33.68912,44.38504],[33.38327,44.50608],[33.35002,44.589],[33.55282,44.93128],[33.42981,45.1263],[33.19377,45.14271],[32.83141,45.33935],[32.60534,45.30896],[32.44577,45.3557],[32.50893,45.47005],[32.87795,45.68181],[33.57941,45.90665],[33.58938,46.02681],[33.25694,46.07065],[33.02422,45.97138],[31.61133,46.19506],[31.27555,46.61457],[30.87662,46.56887],[30.43446,45.98756],[29.69643,45.55159],[29.79284,45.46306],[29.73965,45.15913],[29.47369,45.41407],[29.18114,45.38373],[28.74896,45.22004],[28.56611,45.23409],[28.29018,45.33],[28.23367,45.49103],[28.31678,45.56789],[28.483,45.54228],[28.47303,45.73753],[28.95175,46.03143],[29.02489,46.18125],[28.9318,46.49569],[29.18779,46.57116],[29.59337,46.45448],[29.81944,46.46593],[29.95574,46.68759],[29.8959,46.8197],[29.56013,46.96963],[29.54683,47.29982],[29.14789,47.50234],[29.23101,47.77562],[29.17117,47.934],[28.86864,47.99411],[28.63593,48.16513],[28.44311,48.06525],[28.36332,48.17178],[28.25694,48.15404],[27.735,48.43494],[27.55547,48.45258],[26.92383,48.34884],[26.36532,48.17178],[26.1193,47.97408],[25.3846,47.91618],[24.91585,47.70408],[24.52024,47.94291],[24.18446,47.90058],[23.58274,48.00523],[23.43646,47.96963],[23.15388,48.10522],[23.07077,47.98743],[22.858,47.9585],[22.76824,48.09856],[22.58539,48.103],[22.51558,48.2161],[22.11332,48.4217],[22.49896,49.06621],[22.58872,49.11193],[22.87795,49.04006],[22.7217,49.18151],[22.71837,49.64652],[23.24364,50.105],[24.04484,50.49785],[24.05813,50.68779],[23.9451,50.81399],[24.10135,50.85388],[23.62928,51.29462],[23.6193,51.65491]]],description:"Works only from within Ukraine or with an Ukrainian proxy server."},{id:"uniao_dos_palmares",name:"União dos Palmares AL",type:"wms",template:"http://geoserver.dados.al.gov.br:8080/geoserver/Alagoas/ows?LAYERS=Uniao%20dos%20Palmares&SERVICE=WMS&FORMAT=image/png&TRANSPARENT=TRUE&VERSION=1.1.0&SERVICE=WMS&REQUEST=GetMap&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[-35.97725,-9.20752],[-35.9772,-9.19398],[-35.97694,-9.19053],[-35.97678,-9.18607],[-35.97702,-9.18208],[-35.97704,-9.17968],[-35.97682,-9.17734],[-35.97664,-9.17517],[-35.97701,-9.17518],[-35.97696,-9.1707],[-35.97674,-9.17066],[-35.97661,-9.16645],[-35.97618,-9.16222],[-35.9761,-9.16026],[-35.97661,-9.16026],[-35.97672,-9.14608],[-35.97654,-9.14122],[-35.97666,-9.1332],[-35.97653,-9.12184],[-35.97648,-9.11748],[-35.98618,-9.11755],[-35.98947,-9.11733],[-36.00561,-9.11733],[-36.01859,-9.11736],[-36.04601,-9.11722],[-36.06734,-9.11698],[-36.06756,-9.16134],[-36.06771,-9.16405],[-36.06745,-9.16408],[-36.06756,-9.16657],[-36.06777,-9.16654],[-36.06798,-9.20701],[-36.0498,-9.20711],[-36.04671,-9.20698],[-36.02941,-9.20709],[-36.01355,-9.20718],[-35.99318,-9.20733],[-35.97725,-9.20752]]],terms_url:"http://www.seplag.al.gov.br",terms_text:"Secretaria de Estado do Planejamento, Gestão e Patrimônio"},{id:"URBIS2009",name:"URBIS 2009 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2009&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2009-01-01T00:00:00.000Z",startDate:"2009-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2012",name:"URBIS 2012 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2012&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2012-01-01T00:00:00.000Z",startDate:"2012-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2014",name:"URBIS 2014 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2014&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2014-01-01T00:00:00.000Z",startDate:"2014-01-01T00:00:00.000Z",polygon:[[[4.4001,50.76373],[4.43093,50.77254],[4.43586,50.77237],[4.46549,50.78373],[4.48189,50.78835],[4.48269,50.79849],[4.46363,50.80686],[4.46407,50.81546],[4.48204,50.81699],[4.48103,50.82343],[4.47465,50.83505],[4.47403,50.84587],[4.46712,50.85447],[4.45257,50.85797],[4.45017,50.86151],[4.42968,50.86764],[4.43423,50.87384],[4.44147,50.87513],[4.44381,50.88004],[4.43534,50.88977],[4.43968,50.89475],[4.43287,50.90363],[4.42096,50.90917],[4.42023,50.91387],[4.38315,50.91381],[4.37879,50.90637],[4.37334,50.90289],[4.36241,50.906],[4.34824,50.90611],[4.33955,50.90685],[4.32771,50.90515],[4.31471,50.89842],[4.30413,50.89498],[4.2871,50.89192],[4.28725,50.88532],[4.29293,50.88265],[4.27948,50.8736],[4.27347,50.86822],[4.27364,50.85871],[4.27688,50.85575],[4.27644,50.84376],[4.26664,50.8405],[4.25488,50.83992],[4.24755,50.83453],[4.24799,50.82866],[4.24357,50.82599],[4.24376,50.81356],[4.25233,50.81268],[4.25649,50.80711],[4.27025,50.8073],[4.27222,50.80537],[4.28414,50.80241],[4.28885,50.80434],[4.29544,50.8043],[4.30046,50.79506],[4.31076,50.79299],[4.31444,50.78372],[4.32628,50.77221],[4.34194,50.76891],[4.34474,50.77029],[4.37535,50.76577],[4.3755,50.76381],[4.4001,50.76373]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBIS2015",name:"URBIS 2015 aerial imagery",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2015&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2015-01-01T00:00:00.000Z",startDate:"2015-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2016",name:"UrbIS-Ortho 2016",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2016&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-01-01T00:00:00.000Z",startDate:"2016-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2017",name:"UrbIS-Ortho 2017",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2017&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2017-01-01T00:00:00.000Z",startDate:"2017-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2018",name:"UrbIS-Ortho 2018",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2018&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbISOrtho2019",name:"UrbIS-Ortho 2019",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=Urbis:Ortho2019&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",polygon:[[[4.37973,50.76382],[4.38917,50.76377],[4.43028,50.77517],[4.435,50.775],[4.46427,50.78645],[4.4817,50.79134],[4.48238,50.79617],[4.45921,50.80626],[4.45947,50.81661],[4.47972,50.82036],[4.46959,50.83537],[4.46899,50.84573],[4.46238,50.85396],[4.44968,50.85591],[4.44599,50.85992],[4.4253,50.86615],[4.43183,50.87628],[4.44007,50.87845],[4.43106,50.89014],[4.43595,50.89502],[4.4296,50.90103],[4.41655,50.90757],[4.41543,50.91342],[4.39578,50.91407],[4.38462,50.91093],[4.38119,50.90319],[4.3726,50.90032],[4.36213,50.9033],[4.34857,50.90341],[4.34025,50.90411],[4.32892,50.90249],[4.31647,50.89605],[4.30634,50.89274],[4.29004,50.88982],[4.29149,50.88495],[4.29553,50.88262],[4.29561,50.88094],[4.28274,50.87227],[4.27699,50.86713],[4.27802,50.85911],[4.28042,50.85721],[4.28094,50.84215],[4.27193,50.84036],[4.25467,50.83695],[4.25107,50.83288],[4.25227,50.82697],[4.24343,50.82182],[4.24403,50.81548],[4.25519,50.8151],[4.25802,50.80935],[4.27218,50.81011],[4.27579,50.80696],[4.2854,50.80506],[4.28901,50.80691],[4.29802,50.80593],[4.30282,50.79709],[4.31458,50.79454],[4.31621,50.78624],[4.32952,50.77381],[4.34205,50.77164],[4.34522,50.77337],[4.37853,50.76811],[4.37973,50.76382]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",best:true,icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmFR",name:"UrbisAdm FR",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisFR&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"UrbisAdmNL",name:"UrbisAdm NL",type:"wms",template:"https://geoservices-urbis.irisnet.be/geoserver/ows?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png&TRANSPARENT=true&LAYERS=urbisNL&WIDTH={width}&HEIGHT={height}&CRS={proj}&STYLES=&BBOX={bbox}",projection:"EPSG:3857",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISfr2013",name:"URBISfr numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisFR/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"URBISnl2013",name:"URBISnl numerical imagery (2013)",type:"wms",template:"https://gis.irisnet.be/arcgis/rest/services/basemap/urbisNL/MapServer/export?f=image&format=png8&transparent=False&SRS={proj}&bboxSR=3857&imageSR=3857&bbox={bbox}&size={width},{height}",projection:"EPSG:3857",endDate:"2013-01-01T00:00:00.000Z",startDate:"2013-01-01T00:00:00.000Z",polygon:[[[4.4347,50.77647],[4.45427,50.78367],[4.4635,50.78798],[4.48273,50.79313],[4.44715,50.80821],[4.44831,50.81147],[4.45788,50.81646],[4.45466,50.81838],[4.4768,50.82036],[4.46552,50.83549],[4.46835,50.83744],[4.46037,50.85218],[4.44578,50.85522],[4.44466,50.85809],[4.43891,50.86042],[4.43719,50.85868],[4.42612,50.86296],[4.42037,50.86789],[4.42973,50.87764],[4.43736,50.87867],[4.42681,50.89026],[4.43307,50.89464],[4.42277,50.90298],[4.41187,50.90753],[4.41376,50.91159],[4.4032,50.91381],[4.38758,50.9098],[4.37771,50.89713],[4.36303,50.90119],[4.34183,50.9026],[4.33093,50.90119],[4.31651,50.89389],[4.3057,50.8908],[4.29334,50.88847],[4.29428,50.88658],[4.29737,50.8849],[4.29918,50.87975],[4.28587,50.87201],[4.27858,50.86556],[4.28064,50.85944],[4.28999,50.85625],[4.28304,50.85354],[4.28793,50.84833],[4.28291,50.8479],[4.28158,50.83785],[4.27399,50.8392],[4.27184,50.8363],[4.25793,50.83571],[4.2545,50.83289],[4.25523,50.82839],[4.2509,50.82419],[4.24382,50.81928],[4.2566,50.81743],[4.25995,50.81106],[4.27274,50.81212],[4.2757,50.81087],[4.27708,50.80835],[4.28454,50.80732],[4.29274,50.80911],[4.2951,50.80881],[4.30162,50.81299],[4.3066,50.81239],[4.30205,50.80445],[4.30501,50.7987],[4.31527,50.79661],[4.31845,50.79403],[4.3193,50.78722],[4.32201,50.7832],[4.33089,50.7758],[4.3408,50.77354],[4.34677,50.77574],[4.3551,50.77354],[4.36527,50.77284],[4.38243,50.76917],[4.38303,50.76375],[4.43312,50.77802],[4.4347,50.77647]]],terms_text:"Realized by means of Brussels UrbIS®© - Distribution & Copyright CIRB",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/be/URBIS2015aerialimagery.png"},{id:"USGS-Imagery",name:"USGS Imagery",type:"tms",template:"https://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"}];
24786
24787         var presets = {aerialway:{fields:["name","aerialway"],moreFields:["layer"],geometry:["point","vertex","line"],tags:{aerialway:"*"},searchable:false,name:"Aerialway"},aeroway:{icon:"maki-airport",fields:["aeroway"],geometry:["point","vertex","line","area"],tags:{aeroway:"*"},searchable:false,name:"Aeroway"},amenity:{fields:["amenity"],geometry:["point","vertex","line","area"],tags:{amenity:"*"},searchable:false,name:"Amenity"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours","fee","charge_fee"],moreFields:["address","email","fax","opening_hours","payment_multi","phone","website"],geometry:["point","vertex","line","area"],tags:{attraction:"*"},searchable:false,name:"Attraction"},boundary:{fields:["boundary"],geometry:["line"],tags:{boundary:"*"},searchable:false,name:"Boundary"},building_point:{icon:"maki-home",fields:["{building}"],moreFields:["{building}"],geometry:["point"],tags:{building:"*"},matchScore:0.6,searchable:false,name:"Building"},embankment:{geometry:["line"],tags:{embankment:"yes"},name:"Embankment",matchScore:0.2,searchable:false},emergency:{fields:["emergency_combo"],geometry:["point","vertex","area"],tags:{emergency:"*"},searchable:false,name:"Emergency Feature"},ford_line:{geometry:["line"],tags:{ford:"*"},name:"Ford",searchable:false},highway:{fields:["name","highway"],geometry:["point","vertex","line","area"],tags:{highway:"*"},searchable:false,name:"Highway"},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","playground/theme","min_age","max_age","wheelchair","blind","height"],moreFields:["access_simple","colour","ref"],geometry:["point","vertex","line","area"],tags:{playground:"*"},searchable:false,name:"Playground Equipment"},power:{geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power"},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/spaceport":{icon:"fas-space-shuttle",geometry:["area","point"],fields:["name","operator","access_simple","website","wikidata"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone"],terms:["cosmodrome","rocket launch center","rocket launch complex","rocket launch site","rocket range","space port"],tags:{aeroway:"spaceport"},name:"Spaceport"},"aeroway/taxiway":{icon:"fas-plane",geometry:["line"],fields:["ref_taxiway","surface"],tags:{aeroway:"taxiway"},name:"Taxiway"},"aeroway/terminal":{icon:"maki-airport",geometry:["point","area"],terms:["airport","aerodrome"],fields:["name","operator","building_area"],moreFields:["smoking","wheelchair"],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:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"embassy"},searchable:false,name:"Embassy"},"amenity/ferry_terminal":{icon:"maki-ferry",fields:["name","network","operator","address","building_area"],geometry:["point","vertex","area"],tags:{amenity:"ferry_terminal"},matchScore:0.95,name:"Ferry Station / Terminal",searchable:false,replacement:"public_transport/station_ferry"},"amenity/nursing_home":{icon:"maki-wheelchair",fields:["name","operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],geometry:["point","area"],tags:{amenity:"nursing_home"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home",searchable:false},"amenity/recycling":{icon:"maki-recycling",fields:["recycling_type","recycling_accepts","collection_times"],geometry:["point","area"],tags:{amenity:"recycling"},name:"Recycling",searchable:false},"amenity/register_office":{icon:"maki-town-hall",fields:["name","address","building_area","opening_hours","operator"],geometry:["point","area"],tags:{amenity:"register_office"},reference:{key:"government",value:"register_office"},name:"Register Office",searchable:false},"amenity/scrapyard":{icon:"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:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["boarding","cat","cattery","dog","horse","kennel","kitten","pet","pet boarding","pet care","pet hotel","puppy","reptile"],tags:{amenity:"animal_boarding"},name:"Animal Boarding Facility"},"amenity/animal_breeding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_breeding"],moreFields:["email","fax","level","phone","website","wheelchair"],geometry:["point","area"],terms:["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],tags:{amenity:"animal_breeding"},name:"Animal Breeding Facility"},"amenity/animal_shelter":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","animal_shelter"],moreFields:["email","fax","level","phone","website","wheelchair"],geometry:["point","area"],terms:["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca","pound"],tags:{amenity:"animal_shelter"},name:"Animal Shelter"},"amenity/arts_centre":{icon:"maki-theatre",fields:["name","address","building_area","opening_hours","website"],moreFields:["charge_fee","email","fax","fee","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"arts_centre"},name:"Arts Center"},"amenity/atm":{icon:"maki-bank",fields:["operator","network","cash_in","currency_multi","drive_through"],moreFields:["brand","covered","height","indoor","level","lit","manufacturer","name","opening_hours","wheelchair"],geometry:["point","vertex"],terms:["money","cash","machine"],tags:{amenity:"atm"},name:"ATM"},"amenity/bank":{icon:"maki-bank",fields:["name","operator","address","building_area","atm","drive_through"],moreFields:["air_conditioning","currency_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","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","min_age","brewery"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","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","level","lit","manufacturer","operator"],geometry:["point","vertex","line"],terms:["seat","chair"],tags:{amenity:"bench"},name:"Bench"},"amenity/bicycle_parking":{icon:"maki-bicycle",fields:["bicycle_parking","capacity","operator","operator/type","covered","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["colour","indoor","level","lit"],geometry:["point","vertex","area"],terms:["bike","cycle parking","cycling"],tags:{amenity:"bicycle_parking"},name:"Bicycle Parking"},"amenity/bicycle_parking/building":{icon:"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:["Bike Parking Station","cycle parking","cycling","Multi-Storey Bicycle Park","Multi-Storey Bike Park"],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:["cycle locker","cycling","Bike Lockers"],name:"Bicycle Lockers"},"amenity/bicycle_parking/shed":{icon:"maki-bicycle",fields:["{amenity/bicycle_parking}","building_area"],geometry:["point","vertex","area"],tags:{amenity:"bicycle_parking",bicycle_parking:"shed"},reference:{key:"bicycle_parking"},terms:["cycle shed","cycling","Bike Shed"],name:"Bicycle Shed"},"amenity/bicycle_rental":{icon:"maki-bicycle",fields:["capacity","network","operator","operator/type","fee","payment_multi_fee"],moreFields:["address","covered","email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","vertex","area"],terms:["bike","bicycle","bikeshare","bike share","bicycle share","cycle dock","cycle hub","cycleshare","cycling"],tags:{amenity:"bicycle_rental"},name:"Bicycle Rental"},"amenity/bicycle_repair_station":{icon:"maki-bicycle",fields:["operator","brand","opening_hours","fee","payment_multi_fee","charge_fee","service/bicycle"],moreFields:["colour","covered","indoor","level","manufacturer"],geometry:["point","vertex"],terms:["bike chain","bike multitool","bike repair","bike tools","cycle pump","cycle repair","cycling"],tags:{amenity:"bicycle_repair_station"},name:"Bicycle Repair Tool Stand"},"amenity/biergarten":{icon:"fas-beer",fields:["name","address","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","email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"boat_rental"},name:"Boat Rental"},"amenity/bureau_de_change":{icon:"temaki-money_hand",fields:["name","operator","payment_multi","currency_multi","address","building_area"],moreFields:["email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:["bureau de change","money changer"],tags:{amenity:"bureau_de_change"},name:"Currency Exchange"},"amenity/cafe":{icon:"maki-cafe",fields:["name","cuisine","address","building_area","outdoor_seating","internet_access","internet_access/fee"],moreFields:["air_conditioning","bar","capacity","delivery","diet_multi","email","fax","internet_access/ssid","level","min_age","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:["email","fax","phone","website","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","email","fax","phone","website","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:["email","fax","lit","phone","website","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:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"car_wash"},name:"Car Wash"},"amenity/casino":{icon:"maki-casino",fields:["name","operator","address","building_area","opening_hours","smoking"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","min_age","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","level","manufacturer"],geometry:["point"],tags:{amenity:"charging_station"},terms:["EV","Electric Vehicle","Supercharger"],name:"Charging Station"},"amenity/childcare":{icon:"fas-child",fields:["name","operator","operator/type","address","building_area","opening_hours"],moreFields:["email","fax","level","max_age","min_age","payment_multi","phone","website","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","level","min_age","phone","website","wheelchair"],geometry:["point","area"],terms:["drive-in","film","flick","movie","theater","picture","show","screen"],tags:{amenity:"cinema"},name:"Cinema"},"amenity/clinic":{icon:"maki-doctor",fields:["name","operator","operator/type","healthcare/speciality","address","building_area","opening_hours"],moreFields:["air_conditioning","email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medical","urgentcare"],tags:{amenity:"clinic"},addTags:{amenity:"clinic",healthcare:"clinic"},reference:{key:"amenity",value:"clinic"},name:"Clinic"},"amenity/clinic/abortion":{icon:"maki-hospital",geometry:["point","area"],terms:[],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"abortion"},reference:{key:"amenity",value:"clinic"},name:"Abortion Clinic"},"amenity/clinic/fertility":{icon:"maki-hospital",geometry:["point","area"],terms:["egg","fertility","reproductive","sperm","ovulation"],tags:{amenity:"clinic",healthcare:"clinic","healthcare:speciality":"fertility"},reference:{key:"amenity",value:"clinic"},name:"Fertility Clinic"},"amenity/clock":{icon:"temaki-clock",fields:["name","support","display","visibility","date","faces"],moreFields:["covered","height","indoor","level","lit","manufacturer"],geometry:["point","vertex"],terms:["time"],tags:{amenity:"clock"},name:"Clock"},"amenity/clock/sundial":{icon:"temaki-clock",fields:["name","support","visibility","inscription"],moreFields:[],geometry:["point","vertex"],terms:["gnomon","shadow"],tags:{amenity:"clock",display:"sundial"},reference:{key:"display",value:"sundial"},name:"Sundial"},"amenity/college":{icon:"maki-college",fields:["name","operator","operator/type","address","website","internet_access","internet_access/fee"],moreFields:["denomination","email","fax","internet_access/ssid","phone","religion","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:"fas-tachometer-alt",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","covered","lit"],moreFields:["brand","manufacturer"],geometry:["point","area"],tags:{amenity:"compressed_air"},name:"Compressed Air"},"amenity/conference_centre":{icon:"fas-user-tie",fields:["name","operator","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","level","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"courthouse"},name:"Courthouse"},"amenity/crematorium":{icon:"maki-cemetery",fields:["name","website","phone","opening_hours","wheelchair"],moreFields:["address","email","fax","level","phone","website","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:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["tooth","teeth"],tags:{amenity:"dentist"},addTags:{amenity:"dentist",healthcare:"dentist"},reference:{key:"amenity",value:"dentist"},name:"Dentist"},"amenity/dive_centre":{icon:"temaki-scuba_diving",fields:["name","operator","address","building_area","opening_hours","scuba_diving"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["diving","scuba"],tags:{amenity:"dive_centre"},name:"Dive Center"},"amenity/doctors":{icon:"maki-doctor",fields:["name","operator","healthcare/speciality","address","building_area","opening_hours"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["medic*","physician"],tags:{amenity:"doctors"},addTags:{amenity:"doctors",healthcare:"doctor"},reference:{key:"amenity",value:"doctors"},name:"Doctor"},"amenity/dojo":{icon:"maki-pitch",fields:["name","sport","address","building_area","opening_hours"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["martial arts","dojang"],tags:{amenity:"dojo"},name:"Dojo / Martial Arts Academy"},"amenity/dressing_room":{icon:"maki-clothing-store",fields:["operator","access_simple","gender","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","payment_multi_fee","ref"],geometry:["point","area"],terms:["changeroom","dressing room","fitting room","locker room"],tags:{amenity:"dressing_room"},name:"Changing Room"},"amenity/drinking_water":{icon:"maki-drinking-water",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","wheelchair"],moreFields:["covered","indoor","level","lit"],geometry:["point"],tags:{amenity:"drinking_water"},terms:["potable water source","water fountain","drinking fountain","bubbler","water tap"],name:"Drinking Water"},"amenity/driving_school":{icon:"maki-car",fields:["name","operator","operator/type","address","building_area","opening_hours"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"driving_school"},name:"Driving School"},"amenity/events_venue":{icon:"fas-users",fields:["name","operator","building_area","address","website","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","level","min_age","phone","smoking","wheelchair"],geometry:["point","area"],tags:{amenity:"events_venue"},terms:["banquet hall","baptism","Bar Mitzvah","Bat Mitzvah","birthdays","celebrations","conferences","confirmation","meetings","parties","party","quinceañera","reunions","weddings"],name:"Events Venue"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","drive_through"],moreFields:["air_conditioning","capacity","delivery","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","outdoor_seating","payment_multi","phone","smoking","takeaway","website","wheelchair"],geometry:["point","area"],tags:{amenity:"fast_food"},terms:["restaurant","takeaway"],name:"Fast Food"},"amenity/fast_food/ice_cream":{icon:"fas-ice-cream",geometry:["point","area"],tags:{amenity:"fast_food",cuisine:"ice_cream"},reference:{key:"cuisine",value:"ice_cream"},name:"Ice Cream Fast Food",searchable:false},"amenity/fast_food/burger":{icon:"maki-fast-food",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"burger"},reference:{key:"cuisine",value:"burger"},name:"Burger Fast Food"},"amenity/fast_food/chicken":{icon:"fas-drumstick-bite",geometry:["point","area"],terms:["breakfast","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"chicken"},reference:{key:"cuisine",value:"chicken"},name:"Chicken Fast Food"},"amenity/fast_food/donut":{icon:"temaki-donut",geometry:["point","area"],terms:["breakfast","brunch","cafe","canteen","coffee","dine","diner","donut","doughnut","dining","eat","lunch","table"],tags:{amenity:"fast_food",cuisine:"donut"},reference:{key:"cuisine",value:"donut"},name:"Donut Fast Food"},"amenity/fast_food/fish_and_chips":{icon:"fas-fish",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table","french fries"],tags:{amenity:"fast_food",cuisine:"fish_and_chips"},reference:{key:"cuisine",value:"fish_and_chips"},name:"Fish & Chips Fast Food"},"amenity/fast_food/hot_dog":{icon:"fas-hotdog",geometry:["point","area"],terms:["ballpark","frankfurter","frank","hotdog stand","sandwich","sausage","wiener"],tags:{amenity:"fast_food",cuisine:"hot_dog"},reference:{key:"cuisine",value:"hot_dog"},name:"Hot Dog Fast Food"},"amenity/fast_food/kebab":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"kebab"},reference:{key:"cuisine",value:"kebab"},name:"Kebab Fast Food"},"amenity/fast_food/mexican":{icon:"fas-pepper-hot",geometry:["point","area"],terms:["breakfast","dine","dining","dinner","drive-in","eat","grill","lunch","table","tacos","burritos","enchiladas","fajitas","nachos","tortillas","salsa","tamales","quesadillas"],tags:{amenity:"fast_food",cuisine:"mexican"},reference:{key:"cuisine",value:"mexican"},name:"Mexican Fast Food"},"amenity/fast_food/pizza":{icon:"maki-restaurant-pizza",geometry:["point","area"],terms:["dine","dining","dinner","drive-in","eat","lunch","table","deep dish","thin crust","slice"],tags:{amenity:"fast_food",cuisine:"pizza"},reference:{key:"cuisine",value:"pizza"},name:"Pizza Fast Food"},"amenity/fast_food/sandwich":{icon:"temaki-sandwich",geometry:["point","area"],terms:["breakfast","cafe","café","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"fast_food",cuisine:"sandwich"},reference:{key:"cuisine",value:"sandwich"},name:"Sandwich Fast Food"},"amenity/fire_station":{icon:"maki-fire-station",fields:["name","operator","address","building_area"],moreFields:["email","fax","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:["capacity","diet_multi","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","outdoor_seating","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["fast food","restaurant","food"],tags:{amenity:"food_court"},name:"Food Court"},"amenity/fountain":{icon:"temaki-fountain",fields:["name","operator","height","lit"],moreFields:["covered","indoor","level","manufacturer"],geometry:["point","area"],tags:{amenity:"fountain"},name:"Fountain"},"amenity/fuel":{icon:"maki-fuel",fields:["name","brand","operator","address","fuel_multi","self_service"],moreFields:["building","email","fax","opening_hours","payment_multi","phone","website","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:["email","fax","phone","website"],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:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","website","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","lockable"],geometry:["point","vertex","area"],terms:["game","gun","lookout","rifle","shoot*","wild","watch"],tags:{amenity:"hunting_stand"},name:"Hunting Stand"},"amenity/ice_cream":{icon:"fas-ice-cream",fields:["name","address","building_area","opening_hours","outdoor_seating"],moreFields:["delivery","diet_multi","drive_through","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","takeaway","website","wheelchair"],geometry:["point","area"],terms:["gelato","sorbet","sherbet","frozen","yogurt"],tags:{amenity:"ice_cream"},name:"Ice Cream Shop"},"amenity/internet_cafe":{icon:"temaki-antenna",fields:["name","operator","operator/type","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["air_conditioning","email","fax","level","min_age","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","level","min_age","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:"temaki-school",fields:["name","operator","address","phone","preschool"],moreFields:["email","fax","level","max_age","min_age","opening_hours","payment_multi","website","wheelchair"],geometry:["point","area"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool/Kindergarten Grounds"},"amenity/language_school":{icon:"temaki-school",fields:["name","operator","operator/type","address","building_area","opening_hours","language_multi"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["esl"],tags:{amenity:"language_school"},name:"Language School"},"amenity/letter_box":{icon:"temaki-letter_box",fields:["post","access_simple","collection_times","height"],moreFields:["covered","indoor","level","lit","lockable","manufacturer","material","operator","wheelchair"],geometry:["point","vertex"],tags:{amenity:"letter_box"},terms:["curbside delivery box","home delivery box","direct-to-door delivery box","letter hole","letter plate","letter slot","letterbox","letterhole","letterplate","letterslot","mail box","mail hole","mail slot","mailbox","mailhole","mailslot","through-door delivery box"],name:"Letter Box"},"amenity/library":{icon:"maki-library",fields:["name","operator","operator/type","building_area","address","ref/isil","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["access_simple","air_conditioning","email","fax","level","opening_hours","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["book"],tags:{amenity:"library"},name:"Library"},"amenity/loading_dock":{icon:"fas-truck-loading",fields:["ref","operator","access_simple","door","width","height"],moreFields:["address","colour","level","lit","wheelchair"],geometry:["vertex"],terms:["door","loading bay","shipping","unloading","warehouse"],tags:{amenity:"loading_dock"},name:"Loading Dock"},"amenity/love_hotel":{icon:"maki-heart",fields:["name","operator","address","building_area","rooms","internet_access","internet_access/fee","internet_access/ssid"],moreFields:["email","fax","min_age","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],tags:{amenity:"love_hotel"},name:"Love Hotel"},"amenity/marketplace":{icon:"maki-shop",fields:["name","operator","address","building","opening_hours"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"marketplace"},name:"Marketplace"},"amenity/monastery":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area"],moreFields:["email","fax","phone","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","monastery","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"monastery"},name:"Monastery Grounds"},"amenity/money_transfer":{icon:"temaki-money_hand",fields:["name","brand","address","building_area","payment_multi","currency_multi"],moreFields:["email","fax","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:["money order","check","bill","currency","finance","wire transfer","cable","person to person","cash to cash","exchange"],tags:{amenity:"money_transfer"},name:"Money Transfer Station"},"amenity/motorcycle_parking":{icon:"fas-motorcycle",fields:["capacity","operator","covered","access_simple"],geometry:["point","vertex","area"],tags:{amenity:"motorcycle_parking"},name:"Motorcycle Parking"},"amenity/music_school":{icon:"fas-music",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["school of music"],tags:{amenity:"music_school"},name:"Music School"},"amenity/nightclub":{icon:"maki-bar",fields:["name","operator","address","building_area","opening_hours","min_age","smoking"],moreFields:["air_conditioning","email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"nightclub"},terms:["disco*","night club","dancing","dance club"],name:"Nightclub"},"amenity/nightclub/lgbtq":{icon:"maki-bar",geometry:["point","area"],tags:{amenity:"nightclub",lgbtq:"primary"},terms:["gay nightclub","lesbian nightclub","lgbtq nightclub","lgbt nightclub","lgb nightclub"],name:"LGBTQ+ Nightclub"},"amenity/parking_entrance":{icon:"maki-entrance-alt1",fields:["ref","access_simple","address","level"],geometry:["vertex"],tags:{amenity:"parking_entrance"},name:"Parking Garage Entrance/Exit"},"amenity/parking_space":{fields:["capacity"],geometry:["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}","height","levels"],geometry:["area"],tags:{amenity:"parking",parking:"multi-storey"},addTags:{building:"parking",amenity:"parking",parking:"multi-storey"},reference:{key:"parking",value:"multi-storey"},terms:["car","indoor parking","multistorey car park","parkade","parking building","parking deck","parking garage","parking ramp","parking structure"],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:"temaki-money_hand",fields:["name","brand","address","building_area","opening_hours","payment_multi"],moreFields:["currency_multi","email","fax","level","phone","website","wheelchair"],geometry:["point","area"],terms:["check","tax pay","bill pay","currency","finance","cash","money"],tags:{amenity:"payment_centre"},name:"Payment Center"},"amenity/payment_terminal":{icon:"far-credit-card",fields:["name","brand","address","opening_hours","payment_multi"],moreFields:["covered","currency_multi","indoor","level","wheelchair"],geometry:["point"],terms:["interactive kiosk","ekiosk","atm","bill pay","tax pay","phone pay","finance","cash","money transfer","card"],tags:{amenity:"payment_terminal"},name:"Payment Terminal"},"amenity/pharmacy":{icon:"maki-pharmacy",fields:["name","operator","address","building_area","drive_through","dispensing"],moreFields:["email","fax","level","opening_hours","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{amenity:"pharmacy"},addTags:{amenity:"pharmacy",healthcare:"pharmacy"},reference:{key:"amenity",value:"pharmacy"},terms:["apothecary","drug store","drugstore","med*","prescription"],name:"Pharmacy Counter"},"amenity/photo_booth":{icon:"fas-person-booth",fields:["name","operator","payment_multi","wheelchair"],moreFields:["brand","indoor","level"],geometry:["point","area"],terms:["photobooth","photo","booth","kiosk","camera"],tags:{amenity:"photo_booth"},name:"Photo Booth"},"amenity/place_of_worship":{icon:"maki-place-of-worship",fields:["name","religion","denomination","address","building_area","service_times"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/ssid","level","opening_hours","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],tags:{amenity:"place_of_worship"},name:"Place of Worship"},"amenity/place_of_worship/buddhist":{icon:"maki-religious-buddhist",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],tags:{amenity:"place_of_worship",religion:"buddhist"},reference:{key:"amenity",value:"place_of_worship"},name:"Buddhist Temple"},"amenity/place_of_worship/christian":{icon:"maki-religious-christian",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],tags:{amenity:"place_of_worship",religion:"christian"},reference:{key:"amenity",value:"place_of_worship"},name:"Christian Church"},"amenity/place_of_worship/christian/jehovahs_witness":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"jehovahs_witness"},reference:{key:"denomination",value:"jehovahs_witness"},name:"Kingdom Hall of Jehovah's Witnesses"},"amenity/place_of_worship/christian/la_luz_del_mundo":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship","the light of the world church"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"la_luz_del_mundo"},reference:{key:"denomination",value:"la_luz_del_mundo"},name:"La Luz del Mundo Temple"},"amenity/place_of_worship/christian/quaker":{icon:"maki-place-of-worship",geometry:["point","area"],terms:["christian","church","house of God","house of prayer","house of worship"],tags:{amenity:"place_of_worship",religion:"christian",denomination:"quaker"},reference:{key:"denomination",value:"quaker"},name:"Quaker Friends Meeting House"},"amenity/place_of_worship/hindu":{icon:"temaki-hinduism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["kovil","devasthana","mandir","kshetram","alayam","shrine","temple"],tags:{amenity:"place_of_worship",religion:"hindu"},reference:{key:"amenity",value:"place_of_worship"},name:"Hindu Temple"},"amenity/place_of_worship/jewish":{icon:"maki-religious-jewish",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["jewish"],tags:{amenity:"place_of_worship",religion:"jewish"},reference:{key:"amenity",value:"place_of_worship"},name:"Jewish Synagogue"},"amenity/place_of_worship/muslim":{icon:"maki-religious-muslim",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["islam","islamic center","muslim"],tags:{amenity:"place_of_worship",religion:"muslim"},reference:{key:"amenity",value:"place_of_worship"},name:"Muslim Mosque"},"amenity/place_of_worship/shinto":{icon:"temaki-shinto",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["kami","torii"],tags:{amenity:"place_of_worship",religion:"shinto"},reference:{key:"amenity",value:"place_of_worship"},name:"Shinto Shrine"},"amenity/place_of_worship/sikh":{icon:"temaki-sikhism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["gurudwara","temple"],tags:{amenity:"place_of_worship",religion:"sikh"},reference:{key:"amenity",value:"place_of_worship"},name:"Sikh Temple"},"amenity/place_of_worship/taoist":{icon:"temaki-taoism",fields:["name","religion","denomination","{amenity/place_of_worship}"],geometry:["point","area"],terms:["daoist","monastery","temple"],tags:{amenity:"place_of_worship",religion:"taoist"},reference:{key:"amenity",value:"place_of_worship"},name:"Taoist Temple"},"amenity/planetarium":{icon:"maki-globe",fields:["name","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","charge_fee","email","fax","fee","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["museum","astronomy","observatory"],tags:{amenity:"planetarium"},name:"Planetarium"},"amenity/police":{icon:"maki-police",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],tags:{amenity:"police"},name:"Police"},"amenity/polling_station":{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{amenity:"polling_station"},addTags:{amenity:"polling_station",polling_station:"yes"},name:"Permanent Polling Place"},"amenity/post_box":{icon:"temaki-post_box",fields:["operator","collection_times","drive_through","ref"],moreFields:["access_simple","brand","covered","height","indoor","level","manufacturer","wheelchair"],geometry:["point","vertex"],tags:{amenity:"post_box"},terms:["drop box","dropbox","letter drop","mail box","mail collection box","mail drop","mail dropoff","mailbox","package drop","pillar box","pillarbox","post box","postal box","postbox"],name:"Mail Drop Box"},"amenity/post_depot":{icon:"fas-mail-bulk",fields:["name","operator","address","building_area","phone"],moreFields:["email","fax","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","level","payment_multi","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["letter","mail"],tags:{amenity:"post_office"},name:"Post Office"},"amenity/prep_school":{icon:"temaki-school",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["academic","ACT","SAT","homework","math","reading","test prep","tutoring","writing"],tags:{amenity:"prep_school"},name:"Test Prep / Tutoring School"},"amenity/prison":{icon:"maki-prison",fields:["name","operator","operator/type","address"],moreFields:["email","fax","phone","website","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","level","microbrewery","min_age","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:["access_simple","address","brand","email","level","location","phone","website","wheelchair"],geometry:["point","area"],terms:["library","bookcrossing"],tags:{amenity:"public_bookcase"},name:"Public Bookcase"},"amenity/ranger_station":{icon:"maki-ranger-station",fields:["name","operator","address","building_area","opening_hours"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","website","wheelchair"],geometry:["point","area"],terms:["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],tags:{amenity:"ranger_station"},name:"Ranger Station"},"amenity/recycling_centre":{icon:"maki-recycling",fields:["name","operator","operator/type","address","building","opening_hours","recycling_accepts"],moreFields:["charge_fee","email","fax","fee","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"centre"},reference:{key:"recycling_type",value:"*"},name:"Recycling Center"},"amenity/recycling_container":{icon:"maki-recycling",fields:["operator","recycling_accepts","collection_times"],moreFields:["colour","covered","indoor","level","manufacturer","material","opening_hours"],geometry:["point","area"],terms:["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],tags:{amenity:"recycling",recycling_type:"container"},reference:{key:"amenity",value:"recycling"},name:"Recycling Container"},"amenity/recycling/container/electrical_items":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["computers","electronic waste","electronics recycling","ewaste bin","phones","tablets"],tags:{amenity:"recycling",recycling_type:"container","recycling:electrical_items":"yes"},reference:{key:"recycling:electrical_items",value:"yes"},name:"E-Waste Container"},"amenity/recycling/container/green_waste":{icon:"maki-recycling",fields:["{amenity/recycling_container}"],moreFields:["{amenity/recycling_container}"],geometry:["point","area"],terms:["biodegradable","biological","compost","decomposable","garbage bin","garden waste","organic","rubbish","food scrap"],tags:{amenity:"recycling",recycling_type:"container","recycling:green_waste":"yes"},reference:{key:"recycling:green_waste",value:"yes"},name:"Green Waste Container"},"amenity/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","level","microbrewery","min_age","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:"temaki-temaki",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"sushi"},reference:{key:"cuisine",value:"sushi"},name:"Sushi Restaurant"},"amenity/restaurant/thai":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"thai"},reference:{key:"cuisine",value:"thai"},name:"Thai Restaurant"},"amenity/restaurant/turkish":{icon:"maki-restaurant",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"turkish"},reference:{key:"cuisine",value:"turkish"},name:"Turkish Restaurant"},"amenity/restaurant/vietnamese":{icon:"maki-restaurant-noodle",geometry:["point","area"],terms:["bar","breakfast","cafe","café","canteen","dine","dining","dinner","drive-in","eat","grill","lunch","table"],tags:{amenity:"restaurant",cuisine:"vietnamese"},reference:{key:"cuisine",value:"vietnamese"},name:"Vietnamese Restaurant"},"amenity/sanitary_dump_station":{icon:"temaki-storage_tank",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours"],geometry:["point","vertex","area"],terms:["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],tags:{amenity:"sanitary_dump_station"},name:"RV Toilet Disposal"},"amenity/school":{icon:"temaki-school",fields:["name","operator","operator/type","address","religion","denomination","website"],moreFields:["charge_fee","email","fax","fee","internet_access","internet_access/ssid","level","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","lockable","wheelchair"],geometry:["point","vertex","area"],terms:["lean-to","gazebo","picnic"],tags:{amenity:"shelter"},name:"Shelter"},"amenity/shelter/gazebo":{icon:"maki-shelter",fields:["name","building_area","bench","lit"],geometry:["point","area"],tags:{amenity:"shelter",shelter_type:"gazebo"},name:"Gazebo"},"amenity/shelter/lean_to":{icon:"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:"temaki-shower",fields:["opening_hours","access_simple","fee","payment_multi_fee","charge_fee","supervised","building_area","wheelchair"],moreFields:["address","gender","level","operator"],geometry:["point","vertex","area"],terms:["rain closet"],tags:{amenity:"shower"},name:"Shower"},"amenity/smoking_area":{icon:"fas-smoking",fields:["name","shelter","bin","bench","opening_hours"],moreFields:["covered","level","lit","wheelchair"],geometry:["point","vertex","area"],terms:[],tags:{amenity:"smoking_area"},name:"Smoking Area"},"amenity/social_centre":{icon:"fas-handshake",fields:["name","brand","operator","operator/type","address","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","polling_station","website","wheelchair"],geometry:["point","area"],terms:["event","fraternal","fraternity","hall","organization","professional","society","sorority","union","vetern"],tags:{amenity:"social_centre"},name:"Social Center"},"amenity/social_facility":{icon:"temaki-social_facility",fields:["name","operator","operator/type","address","building_area","social_facility","social_facility_for"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","level","opening_hours","phone","website","wheelchair"],geometry:["point","area"],terms:[],tags:{amenity:"social_facility"},name:"Social Facility"},"amenity/social_facility/ambulatory_care":{icon:"maki-wheelchair",geometry:["point","area"],tags:{amenity:"social_facility",social_facility:"ambulatory_care"},reference:{key:"social_facility",value:"ambulatory_care"},name:"Ambulatory Care"},"amenity/social_facility/food_bank":{icon:"temaki-social_facility",geometry:["point","area"],terms:[],tags:{amenity:"social_facility",social_facility:"food_bank"},reference:{key:"social_facility",value:"food_bank"},name:"Food Bank"},"amenity/social_facility/group_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["old","senior","living","care home","assisted living"],tags:{amenity:"social_facility",social_facility:"group_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"group_home"},name:"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{icon:"temaki-social_facility",geometry:["point","area"],terms:["houseless","unhoused","displaced"],tags:{amenity:"social_facility",social_facility:"shelter","social_facility:for":"homeless"},reference:{key:"social_facility",value:"shelter"},name:"Homeless Shelter"},"amenity/social_facility/nursing_home":{icon:"maki-wheelchair",fields:["{amenity/social_facility}","wheelchair"],geometry:["point","area"],terms:["elderly","living","nursing","old","senior","assisted living"],tags:{amenity:"social_facility",social_facility:"nursing_home","social_facility:for":"senior"},reference:{key:"social_facility",value:"nursing_home"},name:"Nursing Home"},"amenity/studio":{icon:"fas-microphone",fields:["name","studio","address","building_area","website"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","wheelchair"],geometry:["point","area"],terms:["recording","radio","television"],tags:{amenity:"studio"},name:"Studio"},"amenity/studio/audio":{icon:"fas-microphone",geometry:["point","area"],terms:["audio mixing","audio production","audio recording","audio studio"],tags:{amenity:"studio",studio:"audio"},reference:{key:"studio",value:"audio"},name:"Recording Studio"},"amenity/studio/radio":{icon:"fas-microphone",geometry:["point","area"],terms:["am radio","fm radio","radio broadcast","radio studio"],tags:{amenity:"studio",studio:"radio"},reference:{key:"studio",value:"radio"},name:"Radio Station"},"amenity/studio/television":{icon:"fas-video",geometry:["point","area"],terms:["television broadcast","television studio","tv broadcast","tv station","tv studio"],tags:{amenity:"studio",studio:"television"},reference:{key:"studio",value:"television"},name:"Television Station"},"amenity/studio/video":{icon:"fas-video",geometry:["point","area"],terms:["movie production","movie studio","video production","video recording","video studio"],tags:{amenity:"studio",studio:"video"},reference:{key:"studio",value:"video"},name:"Film Studio"},"amenity/taxi":{icon:"fas-taxi",fields:["name","operator","capacity","address"],moreFields:["access_simple","brand","opening_hours","wheelchair"],geometry:["point","vertex","area"],terms:["cab"],tags:{amenity:"taxi"},name:"Taxi Stand"},"amenity/telephone":{icon:"maki-telephone",fields:["operator","phone","fee","payment_multi_fee","charge_fee","booth"],moreFields:["covered","indoor","level","lit","wheelchair"],geometry:["point","vertex"],tags:{amenity:"telephone"},terms:["phone"],name:"Telephone"},"amenity/theatre":{icon:"maki-theatre",fields:["name","operator","address","building_area","website"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","min_age","payment_multi","phone","wheelchair"],geometry:["point","area"],terms:["theatre","performance","play","musical"],tags:{amenity:"theatre"},name:"Theater"},"amenity/theatre/type/amphi":{icon:"maki-theatre",fields:["name","operator","address","lit"],geometry:["point","area"],terms:["open air","outdoor","greek","ampi"],tags:{amenity:"theatre","theatre:type":"amphi"},name:"Amphitheatre"},"amenity/toilets":{icon:"maki-toilet",fields:["toilets/disposal","access_simple","gender","changing_table","wheelchair","building_area"],moreFields:["charge_fee","fee","level","opening_hours","operator","payment_multi_fee","toilets/handwashing","toilets/position"],geometry:["point","vertex","area"],terms:["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],tags:{amenity:"toilets"},name:"Toilets"},"amenity/toilets/disposal/flush":{icon:"fas-toilet",fields:["toilets/disposal","{amenity/toilets}"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["bathroom","head","lavatory","privy","restroom","water closet","WC","W.C."],tags:{amenity:"toilets","toilets:disposal":"flush"},reference:{key:"toilets:disposal",value:"flush"},name:"Flush Toilets"},"amenity/toilets/disposal/pitlatrine":{icon:"tnp-2009541",fields:["toilets/disposal","{amenity/toilets}","toilets/handwashing"],moreFields:["{amenity/toilets}"],geometry:["point","vertex","area"],terms:["head","lavatory","long drop","outhouse","pit toilet","privy"],tags:{amenity:"toilets","toilets:disposal":"pitlatrine"},reference:{key:"toilets:disposal",value:"pitlatrine"},name:"Pit Latrine"},"amenity/townhall":{icon:"maki-town-hall",fields:["name","operator","townhall/type","address","building_area"],moreFields:["email","fax","phone","polling_station","smoking","website","wheelchair"],geometry:["point","area"],terms:["village","city","government","courthouse","municipal"],tags:{amenity:"townhall"},name:"Town Hall"},"amenity/townhall/city":{icon:"maki-town-hall",geometry:["point","area"],terms:["council","courthouse","government","mayor","municipality"],tags:{amenity:"townhall","townhall:type":"city"},name:"City Hall"},"amenity/toy_library":{icon:"fas-chess-knight",fields:["operator","address","building_area","opening_hours"],moreFields:["level","website","wheelchair"],geometry:["point","area"],terms:["game","toy"],tags:{amenity:"toy_library"},name:"Toy Library"},"amenity/university":{icon:"maki-college",fields:["{amenity/college}"],moreFields:["{amenity/college}"],geometry:["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:["blind","brand","covered","height","indoor","level","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/bread":{icon:"temaki-vending_bread",geometry:["point"],terms:["baguette","bread"],tags:{amenity:"vending_machine",vending:"bread"},reference:{key:"vending",value:"bread"},name:"Bread Vending Machine"},"amenity/vending_machine/cigarettes":{icon:"temaki-vending_cigarettes",moreFields:["{amenity/vending_machine}","min_age"],geometry:["point"],terms:["cigarette"],tags:{amenity:"vending_machine",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},name:"Cigarette Vending Machine"},"amenity/vending_machine/coffee":{icon:"temaki-vending_hot_drink",geometry:["point"],terms:["coffee"],tags:{amenity:"vending_machine",vending:"coffee"},reference:{key:"vending",value:"coffee"},name:"Coffee Vending Machine"},"amenity/vending_machine/condoms":{icon:"temaki-vending_love",geometry:["point"],terms:["condom"],tags:{amenity:"vending_machine",vending:"condoms"},reference:{key:"vending",value:"condoms"},name:"Condom Vending Machine"},"amenity/vending_machine/drinks":{icon:"temaki-vending_cold_drink",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/eggs":{icon:"temaki-vending_eggs",geometry:["point"],terms:["egg"],tags:{amenity:"vending_machine",vending:"eggs"},reference:{key:"vending",value:"eggs"},name:"Egg Vending Machine"},"amenity/vending_machine/electronics":{icon:"temaki-vending_machine",geometry:["point"],terms:["cable","charger","earbud","headphone","phone","tablet"],tags:{amenity:"vending_machine",vending:"electronics"},reference:{key:"vending",value:"electronics"},name:"Electronics Vending Machine"},"amenity/vending_machine/elongated_coin":{icon:"temaki-vending_flat_coin",geometry:["point"],terms:["coin","crush","elongated","flatten","penny","souvenir"],tags:{amenity:"vending_machine",vending:"elongated_coin"},reference:{key:"vending",value:"elongated_coin"},name:"Flat Coin Vending Machine"},"amenity/vending_machine/excrement_bags":{icon:"temaki-vending_pet_waste",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_venus",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_ice_cream",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/ice_cubes":{icon:"temaki-vending_ice",geometry:["point"],terms:["cubes","ice"],tags:{amenity:"vending_machine",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},name:"Ice Vending Machine"},"amenity/vending_machine/newspapers":{icon:"temaki-vending_newspaper",fields:["vending","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_lockers",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_lockers",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_tickets",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_tickets",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_stamps",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","email","fax","fee","level","payment_multi_fee","phone","website","wheelchair"],geometry:["point","area"],terms:["pet clinic","veterinarian","animal hospital","pet doctor"],tags:{amenity:"veterinary"},name:"Veterinary"},"amenity/waste_basket":{icon:"maki-waste-basket",fields:["operator","waste","collection_times","material","colour"],moreFields:["covered","indoor","manufacturer"],geometry:["point","vertex"],tags:{amenity:"waste_basket"},terms:["bin","garbage","rubbish","litter","trash"],name:"Waste Basket"},"amenity/waste_disposal":{icon:"fas-dumpster",fields:["operator","waste","collection_times","access_simple"],moreFields:["brand","colour","height","manufacturer","material"],geometry:["point","vertex","area"],tags:{amenity:"waste_disposal"},terms:["garbage","rubbish","litter","trash"],name:"Garbage Dumpster"},"amenity/waste_transfer_station":{icon:"maki-waste-basket",fields:["name","operator","operator/type","waste","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],terms:["dump","garbage","recycling","rubbish","scrap","trash"],tags:{amenity:"waste_transfer_station"},name:"Waste Transfer Station"},"amenity/waste/dog_excrement":{icon:"maki-waste-basket",fields:["collection_times"],geometry:["point","vertex","area"],tags:{amenity:"waste_basket",waste:"dog_excrement"},reference:{key:"waste",value:"dog_excrement"},terms:["bin","garbage","rubbish","litter","trash","poo","dog"],name:"Dog Excrement Bin"},"amenity/water_point":{icon:"maki-drinking-water",fields:["operator","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"},"amenity/weighbridge":{icon:"fas-weight",fields:["ref","operator","access_simple","maxweight"],moreFields:["address","colour","lit","manufacturer","material","wheelchair"],geometry:["point","vertex"],terms:["weigh station","weighbridge"],tags:{amenity:"weighbridge"},name:"Truck Scale"},area:{fields:["name"],geometry:["area"],tags:{area:"yes"},terms:["polygon"],name:"Area",matchScore:0.1},"area/highway":{fields:["name","area/highway","surface"],geometry:["area"],terms:["area:highway","edge of pavement","highway area","highway shape","pavement","road shape","street area"],tags:{"area:highway":"*"},name:"Road Surface"},"attraction/amusement_ride":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","carnival ride"],tags:{attraction:"amusement_ride"},name:"Amusement Ride"},"attraction/animal":{icon:"maki-zoo",fields:["name","operator","species/wikidata"],geometry:["point","area"],terms:["amphibian","animal park","aquarium","bear","bird","fish","insect","lion","mammal","monkey","penguin","reptile","safari","theme park","tiger","zoo"],tags:{attraction:"animal"},name:"Animal Enclosure"},"attraction/big_wheel":{icon:"maki-amusement-park",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["ferris wheel","theme park","amusement ride"],tags:{attraction:"big_wheel"},name:"Big Wheel"},"attraction/bumper_car":{icon:"fas-car-crash",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","dodgem cars","autoscooter"],tags:{attraction:"bumper_car"},name:"Bumper Cars"},"attraction/bungee_jumping":{icon:"maki-pitch",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","bungy jumping","jumping platform"],tags:{attraction:"bungee_jumping"},name:"Bungee Jumping"},"attraction/carousel":{icon:"temaki-amusement_park",fields:["{attraction}","building_area"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","roundabout","merry-go-round","galloper","jumper","horseabout","flying horses"],tags:{attraction:"carousel"},name:"Carousel"},"attraction/dark_ride":{icon:"maki-rail-metro",fields:["{attraction}","building_area"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","line","area"],terms:["theme park","ghost train"],tags:{attraction:"dark_ride"},name:"Dark Ride"},"attraction/drop_tower":{icon:"temaki-tower",fields:["{attraction}","height"],moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","gondola","tower","big drop"],tags:{attraction:"drop_tower"},name:"Drop Tower"},"attraction/maze":{icon:"maki-amusement-park",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride","labyrinth"],tags:{attraction:"maze"},name:"Maze"},"attraction/pirate_ship":{icon:"maki-danger",moreFields:["{attraction}","max_age","min_age"],geometry:["point"],terms:["theme park","carnival ride","amusement ride"],tags:{attraction:"pirate_ship"},name:"Pirate Ship"},"attraction/river_rafting":{icon:"maki-ferry",moreFields:["{attraction}","max_age","min_age"],geometry:["point","line"],terms:["theme park","aquatic park","water park","rafting simulator","river rafting ride","river rapids ride"],tags:{attraction:"river_rafting"},name:"River Rafting"},"attraction/roller_coaster":{icon:"temaki-roller_coaster",moreFields:["{attraction}","max_age","min_age"],geometry:["point","area"],terms:["theme park","amusement ride"],tags:{attraction:"roller_coaster"},name:"Roller Coaster"},"attraction/summer_toboggan":{icon:"temaki-sledding",moreFields:["{attraction}","max_age","min_age"],geometry:["line"],terms:["alpine slide","mountain coaster"],tags:{attraction:"summer_toboggan"},name:"Summer Toboggan"},"attraction/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"],moreFields:["{attraction}","max_age","min_age"],geometry:["line","area"],terms:["theme park","aquatic park","water park","flumes","water chutes","hydroslides"],tags:{attraction:"water_slide"},name:"Water Slide"},barrier:{icon:"maki-roadblock",geometry:["point","vertex","line","area"],tags:{barrier:"*"},fields:["barrier"],moreFields:["level"],name:"Barrier",matchScore:0.4},"barrier/entrance":{icon:"maki-entrance-alt1",geometry:["vertex"],tags:{barrier:"entrance"},name:"Entrance",searchable:false},"barrier/block":{icon:"maki-roadblock",fields:["access","material"],geometry:["point","vertex"],tags:{barrier:"block"},name:"Block"},"barrier/bollard_line":{icon:"temaki-silo",fields:["access","bollard","height","material","colour"],geometry:["line"],tags:{barrier:"bollard"},name:"Bollard Row"},"barrier/bollard":{icon:"temaki-silo",fields:["access","bollard","height","width","material","colour"],geometry:["point","vertex"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"maki-roadblock",fields:["access","building_area"],moreFields:["address","email","fax","phone","website"],geometry:["vertex","area"],tags:{barrier:"border_control"},name:"Border Control"},"barrier/cattle_grid":{icon:"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:"temaki-lift_gate",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","stile","material"],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},"barrier/wall/noise_barrier":{icon:"temaki-wall",geometry:["line","area"],tags:{barrier:"wall",wall:"noise_barrier"},terms:["acoustical barrier","noise wall","noisewall","sound barrier","sound berm","sound wall","soundberm","soundwall"],name:"Noise Barrier",matchScore:0.27},"boundary/administrative":{fields:["name","admin_level"],geometry:["line"],tags:{boundary:"administrative"},name:"Administrative Boundary",matchScore:0.5},"bridge/support":{icon:"fas-archway",fields:["bridge/support","height","layer","material"],moreFields:["colour","seamark/type"],geometry:["point","vertex","area"],tags:{"bridge:support":"*"},name:"Bridge Support"},"bridge/support/pier":{icon:"fas-archway",fields:["bridge/support","{bridge/support}"],geometry:["point","vertex","area"],tags:{"bridge:support":"pier"},name:"Bridge Pier"},building_part:{icon:"maki-building",fields:["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","layer","not/name","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-building",geometry:["area"],tags:{building:"service"},matchScore:0.5,name:"Service Building"},"building/shed":{icon:"fas-warehouse",fields:["{building}","lockable"],geometry:["area"],tags:{building:"shed"},matchScore:0.5,name:"Shed"},"building/stable":{icon:"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","email","fax","height_building","internet_access","internet_access/fee","internet_access/ssid","level","max_age","min_age","phone","website","wheelchair"],geometry:["point","area"],tags:{club:"*"},terms:["social"],name:"Club"},"club/sport":{icon:"maki-pitch",fields:["name","sport","{club}"],geometry:["point","area"],tags:{club:"sport"},terms:["athletics club","sporting club","sports association","sports society"],name:"Sports Club"},craft:{icon:"temaki-tools",fields:["name","craft","operator","address","building_area","opening_hours"],moreFields:["air_conditioning","building/levels_building","email","fax","height_building","internet_access","internet_access/fee","internet_access/ssid","level","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"],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_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],geometry:["point","area"],terms:["alcohol","beer","beverage","bier","booze","cider"],tags:{craft:"brewery"},name:"Brewery"},"craft/carpenter":{icon:"temaki-tools",geometry:["point","area"],terms:["woodworker"],tags:{craft:"carpenter"},name:"Carpenter"},"craft/carpet_layer":{icon:"temaki-tools",geometry:["point","area"],tags:{craft:"carpet_layer"},name:"Carpet Layer"},"craft/caterer":{icon:"maki-restaurant",fields:["name","cuisine","{craft}"],geometry:["point","area"],tags:{craft:"caterer"},name:"Caterer"},"craft/chimney_sweeper":{icon:"temaki-chimney",geometry:["point","area"],tags:{craft:"chimney_sweeper"},name:"Chimney Sweeper"},"craft/clockmaker":{icon:"temaki-clock",geometry:["point","area"],tags:{craft:"clockmaker"},name:"Clockmaker"},"craft/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet","candy"],tags:{craft:"confectionery"},name:"Candy Maker"},"craft/distillery":{icon:"temaki-storage_fermenter",fields:["{craft}","product"],moreFields:["{craft}","min_age"],geometry:["point","area"],terms:["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],tags:{craft:"distillery"},name:"Distillery"},"craft/dressmaker":{icon:"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",moreFields:["{craft}","min_age"],geometry:["point","area"],tags:{craft:"winery"},name:"Winery"},"emergency/designated":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"designated"},name:"Emergency Access Designated",searchable:false,matchScore:0.01},"emergency/destination":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"destination"},name:"Emergency Access Destination",searchable:false,matchScore:0.01},"emergency/no":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"no"},name:"Emergency Access No",searchable:false,matchScore:0.01},"emergency/official":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"official"},name:"Emergency Access Official",searchable:false,matchScore:0.01},"emergency/private":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"private"},name:"Emergency Access Private",searchable:false,matchScore:0.01},"emergency/yes":{fields:["emergency_combo"],geometry:["line"],tags:{emergency:"yes"},name:"Emergency Access Yes",searchable:false,matchScore:0.01},"emergency/ambulance_station":{icon:"fas-ambulance",fields:["name","operator","building_area","address"],moreFields:["email","fax","phone","website","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"ambulance_station"},name:"Ambulance Station"},"emergency/defibrillator":{icon:"maki-defibrillator",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],terms:["AED"],tags:{emergency:"defibrillator"},name:"Defibrillator"},"emergency/fire_alarm":{icon:"fas-bell",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_alarm_box"},name:"Fire Alarm Call Box"},"emergency/fire_extinguisher":{icon:"fas-fire-extinguisher",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_extinguisher"},name:"Fire Extinguisher"},"emergency/fire_hose":{icon:"fas-tape",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"fire_hose"},name:"Fire Hose"},"emergency/fire_hydrant":{icon:"temaki-fire_hydrant",fields:["ref","fire_hydrant/type","colour","water_source","couplings"],moreFields:["fire_hydrant/diameter","fire_hydrant/pressure","level","survey/date","water_volume"],geometry:["point","vertex"],terms:["fire plug","fire water well","hydrant"],tags:{emergency:"fire_hydrant"},name:"Fire Hydrant"},"emergency/first_aid_kit":{icon:"fas-medkit",fields:["indoor","ref","operator"],moreFields:["level"],geometry:["point","vertex"],terms:["bandage","first aid","med","med kit","medic*","medkit"],tags:{emergency:"first_aid_kit"},name:"First Aid Kit"},"emergency/life_ring":{icon:"fas-life-ring",fields:["ref","operator"],geometry:["point","vertex"],terms:["life buoy","kisby ring","kisbie ring","perry buoy"],tags:{emergency:"life_ring"},name:"Life Ring"},"emergency/lifeguard":{icon:"fas-life-ring",fields:["ref","operator","building_area","opening_hours"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/phone":{icon:"maki-emergency-phone",fields:["ref","operator","covered","indoor","booth"],moreFields:["level"],geometry:["point","vertex"],tags:{emergency:"phone"},name:"Emergency Phone"},"emergency/siren":{icon:"fas-volume-up",fields:["siren/purpose","siren/type","ref","operator"],geometry:["point","vertex"],terms:["air raid","loud","noise","storm","tornado","warning"],tags:{emergency:"siren"},name:"Siren"},"emergency/water_tank":{icon:"maki-water",fields:["name","ref","operator"],geometry:["point","vertex"],terms:["water tank","cistern","reservoir"],tags:{emergency:"water_tank"},name:"Emergency Water Tank"},entrance:{icon:"maki-entrance-alt1",geometry:["vertex"],terms:["entrance","exit","door"],tags:{entrance:"*"},fields:["entrance","door","access_simple","level","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"},addTags:{golf:"bunker",natural:"sand"},terms:["hazard","bunker"],name:"Sand Trap"},"golf/cartpath":{icon:"temaki-golf_cart",fields:["{golf/path}","maxspeed"],geometry:["line"],tags:{golf:"cartpath"},addTags:{golf:"cartpath",golf_cart:"designated",highway:"service"},name:"Golf Cartpath"},"golf/driving_range":{icon:"maki-golf",fields:["name","capacity"],geometry:["area"],tags:{golf:"driving_range"},addTags:{golf:"driving_range",landuse:"grass"},name:"Driving Range"},"golf/fairway":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"fairway"},addTags:{golf:"fairway",landuse:"grass"},name:"Fairway"},"golf/green":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"green"},addTags:{golf:"green",landuse:"grass"},name:"Putting Green"},"golf/hole":{icon:"maki-golf",fields:["name","ref_golf_hole","par","handicap"],geometry:["line"],tags:{golf:"hole"},name:"Golf Hole"},"golf/lateral_water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"lateral_water_hazard"},addTags:{golf:"lateral_water_hazard",natural:"water"},name:"Lateral Water Hazard"},"golf/path":{icon:"maki-golf",fields:["name","surface","width","structure","incline"],geometry:["line"],tags:{golf:"path"},addTags:{golf:"path",highway:"path",foot:"designated"},name:"Golf Walking Path"},"golf/rough":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"rough"},addTags:{golf:"rough",landuse:"grass"},name:"Rough"},"golf/tee":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"tee"},addTags:{golf:"tee",landuse:"grass"},terms:["teeing ground"],name:"Tee Box"},"golf/water_hazard":{icon:"maki-golf",fields:["name"],geometry:["area"],tags:{golf:"water_hazard"},addTags:{golf:"water_hazard",natural:"water"},name:"Water Hazard"},healthcare:{icon:"maki-hospital",fields:["name","healthcare","operator","healthcare/speciality","address","building_area"],moreFields:["brand","building/levels_building","email","fax","height_building","level","opening_hours","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{healthcare:"*"},terms:["clinic","doctor","disease","health","institution","sick","surgery","wellness"],name:"Healthcare Facility"},"healthcare/alternative":{icon:"maki-hospital",geometry:["point","area"],terms:["acupuncture","anthroposophical","applied kinesiology","aromatherapy","ayurveda","herbalism","homeopathy","hydrotherapy","hypnosis","naturopathy","osteopathy","reflexology","reiki","shiatsu","traditional","tuina","unani"],tags:{healthcare:"alternative"},name:"Alternative Medicine"},"healthcare/alternative/chiropractic":{icon:"maki-hospital",geometry:["point","area"],terms:["back","pain","spine"],tags:{healthcare:"alternative","healthcare:speciality":"chiropractic"},name:"Chiropractor"},"healthcare/audiologist":{icon:"maki-hospital",geometry:["point","area"],terms:["ear","hearing","sound"],tags:{healthcare:"audiologist"},name:"Audiologist"},"healthcare/birthing_center":{icon:"fas-baby",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"birthing_center"},name:"Birthing Center"},"healthcare/blood_donation":{icon:"maki-blood-bank",fields:["{healthcare}","blood_components"],geometry:["point","area"],terms:["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],tags:{healthcare:"blood_donation"},name:"Blood Donor Center"},"healthcare/counselling":{icon:"fas-comments",geometry:["point","area"],tags:{healthcare:"counselling"},name:"Counselling Center"},"healthcare/hospice":{icon:"maki-hospital",geometry:["point","area"],terms:["terminal","illness"],tags:{healthcare:"hospice"},name:"Hospice"},"healthcare/laboratory":{icon:"fas-vial",fields:["name","operator","website","ref","address","opening_hours"],geometry:["point","area"],terms:["medical_laboratory","medical_lab","blood_check"],tags:{healthcare:"laboratory"},name:"Medical Laboratory"},"healthcare/midwife":{icon:"fas-baby",geometry:["point","area"],terms:["baby","childbirth","delivery","labour","labor","pregnancy"],tags:{healthcare:"midwife"},name:"Midwife"},"healthcare/occupational_therapist":{icon:"maki-hospital",geometry:["point","area"],terms:["therapist","therapy"],tags:{healthcare:"occupational_therapist"},name:"Occupational Therapist"},"healthcare/optometrist":{icon:"fas-eye",geometry:["point","area"],terms:["eye","glasses","lasik","lenses","vision"],tags:{healthcare:"optometrist"},name:"Optometrist"},"healthcare/physiotherapist":{icon:"temaki-physiotherapist",geometry:["point","area"],terms:["physical","therapist","therapy"],tags:{healthcare:"physiotherapist"},name:"Physiotherapist"},"healthcare/podiatrist":{icon:"maki-hospital",geometry:["point","area"],terms:["foot","feet","nails"],tags:{healthcare:"podiatrist"},name:"Podiatrist"},"healthcare/psychotherapist":{icon:"maki-hospital",geometry:["point","area"],terms:["anxiety","counselor","depression","mental health","mind","suicide","therapist","therapy"],tags:{healthcare:"psychotherapist"},name:"Psychotherapist"},"healthcare/rehabilitation":{icon:"maki-hospital",geometry:["point","area"],terms:["rehab","therapist","therapy"],tags:{healthcare:"rehabilitation"},name:"Rehabilitation Facility"},"healthcare/speech_therapist":{icon:"fas-comment",geometry:["point","area"],terms:["speech","therapist","therapy","voice"],tags:{healthcare:"speech_therapist"},name:"Speech Therapist"},"highway/bus_stop":{icon:"maki-bus",fields:["name","network","operator","bench","shelter"],geometry:["point","vertex"],tags:{highway:"bus_stop"},matchScore:0.95,name:"Bus Stop",searchable:false,replacement:"public_transport/platform/bus_point"},"highway/crossing":{fields:["crossing"],geometry:["vertex"],tags:{highway:"crossing"},searchable:false,matchScore:0.95,name:"Crossing"},"highway/bridleway":{fields:["name","surface","width","structure","access","incline","horse_scale"],moreFields:["covered","dog","lit","maxweight_bridge","smoothness","stroller","wheelchair"],icon:"maki-horse-riding",geometry:["line"],tags:{highway:"bridleway"},terms:["bridleway","equestrian","horse","trail"],name:"Bridle Path"},"highway/bus_guideway":{icon:"maki-bus",fields:["name","operator","oneway","structure","covered"],moreFields:["trolley_wire"],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"},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"},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:["bicyle path","bike path","cycling 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":{notCountryCodes:["fr","lt","pl"],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:["ref","level_semi","access_simple","wheelchair","maxweight"],moreFields:["maxheight","opening_hours"],geometry:["vertex"],tags:{highway:"elevator"},terms:["lift"],name:"Elevator"},"highway/emergency_bay":{icon:"maki-car",geometry:["vertex"],tags:{highway:"emergency_bay"},terms:["Highway Emergency Bay"],name:"Emergency Stopping Place"},"highway/footway":{icon:"temaki-pedestrian",fields:["name","surface","width","structure","access","incline"],moreFields:["covered","dog","lit","maxweight_bridge","not/name","smoothness","stroller","tactile_paving","wheelchair"],geometry:["line"],terms:["hike","hiking","promenade","trackway","trail","walk"],tags:{highway:"footway"},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"},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"},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","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","not/name","ref","sac_scale","smoothness","stroller","trail_visibility","wheelchair"],geometry:["line"],terms:["hike","hiking","trackway","trail","walk"],tags:{highway:"path"},name:"Path"},"highway/path/informal":{icon:"iD-other-line",fields:["surface","width","access","trail_visibility","smoothness","incline"],moreFields:["covered","dog","horse_scale","informal","lit","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","sac_scale","stroller","structure","wheelchair"],geometry:["line"],terms:["bootleg trail","cow path","desire line","desire path","desireline","desirepath","elephant path","game trail","goat track","herd path","pig trail","shortcut","social trail","use trail"],tags:{highway:"path",informal:"yes"},reference:{key:"informal"},name:"Informal Path"},"highway/pedestrian_area":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","structure","access"],geometry:["area"],tags:{highway:"pedestrian",area:"yes"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Area"},"highway/pedestrian_line":{icon:"temaki-pedestrian",fields:["name","surface","lit","width","oneway","structure","access"],moreFields:["covered","incline","maxweight_bridge","smoothness"],geometry:["line"],tags:{highway:"pedestrian"},terms:["center","centre","plaza","quad","square","walkway"],name:"Pedestrian Street"},"highway/primary_link":{icon:"iD-highway-primary-link",fields:["destination_oneway","destination/ref_oneway","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","cycleway","destination/symbol_oneway","flood_prone","incline","junction_line","junction/ref_oneway","lit","maxheight","maxspeed/advisory","maxweight_bridge","name","oneway/bicycle","ref_road_number","smoothness","toll","trolley_wire"],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:["line","area"],tags:{highway:"raceway"},addTags:{highway:"raceway",sport:"motor"},terms:["auto*","formula one","kart","motocross","nascar","race*","track"],name:"Motorsport Racetrack"},"highway/raceway/karting":{icon:"fas-flag-checkered",geometry:["line","area"],tags:{highway:"raceway",sport:"karting"},terms:["carting","go carts","go karts","go-karts","gokarts","kart racing","karting track","motorsports","shifter karts","superkarts"],name:"Karting Racetrack"},"highway/raceway/motocross":{icon:"fas-motorcycle",geometry:["line","area"],tags:{highway:"raceway",sport:"motocross"},terms:["off-road racing","offroad moto racing","motocross circuit","motorcycle track","motorsports"],name:"Motocross Racetrack"},"highway/residential":{icon:"iD-highway-residential",fields:["name","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["covered","cycleway","flood_prone","incline","junction_line","lit","maxheight","maxspeed/advisory","maxweight_bridge","not/name","oneway/bicycle","smoothness","trolley_wire"],geometry:["line"],tags:{highway:"residential"},terms:["road","street"],name:"Residential Road"},"highway/rest_area":{icon:"maki-car",fields:["name","operator","opening_hours"],moreFields:["address","email","fax","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{highway:"rest_area"},terms:["rest stop"],name:"Rest Area"},"highway/road":{icon:"iD-other-line",fields:["highway","{highway/residential}"],moreFields:["{highway/residential}"],geometry:["line"],tags:{highway:"road"},terms:["road","street"],name:"Unknown Road"},"highway/secondary_link":{icon:"iD-highway-secondary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"secondary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Secondary Link"},"highway/secondary":{icon:"iD-highway-secondary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"secondary"},terms:["road","street"],name:"Secondary Road"},"highway/service":{icon:"iD-highway-service",fields:["name","service","oneway","maxspeed","surface","covered","structure","access"],moreFields:["flood_prone","incline","lanes","lit","maxheight","maxspeed/advisory","maxweight_bridge","oneway/bicycle","trolley_wire"],geometry:["line"],tags:{highway:"service"},terms:["road","street"],matchScore:0.9,name:"Service Road"},"highway/service/alley":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"alley"},reference:{key:"service",value:"alley"},name:"Alley"},"highway/service/drive-through":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"drive-through"},reference:{key:"service",value:"drive-through"},name:"Drive-Through"},"highway/service/driveway":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"driveway"},reference:{key:"service",value:"driveway"},name:"Driveway"},"highway/service/emergency_access":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"emergency_access"},reference:{key:"service",value:"emergency_access"},name:"Emergency Access"},"highway/service/parking_aisle":{icon:"iD-highway-service",geometry:["line"],tags:{highway:"service",service:"parking_aisle"},reference:{key:"service",value:"parking_aisle"},name:"Parking Aisle"},"highway/services":{icon:"maki-car",fields:["{highway/rest_area}"],moreFields:["{highway/rest_area}"],geometry:["point","vertex","area"],tags:{highway:"services"},terms:["services","travel plaza","service station"],name:"Service Area"},"highway/speed_camera":{icon:"temaki-security_camera",geometry:["point","vertex"],fields:["direction","ref","maxspeed"],tags:{highway:"speed_camera"},terms:[],name:"Speed Camera"},"highway/steps":{icon:"iD-highway-steps",fields:["incline_steps","access_simple","handrail","step_count","surface","width"],moreFields:["covered","dog","indoor","level_semi","lit","name","ref","stroller","wheelchair"],geometry:["line"],tags:{highway:"steps"},terms:["stairs","staircase","stairway"],name:"Steps"},"highway/steps/conveying":{icon:"maki-entrance",fields:["incline_steps","conveying","access_simple","indoor","level_semi","width"],moreFields:["{highway/steps}","handrail","step_count","surface"],geometry:["line"],terms:["moving staircase","moving stairway","people mover"],tags:{highway:"steps",conveying:"*"},name:"Escalator"},"highway/stop":{icon:"temaki-stop",fields:["stop","direction_vertex"],geometry:["vertex"],tags:{highway:"stop"},terms:["stop","halt","sign"],name:"Stop Sign"},"highway/street_lamp":{icon:"temaki-bulb3",geometry:["point","vertex"],tags:{highway:"street_lamp"},fields:["lamp_type","direction","ref"],terms:["streetlight","street light","lamp","light","gaslight"],name:"Street Lamp"},"highway/tertiary_link":{icon:"iD-highway-tertiary-link",fields:["{highway/primary_link}"],moreFields:["{highway/primary_link}"],geometry:["line"],tags:{highway:"tertiary_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Tertiary Link"},"highway/tertiary":{icon:"iD-highway-tertiary",fields:["{highway/primary}"],moreFields:["{highway/primary}"],geometry:["line"],tags:{highway:"tertiary"},terms:["road","street"],name:"Tertiary Road"},"highway/track":{icon:"fas-truck-monster",fields:["name","tracktype","surface","width","structure","access","incline","smoothness"],moreFields:["covered","flood_prone","horse_scale","maxweight_bridge","mtb/scale","mtb/scale/imba","mtb/scale/uphill","stroller","wheelchair"],geometry:["line"],tags:{highway:"track"},terms:["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],name:"Unmaintained Track Road"},"highway/traffic_mirror":{icon:"maki-circle-stroked",geometry:["point","vertex"],fields:["direction"],tags:{highway:"traffic_mirror"},terms:["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],name:"Traffic Mirror"},"highway/traffic_signals":{icon:"temaki-traffic_signals",geometry:["vertex"],tags:{highway:"traffic_signals"},fields:["traffic_signals","traffic_signals/direction"],terms:["light","stoplight","traffic light"],name:"Traffic Signals"},"highway/trailhead":{icon:"fas-hiking",fields:["name","operator","elevation","address","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["opening_hours"],geometry:["vertex"],tags:{highway:"trailhead"},terms:["hiking","mile zero","mountain biking","mountaineering","trail endpoint","trail start","staging area","trekking"],name:"Trailhead"},"highway/trunk_link":{icon:"iD-highway-trunk-link",fields:["{highway/motorway_link}"],moreFields:["{highway/motorway_link}"],geometry:["line"],tags:{highway:"trunk_link"},terms:["on ramp","off ramp","ramp","road","street"],name:"Trunk Link"},"highway/trunk":{icon:"iD-highway-trunk",fields:["name","ref_road_number","oneway","maxspeed","lanes","surface","structure","access"],moreFields:["charge_toll","covered","incline","junction_line","lit","maxheight","maxweight_bridge","minspeed","not/name","smoothness","toll"],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/elevator":{icon:"temaki-elevator",fields:["ref","level_semi"],geometry:["area"],tags:{indoor:"room",elevator:"yes"},terms:["elevator","lift"],matchScore:0.8,name:"Indoor Elevator Shaft"},"indoor/room":{fields:["level","name","ref_room_number","room","height"],geometry:["area"],tags:{indoor:"room"},terms:["antechamber","anteroom","atrium","cell","chamber","concourse","foyer","indoor room","lobby","vestibule"],matchScore:0.8,name:"Room"},"indoor/stairs":{icon:"iD-highway-steps",fields:["ref","level_semi","conveying_escalator"],geometry:["area"],tags:{indoor:"room",stairs:"yes"},terms:["stair","stairs","staircase","stairway","stairwell","steps"],matchScore:0.8,name:"Indoor Stairwell"},"indoor/wall":{icon:"temaki-wall",fields:["level","height"],geometry:["line"],tags:{indoor:"wall"},terms:["indoor barrier","room divider","room partition"],name:"Indoor Wall"},"internet_access/wlan":{icon:"fas-wifi",geometry:["point","area"],fields:["internet_access/ssid","internet_access/fee"],moreFields:["level"],terms:["wi-fi","wifi","hotspot"],tags:{internet_access:"wlan"},matchScore:0.25,name:"Wi-Fi Hotspot"},junction:{icon:"temaki-junction",fields:["name"],geometry:["vertex","area"],tags:{junction:"yes"},name:"Junction"},"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","email","fax","phone","website"],tags:{landuse:"allotments"},terms:["allotment","garden"],name:"Community Garden"},"landuse/aquaculture":{icon:"maki-aquarium",fields:["name","operator","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"aquaculture"},terms:["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],name:"Aquaculture"},"landuse/brownfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"brownfield"},terms:[],matchScore:0.9,name:"Brownfield"},"landuse/cemetery":{icon:"maki-cemetery",fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"cemetery"},terms:[],name:"Cemetery"},"landuse/churchyard":{icon:"maki-religious-christian",fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"churchyard"},terms:[],name:"Churchyard"},"landuse/commercial":{icon:"maki-suitcase",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"commercial"},terms:[],matchScore:0.9,name:"Commercial Area"},"landuse/construction":{icon:"temaki-bulldozer",fields:["name","construction","operator","opening_date","check_date","note"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"construction"},terms:["building","bulldozer","construction site","construction zone","crane","demolition","development","infrastructure"],name:"Construction Area"},"landuse/farmland":{icon:"fas-tractor",fields:["name","operator","crop","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmland"},terms:["crop","grow","plant"],name:"Farmland"},"landuse/farmyard":{icon:"maki-farm",fields:["name","operator","crop"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"farmyard"},terms:["crop","grow","plant"],name:"Farmyard"},"landuse/flowerbed":{icon:"maki-garden",fields:["operator"],moreFields:["address","name"],geometry:["area"],tags:{landuse:"flowerbed"},terms:["floral garden","flower garden"],name:"Flowerbed"},"landuse/forest":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle","produce"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"forest"},terms:["cut","forest","forestry","lumber","silviculture","tree"],name:"Managed Forest"},"landuse/garages":{icon:"fas-warehouse",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"garages"},terms:[],name:"Garage Landuse"},"landuse/grass":{geometry:["area"],tags:{landuse:"grass"},terms:[],name:"Grass"},"landuse/greenfield":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],tags:{landuse:"greenfield"},terms:[],matchScore:0.9,name:"Greenfield"},"landuse/greenhouse_horticulture":{icon:"maki-garden",fields:["name","operator"],moreFields:["address","email","fax","phone","website"],geometry:["area"],terms:["flower","greenhouse","horticulture","grow","vivero"],tags:{landuse:"greenhouse_horticulture"},matchScore:0.9,name:"Greenhouse Horticulture"},"landuse/harbour":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","email","fax","phone","website"],geometry:["area"],terms:["boat"],tags:{landuse:"harbour"},name:"Harbor"},"landuse/industrial":{icon:"maki-industry",fields:["name","industrial"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"industrial"},terms:[],matchScore:0.9,name:"Industrial Area"},"landuse/industrial/scrap_yard":{icon:"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":{icon:"temaki-bulldozer",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"landfill"},terms:["dump"],name:"Landfill"},"landuse/meadow":{icon:"maki-garden",geometry:["area"],fields:["name"],tags:{landuse:"meadow"},terms:["grazing","hay field","pasture"],name:"Meadow"},"landuse/military":{icon:"temaki-military",fields:["name"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"military"},terms:[],matchScore:0.9,name:"Military Area"},"landuse/military/airfield":{icon:"tnp-2009265",fields:["name","iata","icao"],geometry:["point","area"],tags:{military:"airfield"},addTags:{aeroway:"aerodrome",landuse:"military",military:"airfield"},reference:{key:"military",value:"airfield"},terms:["aerodrome","aeroway","air force","airplane","airport","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],name:"Military Airfield"},"landuse/military/barracks":{icon:"temaki-military",fields:["name","building_area"],geometry:["point","area"],tags:{military:"barracks"},addTags:{landuse:"military",military:"barracks"},terms:["air force","army","base","fight","force","guard","marine","navy","troop","war"],name:"Barracks"},"landuse/military/danger_area":{icon:"maki-danger",fields:["name"],geometry:["point","vertex","area"],tags:{military:"danger_area"},addTags:{landuse:"military",military:"danger_area"},terms:["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],name:"Danger Area"},"landuse/military/naval_base":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"naval_base"},addTags:{landuse:"military",military:"naval_base"},terms:["base","fight","force","guard","marine","navy","ship","sub","troop","war"],name:"Naval Base"},"landuse/military/obstacle_course":{icon:"temaki-military",geometry:["point","area"],tags:{military:"obstacle_course"},addTags:{landuse:"military",military:"obstacle_course"},terms:["army","base","force","guard","marine","navy","troop","war"],name:"Obstacle Course"},"landuse/military/range":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"range"},addTags:{landuse:"military",military:"range"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Military Range"},"landuse/military/training_area":{icon:"temaki-military",fields:["name"],geometry:["point","area"],tags:{military:"training_area"},addTags:{landuse:"military",military:"training_area"},terms:["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],name:"Training Area"},"landuse/orchard":{icon:"maki-park",fields:["name","operator","trees"],moreFields:["address","email","fax","phone","species/wikidata","website"],geometry:["area"],tags:{landuse:"orchard"},terms:["fruit"],name:"Orchard"},"landuse/plant_nursery":{icon:"maki-garden",fields:["name","operator","plant"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"plant_nursery"},terms:["flower","garden","grow","vivero"],name:"Plant Nursery"},"landuse/quarry":{geometry:["area"],fields:["name","operator","resource"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"maki-rail",fields:["operator"],geometry:["area"],tags:{landuse:"railway"},terms:["rail","train","track"],name:"Railway Corridor"},"landuse/recreation_ground":{icon:"maki-pitch",geometry:["area"],fields:["name"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"recreation_ground"},terms:["playing fields"],name:"Recreation Ground"},"landuse/religious":{icon:"maki-place-of-worship",geometry:["area"],fields:["name","religion","denomination"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"religious"},terms:[],name:"Religious Area"},"landuse/residential":{icon:"maki-building",fields:["name","residential"],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","email","fax","phone","website"],tags:{landuse:"retail"},matchScore:0.9,name:"Retail Area"},"landuse/vineyard":{icon:"temaki-grapes",fields:["name","operator","grape_variety"],moreFields:["address","email","fax","phone","website"],geometry:["area"],tags:{landuse:"vineyard"},addTags:{landuse:"vineyard",crop:"grape"},removeTags:{landuse:"vineyard",crop:"grape",grape_variety:"*"},terms:["grape","wine"],name:"Vineyard"},"landuse/winter_sports":{icon:"fas-skiing",geometry:["area"],fields:["name","operator"],moreFields:["access_simple","address","opening_hours"],tags:{landuse:"winter_sports"},terms:["piste area","ski area","ski hill","ski mountain","ski resort","snow board area","snowboard area"],name:"Winter Sports Area"},"leisure/adult_gaming_centre":{icon:"temaki-casino",fields:["{amenity/casino}"],moreFields:["{amenity/casino}"],geometry:["point","area"],terms:["gambling","slot machine"],tags:{leisure:"adult_gaming_centre"},name:"Adult Gaming Center"},"leisure/amusement_arcade":{icon:"maki-gaming",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","email","fax","level","max_age","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["pay-to-play games","video games","driving simulators","pinball machines"],tags:{leisure:"amusement_arcade"},name:"Amusement Arcade"},"leisure/bandstand":{icon:"fas-music",fields:["name","building_area","operator"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bandstand"},name:"Bandstand"},"leisure/beach_resort":{icon:"fas-umbrella-beach",fields:["name","address","opening_hours","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","phone","smoking","website"],geometry:["point","area"],tags:{leisure:"beach_resort"},name:"Beach Resort"},"leisure/bird_hide":{icon:"temaki-binoculars",fields:["name","building_area","address","opening_hours"],moreFields:["website"],geometry:["point","area"],tags:{leisure:"bird_hide"},terms:["machan","ornithology"],name:"Bird Hide"},"leisure/bleachers":{icon:"temaki-bleachers",geometry:["area"],tags:{leisure:"bleachers"},terms:["crowd","bench","sports","stand","stands","seat","seating"],name:"Bleachers"},"leisure/bowling_alley":{icon:"temaki-bowling",fields:["name","operator","address","building_area"],moreFields:["air_conditioning","email","fax","level","min_age","opening_hours","payment_multi","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["bowling center"],tags:{leisure:"bowling_alley"},name:"Bowling Alley"},"leisure/common":{icon:"temaki-pedestrian",fields:["name"],moreFields:["website"],geometry:["point","area"],terms:["open space"],tags:{leisure:"common"},name:"Common"},"leisure/dance":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","level","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["ballroom","jive","swing","tango","waltz"],tags:{leisure:"dance"},name:"Dance Hall"},"leisure/dancing_school":{icon:"fas-music",fields:["name","operator","address","building_area","dance/style"],moreFields:["email","fax","level","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["jive","swing","tango","waltz","dance teaching"],tags:{leisure:"dance","dance:teaching":"yes"},reference:{key:"leisure",value:"dance"},name:"Dance School"},"leisure/disc_golf_course":{icon:"temaki-disc_golf_basket",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee","opening_hours"],moreFields:["address","dog","email","fax","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:["email","fax","phone","website"],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","level","phone","smoking","wheelchair"],geometry:["point","area"],terms:["escape game","escape the room","puzzle room","quest room"],tags:{leisure:"escape_game"},name:"Escape Room"},"leisure/firepit":{icon:"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","email","fax","fee","opening_hours","payment_multi","phone","website"],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","wheelchair","blind"],moreFields:["access_simple","opening_hours"],geometry:["point","area"],tags:{leisure:"fitness_station"},addTags:{leisure:"fitness_station",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Outdoor Fitness Station"},"leisure/fitness_station/balance_beam":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"balance_beam"},addTags:{leisure:"fitness_station",fitness_station:"balance_beam",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["balance","exercise","fitness","gym","trim trail"],name:"Exercise Balance Beam"},"leisure/fitness_station/box":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"box"},addTags:{leisure:"fitness_station",fitness_station:"box",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["box","exercise","fitness","gym","jump","trim trail"],name:"Exercise Box"},"leisure/fitness_station/horizontal_bar":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_bar"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_bar",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","pullup","pull up","trim trail"],name:"Exercise Horizontal Bar"},"leisure/fitness_station/horizontal_ladder":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"horizontal_ladder"},addTags:{leisure:"fitness_station",fitness_station:"horizontal_ladder",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","chinup","chin up","exercise","fitness","gym","ladder","monkey bars","pullup","pull up","trim trail"],name:"Exercise Monkey Bars"},"leisure/fitness_station/hyperextension":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"hyperextension"},addTags:{leisure:"fitness_station",fitness_station:"hyperextension",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["back","exercise","extension","fitness","gym","roman chair","trim trail"],name:"Hyperextension Station"},"leisure/fitness_station/parallel_bars":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"parallel_bars"},addTags:{leisure:"fitness_station",fitness_station:"parallel_bars",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","dip","exercise","fitness","gym","trim trail"],name:"Parallel Bars"},"leisure/fitness_station/push-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"push-up"},addTags:{leisure:"fitness_station",fitness_station:"push-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["bar","exercise","fitness","gym","pushup","push up","trim trail"],name:"Push-Up Station"},"leisure/fitness_station/rings":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"rings"},addTags:{leisure:"fitness_station",fitness_station:"rings",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","muscle up","pullup","pull up","trim trail"],name:"Exercise Rings"},"leisure/fitness_station/sign":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sign"},addTags:{leisure:"fitness_station",fitness_station:"sign",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","trim trail"],name:"Exercise Instruction Sign"},"leisure/fitness_station/sit-up":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"sit-up"},addTags:{leisure:"fitness_station",fitness_station:"sit-up",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["crunch","exercise","fitness","gym","situp","sit up","trim trail"],name:"Sit-Up Station"},"leisure/fitness_station/stairs":{icon:"maki-pitch",geometry:["point","area"],tags:{leisure:"fitness_station",fitness_station:"stairs"},addTags:{leisure:"fitness_station",fitness_station:"stairs",sport:"fitness"},reference:{key:"leisure",value:"fitness_station"},terms:["exercise","fitness","gym","steps","trim trail"],name:"Exercise Stairs"},"leisure/garden":{icon:"maki-garden",fields:["name","operator","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","phone","website"],geometry:["point","vertex","area"],tags:{leisure:"garden"},name:"Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours"],moreFields:["email","fax","payment_multi","phone","website"],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","level","phone","smoking","wheelchair"],geometry:["point","area"],terms:["makerspace","hackspace","hacklab"],tags:{leisure:"hackerspace"},name:"Hackerspace"},"leisure/horse_riding":{icon:"maki-horse-riding",fields:["name","access_simple","operator","address","building"],moreFields:["email","fax","opening_hours","payment_multi","phone","website"],geometry:["point","area"],terms:["equestrian","stable"],tags:{leisure:"horse_riding"},name:"Horseback Riding Facility"},"leisure/ice_rink":{icon:"fas-skating",fields:["name","seasonal","sport_ice","operator","address","building"],moreFields:["email","fax","level","opening_hours","payment_multi","phone","website"],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","email","fax","internet_access","internet_access/fee","internet_access/ssid","phone","seamark/type","website"],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:["email","fax","phone","website"],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","email","fax","phone","website"],tags:{leisure:"nature_reserve"},terms:["protected","wildlife"],name:"Nature Reserve"},"leisure/outdoor_seating":{icon:"maki-picnic-site",geometry:["point","area"],fields:["name","operator"],moreFields:["level"],terms:["al fresco","beer garden","dining","cafe","restaurant","pub","bar","patio"],tags:{leisure:"outdoor_seating"},name:"Outdoor Seating Area"},"leisure/park":{icon:"maki-park",fields:["name","operator","address","opening_hours"],moreFields:["dog","email","fax","phone","smoking","website"],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"],moreFields:["level"],geometry:["point"],tags:{leisure:"picnic_table"},terms:["bench"],name:"Picnic Table"},"leisure/picnic_table/chess":{icon:"fas-chess-pawn",geometry:["point"],tags:{leisure:"picnic_table",sport:"chess"},reference:{key:"sport",value:"chess"},terms:["bench","chess board","checkerboard","checkers","chequerboard","game table"],name:"Chess Table"},"leisure/pitch":{icon:"maki-pitch",fields:["name","sport","access_simple","surface","lit"],moreFields:["charge_fee","covered","fee","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","playground/theme","surface","access_simple","min_age","max_age"],moreFields:["blind","dog","wheelchair"],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:["email","fax","level","phone","website"],geometry:["point","area"],tags:{leisure:"sauna"},name:"Sauna"},"leisure/slipway_point":{icon:"maki-slipway",fields:["{leisure/slipway}"],moreFields:["{leisure/slipway}"],geometry:["point","vertex"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},name:"Slipway"},"leisure/slipway":{icon:"maki-slipway",fields:["name","surface","access_simple","fee","payment_multi_fee","charge_fee","lanes"],moreFields:["lit","opening_hours","seamark/type","width"],geometry:["line"],terms:["boat launch","boat ramp","boat landing"],tags:{leisure:"slipway"},addTags:{leisure:"slipway",highway:"service",service:"slipway"},matchScore:1.1,name:"Slipway"},"leisure/sports_centre":{icon:"maki-pitch",fields:["name","sport","building","address","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","opening_hours","phone","website"],geometry:["point","area"],tags:{leisure:"sports_centre"},terms:[],name:"Sports Center / Complex"},"leisure/sports_centre/climbing":{icon:"temaki-abseiling",geometry:["point","area"],terms:["abseiling","artificial climbing wall","belaying","bouldering","rock climbing facility","indoor rock wall","rappeling","rock gym","ropes"],tags:{leisure:"sports_centre",sport:"climbing"},reference:{key:"sport",value:"climbing"},name:"Climbing Gym"},"leisure/sports_centre/swimming":{icon:"fas-swimmer",geometry:["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:["email","fax","phone","website"],geometry:["point","area"],tags:{leisure:"stadium"},name:"Stadium"},"leisure/swimming_area":{icon:"fas-swimmer",fields:["name","access_simple","supervised","fee","payment_multi_fee","charge_fee","lit"],moreFields:["opening_hours","operator"],geometry:["area"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_area"},name:"Natural Swimming Area"},"leisure/swimming_pool":{icon:"fas-swimming-pool",fields:["name","access_simple","lit","location_pool","length","swimming_pool"],moreFields:["address","level","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","level"],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:["brand","email","fax","payment_multi","phone","website"],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/manhole":{icon:"temaki-manhole",fields:["manhole","operator","label","ref"],geometry:["point","vertex"],tags:{manhole:"*"},addTags:{man_made:"manhole",manhole:"*"},terms:["cover","hole","sewer","sewage","telecom"],name:"Manhole"},"man_made/manhole/drain":{icon:"temaki-manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"drain"},addTags:{man_made:"manhole",manhole:"drain"},terms:["cover","drain","hole","rain","sewer","sewage","storm"],name:"Storm Drain"},"man_made/manhole/gas":{icon:"temaki-gas_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"gas"},addTags:{man_made:"manhole",manhole:"gas"},terms:["cover","gas","heat","hole","utility"],name:"Gas Utility Manhole"},"man_made/manhole/power":{icon:"temaki-power_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"power"},addTags:{man_made:"manhole",manhole:"power"},terms:["cover","hole","electric","hole","power","utility"],name:"Power Utility Manhole"},"man_made/manhole/sewer":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"sewer"},addTags:{man_made:"manhole",manhole:"sewer"},terms:["cover","drain","hole","sewer","sewage","utility"],name:"Sewer Utility Manhole"},"man_made/manhole/telecom":{icon:"temaki-cable_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"telecom"},addTags:{man_made:"manhole",manhole:"telecom"},terms:["bt","cable","cover","phone","hole","telecom","telephone","utility"],name:"Telecom Utility Manhole"},"man_made/manhole/water":{icon:"temaki-waste_manhole",fields:["operator","ref"],geometry:["point","vertex"],tags:{manhole:"water"},addTags:{man_made:"manhole",manhole:"water"},terms:["cover","drinking","hole","utility","water"],name:"Water Utility Manhole"},"man_made/mast":{icon:"maki-communications-tower",fields:["tower/type","tower/construction","height"],moreFields:["communication_multi","manufacturer","material"],geometry:["point"],terms:["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],tags:{man_made:"mast"},name:"Mast"},"man_made/mast/communication":{icon:"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:["email","fax","phone","website"],geometry:["point","area"],terms:["astronomical","meteorological"],tags:{man_made:"observatory"},name:"Observatory"},"man_made/petroleum_well":{icon:"temaki-oil_well",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:["{highway/footway}","access","fishing","incline"],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"},name:"Floating Pier"},"man_made/pipeline":{icon:"iD-pipeline-line",fields:["operator","location","substance","layer","diameter"],geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline"},name:"Pipeline"},"man_made/pipeline/underground":{icon:"iD-pipeline-line",geometry:["line"],terms:["oil","natural gas","water","sewer","sewage"],tags:{man_made:"pipeline",location:"underground"},addTags:{man_made:"pipeline",location:"underground",layer:"-1"},name:"Underground Pipeline"},"man_made/pipeline/valve":{icon:"temaki-wheel",geometry:["vertex"],fields:["ref","operator","valve","location","diameter"],moreFields:["colour","manufacturer","material"],terms:["oil","natural gas","water","sewer","sewage"],tags:{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/utility_pole":{icon:"temaki-utility_pole",fields:["ref","operator","height","material"],moreFields:["colour","manufacturer"],geometry:["point","vertex"],tags:{man_made:"utility_pole"},name:"Utility Pole"},"man_made/wastewater_plant":{icon:"temaki-waste",fields:["name","operator","address"],moreFields:["email","fax","phone","website"],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:["email","fax","phone","website"],geometry:["point","area"],terms:["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],tags:{man_made:"works"},name:"Factory"},"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"],moreFields:["level"],geometry:["point","area"],tags:{military:"office"},terms:["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],name:"Military Office"},"military/trench":{icon:"temaki-military",fields:["name","trench"],geometry:["point","line"],tags:{military:"trench"},terms:["dugout","firestep","fox hole","infantry trench","war trench"],name:"Military Trench"},"natural/bare_rock":{geometry:["area"],tags:{natural:"bare_rock"},terms:["rock"],name:"Bare Rock"},"natural/bay":{icon:"temaki-beach",geometry:["point","line","area"],fields:["name"],tags:{natural:"bay"},terms:[],name:"Bay"},"natural/beach":{icon:"temaki-beach",fields:["surface"],geometry:["point","area"],tags:{natural:"beach"},terms:["shore"],name:"Beach"},"natural/cape":{icon:"temaki-beach",fields:["name","elevation","description"],geometry:["point"],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:"temaki-waste",geometry:["area"],tags:{natural:"water",water:"wastewater"},reference:{key:"water",value:"wastewater"},terms:["excrement","shit","sewage","wastewater","Settling Basin","Clarifier Basin"],name:"Wastewater Basin"},"natural/wetland":{icon:"maki-wetland",fields:["wetland","salt","tidal"],geometry:["point","area"],tags:{natural:"wetland"},terms:["bog","fen","marsh","mire","moor","muskeg","peatland","quagmire","reedbed","saltmarsh","swamp","tidalflat","wet meadow"],name:"Wetland"},"natural/wood":{icon:"maki-park-alt1",fields:["name","leaf_type","leaf_cycle"],geometry:["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","email","fax","height_building","internet_access","internet_access/fee","internet_access/ssid","level","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"},searchable:false,name:"Administrative Office"},"office/physician":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"physician"},searchable:false,name:"Physician"},"office/travel_agent":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"travel_agent"},reference:{key:"shop",value:"travel_agency"},name:"Travel Agency",searchable:false},"office/accountant":{icon:"temaki-accounting",geometry:["point","area"],tags:{office:"accountant"},terms:[],name:"Accountant Office"},"office/adoption_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"adoption_agency"},terms:[],name:"Adoption Agency"},"office/advertising_agency":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"advertising_agency"},terms:["ad","ad agency","advert agency","advertising","marketing"],name:"Advertising Agency"},"office/architect":{icon:"fas-drafting-compass",geometry:["point","area"],tags:{office:"architect"},terms:[],name:"Architect Office"},"office/association":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"association"},terms:["association","non-profit","nonprofit","organization","society"],name:"Nonprofit Organization Office"},"office/bail_bond_agent":{icon:"maki-bank",moreFields:["{office}","currency_multi","payment_multi"],geometry:["point","area"],tags:{office:"bail_bond_agent"},terms:["bail bond dealer","bail bond man","bail bondsman","bail bondsperson"],name:"Bail Bond Agent"},"office/charity":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"charity"},terms:["charitable organization"],name:"Charity Office"},"office/company":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"company"},terms:[],name:"Corporate Office"},"office/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:"fas-flask",geometry:["point","area"],tags:{office:"research"},terms:["R and D","research and development","research lab"],name:"Research Office"},"office/surveyor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"surveyor"},terms:[],name:"Surveyor Office"},"office/tax_advisor":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"tax_advisor"},terms:["tax","tax consultant"],name:"Tax Advisor Office"},"office/telecommunication":{icon:"maki-telephone",geometry:["point","area"],tags:{office:"telecommunication"},terms:["communication","internet service provider","isp","network","telephone","voice"],name:"Telecom Office"},"office/therapist":{icon:"maki-suitcase",geometry:["point","area"],tags:{office:"therapist"},terms:["therapy"],name:"Therapist Office"},"office/water_utility":{icon:"maki-suitcase",fields:["{office}","operator"],geometry:["point","area"],tags:{office:"water_utility"},terms:["water board","utility"],name:"Water Utility Office"},"piste/downhill":{icon:"fas-skiing",fields:["name","piste/type","piste/difficulty_downhill","piste/grooming_downhill","oneway","lit"],geometry:["line","area"],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",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:["{playground}","bench"],geometry:["point","area"],tags:{playground:"roundabout"},name:"Play Roundabout",terms:["merry-go-round"]},"playground/sandpit":{icon:"maki-playground",geometry:["point","area"],tags:{playground:"sandpit"},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","baby_seat","wheelchair","blind"],geometry:["point"],tags:{playground:"swing"},name:"Swing"},"playground/zipwire":{icon:"maki-playground",geometry:["point","line"],tags:{playground:"zipwire"},name:"Zip Wire"},point:{fields:["name"],geometry:["vertex","point"],tags:{},terms:["node","other","vertex","vertices"],name:"Point",matchScore:0.1},polling_station:{icon:"fas-vote-yea",fields:["name","ref","operator","address","opening_hours","building_area"],moreFields:["air_conditioning","email","fax","internet_access","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],terms:["ballot box","ballot drop","democracy","elections","polling place","vote","voting booth","voting machine"],tags:{polling_station:"*"},matchScore:0.75,name:"Temporary Polling Place"},"power/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:["level","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","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],tags:{power:"pole"},name:"Power Pole"},"power/substation":{icon:"temaki-power",fields:["substation","operator","building","ref"],geometry:["point","area"],tags:{power:"substation"},name:"Substation"},"power/switch":{icon:"temaki-power_switch",fields:["switch","operator","location","cables","voltage","ref"],geometry:["point","vertex"],tags:{power:"switch"},name:"Power Switch"},"power/tower":{icon:"temaki-power_tower",fields:["ref","operator","design","height","material","line_attachment"],moreFields:["manufacturer"],geometry:["point","vertex"],terms:["power"],tags:{power:"tower"},matchScore:1.05,name:"High-Voltage Tower"},"power/transformer":{icon:"temaki-power_transformer",fields:["ref","operator","transformer","location","rating","devices","phases"],moreFields:["frequency","manufacturer","voltage/primary","voltage/secondary","voltage/tertiary","windings","windings/configuration"],geometry:["point","vertex"],tags:{power:"transformer"},name:"Transformer"},"public_transport/platform_point":{icon:"maki-rail",fields:["name","network","operator","departures_board","shelter"],moreFields:["bench","bin","level","lit","wheelchair"],geometry:["point"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Stop / Platform",matchScore:0.6},"public_transport/platform":{icon:"temaki-pedestrian",fields:["ref_platform","network","operator","departures_board","surface"],moreFields:["access","covered","indoor","layer","level","lit","wheelchair"],geometry:["line","area"],tags:{public_transport:"platform"},terms:["platform","public transit","public transportation","transit","transportation"],name:"Transit Platform",matchScore:0.6},"public_transport/platform/aerialway_point":{icon:"maki-aerialway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",aerialway:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Aerialway Stop / Platform"},"public_transport/platform/ferry_point":{icon:"maki-ferry",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",ferry:"yes"},reference:{key:"public_transport",value:"platform"},searchable:false,name:"Ferry Stop / Platform"},"public_transport/platform/light_rail_point":{icon:"temaki-light_rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",light_rail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Light Rail Stop / Platform"},"public_transport/platform/monorail_point":{icon:"temaki-monorail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",monorail:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Monorail Stop / Platform"},"public_transport/platform/subway_point":{icon:"temaki-subway",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",subway:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Subway Stop / Platform"},"public_transport/platform/train_point":{icon:"maki-rail",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],geometry:["point"],tags:{public_transport:"platform",train:"yes"},reference:{key:"railway",value:"platform"},searchable:false,name:"Train Stop / Platform"},"public_transport/platform/aerialway":{icon:"temaki-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","email","fax","internet_access/fee","internet_access/ssid","level","phone","website","wheelchair"],geometry:["point","area"],tags:{public_transport:"station"},terms:["public transit","public transportation","station","terminal","transit","transportation"],name:"Transit Station",matchScore:0.2},"public_transport/stop_area":{icon:"iD-relation",fields:["name","ref","network","operator"],geometry:["relation"],tags:{type:"public_transport",public_transport:"stop_area"},reference:{key:"public_transport",value:"stop_area"},name:"Transit Stop Area"},"public_transport/stop_position_aerialway":{icon:"maki-aerialway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",aerialway:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["aerialway","cable car","public transit","public transportation","transit","transportation"],name:"Aerialway Stopping Location"},"public_transport/stop_position_bus":{icon:"maki-bus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",bus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","public transit","public transportation","transit","transportation"],name:"Bus Stopping Location"},"public_transport/stop_position_ferry":{icon:"maki-ferry",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",ferry:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["boat","dock","ferry","pier","public transit","public transportation","transit","transportation"],name:"Ferry Stopping Location"},"public_transport/stop_position_light_rail":{icon:"temaki-light_rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",light_rail:"yes"},addTags:{public_transport:"stop_position",light_rail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["electric","light rail","public transit","public transportation","rail","track","tram","trolley","transit","transportation"],name:"Light Rail Stopping Location"},"public_transport/stop_position_monorail":{icon:"temaki-monorail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",monorail:"yes"},addTags:{public_transport:"stop_position",monorail:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["monorail","public transit","public transportation","rail","transit","transportation"],name:"Monorail Stopping Location"},"public_transport/stop_position_subway":{icon:"temaki-subway",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",subway:"yes"},addTags:{public_transport:"stop_position",subway:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["metro","public transit","public transportation","rail","subway","track","transit","transportation","underground"],name:"Subway Stopping Location"},"public_transport/stop_position_train":{icon:"maki-rail",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",train:"yes"},addTags:{public_transport:"stop_position",train:"yes",railway:"stop"},reference:{key:"railway",value:"stop"},terms:["public transit","public transportation","rail","track","train","transit","transportation"],name:"Train Stopping Location"},"public_transport/stop_position_tram":{icon:"temaki-tram",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",tram:"yes"},addTags:{public_transport:"stop_position",tram:"yes",railway:"tram_stop"},reference:{key:"public_transport",value:"stop_position"},terms:["electric","light rail","public transit","public transportation","rail","streetcar","track","tram","trolley","transit","transportation"],name:"Tram Stopping Location"},"public_transport/stop_position_trolleybus":{icon:"temaki-trolleybus",fields:["{public_transport/stop_position}"],moreFields:["{public_transport/stop_position}"],geometry:["vertex"],tags:{public_transport:"stop_position",trolleybus:"yes"},reference:{key:"public_transport",value:"stop_position"},terms:["bus","electric","public transit","public transportation","streetcar","trackless","tram","trolley","transit","transportation"],name:"Trolleybus Stopping Location"},"public_transport/stop_position":{icon:"maki-bus",fields:["name","ref_stop_position","network","operator"],moreFields:["level"],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"maki-rail",geometry:["point","vertex"],tags:{railway:"halt"},name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-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:["{public_transport/station}"],moreFields:["{public_transport/station}"],geometry:["point","vertex","area"],tags:{railway:"station"},matchScore:0.95,name:"Train Station",searchable:false},"railway/tram_stop":{icon:"temaki-tram",fields:["name","network","operator"],geometry:["vertex"],tags:{railway:"tram_stop"},name:"Tram Stopping Position",searchable:false},"railway/abandoned":{icon:"iD-railway-abandoned",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"abandoned"},terms:[],matchScore:0.85,name:"Abandoned Railway"},"railway/buffer_stop":{icon:"temaki-buffer_stop",geometry:["vertex"],tags:{railway:"buffer_stop"},terms:["stop","halt","buffer"],name:"Buffer Stop"},"railway/construction":{icon:"iD-railway-rail",fields:["name","opening_date","check_date","note","structure","gauge","electrified"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","service_rail","usage_rail","voltage_electrified"],geometry:["line"],tags:{railway:"construction"},name:"Railway Under Construction"},"railway/crossing":{icon:"temaki-pedestrian",geometry:["vertex"],tags:{railway:"crossing"},terms:["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],name:"Railway Crossing (Path)"},"railway/derail":{icon:"maki-roadblock",geometry:["vertex"],tags:{railway:"derail"},terms:["derailer"],name:"Railway Derailer"},"railway/disused":{icon:"iD-railway-disused",fields:["operator","structure","service_rail","usage_rail"],moreFields:["covered"],geometry:["line"],tags:{railway:"disused"},terms:[],name:"Disused Railway"},"railway/funicular":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","service_rail"],moreFields:["covered"],geometry:["line"],terms:["venicular","cliff railway","cable car","cable railway","funicular railway"],tags:{railway:"funicular"},name:"Funicular"},"railway/level_crossing":{icon:"maki-cross",geometry:["vertex"],tags:{railway:"level_crossing"},terms:["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],name:"Railway Crossing (Road)"},"railway/light_rail":{icon:"temaki-light_rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail"},"railway/milestone":{icon:"temaki-milestone",geometry:["point","vertex"],fields:["railway/position","direction_vertex"],tags:{railway:"milestone"},terms:["milestone","marker"],name:"Railway Milestone"},"railway/miniature":{icon:"iD-railway-rail",fields:["name","structure","gauge","electrified","service_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Railway"},"railway/monorail":{icon:"temaki-monorail",fields:["name","operator","structure","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"monorail"},terms:[],name:"Monorail"},"railway/narrow_gauge":{icon:"iD-railway-rail",fields:["{railway/rail}"],moreFields:["covered","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Rail"},"railway/rail":{icon:"iD-railway-rail",fields:["name","operator","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","highspeed","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"rail"},terms:["rail line","railroad track","train track"],name:"Rail"},"railway/rail/highspeed":{icon:"iD-railway-rail",geometry:["line"],tags:{railway:"rail",highspeed:"yes"},reference:{key:"highspeed"},terms:["bullet train","fast rail","high speed rail","highspeed rail","HSR"],name:"High-Speed Rail"},"railway/signal":{icon:"temaki-railway_signals",geometry:["point","vertex"],fields:["railway/position","railway/signal/direction","ref"],tags:{railway:"signal"},terms:["signal","lights"],name:"Railway Signal"},"railway/subway_entrance":{icon:"maki-entrance",geometry:["point","vertex"],fields:["name","level"],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","currency_multi","email","fax","height_building","internet_access","internet_access/fee","internet_access/ssid","level","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"],tags:{shop:"furnace"},name:"Furnace Store",searchable:false},"shop/vacant":{icon:"maki-shop",fields:["name","address","building_area"],geometry:["point","area"],tags:{shop:"vacant"},name:"Vacant Shop",searchable:false},"shop/agrarian":{icon:"fas-tractor",fields:["{shop}","agrarian"],geometry:["point","area"],terms:["agricultural inputs","agricultural machines","seeds","pesticides","fertilizer","agricultural tools"],tags:{shop:"agrarian"},name:"Farm Supply Shop"},"shop/alcohol":{icon:"fas-wine-bottle",fields:["{shop}","drive_through"],moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["alcohol","beer","booze","wine"],tags:{shop:"alcohol"},name:"Liquor Store"},"shop/anime":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"anime"},terms:["manga","japan","cosplay","figurine","dakimakura"],name:"Anime Shop"},"shop/antiques":{icon:"temaki-furniture",geometry:["point","area"],tags:{shop:"antiques"},name:"Antiques Shop"},"shop/appliance":{icon:"temaki-laundry",geometry:["point","area"],terms:["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],tags:{shop:"appliance"},name:"Appliance Store"},"shop/art":{icon:"maki-shop",geometry:["point","area"],terms:["art*","exhibit*","gallery"],tags:{shop:"art"},name:"Art Store"},"shop/baby_goods":{icon:"fas-baby-carriage",geometry:["point","area"],tags:{shop:"baby_goods"},name:"Baby Goods Store"},"shop/bag":{icon:"fas-suitcase-rolling",geometry:["point","area"],terms:["handbag","purse"],tags:{shop:"bag"},name:"Bag/Luggage Store"},"shop/bakery":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"bakery"},terms:["bread","cakes","rolls"],name:"Bakery"},"shop/bathroom_furnishing":{icon:"fas-bath",geometry:["point","area"],tags:{shop:"bathroom_furnishing"},name:"Bathroom Furnishing Store"},"shop/beauty":{icon:"temaki-lipstick",fields:["{shop}","beauty"],geometry:["point","area"],terms:["spa","salon","tanning"],tags:{shop:"beauty"},name:"Beauty Shop"},"shop/beauty/nails":{icon:"maki-shop",geometry:["point","area"],terms:["manicure","pedicure"],tags:{shop:"beauty",beauty:"nails"},reference:{key:"shop",value:"beauty"},name:"Nail Salon"},"shop/beauty/tanning":{icon:"temaki-tanning",geometry:["point","area"],tags:{shop:"beauty",beauty:"tanning"},reference:{key:"leisure",value:"tanning_salon"},name:"Tanning Salon"},"shop/bed":{icon:"maki-lodging",geometry:["point","area"],tags:{shop:"bed"},name:"Bedding/Mattress Store"},"shop/beverages":{icon:"temaki-bottles",geometry:["point","area"],tags:{shop:"beverages"},terms:["drinks"],name:"Beverage Store"},"shop/bicycle":{icon:"maki-bicycle",fields:["{shop}","service/bicycle"],geometry:["point","area"],terms:["bike","repair","tricycle","unicycle"],tags:{shop:"bicycle"},name:"Bicycle Shop"},"shop/boat":{icon:"temaki-boating",geometry:["point","area"],terms:["fishing boat","jetski","motorboat","rowboat","sailboat","vessel","watercraft"],tags:{shop:"boat"},name:"Boat Store"},"shop/bookmaker":{icon:"temaki-money_hand",moreFields:["{shop}","min_age"],geometry:["point","area"],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/brewing_supplies":{icon:"temaki-storage_fermenter",geometry:["point","area"],terms:["brew shop","homebrew supply store"],tags:{shop:"brewing_supplies"},name:"Brewing Supply Store"},"shop/butcher":{icon:"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",moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["420","marijuana","pot","reefer","weed"],tags:{shop:"cannabis"},name:"Cannabis Shop"},"shop/car_parts":{icon:"fas-car-battery",geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car_parts"},name:"Car Parts Store"},"shop/car_repair":{icon:"maki-car-repair",fields:["{shop}","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive","garage","service"],tags:{shop:"car_repair"},name:"Car Repair Shop"},"shop/car":{icon:"maki-car",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],terms:["automobile","automotive"],tags:{shop:"car"},name:"Car Dealership"},"shop/caravan":{icon:"temaki-rv_park",fields:["name","brand","{shop}","second_hand","service/vehicle"],geometry:["point","area"],tags:{shop:"caravan"},terms:["auto","camper","recreational vehicle"],name:"RV Dealership"},"shop/carpet":{icon:"fas-tape",geometry:["point","area"],terms:["rug"],tags:{shop:"carpet"},name:"Carpet Store"},"shop/catalogue":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"catalogue"},name:"Catalog Shop"},"shop/charity":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["thrift","op shop","nonprofit"],tags:{shop:"charity"},name:"Charity Store"},"shop/cheese":{icon:"fas-cheese",geometry:["point","area"],tags:{shop:"cheese"},name:"Cheese Store"},"shop/chemist":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"chemist"},terms:["apothecary","beauty","drug store","drugstore","gift","hair","med*","pharmacy","prescription","tooth"],name:"Drugstore"},"shop/chocolate":{icon:"temaki-chocolate",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:"temaki-coffee",geometry:["point","area"],tags:{shop:"coffee"},name:"Coffee Store"},"shop/computer":{icon:"fas-laptop",geometry:["point","area"],tags:{shop:"computer"},terms:["desktop","laptop","hardware","operating system","software"],name:"Computer Store"},"shop/confectionery":{icon:"maki-confectionery",geometry:["point","area"],terms:["sweet"],tags:{shop:"confectionery"},name:"Candy Store"},"shop/convenience":{icon:"fas-shopping-basket",geometry:["point","area"],tags:{shop:"convenience"},name:"Convenience Store"},"shop/copyshop":{icon:"fas-print",geometry:["point","area"],tags:{shop:"copyshop"},terms:["print","scan"],name:"Copy Store"},"shop/cosmetics":{icon:"temaki-lipstick",geometry:["point","area"],tags:{shop:"cosmetics"},terms:["make-up","makeup"],name:"Cosmetics Store"},"shop/country_store":{icon:"fas-hat-cowboy-side",geometry:["point","area"],tags:{shop:"country_store"},name:"Country Store"},"shop/craft":{icon:"fas-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",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"e-cigarette"},terms:["electronic","vape","vaping","vapor"],name:"E-Cigarette Shop"},"shop/electrical":{icon:"temaki-power",geometry:["point","area"],terms:["cable","electric","fan","LED","lighting","power","wire"],tags:{shop:"electrical"},name:"Electrical Equipment Store"},"shop/electronics":{icon:"fas-plug",geometry:["point","area"],terms:["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],tags:{shop:"electronics"},name:"Electronics Store"},"shop/erotic":{icon:"maki-shop",fields:["{shop}","min_age"],geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic"},name:"Erotic Store"},"shop/erotic/lgbtq":{icon:"maki-shop",geometry:["point","area"],terms:["sex","porn"],tags:{shop:"erotic",lgbtq:"primary"},name:"LGBTQ+ Erotic Store"},"shop/fabric":{icon:"fas-tape",geometry:["point","area"],terms:["sew"],tags:{shop:"fabric"},name:"Fabric Store"},"shop/farm":{icon:"fas-apple-alt",geometry:["point","area"],terms:["baked goods","farm shop","farm stand","fresh food","fruits","greengrocer","organics","vegetables"],tags:{shop:"farm"},name:"Produce Stand"},"shop/fashion_accessories":{icon:"temaki-fashion_accessories",fields:["name","clothes","{shop}"],geometry:["point","area"],tags:{shop:"fashion_accessories"},terms:["bag","cologne","fragrance","hat","jewellery","purfume","purse","scarf","sunglasses","umbrella","wallet","watch"],name:"Fashion Accessories Store"},"shop/fireplace":{icon:"maki-shop",geometry:["point","area"],terms:["fireplace","stove","masonry heater"],tags:{shop:"fireplace"},name:"Fireplace Store"},"shop/fishing":{icon:"temaki-ice_fishing",geometry:["point","area"],tags:{shop:"fishing"},terms:["bait","fishing line","flies","fly","lure","reel","rod","tackle"],name:"Fishing Shop"},"shop/florist":{icon:"maki-florist",geometry:["point","area"],terms:["flower"],tags:{shop:"florist"},name:"Florist"},"shop/frame":{icon:"fas-vector-square",geometry:["point","area"],tags:{shop:"frame"},terms:["art*","paint*","photo*","frame"],name:"Framing Shop"},"shop/frozen_food":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"frozen_food"},name:"Frozen Food"},"shop/fuel":{icon:"temaki-propane_tank",fields:["{shop}","fuel_multi"],geometry:["point","area"],tags:{shop:"fuel"},name:"Fuel Shop",matchScore:0.5},"shop/funeral_directors":{icon:"maki-cemetery",fields:["{shop}","religion","denomination"],geometry:["point","area"],terms:["undertaker","memorial home"],tags:{shop:"funeral_directors"},name:"Funeral Home"},"shop/furniture":{icon:"fas-couch",geometry:["point","area"],terms:["chair","sofa","table"],tags:{shop:"furniture"},name:"Furniture Store"},"shop/games":{icon:"fas-dice",geometry:["point","area"],tags:{shop:"games"},terms:["board game","card game","dice game","game shop","live action role-playing game","miniatures wargame","strategy game"],name:"Tabletop Game Store"},"shop/garden_centre":{icon:"maki-garden-centre",geometry:["point","area"],terms:["landscape","mulch","shrub","tree"],tags:{shop:"garden_centre"},name:"Garden Center"},"shop/gas":{icon:"temaki-propane_tank",geometry:["point","area"],terms:["cng","lpg","natural gas","propane","refill","tank"],tags:{shop:"gas"},name:"Bottled Gas Shop"},"shop/general":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"general"},terms:["village shop"],name:"General Store"},"shop/gift":{icon:"maki-gift",geometry:["point","area"],terms:["souvenir"],tags:{shop:"gift"},name:"Gift Shop"},"shop/greengrocer":{icon:"fas-carrot",geometry:["point","area"],terms:["fruit","produce","vegetable"],tags:{shop:"greengrocer"},name:"Greengrocer"},"shop/hairdresser_supply":{icon:"temaki-hair_care",geometry:["point","area"],terms:["barber","shampoo","conditioner"],tags:{shop:"hairdresser_supply"},name:"Hairdresser Supply Store"},"shop/hairdresser":{icon:"temaki-beauty_salon",geometry:["point","area"],terms:["barber"],tags:{shop:"hairdresser"},name:"Hairdresser"},"shop/hardware":{icon:"temaki-tools",geometry:["point","area"],tags:{shop:"hardware"},name:"Hardware Store"},"shop/health_food":{icon:"maki-shop",geometry:["point","area"],terms:["wholefood","vitamins","vegetarian","vegan"],tags:{shop:"health_food"},name:"Health Food Shop"},"shop/hearing_aids":{icon:"temaki-hearing_aid",geometry:["point","area"],tags:{shop:"hearing_aids"},name:"Hearing Aids Store"},"shop/herbalist":{icon:"fas-leaf",geometry:["point","area"],tags:{shop:"herbalist"},name:"Herbalist"},"shop/hifi":{icon:"temaki-speaker",geometry:["point","area"],terms:["audio","hi-fi","high fidelity","stereo","video"],tags:{shop:"hifi"},name:"Hifi Store"},"shop/hobby":{icon:"fas-dragon",geometry:["point","area"],tags:{shop:"hobby"},terms:["manga","figurine","model"],name:"Hobby Shop"},"shop/houseware":{icon:"fas-blender",geometry:["point","area"],terms:["home","household","kitchenware"],tags:{shop:"houseware"},name:"Houseware Store"},"shop/hunting":{icon:"temaki-binoculars",geometry:["point","area"],tags:{shop:"hunting"},terms:["arrows","bows","bullets","crossbows","rifles","traps"],name:"Hunting Shop"},"shop/interior_decoration":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"interior_decoration"},name:"Interior Decoration Store"},"shop/jewelry":{icon:"maki-jewelry-store",geometry:["point","area"],terms:["bracelet","diamond","earrings","gem","gold","jeweler","jewellery","jeweller","necklace","pins","ring","silver"],tags:{shop:"jewelry"},name:"Jewelry Store"},"shop/kiosk":{icon:"maki-shop",fields:["{shop}","levels"],geometry:["point","area"],tags:{shop:"kiosk"},name:"Kiosk"},"shop/kitchen":{icon:"temaki-kitchen_sink",geometry:["point","area"],tags:{shop:"kitchen"},terms:["cabinets","countertops","sinks"],name:"Kitchen Design Store"},"shop/laundry":{icon:"temaki-laundry",fields:["{shop}","self_service"],geometry:["point","area"],tags:{shop:"laundry"},name:"Laundry"},"shop/laundry/self_service":{icon:"temaki-laundry",geometry:["point","area"],tags:{shop:"laundry",self_service:"yes"},terms:["Coin Laundry","Laundromat","Coin Wash","Launderette","Washateria"],name:"Self-Service Laundry"},"shop/leather":{icon:"temaki-handbag",geometry:["point","area"],tags:{shop:"leather"},name:"Leather Store"},"shop/lighting":{icon:"temaki-bulb3",geometry:["point","area"],terms:["fluorescent lighting","lamps","LEDs","light fixtures","lightbulbs"],tags:{shop:"lighting"},name:"Lighting Store"},"shop/locksmith":{icon:"fas-key",geometry:["point","area"],terms:["key","lockpick"],tags:{shop:"locksmith"},name:"Locksmith"},"shop/lottery":{icon:"fas-ticket-alt",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:"fas-crutch",geometry:["point","area"],tags:{shop:"medical_supply"},name:"Medical Supply Store"},"shop/military_surplus":{icon:"temaki-military",geometry:["point","area"],terms:["armor","army-navy store","army surplus","navy surplus","tactical gear","war surplus shop","weapons"],tags:{shop:"military_surplus"},name:"Military Surplus Store"},"shop/mobile_phone":{icon:"fas-mobile-alt",geometry:["point","area"],tags:{shop:"mobile_phone"},name:"Mobile Phone Store"},"shop/money_lender":{icon:"temaki-money_hand",fields:["{shop}","currency_multi"],geometry:["point","area"],tags:{shop:"money_lender"},name:"Money Lender"},"shop/motorcycle_repair":{icon:"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:"fas-pills",geometry:["point","area"],terms:["health","supplement","vitamin"],tags:{shop:"nutrition_supplements"},name:"Nutrition Supplements Store"},"shop/optician":{icon:"maki-optician",geometry:["point","area"],terms:["eye","glasses"],tags:{shop:"optician"},name:"Optician"},"shop/organic":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"supermarket",organic:"only"},name:"Organic Goods Store"},"shop/outdoor":{icon:"temaki-compass",fields:["{shop}","clothes"],geometry:["point","area"],terms:["camping","climbing","hiking","outfitter","outdoor equipment","outdoor supplies"],tags:{shop:"outdoor"},name:"Outdoors Store"},"shop/outpost":{icon:"maki-shop",geometry:["point","area"],terms:["online","pick up","pickup"],tags:{shop:"outpost"},name:"Online Retailer Outpost"},"shop/paint":{icon:"fas-paint-roller",geometry:["point","area"],tags:{shop:"paint"},name:"Paint Store"},"shop/party":{icon:"temaki-balloon",geometry:["point","area"],terms:["balloons","costumes","decorations","invitations"],tags:{shop:"party"},name:"Party Supply Store"},"shop/pastry":{icon:"maki-bakery",geometry:["point","area"],tags:{shop:"pastry"},terms:["patisserie","cake shop","cakery"],name:"Pastry Shop"},"shop/pawnbroker":{icon:"temaki-money_hand",geometry:["point","area"],tags:{shop:"pawnbroker"},name:"Pawn Shop"},"shop/perfumery":{icon:"temaki-perfume",geometry:["point","area"],tags:{shop:"perfumery"},terms:["cologne","fragrance","purfume"],name:"Perfume Store"},"shop/pet_grooming":{icon:"maki-dog-park",geometry:["point","area"],terms:["cat","dog"],tags:{shop:"pet_grooming"},name:"Pet Grooming Store"},"shop/pet":{icon:"maki-dog-park",geometry:["point","area"],terms:["animal","cat","dog","fish","kitten","puppy","reptile"],tags:{shop:"pet"},name:"Pet Store"},"shop/photo":{icon:"fas-camera-retro",geometry:["point","area"],terms:["camera","film"],tags:{shop:"photo"},name:"Photography Store"},"shop/printer_ink":{icon:"fas-print",geometry:["point","area"],terms:["copier ink","fax ink","ink cartridges","toner"],tags:{shop:"printer_ink"},name:"Printer Ink Store"},"shop/psychic":{icon:"temaki-psychic",geometry:["point","area"],tags:{shop:"psychic"},terms:["astrology","crystal ball","divination","fortune teller","seer","spirit"],name:"Psychic"},"shop/pyrotechnics":{icon:"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:"fas-dolly",geometry:["point","area"],tags:{shop:"rental"},name:"Rental Shop"},"shop/scuba_diving":{icon:"temaki-scuba_diving",fields:["{shop}","scuba_diving"],geometry:["point","area"],terms:["diving","scuba"],tags:{shop:"scuba_diving"},name:"Scuba Diving Shop"},"shop/seafood":{icon:"temaki-fish_cleaning",geometry:["point","area"],terms:["fishmonger"],tags:{shop:"seafood"},name:"Seafood Shop"},"shop/second_hand":{icon:"maki-shop",fields:["{shop}","second_hand"],geometry:["point","area"],terms:["secondhand","second hand","resale","thrift","used"],tags:{shop:"second_hand"},name:"Consignment/Thrift Store"},"shop/sewing":{icon:"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:["{shop}","diet_multi"],geometry:["point","area"],terms:["grocery","store","shop"],tags:{shop:"supermarket"},name:"Supermarket"},"shop/swimming_pool":{icon:"fas-swimmer",geometry:["point","area"],terms:["hot tub equipment store","hot tub maintenance store","hot tub supply store","pool shop","pool store","swimming pool equipment store","swimming pool installation store","swimming pool maintenance store","swimming pool supply shop"],tags:{shop:"swimming_pool"},name:"Pool Supply Store"},"shop/tailor":{icon:"maki-clothing-store",geometry:["point","area"],terms:["clothes","suit"],tags:{shop:"tailor"},name:"Tailor"},"shop/tattoo":{icon:"maki-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"tattoo"},terms:["ink"],name:"Tattoo Parlor"},"shop/tea":{icon:"maki-teahouse",geometry:["point","area"],tags:{shop:"tea"},name:"Tea Store"},"shop/telecommunication":{icon:"maki-telephone",geometry:["point","area"],terms:["communication","internet service provider","isp","network","telephone","voice"],tags:{shop:"telecommunication"},name:"Telecom Retail Store"},"shop/ticket":{icon:"fas-ticket-alt",geometry:["point","area"],tags:{shop:"ticket"},terms:["box office"],name:"Ticket Seller"},"shop/tiles":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"tiles"},name:"Tile Shop"},"shop/tobacco":{icon:"temaki-pipe",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"tobacco"},terms:["cigarettes","cigars"],name:"Tobacco Shop"},"shop/toys":{icon:"fas-rocket",geometry:["point","area"],tags:{shop:"toys"},terms:["games"],name:"Toy Store"},"shop/trade":{icon:"temaki-tools",fields:["name","trade","{shop}"],geometry:["point","area"],tags:{shop:"trade"},name:"Trade Shop"},"shop/travel_agency":{icon:"fas-suitcase",geometry:["point","area"],tags:{shop:"travel_agency"},terms:["cruises","flights","hotels","tickets","travel packages"],name:"Travel Agency"},"shop/tyres":{icon:"temaki-tire",geometry:["point","area"],tags:{shop:"tyres"},name:"Tire Store"},"shop/vacuum_cleaner":{icon:"temaki-vacuum",geometry:["point","area"],tags:{shop:"vacuum_cleaner"},name:"Vacuum Cleaner Store"},"shop/variety_store":{icon:"maki-shop",geometry:["point","area"],tags:{shop:"variety_store"},name:"Variety Store"},"shop/video_games":{icon:"maki-gaming",geometry:["point","area"],tags:{shop:"video_games"},name:"Video Game Store"},"shop/video":{icon:"temaki-movie_rental",moreFields:["{shop}","min_age"],geometry:["point","area"],terms:["DVD","VHS","video casette"],tags:{shop:"video"},name:"Video Store"},"shop/watches":{icon:"maki-watch",geometry:["point","area"],tags:{shop:"watches"},name:"Watches Shop"},"shop/water_sports":{icon:"fas-swimmer",geometry:["point","area"],tags:{shop:"water_sports"},name:"Watersport/Swim Shop"},"shop/water":{icon:"tnp-2009234",geometry:["point","area"],tags:{shop:"water"},name:"Drinking Water Shop"},"shop/weapons":{icon:"maki-shop",geometry:["point","area"],terms:["ammo","gun","knife","knives"],tags:{shop:"weapons"},name:"Weapon Shop"},"shop/wholesale":{icon:"maki-warehouse",fields:["{shop}","wholesale"],geometry:["point","area"],terms:["warehouse club","cash and carry"],tags:{shop:"wholesale"},name:"Wholesale Store"},"shop/window_blind":{icon:"temaki-window",geometry:["point","area"],tags:{shop:"window_blind"},name:"Window Blind Store"},"shop/wine":{icon:"maki-alcohol-shop",moreFields:["{shop}","min_age"],geometry:["point","area"],tags:{shop:"wine"},name:"Wine Shop"},"telecom/data_center":{icon:"fas-server",fields:["name","ref","operator","building_area"],moreFields:["address","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","email","fax","height_building","internet_access/ssid","level","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","email","fax","fee","internet_access","internet_access/fee","internet_access/ssid","payment_multi_fee","phone","smoking","website","wheelchair"],geometry:["point","area"],terms:["fish","sea","water"],tags:{tourism:"aquarium"},name:"Aquarium"},"tourism/artwork":{icon:"maki-art-gallery",fields:["name","artwork_type","artist"],moreFields:["level","material","website"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork"},terms:["mural","sculpture","statue"],name:"Artwork"},"tourism/artwork/bust":{icon:"fas-user-alt",fields:["name","artist","material"],geometry:["point","vertex"],tags:{tourism:"artwork",artwork_type:"bust"},reference:{key:"artwork_type"},terms:["figure"],name:"Bust"},"tourism/artwork/graffiti":{icon:"maki-art-gallery",fields:["name","artist"],geometry:["point","vertex","line","area"],tags:{tourism:"artwork",artwork_type:"graffiti"},reference:{key:"artwork_type"},terms:["Street Artwork","Guerilla Artwork","Graffiti Artwork"],name:"Graffiti"},"tourism/artwork/installation":{icon:"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","email","fax","fee","internet_access/ssid","operator","payment_multi_fee","phone","reservation","smoking","website","wheelchair"],geometry:["point","vertex","area"],terms:["Motor Home","Camper"],tags:{tourism:"caravan_site"},name:"RV Park"},"tourism/chalet":{icon:"maki-lodging",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","height_building","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],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:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","paint*","photo*","sculpt*"],tags:{tourism:"gallery"},name:"Art Gallery"},"tourism/guest_house":{icon:"maki-lodging",fields:["name","operator","guest_house","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","height_building","internet_access/ssid","payment_multi","phone","reservation","smoking","website","wheelchair"],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}","bar","stars"],geometry:["point","area"],tags:{tourism:"hotel"},name:"Hotel"},"tourism/information":{icon:"maki-information",fields:["information","operator","address","building_area"],moreFields:["level"],geometry:["point","vertex","area"],tags:{tourism:"information"},name:"Information"},"tourism/information/board":{icon:"maki-information",fields:["name","operator","board_type","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"board"},reference:{key:"information",value:"board"},name:"Information Board"},"tourism/information/guidepost":{icon:"fas-map-signs",fields:["name","elevation","operator","ref"],moreFields:["material"],geometry:["point","vertex"],terms:["signpost"],tags:{tourism:"information",information:"guidepost"},reference:{key:"information",value:"guidepost"},name:"Guidepost"},"tourism/information/map":{icon:"fas-map",fields:["operator","map_type","map_size","direction"],geometry:["point","vertex"],tags:{tourism:"information",information:"map"},reference:{key:"information",value:"map"},name:"Map"},"tourism/information/office":{icon:"maki-information",fields:["name","operator","address","building_area","internet_access","internet_access/fee"],moreFields:["building/levels_building","email","fax","height_building","internet_access/ssid","phone","website","wheelchair"],geometry:["point","vertex","area"],tags:{tourism:"information",information:"office"},reference:{key:"information",value:"office"},name:"Tourist Information Office"},"tourism/information/route_marker":{icon:"maki-information",fields:["ref","operator","colour","material","elevation"],geometry:["point","vertex"],terms:["cairn","painted blaze","route flag","route marker","stone pile","trail blaze","trail post","way marker"],tags:{tourism:"information",information:"route_marker"},reference:{key:"information",value:"route_marker"},name:"Trail Marker"},"tourism/information/terminal":{icon:"maki-information",fields:["operator"],geometry:["point","vertex"],tags:{tourism:"information",information:"terminal"},reference:{key:"information",value:"terminal"},name:"Information Terminal"},"tourism/motel":{icon:"maki-lodging",fields:["name","brand","address","building_area","rooms","internet_access","internet_access/fee"],moreFields:["air_conditioning","building/levels_building","email","fax","height_building","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","email","fax","fee","height_building","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],tags:{tourism:"museum"},name:"Museum"},"tourism/picnic_site":{icon:"maki-picnic-site",fields:["name","operator","address","access_simple","capacity"],moreFields:["charge_fee","fee","internet_access","internet_access/fee","internet_access/ssid","level","payment_multi_fee","phone","reservation","smoking","website","wheelchair"],geometry:["point","vertex","area"],terms:["camp"],tags:{tourism:"picnic_site"},name:"Picnic Site"},"tourism/theme_park":{icon:"maki-amusement-park",fields:["name","operator","address","opening_hours"],moreFields:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],tags:{tourism:"theme_park"},name:"Theme Park"},"tourism/trail_riding_station":{icon:"maki-horse-riding",fields:["name","horse_stables","horse_riding","horse_dressage"],moreFields:["address","email","fax","internet_access","internet_access/fee","internet_access/ssid","opening_hours","phone","website"],geometry:["point","area"],tags:{tourism:"trail_riding_station"},name:"Trail Riding Station",matchScore:2},"tourism/viewpoint":{icon:"temaki-binoculars",geometry:["point","vertex"],fields:["direction"],moreFields:["level"],tags:{tourism:"viewpoint"},name:"Viewpoint"},"tourism/wilderness_hut":{icon:"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:["email","fax","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","website","wheelchair"],geometry:["point","area"],terms:["animal"],tags:{tourism:"zoo"},name:"Zoo"},"tourism/zoo/petting":{icon:"fas-horse",geometry:["point","area"],tags:{tourism:"zoo",zoo:"petting_zoo"},reference:{key:"zoo",value:"petting_zoo"},terms:["Children's Zoo","Children's Farm","Petting Farm","farm animals"],name:"Petting Zoo"},"tourism/zoo/safari":{icon:"temaki-zoo",geometry:["point","area"],tags:{tourism:"zoo",zoo:"safari_park"},reference:{key:"zoo",value:"safari_park"},terms:["Drive-Through Zoo","Drive-In Zoo"],name:"Safari Park"},"tourism/zoo/wildlife":{icon:"fas-frog",geometry:["point","area"],tags:{tourism:"zoo",zoo:"wildlife_park"},reference:{key:"zoo",value:"wildlife_park"},terms:["indigenous animals"],name:"Wildlife Park"},traffic_calming:{icon:"temaki-diamond",fields:["traffic_calming","surface","direction_vertex"],geometry:["vertex","line","area"],tags:{traffic_calming:"*"},terms:["bump","hump","slow","speed"],name:"Traffic Calming"},"traffic_calming/bump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["driveway link","speed","slow"],tags:{traffic_calming:"chicane"},name:"Traffic Chicane"},"traffic_calming/choker":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line","area"],terms:["speed","slow"],tags:{traffic_calming:"choker"},name:"Traffic Choker"},"traffic_calming/cushion":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","speed","slow"],tags:{traffic_calming:"hump"},name:"Speed Hump"},"traffic_calming/island":{icon:"temaki-diamond",fields:["surface"],geometry:["vertex","line","area"],terms:["circle","roundabout","slow"],tags:{traffic_calming:"island"},name:"Traffic Island"},"traffic_calming/rumble_strip":{icon:"temaki-diamond",fields:["direction_vertex"],geometry:["vertex","line"],terms:["audible lines","sleeper lines","growlers"],tags:{traffic_calming:"rumble_strip"},name:"Rumble Strip"},"traffic_calming/table":{icon:"temaki-diamond",fields:["surface","direction_vertex"],geometry:["vertex"],tags:{traffic_calming:"table"},terms:["flat top","hump","speed","slow"],name:"Speed Table"},traffic_sign_vertex:{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction"],geometry:["vertex"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},traffic_sign:{icon:"fas-directions",fields:["traffic_sign","direction"],geometry:["point"],tags:{traffic_sign:"*"},terms:["road","highway"],name:"Traffic Sign"},"traffic_sign/city_limit_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","name"],geometry:["vertex"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/city_limit":{icon:"maki-square-stroked",fields:["traffic_sign","direction","name"],geometry:["point"],tags:{traffic_sign:"city_limit"},terms:["town","village","hamlet","boundary","edge","border","road","highway"],name:"City Limit Sign"},"traffic_sign/maxspeed_vertex":{icon:"maki-square-stroked",fields:["traffic_sign","traffic_sign/direction","maxspeed"],geometry:["vertex"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"traffic_sign/maxspeed":{icon:"maki-square-stroked",fields:["traffic_sign","direction","maxspeed"],geometry:["point"],tags:{traffic_sign:"maxspeed"},terms:["max speed","maximum speed","road","highway"],name:"Speed Limit Sign"},"type/multipolygon":{icon:"iD-multipolygon",geometry:["area","relation"],tags:{type:"multipolygon"},removeTags:{},name:"Multipolygon",searchable:false,matchScore:0.1},"type/boundary":{icon:"iD-boundary",fields:["name","boundary"],geometry:["relation"],tags:{type:"boundary"},name:"Boundary"},"type/boundary/administrative":{icon:"iD-boundary",fields:["name","admin_level"],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","duration","interval","opening_hours","wheelchair"],geometry:["relation"],tags:{type:"route",route:"train"},name:"Train Route"},"type/route/tram":{icon:"temaki-tram",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"tram"},name:"Tram Route"},"type/site":{icon:"iD-relation",fields:["name","site"],geometry:["relation"],tags:{type:"site"},name:"Site"},"type/waterway":{icon:"iD-waterway-stream",fields:["name","waterway","ref"],geometry:["relation"],tags:{type:"waterway"},name:"Waterway"},"waterway/riverbank":{icon:"maki-water",geometry:["area"],tags:{waterway:"riverbank"},name:"Riverbank",searchable:false},"waterway/boatyard":{icon:"maki-harbor",fields:["name","operator"],moreFields:["address","email","fax","phone","website","wheelchair"],geometry:["area","vertex","point"],tags:{waterway:"boatyard"},name:"Boatyard"},"waterway/canal":{icon:"iD-waterway-canal",fields:["name","structure_waterway","width","intermittent","lock"],moreFields:["fishing","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:["brand","building","email","fax","payment_multi","phone","seamark/type","website","wheelchair"],geometry:["point","area"],terms:["petrol","gas","diesel","boat"],tags:{waterway:"fuel"},name:"Marine Fuel Station"},"waterway/lock_gate":{icon:"maki-dam",geometry:["vertex","line"],fields:["name","ref","height","material"],tags:{waterway:"lock_gate"},addTags:{waterway:"lock_gate","seamark:type":"gate"},terms:["canal"],name:"Lock Gate"},"waterway/milestone":{icon:"temaki-milestone",fields:["distance","direction_vertex"],moreFields:["seamark/type"],geometry:["point","vertex"],tags:{waterway:"milestone"},terms:["milestone","marker"],name:"Waterway Milestone"},"waterway/river":{icon:"iD-waterway-river",fields:["name","structure_waterway","width","intermittent","tidal"],moreFields:["covered","fishing","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/animal_boarding/PetsHotel":{name:"PetsHotel",icon:"maki-veterinary",imageURL:"https://graph.facebook.com/PetSmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67141961",amenity:"animal_boarding"},addTags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABANCA":{name:"ABANCA",icon:"maki-bank",imageURL:"https://graph.facebook.com/SomosAbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9598744",amenity:"bank"},addTags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ABN AMRO":{name:"ABN AMRO",icon:"maki-bank",imageURL:"https://graph.facebook.com/abnamro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q287471",amenity:"bank"},addTags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"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/AMP":{name:"AMP",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAMP%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q295261",amenity:"bank"},addTags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"},countryCodes:["au","nz"],terms:["amp bank"],matchScore:2,suggestion:true},"amenity/bank/ANZ":{name:"ANZ",icon:"maki-bank",imageURL:"https://graph.facebook.com/ANZAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714641",amenity:"bank"},addTags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"},countryCodes:["au","nz"],terms:["anz bank"],matchScore:2,suggestion:true},"amenity/bank/ASB Bank":{name:"ASB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ASBBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297214",amenity:"bank"},addTags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ATB Financial":{name:"ATB Financial",icon:"maki-bank",imageURL:"https://graph.facebook.com/ATBFinancial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298762",amenity:"bank"},addTags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/AXA":{name:"AXA",icon:"maki-bank",imageURL:"https://graph.facebook.com/axainsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q160054",amenity:"bank"},addTags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Access Bank":{name:"Access Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AccessBankPlc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672418",amenity:"bank"},addTags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ActivoBank":{name:"ActivoBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ActivoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9581725",amenity:"bank"},addTags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Addiko Bank":{name:"Addiko Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/addiko.ba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27926559",amenity:"bank"},addTags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"},countryCodes:["ba","hr","me","rs","si"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Affinity Credit Union":{name:"Affinity Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/affinitycu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4688969",amenity:"bank"},addTags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"},countryCodes:["ca"],terms:["affinity"],matchScore:2,suggestion:true},"amenity/bank/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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllied%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4732555",amenity:"bank"},addTags:{amenity:"bank",brand:"Allied Bank","brand:wikidata":"Q4732555","brand:wikipedia":"en:Allied Banking Corporation",name:"Allied Bank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Alpha Bank":{name:"Alpha Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/125297404838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747394",amenity:"bank"},addTags:{amenity:"bank",brand:"Alpha Bank","brand:wikidata":"Q747394","brand:wikipedia":"en:Alpha Bank",name:"Alpha Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Alterna Savings":{name:"Alterna Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/alternasavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4736322",amenity:"bank"},addTags:{amenity:"bank",brand:"Alterna Savings","brand:wikidata":"Q4736322","brand:wikipedia":"en:Alterna Savings",name:"Alterna Savings"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/America First Credit Union":{name:"America First Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/americafirstcu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742758",amenity:"bank"},addTags:{amenity:"bank",brand:"America First Credit Union","brand:wikidata":"Q4742758","brand:wikipedia":"en:America First Credit Union",name:"America First Credit Union",short_name:"AFCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Andhra Bank":{name:"Andhra Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/official.andhrabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003476",amenity:"bank"},addTags:{amenity:"bank",brand:"Andhra Bank","brand:wikidata":"Q2003476","brand:wikipedia":"en:Andhra Bank",name:"Andhra Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Antonveneta":{name:"Antonveneta",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633689",amenity:"bank"},addTags:{amenity:"bank",brand:"Antonveneta","brand:wikidata":"Q3633689","brand:wikipedia":"en:Banca Antonveneta",name:"Antonveneta"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Apple Bank":{name:"Apple Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/AppleBankfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4781125",amenity:"bank"},addTags:{amenity:"bank",brand:"Apple Bank","brand:wikidata":"Q4781125","brand:wikipedia":"en:Apple Bank for Savings",name:"Apple Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Argenta":{name:"Argenta",icon:"maki-bank",imageURL:"https://graph.facebook.com/argenta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q932856",amenity:"bank"},addTags:{amenity:"bank",brand:"Argenta","brand:wikidata":"Q932856","brand:wikipedia":"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://pbs.twimg.com/profile_images/689449211050393601/0_NfM1Dp_bigger.jpg",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/BCEE":{name:"BCEE",icon:"maki-bank",imageURL:"https://graph.facebook.com/spuerkeess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668996",amenity:"bank"},addTags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"en:Banque et Caisse d'Épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCI":{name:"BCI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBci/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882083",amenity:"bank"},addTags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"},terms:["banco bci"],matchScore:2,suggestion:true},"amenity/bank/BCP (Bolivia)":{name:"BCP (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancodeCreditoBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16826675",amenity:"bank"},addTags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BCP (France)":{name:"BCP (France)",icon:"maki-bank",imageURL:"https://graph.facebook.com/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/BDM":{name:"BDM",icon:"maki-bank",imageURL:"https://graph.facebook.com/bdmbot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883022",amenity:"bank"},addTags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BDO":{name:"BDO",icon:"maki-bank",imageURL:"https://graph.facebook.com/BDOUnibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854129",amenity:"bank"},addTags:{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/BECU":{name:"BECU",icon:"maki-bank",imageURL:"https://graph.facebook.com/becu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835409",amenity:"bank"},addTags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGL BNP Paribas":{name:"BGL BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BGL.BNP.Paribas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795898",amenity:"bank"},addTags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"en:BGL BNP Paribas",name:"BGL BNP Paribas"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BGŻ BNP Paribas":{name:"BGŻ BNP Paribas",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNPParibasBankPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20744004",amenity:"bank"},addTags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BIAT":{name:"BIAT",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanqueInternationaleArabedeTunisie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q690739",amenity:"bank"},addTags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"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/BIL":{name:"BIL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BIL1856/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883404",amenity:"bank"},addTags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BMCE Bank":{name:"BMCE Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BMCEBankOfAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2300433",amenity:"bank"},addTags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"},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/BNDA":{name:"BNDA",icon:"maki-bank",imageURL:"https://graph.facebook.com/MaliBNDA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30594734",amenity:"bank"},addTags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BNI":{name:"BNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2882611",amenity:"bank"},addTags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"},terms:["bank bni"],matchScore:2,suggestion:true},"amenity/bank/BNL":{name:"BNL",icon:"maki-bank",imageURL:"https://graph.facebook.com/BNLBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2201225",amenity:"bank"},addTags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"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/BOM":{name:"BOM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankofMelbourne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856151",amenity:"bank"},addTags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BOQ":{name:"BOQ",icon:"maki-bank",imageURL:"https://graph.facebook.com/BOQOnline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856173",amenity:"bank"},addTags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPER Banca":{name:"BPER Banca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BPERbanca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806167",amenity:"bank"},addTags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BPI (Global)":{name:"BPI (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2501256",amenity:"bank"},addTags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"},terms:["bpi family savings bank"],matchScore:2,suggestion:true},"amenity/bank/BRD":{name:"BRD",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRDGroupeSocieteGenerale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796927",amenity:"bank"},addTags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRED":{name:"BRED",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRED.Banque.Populaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2877455",amenity:"bank"},addTags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BRI":{name:"BRI",icon:"maki-bank",imageURL:"https://graph.facebook.com/BRIofficialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623042",amenity:"bank"},addTags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"},countryCodes:["id"],terms:["bank bri"],matchScore:2,suggestion:true},"amenity/bank/BTN":{name:"BTN",icon:"maki-bank",imageURL:"https://graph.facebook.com/www.btn.co.id/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12474534",amenity:"bank"},addTags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/BW-Bank":{name:"BW-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/LBBW.Stuttgart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798891",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"},countryCodes:["de"],terms:["baden-württembergische bank"],matchScore:2,suggestion:true},"amenity/bank/Banamex":{name:"Banamex",icon:"maki-bank",imageURL:"https://graph.facebook.com/Citibanamex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q749474",amenity:"bank"},addTags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Intesa":{name:"Banca Intesa",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancaintesa.rs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q647092",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"},countryCodes:["it","rs"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca March":{name:"Banca March",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/529243270367309824/JFWCTY94_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q578252",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Mediolanum":{name:"Banca Mediolanum",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaMediolanum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633712",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Bari":{name:"Banca Popolare di Bari",icon:"maki-bank",imageURL:"https://graph.facebook.com/popolarebari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633730",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Milano":{name:"Banca Popolare di Milano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806154",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"},countryCodes:["it"],terms:["bpm"],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Novara":{name:"Banca Popolare di Novara",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633742",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Sondrio":{name:"Banca Popolare di Sondrio",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q686176",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Verona":{name:"Banca Popolare di Verona",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3167468",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Popolare di Vicenza":{name:"Banca Popolare di Vicenza",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3127200",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Românească":{name:"Banca Românească",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaRomaneascaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854052",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Sella":{name:"Banca Sella",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancasella/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633749",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banca Transilvania":{name:"Banca Transilvania",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancaTransilvania/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806161",amenity:"bank"},addTags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bancaribe":{name:"Bancaribe",icon:"maki-bank",imageURL:"https://graph.facebook.com/Bancaribe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717827",amenity:"bank"},addTags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco AV Villas":{name:"Banco AV Villas",icon:"maki-bank",imageURL:"https://graph.facebook.com/AVVillas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854068",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Agrario":{name:"Banco Agrario",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoagrario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20013358",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Azteca":{name:"Banco Azteca",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoAzteca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPI (Portugal)":{name:"Banco BPI (Portugal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancobpi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q537886",amenity:"bank"},addTags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco BPM":{name:"Banco BPM",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBPM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27331643",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco CTT":{name:"Banco CTT",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q65161642",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Caja Social":{name:"Banco Caja Social",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoCajaSocial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717869",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Ciudad":{name:"Banco Ciudad",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancociudad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856204",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Paraguay)":{name:"Banco Continental (Paraguay)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bcontinentalpy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62054564",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Continental (Peru)":{name:"Banco Continental (Peru)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAenPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835089",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Estado":{name:"Banco Estado",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoEstado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718188",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Falabella":{name:"Banco Falabella",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/760839815428444160/RINox6Wh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4854088",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"},countryCodes:["cl","co","pe"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fassil":{name:"Banco Fassil",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancofassil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118592",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco G&T Continental":{name:"Banco G&T Continental",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoGTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717949",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"},countryCodes:["gt","sv"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco General":{name:"Banco General",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27618271",amenity:"bank"},addTags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Industrial":{name:"Banco Industrial",icon:"maki-bank",imageURL:"https://graph.facebook.com/bindARG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16489444",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Chile)":{name:"Banco Internacional (Chile)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/438324350148571136/fCNvpo-F_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q56605586",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Internacional (Ecuador)":{name:"Banco Internacional (Ecuador)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/986297558493487104/4Y3z4QEF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q806187",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Metropolitano":{name:"Banco Metropolitano",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanmetCuba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118612",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nacional":{name:"Banco Nacional",icon:"maki-bank",imageURL:"https://graph.facebook.com/bnmascerca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2917708",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"},countryCodes:["cr","pa"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Nación":{name:"Banco Nación",icon:"maki-bank",imageURL:"https://graph.facebook.com/banconacion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2883376",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pastor":{name:"Banco Pastor",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806193",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Pichincha":{name:"Banco Pichincha",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoPichinchaEcuador/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854135",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Popular de Ahorro":{name:"Banco Popular de Ahorro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bpa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118626",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"},countryCodes:["cu"],terms:["bpa"],matchScore:2,suggestion:true},"amenity/bank/Banco Provincia":{name:"Banco Provincia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancoprovincia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4856209",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sabadell":{name:"Banco Sabadell",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosabadell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q762330",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."},countryCodes:["es"],terms:["banc sabadell","sabadell"],matchScore:2,suggestion:true},"amenity/bank/Banco Santa Fe":{name:"Banco Santa Fe",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSantaFe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6046871",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Santander":{name:"Banco Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosantander/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6496310",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Angola)":{name:"Banco Sol (Angola)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancosolangola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118744",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["ao"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Sol (Bolivia)":{name:"Banco Sol (Bolivia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSolidarioBolivia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62118746",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco 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/Banque de France":{name:"Banque de France",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanquedeFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806950",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de France","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Banque de l'Habitat du Mali":{name:"Banque de l'Habitat du Mali",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4857076",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrisul":{name:"Banrisul",icon:"maki-bank",imageURL:"https://graph.facebook.com/banrisul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4857098",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banrural":{name:"Banrural",icon:"maki-bank",imageURL:"https://graph.facebook.com/BanruralHonduras/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5719130",amenity:"bank"},addTags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"},countryCodes:["gt","hn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Barclays":{name:"Barclays",icon:"maki-bank",imageURL:"https://graph.facebook.com/BarclaysUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q245343",amenity:"bank"},addTags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"},terms:["barclays bank"],matchScore:2,suggestion:true},"amenity/bank/Bcc":{name:"Bcc",icon:"maki-bank",imageURL:"https://graph.facebook.com/BCCRomaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25060394",amenity:"bank"},addTags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Belfius":{name:"Belfius",icon:"maki-bank",imageURL:"https://graph.facebook.com/belfius/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1956014",amenity:"bank"},addTags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bendigo Bank":{name:"Bendigo Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BendigoBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4887077",amenity:"bank"},addTags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Berliner Volksbank":{name:"Berliner Volksbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/BerlinerVolksbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821855",amenity:"bank"},addTags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicentenario":{name:"Bicentenario",icon:"maki-bank",imageURL:"https://graph.facebook.com/BicentenarioBU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5728123",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"},countryCodes:["ve"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bicici":{name:"Bicici",icon:"maki-bank",imageURL:"https://graph.facebook.com/BICICIGroupeBNPParibas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1667302",amenity:"bank"},addTags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"},countryCodes:["ci"],terms:["agence bicici"],matchScore:2,suggestion:true},"amenity/bank/Bradesco":{name:"Bradesco",icon:"maki-bank",imageURL:"https://graph.facebook.com/bradesco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q806181",amenity:"bank"},addTags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"},countryCodes:["br"],terms:["banco bradesco"],matchScore:2,suggestion:true},"amenity/bank/Budapest Bank":{name:"Budapest Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/budapestbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q27493463",amenity:"bank"},addTags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CBAO":{name:"CBAO",icon:"maki-bank",imageURL:"https://graph.facebook.com/161410284020244/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532104",amenity:"bank"},addTags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"},countryCodes:["sn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CEC Bank":{name:"CEC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/521658591374182/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1023306",amenity:"bank"},addTags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIB Bank":{name:"CIB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/with.cib.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839566",amenity:"bank"},addTags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/CIBC":{name:"CIBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q666694",amenity:"bank"},addTags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"},countryCodes:["ca"],terms:["cibc banking centre"],matchScore:2,suggestion:true},"amenity/bank/CIC":{name:"CIC",icon:"maki-bank",imageURL:"https://graph.facebook.com/cic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746525",amenity:"bank"},addTags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIH Bank":{name:"CIH Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cihbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006220",amenity:"bank"},addTags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"},countryCodes:["ma"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Bank":{name:"CIMB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045976",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CIMB Niaga":{name:"CIMB Niaga",icon:"maki-bank",imageURL:"https://graph.facebook.com/CIMBIndonesia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011747",amenity:"bank"},addTags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CNEP":{name:"CNEP",icon:"maki-bank",imageURL:"https://graph.facebook.com/CNEPOfficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2931752",amenity:"bank"},addTags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"},countryCodes:["dz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CRDB Bank":{name:"CRDB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/crdbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5013848",amenity:"bank"},addTags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"},countryCodes:["tz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caisse 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",imageURL:"https://graph.facebook.com/222871461403445/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3821055",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Duero","brand:wikidata":"Q3821055","brand:wikipedia":"es:Caja Duero",name:"Caja Duero"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja España":{name:"Caja España",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q966985",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja España","brand:wikidata":"Q966985","brand:wikipedia":"es:Caja España",name:"Caja España"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural":{name:"Caja Rural",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3649971",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural","brand:wikidata":"Q3649971","brand:wikipedia":"es:Caja Rural",name:"Caja Rural"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Caja Rural de Jaén":{name:"Caja Rural de Jaén",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCaja%20Rural.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q18720350",amenity:"bank"},addTags:{amenity:"bank",brand:"Caja Rural de Jaén","brand:wikidata":"Q18720350","brand:wikipedia":"es:Caja Rural de Jaén",name:"Caja Rural de Jaén"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CajaSur":{name:"CajaSur",icon:"maki-bank",imageURL:"https://graph.facebook.com/Cajasur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3751637",amenity:"bank"},addTags:{amenity:"bank",brand:"CajaSur","brand:wikidata":"Q3751637","brand:wikipedia":"en:CajaSur",name:"CajaSur"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cajamar":{name:"Cajamar",icon:"maki-bank",imageURL:"https://graph.facebook.com/cajamar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8254971",amenity:"bank"},addTags:{amenity:"bank",brand:"Cajamar","brand:wikidata":"Q8254971","brand:wikipedia":"es:Cajamar",name:"Cajamar"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/California Coast Credit Union":{name:"California Coast Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/CalCoastCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25025281",amenity:"bank"},addTags:{amenity:"bank",brand:"California Coast Credit Union","brand:wikidata":"Q25025281","brand:wikipedia":"en:California Coast Credit Union",name:"California Coast Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Canara Bank":{name:"Canara Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/canarabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003777",amenity:"bank"},addTags:{amenity:"bank",brand:"Canara Bank","brand:wikidata":"Q2003777","brand:wikipedia":"en:Canara Bank",name:"Canara Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital Bank":{name:"Capital Bank",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q5035481",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital Bank","brand:wikidata":"Q5035481","brand:wikipedia":"en:Capital Bank Financial",name:"Capital Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Capital One":{name:"Capital One",icon:"maki-bank",imageURL:"https://graph.facebook.com/capitalone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1034654",amenity:"bank"},addTags:{amenity:"bank",brand:"Capital One","brand:wikidata":"Q1034654","brand:wikipedia":"en:Capital One",name:"Capital One"},countryCodes:["us"],terms:["capital one bank"],matchScore:2,suggestion:true},"amenity/bank/Carige":{name:"Carige",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/608212417395499008/oUMlcP6e_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3633695",amenity:"bank"},addTags:{amenity:"bank",brand:"Carige","brand:wikidata":"Q3633695","brand:wikipedia":"en:Banca Carige",name:"Carige"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cariparma":{name:"Cariparma",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricoleItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2938832",amenity:"bank"},addTags:{amenity:"bank",brand:"Cariparma","brand:wikidata":"Q2938832","brand:wikipedia":"en:Crédit Agricole Italia",name:"Cariparma"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Carisbo":{name:"Carisbo",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3661937",amenity:"bank"},addTags:{amenity:"bank",brand:"Carisbo","brand:wikidata":"Q3661937","brand:wikipedia":"en:Cassa di Risparmio in Bologna",name:"Carisbo"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cassa di Risparmio del Veneto":{name:"Cassa di Risparmio del Veneto",icon:"maki-bank",imageURL:"https://graph.facebook.com/CassadiRisparmiodelVeneto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3661909",amenity:"bank"},addTags:{amenity:"bank",brand:"Cassa di Risparmio del Veneto","brand:wikidata":"Q3661909","brand:wikipedia":"en:Cassa di Risparmio del Veneto",name:"Cassa di Risparmio del Veneto"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/CatalunyaCaixa":{name:"CatalunyaCaixa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20cx%20original.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3750952",amenity:"bank"},addTags:{amenity:"bank",brand:"CatalunyaCaixa","brand:wikidata":"Q3750952","brand:wikipedia":"en:CatalunyaCaixa",name:"CatalunyaCaixa"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Cathay Bank":{name:"Cathay Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/cathaybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4189507",amenity:"bank"},addTags:{amenity:"bank",brand:"Cathay Bank","brand:wikidata":"Q4189507","brand:wikipedia":"en:Cathay Bank",name:"Cathay Bank"},countryCodes:["cn","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Central Bank of India":{name:"Central Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/CentralBankofIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2007090",amenity:"bank"},addTags:{amenity:"bank",brand:"Central Bank of India","brand:wikidata":"Q2007090","brand:wikipedia":"en:Central Bank of India",name:"Central Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Chase":{name:"Chase",icon:"maki-bank",imageURL:"https://graph.facebook.com/chase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q524629",amenity:"bank"},addTags:{amenity:"bank",brand:"Chase","brand:wikidata":"Q524629","brand:wikipedia":"en:Chase Bank",name:"Chase"},terms:["chase bank"],matchScore:2,suggestion:true},"amenity/bank/China Bank":{name:"China Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/chinabank.ph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5100080",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank","brand:wikidata":"Q5100080","brand:wikipedia":"en:Chinabank",name:"China Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/China Bank Savings":{name:"China Bank Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/cbschinabanksavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18387359",amenity:"bank"},addTags:{amenity:"bank",brand:"China Bank Savings","brand:wikidata":"Q18387359","brand:wikipedia":"en:China Bank Savings",name:"China Bank Savings"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/China Construction Bank":{name:"China Construction Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"China Construction Bank",short_name:"CCB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citibank":{name:"Citibank",icon:"maki-bank",imageURL:"https://graph.facebook.com/citi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857063",amenity:"bank"},addTags:{amenity:"bank",brand:"Citibank","brand:wikidata":"Q857063","brand:wikipedia":"en:Citibank",name:"Citibank",short_name:"Citi"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Eastern USA)":{name:"Citizens Bank (Eastern USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122694",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122694","brand:wikipedia":"en:Citizens Financial Group",name:"Citizens Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Kentucky)":{name:"Citizens Bank (Kentucky)",icon:"maki-bank",imageURL:"https://graph.facebook.com/citizensbankofkentucky/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5122711",amenity:"bank"},addTags:{alt_name:"Citizens Bank of Kentucky",amenity:"bank",brand:"Citizens Bank","brand:wikidata":"Q5122711","brand:wikipedia":"en:Citizens National Bank (Eastern Kentucky)",name:"Citizens Bank",official_name:"Citizens National Bank",short_name:"Citizens"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Citizens Bank (Nepal)":{name:"Citizens Bank (Nepal)",icon:"maki-bank",imageURL:"https://graph.facebook.com/ctznbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13186934",amenity:"bank"},addTags:{amenity:"bank",brand:"Citizens Bank International","brand:wikidata":"Q13186934","brand:wikipedia":"en:Citizens Bank International",name:"Citizens Bank",official_name:"Citizens Bank International Ltd.",short_name:"Citizens"},countryCodes:["np"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (California)":{name:"City National Bank (California)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5123314",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q5123314","brand:wikipedia":"en:City National Bank (California)",name:"City National Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/City National Bank (Florida)":{name:"City National Bank (Florida)",icon:"maki-bank",imageURL:"https://graph.facebook.com/CityNationalBankFL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958644",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q16958644","brand:wikipedia":"en:City National Bank of Florida",name:"City National Bank",official_name:"City National Bank of Florida"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Clydesdale Bank":{name:"Clydesdale Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/clydesdalebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971680",amenity:"bank"},addTags:{amenity:"bank",brand:"Clydesdale Bank","brand:wikidata":"Q971680","brand:wikipedia":"en:Clydesdale Bank",name:"Clydesdale Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Coast Capital Savings":{name:"Coast Capital Savings",icon:"maki-bank",imageURL:"https://graph.facebook.com/coastcapitalsavings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5138088",amenity:"bank"},addTags:{amenity:"bank",brand:"Coast Capital Savings","brand:wikidata":"Q5138088","brand:wikipedia":"en:Coast Capital Savings",name:"Coast Capital Savings",official_name:"Coast Capital Savings Federal Credit Union"},countryCodes:["ca"],terms:["coast capital","coast capital savings credit union"],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (New Jersey)":{name:"Columbia Bank (New Jersey)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084096",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084096",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Columbia Bank (Washington)":{name:"Columbia Bank (Washington)",icon:"maki-bank",imageURL:"https://graph.facebook.com/columbiastatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62084089",amenity:"bank"},addTags:{amenity:"bank",brand:"Columbia Bank","brand:wikidata":"Q62084089",name:"Columbia Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Comerica Bank":{name:"Comerica Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/comerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1114148",amenity:"bank"},addTags:{amenity:"bank",brand:"Comerica Bank","brand:wikidata":"Q1114148","brand:wikipedia":"en:Comerica",name:"Comerica Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerce Bank":{name:"Commerce Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commercebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152411",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerce Bank","brand:wikidata":"Q5152411","brand:wikipedia":"en:Commerce Bancshares",name:"Commerce Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commercial Bank of Ceylon PLC":{name:"Commercial Bank of Ceylon PLC",icon:"maki-bank",imageURL:"https://graph.facebook.com/combanksl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5152468",amenity:"bank"},addTags:{amenity:"bank",brand:"Commercial Bank of Ceylon PLC","brand:wikidata":"Q5152468","brand:wikipedia":"en:Commercial Bank of Ceylon",name:"Commercial Bank of Ceylon PLC"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commerzbank":{name:"Commerzbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commerzbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157617",amenity:"bank"},addTags:{amenity:"bank",brand:"Commerzbank","brand:wikidata":"Q157617","brand:wikipedia":"en:Commerzbank",name:"Commerzbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Commonwealth Bank":{name:"Commonwealth Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/commonwealthbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q285328",amenity:"bank"},addTags:{amenity:"bank",brand:"Commonwealth Bank","brand:wikidata":"Q285328","brand:wikipedia":"en:Commonwealth Bank",name:"Commonwealth Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Community Bank":{name:"Community Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/communitybankna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5154635",amenity:"bank"},addTags:{amenity:"bank",brand:"Community Bank","brand:wikidata":"Q5154635","brand:wikipedia":"en:Community Bank, N.A.",name:"Community Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Corporation Bank":{name:"Corporation Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/corporationbank.co.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003387",amenity:"bank"},addTags:{amenity:"bank",brand:"Corporation Bank","brand:wikidata":"Q2003387","brand:wikipedia":"en:Corporation Bank",name:"Corporation Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credem":{name:"Credem",icon:"maki-bank",imageURL:"https://graph.facebook.com/credem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696881",amenity:"bank"},addTags:{amenity:"bank",brand:"Credem","brand:wikidata":"Q3696881","brand:wikipedia":"en:Credito Emiliano",name:"Credem"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credicoop":{name:"Credicoop",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancocredicoopcl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854086",amenity:"bank"},addTags:{amenity:"bank",brand:"Credicoop","brand:wikidata":"Q4854086","brand:wikipedia":"en:Banco Credicoop",name:"Credicoop"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credit Suisse":{name:"Credit Suisse",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditsuisse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q372657",amenity:"bank"},addTags:{amenity:"bank",brand:"Credit Suisse","brand:wikidata":"Q372657","brand:wikipedia":"en:Credit Suisse",name:"Credit Suisse"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Credito Valtellinese":{name:"Credito Valtellinese",icon:"maki-bank",imageURL:"https://graph.facebook.com/Creval/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3696888",amenity:"bank"},addTags:{amenity:"bank",brand:"Credito Valtellinese","brand:wikidata":"Q3696888","brand:wikipedia":"en:Credito Valtellinese",name:"Credito Valtellinese"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crelan":{name:"Crelan",icon:"maki-bank",imageURL:"https://graph.facebook.com/Crelan.Banque/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q389872",amenity:"bank"},addTags:{amenity:"bank",brand:"Crelan","brand:wikidata":"Q389872","brand:wikipedia":"en:Crelan",name:"Crelan"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Agricole":{name:"Crédit Agricole",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditAgricole/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q590952",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Agricole","brand:wikidata":"Q590952","brand:wikipedia":"fr:Crédit agricole",name:"Crédit Agricole"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Maritime":{name:"Crédit Maritime",icon:"maki-bank",imageURL:"https://graph.facebook.com/CreditMaritimeGrandOuest/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17176866",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Maritime","brand:wikidata":"Q17176866","brand:wikipedia":"fr:Crédit maritime",name:"Crédit Maritime"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel":{name:"Crédit Mutuel",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditmutuel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q642627",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel","brand:wikidata":"Q642627","brand:wikipedia":"en:Crédit Mutuel",name:"Crédit Mutuel"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit Mutuel de Bretagne":{name:"Crédit Mutuel de Bretagne",icon:"maki-bank",imageURL:"https://graph.facebook.com/GroupeArkea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006236",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit Mutuel de Bretagne","brand:wikidata":"Q3006236","brand:wikipedia":"fr:Crédit mutuel Arkéa",name:"Crédit Mutuel de Bretagne"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédit du Nord":{name:"Crédit du Nord",icon:"maki-bank",imageURL:"https://graph.facebook.com/creditdunord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3006209",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédit du Nord","brand:wikidata":"Q3006209","brand:wikipedia":"en:Crédit du Nord",name:"Crédit du Nord"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Crédito Agrícola":{name:"Crédito Agrícola",icon:"maki-bank",imageURL:"https://graph.facebook.com/grupocreditoagricola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10262017",amenity:"bank"},addTags:{amenity:"bank",brand:"Crédito Agrícola","brand:wikidata":"Q10262017","brand:wikipedia":"pt:Crédito Agrícola",name:"Crédito Agrícola"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Danske Bank":{name:"Danske Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DanskeBankDanmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636974",amenity:"bank"},addTags:{amenity:"bank",brand:"Danske Bank","brand:wikidata":"Q1636974","brand:wikipedia":"en:Danske Bank",name:"Danske Bank"},countryCodes:["dk","fi","gb","lt","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Davivienda":{name:"Davivienda",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoDavivienda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5242054",amenity:"bank"},addTags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"},countryCodes:["co","cr","hn","pa","sv"],terms:["banco davivienda"],matchScore:2,suggestion:true},"amenity/bank/Denizbank":{name:"Denizbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/DenizBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1115064",amenity:"bank"},addTags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Desjardins":{name:"Desjardins",icon:"maki-bank",imageURL:"https://graph.facebook.com/desjardins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933350",amenity:"bank"},addTags:{amenity:"bank",brand:"Desjardins","brand:wikidata":"Q2933350","brand:wikipedia":"en:Desjardins Group",name:"Desjardins"},countryCodes:["ca"],terms:[],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/EuroBic":{name:"EuroBic",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q806175",amenity:"bank"},addTags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"},countryCodes:["pt"],terms:["banco bic"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Greece)":{name:"Eurobank (Greece)",icon:"maki-bank",imageURL:"https://graph.facebook.com/319859041765749/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q951850",amenity:"bank"},addTags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"},countryCodes:["gr"],terms:["eurobank ergasias"],matchScore:2,suggestion:true},"amenity/bank/Eurobank (Poland)":{name:"Eurobank (Poland)",icon:"maki-bank",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://graph.facebook.com/WebsterFirst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454073",amenity:"bank"},addTags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Frost Bank":{name:"Frost Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/FrostBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506152",amenity:"bank"},addTags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Fulton Bank":{name:"Fulton Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/605798444855197696/U70Uo44x_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16976594",amenity:"bank"},addTags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/GCB Bank":{name:"GCB Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/gcbbanklimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521346",amenity:"bank"},addTags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"},countryCodes:["gh"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Galicia":{name:"Galicia",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancogalicia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5717952",amenity:"bank"},addTags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti":{name:"Garanti",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Garanti Bankası":{name:"Garanti Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/GarantiBBVA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322962",amenity:"bank"},addTags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Getin Bank":{name:"Getin Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/GetinBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9267646",amenity:"bank"},addTags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Golden 1 Credit Union":{name:"Golden 1 Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/golden1cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7736976",amenity:"bank"},addTags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"},countryCodes:["us"],terms:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],matchScore:2,suggestion:true},"amenity/bank/Great Western Bank":{name:"Great Western Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/500391873328778/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5600185",amenity:"bank"},addTags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Groupama":{name:"Groupama",icon:"maki-bank",imageURL:"https://graph.facebook.com/groupama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3083531",amenity:"bank"},addTags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HBL Bank":{name:"HBL Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HBLBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1566843",amenity:"bank"},addTags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"},countryCodes:["pk"],terms:["hbl"],matchScore:2,suggestion:true},"amenity/bank/HDFC Bank":{name:"HDFC Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HDFC.bank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q631047",amenity:"bank"},addTags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HNB":{name:"HNB",icon:"maki-bank",imageURL:"https://graph.facebook.com/HNBPLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3532080",amenity:"bank"},addTags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/HSBC UK (UK)":{name:"HSBC UK (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/hsbcuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64767453",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"},countryCodes:["gb"],terms:["HSBC"],matchScore:2,suggestion:true},"amenity/bank/HSBC (Global)":{name:"HSBC (Global)",icon:"maki-bank",imageURL:"https://graph.facebook.com/HSBC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q190464",amenity:"bank"},addTags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Halifax":{name:"Halifax",icon:"maki-bank",imageURL:"https://graph.facebook.com/halifax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310164",amenity:"bank"},addTags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Halkbank":{name:"Halkbank",icon:"maki-bank",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/Hamburger Sparkasse":{name:"Hamburger Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/haspa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1573140",amenity:"bank"},addTags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Handelsbanken":{name:"Handelsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/Handelsbanken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1421630",amenity:"bank"},addTags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"},countryCodes:["dk","fi","gb","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Heritage Bank":{name:"Heritage Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/heritage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5738690",amenity:"bank"},addTags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Hong Leong Bank":{name:"Hong Leong Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HLBMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4383943",amenity:"bank"},addTags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Hrvatska poštanska banka":{name:"Hrvatska poštanska banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/mojpunnovcanik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5923981",amenity:"bank"},addTags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Huntington Bank":{name:"Huntington Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/HuntingtonBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q798819",amenity:"bank"},addTags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/HypoVereinsbank":{name:"HypoVereinsbank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/950681154906095618/sFON4jIk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q220189",amenity:"bank"},addTags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ICBC":{name:"ICBC",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"},terms:[],matchScore:2,suggestion:true},"amenity/bank/ICICI Bank":{name:"ICICI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/icicibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653258",amenity:"bank"},addTags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"},countryCodes:["ca","gb","in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/IDBI Bank":{name:"IDBI Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/IDBIBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3633485",amenity:"bank"},addTags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ING":{name:"ING",icon:"maki-bank",imageURL:"https://graph.facebook.com/ING/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q645708",amenity:"bank"},addTags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"},terms:["ing bank"],matchScore:2,suggestion:true},"amenity/bank/ING Bank Śląski":{name:"ING Bank Śląski",icon:"maki-bank",imageURL:"https://graph.facebook.com/INGBankSlaski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1410383",amenity:"bank"},addTags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Ibercaja":{name:"Ibercaja",icon:"maki-bank",imageURL:"https://graph.facebook.com/Ibercaja/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5907815",amenity:"bank"},addTags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja",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://graph.facebook.com/KBCBankEnVerzekering/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q941020",amenity:"bank"},addTags:{amenity:"bank",brand:"KBC","brand:wikidata":"Q941020","brand:wikipedia":"en:KBC Bank",name:"KBC"},countryCodes:["be","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/KBZ Bank":{name:"KBZ Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KanbawzaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6360949",amenity:"bank"},addTags:{amenity:"bank",brand:"KBZ Bank","brand:wikidata":"Q6360949","brand:wikipedia":"en:Kanbawza Bank",name:"KBZ Bank"},countryCodes:["mm"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Karnataka Bank":{name:"Karnataka Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/KarnatakaBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2042632",amenity:"bank"},addTags:{amenity:"bank",brand:"Karnataka Bank","brand:wikidata":"Q2042632","brand:wikipedia":"en:Karnataka Bank",name:"Karnataka Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/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/Liberty Bank (Connecticut)":{name:"Liberty Bank (Connecticut)",icon:"maki-bank",imageURL:"https://graph.facebook.com/Liberty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541584",amenity:"bank"},addTags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Lloyds Bank":{name:"Lloyds Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/lloydsbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1152847",amenity:"bank"},addTags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"},countryCodes:["gb","im"],terms:["lloyds","lloyds tsb"],matchScore:2,suggestion:true},"amenity/bank/M&T Bank":{name:"M&T Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MandTBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3272257",amenity:"bank"},addTags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/MCB":{name:"MCB",icon:"maki-bank",imageURL:"https://graph.facebook.com/mcbbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15982510",amenity:"bank"},addTags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"},terms:["mcb bank"],matchScore:2,suggestion:true},"amenity/bank/MONETA Money Bank":{name:"MONETA Money Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/726534904452931588/E4dnojuF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q24282966",amenity:"bank"},addTags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Macro":{name:"Macro",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancomacro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2335199",amenity:"bank"},addTags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Maybank":{name:"Maybank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Maybank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1364018",amenity:"bank"},addTags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meezan Bank":{name:"Meezan Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeezanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6807934",amenity:"bank"},addTags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mercantil":{name:"Mercantil",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6818004",amenity:"bank"},addTags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Meridian Credit Union":{name:"Meridian Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MeridianCreditUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6819303",amenity:"bank"},addTags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metro Bank (UK)":{name:"Metro Bank (UK)",icon:"maki-bank",imageURL:"https://graph.facebook.com/380904035384141/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6824499",amenity:"bank"},addTags:{amenity:"bank",brand:"Metro Bank","brand:wikidata":"Q6824499","brand:wikipedia":"en:Metro Bank (United Kingdom)",name:"Metro Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Metrobank (Philippines)":{name:"Metrobank (Philippines)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1140117795809550338/ySSJStq-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1925799",amenity:"bank"},addTags:{amenity:"bank",brand:"Metrobank","brand:wikidata":"Q1925799","brand:wikipedia":"en:Metrobank (Philippines)",name:"Metrobank"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mibanco":{name:"Mibanco",icon:"maki-bank",imageURL:"https://graph.facebook.com/MibancoOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558589",amenity:"bank"},addTags:{amenity:"bank",brand:"Mibanco","brand:wikidata":"Q5558589","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/Mittelbrandenburgische Sparkasse":{name:"Mittelbrandenburgische Sparkasse",icon:"maki-bank",imageURL:"https://graph.facebook.com/mbs.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1940058",amenity:"bank"},addTags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Monte dei Paschi di Siena":{name:"Monte dei Paschi di Siena",icon:"maki-bank",imageURL:"https://graph.facebook.com/bancamps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q46730",amenity:"bank"},addTags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Montepio":{name:"Montepio",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/303285168/logo_Montepio_259x248_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1946091",amenity:"bank"},addTags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Mountain America Credit Union":{name:"Mountain America Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/MountainAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6924862",amenity:"bank"},addTags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/NAB":{name:"NAB",icon:"maki-bank",imageURL:"https://graph.facebook.com/NAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1430985",amenity:"bank"},addTags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/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"},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",imageURL:"https://graph.facebook.com/onbruralbankbdo/picture?type=large",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/Raiffeisen (Luxembourg)":{name:"Raiffeisen (Luxembourg)",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanque%20Raiffeisen%20Luxembourg%20Logo%20on%20Social%20Media.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11220162",amenity:"bank"},addTags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"},countryCodes:["lu"],terms:["raiffeisen"],matchScore:2,suggestion:true},"amenity/bank/Regions Bank":{name:"Regions Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/RegionsBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q917131",amenity:"bank"},addTags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (Eastern Caribbean)":{name:"Republic Bank (Eastern Caribbean)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbanktnt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314386",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"},countryCodes:["bb","gd","gy","tt"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Republic Bank (USA)":{name:"Republic Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/republicbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7314387",amenity:"bank"},addTags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/República":{name:"República",icon:"maki-bank",imageURL:"https://graph.facebook.com/BROU.uy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4077337",amenity:"bank"},addTags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/bank/S-Pankki":{name:"S-Pankki",icon:"maki-bank",imageURL:"https://graph.facebook.com/kauppapankki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7387053",amenity:"bank"},addTags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SC제일은행":{name:"SC제일은행",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardCharteredKR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q625531",amenity:"bank"},addTags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SEB":{name:"SEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/sebsverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q975655",amenity:"bank"},addTags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"},countryCodes:["de","ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SMBC信託銀行":{name:"SMBC信託銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q17218805",amenity:"bank"},addTags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SNS Bank":{name:"SNS Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/devolksbanknl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1857899",amenity:"bank"},addTags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sacombank":{name:"Sacombank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SacombankHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123772",amenity:"bank"},addTags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Sampath Bank":{name:"Sampath Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Sampathbankplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7410095",amenity:"bank"},addTags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"},countryCodes:["lk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/San Diego County Credit Union":{name:"San Diego County Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/SDCCU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7413628",amenity:"bank"},addTags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Santander":{name:"Santander",icon:"maki-bank",imageURL:"https://graph.facebook.com/SantanderBankUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5835668",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"},terms:["santander consumer bank"],matchScore:2,suggestion:true},"amenity/bank/Santander Río":{name:"Santander Río",icon:"maki-bank",imageURL:"https://graph.facebook.com/Santander.Ar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3385268",amenity:"bank"},addTags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander 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/Southern Bank":{name:"Southern Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SouthernBank.Since1901/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7569660",amenity:"bank"},addTags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Sparda-Bank":{name:"Sparda-Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SpardaVerband/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2307136",amenity:"bank"},addTags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Stanbic Bank":{name:"Stanbic Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7597999",amenity:"bank"},addTags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Bank":{name:"Standard Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/standardbankgrp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1576610",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Standard Chartered":{name:"Standard Chartered",icon:"maki-bank",imageURL:"https://graph.facebook.com/StandardChartered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q548278",amenity:"bank"},addTags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"},terms:["standard chartered bank"],matchScore:2,suggestion:true},"amenity/bank/State Bank of India":{name:"State Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/StateBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1340361",amenity:"bank"},addTags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"},terms:[],matchScore:2,suggestion:true},"amenity/bank/State Employees Credit Union":{name:"State Employees Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/stateemployeescreditunion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7603196",amenity:"bank"},addTags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Summit Bank":{name:"Summit Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/SummitBankPK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7637775",amenity:"bank"},addTags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"},countryCodes:["pk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/SunTrust":{name:"SunTrust",icon:"maki-bank",imageURL:"https://graph.facebook.com/suntrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181507",amenity:"bank"},addTags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"},countryCodes:["us"],terms:["suntrust bank"],matchScore:2,suggestion:true},"amenity/bank/Suncorp":{name:"Suncorp",icon:"maki-bank",imageURL:"https://graph.facebook.com/suncorpAUNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24189567",amenity:"bank"},addTags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Supervielle":{name:"Supervielle",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoSupervielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5718035",amenity:"bank"},addTags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Swedbank":{name:"Swedbank",icon:"maki-bank",imageURL:"https://graph.facebook.com/swedbanksverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1145493",amenity:"bank"},addTags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"},countryCodes:["ee","lt","lv","se"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Syndicate Bank":{name:"Syndicate Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/syndicatebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004088",amenity:"bank"},addTags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Synovus":{name:"Synovus",icon:"maki-bank",imageURL:"https://graph.facebook.com/Synovus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3508889",amenity:"bank"},addTags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TCF Bank":{name:"TCF Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TCFbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669687",amenity:"bank"},addTags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Bank":{name:"TD Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669891",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TD Canada Trust":{name:"TD Canada Trust",icon:"maki-bank",imageURL:"https://graph.facebook.com/TDBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1080670",amenity:"bank"},addTags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TEB":{name:"TEB",icon:"maki-bank",imageURL:"https://graph.facebook.com/teb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862447",amenity:"bank"},addTags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/TSB":{name:"TSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/TSBbankUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7671560",amenity:"bank"},addTags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Takarékszövetkezet":{name:"Takarékszövetkezet",icon:"maki-bank",imageURL:"https://graph.facebook.com/takarekcsoport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30324674",amenity:"bank"},addTags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"},countryCodes:["hu"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tangerine":{name:"Tangerine",icon:"maki-bank",imageURL:"https://graph.facebook.com/TangerineBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15238797",amenity:"bank"},addTags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Targobank":{name:"Targobank",icon:"maki-bank",imageURL:"https://graph.facebook.com/targobank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1455437",amenity:"bank"},addTags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"},countryCodes:["de","es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Tatra banka":{name:"Tatra banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/tatrabanka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1718069",amenity:"bank"},addTags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/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",imageURL:"https://graph.facebook.com/societegenerale.UIB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3550305",amenity:"bank"},addTags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"},countryCodes:["tn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UMB Bank":{name:"UMB Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/504613260851564544/6xEseH7h_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q7865088",amenity:"bank"},addTags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/UNI":{name:"UNI",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicooperation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2933348",amenity:"bank"},addTags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"},countryCodes:["ca"],terms:["caisse populaire","caisse populaire acadienne"],matchScore:2,suggestion:true},"amenity/bank/UOB":{name:"UOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/uob.sg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2064074",amenity:"bank"},addTags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"},terms:[],matchScore:2,suggestion:true},"amenity/bank/USAA":{name:"USAA",icon:"maki-bank",imageURL:"https://graph.facebook.com/USAA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7865722",amenity:"bank"},addTags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ulster Bank":{name:"Ulster Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/UlsterBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2613366",amenity:"bank"},addTags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Umpqua Bank":{name:"Umpqua Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/umpquabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7881772",amenity:"bank"},addTags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/UniCredit Bank":{name:"UniCredit Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/938454142338596864/uYxN76cQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q45568",amenity:"bank"},addTags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"},terms:["unicredit","unicredit banca"],matchScore:2,suggestion:true},"amenity/bank/Unicaja Banco":{name:"Unicaja Banco",icon:"maki-bank",imageURL:"https://graph.facebook.com/unicajabanco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2543704",amenity:"bank"},addTags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank of India":{name:"Union Bank of India",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnionBankOfIndia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2004078",amenity:"bank"},addTags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Union Bank (USA)":{name:"Union Bank (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1442804",amenity:"bank"},addTags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"},countryCodes:["us"],terms:["mufg union bank","union bank of california"],matchScore:2,suggestion:true},"amenity/bank/UnionBank (Philippines)":{name:"UnionBank (Philippines)",icon:"maki-bank",imageURL:"https://graph.facebook.com/unionbankph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7885403",amenity:"bank"},addTags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"},countryCodes:["ph"],terms:["union bank of the philippines"],matchScore:2,suggestion:true},"amenity/bank/United Bank (Connecticut)":{name:"United Bank (Connecticut)",icon:"maki-bank",imageURL:"https://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/VietinBank":{name:"VietinBank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/282125983/logo_Vietinbank_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7928459",amenity:"bank"},addTags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Vijaya Bank":{name:"Vijaya Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Vijayabank.in/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2003171",amenity:"bank"},addTags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/bank/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/1171863426013880320/uN-Or3um_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/Wings Financial Credit Union":{name:"Wings Financial Credit Union",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q8025267",amenity:"bank"},addTags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yapı Kredi":{name:"Yapı Kredi",icon:"maki-bank",imageURL:"https://graph.facebook.com/YapiKrediAZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8049138",amenity:"bank"},addTags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Bank":{name:"Yorkshire Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8055678",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Yorkshire Building Society":{name:"Yorkshire Building Society",icon:"maki-bank",imageURL:"https://graph.facebook.com/yorkshirebuildingsociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12073381",amenity:"bank"},addTags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zagrebačka banka":{name:"Zagrebačka banka",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/512220346951299072/bHCa2IWn_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q140381",amenity:"bank"},addTags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zenith Bank":{name:"Zenith Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/Zenithbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5978240",amenity:"bank"},addTags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"},countryCodes:["gb","gh","gm","ng","sl","za"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Zions Bank":{name:"Zions Bank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/714566769550225408/Xem9Ei7E_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q8072576",amenity:"bank"},addTags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Ziraat Bankası":{name:"Ziraat Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/ziraatbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696003",amenity:"bank"},addTags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"},terms:[],matchScore:2,suggestion:true},"amenity/bank/mBank":{name:"mBank",icon:"maki-bank",imageURL:"https://graph.facebook.com/mBank.Polska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1160928",amenity:"bank"},addTags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/st.george":{name:"st.george",icon:"maki-bank",imageURL:"https://graph.facebook.com/stgeorgebankaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1606050",amenity:"bank"},addTags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"},countryCodes:["au"],terms:["st.george bank"],matchScore:2,suggestion:true},"amenity/bank/Ålandsbanken":{name:"Ålandsbanken",icon:"maki-bank",imageURL:"https://graph.facebook.com/alandsbankenaland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4349236",amenity:"bank"},addTags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ČSOB":{name:"ČSOB",icon:"maki-bank",imageURL:"https://graph.facebook.com/csob/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q340135",amenity:"bank"},addTags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Česká spořitelna":{name:"Česká spořitelna",icon:"maki-bank",imageURL:"https://graph.facebook.com/ceskasporitelna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341100",amenity:"bank"},addTags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/İş Bankası":{name:"İş Bankası",icon:"maki-bank",imageURL:"https://graph.facebook.com/isbankasi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909613",amenity:"bank"},addTags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Εθνική Τράπεζα":{name:"Εθνική Τράπεζα",icon:"maki-bank",imageURL:"https://graph.facebook.com/ibanknbg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1816028",amenity:"bank"},addTags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Τράπεζα Πειραιώς":{name:"Τράπεζα Πειραιώς",icon:"maki-bank",imageURL:"https://graph.facebook.com/piraeusbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312",amenity:"bank"},addTags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/bank/А-Банк":{name:"А-Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/abank.dp.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28705400",amenity:"bank"},addTags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Авангард":{name:"Авангард",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankavangard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122617",amenity:"bank"},addTags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Альфа-Банк":{name:"Альфа-Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/alfabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1377835",amenity:"bank"},addTags:{amenity:"bank",brand:"Альфа-Банк","brand:en":"Alfa-Bank","brand:ru":"Альфа-Банк","brand:wikidata":"Q1377835","brand:wikipedia":"ru:Альфа-банк",name:"Альфа-Банк","name:en":"Alfa-Bank","name:ru":"Альфа-Банк"},countryCodes:["by","kz","ru","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/BankZENIT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4191388",amenity:"bank"},addTags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Казкоммерцбанк":{name:"Казкоммерцбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1168179",amenity:"bank"},addTags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Московский индустриальный банк":{name:"Московский индустриальный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Minbank.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4304145",amenity:"bank"},addTags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Мособлбанк":{name:"Мособлбанк",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q4304446",amenity:"bank"},addTags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Народный банк":{name:"Народный банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/halykbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046186",amenity:"bank"},addTags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"},countryCodes:["kg","kz","uz"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ОТП Банк":{name:"ОТП Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/otpbank.hu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q912778",amenity:"bank"},addTags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Обединена Българска Банка":{name:"Обединена Българска Банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/UnitedBulgarianBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887555",amenity:"bank"},addTags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Открытие":{name:"Открытие",icon:"maki-bank",imageURL:"https://graph.facebook.com/otkritie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4327204",amenity:"bank"},addTags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"},countryCodes:["ru"],terms:["банк открытие"],matchScore:2,suggestion:true},"amenity/bank/Ощадбанк":{name:"Ощадбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/oschadbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4340839",amenity:"bank"},addTags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПУМБ":{name:"ПУМБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/pumbua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4341156",amenity:"bank"},addTags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Почта Банк":{name:"Почта Банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pochtabank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24930461",amenity:"bank"},addTags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Пощенска банка":{name:"Пощенска банка",icon:"maki-bank",imageURL:"https://graph.facebook.com/PostbankBG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234083",amenity:"bank"},addTags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ПриватБанк":{name:"ПриватБанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1515015",amenity:"bank"},addTags:{amenity:"bank",brand:"ПриватБанк","brand:en":"PrivatBank","brand:wikidata":"Q1515015","brand:wikipedia":"uk:ПриватБанк",name:"ПриватБанк","name:en":"PrivatBank"},terms:[],matchScore:2,suggestion:true},"amenity/bank/Приднестровский Сбербанк":{name:"Приднестровский Сбербанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/pridnestrovskiy.sberbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4378147",amenity:"bank"},addTags:{amenity:"bank",brand:"Приднестровский Сбербанк","brand:en":"Pridnestrovian Savings Bank","brand:ru":"Приднестровский Сбербанк","brand:wikidata":"Q4378147","brand:wikipedia":"ru:Приднестровский Сбербанк",name:"Приднестровский Сбербанк","name:en":"Pridnestrovian Savings Bank","name:ru":"Приднестровский Сбербанк"},countryCodes:["md"],terms:["приднестровский cбербанк"],matchScore:2,suggestion:true},"amenity/bank/Приорбанк":{name:"Приорбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/Priorbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3919658",amenity:"bank"},addTags:{amenity:"bank",brand:"Приорбанк","brand:en":"PriorBank","brand:wikidata":"Q3919658","brand:wikipedia":"be:Пріорбанк",name:"Приорбанк","name:en":"PriorBank"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Промсвязьбанк":{name:"Промсвязьбанк",icon:"maki-bank",imageURL:"https://graph.facebook.com/psbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q649100",amenity:"bank"},addTags:{amenity:"bank",brand:"Промсвязьбанк","brand:en":"Promsvyazbank","brand:wikidata":"Q649100","brand:wikipedia":"en:Promsvyazbank",name:"Промсвязьбанк","name:en":"Promsvyazbank"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/РНКБ":{name:"РНКБ",icon:"maki-bank",imageURL:"https://graph.facebook.com/rncb.crimea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16912944",amenity:"bank"},addTags:{amenity:"bank",brand:"РНКБ","brand:wikidata":"Q16912944","brand:wikipedia":"en:Russian National Commercial Bank",name:"РНКБ"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Райффайзен":{name:"Райффайзен",icon:"maki-bank",imageURL:"https://graph.facebook.com/raiffeisenbankrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4389244",amenity:"bank"},addTags:{amenity:"bank",brand:"Райффайзен","brand:en":"Raiffeisenbank","brand:ru":"Райффайзен","brand:wikidata":"Q4389244","brand:wikipedia":"en:Raiffeisenbank (Russia)",name:"Райффайзен","name:en":"Raiffeisenbank","name:ru":"Райффайзен"},countryCodes:["ru","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",imageURL:"https://graph.facebook.com/Ukrsotsbankofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3547885",amenity:"bank"},addTags:{amenity:"bank",brand:"Укрсоцбанк","brand:en":"Ukrsotsbank","brand:uk":"Укрсоцбанк","brand:wikidata":"Q3547885","brand:wikipedia":"uk:Укрсоцбанк",name:"Укрсоцбанк","name:en":"Ukrsotsbank","name:uk":"Укрсоцбанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Уралсиб":{name:"Уралсиб",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankuralsib/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4476693",amenity:"bank"},addTags:{amenity:"bank",brand:"Уралсиб","brand:en":"Uralsib Bank","brand:ru":"Уралсиб","brand:wikidata":"Q4476693","brand:wikipedia":"ru:Уралсиб (банк)",name:"Уралсиб","name:en":"Uralsib Bank","name:ru":"Уралсиб"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хаан банк":{name:"Хаан банк",icon:"maki-bank",imageURL:"https://graph.facebook.com/KhanBank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25632240",amenity:"bank"},addTags:{amenity:"bank",brand:"Хаан банк","brand:en":"Khan Bank","brand:mn":"Хаан банк","brand:wikidata":"Q25632240","brand:wikipedia":"mn:ХААН банк",name:"Хаан банк","name:en":"Khan Bank","name:mn":"Хаан банк"},countryCodes:["mn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Хоум Кредит":{name:"Хоум Кредит",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/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",imageURL:"https://graph.facebook.com/gramenbank/picture?type=large",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",imageURL:"https://graph.facebook.com/bangladeshkrishibank/picture?type=large",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://graph.facebook.com/krungthaibank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q962865",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกรุงไทย","brand:en":"Krung Thai Bank","brand:th":"ธนาคารกรุงไทย","brand:wikidata":"Q962865","brand:wikipedia":"en:Krung Thai Bank",name:"ธนาคารกรุงไทย","name:en":"Krung Thai Bank","name:th":"ธนาคารกรุงไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารกสิกรไทย":{name:"ธนาคารกสิกรไทย",icon:"maki-bank",imageURL:"https://graph.facebook.com/KBankLive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q276557",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารกสิกรไทย","brand:en":"Kasikornbank","brand:th":"ธนาคารกสิกรไทย","brand:wikidata":"Q276557","brand:wikipedia":"en:Kasikornbank",name:"ธนาคารกสิกรไทย","name:en":"Kasikornbank","name:th":"ธนาคารกสิกรไทย"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารออมสิน":{name:"ธนาคารออมสิน",icon:"maki-bank",imageURL:"https://graph.facebook.com/GSBSociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579041",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารออมสิน","brand:en":"Government Savings Bank","brand:th":"ธนาคารออมสิน","brand:wikidata":"Q6579041","brand:wikipedia":"en:Government Savings Bank (Thailand)",name:"ธนาคารออมสิน","name:en":"Government Savings Bank","name:th":"ธนาคารออมสิน"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ธนาคารไทยพาณิชย์":{name:"ธนาคารไทยพาณิชย์",icon:"maki-bank",imageURL:"https://graph.facebook.com/scb.thailand/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2038986",amenity:"bank"},addTags:{amenity:"bank",brand:"ธนาคารไทยพาณิชย์","brand:en":"Siam Commercial Bank","brand:th":"ธนาคารไทยพาณิชย์","brand:wikidata":"Q2038986","brand:wikipedia":"en:Siam Commercial Bank",name:"ธนาคารไทยพาณิชย์","name:en":"Siam Commercial Bank","name:th":"ธนาคารไทยพาณิชย์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/bank/みずほ銀行":{name:"みずほ銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/902036508672106496/L8rp7WY6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2882956",amenity:"bank"},addTags:{amenity:"bank",brand:"みずほ銀行","brand:en":"Mizuho Bank","brand:ja":"みずほ銀行","brand:wikidata":"Q2882956","brand:wikipedia":"en:Mizuho Bank",name:"みずほ銀行","name:en":"Mizuho Bank","name:ja":"みずほ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/ゆうちょ銀行":{name:"ゆうちょ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJapan%20Post%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q907103",amenity:"bank"},addTags:{amenity:"bank",brand:"ゆうちょ銀行","brand:en":"Japan Post Bank","brand:ja":"ゆうちょ銀行","brand:wikidata":"Q907103","brand:wikipedia":"ja:ゆうちょ銀行",name:"ゆうちょ銀行","name:en":"Japan Post Bank","name:ja":"ゆうちょ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/りそな銀行":{name:"りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FResona%20Bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11281447",amenity:"bank"},addTags:{amenity:"bank",brand:"りそな銀行","brand:en":"Resona Bank","brand:ja":"りそな銀行","brand:wikidata":"Q11281447","brand:wikipedia":"ja:りそな銀行",name:"りそな銀行","name:en":"Resona Bank","name:ja":"りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/イオン銀行":{name:"イオン銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1064359056909856774/mH1CT4mL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11286327",amenity:"bank"},addTags:{amenity:"bank",brand:"イオン銀行","brand:en":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/スルガ銀行":{name:"スルガ銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSuruga%20Bank%20Ltd.%20head%20office%20ac.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11313470",amenity:"bank"},addTags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友信託銀行":{name:"三井住友信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSumitomo%20Mitsui%20Trust%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5215421",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三井住友銀行":{name:"三井住友銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/smbc.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2660418",amenity:"bank"},addTags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ信託銀行":{name:"三菱UFJ信託銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FToyotb.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6883178",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/三菱UFJ銀行":{name:"三菱UFJ銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/bk.mufg.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q988284",amenity:"bank"},addTags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"},terms:["三菱東京UFJ銀行"],matchScore:2,suggestion:true},"amenity/bank/上海商業儲蓄銀行":{name:"上海商業儲蓄銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/SCSB.Pukii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4207208",amenity:"bank"},addTags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/东亚银行":{name:"东亚银行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%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://graph.facebook.com/225342697629586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26299",amenity:"bank"},addTags:{amenity:"bank",brand:"中国建设银行","brand:en":"China Construction Bank","brand:wikidata":"Q26299","brand:wikipedia":"en:China Construction Bank",name:"中国建设银行","name:en":"China Construction Bank"},countryCodes:["cn"],terms:["建设银行"],matchScore:2,suggestion:true},"amenity/bank/中国民生银行":{name:"中国民生银行",icon:"maki-bank",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",geometry:["point","area"],tags:{"brand:wikidata":"Q1071712",amenity:"bank"},addTags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台中商業銀行":{name:"台中商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTcbbank%20headoffice.JPG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6136958",amenity:"bank"},addTags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台北富邦商業銀行":{name:"台北富邦商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q697293",amenity:"bank"},addTags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/台新國際商業銀行":{name:"台新國際商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q7676420",amenity:"bank"},addTags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/合作金庫商業銀行":{name:"合作金庫商業銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDepartment%20of%20Business%2C%20Taiwan%20Cooperative%20Bank%2020171216.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q701540",amenity:"bank"},addTags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/國泰世華商業銀行":{name:"國泰世華商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q702656",amenity:"bank"},addTags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/埼玉りそな銀行":{name:"埼玉りそな銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSaitama%20Resona%20Bank%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4671591",amenity:"bank"},addTags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/大眾商業銀行":{name:"大眾商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10937047",amenity:"bank"},addTags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/安泰商業銀行":{name:"安泰商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q10946952",amenity:"bank"},addTags:{amenity:"bank",brand:"安泰商業銀行","brand:en":"Entie Commercial Bank","brand:wikidata":"Q10946952","brand:wikipedia":"zh:安泰商業銀行",name:"安泰商業銀行","name:en":"Entie Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/工商银行":{name:"工商银行",icon:"maki-bank",imageURL:"https://graph.facebook.com/icbcglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26463",amenity:"bank"},addTags:{amenity:"bank",brand:"工商银行","brand:en":"Industrial and Commercial Bank of China","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"工商银行","name:en":"Industrial and Commercial Bank of China"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"amenity/bank/常陽銀行":{name:"常陽銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q6297774",amenity:"bank"},addTags:{amenity:"bank",brand:"常陽銀行","brand: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",geometry:["point","area"],tags:{"brand:wikidata":"Q571997",amenity:"bank"},addTags:{amenity:"bank",brand:"新生銀行","brand:en":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/日本銀行":{name:"日本銀行",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1695643374/medama_moji_en_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q333101",amenity:"bank"},addTags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/東亞銀行":{name:"東亞銀行",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBank%20of%20East%20Asia%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q806679",amenity:"bank"},addTags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/板信商業銀行":{name:"板信商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"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":"Q11614605",amenity:"bank"},addTags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"},terms:[],matchScore:2,suggestion:true},"amenity/bank/華南商業銀行":{name:"華南商業銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11620043",amenity:"bank"},addTags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"amenity/bank/近畿大阪銀行":{name:"近畿大阪銀行",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q11638628",amenity:"bank"},addTags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/遠東國際商業銀行":{name:"遠東國際商業銀行",icon:"maki-bank",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:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/국민은행":{name:"국민은행",icon:"maki-bank",imageURL:"https://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://graph.facebook.com/KEBHana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q484047",amenity:"bank"},addTags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/bar/All Bar One":{name:"All Bar One",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/717013484467306497/vjG-lkGe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4728624",amenity:"bar"},addTags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolución de Cuba":{name:"Revolución de Cuba",icon:"maki-bar",imageURL:"https://pbs.twimg.com/profile_images/1001476884482396160/3NEm7OnI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64024691",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bar/Revolution":{name:"Revolution",icon:"maki-bar",imageURL:"https://graph.facebook.com/revolutionbars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64024398",amenity:"bar"},addTags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/Call a Bike":{name:"Call a Bike",icon:"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:"temaki-money_hand",imageURL:"https://graph.facebook.com/CadecaCasasdeCambioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62122716",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/Travelex":{name:"Travelex",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/TravelexUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2337964",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Travelex","brand:wikidata":"Q2337964","brand:wikipedia":"en:Travelex",name:"Travelex"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/85°C":{name:"85°C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"},countryCodes:["au","us"],terms:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],matchScore:2,suggestion:true},"amenity/cafe/85度C":{name:"85度C",icon:"maki-cafe",imageURL:"https://graph.facebook.com/85CBakeryCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644852",amenity:"cafe"},addTags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"},countryCodes:["cn","tw"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Aroma Espresso Bar":{name:"Aroma Espresso Bar",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Aroma Espresso Bar","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"Aroma Espresso Bar",takeaway:"yes"},countryCodes:["ca","kz","ro","ua","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Barista":{name:"Barista",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BaristaCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q644735",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Barista","brand:wikidata":"Q644735","brand:wikipedia":"en:Barista (company)",cuisine:"coffee_shop",name:"Barista",takeaway:"yes"},countryCodes:["in","lk","mv","np"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Beck's Coffee Shop":{name:"Beck's Coffee Shop",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/773289632230322180/YtO0yEVy_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11191008",amenity:"cafe"},addTags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"},countryCodes:["jp"],terms:["beck's coffe shop"],matchScore:2,suggestion:true},"amenity/cafe/Biggby Coffee":{name:"Biggby Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/BiggbyCoffee.Bhappy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Black Rock Coffee":{name:"Black Rock Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/blackrockcoffeebar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64225934",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/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://graph.facebook.com/BridgeheadCoffeehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4966509",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bridgehead","brand:wikidata":"Q4966509","brand:wikipedia":"en:Bridgehead Coffee",cuisine:"coffee_shop",name:"Bridgehead",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cafe Coffee Day":{name:"Cafe Coffee Day",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafecoffeeday/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017235",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cafe Coffee Day","brand:wikidata":"Q5017235","brand:wikipedia":"en:Café Coffee Day",cuisine:"coffee_shop",name:"Cafe Coffee Day",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caffè Nero":{name:"Caffè Nero",icon:"maki-cafe",imageURL:"https://graph.facebook.com/caffenerous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q675808",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caffè Nero","brand:wikidata":"Q675808","brand:wikipedia":"en:Caffè Nero",cuisine:"coffee_shop",name:"Caffè Nero",takeaway:"yes"},countryCodes:["gb","ie","tr","us"],terms:["cafe nero"],matchScore:2,suggestion:true},"amenity/cafe/Café Amazon":{name:"Café Amazon",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Amazon","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"Café Amazon",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Dépôt":{name:"Café Dépôt",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafedepot.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64924449",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Dépôt","brand:wikidata":"Q64924449",cuisine:"coffee_shop;cake;bagel;bistro",name:"Café Dépôt",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Café Martínez":{name:"Café Martínez",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CafeMartinezSitioOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16540032",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Café Martínez","brand:wikidata":"Q16540032","brand:wikipedia":"es:Café Martínez",cuisine:"coffee_shop",name:"Café Martínez",takeaway:"yes"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Caribou Coffee":{name:"Caribou Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cariboucoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039494",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Caribou Coffee","brand:wikidata":"Q5039494","brand:wikipedia":"en:Caribou Coffee",cuisine:"coffee_shop",name:"Caribou Coffee",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Chatime":{name:"Chatime",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatimeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16829306",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Chatime","brand:en":"Chatime","brand:wikidata":"Q16829306","brand:wikipedia":"en:Chatime","brand:zh":"日出茶太",cuisine:"bubble_tea",name:"Chatime","name:en":"Chatime","name:zh":"日出茶太",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/CoCo":{name:"CoCo",icon:"maki-cafe",imageURL:"https://pbs.twimg.com/profile_images/1143629340564963328/C8Axen7r_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q64827025",amenity:"cafe"},addTags:{amenity:"cafe",brand:"CoCo","brand:wikidata":"Q64827025",cuisine:"bubble_tea",name:"Coco",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Fellows":{name:"Coffee Fellows",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeFellowsDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461429",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"},countryCodes:["de","lu","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee House (Finland)":{name:"Coffee House (Finland)",icon:"maki-cafe",imageURL:"https://graph.facebook.com/raflaamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11855430",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee Island":{name:"Coffee Island",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeIslandUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60867333",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"},countryCodes:["cy","gr"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Coffee 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",imageURL:"https://graph.facebook.com/1253496538019194/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606270",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cofizz","brand:en":"Cofizz","brand:he":"קופיז","brand:wikidata":"Q64606270",cuisine:"coffee_shop",name:"Cofizz","name:en":"Cofizz","name:he":"קופיז",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Costa":{name:"Costa",icon:"maki-cafe",imageURL:"https://graph.facebook.com/costacoffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608845",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Costa","brand:wikidata":"Q608845","brand:wikipedia":"en:Costa Coffee",cuisine:"coffee_shop",name:"Costa",takeaway:"yes"},terms:["costa coffee"],matchScore:2,suggestion:true},"amenity/cafe/Country Style":{name:"Country Style",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CountryStyleCDN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5177435",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Country Style","brand:wikidata":"Q5177435","brand:wikipedia":"en:Country Style",cuisine:"coffee_shop",name:"Country Style",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Cộng Cà Phê":{name:"Cộng Cà Phê",icon:"maki-cafe",imageURL:"https://graph.facebook.com/congcaphe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63864181",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Cộng Cà Phê","brand:wikidata":"Q63864181",cuisine:"coffee_shop;vietnamese",name:"Cộng Cà Phê","name:vi":"Cộng Cà Phê",takeaway:"yes"},countryCodes:["kr","vn"],terms:["cong"],matchScore:2,suggestion:true},"amenity/cafe/Dutch Bros. Coffee":{name:"Dutch Bros. Coffee",icon:"maki-cafe",imageURL:"https://graph.facebook.com/dutchbros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5317253",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Dutch Bros. Coffee","brand:wikidata":"Q5317253","brand:wikipedia":"en:Dutch Bros. Coffee",cuisine:"coffee_shop",name:"Dutch Bros. Coffee",takeaway:"only"},countryCodes:["us"],terms:["dutch bros","dutch brothers"],matchScore:2,suggestion:true},"amenity/cafe/Espresso House":{name:"Espresso House",icon:"maki-cafe",imageURL:"https://graph.facebook.com/196870344516819/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10489162",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Espresso House","brand:wikidata":"Q10489162","brand:wikipedia":"en:Espresso House",cuisine:"coffee_shop",name:"Espresso House",takeaway:"yes"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Fran's Café":{name:"Fran's Café",icon:"maki-cafe",imageURL:"https://graph.facebook.com/franscafeoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075645",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Fran's Café","brand: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/Jamaica Blue":{name:"Jamaica Blue",icon:"maki-cafe",imageURL:"https://graph.facebook.com/JamaicaBlueCafes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24965819",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"},countryCodes:["ae","au","cn","my","nz","sg","uk"],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/Mikel":{name:"Mikel",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MikelCoffeeCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952021",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"},countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Muffin Break":{name:"Muffin Break",icon:"maki-cafe",imageURL:"https://graph.facebook.com/MuffinBreakUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16964876",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",takeaway:"yes"},countryCodes:["au","in","nz","uk"],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/Ya Kun Kaya Toast":{name:"Ya Kun Kaya Toast",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q8046237",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/cafe/Даблби":{name:"Даблби",icon:"maki-cafe",imageURL:"https://graph.facebook.com/DoubleBCoffeeTea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62501686",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Старбакс":{name:"Старбакс",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Шоколадница":{name:"Шоколадница",icon:"maki-cafe",imageURL:"https://graph.facebook.com/shoko.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30891188",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"},countryCodes:["ru"],terms:["шоколад"],matchScore:2,suggestion:true},"amenity/cafe/Штолле":{name:"Штолле",icon:"maki-cafe",imageURL:"https://graph.facebook.com/stollerussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62502236",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ארומה":{name:"ארומה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Israel.Aroma/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2909872",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/לנדוור":{name:"לנדוור",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafelandwer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6485288",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"},countryCodes:["il"],terms:["קפה לדנוור"],matchScore:2,suggestion:true},"amenity/cafe/סי קפה":{name:"סי קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/242590255775924/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606227",amenity:"cafe"},addTags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"},countryCodes:["il"],terms:["si cafe","si espresso"],matchScore:2,suggestion:true},"amenity/cafe/קפה ג'ו":{name:"קפה ג'ו",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafejoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774425",amenity:"cafe"},addTags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"},countryCodes:["il"],terms:["ג'ו קפה"],matchScore:2,suggestion:true},"amenity/cafe/קפה גרג":{name:"קפה גרג",icon:"maki-cafe",imageURL:"https://graph.facebook.com/gregcafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43295499",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה נמרוד":{name:"קפה נמרוד",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafenimrod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64606192",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/קפה קפה":{name:"קפה קפה",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafe.cafe.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5017233",amenity:"cafe"},addTags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/רולדין":{name:"רולדין",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q18390972",amenity:"cafe"},addTags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/คาเฟ่ อเมซอน":{name:"คาเฟ่ อเมซอน",icon:"maki-cafe",imageURL:"https://graph.facebook.com/cafeamazonofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q43247503",amenity:"cafe"},addTags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/エクセルシオール カフェ":{name:"エクセルシオール カフェ",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q11289828",amenity:"cafe"},addTags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ド・クリエ":{name:"カフェ・ド・クリエ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/pokkacreate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17219077",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/カフェ・ベローチェ":{name:"カフェ・ベローチェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/ChatnoirCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294597",amenity:"cafe"},addTags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/コメダ珈琲店":{name:"コメダ珈琲店",icon:"maki-cafe",imageURL:"https://graph.facebook.com/komeda.coffee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302679",amenity:"cafe"},addTags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/サンマルクカフェ":{name:"サンマルクカフェ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/saintmarccafephilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11305989",amenity:"cafe"},addTags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/スターバックス":{name:"スターバックス",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Starbucks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37158",amenity:"cafe"},addTags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/タリーズコーヒー":{name:"タリーズコーヒー",icon:"maki-cafe",imageURL:"https://graph.facebook.com/TullysCoffeeShops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3541983",amenity:"cafe"},addTags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/ドトールコーヒーショップ":{name:"ドトールコーヒーショップ",icon:"maki-cafe",imageURL:"https://graph.facebook.com/Fun.Doutor.Fan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11322732",amenity:"cafe"},addTags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"},countryCodes:["jp"],terms:["ドトールコーヒー"],matchScore:2,suggestion:true},"amenity/cafe/快可立":{name:"快可立",icon:"maki-cafe",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/Chargy":{name:"Chargy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/chargy.lu/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q62702950",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Circuit électrique":{name:"Circuit électrique",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/lecircuitelectrique/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"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/Electric Circuit":{name:"Electric Circuit",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:"Electric Circuit","brand:wikidata":"Q64969699",name:"Electric Circuit"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Enel":{name:"Enel",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/enelsharing/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q651222",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"},countryCodes:["it"],terms:["enel - stazione di ricarica"],matchScore:2,suggestion:true},"amenity/charging_station/FLO":{name:"FLO",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/flonetwork/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q64971203",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/InCharge":{name:"InCharge",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/InChargeSverige/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q71041027",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"},terms:["Vattenfall"],matchScore:2,suggestion:true},"amenity/charging_station/Innogy":{name:"Innogy",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/innogized/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q2124721",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"},terms:["RWE"],matchScore:2,suggestion:true},"amenity/charging_station/Source London":{name:"Source London",icon:"fas-charging-station",imageURL:"https://graph.facebook.com/SourceLondon/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7565133",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/charging_station/Tesla Supercharger":{name:"Tesla Supercharger",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/489192650474414080/4RxZxsud_bigger.png",geometry:["point"],tags:{"brand:wikidata":"Q17089620",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"},terms:[],matchScore:2,suggestion:true},"amenity/charging_station/bike-energy":{name:"bike-energy",icon:"fas-charging-station",geometry:["point"],tags:{"brand:wikidata":"Q67770877",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"},countryCodes:["at","ch","de","fr","it","lu"],terms:["bike-energy ladestation"],matchScore:2,suggestion:true},"amenity/charging_station/eVgo":{name:"eVgo",icon:"fas-charging-station",imageURL:"https://pbs.twimg.com/profile_images/1072541771777888256/E1Ma7jGm_bigger.jpg",geometry:["point"],tags:{"brand:wikidata":"Q61803820",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/childcare/Kids 'R' Kids":{name:"Kids 'R' Kids",icon:"fas-child",imageURL:"https://graph.facebook.com/kidsrkidscorporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65560342",amenity:"childcare"},addTags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"},countryCodes:["us"],terms:["kids are kids"],matchScore:2,suggestion:true},"amenity/childcare/YMCA Child Care":{name:"YMCA Child Care",icon:"fas-child",imageURL:"https://graph.facebook.com/YMCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157169",amenity:"childcare"},addTags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"},countryCodes:["us"],terms:["ymca","ymca child care center"],matchScore:2,suggestion:true},"amenity/cinema/109シネマズ":{name:"109シネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/438297009664571/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854269",amenity:"cinema"},addTags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/AMC":{name:"AMC",icon:"maki-cinema",imageURL:"https://graph.facebook.com/amctheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q294721",amenity:"cinema"},addTags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"},countryCodes:["us"],terms:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],matchScore:2,suggestion:true},"amenity/cinema/B&B Theatres":{name:"B&B Theatres",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/796752289859969025/6La-tnNc_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4833576",amenity:"cinema"},addTags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"},countryCodes:["us"],terms:["b&b theaters"],matchScore:2,suggestion:true},"amenity/cinema/Caribbean Cinemas":{name:"Caribbean Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/caribbeancinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5039364",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"},countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Century Theatres":{name:"Century Theatres",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCentury%20Theater.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2946307",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"},countryCodes:["us"],terms:["century theater","century theaters","century theatre"],matchScore:2,suggestion:true},"amenity/cinema/CineStar":{name:"CineStar",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CineStarDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q321889",amenity:"cinema"},addTags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema City":{name:"Cinema City",icon:"maki-cinema",imageURL:"https://graph.facebook.com/CinemaCityPoland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q543651",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"},countryCodes:["cz","hu","pl","ro"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinema NOS":{name:"Cinema NOS",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q8063259",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemark":{name:"Cinemark",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemarkoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707530",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Europe)":{name:"Cinemaxx (Europe)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinemaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q881860",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"},countryCodes:["de","dk"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinemaxx (Indonesia)":{name:"Cinemaxx (Indonesia)",icon:"maki-cinema",imageURL:"https://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/Cineplex":{name:"Cineplex",icon:"maki-cinema",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCineplex%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2972807",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"},countryCodes:["ca"],terms:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],matchScore:2,suggestion:true},"amenity/cinema/Cineplexx":{name:"Cineplexx",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineplexxAT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873340",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cinepolis":{name:"Cinepolis",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cinepolisbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5686673",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"},terms:[],matchScore:2,suggestion:true},"amenity/cinema/Cineworld":{name:"Cineworld",icon:"maki-cinema",imageURL:"https://graph.facebook.com/cineworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5120901",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Event":{name:"Event",icon:"maki-cinema",imageURL:"https://graph.facebook.com/EventCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5416698",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"},countryCodes:["au","nz"],terms:["event cinema"],matchScore:2,suggestion:true},"amenity/cinema/Harkins Theatres":{name:"Harkins Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/harkinstheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5658199",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"},countryCodes:["us"],terms:["harkins theater","harkins theaters","harkins theatre"],matchScore:2,suggestion:true},"amenity/cinema/Hoyts":{name:"Hoyts",icon:"maki-cinema",imageURL:"https://graph.facebook.com/hoytsaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5922976",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Landmark Theatres":{name:"Landmark Theatres",icon:"maki-cinema",imageURL:"https://graph.facebook.com/LandmarkTheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6484805",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"},countryCodes:["us"],terms:["landmark theater","landmark theaters","landmark theatre"],matchScore:2,suggestion:true},"amenity/cinema/MOVIX":{name:"MOVIX",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q11532184",amenity:"cinema"},addTags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Marcus Cinema":{name:"Marcus Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/marcustheatres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083352",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"},countryCodes:["us"],terms:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],matchScore:2,suggestion:true},"amenity/cinema/Movie Tavern":{name:"Movie Tavern",icon:"maki-cinema",imageURL:"https://graph.facebook.com/movietavern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64083534",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Multikino":{name:"Multikino",icon:"maki-cinema",imageURL:"https://graph.facebook.com/MultikinoPolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1144802",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"},countryCodes:["lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Odeon":{name:"Odeon",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ODEON/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6127470",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"},countryCodes:["gb","gr","ie","it"],terms:["odeon cinema"],matchScore:2,suggestion:true},"amenity/cinema/Pathé Gaumont":{name:"Pathé Gaumont",icon:"maki-cinema",imageURL:"https://abs.twimg.com/sticky/default_profile_images/default_profile_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3060526",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"},countryCodes:["be","ch","fr","nl"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Regal Cinemas":{name:"Regal Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/RegalMovies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q835638",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"},countryCodes:["us"],terms:["regal cinema"],matchScore:2,suggestion:true},"amenity/cinema/Showcase Cinemas":{name:"Showcase Cinemas",icon:"maki-cinema",imageURL:"https://graph.facebook.com/ShowcaseUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503170",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"},countryCodes:["ar","gb","us"],terms:["showcase cinema"],matchScore:2,suggestion:true},"amenity/cinema/TOHOシネマズ":{name:"TOHOシネマズ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/tohocinemasmagagine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11235261",amenity:"cinema"},addTags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/The Space Cinema":{name:"The Space Cinema",icon:"maki-cinema",imageURL:"https://graph.facebook.com/TheSpaceCinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3989406",amenity:"cinema"},addTags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"},countryCodes:["it"],terms:["the space"],matchScore:2,suggestion:true},"amenity/cinema/UGC":{name:"UGC",icon:"maki-cinema",imageURL:"https://pbs.twimg.com/profile_images/966691384865558529/LlqCR8ga_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1643241",amenity:"cinema"},addTags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/Vue (IrelandAndUK)":{name:"Vue (IrelandAndUK)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/VueCinemas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2535134",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"},countryCodes:["gb","ie"],terms:["vue cinema","vue cinemas"],matchScore:2,suggestion:true},"amenity/cinema/Vue (Netherlands)":{name:"Vue (Netherlands)",icon:"maki-cinema",imageURL:"https://graph.facebook.com/vuecinemasnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2421690",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"},countryCodes:["nl"],terms:["vue cinema"],matchScore:2,suggestion:true},"amenity/cinema/イオンシネマ":{name:"イオンシネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/aeoncinema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17192792",amenity:"cinema"},addTags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/cinema/ユナイテッド・シネマ":{name:"ユナイテッド・シネマ",icon:"maki-cinema",imageURL:"https://graph.facebook.com/unitedcinemasgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11345629",amenity:"cinema"},addTags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/CityMD":{name:"CityMD",icon:"maki-doctor",imageURL:"https://graph.facebook.com/CityMD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22295471",amenity:"clinic"},addTags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/DaVita Dialysis":{name:"DaVita Dialysis",icon:"maki-doctor",imageURL:"https://graph.facebook.com/davitakidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5207184",amenity:"clinic"},addTags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["davita","davita dialysis center","davita kidney care"],matchScore:2,suggestion:true},"amenity/clinic/Dialysis Clinic":{name:"Dialysis Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/DialysisClinicInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5270633",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["dialysis clinic inc"],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Kidney Care":{name:"Fresenius Kidney Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Fresenius Medical Care":{name:"Fresenius Medical Care",icon:"maki-doctor",imageURL:"https://graph.facebook.com/freseniuskidneycare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q650259",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Planned Parenthood":{name:"Planned Parenthood",icon:"maki-doctor",imageURL:"https://graph.facebook.com/PlannedParenthood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2553262",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/Satellite Healthcare":{name:"Satellite Healthcare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/satellitehealthcare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q50039787",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["satellite","satellite dialysis"],matchScore:2,suggestion:true},"amenity/clinic/Terveystalo":{name:"Terveystalo",icon:"maki-doctor",imageURL:"https://graph.facebook.com/Terveystalo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11897034",amenity:"clinic"},addTags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"},reference:{key:"amenity",value:"clinic"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/clinic/VA Clinic":{name:"VA Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/VeteransHealth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6580225",amenity:"clinic"},addTags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],matchScore:2,suggestion:true},"amenity/clinic/ZoomCare":{name:"ZoomCare",icon:"maki-doctor",imageURL:"https://graph.facebook.com/ZOOMCare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64120374",amenity:"clinic"},addTags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"},reference:{key:"amenity",value:"clinic"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Aspen Dental":{name:"Aspen Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/AspenDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807808",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Comfort Dental":{name:"Comfort Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/comfortdental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22079521",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Dentix":{name:"Dentix",icon:"maki-dentist",imageURL:"https://graph.facebook.com/dentixes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30505320",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"},reference:{key:"amenity",value:"dentist"},terms:[],matchScore:2,suggestion:true},"amenity/dentist/Folktandvården":{name:"Folktandvården",icon:"maki-dentist",imageURL:"https://graph.facebook.com/folktandvardenstockholm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10497476",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"},reference:{key:"amenity",value:"dentist"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Kool Smiles":{name:"Kool Smiles",icon:"maki-dentist",imageURL:"https://graph.facebook.com/MyKoolSmiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430587",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Vitaldent":{name:"Vitaldent",icon:"maki-dentist",imageURL:"https://graph.facebook.com/VitaldentEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5860599",amenity:"dentist"},addTags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"},reference:{key:"amenity",value:"dentist"},countryCodes:["es","it"],terms:[],matchScore:2,suggestion:true},"amenity/dentist/Western Dental":{name:"Western Dental",icon:"maki-dentist",imageURL:"https://graph.facebook.com/WesternDental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64211989",amenity:"dentist"},addTags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"},reference:{key:"amenity",value:"dentist"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/MinuteClinic":{name:"MinuteClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/minuteclinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6871141",amenity:"doctors"},addTags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/RediClinic":{name:"RediClinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/RediClinic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64138408",amenity:"doctors"},addTags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/doctors/The Little Clinic":{name:"The Little Clinic",icon:"maki-doctor",geometry:["point","area"],tags:{"brand:wikidata":"Q64138262",amenity:"doctors"},addTags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["little clinic"],matchScore:2,suggestion:true},"amenity/doctors/Walgreens Healthcare Clinic":{name:"Walgreens Healthcare Clinic",icon:"maki-doctor",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",amenity:"doctors"},addTags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"},reference:{key:"amenity",value:"doctors"},countryCodes:["us"],terms:["healthcare clinic","takecare","takecare clinic","walgreens"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/241 Pizza":{name:"241 Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/241PizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4631768",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (Canada)":{name:"A&W (Canada)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/405801939456462/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818848",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/A&W (USA)":{name:"A&W (USA)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/awrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q277641",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Andok's":{name:"Andok's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/andokslitsonmanok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267166",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Angel's Burger":{name:"Angel's Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/angburgerngbayan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62267228",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Arby's":{name:"Arby's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/arbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q630866",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","tr","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Arctic Circle":{name:"Arctic Circle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ArcticCircle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4787501",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Au Bon Pain":{name:"Au Bon Pain",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/aubonpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818942",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Au Bon Pain","brand:wikidata":"Q4818942","brand:wikipedia":"en:Au Bon Pain",cuisine:"sandwich",name:"Au Bon Pain",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["in","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Auntie Anne's":{name:"Auntie Anne's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/auntieannespretzels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4822010",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Auntie Anne's","brand:wikidata":"Q4822010","brand:wikipedia":"en:Auntie Anne's",cuisine:"pretzel",name:"Auntie Anne's",takeaway:"yes"},countryCodes:["us"],terms:["auntie annes pretzels"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Back Yard Burgers":{name:"Back Yard Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/backyardburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2878376",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Back Yard Burgers","brand:wikidata":"Q2878376","brand:wikipedia":"en:Back Yard Burgers",cuisine:"burger",name:"Back Yard Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Baja Fresh":{name:"Baja Fresh",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/bajafresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2880019",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Baja Fresh","brand:wikidata":"Q2880019","brand:wikipedia":"en:Baja Fresh",cuisine:"mexican",name:"Baja Fresh",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Barburrito":{name:"Barburrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/BarburritoUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983668",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Barburrito","brand:wikidata":"Q16983668","brand:wikipedia":"en:Barburrito",cuisine:"mexican",name:"Barburrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bembos":{name:"Bembos",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bembos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466971",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bembos","brand:wikidata":"Q466971","brand:wikipedia":"en:Bembos",cuisine:"burger",name:"Bembos",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Blimpie":{name:"Blimpie",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Blimpie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4926479",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Blimpie","brand:wikidata":"Q4926479","brand:wikipedia":"en:Blimpie",cuisine:"sandwich",name:"Blimpie",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Bob's":{name:"Bob's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/bobsbrasil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1392113",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Bob's","brand:wikidata":"Q1392113","brand:wikipedia":"en:Bob's",cuisine:"burger",name:"Bob's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ao","br","cl","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Bojangles'":{name:"Bojangles'",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Bojangles1977/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q891163",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Bojangles'","brand:wikidata":"Q891163","brand:wikipedia":"en:Bojangles' Famous Chicken 'n Biscuits",cuisine:"chicken",name:"Bojangles'",official_name:"Bojangles' Famous Chicken 'n Biscuits",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Booster Juice":{name:"Booster Juice",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/boosterjuice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943796",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Booster Juice","brand:wikidata":"Q4943796","brand:wikipedia":"en:Booster Juice",cuisine:"juice",name:"Booster Juice",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Boston Market":{name:"Boston Market",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/BostonMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q603617",amenity:"fast_food",cuisine:"american;chicken"},addTags:{amenity:"fast_food",brand:"Boston Market","brand:wikidata":"Q603617","brand:wikipedia":"en:Boston Market",cuisine:"american;chicken",name:"Boston Market",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Braum's":{name:"Braum's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BraumsIceCreamandDairyStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4958263",amenity:"fast_food",cuisine:"ice_cream"},addTags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Bruegger's Bagels":{name:"Bruegger's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Brueggers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4978656",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"},countryCodes:["us"],terms:["breuger's","breugger's","bruger's","brugger's"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Burger 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/chicken/Chicken Treat":{name:"Chicken Treat",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/ChickenTreat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5096274",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/China Wok":{name:"China Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ChinaWokPeru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5766542",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Chipotle":{name:"Chipotle",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/chipotle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q465751",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chopt":{name:"Chopt",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/choptsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17509305",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Chowking":{name:"Chowking",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/chowkingph/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1076816",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Church's Chicken":{name:"Church's Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/churchschicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1089932",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Cinnabon":{name:"Cinnabon",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Cinnabon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1092539",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Cinnabon","brand: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:["dairy queen chill & grill"],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Dairy Queen":{name:"Dairy Queen",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/dairyqueen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141226",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},terms:["dq"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Daylight Donuts":{name:"Daylight Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DaylightDonutFlourCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48970508",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Debonairs Pizza":{name:"Debonairs Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DebonairsPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65079407",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],terms:["debonairs"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Del Taco":{name:"Del Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/deltaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1183818",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Dig Inn":{name:"Dig Inn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/diginnmarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28226241",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Domino's":{name:"Domino's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["dominos pizza"],matchScore:2,suggestion:true},"amenity/fast_food/donut/Donut King":{name:"Donut King",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DonutKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5296921",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Dunkin' Donuts":{name:"Dunkin' Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/DunkinUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q847743",amenity:"fast_food",cuisine:"donut;coffee_shop"},addTags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["dunkin doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/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/Es Teler 77":{name:"Es Teler 77",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/esteler77/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5396630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Everest":{name:"Everest",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/everest.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273299",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Extreme Pita":{name:"Extreme Pita",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TheExtremePita/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422367",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Extreme Pizza":{name:"Extreme Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ExtremePizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5422364",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Fazoli's":{name:"Fazoli's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Fazolis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1399195",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Figaro's Pizza":{name:"Figaro's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/figarospizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802600",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Firehouse Subs":{name:"Firehouse Subs",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/firehousesubs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5451873",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Five Guys":{name:"Five Guys",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fiveguys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1131810",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ice_cream/Freddy's":{name:"Freddy's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddysUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5496837",amenity:"fast_food",cuisine:"ice_cream;burger"},addTags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"},reference:{key:"cuisine",value:"ice_cream"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Freebirds":{name:"Freebirds",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/freebirdsworldburrito/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500367",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Freshslice Pizza":{name:"Freshslice Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Freshslice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503082",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gabriel Pizza":{name:"Gabriel Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/gabrielpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515791",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gino's Pizza":{name:"Gino's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/1240550288/TwitterProfile_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5563205",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Gold Star Chili":{name:"Gold Star Chili",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/goldstarchili/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16994254",amenity:"fast_food"},addTags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Golden Chick":{name:"Golden Chick",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/GoldenChick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3772930",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Golden Krust Caribbean Bakery & Grill":{name:"Golden Krust Caribbean Bakery & Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GoldenKrust/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5579615",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Good Times":{name:"Good Times",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/culvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143589",amenity:"fast_food",cuisine:"burger;ice_cream"},addTags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Great American Cookies":{name:"Great American Cookies",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/greatamericancookies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5598629",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Greenwich":{name:"Greenwich",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/GreenwichPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2691308",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/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/Honey Baked Ham":{name:"Honey Baked Ham",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/HoneyBaked/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5893363",amenity:"fast_food"},addTags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"},countryCodes:["us"],terms:["honey baked ham company"],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Hot Dog on a Stick":{name:"Hot Dog on a Stick",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/HotDogonaStick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5909922",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Hot Head Burritos":{name:"Hot Head Burritos",icon:"fas-pepper-hot",imageURL:"https://pbs.twimg.com/profile_images/956274820035022853/SBuliAdo_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5910008",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/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",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Jimmy the Greek":{name:"Jimmy the Greek",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/gimmejimmy.jtg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17077817",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"},countryCodes:["ae","ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Jollibee":{name:"Jollibee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/JollibeePhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q37614",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Just Salad":{name:"Just Salad",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/justsalad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23091823",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/KFC":{name:"KFC",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Kernels Popcorn":{name:"Kernels Popcorn",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kernelspopcorn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64876684",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Kochlöffel":{name:"Kochlöffel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kochloeffel.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q315539",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["de","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Kotipizza":{name:"Kotipizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/kotipizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1628625",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Krispy Kreme":{name:"Krispy Kreme",icon:"temaki-donut",imageURL:"https://graph.facebook.com/KrispyKreme/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192805",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},terms:["krispy kreme doughnuts"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Krispy Krunchy Chicken":{name:"Krispy Krunchy Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Krispy.Krunchy.Foods.LLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65087447",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["mx","us"],terms:["crispy crunchy chicken"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Krystal":{name:"Krystal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Krystal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q472195",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/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/La Salsa":{name:"La Salsa",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/lasalsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48835190",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Lee's Famous Recipe Chicken":{name:"Lee's Famous Recipe Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/LeesFamousRecipeChicken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512810",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca","us"],terms:["lee's"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Lee's Sandwiches":{name:"Lee's Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/LeesSandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512823",amenity:"fast_food",cuisine:"vietnamese;sandwich"},addTags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Little Caesars":{name:"Little Caesars",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/LittleCaesars/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1393809",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["little caesars pizza","little ceasars","little ceasars pizza"],matchScore:2,suggestion:true},"amenity/fast_food/Long John Silver's":{name:"Long John Silver's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/LongJohnSilvers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1535221",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Lotteria":{name:"Lotteria",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/MOD Pizza":{name:"MOD Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/MODPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903469",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manchu Wok":{name:"Manchu Wok",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManchuWOKRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6747622",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Mang Inasal":{name:"Mang Inasal",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MangInasalPhilippines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6748573",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Manhattan Bagel":{name:"Manhattan Bagel",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ManhattanBagel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517333",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"},countryCodes:["us"],terms:["manhattan bagels"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Mary Brown's":{name:"Mary Brown's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/MaryBrowns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6779125",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Max":{name:"Max",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/maxburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1912172",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/McDonald's":{name:"McDonald's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Meson Sandwiches":{name:"Meson Sandwiches",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/elmesonsandwiches/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5351585",amenity:"fast_food",cuisine:"sandwich"},addTags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["el meson"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mighty Taco":{name:"Mighty Taco",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MyMightyTaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6844210",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Minute Burger":{name:"Minute Burger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/MinuteBurger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273503",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Moe's Southwest Grill":{name:"Moe's Southwest Grill",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MoesSouthwestGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6889938",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",short_name:"Moe's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Mr. Sub":{name:"Mr. Sub",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mrsub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6929225",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Mucho Burrito":{name:"Mucho Burrito",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/MuchoBurritoHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65148332",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Nathan's":{name:"Nathan's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/nathansfamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1319505",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:["nathans famous"],matchScore:2,suggestion:true},"amenity/fast_food/New York Fries":{name:"New York Fries",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NewYorkFries/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7013558",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/New York Pizza":{name:"New York Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/newyorkpizza.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2639128",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Noah's Bagels":{name:"Noah's Bagels",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoahsBagels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64517373",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"},countryCodes:["us"],terms:["noahs ny bagels"],matchScore:2,suggestion:true},"amenity/fast_food/Noodle Box":{name:"Noodle Box",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NoodleBoxAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7049671",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Nordsee":{name:"Nordsee",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/NORDSEEDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q74866",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/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/P. Terry's":{name:"P. Terry's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pterrys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19903521",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Pal's":{name:"Pal's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Palsweb/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7126094",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Panago":{name:"Panago",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/panago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17111672",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Panda Express":{name:"Panda Express",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PandaExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1358690",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"},terms:["panda"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Panera Bread":{name:"Panera Bread",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/panerabread/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7130852",amenity:"fast_food",cuisine:"sandwich"},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/sandwich/Pans & Company":{name:"Pans & Company",icon:"temaki-sandwich",geometry:["point","area"],tags:{"brand:wikidata":"Q11697586",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa John's":{name:"Papa John's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["papa john","papa john pizza","papa johns pizza"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Papa Murphy's":{name:"Papa Murphy's",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papamurphyspizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132349",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["papa murphy","papa murphy pizza","papa murphys pizza"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Penn Station":{name:"Penn Station",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pennstation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7163311",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Philly Pretzel Factory":{name:"Philly Pretzel Factory",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/PhillyPretzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60097339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"},countryCodes:["us"],terms:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pinulito":{name:"Pinulito",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/elsabordenuestragente/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273613",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pita Pit":{name:"Pita Pit",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pitapitusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7757289",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza 73":{name:"Pizza 73",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q7199950",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Delivery":{name:"Pizza Hut Delivery",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Hut Express":{name:"Pizza Hut Express",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Inn":{name:"Pizza Inn",icon:"maki-restaurant-pizza",imageURL:"https://pbs.twimg.com/profile_images/959101899675901952/2SogbY41_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4118850",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Nova":{name:"Pizza Nova",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaNova/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199971",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Nova","brand:wikidata":"Q7199971","brand:wikipedia":"en:Pizza Nova",cuisine:"pizza",name:"Pizza Nova",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Pizza":{name:"Pizza Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPizzaCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1194143",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Pizza","brand:wikidata":"Q1194143","brand:wikipedia":"en:Pizza Pizza",cuisine:"pizza",name:"Pizza Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Pizza Schmizza":{name:"Pizza Schmizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/schmizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199979",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Schmizza","brand:wikidata":"Q7199979","brand:wikipedia":"en:Pizza Schmizza",cuisine:"pizza",name:"Pizza Schmizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Campero":{name:"Pollo Campero",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/CamperoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q942741",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Campero","brand:wikidata":"Q942741","brand:wikipedia":"en:Pollo Campero",cuisine:"chicken",name:"Pollo Campero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Costa Rica)":{name:"Pollo Granjero (Costa Rica)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273665",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273665",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Granjero (Guatemala)":{name:"Pollo Granjero (Guatemala)",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloGranjeroGuatemala/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273652",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Granjero","brand:wikidata":"Q62273652",cuisine:"chicken",name:"Pollo Granjero",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["gt"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Pollo Tropical":{name:"Pollo Tropical",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PolloTropical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3395356",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Pollo Tropical","brand:wikidata":"Q3395356","brand:wikipedia":"en:Pollo Tropical",cuisine:"chicken",name:"Pollo Tropical",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Popeyes":{name:"Popeyes",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/PopeyesLouisianaKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1330910",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Popeyes","brand:wikidata":"Q1330910","brand:wikipedia":"en:Popeyes",cuisine:"chicken",name:"Popeyes",official_name:"Popeyes Louisiana Kitchen",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Portillo's":{name:"Portillo's",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/portillos.hotdog/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3399307",amenity:"fast_food",cuisine:"hot_dog;burger"},addTags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Potbelly":{name:"Potbelly",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/potbellysandwichshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7234777",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["potbelly sandwich shop"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Pret A Manger":{name:"Pret A Manger",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/pretamangerusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2109109",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Pretzelmaker":{name:"Pretzelmaker",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/pretzelmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242321",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"},countryCodes:["us"],terms:["pretzel time"],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Qdoba":{name:"Qdoba",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/qdoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1363885",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Quesada":{name:"Quesada",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/QuesadaBurritos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66070360",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Quick":{name:"Quick",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/QuickBelgium/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q286494",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["be","fr","lu"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Quiznos":{name:"Quiznos",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Quiznos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1936229",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["quiznos sub","quiznos subs"],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Raising Cane's":{name:"Raising Cane's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RaisingCanesChickenFingers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7285144",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Rally's":{name:"Rally's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/checkersrallys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63919323",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Red Rooster":{name:"Red Rooster",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/RedRoosterAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376466",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/Robin's Donuts":{name:"Robin's Donuts",icon:"temaki-donut",imageURL:"https://graph.facebook.com/RobinsDonutsCAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7352199",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Roy Rogers":{name:"Roy Rogers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/RoyRogersRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7373311",amenity:"fast_food",cuisine:"burger;sandwich;chicken"},addTags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Rubio's":{name:"Rubio's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/rubios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7376154",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:["rubios fresh mexican grill"],matchScore:2,suggestion:true},"amenity/fast_food/burger/SUSU & Sons":{name:"SUSU & Sons",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/susuandsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64760081",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["il"],terms:["סוסו ובניו"],matchScore:2,suggestion:true},"amenity/fast_food/Sarku Japan":{name:"Sarku Japan",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/SarkuJapanColombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7424243",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sarpino's Pizzeria":{name:"Sarpino's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/SarpinosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28229116",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Sbarro":{name:"Sbarro",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Sbarro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589409",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["Sbarro Pizzeria"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Schlotzsky's":{name:"Schlotzsky's",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/Schlotzskys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2244796",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:["schlotzskys deli"],matchScore:2,suggestion:true},"amenity/fast_food/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/burger/Steak 'n Shake":{name:"Steak 'n Shake",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/steaknshake/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605233",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Steak Escape":{name:"Steak Escape",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/steakescape/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7605235",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Steers":{name:"Steers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/OfficialSteers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56599145",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Subway":{name:"Subway",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/subway/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q244457",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},terms:["subway sandwiches"],matchScore:2,suggestion:true},"amenity/fast_food/burger/Supermac's":{name:"Supermac's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/supermacsofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643750",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Sushi Shop":{name:"Sushi Shop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/sushishopboutique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64840990",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Taco Bell":{name:"Taco Bell",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tacobell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752941",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Bueno":{name:"Taco Bueno",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/buenoheadquarters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673958",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Cabana":{name:"Taco Cabana",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/TacoCabana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12070488",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Del Mar":{name:"Taco Del Mar",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacodelmarcorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673972",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco John's":{name:"Taco John's",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacojohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673962",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/mexican/Taco Time":{name:"Taco Time",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/tacotime/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7673969",amenity:"fast_food",cuisine:"mexican"},addTags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"},reference:{key:"cuisine",value:"mexican"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Ted's Hot Dogs":{name:"Ted's Hot Dogs",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/TedsHotDogs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692930",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Telepizza":{name:"Telepizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/telepizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2699863",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Teriyaki Experience":{name:"Teriyaki Experience",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TeriyakiExperience/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7702453",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thai Express (Singapore)":{name:"Thai Express (Singapore)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ThaiExpressSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7709119",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Thaï Express (North America)":{name:"Thaï Express (North America)",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/EatThaiExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7711610",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"},countryCodes:["ca","us"],terms:["thai express"],matchScore:2,suggestion:true},"amenity/fast_food/burger/The Habit Burger Grill":{name:"The Habit Burger Grill",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/habitburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18158741",amenity:"fast_food",cuisine:"burger"},addTags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:["the habit burger"],matchScore:2,suggestion:true},"amenity/fast_food/pizza/The Pizza Company":{name:"The Pizza Company",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/thepizzacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2413520",amenity:"fast_food",cuisine:"pizza"},addTags:{alt_name:"Pizza Company",amenity:"fast_food",brand:"The Pizza Company","brand:wikidata":"Q2413520","brand:wikipedia":"en:The Pizza Company",cuisine:"pizza",name:"The Pizza Company",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},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/Wayback Burgers":{name:"Wayback Burgers",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/waybackburgers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997570",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wendy's":{name:"Wendy's",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wendys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q550258",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Whataburger":{name:"Whataburger",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/whataburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q376627",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Which Wich?":{name:"Which Wich?",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/whichwich/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7993556",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/White Castle":{name:"White Castle",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/WhiteCastle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1244034",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/hot_dog/Wienerschnitzel":{name:"Wienerschnitzel",icon:"fas-hotdog",imageURL:"https://graph.facebook.com/Wienerschnitzel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q324679",amenity:"fast_food",cuisine:"hot_dog"},addTags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"},reference:{key:"cuisine",value:"hot_dog"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Wimpy":{name:"Wimpy",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/wimpyrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2811992",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/WingStreet":{name:"WingStreet",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWingStreet.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q946630",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"},countryCodes:["au","ca","cy","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Wingstop":{name:"Wingstop",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Wingstop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8025339",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Xi'an Famous Foods":{name:"Xi'an Famous Foods",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/xianfoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8044020",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Yellow Cab Pizza":{name:"Yellow Cab Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/YellowCabPizzaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8051689",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/Zaxby's":{name:"Zaxby's",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/Zaxbys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8067525",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/Zoës Kitchen":{name:"Zoës Kitchen",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ZoesKitchen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8074747",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/immergrün":{name:"immergrün",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/mein.immergruen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62589254",amenity:"fast_food",cuisine:"sandwich;salad;juice"},addTags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["de"],terms:["immergün"],matchScore:2,suggestion:true},"amenity/fast_food/sandwich/Γρηγόρης":{name:"Γρηγόρης",icon:"temaki-sandwich",imageURL:"https://graph.facebook.com/gregorys.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62273834",amenity:"fast_food",cuisine:"sandwich"},addTags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"},reference:{key:"cuisine",value:"sandwich"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Бургер Кинг":{name:"Бургер Кинг",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["by","kz","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Домино'c":{name:"Домино'c",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Dominos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q839466",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},terms:["доминоc пицца"],matchScore:2,suggestion:true},"amenity/fast_food/Крошка Картошка":{name:"Крошка Картошка",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/kartoshka.moscow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4241838",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/Макдоналдс":{name:"Макдоналдс",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Папа Джонс":{name:"Папа Джонс",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/papajohns/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2759586",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/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","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:["ドミノ・ピザ"],matchScore:2,suggestion:true},"amenity/fast_food/burger/バーガーキング":{name:"バーガーキング",icon:"maki-fast-food",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBurger%20King%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q177054",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザハット":{name:"ピザハット",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzahutus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q191615",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザ・カリフォルニア":{name:"ピザ・カリフォルニア",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q75324",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ピザーラ":{name:"ピザーラ",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pizzala.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7199948",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/ファーストキッチン":{name:"ファーストキッチン",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/firstkitchen.offical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453133",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/フレッシュネスバーガー":{name:"フレッシュネスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/freshness.burger.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5503087",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/マクドナルド":{name:"マクドナルド",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/donut/ミスタードーナツ":{name:"ミスタードーナツ",icon:"temaki-donut",imageURL:"https://graph.facebook.com/misdo.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1065819",amenity:"fast_food",cuisine:"donut"},addTags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"},reference:{key:"cuisine",value:"donut"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/モスバーガー":{name:"モスバーガー",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/ラーメン二郎":{name:"ラーメン二郎",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/jirolian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11347765",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/ロッテリア":{name:"ロッテリア",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/吉野家":{name:"吉野家",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tw.yoshinoya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776272",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/富士そば":{name:"富士そば",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/fujisoba/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11414722",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/幸楽苑":{name:"幸楽苑",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Kourakuen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11484003",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/摩斯漢堡":{name:"摩斯漢堡",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mosburger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1204169",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/日高屋":{name:"日高屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/hidakayavietnam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326050",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/松屋":{name:"松屋",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/matsuyafoods.matsuya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q848773",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"},countryCodes:["cn","hk","jp","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/箱根そば":{name:"箱根そば",icon:"maki-fast-food",geometry:["point","area"],tags:{"brand:wikidata":"Q11603345",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/築地銀だこ":{name:"築地銀だこ",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/GindacoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11603490",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/chicken/肯德基":{name:"肯德基",icon:"fas-drumstick-bite",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKFC%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q524757",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["cn","hk","mo","sg","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麥當勞":{name:"麥當勞",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["hk","mo","tw"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/麦当劳":{name:"麦当劳",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["cn","sg"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/롯데리아":{name:"롯데리아",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/ilovelotteria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q249525",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맘스터치":{name:"맘스터치",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/momstouchmain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23044856",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/burger/맥도날드":{name:"맥도날드",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38076",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/1-2-3":{name:"1-2-3",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q4545742",amenity:"fuel"},addTags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"},countryCodes:["dk","pl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/7-Eleven":{name:"7-Eleven",icon:"maki-fuel",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",amenity:"fuel"},addTags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"amenity/fuel/76":{name:"76",icon:"maki-fuel",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/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",imageURL:"https://graph.facebook.com/agipoil888/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q377915",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agip","brand:wikidata":"Q377915","brand:wikipedia":"en:Agip",name:"Agip"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Agrola":{name:"Agrola",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AGROLA.AG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q397351",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Agrola","brand:wikidata":"Q397351","brand:wikipedia":"de:Agrola",name:"Agrola"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aloha Petroleum":{name:"Aloha Petroleum",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alohagas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4734197",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aloha Petroleum","brand:wikidata":"Q4734197","brand:wikipedia":"en:Aloha Petroleum",name:"Aloha Petroleum",official_name:"Aloha Petroleum Ltd"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alon":{name:"Alon",icon:"maki-fuel",imageURL:"https://graph.facebook.com/alonbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274304",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alon","brand:wikidata":"Q62274304",name:"Alon"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Alpet":{name:"Alpet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ALPETtr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62131561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alpet","brand:wikidata":"Q62131561",name:"Alpet"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Api":{name:"Api",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TheAmericanPetroleumInstitute/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466043",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Aral":{name:"Aral",icon:"maki-fuel",imageURL:"https://graph.facebook.com/araldeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q565734",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"},countryCodes:["de","lu"],terms:["aral tankstelle"],matchScore:2,suggestion:true},"amenity/fuel/Arco":{name:"Arco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/arco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q304769",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Asda":{name:"Asda",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Atem":{name:"Atem",icon:"maki-fuel",imageURL:"https://graph.facebook.com/postosatem/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62332255",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"},countryCodes:["br"],terms:["posto atem"],matchScore:2,suggestion:true},"amenity/fuel/Auchan":{name:"Auchan",icon:"maki-fuel",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avanti":{name:"Avanti",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Avia":{name:"Avia",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AVIA.racing.team/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300147",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Avia","brand:wikidata":"Q300147","brand:wikipedia":"de:Avia International",name:"Avia"},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",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Caltex":{name:"Caltex",icon:"maki-fuel",imageURL:"https://pbs.twimg.com/profile_images/582354948345634816/nzfEGDG1_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q277470",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Canadian Tire Gas+":{name:"Canadian Tire Gas+",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"},terms:["canadian tire","canadian tire gas bar"],matchScore:2,suggestion:true},"amenity/fuel/Carrefour":{name:"Carrefour",icon:"maki-fuel",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",amenity:"fuel"},addTags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"},terms:["carrefour market"],matchScore:2,suggestion:true},"amenity/fuel/Casey's General Store":{name:"Casey's General Store",icon:"maki-fuel",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"},terms:["caseys"],matchScore:2,suggestion:true},"amenity/fuel/Cenex":{name:"Cenex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CenexStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5011381",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Cepsa":{name:"Cepsa",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CEPSAespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q608819",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ceypetco":{name:"Ceypetco",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q5065795",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"},countryCodes:["lk"],terms:["lanka filling station"],matchScore:2,suggestion:true},"amenity/fuel/Chevron":{name:"Chevron",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Circle K":{name:"Circle K",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Citgo":{name:"Citgo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Clark":{name:"Clark",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ClarkCrownBrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5127157",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Clark","brand:wikidata":"Q5127157","brand:wikipedia":"en:Clark Brands",name:"Clark"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Co-op (Canada)":{name:"Co-op (Canada)",icon:"maki-fuel",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op"},countryCodes:["ca"],terms:["coop"],matchScore:2,suggestion:true},"amenity/fuel/Coles Express":{name:"Coles Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Conoco":{name:"Conoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/conoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1126518",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copec":{name:"Copec",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q11681461",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copec","brand:wikidata":"Q11681461","brand:wikipedia":"en:Empresas Copec",name:"Copec"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Copetrol":{name:"Copetrol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Copetrol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62274431",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Copetrol","brand:wikidata":"Q62274431",name:"Copetrol"},countryCodes:["py"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/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",imageURL:"https://graph.facebook.com/meroilspain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62292559",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MEROIL","brand:wikidata":"Q62292559",name:"MEROIL"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/MOL":{name:"MOL",icon:"maki-fuel",imageURL:"https://graph.facebook.com/molcesko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q549181",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MOL","brand:wikidata":"Q549181","brand:wikipedia":"en:MOL (company)",name:"MOL"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/MRS":{name:"MRS",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56274919",amenity:"fuel"},addTags:{amenity:"fuel",brand:"MRS","brand:wikidata":"Q56274919","brand:wikipedia":"en:MRS Oil Nigeria Plc",name:"MRS"},countryCodes:["ng"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mac's":{name:"Mac's",icon:"maki-fuel",imageURL:"https://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/Meijer":{name:"Meijer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/meijer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1917753",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Metano":{name:"Metano",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62294765",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Migrol":{name:"Migrol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Migrol.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1747771",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Mobil":{name:"Mobil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ExxonandMobilStations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088656",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"},terms:["mobile"],matchScore:2,suggestion:true},"amenity/fuel/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",imageURL:"https://graph.facebook.com/trinidadnp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7842382",amenity:"fuel"},addTags:{amenity:"fuel",brand:"NP","brand:wikidata":"Q7842382","brand:wikipedia":"en:Trinidad & Tobago National Petroleum Marketing Company Limited",name:"NP"},countryCodes:["tt"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Neste":{name:"Neste",icon:"maki-fuel",imageURL:"https://graph.facebook.com/NesteUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q616376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Neste","brand:wikidata":"Q616376","brand:wikipedia":"en:Neste",name:"Neste"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OIL!":{name:"OIL!",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20OIL!.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2007561",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OIL!","brand:wikidata":"Q2007561","brand:wikipedia":"de:OIL! Tankstellen",name:"OIL!"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/OK":{name:"OK",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKenergi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12329785",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OK","brand:wikidata":"Q12329785","brand:wikipedia":"da:OK a.m.b.a.",name:"OK"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OKQ8":{name:"OKQ8",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OKQ8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634762",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OKQ8","brand:wikidata":"Q1634762","brand:wikipedia":"en:Kuwait Petroleum Corporation",name:"OKQ8"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/OMV":{name:"OMV",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"OMV","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"OMV"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Oilibya":{name:"Oilibya",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OilibyaMisr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7081491",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"},terms:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],matchScore:2,suggestion:true},"amenity/fuel/Olerex":{name:"Olerex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/as.olerex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16931205",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"},countryCodes:["ee"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Opet":{name:"Opet",icon:"maki-fuel",imageURL:"https://graph.facebook.com/opet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072824",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Orlen":{name:"Orlen",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ORLENOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q971649",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Orlen","brand:wikidata":"Q971649","brand:wikipedia":"en:PKN Orlen",name:"Orlen"},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",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:["sams club fuel center","sams club gas"],matchScore:2,suggestion:true},"amenity/fuel/Sasol":{name:"Sasol",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SasolSACareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q905998",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sea Oil":{name:"Sea Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SEAOIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7389549",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sheetz":{name:"Sheetz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sheetz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7492551",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Shell":{name:"Shell",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"},terms:["posto shell","shell gas station","shell petrol station","shell station","station shell"],matchScore:2,suggestion:true},"amenity/fuel/Shell Express":{name:"Shell Express",icon:"maki-fuel",imageURL:"https://graph.facebook.com/shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2289188",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sinclair":{name:"Sinclair",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SinclairOilCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290900",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Slovnaft":{name:"Slovnaft",icon:"maki-fuel",imageURL:"https://graph.facebook.com/MySlovnaft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587563",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"},countryCodes:["cz","pl","sk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Socar":{name:"Socar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SOCARofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1622293",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sokimex":{name:"Sokimex",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SokimexGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1149575",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Speedway":{name:"Speedway",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SpeedwayStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7575683",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sprint":{name:"Sprint",icon:"maki-fuel",imageURL:"https://graph.facebook.com/SprintTankstelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57588452",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/St1":{name:"St1",icon:"maki-fuel",imageURL:"https://graph.facebook.com/st1suomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7592214",amenity:"fuel"},addTags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"},countryCodes:["fi","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Star":{name:"Star",icon:"maki-fuel",imageURL:"https://graph.facebook.com/123909017686285/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031095",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Station Service E. Leclerc":{name:"Station Service E. Leclerc",icon:"maki-fuel",imageURL:"https://graph.facebook.com/E.Leclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1273376",amenity:"fuel"},addTags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"},terms:["e. leclerc"],matchScore:2,suggestion:true},"amenity/fuel/Statoil":{name:"Statoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Equinor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1776022",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"},countryCodes:["dk","ee","ie","pl","ru","se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Stewart's":{name:"Stewart's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Sunoco":{name:"Sunoco",icon:"maki-fuel",imageURL:"https://graph.facebook.com/GoSunoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1423218",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Super U":{name:"Super U",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TA":{name:"TA",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7835892",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tamoil":{name:"Tamoil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TamoilNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706793",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"},countryCodes:["ch","de","es","fr","it","nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tango":{name:"Tango",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TangoTankstations/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2423920",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tanka":{name:"Tanka",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q10690640",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Teboil":{name:"Teboil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/teboil.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7692079",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tela":{name:"Tela",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TelaCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62534875",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"},countryCodes:["kh"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tempo":{name:"Tempo",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62535175",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terpel":{name:"Terpel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Terpel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703003",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Terrible's":{name:"Terrible's",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TerribleHerbst/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7703648",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Tesco":{name:"Tesco",icon:"maki-fuel",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/1167471677904773120/_vgQ82G0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7824764",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Topaz","brand:wikidata":"Q7824764","brand:wikipedia":"en:Topaz Energy",name:"Topaz"},countryCodes:["ie"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Total":{name:"Total",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total"},terms:["station total"],matchScore:2,suggestion:true},"amenity/fuel/Total Access":{name:"Total Access",icon:"maki-fuel",imageURL:"https://graph.facebook.com/TotalUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154037",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Total Access","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"Total Access"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/TotalErg":{name:"TotalErg",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTotalerg%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3995933",amenity:"fuel"},addTags:{amenity:"fuel",brand:"TotalErg","brand:wikidata":"Q3995933","brand:wikipedia":"it:TotalErg",name:"TotalErg"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turkey Hill":{name:"Turkey Hill",icon:"maki-fuel",imageURL:"https://graph.facebook.com/turkeyhillmm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42376970",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turkey Hill","brand:wikidata":"Q42376970","brand:wikipedia":"en:Turkey Hill Minit Markets",name:"Turkey Hill"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Turmöl":{name:"Turmöl",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Turmoel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1473279",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Turmöl","brand:wikidata":"Q1473279","brand:wikipedia":"de:Turmöl",name:"Turmöl"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/UDF Fuel":{name:"UDF Fuel",icon:"maki-fuel",imageURL:"https://graph.facebook.com/UnitedDairyFarmers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7887677",amenity:"fuel"},addTags:{amenity:"fuel",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"UDF Fuel",short_name:"UDF"},countryCodes:["us"],terms:["udf fuels","united dairy farmers"],matchScore:2,suggestion:true},"amenity/fuel/USA Gasoline":{name:"USA Gasoline",icon:"maki-fuel",imageURL:"https://graph.facebook.com/153091311519939/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17126373",amenity:"fuel"},addTags:{amenity:"fuel",brand:"USA Gasoline","brand:wikidata":"Q17126373","brand:wikipedia":"en:USA Gasoline",name:"USA Gasoline"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Ultramar":{name:"Ultramar",icon:"maki-fuel",imageURL:"https://graph.facebook.com/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/uSmile 昆仑好":{name:"uSmile 昆仑好",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q66480830",amenity:"fuel"},addTags:{amenity:"fuel",brand:"uSmile 昆仑好","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"uSmile 便利店",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"uSmile 便利店"},countryCodes:["cn"],terms:["usmile","usmile 便利店","昆仑好"],matchScore:2,suggestion:true},"amenity/fuel/Авіас":{name:"Авіас",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q12122687",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Авіас","brand:wikidata":"Q12122687","brand:wikipedia":"uk:Мережа АЗС Приват",name:"Авіас"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/БРСМ-Нафта":{name:"БРСМ-Нафта",icon:"maki-fuel",imageURL:"https://graph.facebook.com/BRSM.NAFTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56356523",amenity:"fuel"},addTags:{amenity:"fuel",brand:"БРСМ-Нафта","brand:wikidata":"Q56356523","brand:wikipedia":"uk:БРСМ-Нафта",name:"БРСМ-Нафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Башнефть":{name:"Башнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bashneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q809985",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Башнефть","brand:en":"Bashneft","brand:wikidata":"Q809985","brand:wikipedia":"en:Bashneft",name:"Башнефть","name:en":"Bashneft"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Белоруснефть":{name:"Белоруснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/belorusneft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4082693",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Белоруснефть","brand:wikidata":"Q4082693","brand:wikipedia":"ru:Белоруснефть",name:"Белоруснефть"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Газпромнефть":{name:"Газпромнефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/gazprom.neft/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1461799",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Газпромнефть","brand:wikidata":"Q1461799","brand:wikipedia":"en:Gazprom Neft",name:"Газпромнефть"},countryCodes:["by","kg","kz","ru","tj"],terms:["газпром"],matchScore:2,suggestion:true},"amenity/fuel/Гелиос":{name:"Гелиос",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62286471",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Гелиос","brand:en":"Helios","brand:wikidata":"Q62286471",name:"Гелиос","name:en":"Helios"},countryCodes:["kz"],terms:["helios"],matchScore:2,suggestion:true},"amenity/fuel/ЕКА":{name:"ЕКА",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62543029",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ЕКА","brand:wikidata":"Q62543029",name:"ЕКА"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КЛО":{name:"КЛО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/klo.oil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60966526",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КЛО","brand:en":"Klo","brand:wikidata":"Q60966526","brand:wikipedia":"ru:КЛО (сеть АЗС)",name:"КЛО","name:en":"Klo"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/КазМунайГаз":{name:"КазМунайГаз",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OzenMunaiGaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1417227",amenity:"fuel"},addTags:{amenity:"fuel",brand:"КазМунайГаз","brand:wikidata":"Q1417227","brand:wikipedia":"en:KazMunayGas",name:"КазМунайГаз"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Лукойл":{name:"Лукойл",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Lukoil.en/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q329347",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Лукойл","brand:wikidata":"Q329347","brand:wikipedia":"ru:Лукойл",name:"Лукойл"},terms:["лукоил"],matchScore:2,suggestion:true},"amenity/fuel/Макпетрол":{name:"Макпетрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/makpetrol.ultra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1886438",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Макпетрол","brand:wikidata":"Q1886438","brand:wikipedia":"en:Makpetrol",name:"Макпетрол"},countryCodes:["mk"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/НК Альянс":{name:"НК Альянс",icon:"maki-fuel",imageURL:"https://graph.facebook.com/AllianceOilUkraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4063700",amenity:"fuel"},addTags:{amenity:"fuel",brand:"НК Альянс","brand:en":"Alliance Oil","brand:ru":"НК Альянс","brand:wikidata":"Q4063700","brand:wikipedia":"ru:Альянс (компания)",name:"НК Альянс","name:en":"Alliance Oil","name:ru":"НК Альянс"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Нефтьмагистраль":{name:"Нефтьмагистраль",icon:"maki-fuel",imageURL:"https://graph.facebook.com/neftm.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62544323",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Нефтьмагистраль","brand:en":"Neftmagistral","brand:wikidata":"Q62544323",name:"Нефтьмагистраль","name:en":"Neftmagistral"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОККО":{name:"ОККО",icon:"maki-fuel",imageURL:"https://graph.facebook.com/okkoua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7072617",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОККО","brand:en":"OKKO","brand:wikidata":"Q7072617","brand:wikipedia":"en:OKKO",name:"ОККО","name:en":"OKKO"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ОМВ":{name:"ОМВ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/OMV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168238",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ОМВ","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"ОМВ"},countryCodes:["bg","rs"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ПТК":{name:"ПТК",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ptk.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4360193",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ПТК","brand:en":"The Petersburg Fuel Company","brand:ru":"ПТК","brand:wikidata":"Q4360193","brand:wikipedia":"ru:Петербургская топливная компания",name:"ПТК","name:en":"The Petersburg Fuel Company","name:ru":"ПТК"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Петрол":{name:"Петрол",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PetrolAD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24315",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Петрол","brand:en":"Petrol AD","brand:wikidata":"Q24315","brand:wikipedia":"en:Petrol AD",name:"Петрол","name:en":"Petrol AD"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Роснефть":{name:"Роснефть",icon:"maki-fuel",imageURL:"https://graph.facebook.com/RosneftRu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141123",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Роснефть","brand:en":"Rosneft","brand:ru":"Роснефть","brand:wikidata":"Q1141123","brand:wikipedia":"ru:Роснефть",name:"Роснефть","name:en":"Rosneft","name:ru":"Роснефть"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/Сургутнефтегаз":{name:"Сургутнефтегаз",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSng2.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q680776",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Сургутнефтегаз","brand:en":"Surgutneftegas","brand:ru":"Сургутнефтегаз","brand:wikidata":"Q680776","brand:wikipedia":"en:Surgutneftegas",name:"Сургутнефтегаз","name:en":"Surgutneftegas","name:ru":"Сургутнефтегаз"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ТНК":{name:"ТНК",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q2298901",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ТНК","brand:wikidata":"Q2298901","brand:wikipedia":"en:TNK-BP",name:"ТНК"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефтепродукт":{name:"Татнефтепродукт",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q62545686",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефтепродукт","brand:en":"Tatnefteprodukt","brand:ru":"Татнефтепродукт","brand:wikidata":"Q62545686",name:"Татнефтепродукт","name:en":"Tatnefteprodukt","name:ru":"Татнефтепродукт"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Татнефть":{name:"Татнефть",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTatneft%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1616858",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Татнефть","brand:en":"Tatneft","brand:ru":"Татнефть","brand:wikidata":"Q1616858","brand:wikipedia":"en:Tatneft",name:"Татнефть","name:en":"Tatneft","name:ru":"Татнефть"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/Укрнафта":{name:"Укрнафта",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUkrnafta.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2447961",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Укрнафта","brand:en":"Ukrnafta","brand:uk":"Укрнафта","brand:wikidata":"Q2447961","brand:wikipedia":"uk:Укрнафта",name:"Укрнафта","name:en":"Ukrnafta","name:uk":"Укрнафта"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/דור אלון":{name:"דור אלון",icon:"maki-fuel",imageURL:"https://graph.facebook.com/dor.alon.il/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16130352",amenity:"fuel"},addTags:{amenity:"fuel",brand:"דור אלון","brand:en":"Dor Alon","brand:he":"דור אלון","brand:wikidata":"Q16130352","brand:wikipedia":"he:דור אלון אנרגיה בישראל (1988)",name:"דור אלון","name:en":"Dor Alon","name:he":"דור אלון"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/סונול":{name:"סונול",icon:"maki-fuel",imageURL:"https://graph.facebook.com/sonolsogood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3701622",amenity:"fuel"},addTags:{amenity:"fuel",brand:"סונול","brand:en":"Sonol","brand:he":"סונול","brand:wikidata":"Q3701622","brand:wikipedia":"en:Sonol",name:"סונול","name:en":"Sonol","name:he":"סונול"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/פז":{name:"פז",icon:"maki-fuel",imageURL:"https://graph.facebook.com/YellowPaz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2211731",amenity:"fuel"},addTags:{amenity:"fuel",brand:"פז","brand:en":"Paz","brand:he":"פז","brand:wikidata":"Q2211731","brand:wikipedia":"en:Paz Oil Company",name:"פז","name:en":"Paz","name:he":"פז"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ادنوك":{name:"ادنوك",icon:"maki-fuel",imageURL:"https://graph.facebook.com/ADNOCDistribution/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q166729",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ادنوك","brand:ar":"ادنوك","brand:en":"ADNOC","brand:wikidata":"Q166729","brand:wikipedia":"en:Abu Dhabi National Oil Company",name:"ادنوك","name:ar":"ادنوك","name:en":"ADNOC"},countryCodes:["ae"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/บางจาก":{name:"บางจาก",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Bangchak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6579719",amenity:"fuel"},addTags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/ป.ต.ท.":{name:"ป.ต.ท.",icon:"maki-fuel",imageURL:"https://graph.facebook.com/PTTNews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1810389",amenity:"fuel"},addTags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เชลล์":{name:"เชลล์",icon:"maki-fuel",imageURL:"https://graph.facebook.com/Shell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q154950",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/เอสโซ่":{name:"เอสโซ่",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/エッソ":{name:"エッソ",icon:"maki-fuel",imageURL:"https://graph.facebook.com/EssoGB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q867662",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"},countryCodes:["jp"],terms:["エッソ石油"],matchScore:2,suggestion:true},"amenity/fuel/エネオス":{name:"エネオス",icon:"maki-fuel",imageURL:"https://graph.facebook.com/eneos.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1640290",amenity:"fuel"},addTags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/fuel/コスモ石油":{name:"コスモ石油",icon:"maki-fuel",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",imageURL:"https://graph.facebook.com/SelectMedical/picture?type=large",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/Abbott's Frozen Custard":{name:"Abbott's Frozen Custard",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AbbottsFrozenCustard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4664334",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amorino":{name:"Amorino",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/AmorinoGelato/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2843884",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"},countryCodes:["ae","ch","cz","de","es","fr","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","uk","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Amy's Ice Creams":{name:"Amy's Ice Creams",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/amysicecreams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4749045",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Andy's Frozen Custard":{name:"Andy's Frozen Custard",icon:"fas-ice-cream",geometry:["point","area"],tags:{"brand:wikidata":"Q4760327",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Baskin-Robbins":{name:"Baskin-Robbins",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ben & Jerry's":{name:"Ben & Jerry's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BenandJerryAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q816412",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Bruster's Ice Cream":{name:"Bruster's Ice Cream",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/BrustersRealIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4979810",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"},countryCodes:["us"],terms:["brusters"],matchScore:2,suggestion:true},"amenity/ice_cream/Carvel":{name:"Carvel",icon:"fas-ice-cream",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCarvel-Script.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5047520",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",delivery:"yes",name:"Carvel",takeaway:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Cold Stone Creamery":{name:"Cold Stone Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/coldstonecreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1094923",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"},countryCodes:["ng","us"],terms:["cold stone"],matchScore:2,suggestion:true},"amenity/ice_cream/D'Onofrio":{name:"D'Onofrio",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/DonofrioDOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5203166",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Freddo":{name:"Freddo",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/FreddoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28823999",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Graeter's":{name:"Graeter's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/Graeters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5592430",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"},countryCodes:["us"],terms:["greaters"],matchScore:2,suggestion:true},"amenity/ice_cream/Grido":{name:"Grido",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/GridoHelados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5885724",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"},countryCodes:["ar"],terms:["grido helado"],matchScore:2,suggestion:true},"amenity/ice_cream/Häagen-Dazs":{name:"Häagen-Dazs",icon:"fas-ice-cream",imageURL:"https://pbs.twimg.com/profile_images/827598241403371520/qHkQxKH3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1143333",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/La Michoacana":{name:"La Michoacana",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/LaMichoacana.sv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17118857",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"},countryCodes:["mx"],terms:["paleteria la michoacana"],matchScore:2,suggestion:true},"amenity/ice_cream/Marble Slab Creamery":{name:"Marble Slab Creamery",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/marbleslabcreamery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17020087",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Menchie's":{name:"Menchie's",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/MyMenchies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6816528",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"},countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],terms:["menchie's frozen yoghurt","menchie's frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/Pinkberry":{name:"Pinkberry",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/pinkberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2904053",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Ralph's Italian Ices":{name:"Ralph's Italian Ices",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RalphsFamous/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62576909",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"},countryCodes:["us"],terms:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],matchScore:2,suggestion:true},"amenity/ice_cream/Rita's Italian Ice":{name:"Rita's Italian Ice",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/RitasItalianIceCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7336456",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"},countryCodes:["us"],terms:["ritas","ritas water ice"],matchScore:2,suggestion:true},"amenity/ice_cream/Shake's":{name:"Shake's",icon:"fas-ice-cream",geometry:["point","area"],tags:{"brand:wikidata":"Q17032842",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/TCBY":{name:"TCBY",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/tcby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7669631",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogen Früz":{name:"Yogen Früz",icon:"fas-ice-cream",imageURL:"https://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/Yogurt Mountain":{name:"Yogurt Mountain",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/YogurtMountain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054427",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"},terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/Yogurtland":{name:"Yogurtland",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/yogurtland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8054428",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"},countryCodes:["ae","au","sg","th","us","ve"],terms:[],matchScore:2,suggestion:true},"amenity/ice_cream/sweetFrog":{name:"sweetFrog",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/sweetfrogfroyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16952110",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"},countryCodes:["us"],terms:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],matchScore:2,suggestion:true},"amenity/ice_cream/サーティワンアイスクリーム":{name:"サーティワンアイスクリーム",icon:"fas-ice-cream",imageURL:"https://graph.facebook.com/baskinrobbinsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q584601",amenity:"ice_cream"},addTags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/Children's Learning Adventure":{name:"Children's Learning Adventure",icon:"temaki-school",imageURL:"https://graph.facebook.com/Childrenslearningadventure/picture?type=large",geometry:["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:"temaki-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:"temaki-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",name:"KinderCare",nursery:"yes",preschool:"yes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/kindergarten/La Petite Academy":{name:"La Petite Academy",icon:"temaki-school",imageURL:"https://graph.facebook.com/LaPetiteAcademy/picture?type=large",geometry:["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:"temaki-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:"temaki-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:"temaki-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:"temaki-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:"temaki-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:"temaki-school",imageURL:"https://graph.facebook.com/AEONCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4687898",amenity:"language_school"},addTags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Berlitz":{name:"Berlitz",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q821960",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"},terms:[],matchScore:2,suggestion:true},"amenity/language_school/ECC外語学院":{name:"ECC外語学院",icon:"temaki-school",imageURL:"https://graph.facebook.com/ecc.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322655",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ELS":{name:"ELS",icon:"temaki-school",imageURL:"https://graph.facebook.com/els/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323325",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"},countryCodes:["ca","in","my","pa","sa","tr","us","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/GABA":{name:"GABA",icon:"temaki-school",imageURL:"https://graph.facebook.com/gaba.corp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5515241",amenity:"language_school"},addTags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/NOVA":{name:"NOVA",icon:"temaki-school",imageURL:"https://graph.facebook.com/nova.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7064000",amenity:"language_school"},addTags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/Shane English School":{name:"Shane English School",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/シェーン英会話":{name:"シェーン英会話",icon:"temaki-school",imageURL:"https://graph.facebook.com/ShaneEnglishSchool/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17054332",amenity:"language_school"},addTags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/セイハ英語学院":{name:"セイハ英語学院",icon:"temaki-school",geometry:["point","area"],tags:{"brand:wikidata":"Q7446694",amenity:"language_school"},addTags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ベルリッツ":{name:"ベルリッツ",icon:"temaki-school",imageURL:"https://graph.facebook.com/BerlitzJapan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4892545",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/language_school/ペッピーキッズクラブ":{name:"ペッピーキッズクラブ",icon:"temaki-school",geometry:["point","area"],tags:{"brand:wikidata":"Q7166471",amenity:"language_school"},addTags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Express Union":{name:"Express Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ExpressUnionFinance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3062276",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"},countryCodes:["td"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Hoa Phát":{name:"Hoa Phát",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/692515699349135364/P4MUVfcJ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q65116775",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"},countryCodes:["us"],terms:["hoa phat goi tien","hoa phat gui tien"],matchScore:2,suggestion:true},"amenity/money_transfer/MoneyGram":{name:"MoneyGram",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneygram/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1944412",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"},countryCodes:["de","fr","gr"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Orange Money":{name:"Orange Money",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16668220",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"},countryCodes:["ml"],terms:[],matchScore:2,suggestion:true},"amenity/money_transfer/Western Union":{name:"Western Union",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/WesternUnion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q861042",amenity:"money_transfer"},addTags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"},terms:[],matchScore:2,suggestion:true},"amenity/parking/Diamond Parking":{name:"Diamond Parking",icon:"maki-car",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q5270887",amenity:"parking"},addTags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/parking/Parking Company of America":{name:"Parking Company of America",icon:"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/parking/Wilson Parking":{name:"Wilson Parking",icon:"maki-car",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q28448427",amenity:"parking"},addTags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"},countryCodes:["au","cn","hk","ko","nz","sg"],terms:["wilson"],matchScore:2,suggestion:true},"amenity/payment_centre/Abitab":{name:"Abitab",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Abitaboficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16488129",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Abitab","brand:wikidata":"Q16488129","brand:wikipedia":"es:Abitab",name:"Abitab"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"amenity/payment_centre/Rapipago":{name:"Rapipago",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/Rapipago/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6100413",amenity:"payment_centre"},addTags:{amenity:"payment_centre",brand:"Rapipago","brand:wikidata":"Q6100413","brand:wikipedia":"es:Rapipago",name:"Rapipago"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Qiwi":{name:"Qiwi",icon:"far-credit-card",imageURL:"https://graph.facebook.com/qiwirussia/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4047736",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Qiwi","brand:wikidata":"Q4047736","brand:wikipedia":"en:Qiwi",name:"Qiwi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/ПриватБанк":{name:"ПриватБанк",icon:"far-credit-card",imageURL:"https://graph.facebook.com/privatbank/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q1515015",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"ПриватБанк","brand:wikidata":"Q1515015","brand:wikipedia":"en:PrivatBank",name:"ПриватБанк"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"amenity/payment_terminal/Элекснет":{name:"Элекснет",icon:"far-credit-card",imageURL:"https://graph.facebook.com/elecsnet/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q4530795",amenity:"payment_terminal"},addTags:{amenity:"payment_terminal",brand:"Элекснет","brand:wikidata":"Q4530795","brand:wikipedia":"ru:Элекснет",name:"Элекснет"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/36,6":{name:"36,6",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apteka366/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q226889",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"36,6","brand:wikidata":"Q226889","brand:wikipedia":"ru:36,6 (аптечная сеть)",healthcare:"pharmacy",name:"36,6"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ru"],terms:["аптека 36,6"],matchScore:2,suggestion:true},"amenity/pharmacy/Amcal":{name:"Amcal",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/AmcalAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367373",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Amcal","brand:wikidata":"Q63367373",healthcare:"pharmacy",name:"Amcal"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["amcal pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Apollo Pharmacy":{name:"Apollo Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ApolloPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562612",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apollo Pharmacy","brand:wikidata":"Q62562612",healthcare:"pharmacy",name:"Apollo Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Apotek Hjärtat":{name:"Apotek Hjärtat",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/apotekhjartat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10416114",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Apotek Hjärtat","brand:wikidata":"Q10416114","brand:wikipedia":"sv:Apotek Hjärtat",healthcare:"pharmacy",name:"Apotek Hjärtat"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Bartell Drugs":{name:"Bartell Drugs",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BartellDrugs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4865152",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Bartell Drugs","brand:wikidata":"Q4865152","brand:wikipedia":"en:Bartell Drugs",healthcare:"pharmacy",name:"Bartell Drugs"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benavides":{name:"Benavides",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasBenavides/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435613",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Benavides"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Benu":{name:"Benu",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/PharmaciesBENUSwitzerland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62562792",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Benu","brand:wikidata":"Q62562792",healthcare:"pharmacy",name:"Benu"},reference:{key:"amenity",value:"pharmacy"},terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Blooms The Chemist":{name:"Blooms The Chemist",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BloomsTheChemistPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367543",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Blooms The Chemist","brand:wikidata":"Q63367543",healthcare:"pharmacy",name:"Blooms The Chemist",shop:"chemist"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Boots":{name:"Boots",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/bootsuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6123139",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boots","brand:wikidata":"Q6123139","brand:wikipedia":"en:Boots UK",healthcare:"pharmacy",name:"Boots"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:["boots pharmacy"],matchScore:2,suggestion:true},"amenity/pharmacy/Boticas y Salud":{name:"Boticas y Salud",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/844038768993601/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563126",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Boticas y Salud","brand:wikidata":"Q62563126",healthcare:"pharmacy",name:"Boticas y Salud"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["pe"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Brookshire Brothers Pharmacy":{name:"Brookshire Brothers Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/BrookshireBros/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4975084",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Brookshire Brothers Pharmacy","brand:wikidata":"Q4975084","brand:wikipedia":"en:Brookshire Brothers",healthcare:"pharmacy",name:"Brookshire Brothers Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/CVS Pharmacy":{name:"CVS Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CVS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2078880",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",healthcare:"pharmacy",name:"CVS Pharmacy",short_name:"CVS"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Camelia":{name:"Camelia",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/camelia.vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15867413",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Camelia","brand:wikidata":"Q15867413","brand:wikipedia":"lt:Nemuno vaistinė",healthcare:"pharmacy",name:"Camelia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Catena":{name:"Catena",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciaCatena/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24035728",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Catena","brand:wikidata":"Q24035728","brand:wikipedia":"ro:Farmacia Catena",healthcare:"pharmacy",name:"Catena"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist King Discount Pharmacy":{name:"Chemist King Discount Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistKingDiscountPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367667",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist King Discount Pharmacy","brand:wikidata":"Q63367667",healthcare:"pharmacy",name:"Chemist King Discount Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au"],terms:["chemist king","chemist king discount pharmacies"],matchScore:2,suggestion:true},"amenity/pharmacy/Chemist Warehouse":{name:"Chemist Warehouse",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ChemistWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48782120",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Chemist Warehouse","brand:wikidata":"Q48782120","brand:wikipedia":"en:Chemist Warehouse",healthcare:"pharmacy",name:"Chemist Warehouse"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Clicks":{name:"Clicks",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/ClicksSouthAfrica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563622",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Clicks","brand:wikidata":"Q62563622",healthcare:"pharmacy",name:"Clicks"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Costco Pharmacy":{name:"Costco Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Costco Pharmacy","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",healthcare:"pharmacy",name:"Costco Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Azul":{name:"Cruz Azul",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/CruzAzul.Farmacias/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62108219",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Azul","brand:wikidata":"Q62108219",healthcare:"pharmacy",name:"Cruz Azul"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:["farmacias cruz azul"],matchScore:2,suggestion:true},"amenity/pharmacy/Cruz Verde":{name:"Cruz Verde",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/FarmaciasCruzVerde1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5856071",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Cruz Verde","brand:wikidata":"Q5856071","brand:wikipedia":"es:Farmacias Cruz Verde",healthcare:"pharmacy",name:"Cruz Verde"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["cl"],terms:["farmacias cruz verde"],matchScore:2,suggestion:true},"amenity/pharmacy/Day Lewis Pharmacy":{name:"Day Lewis Pharmacy",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/DayLewisPharmacy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62563772",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Day Lewis Pharmacy","brand:wikidata":"Q62563772",healthcare:"pharmacy",name:"Day Lewis Pharmacy"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Dbam o Zdrowie":{name:"Dbam o Zdrowie",icon:"maki-pharmacy",imageURL:"https://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:["fred meyer"],matchScore:2,suggestion:true},"amenity/pharmacy/Fybeca":{name:"Fybeca",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/fybeca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564822",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ec"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Generika":{name:"Generika",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GenerikaDrugstorePH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62564876",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["ph"],terms:["generika drugstore"],matchScore:2,suggestion:true},"amenity/pharmacy/Gintarinė vaistinė":{name:"Gintarinė vaistinė",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Gintarine.Vaistine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15857801",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Asia)":{name:"Guardian (Asia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Guardianmy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63371124",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bn","id","kh","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/Guardian (Australia)":{name:"Guardian (Australia)",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/GuardianAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63367814",amenity:"pharmacy"},addTags:{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":"Q11298661",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイト":{name:"クリエイト",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q17215731",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/クリエイトSD":{name:"クリエイトSD",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11299163",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/コクミン":{name:"コクミン",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11301923",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ココカラファイン":{name:"ココカラファイン",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1178825260977643521/z8xhmjOC_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11301948",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/サツドラ":{name:"サツドラ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/780691690440962048/RYUgJsKP_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11304804",amenity:"pharmacy"},addTags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["サッポロドラッグストアー"],matchScore:2,suggestion:true},"amenity/pharmacy/サンドラッグ":{name:"サンドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11305867",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/スギ薬局":{name:"スギ薬局",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11311460",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/セイジョー":{name:"セイジョー",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11314133",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ダイコクドラッグ":{name:"ダイコクドラッグ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11316754",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ツルハドラッグ":{name:"ツルハドラッグ",icon:"maki-pharmacy",imageURL:"https://pbs.twimg.com/profile_images/1061863510546640898/j9crJ6gs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11318826",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/トモズ":{name:"トモズ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q7820097",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["トモズエキスプレス"],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグイレブン":{name:"ドラッグイレブン",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11323075",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/ドラッグセイムス":{name:"ドラッグセイムス",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q11456137",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pharmacy/マツモトキヨシ":{name:"マツモトキヨシ",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q8014776",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/post_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 (Macau)":{name:"CTT (Macau)",icon:"maki-post",imageURL:"https://graph.facebook.com/109452512407680/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q909429",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"},countryCodes:["mo"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/CTT (Portugal)":{name:"CTT (Portugal)",icon:"maki-post",geometry:["point","area"],tags:{"brand:wikidata":"Q1024518",amenity:"post_office"},addTags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Canada Post":{name:"Canada Post",icon:"maki-post",imageURL:"https://graph.facebook.com/canadapost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032001",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correios":{name:"Correios",icon:"maki-post",imageURL:"https://graph.facebook.com/correios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375004",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correo Argentino":{name:"Correo Argentino",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreoOficialSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036566",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Chile":{name:"Correos de Chile",icon:"maki-post",imageURL:"https://graph.facebook.com/correoschile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172893",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de Costa Rica":{name:"Correos de Costa Rica",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172894",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"},countryCodes:["cr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Correos de México":{name:"Correos de México",icon:"maki-post",imageURL:"https://graph.facebook.com/CorreosdeMexico.Mexpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172898",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/DHL":{name:"DHL",icon:"maki-post",imageURL:"https://graph.facebook.com/dhl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489815",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"},terms:["dhl paketshop"],matchScore:2,suggestion:true},"amenity/post_office/DPD Paketshop":{name:"DPD Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/350375105088695/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541030",amenity:"post_office"},addTags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"},countryCodes:["at","de","pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Deutsche Post":{name:"Deutsche Post",icon:"maki-post",imageURL:"https://graph.facebook.com/deutschepost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157645",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"},countryCodes:["de"],terms:["deutsche post ag","deutsche post filiale"],matchScore:2,suggestion:true},"amenity/post_office/Fancourier":{name:"Fancourier",icon:"maki-post",imageURL:"https://graph.facebook.com/FANCourier/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12727984",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"},countryCodes:["ro"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/FedEx":{name:"FedEx",icon:"maki-post",imageURL:"https://graph.facebook.com/FedEx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459477",amenity:"post_office"},addTags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/Hermes Paketshop":{name:"Hermes Paketshop",icon:"maki-post",imageURL:"https://graph.facebook.com/Hermesparcels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1613532",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"},countryCodes:["de"],terms:["hermes"],matchScore:2,suggestion:true},"amenity/post_office/LBC":{name:"LBC",icon:"maki-post",imageURL:"https://graph.facebook.com/LBCexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17075584",amenity:"post_office"},addTags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"},countryCodes:["ph"],terms:["lbc express"],matchScore:2,suggestion:true},"amenity/post_office/La Poste":{name:"La Poste",icon:"maki-post",imageURL:"https://graph.facebook.com/laposte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q373724",amenity:"post_office"},addTags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"},terms:[],matchScore:2,suggestion:true},"amenity/post_office/MRW":{name:"MRW",icon:"maki-post",imageURL:"https://graph.facebook.com/mrwespana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23767821",amenity:"post_office"},addTags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"},countryCodes:["ad","es","gi","pt","ve"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/OCA":{name:"OCA",icon:"maki-post",imageURL:"https://graph.facebook.com/OCACorreoOK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5172887",amenity:"post_office"},addTags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Oficina de Correos":{name:"Oficina de Correos",icon:"maki-post",imageURL:"https://graph.facebook.com/correos.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q776605",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"},countryCodes:["es"],terms:["correos"],matchScore:2,suggestion:true},"amenity/post_office/Poczta Polska":{name:"Poczta Polska",icon:"maki-post",imageURL:"https://graph.facebook.com/pocztapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168833",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Post Office (UK)":{name:"Post Office (UK)",icon:"maki-post",imageURL:"https://pbs.twimg.com/profile_images/1171085286522183680/cbjivLRy_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1783168",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/PostalAnnex":{name:"PostalAnnex",icon:"maki-post",imageURL:"https://graph.facebook.com/PostalAnnex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61960357",amenity:"post_office"},addTags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Poste Italiane":{name:"Poste Italiane",icon:"maki-post",imageURL:"https://graph.facebook.com/PosteItaliane/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q495026",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Serpost":{name:"Serpost",icon:"maki-post",imageURL:"https://graph.facebook.com/428188863953059/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19521863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Serpost","brand:wikidata":"Q19521863","brand:wikipedia":"es:Servicios Postales del Perú",name:"Serpost"},countryCodes:["pe"],terms:["servicios postales del perú"],matchScore:2,suggestion:true},"amenity/post_office/Slovenská pošta":{name:"Slovenská pošta",icon:"maki-post",imageURL:"https://graph.facebook.com/slovenskaposta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191849",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Slovenská pošta","brand:wikidata":"Q1191849","brand:wikipedia":"en:Slovenská pošta",name:"Slovenská pošta"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/The UPS Store":{name:"The UPS Store",icon:"maki-post",imageURL:"https://graph.facebook.com/theupsstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7771029",amenity:"post_office"},addTags:{amenity:"post_office",brand:"The UPS Store","brand:wikidata":"Q7771029","brand:wikipedia":"en:The UPS Store",name:"The UPS Store",short_name:"UPS"},countryCodes:["ca","us"],terms:["ups store"],matchScore:2,suggestion:true},"amenity/post_office/United States Post Office":{name:"United States Post Office",icon:"maki-post",imageURL:"https://graph.facebook.com/USPS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q668687",amenity:"post_office"},addTags:{amenity:"post_office",brand:"United States Post Office","brand:wikidata":"Q668687","brand:wikipedia":"en:United States Postal Service",name:"United States Post Office"},countryCodes:["us"],terms:["united states postal service","us post office","us postal service","usps","usps post office"],matchScore:2,suggestion:true},"amenity/post_office/ΕΛΤΑ":{name:"ΕΛΤΑ",icon:"maki-post",imageURL:"https://graph.facebook.com/HellenicPostELTA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1275135",amenity:"post_office"},addTags:{amenity:"post_office",brand:"ΕΛΤΑ","brand:wikidata":"Q1275135","brand:wikipedia":"el:Ελληνικά Ταχυδρομεία",name:"ΕΛΤΑ"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Белпошта":{name:"Белпошта",icon:"maki-post",imageURL:"https://graph.facebook.com/belpost.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2662336",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Белпошта","brand:be":"Белпошта","brand:en":"Belposhta","brand:ru":"Белпочта","brand:wikidata":"Q2662336","brand:wikipedia":"be:Белпошта",name:"Белпошта","name:be":"Белпошта","name:en":"Belposhta","name:ru":"Белпочта"},countryCodes:["by"],terms:["белпочта"],matchScore:2,suggestion:true},"amenity/post_office/Казпочта":{name:"Казпочта",icon:"maki-post",imageURL:"https://graph.facebook.com/Kazpost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q746263",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Казпочта","brand:wikidata":"Q746263","brand:wikipedia":"ru:Казпочта",name:"Казпочта"},countryCodes:["kz"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/Нова Пошта":{name:"Нова Пошта",icon:"maki-post",imageURL:"https://graph.facebook.com/nova.poshta.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12133863",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Нова Пошта","brand:wikidata":"Q12133863","brand:wikipedia":"uk:Нова пошта",name:"Нова Пошта"},countryCodes:["ua"],terms:["Нова Пошта №1","Нова Пошта №2","Нова Пошта №3","Нова Пошта №4"],matchScore:2,suggestion:true},"amenity/post_office/Почта России":{name:"Почта России",icon:"maki-post",imageURL:"https://graph.facebook.com/ruspost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1502763",amenity:"post_office"},addTags:{amenity:"post_office",brand:"Почта России","brand:wikidata":"Q1502763","brand:wikipedia":"ru:Почта России",name:"Почта России"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/СДЭК":{name:"СДЭК",icon:"maki-post",imageURL:"https://graph.facebook.com/edostavka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28665980",amenity:"post_office"},addTags:{amenity:"post_office",brand:"СДЭК","brand:wikidata":"Q28665980","brand:wikipedia":"ru:СДЭК",name:"СДЭК"},countryCodes:["ru","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/pub/Walkabout":{name:"Walkabout",icon:"maki-beer",geometry:["point","area"],tags:{"brand:wikidata":"Q7962149",amenity:"pub"},addTags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/public_bookcase/Little Free Library":{name:"Little Free Library",icon:"maki-library",imageURL:"https://graph.facebook.com/LittleFreeLibrary/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6650101",amenity:"public_bookcase"},addTags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"},terms:[],matchScore:2,suggestion:true},"amenity/recycling/Planet Aid":{name:"Planet Aid",icon:"maki-recycling",imageURL:"https://graph.facebook.com/Planet.Aid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7201055",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/recycling/Saint Vincent de Paul":{name:"Saint Vincent de Paul",icon:"maki-recycling",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",amenity:"recycling"},addTags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"},countryCodes:["us"],terms:["st vincent de paul"],matchScore:2,suggestion:true},"amenity/recycling/The Salvation Army":{name:"The Salvation Army",icon:"maki-recycling",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",amenity:"recycling"},addTags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"},countryCodes:["us"],terms:["salvation army"],matchScore:2,suggestion:true},"amenity/restaurant/100 Montaditos":{name:"100 Montaditos",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/100MontaditosSpain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8355805",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"},countryCodes:["es","it","pt"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/3 Brewers (On)":{name:"3 Brewers (On)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/ASK Italian":{name:"ASK Italian",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ASKItalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4807056",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Amici's East Coast Pizzeria":{name:"Amici's East Coast Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/AmicisBayArea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133409",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Applebee's":{name:"Applebee's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Applebeesmundoe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q621532",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"},reference:{key:"cuisine",value:"american"},terms:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],matchScore:2,suggestion:true},"amenity/restaurant/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/sushi/Bonchon Chicken":{name:"Bonchon Chicken",icon:"temaki-temaki",geometry:["point","area"],tags:{"brand:wikidata":"Q4941248",amenity:"restaurant",cuisine:"chicken;korean;sushi"},addTags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"},reference:{key:"cuisine",value:"sushi"},countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Bonefish Grill":{name:"Bonefish Grill",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/bonefishgrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4941599",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Boston Pizza":{name:"Boston Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/BostonPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q894578",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Bravo":{name:"Bravo",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bravoitalian/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64055574",amenity:"restaurant",cuisine:"italian"},addTags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"},reference:{key:"cuisine",value:"italian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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",leisure:"amusement_arcade",name:"Chuck E. Cheese's"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca","us"],terms:["chuck e cheese"],matchScore:2,suggestion:true},"amenity/restaurant/Chuy's":{name:"Chuy's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Chuys.Restaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5118415",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Cici's Pizza":{name:"Cici's Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/Cicis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2972189",amenity:"restaurant",cuisine:"pizza;buffet"},addTags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Claim Jumper":{name:"Claim Jumper",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ClaimJumperRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5125081",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Coast to Coast":{name:"Coast to Coast",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/coasttocoastrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22000729",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"},reference:{key:"cuisine",value:"american"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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",leisure:"amusement_arcade",name:"Dave & Buster's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Denny's":{name:"Denny's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dennys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1189695",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Dickey's Barbecue Pit":{name:"Dickey's Barbecue Pit",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/dickeysbarbecuepit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19880747",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"},countryCodes:["us"],terms:["dickeys barbecue"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Donatos Pizza":{name:"Donatos Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/DonatosPizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1240741",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["donatos"],matchScore:2,suggestion:true},"amenity/restaurant/italian/East Side Mario's":{name:"East Side Mario's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/eastsidemarios/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5329375",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"},reference:{key:"cuisine",value:"italian"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Eat'n Park":{name:"Eat'n Park",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/EatnParkRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5331211",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Elephant Bar":{name:"Elephant Bar",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/654001639704039424/wj9RQmmK_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5359302",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Famous Dave's":{name:"Famous Dave's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/famousdaves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433448",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"},countryCodes:["us"],terms:["famous daves bbq"],matchScore:2,suggestion:true},"amenity/restaurant/american/First Watch":{name:"First Watch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/FirstWatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5454064",amenity:"restaurant",cuisine:"american;breakfast"},addTags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/french/Flunch":{name:"Flunch",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/flunch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629326",amenity:"restaurant",cuisine:"french"},addTags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"},reference:{key:"cuisine",value:"french"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Foster's Hollywood":{name:"Foster's Hollywood",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/fostershollywood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5864366",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"},reference:{key:"cuisine",value:"american"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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/pizza/Ledo Pizza":{name:"Ledo Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/ledopizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6512734",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/seafood/Legal Sea Foods":{name:"Legal Sea Foods",icon:"maki-restaurant-seafood",imageURL:"https://graph.facebook.com/LegalSeaFoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6517417",amenity:"restaurant",cuisine:"seafood"},addTags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"},reference:{key:"cuisine",value:"seafood"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Les 3 Brasseurs (Qc,Br,Fr)":{name:"Les 3 Brasseurs (Qc,Br,Fr)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/3Brasseursca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3230326",amenity:"restaurant",cuisine:"burger;pizza;seafood"},addTags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"},reference:{key:"cuisine",value:"pizza"},countryCodes:["br","ca","fr"],terms:["3 Brasseurs"],matchScore:2,suggestion:true},"amenity/restaurant/american/Logan's Roadhouse":{name:"Logan's Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Logans.Roadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6666872",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/LongHorn Steakhouse":{name:"LongHorn Steakhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/longhornsteakhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3259007",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Lou Malnati's Pizzeria":{name:"Lou Malnati's Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/loumalnatis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6685628",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Loving Hut":{name:"Loving Hut",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/LovingHutUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3491655",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Luby's":{name:"Luby's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Lubys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6695701",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Léon de Bruxelles":{name:"Léon de Bruxelles",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/leondebruxellesofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21041507",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/thai/MK Restaurants":{name:"MK Restaurants",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/mkrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62075359",amenity:"restaurant",cuisine:"thai"},addTags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"},reference:{key:"cuisine",value:"thai"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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/pizza/Peter Piper Pizza":{name:"Peter Piper Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/peterpiperpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7176401",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở 24":{name:"Phở 24",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/pho24.24giavitinhte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63863118",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/vietnamese/Phở Hòa":{name:"Phở Hòa",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/phohoanoodlesoup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55629932",amenity:"restaurant",cuisine:"vietnamese;noodle"},addTags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"},reference:{key:"cuisine",value:"vietnamese"},countryCodes:["ca","id","kr","ms","ph","tw","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pieology Pizzeria":{name:"Pieology Pizzeria",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/pieology/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60746053",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],terms:["pieology"],matchScore:2,suggestion:true},"amenity/restaurant/pizza/Pizza 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/Sonny's BBQ":{name:"Sonny's BBQ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/sonnysbbq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7561989",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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/Stoney River":{name:"Stoney River",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1050121272938643465/QjAWyNTq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7619422",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Sunset Grill":{name:"Sunset Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SunsetGrillBreakfast/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62112489",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Swiss Chalet":{name:"Swiss Chalet",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/SwissChalet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2372909",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/TGI Friday's":{name:"TGI Friday's",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/TGIFridays/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1524184",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"},reference:{key:"cuisine",value:"american"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Ted's Montana Grill":{name:"Ted's Montana Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/tedsmontanagrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16953170",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Texas Roadhouse":{name:"Texas Roadhouse",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/texasroadhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7707945",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/The Cheesecake Factory":{name:"The Cheesecake Factory",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thecheesecakefactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1045842",amenity:"restaurant",cuisine:"american"},addTags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Keg":{name:"The Keg",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/thekegsteakhouseandbar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7744066",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"},countryCodes:["ca","us"],terms:["keg"],matchScore:2,suggestion:true},"amenity/restaurant/The Melting Pot":{name:"The Melting Pot",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/themeltingpotrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7750948",amenity:"restaurant"},addTags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/The Original Pancake House":{name:"The Original Pancake House",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q7755384",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"},countryCodes:["jp","kr","us"],terms:["original pancake house"],matchScore:2,suggestion:true},"amenity/restaurant/Toby Carvery":{name:"Toby Carvery",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/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/pizza/Unos":{name:"Unos",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/UnoChicagoGrill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7897209",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"},reference:{key:"cuisine",value:"pizza"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Vapiano":{name:"Vapiano",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/Vapiano/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q506252",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"},reference:{key:"cuisine",value:"italian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Village Inn":{name:"Village Inn",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/villageinnrestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7930659",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Asia)":{name:"Vips (Asia)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ivips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12599540",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"},countryCodes:["cn","kr"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/mexican/Vips (Mexico)":{name:"Vips (Mexico)",icon:"fas-pepper-hot",imageURL:"https://graph.facebook.com/VIPSMX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48783378",amenity:"restaurant",cuisine:"mexican"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"},reference:{key:"cuisine",value:"mexican"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/Vips (Spain)":{name:"Vips (Spain)",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/vips/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66087862",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Waffle House":{name:"Waffle House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/WaffleHouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1701206",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/asian/Wagamama":{name:"Wagamama",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/wagamama.spain/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q503715",amenity:"restaurant",cuisine:"asian"},addTags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"},reference:{key:"cuisine",value:"asian"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Wasabi":{name:"Wasabi",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/WasabiUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23891278",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"},reference:{key:"cuisine",value:"japanese"},terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Western Sizzlin'":{name:"Western Sizzlin'",icon:"maki-restaurant",imageURL:"https://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/sushi/YO! Sushi":{name:"YO! Sushi",icon:"temaki-temaki",imageURL:"https://graph.facebook.com/YOSushi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3105441",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/american/Yard House":{name:"Yard House",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/yardhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21189156",amenity:"restaurant",cuisine:"american"},addTags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/italian/Zizzi":{name:"Zizzi",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/wearezizzi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8072944",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"},reference:{key:"cuisine",value:"italian"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/bd's Mongolian Grill":{name:"bd's Mongolian Grill",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/bdsMongolianGrillVerifiedPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q69890408",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"},countryCodes:["mn","us"],terms:["bd Mongolian Grill"],matchScore:2,suggestion:true},"amenity/restaurant/dean&david":{name:"dean&david",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/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:"temaki-temaki",imageURL:"https://graph.facebook.com/sushiplanet.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62739250",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"Планета Суши","brand:wikidata":"Q62739250",cuisine:"sushi",name:"Планета Суши","name:en":"Planet Sushi"},reference:{key:"cuisine",value:"sushi"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/japanese/Тануки":{name:"Тануки",icon:"maki-restaurant-noodle",imageURL:"https://graph.facebook.com/tanuki.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62758690",amenity:"restaurant",cuisine:"japanese"},addTags:{amenity:"restaurant",brand:"Тануки","brand:wikidata":"Q62758690",cuisine:"japanese",name:"Тануки","name:en":"Tanuki","name:ru":"Тануки"},reference:{key:"cuisine",value:"japanese"},countryCodes:["kz","ru","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",geometry:["point","area"],tags:{"brand:wikidata":"Q11257174",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"あさくま","brand:en":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/いきなり!ステーキ":{name:"いきなり!ステーキ",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/ikinari.steak/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21652405",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/restaurant/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:"temaki-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:"temaki-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:"temaki-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/Lions Clubs International":{name:"Lions Clubs International",icon:"fas-handshake",geometry:["point","area"],tags:{"brand:wikidata":"Q270029",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"},terms:["lions club","lions club international","lions clubs"],matchScore:2,suggestion:true},"amenity/social_centre/Moose Lodge":{name:"Moose Lodge",icon:"fas-handshake",imageURL:"https://graph.facebook.com/heardofmoose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6908585",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"},countryCodes:["bm","ca","us"],terms:["moose"],matchScore:2,suggestion:true},"amenity/social_centre/Odd Fellows Hall":{name:"Odd Fellows Hall",icon:"fas-handshake",imageURL:"https://graph.facebook.com/IOOFSGL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1425508",amenity:"social_centre"},addTags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"},terms:["odd fellow","odd fellows"],matchScore:2,suggestion:true},"amenity/social_centre/Orioles Nest":{name:"Orioles Nest",icon:"fas-handshake",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_lockers",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAmazon%20locker%20logotype.png&width=100",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_tickets",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_tickets",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_lockers",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_pet_waste",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/ice_cubes/Home City Ice":{name:"Home City Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/HomeCityIceJobs/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q5888287",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Home City Ice","brand:wikidata":"Q5888287",name:"Home City Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/public_transport_tickets/KKM":{name:"KKM",icon:"temaki-vending_tickets",geometry:["point"],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_lockers",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_tickets",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/ice_cubes/Reddy Ice":{name:"Reddy Ice",icon:"temaki-vending_ice",imageURL:"https://graph.facebook.com/RealReddyIce/picture?type=large",geometry:["point"],tags:{"brand:wikidata":"Q7305666",amenity:"vending_machine",vending:"ice_cubes"},addTags:{amenity:"vending_machine",brand:"Reddy Ice","brand:wikidata":"Q7305666","brand:wikipedia":"en:Reddy Ice",name:"Reddy Ice",vending:"ice_cubes"},reference:{key:"vending",value:"ice_cubes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/excrement_bags/Robidog":{name:"Robidog",icon:"temaki-vending_pet_waste",geometry:["point"],tags:{"brand:wikidata":"Q2159689",amenity:"vending_machine",vending:"excrement_bags"},addTags:{amenity:"vending_machine",brand:"Robidog","brand:wikidata":"Q2159689","brand:wikipedia":"de:Robidog",name:"Robidog",vending:"excrement_bags"},reference:{key:"vending",value:"excrement_bags"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup_dropoff/Smartpost":{name:"Smartpost",icon:"temaki-vending_lockers",geometry:["point"],tags:{"brand:wikidata":"Q7543889",amenity:"vending_machine",vending:"parcel_pickup;parcel_mail_in"},addTags:{amenity:"vending_machine",brand:"Smartpost","brand:wikidata":"Q7543889","brand:wikipedia":"fi:SmartPOST",name:"Smartpost",vending:"parcel_pickup;parcel_mail_in"},reference:{key:"vending",value:"parcel_pickup;parcel_mail_in"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/cigarettes/Tobaccoland":{name:"Tobaccoland",icon:"temaki-vending_cigarettes",geometry:["point"],tags:{"brand:wikidata":"Q1439872",amenity:"vending_machine",vending:"cigarettes"},addTags:{amenity:"vending_machine",brand:"Tobaccoland","brand:wikidata":"Q1439872","brand:wikipedia":"de:Tobaccoland Automatengesellschaft",name:"Tobaccoland",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/コカ・コーラ":{name:"コカ・コーラ",icon:"temaki-vending_cold_drink",imageURL:"https://graph.facebook.com/CocaColaUnitedStates/picture?type=large",geometry:["point"],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},"craft/window_construction/K par K":{name:"K par K",icon:"temaki-window",geometry:["point","area"],tags:{"brand:wikidata":"Q3191596",craft:"window_construction"},addTags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/American Red Cross":{name:"American Red Cross",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/redcross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q470110",healthcare:"blood_donation"},addTags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"healthcare/blood_donation/Australian Red Cross Blood Service":{name:"Australian Red Cross Blood Service",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/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},"healthcare/blood_donation/Thai Red Cross Society":{name:"Thai Red Cross Society",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/ThaiRedCross/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4922087",healthcare:"blood_donation"},addTags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/Jenny Craig":{name:"Jenny Craig",icon:"fas-comments",imageURL:"https://graph.facebook.com/jennycraig/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6179221",healthcare:"counselling"},addTags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"healthcare/counselling/WW Studio":{name:"WW Studio",icon:"fas-comments",imageURL:"https://graph.facebook.com/WW/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1929466",healthcare:"counselling"},addTags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"},terms:["ww"],matchScore:2,suggestion:true},"landuse/residential/Avalon":{name:"Avalon",icon:"maki-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/bowling_alley/Strike Bowling Bar":{name:"Strike Bowling Bar",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/strikebowling/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7623769",leisure:"bowling_alley"},addTags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"leisure/dog_park/Kamp K9":{name:"Kamp K9",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/KOAKampgrounds/picture?type=large",geometry:["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://graph.facebook.com/fit4lesscanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821050",leisure:"fitness_centre"},addTags:{brand:"Fit4Less","brand:wikidata":"Q64821050",leisure:"fitness_centre",name:"Fit4Less"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Fit4less (UK)":{name:"Fit4less (UK)",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Fit4lessUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64821053",leisure:"fitness_centre"},addTags:{brand:"Fit4less","brand:wikidata":"Q64821053",leisure:"fitness_centre",name:"Fit4less"},countryCodes:["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/Smart Fit":{name:"Smart Fit",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SmartFit.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30930959",leisure:"fitness_centre"},addTags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"},countryCodes:["br","cl","co","do","mx","pe"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/Snap Fitness":{name:"Snap Fitness",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SnapFitness247/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547254",leisure:"fitness_centre"},addTags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"},terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/SoulCycle":{name:"SoulCycle",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/SoulCycleInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17084730",leisure:"fitness_centre"},addTags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/カーブス":{name:"カーブス",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/Curves/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5196080",leisure:"fitness_centre"},addTags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/playground/McDonald's PlayPlace":{name:"McDonald's PlayPlace",icon:"maki-playground",imageURL:"https://graph.facebook.com/mcdonalds/picture?type=large",geometry:["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},"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",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Hong Kong)":{name:"Ucommune (Hong Kong)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Singapore)":{name:"Ucommune (Singapore)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"office/coworking/Ucommune (Taiwan)":{name:"Ucommune (Taiwan)",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ucommunes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60785187",office:"coworking"},addTags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/coworking/WeWork":{name:"WeWork",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/wework/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19995004",office:"coworking"},addTags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Adecco":{name:"Adecco",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/adeccogroupDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q353494",office:"employment_agency"},addTags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Agentur für Arbeit":{name:"Agentur für Arbeit",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/160267817333843/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1478016",office:"employment_agency"},addTags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Jobcentre Plus":{name:"Jobcentre Plus",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/174667546602258/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6206793",office:"employment_agency"},addTags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Manpower":{name:"Manpower",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ManpowerGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1472539",office:"employment_agency"},addTags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/employment_agency/Pôle Emploi":{name:"Pôle Emploi",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/poleemploi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8901192",office:"employment_agency"},addTags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Randstad":{name:"Randstad",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/Randstad/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q267840",office:"employment_agency"},addTags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"},terms:[],matchScore:2,suggestion:true},"office/energy_supplier/Naturgy":{name:"Naturgy",icon:"maki-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNaturgy.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q474690",office:"energy_supplier"},addTags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"},countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg","uk"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Century 21":{name:"Century 21",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/century21/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1054480",office:"estate_agent"},addTags:{brand:"Century 21","brand:wikidata":"Q1054480","brand:wikipedia":"en:Century 21 (real estate)",name:"Century 21",office:"estate_agent"},terms:["century 21 real estate"],matchScore:2,suggestion:true},"office/estate_agent/Coldwell Banker":{name:"Coldwell Banker",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/coldwellbanker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738853",office:"estate_agent"},addTags:{brand:"Coldwell Banker","brand:wikidata":"Q738853","brand:wikipedia":"en:Coldwell Banker",name:"Coldwell Banker",office:"estate_agent"},terms:["coldwell banker real estate"],matchScore:2,suggestion:true},"office/estate_agent/Connells":{name:"Connells",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/298744224054963/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5161738",office:"estate_agent"},addTags:{brand:"Connells","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Engel & Völkers":{name:"Engel & Völkers",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/engelvoelkershq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1341765",office:"estate_agent"},addTags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"},terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foncia":{name:"Foncia",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Foncia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1435638",office:"estate_agent"},addTags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/Foxtons":{name:"Foxtons",icon:"temaki-real_estate_agency",geometry:["point","area"],tags:{"brand:wikidata":"Q5477251",office:"estate_agent"},addTags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",office:"estate_agent"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/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/Hamptons International":{name:"Hamptons International",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/HamptonsInt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646350",office:"estate_agent"},addTags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"},countryCodes:["gb"],terms:["hamptons international lettings","hamptons international sales"],matchScore:2,suggestion:true},"office/estate_agent/Laforêt":{name:"Laforêt",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/Laforetfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56310946",office:"estate_agent"},addTags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/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/estate_agent/Tecnocasa":{name:"Tecnocasa",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/GruppoTecnocasa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399658",office:"estate_agent"},addTags:{brand:"Tecnocasa","brand:wikidata":"Q2399658","brand:wikipedia":"de:Tecnocasa",name:"Tecnocasa",office:"estate_agent"},countryCodes:["es","it","pl"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/アパマンショップ":{name:"アパマンショップ",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/apamanshopcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11284512",office:"estate_agent"},addTags:{brand:"アパマンショップ","brand:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/エイブル":{name:"エイブル",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/able.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11289620",office:"estate_agent"},addTags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/ピタットハウス":{name:"ピタットハウス",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/pitatofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11331484",office:"estate_agent"},addTags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"},countryCodes:["jp"],terms:["ピタットハウスネットワーク"],matchScore:2,suggestion:true},"office/estate_agent/信義房屋":{name:"信義房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/sinyifans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10888034",office:"estate_agent"},addTags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/estate_agent/永慶房屋":{name:"永慶房屋",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/yungching.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11132113",office:"estate_agent"},addTags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"office/financial_advisor/Edward Jones":{name:"Edward Jones",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/edwardjones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5343830",office:"financial_advisor"},addTags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"office/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAllgemeine%20Ortskrankenkasse%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q835141",office:"insurance"},addTags:{brand:"AOK","brand:wikidata":"Q835141","brand:wikipedia":"de:Allgemeine Ortskrankenkasse",name:"AOK",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/AXA":{name:"AXA",icon:"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/Bâloise":{name:"Bâloise",icon:"maki-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBaloise%20Holding%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q457912",office:"insurance"},addTags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"},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"},countryCodes:["de"],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/Foyer":{name:"Foyer",icon:"maki-suitcase",geometry:["point","area"],tags:{"brand:wikidata":"Q1344573",office:"insurance"},addTags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"},countryCodes:["lu"],terms:[],matchScore:2,suggestion:true},"office/insurance/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/GMF":{name:"GMF",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/GMFassurances/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3095296",office:"insurance"},addTags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/Generali":{name:"Generali",icon:"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/Harmonie Mutuelle":{name:"Harmonie Mutuelle",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/harmoniemutuelle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3127528",office:"insurance"},addTags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"office/insurance/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/SV SparkassenVersicherung":{name:"SV SparkassenVersicherung",icon:"maki-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSV%20SparkassenVersicherung%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2208645",office:"insurance"},addTags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"office/insurance/State Farm":{name:"State Farm",icon:"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/Tranquilidade":{name:"Tranquilidade",icon:"maki-suitcase",geometry:["point","area"],tags:{"brand:wikidata":"Q7833457",office:"insurance"},addTags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"office/insurance/Zurich":{name:"Zurich",icon:"maki-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZurich%20Logo%20new.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q230426",office:"insurance"},addTags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"},terms:[],matchScore:2,suggestion:true},"office/insurance/Ингосстрах":{name:"Ингосстрах",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/ingos.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4200631",office:"insurance"},addTags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/РЕСО-Гарантия":{name:"РЕСО-Гарантия",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/reso.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4386516",office:"insurance"},addTags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/Росгосстрах":{name:"Росгосстрах",icon:"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/insurance/Согласие":{name:"Согласие",icon:"maki-suitcase",imageURL:"https://pbs.twimg.com/profile_images/789134207478067201/iGlOuCFZ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4426689",office:"insurance"},addTags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"office/insurance/بیمه ایران":{name:"بیمه ایران",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/iraninsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5930269",office:"insurance"},addTags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"},countryCodes:["ir"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Block Advisors":{name:"Block Advisors",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/BlockAdvisors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64166231",office:"tax_advisor"},addTags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/H&R Block":{name:"H&R Block",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/hrblock/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5627799",office:"tax_advisor"},addTags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"},countryCodes:["au","ca","in","us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Jackson Hewitt":{name:"Jackson Hewitt",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/jacksonhewitt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6117132",office:"tax_advisor"},addTags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"office/tax_advisor/Liberty Tax":{name:"Liberty Tax",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/libertytax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6541978",office:"tax_advisor"},addTags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Granngården":{name:"Granngården",icon:"fas-tractor",imageURL:"https://graph.facebook.com/granngarden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10508136",shop:"agrarian"},addTags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/agrarian/Southern States":{name:"Southern States",icon:"fas-tractor",imageURL:"https://graph.facebook.com/SouthernStatesCoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7570508",shop:"agrarian"},addTags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Alko":{name:"Alko",icon:"fas-wine-bottle",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlko.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1849187",shop:"alcohol"},addTags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BC Liquor Store":{name:"BC Liquor Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1302250656/winesplash-icon_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q43079557",shop:"alcohol"},addTags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BWS":{name:"BWS",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q4836848",shop:"alcohol"},addTags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Bargain Booze":{name:"Bargain Booze",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/998956835796205568/21tNi907_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16971315",shop:"alcohol"},addTags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/BevMo!":{name:"BevMo!",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1186694423691710464/-vjbOSk6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4899308",shop:"alcohol"},addTags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Dan Murphy's":{name:"Dan Murphy's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/465419847128473601/ybOMjW8-_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5214075",shop:"alcohol"},addTags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Fine Wine & Good Spirits":{name:"Fine Wine & Good Spirits",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/PAWineSpirits/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64514776",shop:"alcohol"},addTags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Gall & Gall":{name:"Gall & Gall",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/652468758515068928/dzFqRsLG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q13639185",shop:"alcohol"},addTags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/LCBO":{name:"LCBO",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/481885343986102272/mGMV-t--_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q845263",shop:"alcohol"},addTags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Liquorland":{name:"Liquorland",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/378800000468322180/92219ed513322ff2f4d6d416dc477704_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q2283837",shop:"alcohol"},addTags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Majestic":{name:"Majestic",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1139531853759729665/3J0irT72_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q6737725",shop:"alcohol"},addTags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"},countryCodes:["gb"],terms:["majestic wine","majestic wine warehouse"],matchScore:2,suggestion:true},"shop/alcohol/Nicolas":{name:"Nicolas",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/842779196082573314/AtkEMQlh_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3340012",shop:"alcohol"},addTags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Oddbins":{name:"Oddbins",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/547781884533436416/xshXfITG_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7077472",shop:"alcohol"},addTags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ":{name:"SAQ",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Express":{name:"SAQ Express",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/SAQ Sélection":{name:"SAQ Sélection",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1064657571133308928/zhzEYvxp_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3488077",shop:"alcohol"},addTags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Spec's":{name:"Spec's",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1186359379244781576/Er-Ev4R9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7574415",shop:"alcohol"},addTags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Systembolaget":{name:"Systembolaget",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/456046476032872449/mg3NXDpc_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1476113",shop:"alcohol"},addTags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/The Beer Store":{name:"The Beer Store",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1112700310441676800/Gyk3rZl6_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q16243674",shop:"alcohol"},addTags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Total Wine":{name:"Total Wine",icon:"fas-wine-bottle",imageURL:"https://pbs.twimg.com/profile_images/1171529136919048195/cip0mUtb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7828084",shop:"alcohol"},addTags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Virginia ABC":{name:"Virginia ABC",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/VirginiaABC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7934236",shop:"alcohol"},addTags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Бристоль":{name:"Бристоль",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/bristolretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q59155583",shop:"alcohol"},addTags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/alcohol/Красное & Белое":{name:"Красное & Белое",icon:"fas-wine-bottle",imageURL:"https://graph.facebook.com/krasnoe.beloe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933790",shop:"alcohol"},addTags:{brand:"Красное & Белое","brand:en":"Red&White","brand:wikidata":"Q24933790","brand:wikipedia":"en:Krasnoe & Beloe",name:"Красное & Белое","name:en":"Red&White",shop:"alcohol"},countryCodes:["ru"],terms:["красное и белое"],matchScore:2,suggestion:true},"shop/alcohol/カクヤス":{name:"カクヤス",icon:"fas-wine-bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q11293990",shop:"alcohol"},addTags:{brand:"カクヤス","brand:en":"Kakuyasu","brand:ja":"カクヤス","brand:wikidata":"Q11293990","brand:wikipedia":"ja:カクヤス",name:"カクヤス","name:en":"Kakuyasu","name:ja":"カクヤス",shop:"alcohol"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/art/YellowKorner":{name:"YellowKorner",icon:"maki-shop",imageURL:"https://graph.facebook.com/YellowKorner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3572115",shop:"art"},addTags:{brand:"YellowKorner","brand:wikidata":"Q3572115","brand:wikipedia":"fr:YellowKorner",name:"YellowKorner",shop:"art"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Aubert":{name:"Aubert",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/Aubert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62964657",shop:"baby_goods"},addTags:{brand:"Aubert","brand:wikidata":"Q62964657",name:"Aubert",shop:"baby_goods"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Babies R Us":{name:"Babies R Us",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/babiesrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17232036",shop:"baby_goods"},addTags:{brand:"Babies R Us","brand:wikidata":"Q17232036",name:"Babies R Us",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/BabyOne":{name:"BabyOne",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/BabyOne/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57540408",shop:"baby_goods"},addTags:{brand:"BabyOne","brand:wikidata":"Q57540408",name:"BabyOne",shop:"baby_goods"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Buy Buy Baby":{name:"Buy Buy Baby",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/buybuyBABY/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5003352",shop:"baby_goods"},addTags:{brand:"Buy Buy Baby","brand:wikidata":"Q5003352","brand:wikipedia":"en:Buy Buy Baby",name:"Buy Buy Baby",shop:"baby_goods"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Mothercare":{name:"Mothercare",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/mothercareuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136738",shop:"baby_goods"},addTags:{brand:"Mothercare","brand:wikidata":"Q136738","brand:wikipedia":"en:Mothercare",name:"Mothercare",shop:"baby_goods"},terms:[],matchScore:2,suggestion:true},"shop/baby_goods/Zippy":{name:"Zippy",icon:"fas-baby-carriage",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FZippy%20Kidstore%20logo%2020150813.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10395161",shop:"baby_goods"},addTags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",shop:"baby_goods"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/baby_goods/西松屋":{name:"西松屋",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/nishimatsuya.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11628761",shop:"baby_goods"},addTags:{brand:"西松屋","brand:en":"Nishimatsuya Chain","brand:ja":"西松屋","brand:wikidata":"Q11628761","brand:wikipedia":"ja:西松屋",name:"西松屋","name:en":"Nishimatsuya Chain","name:ja":"西松屋",shop:"baby_goods"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bag/Bentley":{name:"Bentley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/bentleyleathers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947700",shop:"bag"},addTags:{brand:"Bentley","brand:wikidata":"Q65947700",name:"Bentley",shop:"bag"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/bag/Carpisa":{name:"Carpisa",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/CarpisaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28035409",shop:"bag"},addTags:{brand:"Carpisa","brand:wikidata":"Q28035409","brand:wikipedia":"en:Carpisa",name:"Carpisa",shop:"bag"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/bag/Coach":{name:"Coach",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/coach/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q727697",shop:"bag"},addTags:{brand:"Coach","brand:wikidata":"Q727697","brand:wikipedia":"en:Coach New York",name:"Coach",shop:"bag"},countryCodes:["ca","us"],terms:["coach new york","coach ny"],matchScore:2,suggestion:true},"shop/bag/Kipling":{name:"Kipling",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/KiplingU.S.A/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6414641",shop:"bag"},addTags:{brand:"Kipling","brand:wikidata":"Q6414641","brand:wikipedia":"en:Kipling (brand)",name:"Kipling",shop:"bag"},countryCodes:["be","gb"],terms:[],matchScore:2,suggestion:true},"shop/bag/Samsonite":{name:"Samsonite",icon:"fas-suitcase-rolling",imageURL:"https://pbs.twimg.com/profile_images/1117861430366175232/3u8m-kIE_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1203426",shop:"bag"},addTags:{brand:"Samsonite","brand:wikidata":"Q1203426","brand:wikipedia":"en:Samsonite",name:"Samsonite",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Tumi":{name:"Tumi",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/TumiTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4465402",shop:"bag"},addTags:{brand:"Tumi","brand:wikidata":"Q4465402","brand:wikipedia":"en:Tumi Inc.",name:"Tumi",shop:"bag"},terms:[],matchScore:2,suggestion:true},"shop/bag/Vera Bradley":{name:"Vera Bradley",icon:"fas-suitcase-rolling",imageURL:"https://graph.facebook.com/VeraBradley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7920749",shop:"bag"},addTags:{brand:"Vera Bradley","brand:wikidata":"Q7920749","brand:wikipedia":"en:Vera Bradley",name:"Vera Bradley",shop:"bag"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Anker":{name:"Anker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Ankerbrot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q557116",shop:"bakery"},addTags:{brand:"Anker","brand:wikidata":"Q557116","brand:wikipedia":"de:Ankerbrot",name:"Anker",shop:"bakery"},countryCodes:["at","sk"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Armbruster":{name:"Armbruster",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q67987954",shop:"bakery"},addTags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/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/BreadTalk":{name:"BreadTalk",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBreadTalk%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1106640",shop:"bakery"},addTags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"},countryCodes:["sg"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Breadtop":{name:"Breadtop",icon:"maki-bakery",imageURL:"https://graph.facebook.com/we.love.breadtop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4959217",shop:"bakery"},addTags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/bakery/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/CooplandsBakers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167971",shop:"bakery"},addTags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Dat Backhus":{name:"Dat Backhus",icon:"maki-bakery",imageURL:"https://graph.facebook.com/datbackhus.hamburg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62093175",shop:"bakery"},addTags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Der Beck":{name:"Der Beck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/derbeck.baeckerei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1192443",shop:"bakery"},addTags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ditsch":{name:"Ditsch",icon:"maki-bakery",imageURL:"https://graph.facebook.com/ditsch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q911573",shop:"bakery"},addTags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Fornetti":{name:"Fornetti",icon:"maki-bakery",imageURL:"https://graph.facebook.com/fornetti.magyarorszag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1003020",shop:"bakery"},addTags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Goldilocks":{name:"Goldilocks",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GoldilocksPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5580198",shop:"bakery"},addTags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"},countryCodes:["ca","ph","th","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Great Harvest Bread Company":{name:"Great Harvest Bread Company",icon:"maki-bakery",imageURL:"https://graph.facebook.com/GreatHarvestBreadCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5599297",shop:"bakery"},addTags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/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/Peter's gute Backstube":{name:"Peter's gute Backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/petersgutebackstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67987587",shop:"bakery"},addTags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Red Ribbon":{name:"Red Ribbon",icon:"maki-bakery",imageURL:"https://graph.facebook.com/redribbonbakeshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7304789",shop:"bakery"},addTags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"},countryCodes:["ph","us"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Richters Altstadt-Bäckerei":{name:"Richters Altstadt-Bäckerei",icon:"maki-bakery",imageURL:"https://graph.facebook.com/richteraltstadtbaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66212346",shop:"bakery"},addTags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ronde des Pains":{name:"Ronde des Pains",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q3441707",shop:"bakery"},addTags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"},countryCodes:["be","fr"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Schäfer's":{name:"Schäfer's",icon:"maki-bakery",imageURL:"https://graph.facebook.com/149823855088841/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1464562",shop:"bakery"},addTags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sehne":{name:"Sehne",icon:"maki-bakery",imageURL:"https://graph.facebook.com/150057125031868/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1314761",shop:"bakery"},addTags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Starke Bäcker":{name:"Starke Bäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/StarkeBaecker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133336",shop:"bakery"},addTags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Steinecke":{name:"Steinecke",icon:"maki-bakery",imageURL:"https://graph.facebook.com/brotmeisterei.steinecke/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57516278",shop:"bakery"},addTags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Sternenbäck":{name:"Sternenbäck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sternenbaeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62595021",shop:"bakery"},addTags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Ströck":{name:"Ströck",icon:"maki-bakery",imageURL:"https://graph.facebook.com/Stroeck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2357607",shop:"bakery"},addTags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/bakery/Upper Crust":{name:"Upper Crust",icon:"maki-bakery",imageURL:"https://pbs.twimg.com/profile_images/1156194120324591619/0Wy7xKDd_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7898585",shop:"bakery"},addTags:{brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",name:"Upper Crust",shop:"bakery"},terms:[],matchScore:2,suggestion:true},"shop/bakery/Wiener Feinbäcker":{name:"Wiener Feinbäcker",icon:"maki-bakery",imageURL:"https://graph.facebook.com/248217405252147/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15854357",shop:"bakery"},addTags:{brand:"Wiener Feinbäcker","brand:wikidata":"Q15854357","brand:wikipedia":"de:Wiener Feinbäckerei Heberer",name:"Wiener Feinbäcker",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/sander's backstube":{name:"sander's backstube",icon:"maki-bakery",imageURL:"https://graph.facebook.com/sanders.backstube/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66207337",shop:"bakery"},addTags:{brand:"sander's backstube","brand:wikidata":"Q66207337",name:"sander's backstube",shop:"bakery"},countryCodes:["de"],terms:["bäckerei sander"],matchScore:2,suggestion:true},"shop/bakery/von Allwörden":{name:"von Allwörden",icon:"maki-bakery",imageURL:"https://graph.facebook.com/allwoerden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60411349",shop:"bakery"},addTags:{brand:"von Allwörden","brand:wikidata":"Q60411349","brand:wikipedia":"nds:Heinrich von Allwörden GmbH",name:"von Allwörden",shop:"bakery"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/bakery/サンジェルマン":{name:"サンジェルマン",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q11305612",shop:"bakery"},addTags:{brand:"サンジェルマン","brand:en":"Saint-Germain","brand:ja":"サンジェルマン","brand:wikidata":"Q11305612","brand:wikipedia":"ja:サンジェルマン (製パン)",name:"サンジェルマン","name:en":"Saint-Germain","name:ja":"サンジェルマン",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/ヴィ・ド・フランス":{name:"ヴィ・ド・フランス",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q7928249",shop:"bakery"},addTags:{brand:"ヴィ・ド・フランス","brand:en":"Vie de France","brand:ja":"ヴィ・ド・フランス","brand:wikidata":"Q7928249","brand:wikipedia":"ja:ヴィ・ド・フランス",name:"ヴィ・ド・フランス","name:en":"Vie de France","name:ja":"ヴィ・ド・フランス",shop:"bakery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/bakery/巴黎贝甜 (China)":{name:"巴黎贝甜 (China)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{brand:"巴黎贝甜","brand:en":"Paris Baguette","brand:wikidata":"Q62605260","brand:zh":"巴黎贝甜",name:"巴黎贝甜","name:en":"Paris Baguette","name:zh":"巴黎贝甜",shop:"bakery"},countryCodes:["cn"],terms:["paris baguette","paris baguette cafe","巴黎貝甜"],matchScore:2,suggestion:true},"shop/bakery/뚜레쥬르":{name:"뚜레쥬르",icon:"maki-bakery",imageURL:"https://graph.facebook.com/TousLesJoursUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3535609",shop:"bakery"},addTags:{brand:"뚜레쥬르","brand:en":"Tous Les Jours","brand:ko":"뚜레쥬르","brand:wikidata":"Q3535609","brand:wikipedia":"ko:뚜레쥬르",name:"뚜레쥬르","name:en":"Tous Les Jours","name:ko":"뚜레쥬르",shop:"bakery"},countryCodes:["kr"],terms:["뚜레주르"],matchScore:2,suggestion:true},"shop/bakery/파리바게뜨 (South Korea)":{name:"파리바게뜨 (South Korea)",icon:"maki-bakery",imageURL:"https://graph.facebook.com/parisbaguetteus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62605260",shop:"bakery"},addTags:{"alt_name:ko":"파리바게트",brand:"파리바게뜨","brand:en":"Paris Baguette","brand:ko":"파리바게뜨","brand:wikidata":"Q62605260",name:"파리바게뜨","name:en":"Paris Baguette","name:ko":"파리바게뜨",shop:"bakery"},countryCodes:["kr"],terms:["paris baguette","paris baguette cafe","파리바게트"],matchScore:2,suggestion:true},"shop/beauty/Benefit Brow Bar":{name:"Benefit Brow Bar",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/benefitcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2895769",shop:"beauty"},addTags:{beauty:"eyebrow;eyelash;waxing",brand:"Benefit","brand:wikidata":"Q2895769","brand:wikipedia":"en:Benefit Cosmetics",name:"Benefit Brow Bar",shop:"beauty"},countryCodes:["us"],terms:["benefit","ulta brow bar"],matchScore:2,suggestion:true},"shop/beauty/European Wax Center":{name:"European Wax Center",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/EuropeanWax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5413426",shop:"beauty"},addTags:{beauty:"waxing",brand:"European Wax Center","brand:wikidata":"Q5413426","brand:wikipedia":"en:European Wax Center",name:"European Wax Center",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Indigo Sun":{name:"Indigo Sun",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/indigosunretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63436906",shop:"beauty"},addTags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Palm Beach Tan":{name:"Palm Beach Tan",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/PBTOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64027086",shop:"beauty"},addTags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Sola Salons":{name:"Sola Salons",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/solasalons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64337426",shop:"beauty"},addTags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"},countryCodes:["us"],terms:["sola","sola salon studios"],matchScore:2,suggestion:true},"shop/beauty/The Skin Bar at Ulta Beauty":{name:"The Skin Bar at Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"beauty"},addTags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beauty/Yves Rocher":{name:"Yves Rocher",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/YvesRocherUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28496595",shop:"beauty"},addTags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"},terms:[],matchScore:2,suggestion:true},"shop/bed/Bensons for Beds":{name:"Bensons for Beds",icon:"maki-lodging",imageURL:"https://pbs.twimg.com/profile_images/435352801321840641/LvfVjgBH_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q4890299",shop:"bed"},addTags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"},countryCodes:["gb"],terms:["bensons"],matchScore:2,suggestion:true},"shop/bed/Beter Bed":{name:"Beter Bed",icon:"maki-lodging",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBeterBed-logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q831076",shop:"bed"},addTags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/bed/Casper":{name:"Casper",icon:"maki-lodging",imageURL:"https://graph.facebook.com/224110981099062/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20539294",shop:"bed"},addTags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"},terms:[],matchScore:2,suggestion:true},"shop/bed/Dreams":{name:"Dreams",icon:"maki-lodging",imageURL:"https://graph.facebook.com/dreamsbeds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306688",shop:"bed"},addTags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bed/Matratzen Concord":{name:"Matratzen Concord",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MatratzenConcord/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18629057",shop:"bed"},addTags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/bed/Mattress Firm":{name:"Mattress Firm",icon:"maki-lodging",imageURL:"https://graph.facebook.com/MattressFirm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6791878",shop:"bed"},addTags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"},countryCodes:["us"],terms:["sleepys"],matchScore:2,suggestion:true},"shop/bed/Mattress Warehouse":{name:"Mattress Warehouse",icon:"maki-lodging",imageURL:"https://graph.facebook.com/mattresswhse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61995079",shop:"bed"},addTags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Country":{name:"Sleep Country",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepCountryCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539684",shop:"bed"},addTags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"},countryCodes:["ca"],terms:["Sleep Country Canada"],matchScore:2,suggestion:true},"shop/bed/Sleep Experts":{name:"Sleep Experts",icon:"maki-lodging",imageURL:"https://graph.facebook.com/sleepexperts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7539688",shop:"bed"},addTags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/bed/Sleep Number":{name:"Sleep Number",icon:"maki-lodging",imageURL:"https://graph.facebook.com/SleepNumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7447640",shop:"bed"},addTags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Dursty":{name:"Dursty",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDursty%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1267518",shop:"beverages"},addTags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Edeka Getränkemarkt":{name:"Edeka Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57450576",shop:"beverages"},addTags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Fristo":{name:"Fristo",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/848769365134665/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1465151",shop:"beverages"},addTags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"},countryCodes:["at","de"],terms:["fristo getränkemarkt"],matchScore:2,suggestion:true},"shop/beverages/Getränke Hoffmann":{name:"Getränke Hoffmann",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/getraenkehoffmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19284021",shop:"beverages"},addTags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Getränkeland":{name:"Getränkeland",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/Getraenkeland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62594849",shop:"beverages"},addTags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Hol'ab":{name:"Hol'ab",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20hol%20ab.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q57557270",shop:"beverages"},addTags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Orterer Getränkemarkt":{name:"Orterer Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q23787118",shop:"beverages"},addTags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Rewe Getränkemarkt":{name:"Rewe Getränkemarkt",icon:"temaki-bottles",geometry:["point","area"],tags:{"brand:wikidata":"Q57519344",shop:"beverages"},addTags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/Trinkgut":{name:"Trinkgut",icon:"temaki-bottles",imageURL:"https://pbs.twimg.com/profile_images/339373337/twitter_icon_trinkgut_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q2453627",shop:"beverages"},addTags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/beverages/清心福全":{name:"清心福全",icon:"temaki-bottles",imageURL:"https://graph.facebook.com/chingshin1987/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10391229",shop:"beverages"},addTags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/bicycle/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:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1034363254758359041/dxetDfNN_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4897425",shop:"bookmaker"},addTags:{brand:"Betfred","brand:wikidata":"Q4897425","brand:wikipedia":"en:Betfred",name:"Betfred",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Coral":{name:"Coral",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1000461740772134913/T9-zMXmF_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q54621344",shop:"bookmaker"},addTags:{brand:"Coral","brand:wikidata":"Q54621344","brand:wikipedia":"en:Coral (bookmaker)",name:"Coral",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Fortuna":{name:"Fortuna",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/703606549739592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25857973",shop:"bookmaker"},addTags:{brand:"Fortuna","brand:wikidata":"Q25857973","brand:wikipedia":"en:Fortuna Entertainment Group",name:"Fortuna",shop:"bookmaker"},countryCodes:["cz","hr","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Ladbrokes":{name:"Ladbrokes",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1148531433947967488/3zGk1STM_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1799875",shop:"bookmaker"},addTags:{brand:"Ladbrokes","brand:wikidata":"Q1799875","brand:wikipedia":"en:Ladbrokes Coral",name:"Ladbrokes",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Paddy Power":{name:"Paddy Power",icon:"temaki-money_hand",imageURL:"https://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:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FTipico%20Unternehmenslogo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15851003",shop:"bookmaker"},addTags:{brand:"Tipico","brand:wikidata":"Q15851003","brand:wikipedia":"en:Tipico",name:"Tipico",shop:"bookmaker"},countryCodes:["at","co","de","gi","hr","mt"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/William Hill":{name:"William Hill",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/797028677733253120/bW9oFXT-_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4053147",shop:"bookmaker"},addTags:{brand:"William Hill","brand:wikidata":"Q4053147","brand:wikipedia":"en:William Hill (bookmaker)",name:"William Hill",shop:"bookmaker"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/ΟΠΑΠ":{name:"ΟΠΑΠ",icon:"temaki-money_hand",imageURL:"https://pbs.twimg.com/profile_images/1024247841135452160/UlceXxkv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2007823",shop:"bookmaker"},addTags:{brand:"ΟΠΑΠ","brand:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Лига ставок":{name:"Лига ставок",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/ligastavok05/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6545804",shop:"bookmaker"},addTags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/bookmaker/Фонбет":{name:"Фонбет",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/fonbetrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q49137910",shop:"bookmaker"},addTags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Akademibokhandeln":{name:"Akademibokhandeln",icon:"fas-book",imageURL:"https://graph.facebook.com/Akademibokhandeln/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403918",shop:"books"},addTags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/books/Akateeminen Kirjakauppa":{name:"Akateeminen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/AkateeminenCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10403942",shop:"books"},addTags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/Barnes & Noble":{name:"Barnes & Noble",icon:"fas-book",imageURL:"https://graph.facebook.com/barnesandnoble/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q795454",shop:"books"},addTags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bertrand":{name:"Bertrand",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q1866547",shop:"books"},addTags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Books-A-Million":{name:"Books-A-Million",icon:"fas-book",imageURL:"https://graph.facebook.com/booksamillion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943266",shop:"books"},addTags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Bruna":{name:"Bruna",icon:"fas-book",imageURL:"https://graph.facebook.com/Brunawinkels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317555",shop:"books"},addTags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Chapters":{name:"Chapters",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FChapters%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5073540",shop:"books"},addTags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Coles":{name:"Coles",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FColes%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5144641",shop:"books"},addTags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/books/Cultura":{name:"Cultura",icon:"fas-book",imageURL:"https://graph.facebook.com/culturafr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007154",shop:"books"},addTags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/books/Empik":{name:"Empik",icon:"fas-book",imageURL:"https://graph.facebook.com/empikcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3045978",shop:"books"},addTags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/books/Fnac":{name:"Fnac",icon:"fas-book",imageURL:"https://graph.facebook.com/Fnac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q676585",shop:"books"},addTags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"},countryCodes:["be","ch","es","fr","nl","pt"],terms:[],matchScore:2,suggestion:true},"shop/books/Gramedia":{name:"Gramedia",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q19646130",shop:"books"},addTags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/books/Half Price Books":{name:"Half Price Books",icon:"fas-book",imageURL:"https://graph.facebook.com/halfpricebooks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5641744",shop:"books"},addTags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Hugendubel":{name:"Hugendubel",icon:"fas-book",imageURL:"https://graph.facebook.com/hugendubelbuchhandlungen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1634142",shop:"books"},addTags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Indigo":{name:"Indigo",icon:"fas-book",imageURL:"https://graph.facebook.com/ChaptersIndigo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2477358",shop:"books"},addTags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/books/Libro":{name:"Libro",icon:"fas-book",imageURL:"https://graph.facebook.com/libro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1823138",shop:"books"},addTags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/books/Mondadori":{name:"Mondadori",icon:"fas-book",imageURL:"https://graph.facebook.com/GruppoMondadori/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85355",shop:"books"},addTags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/books/National Book Store":{name:"National Book Store",icon:"fas-book",imageURL:"https://graph.facebook.com/nbsalert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6971094",shop:"books"},addTags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/books/Osiander":{name:"Osiander",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q1800686",shop:"books"},addTags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Oxfam Bookshop":{name:"Oxfam Bookshop",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q7115196",shop:"books"},addTags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",shop:"books"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/books/Seagull Book":{name:"Seagull Book",icon:"fas-book",imageURL:"https://graph.facebook.com/SeagullBookCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7440458",shop:"books"},addTags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/books/Standaard Boekhandel":{name:"Standaard Boekhandel",icon:"fas-book",imageURL:"https://graph.facebook.com/standaardboekhandel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3496554",shop:"books"},addTags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/books/Suomalainen Kirjakauppa":{name:"Suomalainen Kirjakauppa",icon:"fas-book",imageURL:"https://graph.facebook.com/suomalainencom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7641808",shop:"books"},addTags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/books/TSUTAYA":{name:"TSUTAYA",icon:"fas-book",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"books"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/Thalia":{name:"Thalia",icon:"fas-book",imageURL:"https://graph.facebook.com/thalia.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2408854",shop:"books"},addTags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/books/The Works":{name:"The Works",icon:"fas-book",imageURL:"https://graph.facebook.com/TheWorksStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7775853",shop:"books"},addTags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/books/Waterstones":{name:"Waterstones",icon:"fas-book",imageURL:"https://graph.facebook.com/waterstones/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q151779",shop:"books"},addTags:{brand:"Waterstones","brand:wikidata":"Q151779","brand:wikipedia":"en:Waterstones",name:"Waterstones",shop:"books"},countryCodes:["be","gb","ie","je","nl"],terms:[],matchScore:2,suggestion:true},"shop/books/Weltbild":{name:"Weltbild",icon:"fas-book",imageURL:"https://graph.facebook.com/weltbild/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q883522",shop:"books"},addTags:{brand:"Weltbild","brand:wikidata":"Q883522","brand:wikipedia":"en:Weltbild Publishing Group",name:"Weltbild",shop:"books"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/books/Буквоед":{name:"Буквоед",icon:"fas-book",imageURL:"https://graph.facebook.com/SuperBookvoed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4098549",shop:"books"},addTags:{brand:"Буквоед","brand:wikidata":"Q4098549","brand:wikipedia":"ru:Буквоед",name:"Буквоед",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Дом книги":{name:"Дом книги",icon:"fas-book",imageURL:"https://graph.facebook.com/spbdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48950742",shop:"books"},addTags:{brand:"Дом книги","brand:wikidata":"Q48950742","brand:wikipedia":"ru:Московский дом книги",name:"Дом книги",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/Читай-город":{name:"Читай-город",icon:"fas-book",imageURL:"https://graph.facebook.com/chitaigorod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4516645",shop:"books"},addTags:{brand:"Читай-город","brand:wikidata":"Q4516645","brand:wikipedia":"ru:Читай-город",name:"Читай-город",shop:"books"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/books/סטימצקי":{name:"סטימצקי",icon:"fas-book",imageURL:"https://graph.facebook.com/SteimatzkyMadaf.HaSfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2903995",shop:"books"},addTags:{brand:"סטימצקי","brand:en":"Steimatzky","brand:he":"סטימצקי","brand:wikidata":"Q2903995","brand:wikipedia":"he:סטימצקי",name:"סטימצקי","name:en":"Steimatzky","name:he":"סטימצקי",shop:"books"},countryCodes:["il"],terms:[],matchScore:2,suggestion:true},"shop/books/צומת ספרים":{name:"צומת ספרים",icon:"fas-book",imageURL:"https://graph.facebook.com/tzometsfarim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6743833",shop:"books"},addTags:{brand:"צומת ספרים","brand:en":"Tzomet Sfarim","brand:he":"צומת ספרים","brand:wikidata":"Q6743833","brand:wikipedia":"he:צומת ספרים",name:"צומת ספרים","name:en":"Tzomet Sfarm","name:he":"צומת ספרים",shop:"books"},countryCodes:["il"],terms:["Zomet Sfarim"],matchScore:2,suggestion:true},"shop/books/あおい書店":{name:"あおい書店",icon:"fas-book",imageURL:"https://graph.facebook.com/aoi.bookstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11256783",shop:"books"},addTags:{brand:"あおい書店","brand:en":"AOI","brand:ja":"あおい書店","brand:wikidata":"Q11256783","brand:wikipedia":"ja:あおい書店",name:"あおい書店","name:en":"AOI","name:ja":"あおい書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/オリオン書房":{name:"オリオン書房",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q11292597",shop:"books"},addTags:{brand:"オリオン書房","brand:en":"Books Onion","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Books Onion","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",geometry:["point","area"],tags:{"brand:wikidata":"Q8061680",shop:"books"},addTags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/未来屋書店":{name:"未来屋書店",icon:"fas-book",imageURL:"https://graph.facebook.com/miraiyashoten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11519563",shop:"books"},addTags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/butcher/Coqivoire":{name:"Coqivoire",icon:"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/Automat":{name:"Automat",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/automatnl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70623238",shop:"car_parts"},addTags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/Carquest":{name:"Carquest",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/Carquestautoparts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045948",shop:"car_parts"},addTags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/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",geometry:["point","area"],tags:{"brand:wikidata":"Q11309404",shop:"car_parts"},addTags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_parts/タイヤ館":{name:"タイヤ館",icon:"fas-car-battery",imageURL:"https://graph.facebook.com/1627235540828842/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11315808",shop:"car_parts"},addTags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/A.T.U":{name:"A.T.U",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q784721",shop:"car_repair"},addTags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"},countryCodes:["at","de"],terms:["auto-teile-unger"],matchScore:2,suggestion:true},"shop/car_repair/AAMCO":{name:"AAMCO",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/AAMCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4649902",shop:"car_repair"},addTags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"},countryCodes:["ca","us"],terms:["aamco transmissions","aamco transmissions and total car care"],matchScore:2,suggestion:true},"shop/car_repair/ATS Euromaster":{name:"ATS Euromaster",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/ATSEUROMASTER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4654920",shop:"car_repair"},addTags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Avatacar":{name:"Avatacar",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Avatacar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65156251",shop:"car_repair"},addTags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/BestDrive":{name:"BestDrive",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BestDriveFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63057183",shop:"car_repair"},addTags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"},countryCodes:["cz","fr","sk"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Bosch Car Service":{name:"Bosch Car Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/BoschGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q234021",shop:"car_repair"},addTags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"},terms:["bosch service"],matchScore:2,suggestion:true},"shop/car_repair/Brakes Plus":{name:"Brakes Plus",icon:"maki-car-repair",imageURL:"https://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","monro muffler"],matchScore:2,suggestion:true},"shop/car_repair/Mr. Lube":{name:"Mr. Lube",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/MrLubeCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17104067",shop:"car_repair"},addTags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/National Tire and Battery":{name:"National Tire and Battery",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/nationaltireandbattery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6978944",shop:"car_repair"},addTags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Norauto":{name:"Norauto",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/norautoitalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317698",shop:"car_repair"},addTags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"},countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Pep Boys":{name:"Pep Boys",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/pepboysauto/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3375007",shop:"car_repair"},addTags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Peugeot":{name:"Peugeot",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Peugeot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6742",shop:"car_repair"},addTags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Point S":{name:"Point S",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/points.france/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3393358",shop:"car_repair"},addTags:{brand:"Point S","brand:wikidata":"Q3393358","brand:wikipedia":"fr:Point S",name:"Point S",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Renault":{name:"Renault",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Renault/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6686",shop:"car_repair"},addTags:{brand:"Renault","brand:wikidata":"Q6686","brand:wikipedia":"en:Renault",name:"Renault",shop:"car_repair"},terms:["garage renault"],matchScore:2,suggestion:true},"shop/car_repair/Roady":{name:"Roady",icon:"maki-car-repair",geometry:["point","area"],tags:{"brand:wikidata":"Q3434112",shop:"car_repair"},addTags:{brand:"Roady","brand:wikidata":"Q3434112","brand:wikipedia":"en:Roady (Mousquetaires)",name:"Roady",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Safelite AutoGlass":{name:"Safelite AutoGlass",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/safelite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28797369",shop:"car_repair"},addTags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"},countryCodes:["us"],terms:["safelight auto glass"],matchScore:2,suggestion:true},"shop/car_repair/Sears Auto Center":{name:"Sears Auto Center",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"car_repair"},addTags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy":{name:"Speedy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/vadoncchezSpeedy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3492969",shop:"car_repair"},addTags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Speedy Auto Service":{name:"Speedy Auto Service",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/SpeedyAutoServiceCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22318193",shop:"car_repair"},addTags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/Toyota":{name:"Toyota",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/toyota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q53268",shop:"car_repair"},addTags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"},terms:[],matchScore:2,suggestion:true},"shop/car_repair/Tuffy":{name:"Tuffy",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/Tuffy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17125314",shop:"car_repair"},addTags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"},countryCodes:["us"],terms:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],matchScore:2,suggestion:true},"shop/car_repair/Valvoline":{name:"Valvoline",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/viocofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7912852",shop:"car_repair"},addTags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/ÖAMTC":{name:"ÖAMTC",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/OEAMTC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q306057",shop:"car_repair"},addTags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/car_repair/カーコンビニ倶楽部":{name:"カーコンビニ倶楽部",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/carcon.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11295590",shop:"car_repair"},addTags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/car/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/1178664507444514821/vCM99C_1_bigger.jpg",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:"fas-tape",imageURL:"https://graph.facebook.com/carpetright/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5045782",shop:"carpet"},addTags:{brand:"Carpetright","brand:wikidata":"Q5045782","brand:wikipedia":"en:Carpetright",name:"Carpetright",shop:"carpet"},countryCodes:["be","gb","ie","nl"],terms:[],matchScore:2,suggestion:true},"shop/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/Kirkens Korshær Genbrug":{name:"Kirkens Korshær Genbrug",icon:"maki-shop",imageURL:"https://graph.facebook.com/vierkirkenskorshaer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12321915",shop:"charity"},addTags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/charity/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",imageURL:"https://graph.facebook.com/186921794657204/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66581837",shop:"charity"},addTags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"},countryCodes:["us"],terms:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchScore:2,suggestion:true},"shop/charity/Scope":{name:"Scope",icon:"maki-shop",imageURL:"https://graph.facebook.com/Scope/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7434435",shop:"charity"},addTags:{brand:"Scope","brand:wikidata":"Q7434435","brand:wikipedia":"en:Scope (charity)",name:"Scope",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/Sue Ryder":{name:"Sue Ryder",icon:"maki-shop",imageURL:"https://graph.facebook.com/SueRyderNational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7634271",shop:"charity"},addTags:{brand:"Sue Ryder","brand:wikidata":"Q7634271","brand:wikipedia":"en:Sue Ryder (charity)",name:"Sue Ryder",shop:"charity"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Children's Society":{name:"The Children's Society",icon:"maki-shop",imageURL:"https://graph.facebook.com/childrenssociety/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7722484",shop:"charity"},addTags:{brand:"The Children's Society","brand:wikidata":"Q7722484","brand:wikipedia":"en:The Children's Society",name:"The Children's Society",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/The Salvation Army":{name:"The Salvation Army",icon:"maki-shop",imageURL:"https://graph.facebook.com/SalvationArmyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q188307",shop:"charity"},addTags:{brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army",shop:"charity"},countryCodes:["au","ca","gb","us"],terms:["salvation army"],matchScore:2,suggestion:true},"shop/chemist/101 Drogerie":{name:"101 Drogerie",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/101drogerie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67197464",shop:"chemist"},addTags:{brand:"101 Drogerie","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Acqua & Sapone":{name:"Acqua & Sapone",icon:"fas-shopping-basket",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/Longs Drugs (Hawaii)":{name:"Longs Drugs (Hawaii)",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLongs%20Drugs%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16931196",shop:"chemist"},addTags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Matas":{name:"Matas",icon:"fas-shopping-basket",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:["Savers Drugstores"],matchScore:2,suggestion:true},"shop/chemist/Superdrug":{name:"Superdrug",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Superdrug/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7643261",shop:"chemist"},addTags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Teta":{name:"Teta",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q20860823",shop:"chemist"},addTags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Trekpleister":{name:"Trekpleister",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1178944394176675840/_cHjxVWY_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2551576",shop:"chemist"},addTags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/chemist/Walgreens":{name:"Walgreens",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/walgreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1591889",shop:"chemist"},addTags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"},countryCodes:["us"],terms:["walgreens pharmacy"],matchScore:2,suggestion:true},"shop/chemist/Watsons":{name:"Watsons",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"},terms:[],matchScore:2,suggestion:true},"shop/chemist/dm":{name:"dm",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/dm.Deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q266572",shop:"chemist"},addTags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"},countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],terms:["dm drogerie markt"],matchScore:2,suggestion:true},"shop/chemist/屈臣氏":{name:"屈臣氏",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/WatsonsPH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7974785",shop:"chemist"},addTags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"},countryCodes:["cn","hk","tw"],terms:[],matchScore:2,suggestion:true},"shop/chemist/康是美":{name:"康是美",icon:"fas-shopping-basket",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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:"temaki-chocolate",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/Altar'd State":{name:"Altar'd State",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/altardstate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022008",shop:"clothes"},addTags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/American Eagle Outfitters":{name:"American Eagle Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/americaneagle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2842931",shop:"clothes"},addTags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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/1176166535934676992/gv9_1Kqh_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/Bonmarché":{name:"Bonmarché",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/795923583298052096/iTrg7qfG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4942146",shop:"clothes"},addTags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobo":{name:"Bonobo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonoboplanet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63682093",shop:"clothes"},addTags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bonobos":{name:"Bonobos",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/bonobos/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4942546",shop:"clothes"},addTags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Bootlegger":{name:"Bootlegger",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BootleggerJeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947984",shop:"clothes"},addTags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/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/City Gear":{name:"City Gear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/citygear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16958629",shop:"clothes"},addTags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Cleo":{name:"Cleo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/cleo.cafashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947963",shop:"clothes"},addTags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Club Monaco":{name:"Club Monaco",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/clubmonaco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2979949",shop:"clothes"},addTags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Colin's":{name:"Colin's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ColinsLook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28729658",shop:"clothes"},addTags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/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",geometry:["point","area"],tags:{"brand:wikidata":"Q65090033",shop:"clothes"},addTags:{brand:"Dress Barn","brand:wikidata":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Dressmann":{name:"Dressmann",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/dressmann.no/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3357081",shop:"clothes"},addTags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"},countryCodes:["at","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Dynamite":{name:"Dynamite",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3117385",shop:"clothes"},addTags:{brand:"Dynamite","brand:wikidata":"Q3117385","brand:wikipedia":"en:Groupe Dynamite",clothes:"women",name:"Dynamite",shop:"clothes"},countryCodes:["ca","jo","ku","sa","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Eddie Bauer":{name:"Eddie Bauer",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/EddieBauer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q842174",shop:"clothes"},addTags:{brand:"Eddie Bauer","brand:wikidata":"Q842174","brand:wikipedia":"en:Eddie Bauer",name:"Eddie Bauer",shop:"clothes"},countryCodes:["ca","jp","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Edinburgh Woollen Mill":{name:"Edinburgh Woollen Mill",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/edinburghwoollenmill/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16834657",shop:"clothes"},addTags:{brand:"Edinburgh Woollen Mill","brand:wikidata":"Q16834657","brand:wikipedia":"en:Edinburgh Woollen Mill",name:"Edinburgh Woollen Mill",shop:"clothes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Engbers":{name:"Engbers",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/engbers.maennermode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1290088",shop:"clothes"},addTags:{brand:"Engbers","brand:wikidata":"Q1290088","brand:wikipedia":"de:Engbers",name:"Engbers",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ermenegildo Zegna":{name:"Ermenegildo Zegna",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ZegnaOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1355904",shop:"clothes"},addTags:{brand:"Ermenegildo Zegna","brand:wikidata":"Q1355904","brand:wikipedia":"en:Ermenegildo Zegna",clothes:"men",name:"Ermenegildo Zegna",shop:"clothes",short_name:"Zegna"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ernsting's family":{name:"Ernsting's family",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Ernstingsfamily/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361016",shop:"clothes"},addTags:{brand:"Ernsting's family","brand:wikidata":"Q1361016","brand:wikipedia":"de:Ernsting’s family",name:"Ernsting's family",shop:"clothes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Esprit":{name:"Esprit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/esprit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q532746",shop:"clothes"},addTags:{brand:"Esprit","brand:wikidata":"Q532746","brand:wikipedia":"en:Esprit Holdings",name:"Esprit",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Etam":{name:"Etam",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/etam/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3059202",shop:"clothes"},addTags:{brand:"Etam","brand:wikidata":"Q3059202","brand:wikipedia":"en:Etam Développement",name:"Etam",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/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/Joe Fresh":{name:"Joe Fresh",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/joefresh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6209926",shop:"clothes"},addTags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Joules":{name:"Joules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Joules/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25351738",shop:"clothes"},addTags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Jules":{name:"Jules",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Julescom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3188386",shop:"clothes"},addTags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"},countryCodes:["be","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Justice":{name:"Justice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Justice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7857512",shop:"clothes"},addTags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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/MO":{name:"MO",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q51882883",shop:"clothes"},addTags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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/Mandee":{name:"Mandee",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmandee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71035705",shop:"clothes"},addTags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mango":{name:"Mango",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mango.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136503",shop:"clothes"},addTags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Marc O'Polo":{name:"Marc O'Polo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marcopoloru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1892752",shop:"clothes"},addTags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"},countryCodes:["at","be","ch","de","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Marimekko":{name:"Marimekko",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/marimekkodesignhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q534903",shop:"clothes"},addTags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Mark's":{name:"Mark's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MarksClothing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6766373",shop:"clothes"},addTags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Massimo Dutti":{name:"Massimo Dutti",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MassimoDuttiOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q788231",shop:"clothes"},addTags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Matalan":{name:"Matalan",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/shopmatalan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12061509",shop:"clothes"},addTags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"},countryCodes:["ae","gb"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Maurices":{name:"Maurices",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maurices/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6793571",shop:"clothes"},addTags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"},countryCodes:["ca","fr","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Max Mara":{name:"Max Mara",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/maxmara/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1151774",shop:"clothes"},addTags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Melanie Lyne":{name:"Melanie Lyne",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q64861470",shop:"clothes"},addTags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Men's Wearhouse":{name:"Men's Wearhouse",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MensWearhouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57405513",shop:"clothes"},addTags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"},countryCodes:["us"],terms:["mens warehouse"],matchScore:2,suggestion:true},"shop/clothes/Mexx":{name:"Mexx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Mexx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1837290",shop:"clothes"},addTags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Michael Kors":{name:"Michael Kors",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MichaelKors/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19572998",shop:"clothes"},addTags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Miss Selfridge":{name:"Miss Selfridge",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1026773289803362304/YPSj70HL_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6877374",shop:"clothes"},addTags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Monsoon":{name:"Monsoon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/MonsoonUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65007501",shop:"clothes"},addTags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"},countryCodes:["gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Moores":{name:"Moores",icon:"maki-clothing-store",imageURL:"https://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/Mustang":{name:"Mustang",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/mustangjeans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q221562",shop:"clothes"},addTags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/NKD":{name:"NKD",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nkd.friends/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q927272",shop:"clothes"},addTags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"},countryCodes:["at","de","it","si"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Naf Naf":{name:"Naf Naf",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/nafnaf.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3334188",shop:"clothes"},addTags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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://graph.facebook.com/PEPCOpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11815580",shop:"clothes"},addTags:{brand:"Pepco","brand:wikidata":"Q11815580","brand:wikipedia":"pl:Pepco",name:"Pepco",shop:"clothes"},countryCodes:["cz","hu","pl","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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/Prada":{name:"Prada",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Prada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q193136",shop:"clothes"},addTags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Primark":{name:"Primark",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Primark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q137023",shop:"clothes"},addTags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Promod":{name:"Promod",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Promod/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3407429",shop:"clothes"},addTags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Pull & Bear":{name:"Pull & Bear",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/pullandbear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q691029",shop:"clothes"},addTags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Puma":{name:"Puma",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/PUMA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q157064",shop:"clothes"},addTags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Quiksilver":{name:"Quiksilver",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/380439480/quiksilver_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1329463",shop:"clothes"},addTags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"},terms:["quicksilver"],matchScore:2,suggestion:true},"shop/clothes/RW&CO.":{name:"RW&CO.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RWandCO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65965663",shop:"clothes"},addTags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Rainbow":{name:"Rainbow",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/RainbowApparel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7284708",shop:"clothes"},addTags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reebok":{name:"Reebok",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ReebokUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q466183",shop:"clothes"},addTags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reiss":{name:"Reiss",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/778920332069572608/gg6l4cf5_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7310479",shop:"clothes"},addTags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Reitmans":{name:"Reitmans",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/reitmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7310506",shop:"clothes"},addTags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Reserved":{name:"Reserved",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Reserved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21809354",shop:"clothes"},addTags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Ricki's":{name:"Ricki's",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Rickis.Sizes0to18/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65947929",shop:"clothes"},addTags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/River Island":{name:"River Island",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/riverisland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2670328",shop:"clothes"},addTags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"},countryCodes:["gb","ie","im","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Robert Graham":{name:"Robert Graham",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/robertgrahamnyc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18390679",shop:"clothes"},addTags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Roots":{name:"Roots",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/roots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366633",shop:"clothes"},addTags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Saint Laurent":{name:"Saint Laurent",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ysl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2282172",shop:"clothes"},addTags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"},terms:[],matchScore:2,suggestion:true},"shop/clothes/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/Soma":{name:"Soma",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSoma%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q69882213",shop:"clothes"},addTags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Spanx":{name:"Spanx",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/SPANX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1932886",shop:"clothes"},addTags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Springfield":{name:"Springfield",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Springfield/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q958209",shop:"clothes"},addTags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Stefanel":{name:"Stefanel",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Stefanel.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2338087",shop:"clothes"},addTags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"},countryCodes:["at","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Stitches":{name:"Stitches",icon:"maki-clothing-store",imageURL:"https://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/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/Topman":{name:"Topman",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/977215180160557057/ybqgMKVX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1090880",shop:"clothes"},addTags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Topshop":{name:"Topshop",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/227518370711659/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1893576",shop:"clothes"},addTags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Torrid":{name:"Torrid",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/Torrid/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7827120",shop:"clothes"},addTags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Tory Burch":{name:"Tory Burch",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/toryburch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19988222",shop:"clothes"},addTags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Triumph":{name:"Triumph",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TriumphInternationalUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q671216",shop:"clothes"},addTags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Truworths":{name:"Truworths",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/TruworthsFashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24233998",shop:"clothes"},addTags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"},countryCodes:["za"],terms:[],matchScore:2,suggestion:true},"shop/clothes/UNTUCKit":{name:"UNTUCKit",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UNTUCKit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28207006",shop:"clothes"},addTags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/USC":{name:"USC",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uscfashion/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7866331",shop:"clothes"},addTags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Ulla Popken":{name:"Ulla Popken",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/ulla.popken/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2475146",shop:"clothes"},addTags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"},countryCodes:["at","be","ch","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Under Armour":{name:"Under Armour",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/UnderArmour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2031485",shop:"clothes"},addTags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"},terms:["under armor"],matchScore:2,suggestion:true},"shop/clothes/Uniqlo":{name:"Uniqlo",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/uniqlo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26070",shop:"clothes"},addTags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/United Colors of Benetton":{name:"United Colors of Benetton",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BenettonUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q817139",shop:"clothes"},addTags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Urban Outfitters":{name:"Urban Outfitters",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/urbanoutfitters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3552193",shop:"clothes"},addTags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/V.I.M.":{name:"V.I.M.",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/VIM.STORES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71042495",shop:"clothes"},addTags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/clothes/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:"temaki-coffee",imageURL:"https://graph.facebook.com/nespresso/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301301",shop:"coffee"},addTags:{brand:"Nespresso","brand:wikidata":"Q301301","brand:wikipedia":"en:Nespresso",name:"Nespresso",shop:"coffee"},terms:[],matchScore:2,suggestion:true},"shop/coffee/Tchibo":{name:"Tchibo",icon:"temaki-coffee",imageURL:"https://graph.facebook.com/tchibo.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q564213",shop:"coffee"},addTags:{brand:"Tchibo","brand:wikidata":"Q564213","brand:wikipedia":"de:Tchibo",name:"Tchibo",shop:"coffee"},countryCodes:["at","ch","cz","de","pl","sk"],terms:[],matchScore:2,suggestion:true},"shop/computer/DNS":{name:"DNS",icon:"fas-laptop",imageURL:"https://graph.facebook.com/dnsshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4036922",shop:"computer"},addTags:{alt_name:"ДНС",brand:"DNS","brand:en":"DNS","brand:ru":"ДНС","brand:wikidata":"Q4036922","brand:wikipedia":"ru:DNS (компания)",name:"DNS","name:en":"DNS","name:ru":"ДНС",shop:"computer"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/computer/PC 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/computer/PCデポ":{name:"PCデポ",icon:"fas-laptop",geometry:["point","area"],tags:{"brand:wikidata":"Q11331723",shop:"computer"},addTags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"},countryCodes:["jp"],terms:["PC DEPOT","ピーシーデポ"],matchScore:2,suggestion:true},"shop/confectionery/Adyar Ananda Bhavan":{name:"Adyar Ananda Bhavan",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/a2b.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15178238",shop:"confectionery"},addTags:{brand:"Adyar Ananda Bhavan","brand:wikidata":"Q15178238","brand:wikipedia":"en:Adyar Ananda Bhavan",name:"Adyar Ananda Bhavan",shop:"confectionery"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hemmakvall":{name:"Hemmakvall",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/hemmakvall/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10521791",shop:"confectionery"},addTags:{brand:"Hemmakväll","brand:wikidata":"Q10521791","brand:wikipedia":"sv:Hemmakväll",name:"Hemmakväll",shop:"confectionery"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hotel Chocolat":{name:"Hotel Chocolat",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HotelChocolat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5911369",shop:"confectionery"},addTags:{brand:"Hotel Chocolat","brand:wikidata":"Q5911369","brand:wikipedia":"en:Hotel Chocolat",name:"Hotel Chocolat",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Hussel":{name:"Hussel",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/HusselConfiserie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17123688",shop:"confectionery"},addTags:{brand:"Hussel","brand:wikidata":"Q17123688","brand:wikipedia":"de:Hussel",name:"Hussel",shop:"confectionery"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Jamin":{name:"Jamin",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/jaminonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2291848",shop:"confectionery"},addTags:{brand:"Jamin","brand:wikidata":"Q2291848","brand:wikipedia":"nl:Jamin",name:"Jamin",shop:"confectionery"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Kilwins":{name:"Kilwins",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/KilwinsChocolatesFudgeandIceCream/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q38250832",shop:"confectionery"},addTags:{brand:"Kilwins","brand:wikidata":"Q38250832","brand:wikipedia":"en:Kilwins",cuisine:"chocolate;ice_cream;popcorn",name:"Kilwins",shop:"confectionery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Rocky Mountain Chocolate Factory":{name:"Rocky Mountain Chocolate Factory",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/myrmcf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7355878",shop:"confectionery"},addTags:{brand:"Rocky Mountain Chocolate Factory","brand:wikidata":"Q7355878","brand:wikipedia":"en:Rocky Mountain Chocolate Factory",name:"Rocky Mountain Chocolate Factory",shop:"confectionery"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/See's Candies":{name:"See's Candies",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Sees.Candies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2103510",shop:"confectionery"},addTags:{brand:"See's Candies","brand:wikidata":"Q2103510","brand:wikipedia":"en:See's Candies",name:"See's Candies",shop:"confectionery"},countryCodes:["us"],terms:["sees candy"],matchScore:2,suggestion:true},"shop/confectionery/Thorntons":{name:"Thorntons",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Thorntons.Official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q683102",shop:"confectionery"},addTags:{brand:"Thorntons","brand:wikidata":"Q683102","brand:wikipedia":"en:Thorntons",name:"Thorntons",shop:"confectionery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/Вацак":{name:"Вацак",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/Vatsak.KD/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966576",shop:"confectionery"},addTags:{brand:"Вацак","brand:wikidata":"Q30966576","brand:wikipedia":"uk:Кондитерський Дім «Вацак»",name:"Вацак",shop:"confectionery"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/シャトレーゼ":{name:"シャトレーゼ",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/chateraise.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11307696",shop:"confectionery"},addTags:{brand:"シャトレーゼ","brand:en":"Chateraise","brand:ja":"シャトレーゼ","brand:wikidata":"Q11307696","brand:wikipedia":"ja:シャトレーゼ",name:"シャトレーゼ","name:en":"Chateraise","name:ja":"シャトレーゼ",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/confectionery/不二家":{name:"不二家",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/FUJIYA.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858452",shop:"confectionery"},addTags:{brand:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/10-11":{name:"10-11",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65336720",shop:"convenience"},addTags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/convenience/1st Stop":{name:"1st Stop",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65706152",shop:"convenience"},addTags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"},countryCodes:["us"],terms:["first stop"],matchScore:2,suggestion:true},"shop/convenience/3COINS":{name:"3COINS",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q60997353",shop:"convenience"},addTags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"},countryCodes:["jp"],terms:["スリーコインズ"],matchScore:2,suggestion:true},"shop/convenience/7-Eleven":{name:"7-Eleven",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"},terms:["7-11","seven eleven"],matchScore:2,suggestion:true},"shop/convenience/759 Store":{name:"759 Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/759StoreHK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10846179",shop:"convenience"},addTags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/convenience/76":{name:"76",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/76gas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1658320",shop:"convenience"},addTags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/8 à Huit":{name:"8 à Huit",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"convenience"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/99 Speedmart":{name:"99 Speedmart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/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/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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"convenience"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/COOP Jednota":{name:"COOP Jednota",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"convenience"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/convenience/Carrefour Express":{name:"Carrefour Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/expresshoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940190",shop:"convenience"},addTags:{brand:"Carrefour Express","brand:wikidata":"Q2940190","brand:wikipedia":"fr:Carrefour Express",name:"Carrefour Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Casey's General Store":{name:"Casey's General Store",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/caseys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2940968",shop:"convenience"},addTags:{brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Centra":{name:"Centra",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CentraIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q747678",shop:"convenience"},addTags:{brand:"Centra","brand:wikidata":"Q747678","brand:wikipedia":"en:Centra",name:"Centra",shop:"convenience"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chata Polska":{name:"Chata Polska",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/chatapolskasklepy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994406",shop:"convenience"},addTags:{brand:"Chata Polska","brand:wikidata":"Q61994406",name:"Chata Polska",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cheers":{name:"Cheers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CheersSG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64154066",shop:"convenience"},addTags:{brand:"Cheers","brand:wikidata":"Q64154066",name:"Cheers",opening_hours:"24/7",shop:"convenience"},countryCodes:["sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Chevron":{name:"Chevron",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Chevron/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q319642",shop:"convenience"},addTags:{brand:"Chevron","brand:wikidata":"Q319642","brand:wikipedia":"en:Chevron Corporation",name:"Chevron",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Circle K":{name:"Circle K",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"Circle K",shop:"convenience"},terms:["ok","ok-mart"],matchScore:2,suggestion:true},"shop/convenience/Citgo":{name:"Citgo",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CITGOPetroleumCorporation/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974437",shop:"convenience"},addTags:{brand:"Citgo","brand:wikidata":"Q2974437","brand:wikipedia":"en:Citgo",name:"Citgo",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Clark's Pump-N-Shop":{name:"Clark's Pump-N-Shop",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/clarkspumpnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65118218",shop:"convenience"},addTags:{brand:"Clark's Pump-N-Shop","brand:wikidata":"Q65118218",name:"Clark's Pump-N-Shop",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Co-op (Canada)":{name:"Co-op (Canada)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoopCRS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5440676",shop:"convenience"},addTags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coles Express":{name:"Coles Express",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/ColesExpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5144653",shop:"convenience"},addTags:{brand:"Coles Express","brand:wikidata":"Q5144653","brand:wikipedia":"en:Coles Express",name:"Coles Express",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop Pronto":{name:"Coop Pronto",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/209094172456220/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129777",shop:"convenience"},addTags:{brand:"Coop Pronto","brand:wikidata":"Q1129777","brand:wikipedia":"de:Coop Mineraloel",name:"Coop Pronto",shop:"convenience"},countryCodes:["ch","li"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Coop (Schweiz)":{name:"Coop (Schweiz)",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/coop.ch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q432564",shop:"convenience"},addTags:{brand:"Coop","brand:wikidata":"Q432564","brand:wikipedia":"de:Coop (Schweiz)",name:"Coop",shop:"convenience"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Costcutter":{name:"Costcutter",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/costcutter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5175072",shop:"convenience"},addTags:{brand:"Costcutter","brand:wikidata":"Q5175072","brand:wikipedia":"en:Costcutter",name:"Costcutter",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Couche-Tard":{name:"Couche-Tard",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CoucheTardQc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2836957",shop:"convenience"},addTags:{brand:"Couche-Tard","brand:wikidata":"Q2836957","brand:wikipedia":"en:Alimentation Couche-Tard",name:"Couche-Tard",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Cruizers":{name:"Cruizers",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CruizersStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66134801",shop:"convenience"},addTags:{brand:"Cruizers","brand:wikidata":"Q66134801",name:"Cruizers",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Cumberland Farms":{name:"Cumberland Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CumberlandFarms/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143685",shop:"convenience"},addTags:{brand:"Cumberland Farms","brand:wikidata":"Q1143685","brand:wikipedia":"en:Cumberland Farms",name:"Cumberland Farms",shop:"convenience"},terms:[],matchScore:2,suggestion:true},"shop/convenience/Daisy Mart":{name:"Daisy Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/DaisyMart.Kamel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994934",shop:"convenience"},addTags:{brand:"Daisy Mart","brand:wikidata":"Q61994934",name:"Daisy Mart",shop:"convenience"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/convenience/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/M&S Simply Food":{name:"M&S Simply Food",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"convenience"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/convenience/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/MrMax":{name:"MrMax",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11342034",shop:"convenience"},addTags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"},countryCodes:["jp"],terms:["ミスターマックス"],matchScore:2,suggestion:true},"shop/convenience/Nasz Sklep":{name:"Nasz Sklep",icon:"fas-shopping-basket",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/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"OK便利店","brand:en":"Circle K","brand:wikidata":"Q3268010","brand:wikipedia":"zh:OK便利店",name:"OK便利店","name:en":"Circle K",shop:"convenience"},countryCodes:["cn","hk","mo"],terms:["ok便利商店","ok便利店 circle k"],matchScore:2,suggestion:true},"shop/convenience/OK超商":{name:"OK超商",icon:"fas-shopping-basket",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/Rewe To Go":{name:"Rewe To Go",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16968817",shop:"convenience"},addTags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Royal Farms":{name:"Royal Farms",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Royalfarmsstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7374169",shop:"convenience"},addTags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Rutter's":{name:"Rutter's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rutters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7383544",shop:"convenience"},addTags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sainsbury's Local":{name:"Sainsbury's Local",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/sainsburys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13218434",shop:"convenience"},addTags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Sale":{name:"Sale",icon:"fas-shopping-basket",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/Stewart's Shops":{name:"Stewart's Shops",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/YourStewarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7615690",shop:"convenience"},addTags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"},countryCodes:["us"],terms:["stewarts"],matchScore:2,suggestion:true},"shop/convenience/Stripes":{name:"Stripes",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/stripesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7624135",shop:"convenience"},addTags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"},countryCodes:["cl","us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/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","usmile 便利店","昆仑好"],matchScore:2,suggestion:true},"shop/convenience/Żabka":{name:"Żabka",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/zabkapolska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2589061",shop:"convenience"},addTags:{brand:"Żabka","brand:wikidata":"Q2589061","brand:wikipedia":"pl:Żabka (sieć sklepów)",name:"Żabka",shop:"convenience"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ВкусВилл":{name:"ВкусВилл",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/vkusvill.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57271676",shop:"convenience"},addTags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Гроздь":{name:"Гроздь",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"convenience"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Доброном":{name:"Доброном",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"convenience"},addTags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Евроопт Market":{name:"Евроопт Market",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455869",shop:"convenience"},addTags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"},countryCodes:["by"],terms:["Евроопт Маркет"],matchScore:2,suggestion:true},"shop/convenience/Евроопт Минимаркет":{name:"Евроопт Минимаркет",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q65455911",shop:"convenience"},addTags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копеечка":{name:"Копеечка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q68207105",shop:"convenience"},addTags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Копейка":{name:"Копейка",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q1783878",shop:"convenience"},addTags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Магнит":{name:"Магнит",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"convenience"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"},terms:["магнит у дома"],matchScore:2,suggestion:true},"shop/convenience/Мария-Ра":{name:"Мария-Ра",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"convenience"},addTags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Сильпо":{name:"Сильпо",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"convenience"},addTags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/convenience/アンスリー":{name:"アンスリー",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q17192555",shop:"convenience"},addTags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サンクス":{name:"サンクス",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSankus%20Glow%20(37605324924).jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q16141064",shop:"convenience"},addTags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/サークルK":{name:"サークルK",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/CircleKStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3268010",shop:"convenience"},addTags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/スリーエフ":{name:"スリーエフ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/875645560073539585/X1oFVQef_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11313419",shop:"convenience"},addTags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セイコーマート":{name:"セイコーマート",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1019751731402379264/OudcSFFt_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11314123",shop:"convenience"},addTags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/セブン-イレブン":{name:"セブン-イレブン",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/7ElevenMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q259340",shop:"convenience"},addTags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"},countryCodes:["jp"],terms:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],matchScore:2,suggestion:true},"shop/convenience/セーブオン":{name:"セーブオン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11314868",shop:"convenience"},addTags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/デイリーヤマザキ":{name:"デイリーヤマザキ",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q5209392",shop:"convenience"},addTags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ナチュラルローソン":{name:"ナチュラルローソン",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q11323850",shop:"convenience"},addTags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ファミリーマート":{name:"ファミリーマート",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/familymart.japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191685",shop:"convenience"},addTags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ポプラ":{name:"ポプラ",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/826586791058644992/chXkmxnQ_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7229380",shop:"convenience"},addTags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/convenience/ミニストップ":{name:"ミニストップ",icon:"fas-shopping-basket",imageURL:"https://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:"temaki-lipstick",imageURL:"https://graph.facebook.com/Aveda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4827965",shop:"cosmetics"},addTags:{brand:"Aveda","brand:wikidata":"Q4827965","brand:wikipedia":"en:Aveda",name:"Aveda",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Bath & Body Works":{name:"Bath & Body Works",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bathandbodyworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q810773",shop:"cosmetics"},addTags:{brand:"Bath & Body Works","brand:wikidata":"Q810773","brand:wikipedia":"en:Bath & Body Works",name:"Bath & Body Works",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/KIKO Milano":{name:"KIKO Milano",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KikoMilanoGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3812045",shop:"cosmetics"},addTags:{brand:"KIKO Milano","brand:wikidata":"Q3812045","brand:wikipedia":"it:KIKO",name:"KIKO Milano",shop:"cosmetics"},countryCodes:["be","fr","gb","nl"],terms:["kiko"],matchScore:2,suggestion:true},"shop/cosmetics/Kiehl's":{name:"Kiehl's",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/KiehlsUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3196447",shop:"cosmetics"},addTags:{brand:"Kiehl's","brand:wikidata":"Q3196447","brand:wikipedia":"en:Kiehl's",name:"Kiehl's",shop:"cosmetics"},countryCodes:["ca","us"],terms:["kiehl's since 1851"],matchScore:2,suggestion:true},"shop/cosmetics/L'Occitane":{name:"L'Occitane",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/loccitaneusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1880676",shop:"cosmetics"},addTags:{brand:"L'Occitane","brand:wikidata":"Q1880676","brand:wikipedia":"en:L'Occitane en Provence",name:"L'Occitane",shop:"cosmetics"},terms:["l'occitane en provence"],matchScore:2,suggestion:true},"shop/cosmetics/Lush":{name:"Lush",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/LUSHJAPAN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1585448",shop:"cosmetics"},addTags:{brand:"Lush","brand:wikidata":"Q1585448","brand:wikipedia":"en:Lush (company)",name:"Lush",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/MAC Cosmetics":{name:"MAC Cosmetics",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/MACcosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2624442",shop:"cosmetics"},addTags:{brand:"MAC Cosmetics","brand:wikidata":"Q2624442","brand:wikipedia":"en:MAC Cosmetics",name:"MAC Cosmetics",shop:"cosmetics",short_name:"M·A·C"},countryCodes:["ca","de","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nature Republic":{name:"Nature Republic",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/naturerepublic.kr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16935507",shop:"cosmetics"},addTags:{brand:"Nature Republic","brand:wikidata":"Q16935507","brand:wikipedia":"en:Nature Republic",name:"Nature Republic",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Nocibé":{name:"Nocibé",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/nocibe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342592",shop:"cosmetics"},addTags:{brand:"Nocibé","brand:wikidata":"Q3342592","brand:wikipedia":"fr:Nocibé",name:"Nocibé",shop:"cosmetics"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Origins":{name:"Origins",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/Origins/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6643229",shop:"cosmetics"},addTags:{brand:"Origins","brand:wikidata":"Q6643229","brand:wikipedia":"en:Origins (cosmetics)",name:"Origins",shop:"cosmetics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Rituals":{name:"Rituals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/RitualsCosmetics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62874140",shop:"cosmetics"},addTags:{brand:"Rituals","brand:wikidata":"Q62874140",name:"Rituals",shop:"cosmetics"},countryCodes:["be","ch","de","es","gb","nl","se","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Saje":{name:"Saje",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/SajeWellness/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q44631749",shop:"cosmetics"},addTags:{brand:"Saje","brand:wikidata":"Q44631749","brand:wikipedia":"en:Saje Natural Wellness",name:"Saje",shop:"cosmetics"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Sephora":{name:"Sephora",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/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:"temaki-lipstick",imageURL:"https://graph.facebook.com/TheBodyShopUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q837851",shop:"cosmetics"},addTags:{brand:"The Body Shop","brand:wikidata":"Q837851","brand:wikipedia":"en:The Body Shop",name:"The Body Shop",shop:"cosmetics"},terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Ulta Beauty":{name:"Ulta Beauty",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/UltaBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7880076",shop:"cosmetics"},addTags:{brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"Ulta Beauty",shop:"cosmetics"},countryCodes:["us"],terms:["ulta"],matchScore:2,suggestion:true},"shop/cosmetics/bareMinerals":{name:"bareMinerals",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/bareminerals/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66740659",shop:"cosmetics"},addTags:{brand:"bareMinerals","brand:wikidata":"Q66740659",name:"bareMinerals",shop:"cosmetics"},countryCodes:["au","ca","dk","gb","ie","us"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Л'Этуаль":{name:"Л'Этуаль",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/letoile.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18400706",shop:"cosmetics"},addTags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/cosmetics/Магнит Косметик":{name:"Магнит Косметик",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"cosmetics"},addTags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Atwoods":{name:"Atwoods",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Atwoods.Ranch.and.Home.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4818874",shop:"country_store"},addTags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Blain's Farm & Fleet":{name:"Blain's Farm & Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BlainsFarmandFleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4923906",shop:"country_store"},addTags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Bomgaars":{name:"Bomgaars",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/BomgaarsSupply.Corporate/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22059070",shop:"country_store"},addTags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Fleet Farm":{name:"Fleet Farm",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/fleetfarm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6859973",shop:"country_store"},addTags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"},countryCodes:["us"],terms:["mills fleet farm"],matchScore:2,suggestion:true},"shop/country_store/Grange Co-op":{name:"Grange Co-op",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/grangecoop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5595639",shop:"country_store"},addTags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Home of Economy":{name:"Home of Economy",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/Homeofeconomy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5889100",shop:"country_store"},addTags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Norbys Farm Fleet":{name:"Norbys Farm Fleet",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/norbysfarmfleet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7050461",shop:"country_store"},addTags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Orscheln Farm & Home":{name:"Orscheln Farm & Home",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/orschelnfarmandhome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22060331",shop:"country_store"},addTags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Peavey Mart":{name:"Peavey Mart",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/PeaveyMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7158483",shop:"country_store"},addTags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Rural King":{name:"Rural King",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/RuralKing/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7380525",shop:"country_store"},addTags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/TSC Stores":{name:"TSC Stores",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TSCStoresCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62720230",shop:"country_store"},addTags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Theisen's":{name:"Theisen's",icon:"fas-hat-cowboy-side",imageURL:"https://pbs.twimg.com/profile_images/743446346414227456/6V3KBxMe_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7777850",shop:"country_store"},addTags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/country_store/Tractor Supply Company":{name:"Tractor Supply Company",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/TractorSupplyCo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15109925",shop:"country_store"},addTags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"},countryCodes:["us"],terms:["tractor supply co"],matchScore:2,suggestion:true},"shop/country_store/Wynnstay":{name:"Wynnstay",icon:"fas-hat-cowboy-side",imageURL:"https://graph.facebook.com/WynnstayCountryStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63016351",shop:"country_store"},addTags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/craft/A.C. Moore":{name:"A.C. Moore",icon:"fas-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://graph.facebook.com/BeallsCorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876153",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bealls (Texas-based)":{name:"Bealls (Texas-based)",icon:"maki-shop",imageURL:"https://graph.facebook.com/Beallstx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4876156",shop:"department_store"},addTags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Belk":{name:"Belk",icon:"maki-shop",imageURL:"https://graph.facebook.com/Belk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q127428",shop:"department_store"},addTags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bi-Mart":{name:"Bi-Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/BiMart.Membership.Discount.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4902331",shop:"department_store"},addTags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big Lots":{name:"Big Lots",icon:"maki-shop",imageURL:"https://graph.facebook.com/biglots/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4905973",shop:"department_store"},addTags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Big W":{name:"Big W",icon:"maki-shop",imageURL:"https://graph.facebook.com/BIGWaustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906646",shop:"department_store"},addTags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Bloomingdale's":{name:"Bloomingdale's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Bloomingdales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283383",shop:"department_store"},addTags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boscov's":{name:"Boscov's",icon:"maki-shop",imageURL:"https://graph.facebook.com/boscovs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4947190",shop:"department_store"},addTags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Boyes":{name:"Boyes",icon:"maki-shop",imageURL:"https://graph.facebook.com/boyesstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958471",shop:"department_store"},addTags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (department chain)",name:"Boyes",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Canadian Tire":{name:"Canadian Tire",icon:"maki-shop",imageURL:"https://graph.facebook.com/Canadiantire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1032400",shop:"department_store"},addTags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Casas Bahia":{name:"Casas Bahia",icon:"maki-shop",imageURL:"https://graph.facebook.com/CasasBahia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048048",shop:"department_store"},addTags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Century 21":{name:"Century 21",icon:"maki-shop",imageURL:"https://graph.facebook.com/century21stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5063125",shop:"department_store"},addTags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"},countryCodes:["us"],terms:["c21"],matchScore:2,suggestion:true},"shop/department_store/Coppel":{name:"Coppel",icon:"maki-shop",imageURL:"https://graph.facebook.com/tiendascoppel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2497795",shop:"department_store"},addTags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/David Jones":{name:"David Jones",icon:"maki-shop",imageURL:"https://graph.facebook.com/davidjonesstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5235753",shop:"department_store"},addTags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Debenhams":{name:"Debenhams",icon:"maki-shop",imageURL:"https://graph.facebook.com/Debenhams/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1181484",shop:"department_store"},addTags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Dillard's":{name:"Dillard's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Dillards/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q844805",shop:"department_store"},addTags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/El Corte Inglés":{name:"El Corte Inglés",icon:"maki-shop",imageURL:"https://graph.facebook.com/elcorteingles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q623133",shop:"department_store"},addTags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"},countryCodes:["es"],terms:["corte ingles"],matchScore:2,suggestion:true},"shop/department_store/Falabella":{name:"Falabella",icon:"maki-shop",imageURL:"https://graph.facebook.com/falabellachile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5135229",shop:"department_store"},addTags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"},terms:["saga falabella"],matchScore:2,suggestion:true},"shop/department_store/Galeria Kaufhof":{name:"Galeria Kaufhof",icon:"maki-shop",imageURL:"https://graph.facebook.com/GaleriaKarstadtKaufhof/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q322598",shop:"department_store"},addTags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Giant Tiger":{name:"Giant Tiger",icon:"maki-shop",imageURL:"https://graph.facebook.com/GiantTiger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558429",shop:"department_store"},addTags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Goody's":{name:"Goody's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Goodys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5583733",shop:"department_store"},addTags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Gordmans":{name:"Gordmans",icon:"maki-shop",imageURL:"https://graph.facebook.com/gordmans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5584725",shop:"department_store"},addTags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/HEMA":{name:"HEMA",icon:"maki-shop",imageURL:"https://graph.facebook.com/hema/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q903805",shop:"department_store"},addTags:{brand:"HEMA","brand:wikidata":"Q903805","brand:wikipedia":"en:HEMA (store)",name:"HEMA",shop:"department_store"},countryCodes:["be","de","lu","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",official_name:"J.C. Penney Company",shop:"department_store"},countryCodes:["us"],terms:["jcpenny"],matchScore:2,suggestion:true},"shop/department_store/John Lewis":{name:"John Lewis",icon:"maki-shop",imageURL:"https://graph.facebook.com/JohnLewisandPartners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1918981",shop:"department_store"},addTags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",shop:"department_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Karstadt":{name:"Karstadt",icon:"maki-shop",imageURL:"https://graph.facebook.com/karstadt1881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q182910",shop:"department_store"},addTags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (Australia)":{name:"Kmart (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/KmartAustralia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6421682",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Kmart (USA)":{name:"Kmart (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/kmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1753080",shop:"department_store"},addTags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"},countryCodes:["us"],terms:["k-mart"],matchScore:2,suggestion:true},"shop/department_store/Kohl's":{name:"Kohl's",icon:"maki-shop",imageURL:"https://graph.facebook.com/kohls/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q967265",shop:"department_store"},addTags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lojas Americanas":{name:"Lojas Americanas",icon:"maki-shop",imageURL:"https://graph.facebook.com/lojasamericanas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3064093",shop:"department_store"},addTags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lord & Taylor":{name:"Lord & Taylor",icon:"maki-shop",imageURL:"https://graph.facebook.com/lordandtaylor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2749082",shop:"department_store"},addTags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Lotte Department Store":{name:"Lotte Department Store",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"},terms:["lotte"],matchScore:2,suggestion:true},"shop/department_store/M&S Outlet":{name:"M&S Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"department_store"},addTags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"},terms:["marks & spencer outlet"],matchScore:2,suggestion:true},"shop/department_store/Macy's":{name:"Macy's",icon:"maki-shop",imageURL:"https://graph.facebook.com/Macys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q629269",shop:"department_store"},addTags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Manor":{name:"Manor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Manor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q382686",shop:"department_store"},addTags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Marks & Spencer":{name:"Marks & Spencer",icon:"maki-shop",imageURL:"https://graph.facebook.com/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/Ross":{name:"Ross",icon:"maki-shop",imageURL:"https://graph.facebook.com/RossDressforLess/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3442791",shop:"department_store"},addTags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Fifth Avenue":{name:"Saks Fifth Avenue",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Saks Off 5th":{name:"Saks Off 5th",icon:"maki-shop",imageURL:"https://graph.facebook.com/saks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2723882",shop:"department_store"},addTags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears":{name:"Sears",icon:"maki-shop",imageURL:"https://graph.facebook.com/sears/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6499202",shop:"department_store"},addTags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Sears Hometown":{name:"Sears Hometown",icon:"maki-shop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSears%20Hometown%20Stores%20logo.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q69926963",shop:"department_store"},addTags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"},countryCodes:["us"],terms:["sears hometown store","sears hometown stores"],matchScore:2,suggestion:true},"shop/department_store/Sears Outlet":{name:"Sears Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/Sears.Outlet.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20080412",shop:"department_store"},addTags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"},countryCodes:["us"],terms:["sears outlet store","sears outlet stores"],matchScore:2,suggestion:true},"shop/department_store/Shopko":{name:"Shopko",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShopkoOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7501155",shop:"department_store"},addTags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stein Mart":{name:"Stein Mart",icon:"maki-shop",imageURL:"https://graph.facebook.com/SteinMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7606770",shop:"department_store"},addTags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Stockmann":{name:"Stockmann",icon:"maki-shop",imageURL:"https://graph.facebook.com/StockmannCOM/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1543093",shop:"department_store"},addTags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TJ Maxx":{name:"TJ Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tjmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10860683",shop:"department_store"},addTags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/department_store/TK Maxx":{name:"TK Maxx",icon:"maki-shop",imageURL:"https://graph.facebook.com/tkmaxx/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23823668",shop:"department_store"},addTags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (Australia)":{name:"Target (Australia)",icon:"maki-shop",imageURL:"https://graph.facebook.com/targetaus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7685854",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Target (USA)":{name:"Target (USA)",icon:"maki-shop",imageURL:"https://graph.facebook.com/target/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1046951",shop:"department_store"},addTags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"},countryCodes:["us"],terms:["Super Target"],matchScore:2,suggestion:true},"shop/department_store/The Warehouse":{name:"The Warehouse",icon:"maki-shop",imageURL:"https://graph.facebook.com/TheWarehouseNZ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3566291",shop:"department_store"},addTags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Walmart":{name:"Walmart",icon:"maki-shop",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"department_store"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"},terms:[],matchScore:2,suggestion:true},"shop/department_store/Woolworth":{name:"Woolworth",icon:"maki-shop",imageURL:"https://graph.facebook.com/WoolworthDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q183538",shop:"department_store"},addTags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/department_store/Åhléns":{name:"Åhléns",icon:"maki-shop",imageURL:"https://graph.facebook.com/ahlens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q270851",shop:"department_store"},addTags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/department_store/東急ハンズ":{name:"東急ハンズ",icon:"maki-shop",imageURL:"https://graph.facebook.com/TokyuHandsInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q859212",shop:"department_store"},addTags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/department_store/無印良品":{name:"無印良品",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/2779266335/6fbe4ceb685984dbe3a149bd94043e80_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q708789",shop:"department_store"},addTags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"},countryCodes:["jp","tw"],terms:[],matchScore:2,suggestion:true},"shop/department_store/롯데백화점":{name:"롯데백화점",icon:"maki-shop",imageURL:"https://graph.facebook.com/LOTTEshopping/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489905",shop:"department_store"},addTags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"},countryCodes:["kr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Ace Hardware":{name:"Ace Hardware",icon:"temaki-tools",imageURL:"https://graph.facebook.com/acehardware/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4672981",shop:"doityourself"},addTags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/B&Q":{name:"B&Q",icon:"temaki-tools",imageURL:"https://graph.facebook.com/bandq/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q707602",shop:"doityourself"},addTags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"},terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bauhaus":{name:"Bauhaus",icon:"temaki-tools",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:["es","fr","pt","ro"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricoman":{name:"Bricoman",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricomanFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925142",shop:"doityourself"},addTags:{brand:"Bricoman","brand:wikidata":"Q2925142","brand:wikipedia":"it:Bricoman",name:"Bricoman",shop:"doityourself"},countryCodes:["fr","it","pl"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricomarché":{name:"Bricomarché",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Bricomarche/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925147",shop:"doityourself"},addTags:{brand:"Bricomarché","brand:wikidata":"Q2925147","brand:wikipedia":"en:Bricomarché",name:"Bricomarché",shop:"doityourself"},countryCodes:["fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bricorama":{name:"Bricorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BricoramaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2925146",shop:"doityourself"},addTags:{brand:"Bricorama","brand:wikidata":"Q2925146","brand:wikipedia":"en:Bricorama",name:"Bricorama",shop:"doityourself"},countryCodes:["es","fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Bunnings Warehouse":{name:"Bunnings Warehouse",icon:"temaki-tools",imageURL:"https://pbs.twimg.com/profile_images/1405732718/hammer_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q4997829",shop:"doityourself"},addTags:{brand:"Bunnings Warehouse","brand:wikidata":"Q4997829","brand:wikipedia":"en:Bunnings Warehouse",name:"Bunnings Warehouse",shop:"doityourself"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Castorama":{name:"Castorama",icon:"temaki-tools",imageURL:"https://graph.facebook.com/castorama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q966971",shop:"doityourself"},addTags:{brand:"Castorama","brand:wikidata":"Q966971","brand:wikipedia":"en:Castorama",name:"Castorama",shop:"doityourself"},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/toom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2442970",shop:"doityourself"},addTags:{brand:"Toom Baumarkt","brand:wikidata":"Q2442970","brand:wikipedia":"de:Toom Baumarkt",name:"Toom Baumarkt",shop:"doityourself"},countryCodes:["de"],terms:["toom"],matchScore:2,suggestion:true},"shop/doityourself/Travis Perkins":{name:"Travis Perkins",icon:"temaki-tools",imageURL:"https://graph.facebook.com/TravisPerkinsPlcUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2450664",shop:"doityourself"},addTags:{brand:"Travis Perkins","brand:wikidata":"Q2450664","brand:wikipedia":"en:Travis Perkins",name:"Travis Perkins",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Weldom":{name:"Weldom",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Weldom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16683226",shop:"doityourself"},addTags:{brand:"Weldom","brand:wikidata":"Q16683226","brand:wikipedia":"fr:Weldom",name:"Weldom",shop:"doityourself"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Wickes":{name:"Wickes",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Wickes.co.uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7998350",shop:"doityourself"},addTags:{brand:"Wickes","brand:wikidata":"Q7998350","brand:wikipedia":"en:Wickes",name:"Wickes",shop:"doityourself"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/jem & fix":{name:"jem & fix",icon:"temaki-tools",imageURL:"https://graph.facebook.com/jemogfix/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12319200",shop:"doityourself"},addTags:{brand:"jem & fix","brand:wikidata":"Q12319200","brand:wikipedia":"da:Jem & fix",name:"jem & fix",shop:"doityourself"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/Леруа Мерлен":{name:"Леруа Мерлен",icon:"temaki-tools",imageURL:"https://graph.facebook.com/leroymerlin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q889624",shop:"doityourself"},addTags:{brand:"Леруа Мерлен","brand:en":"Leroy Merlin","brand:wikidata":"Q889624","brand:wikipedia":"en:Leroy Merlin",name:"Леруа Мерлен","name:en":"Leroy Merlin",shop:"doityourself"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/カインズホーム":{name:"カインズホーム",icon:"temaki-tools",imageURL:"https://graph.facebook.com/cainzfun/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11293852",shop:"doityourself"},addTags:{brand:"カインズホーム","brand:en":"Cainz Home","brand:ja":"カインズホーム","brand:wikidata":"Q11293852","brand:wikipedia":"ja:カインズ",name:"カインズホーム","name:en":"Cainz Home","name:ja":"カインズホーム",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ケーヨー":{name:"ケーヨー",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11301462",shop:"doityourself"},addTags:{brand:"ケーヨー","brand:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コメリ":{name:"コメリ",icon:"temaki-tools",imageURL:"https://graph.facebook.com/saiengardenclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302690",shop:"doityourself"},addTags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/コーナン":{name:"コーナン",icon:"temaki-tools",imageURL:"https://graph.facebook.com/kohnan.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11303403",shop:"doityourself"},addTags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/doityourself/ナフコ":{name:"ナフコ",icon:"temaki-tools",geometry:["point","area"],tags:{"brand:wikidata":"Q11323981",shop:"doityourself"},addTags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/5àsec":{name:"5àsec",icon:"temaki-clothes_hanger",imageURL:"https://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/electrical/Kafkas":{name:"Kafkas",icon:"temaki-power",imageURL:"https://graph.facebook.com/kafkas.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q68201770",shop:"electrical"},addTags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Apple Store":{name:"Apple Store",icon:"fas-plug",imageURL:"https://graph.facebook.com/apple/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q421253",shop:"electronics"},addTags:{brand:"Apple Store","brand:wikidata":"Q421253","brand:wikipedia":"en:Apple Store",name:"Apple Store",shop:"electronics"},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://graph.facebook.com/TiendasElektraMexico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1142753",shop:"electronics"},addTags:{brand:"Elektra","brand:wikidata":"Q1142753","brand:wikipedia":"es:Grupo Elektra",name:"Elektra",shop:"electronics"},countryCodes:["gt","hn","pa","pe","sv"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Elgiganten":{name:"Elgiganten",icon:"fas-plug",imageURL:"https://graph.facebook.com/elgiganten.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17050121",shop:"electronics"},addTags:{brand:"Elgiganten","brand:wikidata":"Q17050121","brand:wikipedia":"en:Elgiganten",name:"Elgiganten",shop:"electronics"},countryCodes:["dk","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Euronics":{name:"Euronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/EuronicsItalia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q184860",shop:"electronics"},addTags:{brand:"Euronics","brand:wikidata":"Q184860","brand:wikipedia":"en:Euronics",name:"Euronics",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Expert":{name:"Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/expert.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q680990",shop:"electronics"},addTags:{brand:"Expert","brand:wikidata":"Q680990","brand:wikipedia":"en:Expert (company)",name:"Expert",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Fry's Electronics":{name:"Fry's Electronics",icon:"fas-plug",imageURL:"https://graph.facebook.com/fryselectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5506545",shop:"electronics"},addTags:{brand:"Fry's Electronics","brand:wikidata":"Q5506545","brand:wikipedia":"en:Fry's Electronics",name:"Fry's Electronics",shop:"electronics",short_name:"Fry's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Frávega":{name:"Frávega",icon:"fas-plug",imageURL:"https://graph.facebook.com/fravegaonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5401467",shop:"electronics"},addTags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Garbarino":{name:"Garbarino",icon:"fas-plug",imageURL:"https://graph.facebook.com/GarbarinoGarantiaDeConfianza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5875270",shop:"electronics"},addTags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Gigantti":{name:"Gigantti",icon:"fas-plug",imageURL:"https://graph.facebook.com/gigantti/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42512186",shop:"electronics"},addTags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Hartlauer":{name:"Hartlauer",icon:"fas-plug",imageURL:"https://graph.facebook.com/loewennews/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1587223",shop:"electronics"},addTags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Interdiscount":{name:"Interdiscount",icon:"fas-plug",imageURL:"https://graph.facebook.com/interdiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1665980",shop:"electronics"},addTags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/electronics/JB Hi-Fi":{name:"JB Hi-Fi",icon:"fas-plug",imageURL:"https://graph.facebook.com/JBHiFi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3310113",shop:"electronics"},addTags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Jaycar":{name:"Jaycar",icon:"fas-plug",imageURL:"https://graph.facebook.com/jaycarelectronics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6167713",shop:"electronics"},addTags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Kjell & Company":{name:"Kjell & Company",icon:"fas-plug",imageURL:"https://graph.facebook.com/kjellcoSverige/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6419332",shop:"electronics"},addTags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"},countryCodes:["no","se"],terms:["kjell och company"],matchScore:2,suggestion:true},"shop/electronics/Komputronik":{name:"Komputronik",icon:"fas-plug",imageURL:"https://graph.facebook.com/komputronik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11742085",shop:"electronics"},addTags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/La Curacao":{name:"La Curacao",icon:"fas-plug",imageURL:"https://graph.facebook.com/CuracaoUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5194599",shop:"electronics"},addTags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Maplin":{name:"Maplin",icon:"fas-plug",imageURL:"https://graph.facebook.com/Maplin/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6754124",shop:"electronics"},addTags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Expert":{name:"Media Expert",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediaexpert/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11776794",shop:"electronics"},addTags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Media Markt":{name:"Media Markt",icon:"fas-plug",imageURL:"https://graph.facebook.com/mediamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2381223",shop:"electronics"},addTags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/Medimax":{name:"Medimax",icon:"fas-plug",imageURL:"https://graph.facebook.com/MEDIMAX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62872450",shop:"electronics"},addTags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/electronics/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/Power":{name:"Power",icon:"fas-plug",imageURL:"https://graph.facebook.com/power.retail.international/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20857751",shop:"electronics"},addTags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"},countryCodes:["dk","fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RTV Euro AGD":{name:"RTV Euro AGD",icon:"fas-plug",imageURL:"https://graph.facebook.com/rtveuroagd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7277895",shop:"electronics"},addTags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/electronics/RadioShack":{name:"RadioShack",icon:"fas-plug",imageURL:"https://graph.facebook.com/RadioShack/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1195490",shop:"electronics"},addTags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"},terms:[],matchScore:2,suggestion:true},"shop/electronics/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://graph.facebook.com/thegoodguysAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7737217",shop:"electronics"},addTags:{brand:"The Good Guys","brand:wikidata":"Q7737217","brand:wikipedia":"en:The Good Guys (Australian company)",name:"The Good Guys",shop:"electronics"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/electronics/The Source":{name:"The Source",icon:"fas-plug",imageURL:"https://graph.facebook.com/thesourcecanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3212934",shop:"electronics"},addTags:{brand:"The Source","brand:wikidata":"Q3212934","brand:wikipedia":"en:The Source (retailer)",name:"The Source",shop:"electronics"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Trony":{name:"Trony",icon:"fas-plug",imageURL:"https://graph.facebook.com/trony/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3999692",shop:"electronics"},addTags:{brand:"Trony","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Unieuro":{name:"Unieuro",icon:"fas-plug",imageURL:"https://graph.facebook.com/unieuro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4004687",shop:"electronics"},addTags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Worten":{name:"Worten",icon:"fas-plug",imageURL:"https://graph.facebook.com/WortenES/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10394039",shop:"electronics"},addTags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/electronics/b8ta":{name:"b8ta",icon:"fas-plug",imageURL:"https://graph.facebook.com/b8ta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55604609",shop:"electronics"},addTags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/electronics/М.Видео":{name:"М.Видео",icon:"fas-plug",imageURL:"https://graph.facebook.com/mvideo.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6558800",shop:"electronics"},addTags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Фокстрот":{name:"Фокстрот",icon:"fas-plug",imageURL:"https://graph.facebook.com/foxtrotinfo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16721578",shop:"electronics"},addTags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эксперт":{name:"Эксперт",icon:"fas-plug",imageURL:"https://graph.facebook.com/expertVyhino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4530590",shop:"electronics"},addTags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/electronics/Эльдорадо":{name:"Эльдорадо",icon:"fas-plug",imageURL:"https://graph.facebook.com/Eldorado.Stores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4531492",shop:"electronics"},addTags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/electronics/エディオン":{name:"エディオン",icon:"fas-plug",imageURL:"https://graph.facebook.com/edion.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11290252",shop:"electronics"},addTags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ケーズデンキ":{name:"ケーズデンキ",icon:"fas-plug",imageURL:"https://graph.facebook.com/ksdenki20180125/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6322472",shop:"electronics"},addTags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/コジマ":{name:"コジマ",icon:"fas-plug",imageURL:"https://graph.facebook.com/kojima.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302052",shop:"electronics"},addTags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ソフマップ":{name:"ソフマップ",icon:"fas-plug",imageURL:"https://graph.facebook.com/sofmap.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7553789",shop:"electronics"},addTags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ノジマ":{name:"ノジマ",icon:"fas-plug",geometry:["point","area"],tags:{"brand:wikidata":"Q11325660",shop:"electronics"},addTags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ビックカメラ":{name:"ビックカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/biccamera.page/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4903531",shop:"electronics"},addTags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヤマダ電機":{name:"ヤマダ電機",icon:"fas-plug",imageURL:"https://graph.facebook.com/YAMADA.DENKI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1096390",shop:"electronics"},addTags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ヨドバシカメラ":{name:"ヨドバシカメラ",icon:"fas-plug",imageURL:"https://graph.facebook.com/yodobashi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q168467",shop:"electronics"},addTags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/全國電子":{name:"全國電子",icon:"fas-plug",imageURL:"https://graph.facebook.com/elifemall.com.tw/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10891540",shop:"electronics"},addTags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/electronics/燦坤3C":{name:"燦坤3C",icon:"fas-plug",imageURL:"https://graph.facebook.com/tkec520/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11569285",shop:"electronics"},addTags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/erotic/Adam & Eve":{name:"Adam & Eve",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/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:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/BrightonCollectibles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4967623",shop:"fashion_accessories"},addTags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"},countryCodes:["us"],terms:["brighton"],matchScore:2,suggestion:true},"shop/fashion_accessories/Bvlgari":{name:"Bvlgari",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/Bulgari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q752515",shop:"fashion_accessories"},addTags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"},terms:["bulgari"],matchScore:2,suggestion:true},"shop/fashion_accessories/Claire's":{name:"Claire's",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/claires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2974996",shop:"fashion_accessories"},addTags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"},terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Radley London":{name:"Radley London",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/RadleyUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7281436",shop:"fashion_accessories"},addTags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/fashion_accessories/Van Cleef & Arpels":{name:"Van Cleef & Arpels",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/vancleef.arpels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2708181",shop:"fashion_accessories"},addTags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"},terms:["van cleef & arples"],matchScore:2,suggestion:true},"shop/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",imageURL:"https://graph.facebook.com/aaronbrothers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64979251",shop:"frame"},addTags:{brand:"Aaron Brothers","brand:wikidata":"Q64979251",name:"Aaron Brothers",shop:"frame"},countryCodes:["us"],terms:["aaron brothers art & framing","aaron brothers custom framing"],matchScore:2,suggestion:true},"shop/frozen_food/Dream Dinners":{name:"Dream Dinners",icon:"maki-shop",imageURL:"https://graph.facebook.com/DreamDinners/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5306355",shop:"frozen_food"},addTags:{brand:"Dream Dinners","brand:wikidata":"Q5306355","brand:wikipedia":"en:Dream Dinners",name:"Dream Dinners",opening_hours:"\"by appointment\"",shop:"frozen_food"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/frozen_food/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",imageURL:"https://graph.facebook.com/522928887844420/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63247414",shop:"funeral_directors"},addTags:{brand:"Roblot","brand:wikidata":"Q63247414",name:"Roblot",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/Roc-Eclerc":{name:"Roc-Eclerc",icon:"maki-cemetery",imageURL:"https://graph.facebook.com/grouperoceclerc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62558102",shop:"funeral_directors"},addTags:{brand:"Roc-Eclerc","brand:wikidata":"Q62558102",name:"Roc-Eclerc",shop:"funeral_directors"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/funeral_directors/The Co-operative Funeralcare":{name:"The Co-operative Funeralcare",icon:"maki-cemetery",imageURL:"https://pbs.twimg.com/profile_images/1034361261193134080/1PfqKyVV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7726521",shop:"funeral_directors"},addTags:{brand:"The Co-operative Funeralcare","brand:wikidata":"Q7726521","brand:wikipedia":"en:Co-op Funeralcare",name:"The Co-operative Funeralcare",shop:"funeral_directors"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/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://pbs.twimg.com/profile_images/566277116564488192/9UtpDssA_bigger.png",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/Casa":{name:"Casa",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCasa%20Belgique%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1991755",shop:"furniture"},addTags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"},countryCodes:["be","ch","es","fr","it","lu","pt"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Conforama":{name:"Conforama",icon:"fas-couch",imageURL:"https://graph.facebook.com/Conforama/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q541134",shop:"furniture"},addTags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"},countryCodes:["ch","es","fr","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Crate & Barrel":{name:"Crate & Barrel",icon:"fas-couch",imageURL:"https://graph.facebook.com/crateandbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5182604",shop:"furniture"},addTags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/DFS":{name:"DFS",icon:"fas-couch",imageURL:"https://graph.facebook.com/DFSUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5204927",shop:"furniture"},addTags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Dunelm":{name:"Dunelm",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/1148594693694984192/-CJ2oCn6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5315020",shop:"furniture"},addTags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"},countryCodes:["gb"],terms:["dunelm hill"],matchScore:2,suggestion:true},"shop/furniture/Dänisches Bettenlager":{name:"Dänisches Bettenlager",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Ethan Allen":{name:"Ethan Allen",icon:"fas-couch",imageURL:"https://graph.facebook.com/ethanallendesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5402870",shop:"furniture"},addTags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Fly":{name:"Fly",icon:"fas-couch",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFly-Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1389184",shop:"furniture"},addTags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Freedom":{name:"Freedom",icon:"fas-couch",imageURL:"https://graph.facebook.com/freedomAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5500546",shop:"furniture"},addTags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"},countryCodes:["au"],terms:["freedom furniture"],matchScore:2,suggestion:true},"shop/furniture/Furniture Village":{name:"Furniture Village",icon:"fas-couch",imageURL:"https://graph.facebook.com/furniturevillage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5509685",shop:"furniture"},addTags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/HSL":{name:"HSL",icon:"fas-couch",imageURL:"https://graph.facebook.com/hslchairs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64284324",shop:"furniture"},addTags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Harveys":{name:"Harveys",icon:"fas-couch",imageURL:"https://graph.facebook.com/harveysfurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5677754",shop:"furniture"},addTags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Havertys":{name:"Havertys",icon:"fas-couch",imageURL:"https://pbs.twimg.com/profile_images/672434576397062144/tX39o3Bz_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5683881",shop:"furniture"},addTags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/IKEA":{name:"IKEA",icon:"fas-couch",imageURL:"https://graph.facebook.com/IKEA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54078",shop:"furniture"},addTags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Isku":{name:"Isku",icon:"fas-couch",imageURL:"https://graph.facebook.com/iskuinteriorofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11865127",shop:"furniture"},addTags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/furniture/JYSK":{name:"JYSK",icon:"fas-couch",imageURL:"https://graph.facebook.com/JYSK.dk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q138913",shop:"furniture"},addTags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/Jerome's Furniture":{name:"Jerome's Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/JeromesFurniture/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16997693",shop:"furniture"},addTags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kika":{name:"Kika",icon:"fas-couch",imageURL:"https://graph.facebook.com/kika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q256456",shop:"furniture"},addTags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Kwantum":{name:"Kwantum",icon:"fas-couch",imageURL:"https://graph.facebook.com/KwantumNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2262591",shop:"furniture"},addTags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/La-Z-Boy":{name:"La-Z-Boy",icon:"fas-couch",imageURL:"https://graph.facebook.com/lazboy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6391583",shop:"furniture"},addTags:{brand:"La-Z-Boy","brand:wikidata":"Q6391583","brand:wikipedia":"en:La-Z-Boy",name:"La-Z-Boy",shop:"furniture"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leen Bakker":{name:"Leen Bakker",icon:"fas-couch",imageURL:"https://graph.facebook.com/leenbakker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3333662",shop:"furniture"},addTags:{brand:"Leen Bakker","brand:wikidata":"Q3333662","brand:wikipedia":"nl:Leen Bakker",name:"Leen Bakker",shop:"furniture"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Leiner":{name:"Leiner",icon:"fas-couch",imageURL:"https://graph.facebook.com/Leiner.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1661472",shop:"furniture"},addTags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/LoveSac":{name:"LoveSac",icon:"fas-couch",imageURL:"https://graph.facebook.com/LoveSac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6690181",shop:"furniture"},addTags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Maisons du Monde":{name:"Maisons du Monde",icon:"fas-couch",imageURL:"https://graph.facebook.com/maisonsdumondeus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3280364",shop:"furniture"},addTags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"},countryCodes:["be","ch","de","es","fr","gb","it","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Möbelix":{name:"Möbelix",icon:"fas-couch",imageURL:"https://graph.facebook.com/moebelix.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q877547",shop:"furniture"},addTags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"},countryCodes:["at","cz","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Mömax":{name:"Mömax",icon:"fas-couch",imageURL:"https://graph.facebook.com/moemax.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56388481",shop:"furniture"},addTags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"},countryCodes:["at","de","hu","si"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Oak Furnitureland":{name:"Oak Furnitureland",icon:"fas-couch",imageURL:"https://graph.facebook.com/OakFurnitureland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16959724",shop:"furniture"},addTags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/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","lu"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rooms To Go":{name:"Rooms To Go",icon:"fas-couch",imageURL:"https://graph.facebook.com/roomstogo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7366329",shop:"furniture"},addTags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Rutar":{name:"Rutar",icon:"fas-couch",imageURL:"https://graph.facebook.com/RutarAustria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22910157",shop:"furniture"},addTags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ScS":{name:"ScS",icon:"fas-couch",imageURL:"https://graph.facebook.com/scssofas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19654399",shop:"furniture"},addTags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/furniture/The Brick":{name:"The Brick",icon:"fas-couch",imageURL:"https://graph.facebook.com/TheBrick/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7720000",shop:"furniture"},addTags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Urban Barn":{name:"Urban Barn",icon:"fas-couch",imageURL:"https://graph.facebook.com/urbanbarn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62515207",shop:"furniture"},addTags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/furniture/Value City Furniture":{name:"Value City Furniture",icon:"fas-couch",imageURL:"https://graph.facebook.com/ValueCityFurnitureUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63859417",shop:"furniture"},addTags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/furniture/XXXLutz":{name:"XXXLutz",icon:"fas-couch",imageURL:"https://graph.facebook.com/xxxlutz.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q70339467",shop:"furniture"},addTags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/furniture/west elm":{name:"west elm",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q7985021",shop:"furniture"},addTags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"},terms:[],matchScore:2,suggestion:true},"shop/furniture/İstikbal":{name:"İstikbal",icon:"fas-couch",imageURL:"https://graph.facebook.com/istikbal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6031999",shop:"furniture"},addTags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/furniture/ニトリ":{name:"ニトリ",icon:"fas-couch",imageURL:"https://graph.facebook.com/nitori.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10801453",shop:"furniture"},addTags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/games/Games Workshop":{name:"Games Workshop",icon:"fas-dice",imageURL:"https://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",geometry:["point","area"],tags:{"brand:wikidata":"Q16661975",shop:"garden_centre"},addTags:{brand:"Point Vert","brand:wikidata":"Q16661975","brand:wikipedia":"fr:Magasin vert",name:"Point Vert",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Truffaut":{name:"Truffaut",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/truffautfr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162640",shop:"garden_centre"},addTags:{brand:"Truffaut","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Jardineries Truffaut",name:"Truffaut",shop:"garden_centre"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/garden_centre/Walmart Garden Center":{name:"Walmart Garden Center",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/walmart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q483551",shop:"garden_centre"},addTags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"},terms:[],matchScore:2,suggestion:true},"shop/garden_centre/ZG Raiffeisen":{name:"ZG Raiffeisen",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/zgraiffeisen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q136135",shop:"garden_centre"},addTags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/gas/Airgas":{name:"Airgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/airgasusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q80635",shop:"gas"},addTags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/AmeriGas":{name:"AmeriGas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/AmeriGas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23130318",shop:"gas"},addTags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gas/Ferrellgas":{name:"Ferrellgas",icon:"temaki-propane_tank",imageURL:"https://graph.facebook.com/Ferrellgas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5445299",shop:"gas"},addTags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/American Greetings":{name:"American Greetings",icon:"maki-gift",imageURL:"https://graph.facebook.com/AmericanGreetings/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q464767",shop:"gift"},addTags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Card Factory":{name:"Card Factory",icon:"maki-gift",imageURL:"https://graph.facebook.com/cardfactoryplc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5038192",shop:"gift"},addTags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"},countryCodes:["gb","im"],terms:[],matchScore:2,suggestion:true},"shop/gift/Carlton Cards":{name:"Carlton Cards",icon:"maki-gift",imageURL:"https://graph.facebook.com/Carltoncards.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5042968",shop:"gift"},addTags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"},countryCodes:["ca"],terms:["carlton"],matchScore:2,suggestion:true},"shop/gift/Clintons":{name:"Clintons",icon:"maki-gift",imageURL:"https://graph.facebook.com/ClintonsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5134299",shop:"gift"},addTags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"},countryCodes:["gb"],terms:["clinton cards"],matchScore:2,suggestion:true},"shop/gift/Cracker Barrel":{name:"Cracker Barrel",icon:"maki-gift",imageURL:"https://graph.facebook.com/crackerbarrel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4492609",shop:"gift"},addTags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Disney Store":{name:"Disney Store",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopdisney/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047009",shop:"gift"},addTags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"},countryCodes:["ca","fr","us"],terms:["the disney store"],matchScore:2,suggestion:true},"shop/gift/Edible Arrangements":{name:"Edible Arrangements",icon:"maki-gift",imageURL:"https://graph.facebook.com/ediblearrangements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5337996",shop:"gift"},addTags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Hallmark":{name:"Hallmark",icon:"maki-gift",imageURL:"https://graph.facebook.com/Hallmark/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1521910",shop:"gift"},addTags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"},countryCodes:["ca","gb","us"],terms:["hallmark gold crown"],matchScore:2,suggestion:true},"shop/gift/Nanu-Nana":{name:"Nanu-Nana",icon:"maki-gift",imageURL:"https://graph.facebook.com/NanuNanaDE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1720245",shop:"gift"},addTags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/gift/Papyrus":{name:"Papyrus",icon:"maki-gift",imageURL:"https://graph.facebook.com/papyrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28222692",shop:"gift"},addTags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Showcase":{name:"Showcase",icon:"maki-gift",imageURL:"https://graph.facebook.com/shopatshowcase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7503163",shop:"gift"},addTags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Spencer's":{name:"Spencer's",icon:"maki-gift",imageURL:"https://graph.facebook.com/spencers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576055",shop:"gift"},addTags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/gift/Things Remembered":{name:"Things Remembered",icon:"maki-gift",imageURL:"https://graph.facebook.com/thingsremembered/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54958287",shop:"gift"},addTags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/greengrocer/Produce Junction":{name:"Produce Junction",icon:"fas-carrot",imageURL:"https://graph.facebook.com/ProduceJunction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q60583541",shop:"greengrocer"},addTags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser_supply/Sally Beauty Supply":{name:"Sally Beauty Supply",icon:"temaki-hair_care",imageURL:"https://graph.facebook.com/sallybeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7405065",shop:"hairdresser_supply"},addTags:{brand:"Sally Beauty Supply","brand:wikidata":"Q7405065","brand:wikipedia":"en:Sally Beauty Holdings",name:"Sally Beauty Supply",shop:"hairdresser_supply"},countryCodes:["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:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/AmplifonGroupCareers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q477222",shop:"hearing_aids"},addTags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"},terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Audika":{name:"Audika",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/audikafrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2870745",shop:"hearing_aids"},addTags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Geers":{name:"Geers",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/geers.hoerakustik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1497707",shop:"hearing_aids"},addTags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"},countryCodes:["de","pl"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Kind Hörgeräte":{name:"Kind Hörgeräte",icon:"temaki-hearing_aid",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKIND%20H%C3%B6rger%C3%A4te%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q43598590",shop:"hearing_aids"},addTags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"},countryCodes:["de"],terms:["kind"],matchScore:2,suggestion:true},"shop/hearing_aids/Miracle-Ear":{name:"Miracle-Ear",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/miracleear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17108572",shop:"hearing_aids"},addTags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/hearing_aids/Neuroth":{name:"Neuroth",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/NeurothAG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15836645",shop:"hearing_aids"},addTags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/bangolufsenusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q790020",shop:"hifi"},addTags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Bose":{name:"Bose",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/Bose/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q328568",shop:"hifi"},addTags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Devialet":{name:"Devialet",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDEVIALET-ingenierie-Logo-3.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3025419",shop:"hifi"},addTags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/Harman Kardon":{name:"Harman Kardon",icon:"temaki-speaker",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FHarman%20Kardon%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1476454",shop:"hifi"},addTags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hifi/JBL":{name:"JBL",icon:"temaki-speaker",imageURL:"https://graph.facebook.com/JBL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1153754",shop:"hifi"},addTags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"},terms:[],matchScore:2,suggestion:true},"shop/hobby/アニメイト":{name:"アニメイト",icon:"fas-dragon",imageURL:"https://pbs.twimg.com/profile_images/1098862296787382272/pLo1nSbN_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q1041890",shop:"hobby"},addTags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/houseware/At Home":{name:"At Home",icon:"fas-blender",imageURL:"https://graph.facebook.com/AtHomeStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5522290",shop:"houseware"},addTags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"},countryCodes:["us"],terms:["garden ridge"],matchScore:2,suggestion:true},"shop/houseware/Bed Bath & Beyond":{name:"Bed Bath & Beyond",icon:"fas-blender",imageURL:"https://graph.facebook.com/BedBathAndBeyond/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q813782",shop:"houseware"},addTags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"},countryCodes:["ca","mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Blokker":{name:"Blokker",icon:"fas-blender",imageURL:"https://graph.facebook.com/BlokkerNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q884934",shop:"houseware"},addTags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Cervera":{name:"Cervera",icon:"fas-blender",imageURL:"https://graph.facebook.com/CerveraAB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10447179",shop:"houseware"},addTags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/houseware/HomeGoods":{name:"HomeGoods",icon:"fas-blender",imageURL:"https://graph.facebook.com/Homegoods/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5887941",shop:"houseware"},addTags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Kitchen Collection":{name:"Kitchen Collection",icon:"fas-blender",imageURL:"https://graph.facebook.com/KitchenCollectionStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64149036",shop:"houseware"},addTags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Lagerhaus":{name:"Lagerhaus",icon:"fas-blender",imageURL:"https://graph.facebook.com/lagerhaus.se/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10553211",shop:"houseware"},addTags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Lakeland":{name:"Lakeland",icon:"fas-blender",imageURL:"https://pbs.twimg.com/profile_images/621221260295540736/MnUP-kr4_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q16256199",shop:"houseware"},addTags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Le Creuset":{name:"Le Creuset",icon:"fas-blender",imageURL:"https://graph.facebook.com/lecreuset/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q555861",shop:"houseware"},addTags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"},terms:[],matchScore:2,suggestion:true},"shop/houseware/Marskramer":{name:"Marskramer",icon:"fas-blender",imageURL:"https://graph.facebook.com/marskramer.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2305917",shop:"houseware"},addTags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/houseware/Old Time Pottery":{name:"Old Time Pottery",icon:"fas-blender",imageURL:"https://graph.facebook.com/oldtimepottery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7085222",shop:"houseware"},addTags:{brand:"Old Time Pottery","brand: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/houseware/京王アートマン":{name:"京王アートマン",icon:"fas-blender",imageURL:"https://graph.facebook.com/keio.atman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11374580",shop:"variety_store"},addTags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"variety_store"},countryCodes:["jp"],terms:["アートマン"],matchScore:2,suggestion:true},"shop/interior_decoration/Centrakor":{name:"Centrakor",icon:"maki-shop",imageURL:"https://graph.facebook.com/Centrakor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64079345",shop:"interior_decoration"},addTags:{brand:"Centrakor","brand:wikidata":"Q64079345","brand:wikipedia":"fr:Centrakor",name:"Centrakor",shop:"interior_decoration"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Depot":{name:"Depot",icon:"maki-shop",imageURL:"https://graph.facebook.com/DEPOTonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1191740",shop:"interior_decoration"},addTags:{brand:"Depot","brand:wikidata":"Q1191740","brand:wikipedia":"de:Gries Deco Holding",name:"Depot",shop:"interior_decoration"},countryCodes:["at","ch","de"],terms:[],matchScore:2,suggestion:true},"shop/interior_decoration/Fired Earth":{name:"Fired Earth",icon:"maki-shop",imageURL:"https://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://graph.facebook.com/CharmDiamonds/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5086396",shop:"jewelry"},addTags:{brand:"Charm Diamond Centres","brand:wikidata":"Q5086396","brand:wikipedia":"en:Charm Diamond Centres",name:"Charm Diamond Centres",shop:"jewelry"},countryCodes:["ca"],terms:["Charm Diamond","Charm Diamond Centre"],matchScore:2,suggestion:true},"shop/jewelry/Chisholm Hunter":{name:"Chisholm Hunter",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ChisholmHunterOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66662001",shop:"jewelry"},addTags:{brand:"Chisholm Hunter","brand:wikidata":"Q66662001",name:"Chisholm Hunter",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Christ":{name:"Christ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/juwelierchrist/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1077957",shop:"jewelry"},addTags:{brand:"Christ","brand:wikidata":"Q1077957","brand:wikipedia":"de:Christ (Juwelier)",name:"Christ",shop:"jewelry"},countryCodes:["ch","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/David Yurman":{name:"David Yurman",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/DavidYurman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5241390",shop:"jewelry"},addTags:{brand:"David Yurman","brand:wikidata":"Q5241390","brand:wikipedia":"en:David Yurman",name:"David Yurman",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Ernest Jones":{name:"Ernest Jones",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/ernestjonesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5393358",shop:"jewelry"},addTags:{brand:"Ernest Jones","brand:wikidata":"Q5393358","brand:wikipedia":"en:Ernest Jones (retailer)",name:"Ernest Jones",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/F.Hinds":{name:"F.Hinds",icon:"maki-jewelry-store",imageURL:"https://pbs.twimg.com/profile_images/859360908304371712/lYv3bPA7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5423915",shop:"jewelry"},addTags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Fred Meyer":{name:"Fred Meyer",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",shop:"jewelry"},addTags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/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/Lucardi":{name:"Lucardi",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/LucardiJuweliers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13774940",shop:"jewelry"},addTags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Michael Hill":{name:"Michael Hill",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/MichaelHillJ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3308250",shop:"jewelry"},addTags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"},countryCodes:["au","ca","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/PNJ":{name:"PNJ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PNJ.COM.VN/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61129183",shop:"jewelry"},addTags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"},countryCodes:["vn"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Pandora":{name:"Pandora",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/PANDORA.Japan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2241604",shop:"jewelry"},addTags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Peoples Jewellers":{name:"Peoples Jewellers",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Peoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64995558",shop:"jewelry"},addTags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Swarovski":{name:"Swarovski",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/SWAROVSKI.NorthAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q611115",shop:"jewelry"},addTags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Tiffany & Company":{name:"Tiffany & Company",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Tiffany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1066858",shop:"jewelry"},addTags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"},countryCodes:["us"],terms:["tiffany","tiffany's"],matchScore:2,suggestion:true},"shop/jewelry/Tous":{name:"Tous",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/tousjewelry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3815128",shop:"jewelry"},addTags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"},terms:[],matchScore:2,suggestion:true},"shop/jewelry/Warren James":{name:"Warren James",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/warrenjamesjewellers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19604616",shop:"jewelry"},addTags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Zales":{name:"Zales",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/Zales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8065305",shop:"jewelry"},addTags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/jewelry/Адамас":{name:"Адамас",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/adamas.club/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393709",shop:"jewelry"},addTags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/kiosk/Lietuvos spauda":{name:"Lietuvos spauda",icon:"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:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/CuisinellaFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3007012",shop:"kitchen"},addTags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"},countryCodes:["fr","tn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Ixina":{name:"Ixina",icon:"temaki-kitchen_sink",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIxina.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3156424",shop:"kitchen"},addTags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"},countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Magnet":{name:"Magnet",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/MagnetKitchens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6731427",shop:"kitchen"},addTags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"},countryCodes:["gb"],terms:["magnet kitchens"],matchScore:2,suggestion:true},"shop/kitchen/Mobalpa":{name:"Mobalpa",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Mobalpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3317571",shop:"kitchen"},addTags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"},countryCodes:["be","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/Schmidt":{name:"Schmidt",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/Schmidt.HomeDesign/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3487620",shop:"kitchen"},addTags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"},countryCodes:["be","es","fr","gb"],terms:[],matchScore:2,suggestion:true},"shop/kitchen/SoCoo'c":{name:"SoCoo'c",icon:"temaki-kitchen_sink",imageURL:"https://graph.facebook.com/SoCooc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62783840",shop:"kitchen"},addTags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/massage/Massage Envy":{name:"Massage Envy",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageEnvy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q22922899",shop:"massage"},addTags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"},countryCodes:["us"],terms:["massage envy spa"],matchScore:2,suggestion:true},"shop/massage/Massage Heights":{name:"Massage Heights",icon:"temaki-spa",imageURL:"https://graph.facebook.com/MassageHeights/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64573956",shop:"massage"},addTags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Pofam-Poznań":{name:"Pofam-Poznań",icon:"fas-crutch",imageURL:"https://graph.facebook.com/381601628634155/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62057457",shop:"medical_supply"},addTags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/medical_supply/Ортека":{name:"Ортека",icon:"fas-crutch",imageURL:"https://graph.facebook.com/orteka.rus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393660",shop:"medical_supply"},addTags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/3 Store":{name:"3 Store",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ThreeUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q407009",shop:"mobile_phone"},addTags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"},countryCodes:["gb","it"],terms:["3","three","three store"],matchScore:2,suggestion:true},"shop/mobile_phone/A1":{name:"A1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"mobile_phone"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/mobile_phone/AT&T":{name:"AT&T",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ATT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q298594",shop:"mobile_phone"},addTags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"},countryCodes:["mx","us"],terms:["att mobile","att mobility","att wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Bell":{name:"Bell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2894594",shop:"mobile_phone"},addTags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"},countryCodes:["ca"],terms:["bell mobile","bell mobility","bell wireless"],matchScore:2,suggestion:true},"shop/mobile_phone/Best Buy Mobile":{name:"Best Buy Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bestbuy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q533415",shop:"mobile_phone"},addTags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Bitė":{name:"Bitė",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bitelietuva/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q796010",shop:"mobile_phone"},addTags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Boost Mobile":{name:"Boost Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/boostmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4943790",shop:"mobile_phone"},addTags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"},countryCodes:["us"],terms:["boost"],matchScore:2,suggestion:true},"shop/mobile_phone/Bouygues Telecom":{name:"Bouygues Telecom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/bouyguestelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q581438",shop:"mobile_phone"},addTags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Carphone Warehouse":{name:"Carphone Warehouse",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"},countryCodes:["by","gb","ie"],terms:["the carphone warehouse"],matchScore:2,suggestion:true},"shop/mobile_phone/Chatr":{name:"Chatr",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/chatrmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5087766",shop:"mobile_phone"},addTags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"},countryCodes:["ca"],terms:["Chatr Mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Claro":{name:"Claro",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ClaroCol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1770208",shop:"mobile_phone"},addTags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Cricket Wireless":{name:"Cricket Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/cricketwireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5184987",shop:"mobile_phone"},addTags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"},countryCodes:["us"],terms:["cricket"],matchScore:2,suggestion:true},"shop/mobile_phone/Digicel":{name:"Digicel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/digicel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2117506",shop:"mobile_phone"},addTags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/EE":{name:"EE",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/ee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5322942",shop:"mobile_phone"},addTags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Entel":{name:"Entel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/entelsa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q450420",shop:"mobile_phone"},addTags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"},countryCodes:["cl","pe"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Fido":{name:"Fido",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/fidomobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3071471",shop:"mobile_phone"},addTags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Freedom Mobile":{name:"Freedom Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/frdmmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8023931",shop:"mobile_phone"},addTags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"},countryCodes:["ca"],terms:["freedom","wind mobile"],matchScore:2,suggestion:true},"shop/mobile_phone/Koodo":{name:"Koodo",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Koodo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6430529",shop:"mobile_phone"},addTags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/MEO":{name:"MEO",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMeo%20logo%20pt.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3306167",shop:"mobile_phone"},addTags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"},terms:["loja meo"],matchScore:2,suggestion:true},"shop/mobile_phone/MTN":{name:"MTN",icon:"fas-mobile-alt",imageURL:"https://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/NOS":{name:"NOS",icon:"fas-mobile-alt",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLog%C3%B3tipo%20da%20NOS.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q136331",shop:"mobile_phone"},addTags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/O2":{name:"O2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/o2uk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1759255",shop:"mobile_phone"},addTags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"},countryCodes:["cz","de","gb","ie","sk"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optie1":{name:"Optie1",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Optie1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62393564",shop:"mobile_phone"},addTags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Optus":{name:"Optus",icon:"fas-mobile-alt",geometry:["point","area"],tags:{"brand:wikidata":"Q865038",shop:"mobile_phone"},addTags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Orange":{name:"Orange",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/orange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1431486",shop:"mobile_phone"},addTags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"},terms:["agence orange"],matchScore:2,suggestion:true},"shop/mobile_phone/Personal":{name:"Personal",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/personalargentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10933021",shop:"mobile_phone"},addTags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"},countryCodes:["ar","py"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Phone House":{name:"Phone House",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/carphonewarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q118046",shop:"mobile_phone"},addTags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"},countryCodes:["de","es","fr","nl","pt"],terms:["the phone house"],matchScore:2,suggestion:true},"shop/mobile_phone/Play":{name:"Play",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Play/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7202998",shop:"mobile_phone"},addTags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Plus":{name:"Plus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/plus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7205598",shop:"mobile_phone"},addTags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Rogers":{name:"Rogers",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Rogers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3439663",shop:"mobile_phone"},addTags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/SFR":{name:"SFR",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/SFR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q218765",shop:"mobile_phone"},addTags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"},countryCodes:["fr","lu"],terms:["espace sfr"],matchScore:2,suggestion:true},"shop/mobile_phone/Sprint":{name:"Sprint",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/sprint/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q301965",shop:"mobile_phone"},addTags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/T-Mobile":{name:"T-Mobile",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TMobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327634",shop:"mobile_phone"},addTags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/TIM":{name:"TIM",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TimOfficialPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q144617",shop:"mobile_phone"},addTags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"},countryCodes:["br","it"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tbooth Wireless":{name:"Tbooth Wireless",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/TboothWireless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7690597",shop:"mobile_phone"},addTags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telcel":{name:"Telcel",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telcel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3517255",shop:"mobile_phone"},addTags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"},countryCodes:["cu","mx"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Tele2":{name:"Tele2",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/WeAreTele2/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q309865",shop:"mobile_phone"},addTags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telekom":{name:"Telekom",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/deutschetelekom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9396",shop:"mobile_phone"},addTags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"},countryCodes:["de","hu","ro","si","sk"],terms:["telekom shop"],matchScore:2,suggestion:true},"shop/mobile_phone/Telenor":{name:"Telenor",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telenorgroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q845632",shop:"mobile_phone"},addTags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"},terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telia":{name:"Telia",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/teliacompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q862303",shop:"mobile_phone"},addTags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"},countryCodes:["dk","fi","lt","no","se"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telstra":{name:"Telstra",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Telstra/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q721162",shop:"mobile_phone"},addTags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Telus":{name:"Telus",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/telus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q165858",shop:"mobile_phone"},addTags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/Turkcell":{name:"Turkcell",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/Turkcell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q283852",shop:"mobile_phone"},addTags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"},countryCodes:["cy","tr"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/U.S. Cellular":{name:"U.S. Cellular",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/USCellular/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2466256",shop:"mobile_phone"},addTags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/mobile_phone/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/mobile_phone/台灣大哥大":{name:"台灣大哥大",icon:"fas-mobile-alt",imageURL:"https://graph.facebook.com/taiwanmobile/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5943259",shop:"mobile_phone"},addTags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/ACE Cash Express":{name:"ACE Cash Express",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/acecashexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24260962",shop:"money_lender"},addTags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"},countryCodes:["us"],terms:["ace"],matchScore:2,suggestion:true},"shop/money_lender/Advance America":{name:"Advance America",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/AdvanceAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4686044",shop:"money_lender"},addTags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/California Check Cashing Stores":{name:"California Check Cashing Stores",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q64390932",shop:"money_lender"},addTags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"},countryCodes:["us"],terms:["california check cashing"],matchScore:2,suggestion:true},"shop/money_lender/Cash Store":{name:"Cash Store",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cashstore/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61943411",shop:"money_lender"},addTags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CashMax":{name:"CashMax",icon:"temaki-money_hand",geometry:["point","area"],tags:{"brand:wikidata":"Q69365478",shop:"money_lender"},addTags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/Check Into Cash":{name:"Check Into Cash",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/checkintocash/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16961246",shop:"money_lender"},addTags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/CheckSmart":{name:"CheckSmart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/166958136649293/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65640213",shop:"money_lender"},addTags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/money_lender/First Virginia":{name:"First Virginia",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFirst%20Virginia%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q65640051",shop:"money_lender"},addTags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"},countryCodes:["us"],terms:["1st virginia"],matchScore:2,suggestion:true},"shop/money_lender/Money Mart":{name:"Money Mart",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/moneymartusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6899166",shop:"money_lender"},addTags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Harley-Davidson":{name:"Harley-Davidson",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/harley-davidson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q192814",shop:"motorcycle"},addTags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Honda":{name:"Honda",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/HondaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9584",shop:"motorcycle"},addTags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Kawasaki":{name:"Kawasaki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/kawasaki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6379855",shop:"motorcycle"},addTags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Motortrade":{name:"Motortrade",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/MotortradePh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48803162",shop:"motorcycle"},addTags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Suzuki":{name:"Suzuki",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/SuzukiGlobalOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q181642",shop:"motorcycle"},addTags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/Yamaha":{name:"Yamaha",icon:"fas-motorcycle",imageURL:"https://graph.facebook.com/yamahamotorusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q158888",shop:"motorcycle"},addTags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"},terms:[],matchScore:2,suggestion:true},"shop/motorcycle/レッドバロン":{name:"レッドバロン",icon:"fas-motorcycle",geometry:["point","area"],tags:{"brand:wikidata":"Q11349759",shop:"motorcycle"},addTags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/music/FYE":{name:"FYE",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/FYE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5424141",shop:"music"},addTags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/music/HMV":{name:"HMV",icon:"fas-compact-disc",imageURL:"https://graph.facebook.com/hmv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10854572",shop:"music"},addTags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"},countryCodes:["ca","gb"],terms:[],matchScore:2,suggestion:true},"shop/music/Sunrise Records":{name:"Sunrise Records",icon:"fas-compact-disc",imageURL:"https://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/music/タワーレコード":{name:"タワーレコード",icon:"fas-compact-disc",imageURL:"https://pbs.twimg.com/profile_images/1079703989942247424/bgEgkk2Q_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3265728",shop:"music"},addTags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"},countryCodes:["jp"],terms:["タワレコ"],matchScore:2,suggestion:true},"shop/musical_instrument/Guitar Center":{name:"Guitar Center",icon:"fas-guitar",imageURL:"https://graph.facebook.com/GuitarCenter/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3622794",shop:"musical_instrument"},addTags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/musical_instrument/Long & McQuade":{name:"Long & McQuade",icon:"fas-guitar",imageURL:"https://graph.facebook.com/LongMcQuade/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6672180",shop:"musical_instrument"},addTags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Cigo":{name:"Cigo",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/cigo.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391977",shop:"newsagent"},addTags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"},countryCodes:["de","nl"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Kolporter":{name:"Kolporter",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/kolporterpl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6427874",shop:"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",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Белсоюзпечать","brand:wikidata":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Витебскоблсоюзпечать":{name:"Витебскоблсоюзпечать",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q67723214",shop:"newsagent"},addTags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Первая полоса":{name:"Первая полоса",icon:"fas-newspaper",geometry:["point","area"],tags:{"brand:wikidata":"Q62736412",shop:"newsagent"},addTags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/Союзпечать":{name:"Союзпечать",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/Belsouzpechat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4430611",shop:"newsagent"},addTags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/newsagent/読売新聞":{name:"読売新聞",icon:"fas-newspaper",imageURL:"https://pbs.twimg.com/profile_images/1091035339232227328/elp0X_L6_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q645218",shop:"newsagent"},addTags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/GNC":{name:"GNC",icon:"fas-pills",imageURL:"https://graph.facebook.com/GNCLiveWell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4808595",shop:"nutrition_supplements"},addTags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"},terms:["gnc live well"],matchScore:2,suggestion:true},"shop/nutrition_supplements/Popeye's Supplements":{name:"Popeye's Supplements",icon:"fas-pills",imageURL:"https://graph.facebook.com/popeyessupplements/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71096495",shop:"nutrition_supplements"},addTags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/The Vitamin Shoppe":{name:"The Vitamin Shoppe",icon:"fas-pills",imageURL:"https://graph.facebook.com/THEVITAMINSHOPPE/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7772938",shop:"nutrition_supplements"},addTags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/nutrition_supplements/Vitamin World":{name:"Vitamin World",icon:"fas-pills",imageURL:"https://graph.facebook.com/OfficialVitaminWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7936979",shop:"nutrition_supplements"},addTags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Alain Afflelou":{name:"Alain Afflelou",icon:"maki-optician",imageURL:"https://graph.facebook.com/AlainAfflelouOptico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2829511",shop:"optician"},addTags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"},countryCodes:["be","ch","es","fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/America's Best Contacts & Eyeglasses":{name:"America's Best Contacts & Eyeglasses",icon:"maki-optician",imageURL:"https://graph.facebook.com/AmericasBestContactsandEyeglasses/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4742504",shop:"optician"},addTags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Apollo-Optik":{name:"Apollo-Optik",icon:"maki-optician",imageURL:"https://graph.facebook.com/ApolloOptik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q618940",shop:"optician"},addTags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/optician/Atol":{name:"Atol",icon:"maki-optician",imageURL:"https://graph.facebook.com/opticiensatol/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2869542",shop:"optician"},addTags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Boots Opticians":{name:"Boots Opticians",icon:"maki-optician",imageURL:"https://graph.facebook.com/BootsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4944037",shop:"optician"},addTags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/optician/Clarkson Eyecare":{name:"Clarkson Eyecare",icon:"maki-optician",geometry:["point","area"],tags:{"brand:wikidata":"Q64027001",shop:"optician"},addTags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Cohen's Fashion Optical":{name:"Cohen's Fashion Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/cohensoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5141313",shop:"optician"},addTags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"},countryCodes:["us"],terms:["cohen's optical"],matchScore:2,suggestion:true},"shop/optician/Eye Wish":{name:"Eye Wish",icon:"maki-optician",imageURL:"https://graph.facebook.com/EyeWishOpticiens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391641",shop:"optician"},addTags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Fielmann":{name:"Fielmann",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F160506%20Fielmann%20LogoNEU%20pos%20wiki.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q457822",shop:"optician"},addTags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/General Óptica":{name:"General Óptica",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaloptica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391672",shop:"optician"},addTags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Grand Optical":{name:"Grand Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/grandoptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3113677",shop:"optician"},addTags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Générale d'Optique":{name:"Générale d'Optique",icon:"maki-optician",imageURL:"https://graph.facebook.com/generaledoptique/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391701",shop:"optician"},addTags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hakim Optical":{name:"Hakim Optical",icon:"maki-optician",imageURL:"https://graph.facebook.com/HakimOptical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28232761",shop:"optician"},addTags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/optician/Hans Anders":{name:"Hans Anders",icon:"maki-optician",imageURL:"https://graph.facebook.com/hansanders.nl/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1884976",shop:"optician"},addTags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"},countryCodes:["be","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/optician/Instrumentarium":{name:"Instrumentarium",icon:"maki-optician",imageURL:"https://graph.facebook.com/instru.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11864937",shop:"optician"},addTags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"},countryCodes:["fi"],terms:[],matchScore:2,suggestion:true},"shop/optician/Krys":{name:"Krys",icon:"maki-optician",imageURL:"https://graph.facebook.com/Krys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3119538",shop:"optician"},addTags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/LensCrafters":{name:"LensCrafters",icon:"maki-optician",imageURL:"https://graph.facebook.com/LensCrafters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6523209",shop:"optician"},addTags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lenskart":{name:"Lenskart",icon:"maki-optician",imageURL:"https://graph.facebook.com/Lenskartindia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17068753",shop:"optician"},addTags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/optician/Les Opticiens Mutualistes":{name:"Les Opticiens Mutualistes",icon:"maki-optician",imageURL:"https://graph.facebook.com/lesopticiensmutualistes.officiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18414551",shop:"optician"},addTags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Lissac":{name:"Lissac",icon:"maki-optician",imageURL:"https://graph.facebook.com/lissac.opticien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63102559",shop:"optician"},addTags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Portugal)":{name:"Multiópticas (Portugal)",icon:"maki-optician",imageURL:"https://graph.facebook.com/MultiOpticasPortugal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391722",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/optician/Multiópticas (Spain)":{name:"Multiópticas (Spain)",icon:"maki-optician",imageURL:"https://graph.facebook.com/Multiopticas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391719",shop:"optician"},addTags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oakley":{name:"Oakley",icon:"maki-optician",imageURL:"https://graph.facebook.com/Oakley/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q161906",shop:"optician"},addTags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/optician/Oliver Peoples":{name:"Oliver Peoples",icon:"maki-optician",imageURL:"https://graph.facebook.com/oliverpeoples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7087746",shop:"optician"},addTags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/Optic 2000":{name:"Optic 2000",icon:"maki-optician",imageURL:"https://graph.facebook.com/optic2000/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3354445",shop:"optician"},addTags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/optician/Optical Center":{name:"Optical Center",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20opticalcenter.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3354448",shop:"optician"},addTags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"},terms:[],matchScore:2,suggestion:true},"shop/optician/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","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"},countryCodes:["gb"],terms:["cotswold"],matchScore:2,suggestion:true},"shop/outdoor/Gander Outdoors":{name:"Gander Outdoors",icon:"temaki-compass",imageURL:"https://graph.facebook.com/GanderRV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64357426",shop:"outdoor"},addTags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"},countryCodes:["us"],terms:["gander mountain"],matchScore:2,suggestion:true},"shop/outdoor/Jack Wolfskin":{name:"Jack Wolfskin",icon:"temaki-compass",imageURL:"https://graph.facebook.com/JACKWOLFSKINofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q536133",shop:"outdoor"},addTags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"},countryCodes:["ch","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Kathmandu":{name:"Kathmandu",icon:"temaki-compass",imageURL:"https://graph.facebook.com/kathmandu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1736294",shop:"outdoor"},addTags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Millets":{name:"Millets",icon:"temaki-compass",imageURL:"https://graph.facebook.com/milletsonlinefans/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64822903",shop:"outdoor"},addTags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Mountain Warehouse":{name:"Mountain Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/MountainWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6925414",shop:"outdoor"},addTags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"},countryCodes:["gb","pl"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/REI":{name:"REI",icon:"temaki-compass",imageURL:"https://graph.facebook.com/9062006483/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3414933",shop:"outdoor"},addTags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"},countryCodes:["id","us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Sportsman's Warehouse":{name:"Sportsman's Warehouse",icon:"temaki-compass",imageURL:"https://graph.facebook.com/sportsmanswh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579979",shop:"outdoor"},addTags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/outdoor/Trespass":{name:"Trespass",icon:"temaki-compass",imageURL:"https://graph.facebook.com/trespass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17035733",shop:"outdoor"},addTags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"},countryCodes:["fr","gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/outpost/Wildberries":{name:"Wildberries",icon:"maki-shop",imageURL:"https://graph.facebook.com/wildberries.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24933714",shop:"outpost"},addTags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"},countryCodes:["by","ru"],terms:[],matchScore:2,suggestion:true},"shop/paint/Benjamin Moore":{name:"Benjamin Moore",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/benjaminmoorepaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4889038",shop:"paint"},addTags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/paint/Comex":{name:"Comex",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/Comex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5151654",shop:"paint"},addTags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/Jotun":{name:"Jotun",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/JotunGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1778870",shop:"paint"},addTags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"},terms:[],matchScore:2,suggestion:true},"shop/paint/National Paints":{name:"National Paints",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/NationalPaints/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073521",shop:"paint"},addTags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"},countryCodes:["ae","qa"],terms:[],matchScore:2,suggestion:true},"shop/paint/Sherwin-Williams":{name:"Sherwin-Williams",icon:"fas-paint-roller",imageURL:"https://graph.facebook.com/SherwinWilliamsforYourHome/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48881",shop:"paint"},addTags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"},terms:["sherwin williams paint store","sherwin williams paints"],matchScore:2,suggestion:true},"shop/party/Party City":{name:"Party City",icon:"temaki-balloon",imageURL:"https://graph.facebook.com/PartyCity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7140896",shop:"party"},addTags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Cookies by Design":{name:"Cookies by Design",icon:"maki-bakery",imageURL:"https://graph.facebook.com/CookiesbyDesignHQ/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5167112",shop:"pastry"},addTags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pastry/Smallcakes":{name:"Smallcakes",icon:"maki-bakery",imageURL:"https://graph.facebook.com/SmallcakesKC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62384749",shop:"pastry"},addTags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cash Converters":{name:"Cash Converters",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/CashConvertersUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5048645",shop:"pawnbroker"},addTags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"},terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Cebuana Lhuillier":{name:"Cebuana Lhuillier",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/cebuanalhuillierpawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17064661",shop:"pawnbroker"},addTags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"},countryCodes:["ph"],terms:["agencia cebuana","m lhuillier"],matchScore:2,suggestion:true},"shop/pawnbroker/Palawan Pawnshop":{name:"Palawan Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/palawan.pawnshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391488",shop:"pawnbroker"},addTags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/pawnbroker/Villarica Pawnshop":{name:"Villarica Pawnshop",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/155765647803482/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391438",shop:"pawnbroker"},addTags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"},countryCodes:["ph"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Douglas":{name:"Douglas",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/DouglasDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2052213",shop:"perfumery"},addTags:{brand:"Douglas","brand:wikidata":"Q2052213","brand:wikipedia":"de:Parfümerie Douglas",name:"Douglas",shop:"perfumery"},countryCodes:["at","ch","de","es","it","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/FAnn":{name:"FAnn",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/FAnn.cz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62391353",shop:"perfumery"},addTags:{brand:"FAnn","brand:wikidata":"Q62391353",name:"FAnn",shop:"perfumery"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/ICI PARIS XL":{name:"ICI PARIS XL",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/iciparisxlbe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q769749",shop:"perfumery"},addTags:{brand:"ICI PARIS XL","brand:wikidata":"Q769749","brand:wikipedia":"en:ICI Paris XL",name:"ICI PARIS XL",shop:"perfumery"},countryCodes:["be","lu","nl"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/Marionnaud":{name:"Marionnaud",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/Marionnaud.France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129073",shop:"perfumery"},addTags:{brand:"Marionnaud","brand:wikidata":"Q1129073","brand:wikipedia":"fr:Marionnaud",name:"Marionnaud",shop:"perfumery"},countryCodes:["at","ch","es","fr","it","sk"],terms:[],matchScore:2,suggestion:true},"shop/perfumery/O Boticário":{name:"O Boticário",icon:"temaki-perfume",imageURL:"https://graph.facebook.com/oboticario/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7073219",shop:"perfumery"},addTags:{brand:"O Boticário","brand:wikidata":"Q7073219","brand:wikipedia":"en:O Boticário",name:"O Boticário",shop:"perfumery"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/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/pet/イオンペット":{name:"イオンペット",icon:"maki-dog-park",geometry:["point","area"],tags:{"brand:wikidata":"Q11286064",shop:"pet"},addTags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/photo/Kodak Express":{name:"Kodak Express",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kodakexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6425126",shop:"photo"},addTags:{brand:"Kodak Express","brand:wikidata":"Q6425126","brand:wikipedia":"en:Kodak Express",name:"Kodak Express",shop:"photo"},terms:["kodak"],matchScore:2,suggestion:true},"shop/photo/カメラのキタムラ":{name:"カメラのキタムラ",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/kitamura.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294821",shop:"photo"},addTags:{brand:"カメラのキタムラ","brand:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","name:ja":"カメラのキタムラ",shop:"photo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/printer_ink/Cartridge World":{name:"Cartridge World",icon:"fas-print",imageURL:"https://graph.facebook.com/CartridgeWorldNewsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5047439",shop:"printer_ink"},addTags:{brand:"Cartridge World","brand:wikidata":"Q5047439","brand:wikipedia":"en:Cartridge World",name:"Cartridge World",shop:"printer_ink"},terms:[],matchScore:2,suggestion:true},"shop/rental/U-Haul":{name:"U-Haul",icon:"fas-dolly",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/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/Courir":{name:"Courir",icon:"maki-shoe",imageURL:"https://graph.facebook.com/courircom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3001258",shop:"shoes"},addTags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Crocs":{name:"Crocs",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Crocs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q926699",shop:"shoes"},addTags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/DSW":{name:"DSW",icon:"maki-shoe",imageURL:"https://graph.facebook.com/designerbrands/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5206207",shop:"shoes"},addTags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"},countryCodes:["ca","us"],terms:["designer shoe warehouse","dsw shoes"],matchScore:2,suggestion:true},"shop/shoes/Deichmann":{name:"Deichmann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Deichmann/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q664543",shop:"shoes"},addTags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Din sko":{name:"Din sko",icon:"maki-shoe",imageURL:"https://graph.facebook.com/dinsko/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10472869",shop:"shoes"},addTags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dosenbach":{name:"Dosenbach",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Dosenbach.CH/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2677329",shop:"shoes"},addTags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Dune London":{name:"Dune London",icon:"maki-shoe",imageURL:"https://graph.facebook.com/DuneLondon/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65557112",shop:"shoes"},addTags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"},countryCodes:["ch","de","fr","gb","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Ecco":{name:"Ecco",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Ecco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1280255",shop:"shoes"},addTags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/FLO":{name:"FLO",icon:"maki-shoe",imageURL:"https://graph.facebook.com/FLOShoesGlobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994802",shop:"shoes"},addTags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"},countryCodes:["al","tr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Famous Footwear":{name:"Famous Footwear",icon:"maki-shoe",imageURL:"https://graph.facebook.com/famousfootwear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433457",shop:"shoes"},addTags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Locker":{name:"Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Foot Solutions":{name:"Foot Solutions",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q69982369",shop:"shoes"},addTags:{brand:"Foot Solutions","brand:wikidata":"Q69982369",name:"Foot Solutions",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Footaction":{name:"Footaction",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footaction/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q71022064",shop:"shoes"},addTags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"},countryCodes:["ca","pr","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/G.H. Bass & Co.":{name:"G.H. Bass & Co.",icon:"maki-shoe",imageURL:"https://graph.facebook.com/G.H.Bass/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16993893",shop:"shoes"},addTags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Gabor":{name:"Gabor",icon:"maki-shoe",imageURL:"https://graph.facebook.com/gaborshoesag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1488760",shop:"shoes"},addTags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Geox":{name:"Geox",icon:"maki-shoe",imageURL:"https://graph.facebook.com/GEOX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q588001",shop:"shoes"},addTags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Görtz":{name:"Görtz",icon:"maki-shoe",imageURL:"https://graph.facebook.com/goertz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1559593",shop:"shoes"},addTags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Havaianas":{name:"Havaianas",icon:"maki-shoe",imageURL:"https://graph.facebook.com/HavaianasUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3128675",shop:"shoes"},addTags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Humanic":{name:"Humanic",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Humanic/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1636668",shop:"shoes"},addTags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"},countryCodes:["at","cz","de","hu","ro","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Hush Puppies":{name:"Hush Puppies",icon:"maki-shoe",imageURL:"https://graph.facebook.com/hushpuppiesglobal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1828588",shop:"shoes"},addTags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Jimmy Choo":{name:"Jimmy Choo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JimmyChoo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5213855",shop:"shoes"},addTags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Johnston & Murphy":{name:"Johnston & Murphy",icon:"maki-shoe",imageURL:"https://graph.facebook.com/johnstonmurphy/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6268615",shop:"shoes"},addTags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Jones Bootmaker":{name:"Jones Bootmaker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/JonesBootmaker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6275139",shop:"shoes"},addTags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Journeys":{name:"Journeys",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Journeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994838",shop:"shoes"},addTags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kari":{name:"Kari",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shopkari/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q47155680",shop:"shoes"},addTags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Kids Foot Locker":{name:"Kids Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Kurt Geiger":{name:"Kurt Geiger",icon:"maki-shoe",imageURL:"https://graph.facebook.com/kurtgeigerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17063744",shop:"shoes"},addTags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/shoes/La Halle aux Chaussures":{name:"La Halle aux Chaussures",icon:"maki-shoe",imageURL:"https://graph.facebook.com/lahalle.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390731",shop:"shoes"},addTags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Lady Foot Locker":{name:"Lady Foot Locker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/footlocker/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63335",shop:"shoes"},addTags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Manfield (Netherlands)":{name:"Manfield (Netherlands)",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Manfieldshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58328872",shop:"shoes"},addTags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Marko":{name:"Marko",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q67861181",shop:"shoes"},addTags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"},countryCodes:["by","ru"],terms:["Марко"],matchScore:2,suggestion:true},"shop/shoes/Mephisto":{name:"Mephisto",icon:"maki-shoe",imageURL:"https://graph.facebook.com/mephisto.usa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q822975",shop:"shoes"},addTags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Merrell":{name:"Merrell",icon:"maki-shoe",imageURL:"https://graph.facebook.com/merrell/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1921997",shop:"shoes"},addTags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Minelli":{name:"Minelli",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Minelli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994831",shop:"shoes"},addTags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Naturalizer":{name:"Naturalizer",icon:"maki-shoe",imageURL:"https://graph.facebook.com/naturalizer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012038",shop:"shoes"},addTags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"},countryCodes:["ca","cn","gu","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/New Balance":{name:"New Balance",icon:"maki-shoe",imageURL:"https://graph.facebook.com/newbalanceusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q742988",shop:"shoes"},addTags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Office":{name:"Office",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Officeshoes1/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079121",shop:"shoes"},addTags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"},countryCodes:["de","gb","ie","ro"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Payless ShoeSource":{name:"Payless ShoeSource",icon:"maki-shoe",imageURL:"https://graph.facebook.com/payless/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7156755",shop:"shoes"},addTags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"},terms:["payless"],matchScore:2,suggestion:true},"shop/shoes/Quick Schuh":{name:"Quick Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/quick.schuh/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2123069",shop:"shoes"},addTags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/R.M.Williams":{name:"R.M.Williams",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q65042966",shop:"shoes"},addTags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rack Room Shoes":{name:"Rack Room Shoes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/myrackroomshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17109937",shop:"shoes"},addTags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Red Wing":{name:"Red Wing",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RedWingShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q934096",shop:"shoes"},addTags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"},countryCodes:["de","gb","nl","us"],terms:["red wing shoes"],matchScore:2,suggestion:true},"shop/shoes/Reno":{name:"Reno",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RENO/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2144204",shop:"shoes"},addTags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"},countryCodes:["at","ch","de","hu","sk"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Rieker":{name:"Rieker",icon:"maki-shoe",imageURL:"https://graph.facebook.com/riekerofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2152193",shop:"shoes"},addTags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Rockport":{name:"Rockport",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Rockport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4048384",shop:"shoes"},addTags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Runners Point":{name:"Runners Point",icon:"maki-shoe",imageURL:"https://graph.facebook.com/RunnersPoint84/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2176418",shop:"shoes"},addTags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Salamander":{name:"Salamander",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalamanderCzech/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q878354",shop:"shoes"},addTags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/Salvatore Ferragamo":{name:"Salvatore Ferragamo",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SalvatoreFerragamo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3946053",shop:"shoes"},addTags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"},terms:[],matchScore:2,suggestion:true},"shop/shoes/San Marina":{name:"San Marina",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sanmarina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3471558",shop:"shoes"},addTags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Scapino":{name:"Scapino",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ScapinoNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2298792",shop:"shoes"},addTags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh":{name:"Schuh",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7432952",shop:"shoes"},addTags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"},countryCodes:["de","gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuh-Mann":{name:"Schuh-Mann",icon:"maki-shoe",imageURL:"https://graph.facebook.com/schuhmann.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133314",shop:"shoes"},addTags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Schuhkay":{name:"Schuhkay",icon:"maki-shoe",imageURL:"https://graph.facebook.com/134116200015210/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66009415",shop:"shoes"},addTags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Carnival":{name:"Shoe Carnival",icon:"maki-shoe",imageURL:"https://graph.facebook.com/ShoeCarnival/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500007",shop:"shoes"},addTags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Shoe Zone":{name:"Shoe Zone",icon:"maki-shoe",imageURL:"https://graph.facebook.com/shoezone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7500016",shop:"shoes"},addTags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Siemes Schuhcenter":{name:"Siemes Schuhcenter",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Schuhcenter.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2800720",shop:"shoes"},addTags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Skechers":{name:"Skechers",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SKECHERS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2945643",shop:"shoes"},addTags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"},terms:["sketchers"],matchScore:2,suggestion:true},"shop/shoes/Snipes":{name:"Snipes",icon:"maki-shoe",imageURL:"https://graph.facebook.com/Snipes.com/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42306166",shop:"shoes"},addTags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"},countryCodes:["at","ch","de","es","fr","it","nl","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Soft Moc":{name:"Soft Moc",icon:"maki-shoe",imageURL:"https://graph.facebook.com/softmocshoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65012391",shop:"shoes"},addTags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Sperry":{name:"Sperry",icon:"maki-shoe",imageURL:"https://graph.facebook.com/sperry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7576421",shop:"shoes"},addTags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"},countryCodes:["us"],terms:["sperry top sider"],matchScore:2,suggestion:true},"shop/shoes/Steve Madden":{name:"Steve Madden",icon:"maki-shoe",imageURL:"https://graph.facebook.com/SteveMaddenShoes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25352034",shop:"shoes"},addTags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Stride Rite":{name:"Stride Rite",icon:"maki-shoe",imageURL:"https://graph.facebook.com/striderite/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2356171",shop:"shoes"},addTags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/shoes/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/Golf Galaxy":{name:"Golf Galaxy",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGolf%20Galaxy%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q69364358",shop:"sports"},addTags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Hervis":{name:"Hervis",icon:"fas-futbol",imageURL:"https://graph.facebook.com/hervissports.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1614816",shop:"sports"},addTags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"},countryCodes:["at","cz","de","hr","hu","ro","si"],terms:["hervis sport","hervis sports"],matchScore:2,suggestion:true},"shop/sports/Hibbett Sports":{name:"Hibbett Sports",icon:"fas-futbol",imageURL:"https://graph.facebook.com/HibbettSports/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5750671",shop:"sports"},addTags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/sports/Intersport":{name:"Intersport",icon:"fas-futbol",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://graph.facebook.com/RebelSport/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18636397",shop:"sports"},addTags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"},countryCodes:["au","nz"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport 2000":{name:"Sport 2000",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SPORT2000France/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q262394",shop:"sports"},addTags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"},countryCodes:["at","de","fr","nl"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Chek":{name:"Sport Chek",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportChekOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3494037",shop:"sports"},addTags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sport Zone":{name:"Sport Zone",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q18485899",shop:"sports"},addTags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sporting Life":{name:"Sporting Life",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportingLifeCan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7579583",shop:"sports"},addTags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sportisimo":{name:"Sportisimo",icon:"fas-futbol",imageURL:"https://graph.facebook.com/1463426373966592/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q54974273",shop:"sports"},addTags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Authority":{name:"Sports Authority",icon:"fas-futbol",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSports%20Authority%20logo2011.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7579688",shop:"sports"},addTags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"},terms:[],matchScore:2,suggestion:true},"shop/sports/Sports Direct":{name:"Sports Direct",icon:"fas-futbol",imageURL:"https://graph.facebook.com/SportsDirect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"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/Sprinter":{name:"Sprinter",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q6133465",shop:"sports"},addTags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/sports/Stadium":{name:"Stadium",icon:"fas-futbol",imageURL:"https://graph.facebook.com/stadium.finland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993863",shop:"sports"},addTags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"},countryCodes:["de","dk","fi","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/XXL":{name:"XXL",icon:"fas-futbol",imageURL:"https://graph.facebook.com/xxlnorge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12010840",shop:"sports"},addTags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"},countryCodes:["fi","no","se"],terms:[],matchScore:2,suggestion:true},"shop/sports/Декатлон":{name:"Декатлон",icon:"fas-futbol",imageURL:"https://graph.facebook.com/DecathlonUSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q509349",shop:"sports"},addTags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"},countryCodes:["bg","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/sports/Спортмастер":{name:"Спортмастер",icon:"fas-futbol",imageURL:"https://graph.facebook.com/sportmaster.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4438176",shop:"sports"},addTags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"},countryCodes:["by","kz","ru","ua"],terms:["спортмастер гипер"],matchScore:2,suggestion:true},"shop/stationery/Bureau Vallée":{name:"Bureau Vallée",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/BureauVallee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18385014",shop:"stationery"},addTags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/stationery/McPaper":{name:"McPaper",icon:"fas-paperclip",geometry:["point","area"],tags:{"brand:wikidata":"Q1915329",shop:"stationery"},addTags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Office Depot":{name:"Office Depot",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1337797",shop:"stationery"},addTags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/OfficeMax":{name:"OfficeMax",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/OfficeDepot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079111",shop:"stationery"},addTags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"},countryCodes:["mx","nz","us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Officeworks":{name:"Officeworks",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/officeworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7079486",shop:"stationery"},addTags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Pagro":{name:"Pagro",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/pagro.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57550022",shop:"stationery"},addTags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paper Source":{name:"Paper Source",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/PaperSource/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25000269",shop:"stationery"},addTags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Paperchase":{name:"Paperchase",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/paperchase/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7132739",shop:"stationery"},addTags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Ryman":{name:"Ryman",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/ryman/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7385188",shop:"stationery"},addTags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Smiggle":{name:"Smiggle",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/smiggle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7544536",shop:"stationery"},addTags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"},countryCodes:["at","gb","hk","ie","my","nz","sg"],terms:[],matchScore:2,suggestion:true},"shop/stationery/Staples":{name:"Staples",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/staples/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q785943",shop:"stationery"},addTags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"},terms:[],matchScore:2,suggestion:true},"shop/stationery/Комус":{name:"Комус",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/komusclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4230314",shop:"stationery"},addTags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/storage_rental/Extra Space Storage":{name:"Extra Space Storage",icon:"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:["extra space"],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/storage_rental/U-Haul":{name:"U-Haul",icon:"fas-warehouse",imageURL:"https://graph.facebook.com/uhaul/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7862902",shop:"storage_rental"},addTags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"},countryCodes:["ca","us"],terms:["uhaul neighborhood dealer"],matchScore:2,suggestion:true},"shop/supermarket/8 à Huit":{name:"8 à Huit",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fashion8a8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2818601",shop:"supermarket"},addTags:{brand:"8 à Huit","brand:wikidata":"Q2818601","brand:wikipedia":"fr:8 à Huit",name:"8 à Huit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/99 Ranch Market":{name:"99 Ranch Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/99RanchMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646307",shop:"supermarket"},addTags:{brand:"99 Ranch Market","brand:wikidata":"Q4646307","brand:wikipedia":"en:99 Ranch Market",cuisine:"asian",name:"99 Ranch Market","name:en":"99 Ranch Market","name:zh-Hans":"大华超级市场","name:zh-Hant":"大華超級市場",shop:"supermarket"},countryCodes:["us"],terms:["99 ranch","ranch 99"],matchScore:2,suggestion:true},"shop/supermarket/A&O":{name:"A&O",icon:"maki-grocery",imageURL:"https://graph.facebook.com/www.aeo.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3600279",shop:"supermarket"},addTags:{brand:"A&O","brand:wikidata":"Q3600279","brand:wikipedia":"it:A&O",name:"A&O",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/A101":{name:"A101",icon:"maki-grocery",imageURL:"https://graph.facebook.com/a101iletisim/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6034496",shop:"supermarket"},addTags:{brand:"A101","brand:wikidata":"Q6034496","brand:wikipedia":"tr:A101",name:"A101",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/AD Delhaize":{name:"AD Delhaize",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Delhaize/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1184173",shop:"supermarket"},addTags:{brand:"AD Delhaize","brand:wikidata":"Q1184173","brand:wikipedia":"fr:Delhaize",name:"AD Delhaize",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ADEG":{name:"ADEG",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mein.adeg/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q290211",shop:"supermarket"},addTags:{brand:"ADEG","brand:wikidata":"Q290211","brand:wikipedia":"de:ADEG Österreich",name:"ADEG",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Acme":{name:"Acme",icon:"maki-grocery",imageURL:"https://graph.facebook.com/acmemarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q341975",shop:"supermarket"},addTags:{brand:"Acme","brand:wikidata":"Q341975","brand:wikipedia":"en:Acme Markets",name:"Acme",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ahorramás":{name:"Ahorramás",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ahorramas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58221883",shop:"supermarket"},addTags:{brand:"Ahorramás","brand:wikidata":"Q58221883",name:"Ahorramás",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert":{name:"Albert",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertceskarepublika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9144241",shop:"supermarket"},addTags:{brand:"Albert","brand:wikidata":"Q9144241","brand:wikipedia":"cs:Albert (obchodní řetězec)",name:"Albert",shop:"supermarket"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albert Heijn":{name:"Albert Heijn",icon:"maki-grocery",imageURL:"https://graph.facebook.com/albertheijn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1653985",shop:"supermarket"},addTags:{brand:"Albert Heijn","brand:wikidata":"Q1653985","brand:wikipedia":"nl:Albert Heijn (supermarkt)",name:"Albert Heijn",shop:"supermarket"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Albertsons":{name:"Albertsons",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Albertsons/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4712282",shop:"supermarket"},addTags:{brand:"Albertsons","brand:wikidata":"Q4712282","brand:wikipedia":"en:Albertsons",name:"Albertsons",shop:"supermarket"},countryCodes:["us"],terms:["albertsons supermarket"],matchScore:2,suggestion:true},"shop/supermarket/Alcampo":{name:"Alcampo",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q2832081",shop:"supermarket"},addTags:{brand:"Alcampo","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi":{name:"Aldi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.USA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q125054",shop:"supermarket"},addTags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Nord":{name:"Aldi Nord",icon:"maki-grocery",imageURL:"https://graph.facebook.com/154533341244676/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171373",shop:"supermarket"},addTags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Aldi Süd":{name:"Aldi Süd",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ALDI.SUED/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41171672",shop:"supermarket"},addTags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alfamart":{name:"Alfamart",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alfamartku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23745600",shop:"supermarket"},addTags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"},countryCodes:["id","ph"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alimerka":{name:"Alimerka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alimerka.es/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16482738",shop:"supermarket"},addTags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Alnatura":{name:"Alnatura",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Alnatura/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q876811",shop:"supermarket"},addTags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"},countryCodes:["ch","de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Amigo":{name:"Amigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/amigopuertorico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4746234",shop:"supermarket"},addTags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"},countryCodes:["us"],terms:["amigo puerto rico","amigo supermarket","supermercado amigo"],matchScore:2,suggestion:true},"shop/supermarket/Asda":{name:"Asda",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Asda/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q297410",shop:"supermarket"},addTags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Atacadão":{name:"Atacadão",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Atacadaosa.Oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2868739",shop:"supermarket"},addTags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Auchan":{name:"Auchan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/BI-LO":{name:"BI-LO",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BILOSuperSaver/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835620",shop:"supermarket"},addTags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/BM":{name:"BM",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BMSupermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073462",shop:"supermarket"},addTags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bashas'":{name:"Bashas'",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BashasSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4866786",shop:"supermarket"},addTags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Biedronka":{name:"Biedronka",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BiedronkaCodziennie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q857182",shop:"supermarket"},addTags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big Bazaar":{name:"Big Bazaar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3631008",shop:"supermarket"},addTags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"},countryCodes:["in"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Big C":{name:"Big C",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BigCBigService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q858665",shop:"supermarket"},addTags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"},countryCodes:["th","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/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/Bónus":{name:"Bónus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bonus.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3480158",shop:"supermarket"},addTags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"},countryCodes:["fo","is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/C-Town Supermarkets":{name:"C-Town Supermarkets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Ctown.supermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5005929",shop:"supermarket"},addTags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/CBA":{name:"CBA",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCBA%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q779845",shop:"supermarket"},addTags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/COOP Jednota":{name:"COOP Jednota",icon:"maki-grocery",imageURL:"https://graph.facebook.com/COOPJednota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q41629254",shop:"supermarket"},addTags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"},countryCodes:["cz","sk"],terms:["jednota"],matchScore:2,suggestion:true},"shop/supermarket/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/Dierbergs":{name:"Dierbergs",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dierbergs/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5274978",shop:"supermarket"},addTags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dino":{name:"Dino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketdinobieniewice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11694239",shop:"supermarket"},addTags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dirk van den Broek":{name:"Dirk van den Broek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dirksupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17502722",shop:"supermarket"},addTags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Argentina)":{name:"Disco (Argentina)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DiscoArgentina/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135978",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Disco (Uruguay)":{name:"Disco (Uruguay)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/discouruguay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16636819",shop:"supermarket"},addTags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"},countryCodes:["uy"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Diska":{name:"Diska",icon:"maki-grocery",imageURL:"https://graph.facebook.com/diskamarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62390177",shop:"supermarket"},addTags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dollar General Market":{name:"Dollar General Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/dollargeneral/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q145168",shop:"supermarket"},addTags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Dunnes Stores":{name:"Dunnes Stores",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DunnesStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1266203",shop:"supermarket"},addTags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/E-Center":{name:"E-Center",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"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/Edeka xpress":{name:"Edeka xpress",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka xpress",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eko":{name:"Eko",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q9251859",shop:"supermarket"},addTags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekom":{name:"Ekom",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1013432382051351/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62073442",shop:"supermarket"},addTags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ekono":{name:"Ekono",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotipo%20Ekono.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2842729",shop:"supermarket"},addTags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"},countryCodes:["cl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eroski":{name:"Eroski",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"},countryCodes:["es","gi"],terms:["charter","eroski center"],matchScore:2,suggestion:true},"shop/supermarket/Eroski City":{name:"Eroski City",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eroski/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1361349",shop:"supermarket"},addTags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Esselunga":{name:"Esselunga",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Esselunga/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1059636",shop:"supermarket"},addTags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"},countryCodes:["it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/EuroSpin":{name:"EuroSpin",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurospinItaliaSpa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1374674",shop:"supermarket"},addTags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"},countryCodes:["it","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Eurospar":{name:"Eurospar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EurosparIreland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12309283",shop:"supermarket"},addTags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Extra":{name:"Extra",icon:"maki-grocery",imageURL:"https://graph.facebook.com/extramorkved/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11964085",shop:"supermarket"},addTags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"},terms:["coop extra"],matchScore:2,suggestion:true},"shop/supermarket/Famila":{name:"Famila",icon:"maki-grocery",imageURL:"https://graph.facebook.com/1674632829509874/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1395108",shop:"supermarket"},addTags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"},countryCodes:["de","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Family Fare":{name:"Family Fare",icon:"maki-grocery",imageURL:"https://graph.facebook.com/shopfamilyfare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19868045",shop:"supermarket"},addTags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Fareway":{name:"Fareway",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farewaystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434998",shop:"supermarket"},addTags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Farm Boy":{name:"Farm Boy",icon:"maki-grocery",imageURL:"https://graph.facebook.com/farmboy.ca/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5435469",shop:"supermarket"},addTags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/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/Fry's Food and Drug":{name:"Fry's Food and Drug",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFry's%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5506547",shop:"supermarket"},addTags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"},countryCodes:["us"],terms:["frys"],matchScore:2,suggestion:true},"shop/supermarket/Føtex":{name:"Føtex",icon:"maki-grocery",imageURL:"https://graph.facebook.com/foetexdk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1480395",shop:"supermarket"},addTags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/G20":{name:"G20",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermarchesg20/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3504731",shop:"supermarket"},addTags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/GBarbosa":{name:"GBarbosa",icon:"maki-grocery",imageURL:"https://graph.facebook.com/oficialgbarbosa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10287817",shop:"supermarket"},addTags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"},countryCodes:["br"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gadis":{name:"Gadis",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Gadis.supermercados/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12389151",shop:"supermarket"},addTags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant Eagle":{name:"Giant Eagle",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gianteagleinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1522721",shop:"supermarket"},addTags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant Hypermarket":{name:"Giant Hypermarket",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Giant%20Hypermarket.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4217013",shop:"supermarket"},addTags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"},countryCodes:["id","my","sg","vn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Carlisle)":{name:"Giant (Carlisle)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/giantfoodstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558332",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558332","brand:wikipedia":"en:Giant Food Stores",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Giant (Landover)":{name:"Giant (Landover)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GiantFood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5558336",shop:"supermarket"},addTags:{brand:"Giant","brand:wikidata":"Q5558336","brand:wikipedia":"en:Giant Food (Landover)",name:"Giant",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Globus":{name:"Globus",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Globus.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q457503",shop:"supermarket"},addTags:{brand:"Globus","brand:wikidata":"Q457503","brand:wikipedia":"en:Globus (hypermarket)",name:"Globus",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Gordon Food Service":{name:"Gordon Food Service",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GordonFoodService/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1538006",shop:"supermarket"},addTags:{brand:"Gordon Food Service","brand:wikidata":"Q1538006","brand:wikipedia":"en:Gordon Food Service",name:"Gordon Food Service",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grand Frais":{name:"Grand Frais",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GrandFrais/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3114675",shop:"supermarket"},addTags:{brand:"Grand Frais","brand:wikidata":"Q3114675","brand:wikipedia":"fr:Grand Frais",name:"Grand Frais",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Grocery Outlet":{name:"Grocery Outlet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/GroceryOutletInc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5609934",shop:"supermarket"},addTags:{brand:"Grocery Outlet","brand:wikidata":"Q5609934","brand:wikipedia":"en:Grocery Outlet",name:"Grocery Outlet",official_name:"Grocery Outlet Bargain Market",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Groszek":{name:"Groszek",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sklepy.Groszek/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q9280965",shop:"supermarket"},addTags:{brand:"Groszek","brand:wikidata":"Q9280965","brand:wikipedia":"pl:Groszek (sieć sklepów)",name:"Groszek",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Géant Casino":{name:"Géant Casino",icon:"maki-grocery",imageURL:"https://graph.facebook.com/geantcasino/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1380537",shop:"supermarket"},addTags:{brand:"Géant Casino","brand:wikidata":"Q1380537","brand:wikipedia":"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/Hero Supermarket":{name:"Hero Supermarket",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12485604",shop:"supermarket"},addTags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"},countryCodes:["id"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Heron Foods":{name:"Heron Foods",icon:"maki-grocery",imageURL:"https://graph.facebook.com/heronfoodslimited/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5743472",shop:"supermarket"},addTags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hofer":{name:"Hofer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HOFER.AT/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15815751",shop:"supermarket"},addTags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"},countryCodes:["at","si"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hoogvliet":{name:"Hoogvliet",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Hoogvliet.supermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2770647",shop:"supermarket"},addTags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hy-Vee":{name:"Hy-Vee",icon:"maki-grocery",imageURL:"https://graph.facebook.com/HyVee/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1639719",shop:"supermarket"},addTags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Hyper U":{name:"Hyper U",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ULesCommercants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2529029",shop:"supermarket"},addTags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA":{name:"ICA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"},countryCodes:["no","se"],terms:["ica supermarket"],matchScore:2,suggestion:true},"shop/supermarket/ICA Kvantum":{name:"ICA Kvantum",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"},countryCodes:["se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ICA Maxi":{name:"ICA Maxi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ICA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1663776",shop:"supermarket"},addTags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"},countryCodes:["no","se"],terms:["maxi"],matchScore:2,suggestion:true},"shop/supermarket/IDEA":{name:"IDEA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IDEASrbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461622",shop:"supermarket"},addTags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"},countryCodes:["rs"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/IGA":{name:"IGA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/IGACorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3146662",shop:"supermarket"},addTags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"},countryCodes:["au","ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ingles":{name:"Ingles",icon:"maki-grocery",imageURL:"https://graph.facebook.com/inglesmarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6032595",shop:"supermarket"},addTags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché":{name:"Intermarché",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Intermarché Super":{name:"Intermarché Super",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tousuniscontrelaviechere/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3153200",shop:"supermarket"},addTags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"},countryCodes:["be","fr","pl","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Interspar":{name:"Interspar",icon:"maki-grocery",imageURL:"https://graph.facebook.com/INTERSPAR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15820339",shop:"supermarket"},addTags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"},countryCodes:["at"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Irma":{name:"Irma",icon:"maki-grocery",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:["kroger food and drug","krogers"],matchScore:2,suggestion:true},"shop/supermarket/Kroger Marketplace":{name:"Kroger Marketplace",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kroger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q153417",shop:"supermarket"},addTags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Krónan":{name:"Krónan",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kronan.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16419327",shop:"supermarket"},addTags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Kvickly":{name:"Kvickly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kvickly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7061148",shop:"supermarket"},addTags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"},countryCodes:["dk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Anónima":{name:"La Anónima",icon:"maki-grocery",imageURL:"https://graph.facebook.com/laanonimaoficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6135985",shop:"supermarket"},addTags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"},countryCodes:["ar"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Comer":{name:"La Comer",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaComerOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26765126",shop:"supermarket"},addTags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Michoacana Meat Market":{name:"La Michoacana Meat Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lamichoacanameatmarket.officialpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6463872",shop:"supermarket"},addTags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"},countryCodes:["us"],terms:["la michoacana"],matchScore:2,suggestion:true},"shop/supermarket/La Plaza de DIA":{name:"La Plaza de DIA",icon:"maki-grocery",imageURL:"https://graph.facebook.com/LaPlazadeDIA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58904673",shop:"supermarket"},addTags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/La Vie Claire":{name:"La Vie Claire",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Lavieclaire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3213589",shop:"supermarket"},addTags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Landi":{name:"Landi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/landivechigen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1803010",shop:"supermarket"},addTags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"},countryCodes:["ch"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Leader Price":{name:"Leader Price",icon:"maki-grocery",imageURL:"https://graph.facebook.com/leaderpriceofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2181426",shop:"supermarket"},addTags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"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/M&S Foodhall":{name:"M&S Foodhall",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"},terms:["marks & spencer foodhall"],matchScore:2,suggestion:true},"shop/supermarket/M&S Simply Food":{name:"M&S Simply Food",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marksandspencerrussia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q714491",shop:"supermarket"},addTags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"},terms:["marks & spencer simply food"],matchScore:2,suggestion:true},"shop/supermarket/MD":{name:"MD",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mdspa.it/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3841263",shop:"supermarket"},addTags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"},countryCodes:["it"],terms:["md discount"],matchScore:2,suggestion:true},"shop/supermarket/MPREIS":{name:"MPREIS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MPREIS.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873491",shop:"supermarket"},addTags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"},countryCodes:["at","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marc's":{name:"Marc's",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MarcsStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17080259",shop:"supermarket"},addTags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Markant":{name:"Markant",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57523365",shop:"supermarket"},addTags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Market Basket":{name:"Market Basket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/marketbasket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2079198",shop:"supermarket"},addTags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Marktkauf":{name:"Marktkauf",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarktkauf.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1533254",shop:"supermarket"},addTags:{brand:"Marktkauf","brand:wikidata":"Q1533254","brand:wikipedia":"de:Marktkauf Holding",name:"Marktkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Martin's Super Markets":{name:"Martin's Super Markets",icon:"maki-grocery",imageURL:"https://graph.facebook.com/martinssupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6774803",shop:"supermarket"},addTags:{brand:"Martin's Super Markets","brand:wikidata":"Q6774803","brand:wikipedia":"en:Martin's Super Markets",name:"Martin's Super Markets",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Masymas":{name:"Masymas",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMasymas%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6135987",shop:"supermarket"},addTags:{brand:"Masymas","brand:wikidata":"Q6135987","brand:wikipedia":"es:Supermercados Masymas",name:"Masymas",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Match":{name:"Match",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarchesMatch/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q513977",shop:"supermarket"},addTags:{brand:"Match","brand:wikidata":"Q513977","brand:wikipedia":"en:Match (supermarket)",name:"Match",shop:"supermarket"},countryCodes:["be","fr","hu","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxi Dia":{name:"Maxi Dia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/DIAEspana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q925132",shop:"supermarket"},addTags:{brand:"Maxi Dia","brand:wikidata":"Q925132","brand:wikipedia":"es:Supermercados DIA",name:"Maxi Dia",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima X":{name:"Maxima X",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima X","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima X",shop:"supermarket"},countryCodes:["bg","ee","lt","lv"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XX":{name:"Maxima XX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Maxima XXX":{name:"Maxima XXX",icon:"maki-grocery",imageURL:"https://graph.facebook.com/MaximaLV/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1881222",shop:"supermarket"},addTags:{brand:"Maxima XXX","brand:wikidata":"Q1881222","brand:wikipedia":"en:Maxima Group",name:"Maxima XXX",shop:"supermarket"},countryCodes:["bg","ee","lt","lv","pl"],terms:["maxima"],matchScore:2,suggestion:true},"shop/supermarket/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"},countryCodes:["es","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Mercator":{name:"Mercator",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Mercator/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q738412",shop:"supermarket"},addTags:{brand:"Mercator","brand:wikidata":"Q738412","brand:wikipedia":"en:Mercator (retail)",name:"Mercator",shop:"supermarket"},countryCodes:["ba","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/NP":{name:"NP",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNP-Markt%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15836148",shop:"supermarket"},addTags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"},terms:["np-markt"],matchScore:2,suggestion:true},"shop/supermarket/Nah & Frisch":{name:"Nah & Frisch",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahundfrisch.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1963643",shop:"supermarket"},addTags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"},countryCodes:["at","de"],terms:["nah und frisch"],matchScore:2,suggestion:true},"shop/supermarket/Nahkauf":{name:"Nahkauf",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nahkauf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57515238",shop:"supermarket"},addTags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Naturalia":{name:"Naturalia",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Naturaliamagasinsbio/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3337081",shop:"supermarket"},addTags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto Marken-Discount":{name:"Netto Marken-Discount",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettomarkendiscount/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q879858",shop:"supermarket"},addTags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Les Mousquetaires)":{name:"Netto (Les Mousquetaires)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2720988",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"},countryCodes:["fr","pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Netto (Salling)":{name:"Netto (Salling)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nettodk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q552652",shop:"supermarket"},addTags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"},countryCodes:["da","de","pl","se"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Nettó (Iceland)":{name:"Nettó (Iceland)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/netto.is/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67205962",shop:"supermarket"},addTags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"},countryCodes:["is"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/New World":{name:"New World",icon:"maki-grocery",imageURL:"https://graph.facebook.com/newworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7012488",shop:"supermarket"},addTags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"},countryCodes:["nz"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/No Frills":{name:"No Frills",icon:"maki-grocery",imageURL:"https://graph.facebook.com/nofrillsCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3342407",shop:"supermarket"},addTags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norfa XL":{name:"Norfa XL",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Norfalt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1998983",shop:"supermarket"},addTags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"},countryCodes:["lt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Norma":{name:"Norma",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNorma%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q450180",shop:"supermarket"},addTags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"},countryCodes:["at","cz","de","fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Northern Store":{name:"Northern Store",icon:"maki-grocery",imageURL:"https://graph.facebook.com/TheNorthWestCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7754361",shop:"supermarket"},addTags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Okay":{name:"Okay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/okaycompact/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2159701",shop:"supermarket"},addTags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"},countryCodes:["be"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Olímpica":{name:"Olímpica",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupertiendaOlimpica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q24749847",shop:"supermarket"},addTags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"},countryCodes:["co"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/PLUS":{name:"PLUS",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PLUSsupermarkt/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1978981",shop:"supermarket"},addTags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/POLOmarket":{name:"POLOmarket",icon:"maki-grocery",imageURL:"https://graph.facebook.com/polomarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11821937",shop:"supermarket"},addTags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Palí":{name:"Palí",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PaliCostaRica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1064887",shop:"supermarket"},addTags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"},countryCodes:["cr","ni"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pam":{name:"Pam",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pampanoramaufficiale/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3777398",shop:"supermarket"},addTags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"},countryCodes:["ch","it"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Patel Brothers":{name:"Patel Brothers",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pbrosfan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55641396",shop:"supermarket"},addTags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pavilions":{name:"Pavilions",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pavilions/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7155886",shop:"supermarket"},addTags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Penny":{name:"Penny",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPennylogo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q284688",shop:"supermarket"},addTags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"},countryCodes:["at","cz","de","hu","it","ro"],terms:["penny market","penny markt"],matchScore:2,suggestion:true},"shop/supermarket/Pick 'n Save":{name:"Pick 'n Save",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PickNSaveStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7371288",shop:"supermarket"},addTags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"},countryCodes:["us","za"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pick n Pay":{name:"Pick n Pay",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Picknpay/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7190735",shop:"supermarket"},addTags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piggly Wiggly":{name:"Piggly Wiggly",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pigglywigglystores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3388303",shop:"supermarket"},addTags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"},countryCodes:["gb","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Pingo Doce":{name:"Pingo Doce",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pingodoce/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1575057",shop:"supermarket"},addTags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"},countryCodes:["pt"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Piotr i Paweł":{name:"Piotr i Paweł",icon:"maki-grocery",imageURL:"https://graph.facebook.com/piotripawelstronaoficjalna/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2096356",shop:"supermarket"},addTags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plaza Vea":{name:"Plaza Vea",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlazaVeaOficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7203672",shop:"supermarket"},addTags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Plodine":{name:"Plodine",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PlodineHrvatska/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58040098",shop:"supermarket"},addTags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Poiesz":{name:"Poiesz",icon:"maki-grocery",imageURL:"https://graph.facebook.com/poieszsupermarkten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2521700",shop:"supermarket"},addTags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (Kansas City)":{name:"Price Chopper (Kansas City)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mypricechopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242572",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Price Chopper (New York)":{name:"Price Chopper (New York)",icon:"maki-grocery",imageURL:"https://graph.facebook.com/PriceChopper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7242574",shop:"supermarket"},addTags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prisma":{name:"Prisma",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prisma.fi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12047031",shop:"supermarket"},addTags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"},countryCodes:["ee","fi","ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Prix":{name:"Prix",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prixqualitaitaliana/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61994819",shop:"supermarket"},addTags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"},countryCodes:["it"],terms:["prix quality"],matchScore:2,suggestion:true},"shop/supermarket/Profi":{name:"Profi",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Profi.ro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q956664",shop:"supermarket"},addTags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"},countryCodes:["be","hu","ro"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Provigo":{name:"Provigo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ProvigoleMarcheTroisRivieres/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3408306",shop:"supermarket"},addTags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"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/Smart & Final":{name:"Smart & Final",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SmartFinal/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7543916",shop:"supermarket"},addTags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"},countryCodes:["mx","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSmithsFoodDrug-logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7544856",shop:"supermarket"},addTags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sobeys":{name:"Sobeys",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Sobeys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1143340",shop:"supermarket"},addTags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Soriana":{name:"Soriana",icon:"maki-grocery",imageURL:"https://graph.facebook.com/sorianacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q735562",shop:"supermarket"},addTags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"},countryCodes:["mx"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Spar":{name:"Spar",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/639011130107633664/nLN6cXfa_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q610492",shop:"supermarket"},addTags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Społem":{name:"Społem",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SpolemSpoldzielczoscSpozywcow/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11826043",shop:"supermarket"},addTags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Sprouts Farmers Market":{name:"Sprouts Farmers Market",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SproutsFarmersMarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7581369",shop:"supermarket"},addTags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"},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/nah und gut":{name:"nah und gut",icon:"maki-grocery",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q701755",shop:"supermarket"},addTags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"nah und gut",shop:"supermarket"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Şok":{name:"Şok",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SokMarketler/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19613992",shop:"supermarket"},addTags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"},countryCodes:["tr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ΑΒ Βασιλόπουλος":{name:"ΑΒ Βασιλόπουλος",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ab.vassilopoulos.sa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4721807",shop:"supermarket"},addTags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Γαλαξίας":{name:"Γαλαξίας",icon:"maki-grocery",imageURL:"https://graph.facebook.com/galaxias.sm/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5518063",shop:"supermarket"},addTags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Μασούτης":{name:"Μασούτης",icon:"maki-grocery",imageURL:"https://graph.facebook.com/masoutis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6783887",shop:"supermarket"},addTags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Σκλαβενίτης":{name:"Σκλαβενίτης",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q7536037",shop:"supermarket"},addTags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"},countryCodes:["gr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Russia)":{name:"Абсолют (Russia)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389597",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Абсолют (Ukraine)":{name:"Абсолют (Ukraine)",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q62389546",shop:"supermarket"},addTags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Азбука Вкуса":{name:"Азбука Вкуса",icon:"maki-grocery",imageURL:"https://graph.facebook.com/azbukavkusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4058209",shop:"supermarket"},addTags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Атак":{name:"Атак",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1565040269/logo_schiever_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2868738",shop:"supermarket"},addTags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Ашан":{name:"Ашан",icon:"maki-grocery",imageURL:"https://graph.facebook.com/auchan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q758603",shop:"supermarket"},addTags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"},countryCodes:["ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Брусничка":{name:"Брусничка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/freshmarket.brusnichka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21656645",shop:"supermarket"},addTags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Булмаг":{name:"Булмаг",icon:"maki-grocery",imageURL:"https://graph.facebook.com/BulMagSupermarkets/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66133376",shop:"supermarket"},addTags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"},countryCodes:["bg"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виктория":{name:"Виктория",icon:"maki-grocery",imageURL:"https://graph.facebook.com/SupermarketVictoria/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4111046",shop:"supermarket"},addTags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Виталюр":{name:"Виталюр",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vitalur.by/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55663075",shop:"supermarket"},addTags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Вопак":{name:"Вопак",icon:"maki-grocery",imageURL:"https://graph.facebook.com/vopak.com.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30966107",shop:"supermarket"},addTags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гроздь":{name:"Гроздь",icon:"maki-grocery",imageURL:"https://graph.facebook.com/grozdmag/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21638412",shop:"supermarket"},addTags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Гулливер":{name:"Гулливер",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gullivermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003470",shop:"supermarket"},addTags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Десяточка":{name:"Десяточка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q61876182",shop:"supermarket"},addTags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Дикси":{name:"Дикси",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Dixyclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4161561",shop:"supermarket"},addTags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт":{name:"Евроопт",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Eurooptby/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2565040",shop:"supermarket"},addTags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"},countryCodes:["by"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Hyper":{name:"Евроопт Hyper",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455975",shop:"supermarket"},addTags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"},countryCodes:["by"],terms:["евроопт Гипер"],matchScore:2,suggestion:true},"shop/supermarket/Евроопт Super":{name:"Евроопт Super",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q65455960",shop:"supermarket"},addTags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"},countryCodes:["by"],terms:["евроопт Супер"],matchScore:2,suggestion:true},"shop/supermarket/Карусель":{name:"Карусель",icon:"maki-grocery",imageURL:"https://graph.facebook.com/karuselgiper/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4216307",shop:"supermarket"},addTags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Кировский":{name:"Кировский",icon:"maki-grocery",imageURL:"https://graph.facebook.com/Kirovskii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63301903",shop:"supermarket"},addTags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Командор":{name:"Командор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/prkomandor/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61876152",shop:"supermarket"},addTags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Красный Яр":{name:"Красный Яр",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q1786753",shop:"supermarket"},addTags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Лента":{name:"Лента",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lentacom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4258608",shop:"supermarket"},addTags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Магнит":{name:"Магнит",icon:"maki-grocery",imageURL:"https://graph.facebook.com/magnitretail/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q940518",shop:"supermarket"},addTags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"},terms:[],matchScore:2,suggestion:true},"shop/supermarket/Мария-Ра":{name:"Мария-Ра",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mariarashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4281631",shop:"supermarket"},addTags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Монетка":{name:"Монетка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4301704",shop:"supermarket"},addTags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Народная 7Я семьЯ":{name:"Народная 7Я семьЯ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F7Family.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4032436",shop:"supermarket"},addTags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"},countryCodes:["ru"],terms:["семья"],matchScore:2,suggestion:true},"shop/supermarket/Перекрёсток":{name:"Перекрёсток",icon:"maki-grocery",imageURL:"https://graph.facebook.com/perekrestok/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1684639",shop:"supermarket"},addTags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"},countryCodes:["ru"],terms:["перекресток"],matchScore:2,suggestion:true},"shop/supermarket/Покупочка":{name:"Покупочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/121978851838251/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q58003270",shop:"supermarket"},addTags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Полушка":{name:"Полушка",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q4371080",shop:"supermarket"},addTags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Пятёрочка":{name:"Пятёрочка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pyaterochka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1768969",shop:"supermarket"},addTags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"},countryCodes:["ru"],terms:["пятерочка"],matchScore:2,suggestion:true},"shop/supermarket/Радеж":{name:"Радеж",icon:"maki-grocery",imageURL:"https://graph.facebook.com/radezhshop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4387165",shop:"supermarket"},addTags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Рукавичка":{name:"Рукавичка",icon:"maki-grocery",imageURL:"https://graph.facebook.com/rukavychka.ua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20092568",shop:"supermarket"},addTags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Светофор":{name:"Светофор",icon:"maki-grocery",imageURL:"https://graph.facebook.com/svetoforkryj/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61875920",shop:"supermarket"},addTags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Семишагофф":{name:"Семишагофф",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58003374",shop:"supermarket"},addTags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Сільпо":{name:"Сільпо",icon:"maki-grocery",imageURL:"https://graph.facebook.com/silpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4419434",shop:"supermarket"},addTags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Таврия В":{name:"Таврия В",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tavriavonline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q61823146",shop:"supermarket"},addTags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фора":{name:"Фора",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fora.ukraine/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12165977",shop:"supermarket"},addTags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Фуршет":{name:"Фуршет",icon:"maki-grocery",imageURL:"https://graph.facebook.com/furshetcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4493564",shop:"supermarket"},addTags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Эдельвейс":{name:"Эдельвейс",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q57979368",shop:"supermarket"},addTags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/いなげや":{name:"いなげや",icon:"maki-grocery",imageURL:"https://graph.facebook.com/151131734909829/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17193392",shop:"supermarket"},addTags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/まいばすけっと":{name:"まいばすけっと",icon:"maki-grocery",imageURL:"https://graph.facebook.com/mybasket.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11278154",shop:"supermarket"},addTags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/アコレ":{name:"アコレ",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11283128",shop:"supermarket"},addTags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イオン":{name:"イオン",icon:"maki-grocery",imageURL:"https://graph.facebook.com/aeonretail.english/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11285951",shop:"supermarket"},addTags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/イズミヤ":{name:"イズミヤ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/izumiya.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11286632",shop:"supermarket"},addTags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"},countryCodes:["jp"],terms:["いづみや"],matchScore:2,suggestion:true},"shop/supermarket/イトーヨーカドー":{name:"イトーヨーカドー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/itoyokado/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3088746",shop:"supermarket"},addTags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"},countryCodes:["jp"],terms:["イトーヨーカ堂"],matchScore:2,suggestion:true},"shop/supermarket/オリンピック":{name:"オリンピック",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11292764",shop:"supermarket"},addTags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/カスミ":{name:"カスミ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/kasumi.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294160",shop:"supermarket"},addTags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープ":{name:"コープ",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoop-Logo.PNG&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11508615",shop:"supermarket"},addTags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/コープこう":{name:"コープこう",icon:"maki-grocery",imageURL:"https://graph.facebook.com/coopkobe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5137453",shop:"supermarket"},addTags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/サミット":{name:"サミット",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/877018274264883201/pgvUi2hw_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11305129",shop:"supermarket"},addTags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ダイエー":{name:"ダイエー",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11316644",shop:"supermarket"},addTags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/バロー":{name:"バロー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/138259402886129/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11328346",shop:"supermarket"},addTags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ベイシア":{name:"ベイシア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11336776",shop:"supermarket"},addTags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マックスバリュ":{name:"マックスバリュ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/158243057524643/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1960109",shop:"supermarket"},addTags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/マルエツ":{name:"マルエツ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/maruetsu.rakuten/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11341197",shop:"supermarket"},addTags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヤオコー":{name:"ヤオコー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/yaokococoro/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11344967",shop:"supermarket"},addTags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークベニマル":{name:"ヨークベニマル",icon:"maki-grocery",imageURL:"https://graph.facebook.com/ybfan89/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346199",shop:"supermarket"},addTags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ヨークマート":{name:"ヨークマート",icon:"maki-grocery",imageURL:"https://graph.facebook.com/137658762945673/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346201",shop:"supermarket"},addTags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ライフ":{name:"ライフ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/lifecorp428/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346476",shop:"supermarket"},addTags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/ワイズマート":{name:"ワイズマート",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11351175",shop:"supermarket"},addTags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"},countryCodes:["jp"],terms:["よしのぶっさん"],matchScore:2,suggestion:true},"shop/supermarket/全聯":{name:"全聯",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/全聯福利中心":{name:"全聯福利中心",icon:"maki-grocery",imageURL:"https://graph.facebook.com/pxmartchannel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7262792",shop:"supermarket"},addTags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/家乐福":{name:"家乐福",icon:"maki-grocery",imageURL:"https://graph.facebook.com/carrefour/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q217599",shop:"supermarket"},addTags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"},countryCodes:["cn"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/惠康 Wellcome":{name:"惠康 Wellcome",icon:"maki-grocery",imageURL:"https://graph.facebook.com/wellcome.supermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q706247",shop:"supermarket"},addTags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"},countryCodes:["hk"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東急ストア":{name:"東急ストア",icon:"maki-grocery",imageURL:"https://graph.facebook.com/255001091240615/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11526963",shop:"supermarket"},addTags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/東武ストア":{name:"東武ストア",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q11527478",shop:"supermarket"},addTags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/業務スーパー":{name:"業務スーパー",icon:"maki-grocery",imageURL:"https://graph.facebook.com/gsjdf/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11590183",shop:"supermarket"},addTags:{brand:"業務スーパー","brand:en":"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:["leslies pool supply","leslies swimming pool supplies"],matchScore:2,suggestion:true},"shop/tea/DavidsTea":{name:"DavidsTea",icon:"maki-teahouse",imageURL:"https://pbs.twimg.com/profile_images/1173608454608564224/rj-kUT-i_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3019129",shop:"tea"},addTags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tea/T2":{name:"T2",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/T2Tea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q48802134",shop:"tea"},addTags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"},countryCodes:["au"],terms:[],matchScore:2,suggestion:true},"shop/tea/TeeGschwendner":{name:"TeeGschwendner",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/TeeGschwendner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2399969",shop:"tea"},addTags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/A1":{name:"A1",icon:"maki-telephone",imageURL:"https://graph.facebook.com/A1Fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q688755",shop:"telecommunication"},addTags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"},countryCodes:["at","bg","by","hr","si"],terms:["velcom","velcom|a1","велком"],matchScore:2,suggestion:true},"shop/telecommunication/Bell":{name:"Bell",icon:"maki-telephone",imageURL:"https://graph.facebook.com/BellCanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q815694",shop:"telecommunication"},addTags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"},countryCodes:["ca"],terms:["bell canada"],matchScore:2,suggestion:true},"shop/telecommunication/Ooredoo":{name:"Ooredoo",icon:"maki-telephone",imageURL:"https://graph.facebook.com/ooredooqatar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q919935",shop:"telecommunication"},addTags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"},terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Spectrum":{name:"Spectrum",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Spectrum/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7805197",shop:"telecommunication"},addTags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Xfinity":{name:"Xfinity",icon:"maki-telephone",imageURL:"https://pbs.twimg.com/profile_images/1131771952828375040/wTv-dtEe_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q5151002",shop:"telecommunication"},addTags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/МТС":{name:"МТС",icon:"maki-telephone",imageURL:"https://graph.facebook.com/mts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1368919",shop:"telecommunication"},addTags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"},countryCodes:["by","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Ростелеком":{name:"Ростелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/288785311160831/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1477012",shop:"telecommunication"},addTags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/Укртелеком":{name:"Укртелеком",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Ukrtelecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1505321",shop:"telecommunication"},addTags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/中華電信":{name:"中華電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/684453775036802/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q717531",shop:"telecommunication"},addTags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/telecommunication/遠傳電信":{name:"遠傳電信",icon:"maki-telephone",imageURL:"https://graph.facebook.com/fareastone/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5434486",shop:"telecommunication"},addTags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"},countryCodes:["tw"],terms:[],matchScore:2,suggestion:true},"shop/ticket/Boutique Grandes Lignes":{name:"Boutique Grandes Lignes",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/SNCFOFFICIEL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13646",shop:"ticket"},addTags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/ticket/DB Reisezentrum":{name:"DB Reisezentrum",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/348950735250586/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15842100",shop:"ticket"},addTags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"},countryCodes:["de"],terms:["reisezentrum"],matchScore:2,suggestion:true},"shop/ticket/Guichet Transilien":{name:"Guichet Transilien",icon:"fas-ticket-alt",imageURL:"https://pbs.twimg.com/profile_images/1185069127750303744/kH6KUVqb_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/tiles/Topps Tiles":{name:"Topps Tiles",icon:"maki-shop",imageURL:"https://graph.facebook.com/toppstiles/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17026595",shop:"tiles"},addTags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/tobacco/Nemzeti Dohánybolt":{name:"Nemzeti Dohánybolt",icon:"temaki-pipe",imageURL:"https://graph.facebook.com/195460840603881/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q20639040",shop:"tobacco"},addTags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"},countryCodes:["hu"],terms:["dohánybolt"],matchScore:2,suggestion:true},"shop/toys/Build-A-Bear Workshop":{name:"Build-A-Bear Workshop",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Buildabear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1002992",shop:"toys"},addTags:{brand:"Build-A-Bear Workshop","brand:wikidata":"Q1002992","brand:wikipedia":"en:Build-A-Bear Workshop",name:"Build-A-Bear Workshop",shop:"toys"},countryCodes:["ca","gb","us"],terms:["build a bear"],matchScore:2,suggestion:true},"shop/toys/Dráčik":{name:"Dráčik",icon:"fas-rocket",imageURL:"https://graph.facebook.com/2185187834828492/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653669",shop:"toys"},addTags:{brand:"Dráčik","brand:wikidata":"Q57653669",name:"Dráčik",shop:"toys"},countryCodes:["cz","sk"],terms:[],matchScore:2,suggestion:true},"shop/toys/Hawkin's Bazaar":{name:"Hawkin's Bazaar",icon:"fas-rocket",imageURL:"https://graph.facebook.com/HawkinsBazaar/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16983539",shop:"toys"},addTags:{brand:"Hawkin's Bazaar","brand:wikidata":"Q16983539",name:"Hawkin's Bazaar",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Intertoys":{name:"Intertoys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Intertoys/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1891407",shop:"toys"},addTags:{brand:"Intertoys","brand:wikidata":"Q1891407","brand:wikipedia":"nl:Intertoys",name:"Intertoys",shop:"toys"},countryCodes:["be","de","nl"],terms:[],matchScore:2,suggestion:true},"shop/toys/JouéClub":{name:"JouéClub",icon:"fas-rocket",imageURL:"https://graph.facebook.com/JoueClubFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3187152",shop:"toys"},addTags:{brand:"JouéClub","brand:wikidata":"Q3187152","brand:wikipedia":"fr:JouéClub",name:"JouéClub",shop:"toys"},countryCodes:["ad","fr","it","lb","ma","qa"],terms:[],matchScore:2,suggestion:true},"shop/toys/King Jouet":{name:"King Jouet",icon:"fas-rocket",imageURL:"https://graph.facebook.com/KingJouet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3197009",shop:"toys"},addTags:{brand:"King Jouet","brand:en":"King Toy","brand:wikidata":"Q3197009","brand:wikipedia":"fr:King Jouet",name:"King Jouet","name:en":"King Toy",shop:"toys"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/toys/La Grande Récré":{name:"La Grande Récré",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lagranderecre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3209556",shop:"toys"},addTags:{brand:"La Grande Récré","brand:wikidata":"Q3209556","brand:wikipedia":"fr:La Grande Récré (magasin)",name:"La Grande Récré",shop:"toys"},countryCodes:["be","ci","es","fr","ma"],terms:[],matchScore:2,suggestion:true},"shop/toys/Lego":{name:"Lego",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lego/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1063455",shop:"toys"},addTags:{brand:"Lego","brand:wikidata":"Q1063455","brand:wikipedia":"en:The Lego Group",name:"Lego",shop:"toys"},terms:["lego store"],matchScore:2,suggestion:true},"shop/toys/Lekia":{name:"Lekia",icon:"fas-rocket",imageURL:"https://graph.facebook.com/lekiasweden/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56303274",shop:"toys"},addTags:{brand:"Lekia","brand:wikidata":"Q56303274","brand:wikipedia":"sv:Lekia",name:"Lekia",shop:"toys"},countryCodes:["no","se"],terms:[],matchScore:2,suggestion:true},"shop/toys/Maxi Toys":{name:"Maxi Toys",icon:"fas-rocket",imageURL:"https://graph.facebook.com/MaxiToys.FR/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16663879",shop:"toys"},addTags:{brand:"Maxi Toys","brand:wikidata":"Q16663879","brand:wikipedia":"fr:Maxi Toys",name:"Maxi Toys",shop:"toys"},countryCodes:["be","de","fr","it"],terms:[],matchScore:2,suggestion:true},"shop/toys/Menkind":{name:"Menkind",icon:"fas-rocket",imageURL:"https://graph.facebook.com/Menkind/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66725844",shop:"toys"},addTags:{brand:"Menkind","brand:wikidata":"Q66725844",name:"Menkind",shop:"toys"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/toys/Smyths":{name:"Smyths",icon:"fas-rocket",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-rocket",imageURL:"https://graph.facebook.com/TheEntertainerToyShop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7732289",shop:"toys"},addTags:{brand:"The Entertainer","brand:wikidata":"Q7732289","brand:wikipedia":"en:The Entertainer (retailer)",name:"The Entertainer",shop:"toys"},countryCodes:["gb","je"],terms:[],matchScore:2,suggestion:true},"shop/toys/Toys R Us":{name:"Toys R Us",icon:"fas-rocket",imageURL:"https://graph.facebook.com/toysrus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q696334",shop:"toys"},addTags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"},terms:[],matchScore:2,suggestion:true},"shop/toys/Детский мир":{name:"Детский мир",icon:"fas-rocket",imageURL:"https://graph.facebook.com/detmir/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16643324",shop:"toys"},addTags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"},countryCodes:["kz","ru"],terms:[],matchScore:2,suggestion:true},"shop/toys/Кораблик":{name:"Кораблик",icon:"fas-rocket",imageURL:"https://graph.facebook.com/korablik.ru/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57653416",shop:"toys"},addTags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"},countryCodes:["ru"],terms:[],matchScore:2,suggestion:true},"shop/trade/84 Lumber":{name:"84 Lumber",icon:"temaki-tools",imageURL:"https://graph.facebook.com/84lumber/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4644779",shop:"trade"},addTags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"},countryCodes:["us"],terms:["84","eighty-four lumber"],matchScore:2,suggestion:true},"shop/trade/Caterpillar":{name:"Caterpillar",icon:"temaki-tools",imageURL:"https://graph.facebook.com/caterpillarinc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q459965",shop:"trade"},addTags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"},terms:[],matchScore:2,suggestion:true},"shop/trade/Fastenal":{name:"Fastenal",icon:"temaki-tools",imageURL:"https://graph.facebook.com/fastenalcompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3067119",shop:"trade"},addTags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"},countryCodes:["ca","pa","us"],terms:[],matchScore:2,suggestion:true},"shop/trade/Grainger":{name:"Grainger",icon:"temaki-tools",imageURL:"https://graph.facebook.com/grainger/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1627894",shop:"trade"},addTags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"},countryCodes:["ca","us"],terms:["granger","w. w. grainger"],matchScore:2,suggestion:true},"shop/trade/John Deere":{name:"John Deere",icon:"temaki-tools",imageURL:"https://graph.facebook.com/JohnDeereUSCA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q496302",shop:"trade"},addTags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Alltours":{name:"Alltours",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAlltours%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2649481",shop:"travel_agency"},addTags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/American Automobile Association":{name:"American Automobile Association",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/AAAFanPage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q463436",shop:"travel_agency"},addTags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Coral Travel":{name:"Coral Travel",icon:"fas-suitcase",geometry:["point","area"],tags:{"brand:wikidata":"Q58011479",shop:"travel_agency"},addTags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"},countryCodes:["pl","ru","ua"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/D-reizen":{name:"D-reizen",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/dreizenvakanties/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2445498",shop:"travel_agency"},addTags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"},countryCodes:["nl"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/DER Reisebüro":{name:"DER Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/DER/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56729186",shop:"travel_agency"},addTags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:["der deutsches reisebüro"],matchScore:2,suggestion:true},"shop/travel_agency/Expedia CruiseShipCenters":{name:"Expedia CruiseShipCenters",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ExpediaCSC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5189985",shop:"travel_agency"},addTags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/First Reisebüro":{name:"First Reisebüro",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Flight Centre":{name:"Flight Centre",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/flightcentreAU/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5459202",shop:"travel_agency"},addTags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Halcón Viajes":{name:"Halcón Viajes",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/halconviajes.oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57591939",shop:"travel_agency"},addTags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Havas Voyages":{name:"Havas Voyages",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/havas.voyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57628091",shop:"travel_agency"},addTags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Kuoni":{name:"Kuoni",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/kuonitraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q684355",shop:"travel_agency"},addTags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Liberty Travel":{name:"Liberty Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/LibertyTravel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17031665",shop:"travel_agency"},addTags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Neckermann Reisen":{name:"Neckermann Reisen",icon:"fas-suitcase",geometry:["point","area"],tags:{"brand:wikidata":"Q17300280",shop:"travel_agency"},addTags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Reiseland":{name:"Reiseland",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/reiseland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q40387610",shop:"travel_agency"},addTags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Selectour":{name:"Selectour",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/SelectourVoyages/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3478073",shop:"travel_agency"},addTags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/TUI (Group)":{name:"TUI (Group)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/TUIDeutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573103",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"},terms:["tui reisecenter"],matchScore:2,suggestion:true},"shop/travel_agency/TUI (UK)":{name:"TUI (UK)",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/worldofTUI/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7795876",shop:"travel_agency"},addTags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"},countryCodes:["gb"],terms:["thomson"],matchScore:2,suggestion:true},"shop/travel_agency/The Co-operative Travel":{name:"The Co-operative Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/cooperativetraveluk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7726526",shop:"travel_agency"},addTags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Thomas Cook":{name:"Thomas Cook",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/thomascook/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2141800",shop:"travel_agency"},addTags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Turkish Airlines":{name:"Turkish Airlines",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/turkishairlines/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4548",shop:"travel_agency"},addTags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"},terms:[],matchScore:2,suggestion:true},"shop/travel_agency/ltur":{name:"ltur",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/ltur/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q519040",shop:"travel_agency"},addTags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/travel_agency/Поехали с нами":{name:"Поехали с нами",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/PoehaliSNamiua/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q25439141",shop:"travel_agency"},addTags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"},countryCodes:["ua"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Big O Tires":{name:"Big O Tires",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BigOTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4906085",shop:"tyres"},addTags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Bridgestone":{name:"Bridgestone",icon:"temaki-tire",imageURL:"https://graph.facebook.com/BridgestoneTires/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q179433",shop:"tyres"},addTags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Discount Tire":{name:"Discount Tire",icon:"temaki-tire",imageURL:"https://graph.facebook.com/DiscountTire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5281735",shop:"tyres"},addTags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Express Oil Change & Tire Engineers":{name:"Express Oil Change & Tire Engineers",icon:"temaki-tire",imageURL:"https://graph.facebook.com/expressoil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q39057654",shop:"tyres"},addTags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Les Schwab Tire Center":{name:"Les Schwab Tire Center",icon:"temaki-tire",imageURL:"https://graph.facebook.com/lesschwab/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6529977",shop:"tyres"},addTags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"},countryCodes:["us"],terms:["les schwab"],matchScore:2,suggestion:true},"shop/tyres/Michelin":{name:"Michelin",icon:"temaki-tire",imageURL:"https://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:"temaki-tire",imageURL:"https://graph.facebook.com/TireDiscounters/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29093639",shop:"tyres"},addTags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Tires Plus":{name:"Tires Plus",icon:"temaki-tire",imageURL:"https://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:"temaki-tire",imageURL:"https://graph.facebook.com/VianorSuomi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q10714920",shop:"tyres"},addTags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/vacuum_cleaner/Oreck":{name:"Oreck",icon:"temaki-vacuum",imageURL:"https://graph.facebook.com/oreck/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q57273844",shop:"vacuum_cleaner"},addTags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"},countryCodes:["us"],terms:["oreck vacuums"],matchScore:2,suggestion:true},"shop/variety_store/99 Cents Only Stores":{name:"99 Cents Only Stores",icon:"maki-shop",imageURL:"https://graph.facebook.com/99CentsOnly/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4646294",shop:"variety_store"},addTags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"},countryCodes:["us"],terms:["99 cent only stores","99 cents only"],matchScore:2,suggestion:true},"shop/variety_store/Action":{name:"Action",icon:"maki-shop",imageURL:"https://graph.facebook.com/actiondotcom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2634111",shop:"variety_store"},addTags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"},countryCodes:["at","be","de","fr","lu","nl","pl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/B&M Bargains":{name:"B&M Bargains",icon:"maki-shop",imageURL:"https://graph.facebook.com/bmstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4836931",shop:"variety_store"},addTags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Big Bazar":{name:"Big Bazar",icon:"maki-shop",imageURL:"https://graph.facebook.com/bigbazarbv/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15873104",shop:"variety_store"},addTags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Daiso Japan":{name:"Daiso Japan",icon:"maki-shop",imageURL:"https://graph.facebook.com/daisojapanusa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q866991",shop:"variety_store"},addTags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"},countryCodes:["au","us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/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/Ocean State Job Lot":{name:"Ocean State Job Lot",icon:"maki-shop",imageURL:"https://graph.facebook.com/OceanStateJobLot/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7076076",shop:"variety_store"},addTags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Ollie's Bargain Outlet":{name:"Ollie's Bargain Outlet",icon:"maki-shop",imageURL:"https://graph.facebook.com/olliesbargainoutlet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7088304",shop:"variety_store"},addTags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundland":{name:"Poundland",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1434528",shop:"variety_store"},addTags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundstretcher":{name:"Poundstretcher",icon:"maki-shop",imageURL:"https://graph.facebook.com/Poundstretcher/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7235675",shop:"variety_store"},addTags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Poundworld":{name:"Poundworld",icon:"maki-shop",imageURL:"https://graph.facebook.com/PoundWorld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16967516",shop:"variety_store"},addTags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Roses":{name:"Roses",icon:"maki-shop",imageURL:"https://graph.facebook.com/rosesdiscountstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7368644",shop:"variety_store"},addTags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/variety_store/Savers":{name:"Savers",icon:"maki-shop",imageURL:"https://graph.facebook.com/SaversHB/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7428189",shop:"variety_store"},addTags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",shop:"variety_store"},countryCodes:["gb"],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/1181368021417218048/pI9jJkOi_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1185381",shop:"variety_store"},addTags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/video_games/EB Games":{name:"EB Games",icon:"maki-gaming",imageURL:"https://graph.facebook.com/ebgamescanada/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4993686",shop:"video_games"},addTags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"},countryCodes:["au","ca","nz"],terms:[],matchScore:2,suggestion:true},"shop/video_games/Game":{name:"Game",icon:"maki-gaming",imageURL:"https://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/Game Mania":{name:"Game Mania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameManiaNederland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18069429",shop:"video_games"},addTags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/video_games/GameStop":{name:"GameStop",icon:"maki-gaming",imageURL:"https://graph.facebook.com/GameStop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q202210",shop:"video_games"},addTags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"},terms:[],matchScore:2,suggestion:true},"shop/video_games/Micromania":{name:"Micromania",icon:"maki-gaming",imageURL:"https://graph.facebook.com/MicromaniaFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3312221",shop:"video_games"},addTags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/video/Blockbuster":{name:"Blockbuster",icon:"temaki-movie_rental",imageURL:"https://pbs.twimg.com/profile_images/378800000679852472/9ee706eca6f5d0b9fbc3a57d014ec807_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q884711",shop:"video"},addTags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/Family Video":{name:"Family Video",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/FamilyVideo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5433297",shop:"video"},addTags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/video/TSUTAYA":{name:"TSUTAYA",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/TSUTAYA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5193457",shop:"video"},addTags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"},terms:[],matchScore:2,suggestion:true},"shop/video/ゲオ":{name:"ゲオ",icon:"temaki-movie_rental",imageURL:"https://graph.facebook.com/geomediashop/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5533938",shop:"video"},addTags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"},countryCodes:["jp"],terms:["geo"],matchScore:2,suggestion:true},"shop/watches/Fossil":{name:"Fossil",icon:"maki-watch",imageURL:"https://graph.facebook.com/Fossil/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q356212",shop:"watches"},addTags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"},countryCodes:["de","us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Omega":{name:"Omega",icon:"maki-watch",imageURL:"https://graph.facebook.com/omega/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q659224",shop:"watches"},addTags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"},countryCodes:["ch","fr"],terms:[],matchScore:2,suggestion:true},"shop/watches/Rolex":{name:"Rolex",icon:"maki-watch",imageURL:"https://graph.facebook.com/rolex/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q62288",shop:"watches"},addTags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/watches/Swatch":{name:"Swatch",icon:"maki-watch",imageURL:"https://graph.facebook.com/SwatchUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q573422",shop:"watches"},addTags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/BJ's Wholesale Club":{name:"BJ's Wholesale Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/bjswholesaleclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4835754",shop:"wholesale"},addTags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"},countryCodes:["us"],terms:["bjs","bjs wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Costco":{name:"Costco",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"},terms:["costco wholesale"],matchScore:2,suggestion:true},"shop/wholesale/Makro":{name:"Makro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/makrohipermayorista/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q704606",shop:"wholesale"},addTags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Metro":{name:"Metro",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/metro.deutschland/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13610282",shop:"wholesale"},addTags:{brand:"Metro","brand:wikidata":"Q13610282","brand:wikipedia":"en:Metro Cash & Carry",name:"Metro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sam's Club":{name:"Sam's Club",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/samsclub/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1972120",shop:"wholesale"},addTags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/Sligro":{name:"Sligro",icon:"maki-warehouse",geometry:["point","area"],tags:{"brand:wikidata":"Q3170052",shop:"wholesale"},addTags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",membership:"yes",name:"Sligro",shop:"wholesale"},terms:[],matchScore:2,suggestion:true},"shop/wholesale/コストコ":{name:"コストコ",icon:"maki-warehouse",imageURL:"https://graph.facebook.com/Costco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q715583",shop:"wholesale"},addTags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/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/Baymont":{name:"Baymont",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q4874634",tourism:"hotel"},addTags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:["baymont inn","baymont inn & suites"],matchScore:2,suggestion:true},"tourism/hotel/Best Western":{name:"Best Western",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","brand:wikidata":"Q830334","brand:wikipedia":"en:Best Western",name:"Best Western",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Best Western Plus":{name:"Best Western Plus",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/BestWestern/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q830334",tourism:"hotel"},addTags:{brand:"Best Western","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":{name:"Courtyard",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/courtyard/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1053170",tourism:"hotel"},addTags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"},countryCodes:["ca","us"],terms:["courtyard marriott"],matchScore:2,suggestion:true},"tourism/hotel/Crowne Plaza":{name:"Crowne Plaza",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/crowneplaza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2746220",tourism:"hotel"},addTags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Days Inn":{name:"Days Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/DaysInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1047239",tourism:"hotel"},addTags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"},countryCodes:["ca","gb","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Delta":{name:"Delta",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/deltahotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5254663",tourism:"hotel"},addTags:{brand:"Delta","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta",official_name:"Delta Hotels",tourism:"hotel"},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/Drury Inn & Suites":{name:"Drury Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Druryhotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5309391",tourism:"hotel"},addTags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/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/Grupo Barceló":{name:"Grupo Barceló",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FGrupo%20Barcel%C3%B3%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q15148996",tourism:"hotel"},addTags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"},countryCodes:["es","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hampton":{name:"Hampton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hamptonbyhilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5646230",tourism:"hotel"},addTags:{alt_name:"Hampton Inn",brand:"Hampton","brand:wikidata":"Q5646230","brand:wikipedia":"en:Hampton by Hilton",name:"Hampton",tourism:"hotel"},countryCodes:["us"],terms:["hampton inn and suites"],matchScore:2,suggestion:true},"tourism/hotel/Hawthorn Suites":{name:"Hawthorn Suites",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q5685511",tourism:"hotel"},addTags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton":{name:"Hilton",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/hilton/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q598884",tourism:"hotel"},addTags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Hilton Garden Inn":{name:"Hilton Garden Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HiltonGardenInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1162859",tourism:"hotel"},addTags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn":{name:"Holiday Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/HolidayInn/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2717882",tourism:"hotel"},addTags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express":{name:"Holiday Inn Express",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Holiday Inn Express & Suites":{name:"Holiday Inn Express & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/holidayinnexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5880423",tourism:"hotel"},addTags:{brand:"Holiday Inn Express & Suites","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express & Suites",tourism:"hotel"},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 Inn":{name:"La Quinta Inn",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"},countryCodes:["ca","cl","co","hn","mx","us"],terms:["la quinta"],matchScore:2,suggestion:true},"tourism/hotel/La Quinta Inn & Suites":{name:"La Quinta Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/laquinta/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6464734",tourism:"hotel"},addTags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","us"],terms:["la quinta inns and suites"],matchScore:2,suggestion:true},"tourism/hotel/Le Méridien":{name:"Le Méridien",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/lemeridien/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q261077",tourism:"hotel"},addTags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Marriott":{name:"Marriott",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/marriottinternational/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1141173",tourism:"hotel"},addTags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Meininger":{name:"Meininger",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MeiningerHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q42773330",tourism:"hotel"},addTags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"},terms:["hoteles meininger"],matchScore:2,suggestion:true},"tourism/hotel/Mercure":{name:"Mercure",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/MercureHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1709809",tourism:"hotel"},addTags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Microtel":{name:"Microtel",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"},countryCodes:["ca","cn","mx","ph","us"],terms:["microtel inn"],matchScore:2,suggestion:true},"tourism/hotel/Microtel Inn & Suites":{name:"Microtel Inn & Suites",icon:"fas-concierge-bell",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMicrotel.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6840402",tourism:"hotel"},addTags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"},countryCodes:["ca","mx","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/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/Qubus":{name:"Qubus",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q11832868",tourism:"hotel"},addTags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",tourism:"hotel"},countryCodes:["pl"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/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 (AsiaOceania)":{name:"Travelodge (Asia/Oceania)",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q24997583",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"},countryCodes:["au","hk","id","kr","my","nz","sg","th"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (Europe)":{name:"Travelodge (Europe)",icon:"fas-concierge-bell",imageURL:"https://pbs.twimg.com/profile_images/936237069269196801/IRTs-ePs_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q9361374",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"},countryCodes:["es","gb","ie"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/Travelodge (North America)":{name:"Travelodge (North America)",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/Travelodge/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7836087",tourism:"hotel"},addTags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/hotel/W Hotels":{name:"W Hotels",icon:"fas-concierge-bell",imageURL:"https://graph.facebook.com/WHotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7958488",tourism:"hotel"},addTags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"},terms:[],matchScore:2,suggestion:true},"tourism/hotel/Wingate":{name:"Wingate",icon:"fas-concierge-bell",geometry:["point","area"],tags:{"brand:wikidata":"Q8025144",tourism:"hotel"},addTags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"},countryCodes:["us"],terms:["wingate inn"],matchScore:2,suggestion:true},"tourism/hotel/東横イン":{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/Budget Host Inn":{name:"Budget Host Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q16954336",tourism:"motel"},addTags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Econo Lodge":{name:"Econo Lodge",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5333330",tourism:"motel"},addTags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Knights Inn":{name:"Knights Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q6422409",tourism:"motel"},addTags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Motel 6":{name:"Motel 6",icon:"maki-lodging",imageURL:"https://graph.facebook.com/motel6/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2188884",tourism:"motel"},addTags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Rodeway Inn":{name:"Rodeway Inn",icon:"maki-lodging",imageURL:"https://graph.facebook.com/choicehotels/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7356709",tourism:"motel"},addTags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true},"tourism/motel/Super 8":{name:"Super 8",icon:"maki-lodging",imageURL:"https://graph.facebook.com/Super8/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5364003",tourism:"motel"},addTags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"},countryCodes:["ca","us"],terms:[],matchScore:2,suggestion:true}};
24788
24789         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"]};
24790
24791         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"]}};
24792
24793         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"},baby_seat:{key:"baby",type:"check",label:"Baby Seat"},backrest:{key:"backrest",type:"check",label:"Backrest"},bar:{key:"bar",type:"check",label:"Bar"},barrier:{key:"barrier",type:"typeCombo",label:"Type"},basin:{key:"basin",type:"combo",label:"Type"},"bath/open_air":{key:"bath:open_air",label:"Open Air",type:"check"},"bath/sand_bath":{key:"bath:sand_bath",label:"Sand Bath",type:"check"},"bath/type":{key:"bath:type",type:"combo",label:"Specialty",strings:{options:{onsen:"Japanese Onsen",foot_bath:"Foot Bath",hot_spring:"Hot Spring"}}},beauty:{key:"beauty",type:"combo",label:"Beauty Specialty"},bench:{key:"bench",type:"check",label:"Bench",terms:["seating"]},bicycle_parking:{key:"bicycle_parking",type:"combo",label:"Type"},bin:{key:"bin",type:"check",label:"Waste Bin",terms:["garbage can","trash can"]},blind:{key:"blind",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Blind Person Access",terms:["sight impairment","vision impairment"]},blood_components:{key:"blood:",type:"multiCombo",label:"Blood Components",strings:{options:{whole:"whole blood",plasma:"plasma",platelets:"platelets",stemcells:"stem cell samples"}}},board_type:{key:"board_type",type:"typeCombo",label:"Type"},bollard:{key:"bollard",type:"combo",label:"Type"},booth:{key:"booth",type:"combo",label:"Booth",caseSensitive:true},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_escalator:{key:"conveying",type:"check",label:"Escalator"},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"},informal:{key:"informal",type:"check",label:"Informal"},information:{key:"information",type:"typeCombo",label:"Type"},inscription:{key:"inscription",type:"textarea",label:"Inscription"},intermittent_yes:{key:"intermittent",type:"check",label:"Intermittent","default":"yes"},intermittent:{key:"intermittent",type:"check",label:"Intermittent"},internet_access:{key:"internet_access",type:"combo",label:"Internet Access",strings:{options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},terms:["wifi","wlan"]},"internet_access/fee":{key:"internet_access:fee",type:"check",label:"Internet Access Fee",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["wifi fee"]},"internet_access/ssid":{key:"internet_access:ssid",type:"text",label:"Wifi Network Name",prerequisiteTag:{key:"internet_access",valueNot:"no"},terms:["ssid"]},interval:{key:"interval",type:"text",label:"Interval"},junction_line:{key:"junction",type:"combo",label:"Junction",strings:{options:{roundabout:"Roundabout",circular:"Traffic Circle",jughandle:"Jughandle"}}},"junction/ref_oneway":{key:"junction:ref",type:"text",label:"Junction Number",prerequisiteTag:{key:"oneway",value:"yes"}},kerb:{key:"kerb",type:"combo",label:"Curb"},"kerb/height":{key:"kerb:height",type:"combo",snake_case:false,label:"Height"},label:{key:"label",type:"textarea",label:"Label"},lamp_type:{key:"lamp_type",type:"combo",label:"Type"},landuse:{key:"landuse",type:"typeCombo",label:"Type"},lanes:{key:"lanes",type:"number",minValue:0,label:"Lanes",placeholder:"1, 2, 3..."},language_multi:{key:"language:",type:"multiCombo",label:"Languages"},layer:{key:"layer",type:"number",label:"Layer",placeholder:"0"},leaf_cycle_singular:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous"}}},leaf_cycle:{key:"leaf_cycle",type:"combo",label:"Leaf Cycle",strings:{options:{evergreen:"Evergreen",deciduous:"Deciduous",semi_evergreen:"Semi-Evergreen",semi_deciduous:"Semi-Deciduous",mixed:"Mixed"}}},leaf_type_singular:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",leafless:"Leafless"}}},leaf_type:{key:"leaf_type",type:"combo",label:"Leaf Type",strings:{options:{broadleaved:"Broadleaved",needleleaved:"Needleleaved",mixed:"Mixed",leafless:"Leafless"}}},leisure:{key:"leisure",type:"typeCombo",label:"Type"},length:{key:"length",type:"number",minValue:0,label:"Length (Meters)"},level_semi:{key:"level",type:"semiCombo",label:"Levels",terms:["building floors","decks","stories","storeys","storys"]},level:{key:"level",type:"combo",label:"Level",terms:["building floor","deck","storey","story"],prerequisiteTag:{keyNot:"building"}},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"},lockable:{key:"lockable",type:"check",label:"Lockable"},man_made:{key:"man_made",type:"typeCombo",label:"Type"},manhole:{key:"manhole",type:"typeCombo",label:"Type"},manufacturer:{key:"manufacturer",type:"combo",snake_case:false,caseSensitive:true,label:"Manufacturer"},map_size:{key:"map_size",type:"typeCombo",label:"Coverage"},map_type:{key:"map_type",type:"typeCombo",label:"Type"},material:{key:"material",type:"combo",label:"Material"},max_age:{key:"max_age",type:"number",minValue:0,label:"Maximum Age",terms:["upper age limit"]},maxheight:{key:"maxheight",type:"combo",label:"Max Height",placeholder:"4, 4.5, 5, 14'0\", 14'6\", 15'0\"",snake_case:false},maxspeed:{key:"maxspeed",type:"maxspeed",label:"Speed Limit",placeholder:"40, 50, 60..."},"maxspeed/advisory":{key:"maxspeed:advisory",type:"maxspeed",label:"Advisory Speed Limit",placeholder:"40, 50, 60..."},maxstay:{key:"maxstay",type:"combo",label:"Max Stay",options:["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],snake_case:false},maxweight_bridge:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false,prerequisiteTag:{key:"bridge",valueNot:"no"}},maxweight:{key:"maxweight",type:"combo",label:"Max Weight",snake_case:false},memorial:{key:"memorial",type:"typeCombo",label:"Type"},microbrewery:{key:"microbrewery",type:"check",label:"Microbrewery",terms:["brewpub","craft beer"]},min_age:{key:"min_age",type:"number",minValue:0,label:"Minimum Age",terms:["lower age limit"]},minspeed:{key:"minspeed",type:"maxspeed",label:"Minimum Speed Limit",placeholder:"20, 30, 40..."},monitoring_multi:{key:"monitoring:",type:"multiCombo",label:"Monitoring"},"mtb/scale":{key:"mtb:scale",type:"combo",label:"Mountain Biking Difficulty",placeholder:"0, 1, 2, 3...",strings:{options:{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{key:"mtb:scale:imba",type:"combo",label:"IMBA Trail Difficulty",placeholder:"Easy, Medium, Difficult...",strings:{options:{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{key:"mtb:scale:uphill",type:"combo",label:"Mountain Biking Uphill Difficulty",placeholder:"0, 1, 2, 3...",strings:{options:{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},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/theme":{key:"playground:theme",type:"combo",label:"Theme"},polling_station:{key:"polling_station",type:"check",label:"Polling Place",terms:["voting place"]},population:{key:"population",type:"text",label:"Population"},post:{type:"address",key:"post",keys:["post:block_number","post:city","post:block_number","post:conscriptionnumber","post:county","post:country","post:county","post:district","post:floor","post:hamlet","post:housename","post:housenumber","post:neighbourhood","post:place","post:postcode","post:province","post:quarter","post:state","post:street","post:subdistrict","post:suburb","post:unit"],label:"Delivery Address"},power_supply:{key:"power_supply",type:"check",label:"Power Supply"},power:{key:"power",type:"typeCombo",label:"Type"},preschool:{key:"preschool",type:"check",label:"Preschool"},produce:{key:"produce",type:"semiCombo",label:"Produce"},product:{key:"product",type:"semiCombo",label:"Products"},"public_bookcase/type":{key:"public_bookcase:type",type:"combo",label:"Type"},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"}}},residential:{key:"residential",type:"combo",label:"Type"},resort:{key:"resort",type:"combo",label:"Type"},resource:{key:"resource",type:"semiCombo",label:"Resources"},restriction:{key:"restriction",type:"combo",label:"Type"},restrictions:{type:"restrictions",geometry:"vertex",icon:"iD-restrictions",reference:{rtype:"restriction"},label:"Turn Restrictions"},"roof/colour":{key:"roof:colour",type:"combo",label:"Roof Color"},room:{key:"room",type:"combo",label:"Type"},rooms:{key:"rooms",type:"number",minValue:0,label:"Rooms"},route_master:{key:"route_master",type:"combo",label:"Type"},route:{key:"route",type:"combo",label:"Type"},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"},stile:{key:"stile",type:"combo",label:"Type"},stop:{key:"stop",type:"combo",label:"Stop Type",strings:{options:{all:"All Ways",minor:"Minor Road"}}},street_cabinet:{key:"street_cabinet",type:"combo",label:"Type"},stroller:{key:"stroller",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},label:"Stroller Access",terms:["baby carriage","perambulator","pram","pushchair"]},structure_waterway:{type:"structureRadio",keys:["tunnel"],label:"Structure",placeholder:"Unknown",strings:{options:{tunnel:"Tunnel"}}},structure:{type:"structureRadio",keys:["bridge","tunnel","embankment","cutting","ford"],label:"Structure",placeholder:"Unknown",strings:{options:{bridge:"Bridge",tunnel:"Tunnel",embankment:"Embankment",cutting:"Cutting",ford:"Ford"}}},studio:{key:"studio",type:"combo",label:"Type"},substance:{key:"substance",type:"combo",label:"Substance"},substation:{key:"substation",type:"typeCombo",label:"Type"},supervised:{key:"supervised",type:"check",label:"Supervised",terms:["guarded","manned"]},support:{key:"support",type:"combo",label:"Support"},surface:{key:"surface",type:"combo",label:"Surface"},surveillance:{key:"surveillance",type:"combo",label:"Surveillance Kind"},"surveillance/type":{key:"surveillance:type",type:"combo",label:"Surveillance Type",strings:{options:{camera:"Camera",guard:"Guard",ALPR:"Automatic License Plate Reader"}}},"surveillance/zone":{key:"surveillance:zone",type:"combo",label:"Surveillance Zone"},"survey/date":{key:"survey:date",type:"text",label:"Last Survey Date"},swimming_pool:{key:"swimming_pool",type:"combo",label:"Type"},"switch":{key:"switch",type:"combo",label:"Type",strings:{options:{mechanical:"Mechanical",circuit_breaker:"Circuit Breaker",disconnector:"Disconnector",earthing:"Earthing"}}},tactile_paving:{key:"tactile_paving",type:"check",label:"Tactile Paving"},takeaway:{key:"takeaway",type:"combo",label:"Takeaway",placeholder:"Yes, No, Takeaway Only...",strings:{options:{yes:"Yes",no:"No",only:"Takeaway Only"}},terms:["take out","takeout"]},target:{key:"target",type:"combo",label:"Target"},tidal:{key:"tidal",type:"check",label:"Tidal"},to:{key:"to",type:"text",label:"To"},"toilets/disposal":{key:"toilets:disposal",type:"combo",label:"Disposal",strings:{options:{flush:"Flush",pitlatrine:"Pit Latrine",chemical:"Chemical",bucket:"Bucket"}}},"toilets/handwashing":{key:"toilets:handwashing",type:"check",label:"Handwashing"},"toilets/position":{key:"toilets:position",type:"semiCombo",label:"Positions"},toll:{key:"toll",type:"check",label:"Toll"},tomb:{key:"tomb",type:"typeCombo",label:"Type"},tourism:{key:"tourism",type:"typeCombo",label:"Type"},"tower/construction":{key:"tower:construction",type:"combo",label:"Construction",placeholder:"Guyed, Lattice, Concealed, ..."},"tower/type":{key:"tower:type",type:"combo",label:"Type"},"townhall/type":{key:"townhall:type",type:"combo",label:"Type"},tracktype:{key:"tracktype",type:"combo",label:"Track Type",placeholder:"Solid, Mostly Solid, Soft...",strings:{options:{grade1:"Solid: paved or heavily compacted hardcore surface",grade2:"Mostly Solid: gravel/rock with some soft material mixed in",grade3:"Even mixture of hard and soft materials",grade4:"Mostly Soft: soil/sand/grass with some hard material mixed in",grade5:"Soft: soil/sand/grass"}}},trade:{key:"trade",type:"typeCombo",label:"Type"},traffic_calming:{key:"traffic_calming",type:"typeCombo",label:"Type"},traffic_sign:{key:"traffic_sign",type:"typeCombo",label:"Traffic Sign"},"traffic_sign/direction":{key:"traffic_sign:direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},traffic_signals:{key:"traffic_signals",type:"combo",label:"Type","default":"signal"},"traffic_signals/direction":{key:"traffic_signals:direction",type:"combo",label:"Direction Affected",strings:{options:{forward:"Forward",backward:"Backward",both:"Both / All"}}},trail_visibility:{key:"trail_visibility",type:"combo",label:"Trail Visibility",placeholder:"Excellent, Good, Bad...",strings:{options:{excellent:"Excellent: unambiguous path or markers everywhere",good:"Good: markers visible, sometimes require searching",intermediate:"Intermediate: few markers, path mostly visible",bad:"Bad: no markers, path sometimes invisible/pathless",horrible:"Horrible: often pathless, some orientation skills required",no:"No: pathless, excellent orientation skills required"}}},transformer:{key:"transformer",type:"combo",label:"Type",strings:{options:{distribution:"Distribution",generator:"Generator",converter:"Converter",traction:"Traction",auto:"Autotransformer",phase_angle_regulator:"Phase Angle Regulator",auxiliary:"Auxiliary",yes:"Unknown"}}},trees:{key:"trees",type:"semiCombo",label:"Trees"},trench:{key:"trench",type:"combo",label:"Type"},trolley_wire:{key:"trolley_wire",type:"check",label:"Overhead Trolley Wires"},tunnel:{key:"tunnel",type:"typeCombo",label:"Type",placeholder:"Default"},usage_rail:{key:"usage",type:"combo",label:"Usage Type",strings:{options:{main:"Main",branch:"Branch",industrial:"Industrial",military:"Military",test:"Test",tourism:"Tourism"}}},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"},waste:{key:"waste",type:"semiCombo",label:"Waste"},water_point:{key:"water_point",type:"check",label:"Water Point"},water_source:{key:"water_source","default":"main",type:"combo",label:"Water Source"},water_volume:{key:"water_volume",type:"number",label:"Water Reserve Volume (m³)",snake_case:false},water:{key:"water",type:"combo",label:"Type"},waterway:{key:"waterway",type:"typeCombo",label:"Type"},website:{key:"website",type:"url",icon:"website",placeholder:"https://example.com",label:"Website",terms:["internet presence","uri","url","webpage"]},wetland:{key:"wetland",type:"combo",label:"Type"},wheelchair:{key:"wheelchair",type:"radio",strings:{options:{yes:"Yes",limited:"Limited",no:"No"}},icon:"maki-wheelchair",label:"Wheelchair Access",terms:["handicap access"]},wholesale:{key:"wholesale",type:"typeCombo",label:"Wholesale"},width:{key:"width",type:"number",minValue:0,label:"Width (Meters)"},wikidata:{key:"wikidata",keys:["wikidata","wikipedia"],type:"wikidata",icon:"wikipedia",universal:true,label:"Wikidata"},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"}}}};
24794
24795         var quickselect = createCommonjsModule(function (module, exports) {
24796         (function (global, factory) {
24797                  module.exports = factory() ;
24798         }(commonjsGlobal, (function () {
24799         function quickselect(arr, k, left, right, compare) {
24800             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
24801         }
24802
24803         function quickselectStep(arr, k, left, right, compare) {
24804
24805             while (right > left) {
24806                 if (right - left > 600) {
24807                     var n = right - left + 1;
24808                     var m = k - left + 1;
24809                     var z = Math.log(n);
24810                     var s = 0.5 * Math.exp(2 * z / 3);
24811                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
24812                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
24813                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
24814                     quickselectStep(arr, k, newLeft, newRight, compare);
24815                 }
24816
24817                 var t = arr[k];
24818                 var i = left;
24819                 var j = right;
24820
24821                 swap(arr, left, k);
24822                 if (compare(arr[right], t) > 0) swap(arr, left, right);
24823
24824                 while (i < j) {
24825                     swap(arr, i, j);
24826                     i++;
24827                     j--;
24828                     while (compare(arr[i], t) < 0) i++;
24829                     while (compare(arr[j], t) > 0) j--;
24830                 }
24831
24832                 if (compare(arr[left], t) === 0) swap(arr, left, j);
24833                 else {
24834                     j++;
24835                     swap(arr, j, right);
24836                 }
24837
24838                 if (j <= k) left = j + 1;
24839                 if (k <= j) right = j - 1;
24840             }
24841         }
24842
24843         function swap(arr, i, j) {
24844             var tmp = arr[i];
24845             arr[i] = arr[j];
24846             arr[j] = tmp;
24847         }
24848
24849         function defaultCompare(a, b) {
24850             return a < b ? -1 : a > b ? 1 : 0;
24851         }
24852
24853         return quickselect;
24854
24855         })));
24856         });
24857
24858         var rbush_1 = rbush;
24859         var default_1 = rbush;
24860
24861
24862
24863         function rbush(maxEntries, format) {
24864             if (!(this instanceof rbush)) return new rbush(maxEntries, format);
24865
24866             // max entries in a node is 9 by default; min node fill is 40% for best performance
24867             this._maxEntries = Math.max(4, maxEntries || 9);
24868             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
24869
24870             if (format) {
24871                 this._initFormat(format);
24872             }
24873
24874             this.clear();
24875         }
24876
24877         rbush.prototype = {
24878
24879             all: function () {
24880                 return this._all(this.data, []);
24881             },
24882
24883             search: function (bbox) {
24884
24885                 var node = this.data,
24886                     result = [],
24887                     toBBox = this.toBBox;
24888
24889                 if (!intersects$1(bbox, node)) return result;
24890
24891                 var nodesToSearch = [],
24892                     i, len, child, childBBox;
24893
24894                 while (node) {
24895                     for (i = 0, len = node.children.length; i < len; i++) {
24896
24897                         child = node.children[i];
24898                         childBBox = node.leaf ? toBBox(child) : child;
24899
24900                         if (intersects$1(bbox, childBBox)) {
24901                             if (node.leaf) result.push(child);
24902                             else if (contains$4(bbox, childBBox)) this._all(child, result);
24903                             else nodesToSearch.push(child);
24904                         }
24905                     }
24906                     node = nodesToSearch.pop();
24907                 }
24908
24909                 return result;
24910             },
24911
24912             collides: function (bbox) {
24913
24914                 var node = this.data,
24915                     toBBox = this.toBBox;
24916
24917                 if (!intersects$1(bbox, node)) return false;
24918
24919                 var nodesToSearch = [],
24920                     i, len, child, childBBox;
24921
24922                 while (node) {
24923                     for (i = 0, len = node.children.length; i < len; i++) {
24924
24925                         child = node.children[i];
24926                         childBBox = node.leaf ? toBBox(child) : child;
24927
24928                         if (intersects$1(bbox, childBBox)) {
24929                             if (node.leaf || contains$4(bbox, childBBox)) return true;
24930                             nodesToSearch.push(child);
24931                         }
24932                     }
24933                     node = nodesToSearch.pop();
24934                 }
24935
24936                 return false;
24937             },
24938
24939             load: function (data) {
24940                 if (!(data && data.length)) return this;
24941
24942                 if (data.length < this._minEntries) {
24943                     for (var i = 0, len = data.length; i < len; i++) {
24944                         this.insert(data[i]);
24945                     }
24946                     return this;
24947                 }
24948
24949                 // recursively build the tree with the given data from scratch using OMT algorithm
24950                 var node = this._build(data.slice(), 0, data.length - 1, 0);
24951
24952                 if (!this.data.children.length) {
24953                     // save as is if tree is empty
24954                     this.data = node;
24955
24956                 } else if (this.data.height === node.height) {
24957                     // split root if trees have the same height
24958                     this._splitRoot(this.data, node);
24959
24960                 } else {
24961                     if (this.data.height < node.height) {
24962                         // swap trees if inserted one is bigger
24963                         var tmpNode = this.data;
24964                         this.data = node;
24965                         node = tmpNode;
24966                     }
24967
24968                     // insert the small tree into the large tree at appropriate level
24969                     this._insert(node, this.data.height - node.height - 1, true);
24970                 }
24971
24972                 return this;
24973             },
24974
24975             insert: function (item) {
24976                 if (item) this._insert(item, this.data.height - 1);
24977                 return this;
24978             },
24979
24980             clear: function () {
24981                 this.data = createNode([]);
24982                 return this;
24983             },
24984
24985             remove: function (item, equalsFn) {
24986                 if (!item) return this;
24987
24988                 var node = this.data,
24989                     bbox = this.toBBox(item),
24990                     path = [],
24991                     indexes = [],
24992                     i, parent, index, goingUp;
24993
24994                 // depth-first iterative tree traversal
24995                 while (node || path.length) {
24996
24997                     if (!node) { // go up
24998                         node = path.pop();
24999                         parent = path[path.length - 1];
25000                         i = indexes.pop();
25001                         goingUp = true;
25002                     }
25003
25004                     if (node.leaf) { // check current node
25005                         index = findItem(item, node.children, equalsFn);
25006
25007                         if (index !== -1) {
25008                             // item found, remove the item and condense tree upwards
25009                             node.children.splice(index, 1);
25010                             path.push(node);
25011                             this._condense(path);
25012                             return this;
25013                         }
25014                     }
25015
25016                     if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
25017                         path.push(node);
25018                         indexes.push(i);
25019                         i = 0;
25020                         parent = node;
25021                         node = node.children[0];
25022
25023                     } else if (parent) { // go right
25024                         i++;
25025                         node = parent.children[i];
25026                         goingUp = false;
25027
25028                     } else node = null; // nothing found
25029                 }
25030
25031                 return this;
25032             },
25033
25034             toBBox: function (item) { return item; },
25035
25036             compareMinX: compareNodeMinX,
25037             compareMinY: compareNodeMinY,
25038
25039             toJSON: function () { return this.data; },
25040
25041             fromJSON: function (data) {
25042                 this.data = data;
25043                 return this;
25044             },
25045
25046             _all: function (node, result) {
25047                 var nodesToSearch = [];
25048                 while (node) {
25049                     if (node.leaf) result.push.apply(result, node.children);
25050                     else nodesToSearch.push.apply(nodesToSearch, node.children);
25051
25052                     node = nodesToSearch.pop();
25053                 }
25054                 return result;
25055             },
25056
25057             _build: function (items, left, right, height) {
25058
25059                 var N = right - left + 1,
25060                     M = this._maxEntries,
25061                     node;
25062
25063                 if (N <= M) {
25064                     // reached leaf level; return leaf
25065                     node = createNode(items.slice(left, right + 1));
25066                     calcBBox(node, this.toBBox);
25067                     return node;
25068                 }
25069
25070                 if (!height) {
25071                     // target height of the bulk-loaded tree
25072                     height = Math.ceil(Math.log(N) / Math.log(M));
25073
25074                     // target number of root entries to maximize storage utilization
25075                     M = Math.ceil(N / Math.pow(M, height - 1));
25076                 }
25077
25078                 node = createNode([]);
25079                 node.leaf = false;
25080                 node.height = height;
25081
25082                 // split the items into M mostly square tiles
25083
25084                 var N2 = Math.ceil(N / M),
25085                     N1 = N2 * Math.ceil(Math.sqrt(M)),
25086                     i, j, right2, right3;
25087
25088                 multiSelect(items, left, right, N1, this.compareMinX);
25089
25090                 for (i = left; i <= right; i += N1) {
25091
25092                     right2 = Math.min(i + N1 - 1, right);
25093
25094                     multiSelect(items, i, right2, N2, this.compareMinY);
25095
25096                     for (j = i; j <= right2; j += N2) {
25097
25098                         right3 = Math.min(j + N2 - 1, right2);
25099
25100                         // pack each entry recursively
25101                         node.children.push(this._build(items, j, right3, height - 1));
25102                     }
25103                 }
25104
25105                 calcBBox(node, this.toBBox);
25106
25107                 return node;
25108             },
25109
25110             _chooseSubtree: function (bbox, node, level, path) {
25111
25112                 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
25113
25114                 while (true) {
25115                     path.push(node);
25116
25117                     if (node.leaf || path.length - 1 === level) break;
25118
25119                     minArea = minEnlargement = Infinity;
25120
25121                     for (i = 0, len = node.children.length; i < len; i++) {
25122                         child = node.children[i];
25123                         area = bboxArea(child);
25124                         enlargement = enlargedArea(bbox, child) - area;
25125
25126                         // choose entry with the least area enlargement
25127                         if (enlargement < minEnlargement) {
25128                             minEnlargement = enlargement;
25129                             minArea = area < minArea ? area : minArea;
25130                             targetNode = child;
25131
25132                         } else if (enlargement === minEnlargement) {
25133                             // otherwise choose one with the smallest area
25134                             if (area < minArea) {
25135                                 minArea = area;
25136                                 targetNode = child;
25137                             }
25138                         }
25139                     }
25140
25141                     node = targetNode || node.children[0];
25142                 }
25143
25144                 return node;
25145             },
25146
25147             _insert: function (item, level, isNode) {
25148
25149                 var toBBox = this.toBBox,
25150                     bbox = isNode ? item : toBBox(item),
25151                     insertPath = [];
25152
25153                 // find the best node for accommodating the item, saving all nodes along the path too
25154                 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
25155
25156                 // put the item into the node
25157                 node.children.push(item);
25158                 extend$1(node, bbox);
25159
25160                 // split on node overflow; propagate upwards if necessary
25161                 while (level >= 0) {
25162                     if (insertPath[level].children.length > this._maxEntries) {
25163                         this._split(insertPath, level);
25164                         level--;
25165                     } else break;
25166                 }
25167
25168                 // adjust bboxes along the insertion path
25169                 this._adjustParentBBoxes(bbox, insertPath, level);
25170             },
25171
25172             // split overflowed node into two
25173             _split: function (insertPath, level) {
25174
25175                 var node = insertPath[level],
25176                     M = node.children.length,
25177                     m = this._minEntries;
25178
25179                 this._chooseSplitAxis(node, m, M);
25180
25181                 var splitIndex = this._chooseSplitIndex(node, m, M);
25182
25183                 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
25184                 newNode.height = node.height;
25185                 newNode.leaf = node.leaf;
25186
25187                 calcBBox(node, this.toBBox);
25188                 calcBBox(newNode, this.toBBox);
25189
25190                 if (level) insertPath[level - 1].children.push(newNode);
25191                 else this._splitRoot(node, newNode);
25192             },
25193
25194             _splitRoot: function (node, newNode) {
25195                 // split root node
25196                 this.data = createNode([node, newNode]);
25197                 this.data.height = node.height + 1;
25198                 this.data.leaf = false;
25199                 calcBBox(this.data, this.toBBox);
25200             },
25201
25202             _chooseSplitIndex: function (node, m, M) {
25203
25204                 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
25205
25206                 minOverlap = minArea = Infinity;
25207
25208                 for (i = m; i <= M - m; i++) {
25209                     bbox1 = distBBox(node, 0, i, this.toBBox);
25210                     bbox2 = distBBox(node, i, M, this.toBBox);
25211
25212                     overlap = intersectionArea(bbox1, bbox2);
25213                     area = bboxArea(bbox1) + bboxArea(bbox2);
25214
25215                     // choose distribution with minimum overlap
25216                     if (overlap < minOverlap) {
25217                         minOverlap = overlap;
25218                         index = i;
25219
25220                         minArea = area < minArea ? area : minArea;
25221
25222                     } else if (overlap === minOverlap) {
25223                         // otherwise choose distribution with minimum area
25224                         if (area < minArea) {
25225                             minArea = area;
25226                             index = i;
25227                         }
25228                     }
25229                 }
25230
25231                 return index;
25232             },
25233
25234             // sorts node children by the best axis for split
25235             _chooseSplitAxis: function (node, m, M) {
25236
25237                 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
25238                     compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
25239                     xMargin = this._allDistMargin(node, m, M, compareMinX),
25240                     yMargin = this._allDistMargin(node, m, M, compareMinY);
25241
25242                 // if total distributions margin value is minimal for x, sort by minX,
25243                 // otherwise it's already sorted by minY
25244                 if (xMargin < yMargin) node.children.sort(compareMinX);
25245             },
25246
25247             // total margin of all possible split distributions where each node is at least m full
25248             _allDistMargin: function (node, m, M, compare) {
25249
25250                 node.children.sort(compare);
25251
25252                 var toBBox = this.toBBox,
25253                     leftBBox = distBBox(node, 0, m, toBBox),
25254                     rightBBox = distBBox(node, M - m, M, toBBox),
25255                     margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
25256                     i, child;
25257
25258                 for (i = m; i < M - m; i++) {
25259                     child = node.children[i];
25260                     extend$1(leftBBox, node.leaf ? toBBox(child) : child);
25261                     margin += bboxMargin(leftBBox);
25262                 }
25263
25264                 for (i = M - m - 1; i >= m; i--) {
25265                     child = node.children[i];
25266                     extend$1(rightBBox, node.leaf ? toBBox(child) : child);
25267                     margin += bboxMargin(rightBBox);
25268                 }
25269
25270                 return margin;
25271             },
25272
25273             _adjustParentBBoxes: function (bbox, path, level) {
25274                 // adjust bboxes along the given tree path
25275                 for (var i = level; i >= 0; i--) {
25276                     extend$1(path[i], bbox);
25277                 }
25278             },
25279
25280             _condense: function (path) {
25281                 // go through the path, removing empty nodes and updating bboxes
25282                 for (var i = path.length - 1, siblings; i >= 0; i--) {
25283                     if (path[i].children.length === 0) {
25284                         if (i > 0) {
25285                             siblings = path[i - 1].children;
25286                             siblings.splice(siblings.indexOf(path[i]), 1);
25287
25288                         } else this.clear();
25289
25290                     } else calcBBox(path[i], this.toBBox);
25291                 }
25292             },
25293
25294             _initFormat: function (format) {
25295                 // data format (minX, minY, maxX, maxY accessors)
25296
25297                 // uses eval-type function compilation instead of just accepting a toBBox function
25298                 // because the algorithms are very sensitive to sorting functions performance,
25299                 // so they should be dead simple and without inner calls
25300
25301                 var compareArr = ['return a', ' - b', ';'];
25302
25303                 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
25304                 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
25305
25306                 this.toBBox = new Function('a',
25307                     'return {minX: a' + format[0] +
25308                     ', minY: a' + format[1] +
25309                     ', maxX: a' + format[2] +
25310                     ', maxY: a' + format[3] + '};');
25311             }
25312         };
25313
25314         function findItem(item, items, equalsFn) {
25315             if (!equalsFn) return items.indexOf(item);
25316
25317             for (var i = 0; i < items.length; i++) {
25318                 if (equalsFn(item, items[i])) return i;
25319             }
25320             return -1;
25321         }
25322
25323         // calculate node's bbox from bboxes of its children
25324         function calcBBox(node, toBBox) {
25325             distBBox(node, 0, node.children.length, toBBox, node);
25326         }
25327
25328         // min bounding rectangle of node children from k to p-1
25329         function distBBox(node, k, p, toBBox, destNode) {
25330             if (!destNode) destNode = createNode(null);
25331             destNode.minX = Infinity;
25332             destNode.minY = Infinity;
25333             destNode.maxX = -Infinity;
25334             destNode.maxY = -Infinity;
25335
25336             for (var i = k, child; i < p; i++) {
25337                 child = node.children[i];
25338                 extend$1(destNode, node.leaf ? toBBox(child) : child);
25339             }
25340
25341             return destNode;
25342         }
25343
25344         function extend$1(a, b) {
25345             a.minX = Math.min(a.minX, b.minX);
25346             a.minY = Math.min(a.minY, b.minY);
25347             a.maxX = Math.max(a.maxX, b.maxX);
25348             a.maxY = Math.max(a.maxY, b.maxY);
25349             return a;
25350         }
25351
25352         function compareNodeMinX(a, b) { return a.minX - b.minX; }
25353         function compareNodeMinY(a, b) { return a.minY - b.minY; }
25354
25355         function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
25356         function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
25357
25358         function enlargedArea(a, b) {
25359             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
25360                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
25361         }
25362
25363         function intersectionArea(a, b) {
25364             var minX = Math.max(a.minX, b.minX),
25365                 minY = Math.max(a.minY, b.minY),
25366                 maxX = Math.min(a.maxX, b.maxX),
25367                 maxY = Math.min(a.maxY, b.maxY);
25368
25369             return Math.max(0, maxX - minX) *
25370                    Math.max(0, maxY - minY);
25371         }
25372
25373         function contains$4(a, b) {
25374             return a.minX <= b.minX &&
25375                    a.minY <= b.minY &&
25376                    b.maxX <= a.maxX &&
25377                    b.maxY <= a.maxY;
25378         }
25379
25380         function intersects$1(a, b) {
25381             return b.minX <= a.maxX &&
25382                    b.minY <= a.maxY &&
25383                    b.maxX >= a.minX &&
25384                    b.maxY >= a.minY;
25385         }
25386
25387         function createNode(children) {
25388             return {
25389                 children: children,
25390                 height: 1,
25391                 leaf: true,
25392                 minX: Infinity,
25393                 minY: Infinity,
25394                 maxX: -Infinity,
25395                 maxY: -Infinity
25396             };
25397         }
25398
25399         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
25400         // combines selection algorithm with binary divide & conquer approach
25401
25402         function multiSelect(arr, left, right, n, compare) {
25403             var stack = [left, right],
25404                 mid;
25405
25406             while (stack.length) {
25407                 right = stack.pop();
25408                 left = stack.pop();
25409
25410                 if (right - left <= n) continue;
25411
25412                 mid = left + Math.ceil((right - left) / n / 2) * n;
25413                 quickselect(arr, mid, left, right, compare);
25414
25415                 stack.push(left, mid, mid, right);
25416             }
25417         }
25418         rbush_1.default = default_1;
25419
25420         var lineclip_1 = lineclip;
25421
25422         lineclip.polyline = lineclip;
25423         lineclip.polygon = polygonclip;
25424
25425
25426         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
25427         // handle polylines rather than just segments
25428
25429         function lineclip(points, bbox, result) {
25430
25431             var len = points.length,
25432                 codeA = bitCode(points[0], bbox),
25433                 part = [],
25434                 i, a, b, codeB, lastCode;
25435
25436             if (!result) result = [];
25437
25438             for (i = 1; i < len; i++) {
25439                 a = points[i - 1];
25440                 b = points[i];
25441                 codeB = lastCode = bitCode(b, bbox);
25442
25443                 while (true) {
25444
25445                     if (!(codeA | codeB)) { // accept
25446                         part.push(a);
25447
25448                         if (codeB !== lastCode) { // segment went outside
25449                             part.push(b);
25450
25451                             if (i < len - 1) { // start a new line
25452                                 result.push(part);
25453                                 part = [];
25454                             }
25455                         } else if (i === len - 1) {
25456                             part.push(b);
25457                         }
25458                         break;
25459
25460                     } else if (codeA & codeB) { // trivial reject
25461                         break;
25462
25463                     } else if (codeA) { // a outside, intersect with clip edge
25464                         a = intersect$1(a, b, codeA, bbox);
25465                         codeA = bitCode(a, bbox);
25466
25467                     } else { // b outside
25468                         b = intersect$1(a, b, codeB, bbox);
25469                         codeB = bitCode(b, bbox);
25470                     }
25471                 }
25472
25473                 codeA = lastCode;
25474             }
25475
25476             if (part.length) result.push(part);
25477
25478             return result;
25479         }
25480
25481         // Sutherland-Hodgeman polygon clipping algorithm
25482
25483         function polygonclip(points, bbox) {
25484
25485             var result, edge, prev, prevInside, i, p, inside;
25486
25487             // clip against each side of the clip rectangle
25488             for (edge = 1; edge <= 8; edge *= 2) {
25489                 result = [];
25490                 prev = points[points.length - 1];
25491                 prevInside = !(bitCode(prev, bbox) & edge);
25492
25493                 for (i = 0; i < points.length; i++) {
25494                     p = points[i];
25495                     inside = !(bitCode(p, bbox) & edge);
25496
25497                     // if segment goes through the clip window, add an intersection
25498                     if (inside !== prevInside) result.push(intersect$1(prev, p, edge, bbox));
25499
25500                     if (inside) result.push(p); // add a point if it's inside
25501
25502                     prev = p;
25503                     prevInside = inside;
25504                 }
25505
25506                 points = result;
25507
25508                 if (!points.length) break;
25509             }
25510
25511             return result;
25512         }
25513
25514         // intersect a segment against one of the 4 lines that make up the bbox
25515
25516         function intersect$1(a, b, edge, bbox) {
25517             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
25518                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
25519                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
25520                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
25521                    null;
25522         }
25523
25524         // bit code reflects the point position relative to the bbox:
25525
25526         //         left  mid  right
25527         //    top  1001  1000  1010
25528         //    mid  0001  0000  0010
25529         // bottom  0101  0100  0110
25530
25531         function bitCode(p, bbox) {
25532             var code = 0;
25533
25534             if (p[0] < bbox[0]) code |= 1; // left
25535             else if (p[0] > bbox[2]) code |= 2; // right
25536
25537             if (p[1] < bbox[1]) code |= 4; // bottom
25538             else if (p[1] > bbox[3]) code |= 8; // top
25539
25540             return code;
25541         }
25542
25543         var whichPolygon_1 = whichPolygon;
25544
25545         function whichPolygon(data) {
25546             var bboxes = [];
25547             for (var i = 0; i < data.features.length; i++) {
25548                 var feature = data.features[i];
25549                 var coords = feature.geometry.coordinates;
25550
25551                 if (feature.geometry.type === 'Polygon') {
25552                     bboxes.push(treeItem(coords, feature.properties));
25553
25554                 } else if (feature.geometry.type === 'MultiPolygon') {
25555                     for (var j = 0; j < coords.length; j++) {
25556                         bboxes.push(treeItem(coords[j], feature.properties));
25557                     }
25558                 }
25559             }
25560
25561             var tree = rbush_1().load(bboxes);
25562
25563             function query(p, multi) {
25564                 var output = [],
25565                     result = tree.search({
25566                         minX: p[0],
25567                         minY: p[1],
25568                         maxX: p[0],
25569                         maxY: p[1]
25570                     });
25571                 for (var i = 0; i < result.length; i++) {
25572                     if (insidePolygon(result[i].coords, p)) {
25573                         if (multi)
25574                             output.push(result[i].props);
25575                         else
25576                             return result[i].props;
25577                     }
25578                 }
25579                 return multi && output.length ? output : null;
25580             }
25581
25582             query.tree = tree;
25583             query.bbox = function queryBBox(bbox) {
25584                 var output = [];
25585                 var result = tree.search({
25586                     minX: bbox[0],
25587                     minY: bbox[1],
25588                     maxX: bbox[2],
25589                     maxY: bbox[3]
25590                 });
25591                 for (var i = 0; i < result.length; i++) {
25592                     if (polygonIntersectsBBox(result[i].coords, bbox)) {
25593                         output.push(result[i].props);
25594                     }
25595                 }
25596                 return output;
25597             };
25598
25599             return query;
25600         }
25601
25602         function polygonIntersectsBBox(polygon, bbox) {
25603             var bboxCenter = [
25604                 (bbox[0] + bbox[2]) / 2,
25605                 (bbox[1] + bbox[3]) / 2
25606             ];
25607             if (insidePolygon(polygon, bboxCenter)) return true;
25608             for (var i = 0; i < polygon.length; i++) {
25609                 if (lineclip_1(polygon[i], bbox).length > 0) return true;
25610             }
25611             return false;
25612         }
25613
25614         // ray casting algorithm for detecting if point is in polygon
25615         function insidePolygon(rings, p) {
25616             var inside = false;
25617             for (var i = 0, len = rings.length; i < len; i++) {
25618                 var ring = rings[i];
25619                 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
25620                     if (rayIntersect(p, ring[j], ring[k])) inside = !inside;
25621                 }
25622             }
25623             return inside;
25624         }
25625
25626         function rayIntersect(p, p1, p2) {
25627             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]);
25628         }
25629
25630         function treeItem(coords, props) {
25631             var item = {
25632                 minX: Infinity,
25633                 minY: Infinity,
25634                 maxX: -Infinity,
25635                 maxY: -Infinity,
25636                 coords: coords,
25637                 props: props
25638             };
25639
25640             for (var i = 0; i < coords[0].length; i++) {
25641                 var p = coords[0][i];
25642                 item.minX = Math.min(item.minX, p[0]);
25643                 item.minY = Math.min(item.minY, p[1]);
25644                 item.maxX = Math.max(item.maxX, p[0]);
25645                 item.maxY = Math.max(item.maxY, p[1]);
25646             }
25647             return item;
25648         }
25649
25650         // index the osm-community-index
25651         var ociFeatureCollection = Object.values(features$3).map(function(feature) {
25652             // workaround for which-polygon: only supports `properties`, not `id`
25653             // https://github.com/mapbox/which-polygon/pull/6
25654             feature.properties = {
25655                 id: feature.id,
25656                 area: d3_geoArea(feature)   // also precompute areas
25657             };
25658             return feature;
25659         });
25660
25661
25662         var data = {
25663             community: {
25664                 features: features$3,
25665                 resources: resources,
25666                 query: whichPolygon_1({
25667                     type: 'FeatureCollection',
25668                     features: ociFeatureCollection
25669                 })
25670             },
25671             imagery: dataImagery,  //legacy
25672             presets: {
25673                 presets: presets,
25674                 defaults: defaults,
25675                 categories: categories,
25676                 fields: fields
25677             }
25678         };
25679
25680         // http://2ality.com/2015/01/es6-set-operations.html
25681
25682         // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
25683         // This operation is also sometimes called minus (-).
25684         // var a = [1,2,3];
25685         // var b = [4,3,2];
25686         // utilArrayDifference(a, b)
25687         //   [1]
25688         // utilArrayDifference(b, a)
25689         //   [4]
25690         function utilArrayDifference(a, b) {
25691             var other = new Set(b);
25692             return Array.from(new Set(a))
25693                 .filter(function(v) { return !other.has(v); });
25694         }
25695
25696         // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
25697         // var a = [1,2,3];
25698         // var b = [4,3,2];
25699         // utilArrayIntersection(a, b)
25700         //   [2,3]
25701         function utilArrayIntersection(a, b) {
25702             var other = new Set(b);
25703             return Array.from(new Set(a))
25704                 .filter(function(v) { return other.has(v); });
25705         }
25706
25707         // Union (a ∪ b): create a set that contains the elements of both set a and set b.
25708         // var a = [1,2,3];
25709         // var b = [4,3,2];
25710         // utilArrayUnion(a, b)
25711         //   [1,2,3,4]
25712         function utilArrayUnion(a, b) {
25713             var result = new Set(a);
25714             b.forEach(function(v) { result.add(v); });
25715             return Array.from(result);
25716         }
25717
25718         // Returns an Array with all the duplicates removed
25719         // var a = [1,1,2,3,3];
25720         // utilArrayUniq(a)
25721         //   [1,2,3]
25722         function utilArrayUniq(a) {
25723             return Array.from(new Set(a));
25724         }
25725
25726
25727         // Splits array into chunks of given chunk size
25728         // var a = [1,2,3,4,5,6,7];
25729         // utilArrayChunk(a, 3);
25730         //   [[1,2,3],[4,5,6],[7]];
25731         function utilArrayChunk(a, chunkSize) {
25732             if (!chunkSize || chunkSize < 0) return [a.slice()];
25733
25734             var result = new Array(Math.ceil(a.length / chunkSize));
25735             return Array.from(result, function(item, i) {
25736                 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
25737             });
25738         }
25739
25740
25741         // Flattens two level array into a single level
25742         // var a = [[1,2,3],[4,5,6],[7]];
25743         // utilArrayFlatten(a);
25744         //   [1,2,3,4,5,6,7];
25745         function utilArrayFlatten(a) {
25746             return a.reduce(function(acc, val) {
25747                 return acc.concat(val);
25748             }, []);
25749         }
25750
25751
25752         // Groups the items of the Array according to the given key
25753         // `key` can be passed as a property or as a key function
25754         //
25755         // var pets = [
25756         //     { type: 'Dog', name: 'Spot' },
25757         //     { type: 'Cat', name: 'Tiger' },
25758         //     { type: 'Dog', name: 'Rover' },
25759         //     { type: 'Cat', name: 'Leo' }
25760         // ];
25761         //
25762         // utilArrayGroupBy(pets, 'type')
25763         //   {
25764         //     'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
25765         //     'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
25766         //   }
25767         //
25768         // utilArrayGroupBy(pets, function(item) { return item.name.length; })
25769         //   {
25770         //     3: [{type: 'Cat', name: 'Leo'}],
25771         //     4: [{type: 'Dog', name: 'Spot'}],
25772         //     5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
25773         //   }
25774         function utilArrayGroupBy(a, key) {
25775             return a.reduce(function(acc, item) {
25776                 var group = (typeof key === 'function') ? key(item) : item[key];
25777                 (acc[group] = acc[group] || []).push(item);
25778                 return acc;
25779             }, {});
25780         }
25781
25782
25783         // Returns an Array with all the duplicates removed
25784         // where uniqueness determined by the given key
25785         // `key` can be passed as a property or as a key function
25786         //
25787         // var pets = [
25788         //     { type: 'Dog', name: 'Spot' },
25789         //     { type: 'Cat', name: 'Tiger' },
25790         //     { type: 'Dog', name: 'Rover' },
25791         //     { type: 'Cat', name: 'Leo' }
25792         // ];
25793         //
25794         // utilArrayUniqBy(pets, 'type')
25795         //   [
25796         //     { type: 'Dog', name: 'Spot' },
25797         //     { type: 'Cat', name: 'Tiger' }
25798         //   ]
25799         //
25800         // utilArrayUniqBy(pets, function(item) { return item.name.length; })
25801         //   [
25802         //     { type: 'Dog', name: 'Spot' },
25803         //     { type: 'Cat', name: 'Tiger' },
25804         //     { type: 'Cat', name: 'Leo' }
25805         //   }
25806         function utilArrayUniqBy(a, key) {
25807             var seen = new Set();
25808             return a.reduce(function(acc, item) {
25809                 var val = (typeof key === 'function') ? key(item) : item[key];
25810                 if (val && !seen.has(val)) {
25811                     seen.add(val);
25812                     acc.push(item);
25813                 }
25814                 return acc;
25815             }, []);
25816         }
25817
25818         var remove$1 = removeDiacritics;
25819
25820         var replacementList = [
25821           {
25822             base: ' ',
25823             chars: "\u00A0",
25824           }, {
25825             base: '0',
25826             chars: "\u07C0",
25827           }, {
25828             base: 'A',
25829             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",
25830           }, {
25831             base: 'AA',
25832             chars: "\uA732",
25833           }, {
25834             base: 'AE',
25835             chars: "\u00C6\u01FC\u01E2",
25836           }, {
25837             base: 'AO',
25838             chars: "\uA734",
25839           }, {
25840             base: 'AU',
25841             chars: "\uA736",
25842           }, {
25843             base: 'AV',
25844             chars: "\uA738\uA73A",
25845           }, {
25846             base: 'AY',
25847             chars: "\uA73C",
25848           }, {
25849             base: 'B',
25850             chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
25851           }, {
25852             base: 'C',
25853             chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
25854           }, {
25855             base: 'D',
25856             chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
25857           }, {
25858             base: 'Dh',
25859             chars: "\u00D0",
25860           }, {
25861             base: 'DZ',
25862             chars: "\u01F1\u01C4",
25863           }, {
25864             base: 'Dz',
25865             chars: "\u01F2\u01C5",
25866           }, {
25867             base: 'E',
25868             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",
25869           }, {
25870             base: 'F',
25871             chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
25872           }, {
25873             base: 'G',
25874             chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
25875           }, {
25876             base: 'H',
25877             chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
25878           }, {
25879             base: 'I',
25880             chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
25881           }, {
25882             base: 'J',
25883             chars: "\u24BF\uFF2A\u0134\u0248\u0237",
25884           }, {
25885             base: 'K',
25886             chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
25887           }, {
25888             base: 'L',
25889             chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
25890           }, {
25891             base: 'LJ',
25892             chars: "\u01C7",
25893           }, {
25894             base: 'Lj',
25895             chars: "\u01C8",
25896           }, {
25897             base: 'M',
25898             chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
25899           }, {
25900             base: 'N',
25901             chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
25902           }, {
25903             base: 'NJ',
25904             chars: "\u01CA",
25905           }, {
25906             base: 'Nj',
25907             chars: "\u01CB",
25908           }, {
25909             base: 'O',
25910             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",
25911           }, {
25912             base: 'OE',
25913             chars: "\u0152",
25914           }, {
25915             base: 'OI',
25916             chars: "\u01A2",
25917           }, {
25918             base: 'OO',
25919             chars: "\uA74E",
25920           }, {
25921             base: 'OU',
25922             chars: "\u0222",
25923           }, {
25924             base: 'P',
25925             chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
25926           }, {
25927             base: 'Q',
25928             chars: "\u24C6\uFF31\uA756\uA758\u024A",
25929           }, {
25930             base: 'R',
25931             chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
25932           }, {
25933             base: 'S',
25934             chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
25935           }, {
25936             base: 'T',
25937             chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
25938           }, {
25939             base: 'Th',
25940             chars: "\u00DE",
25941           }, {
25942             base: 'TZ',
25943             chars: "\uA728",
25944           }, {
25945             base: 'U',
25946             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",
25947           }, {
25948             base: 'V',
25949             chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
25950           }, {
25951             base: 'VY',
25952             chars: "\uA760",
25953           }, {
25954             base: 'W',
25955             chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
25956           }, {
25957             base: 'X',
25958             chars: "\u24CD\uFF38\u1E8A\u1E8C",
25959           }, {
25960             base: 'Y',
25961             chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
25962           }, {
25963             base: 'Z',
25964             chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
25965           }, {
25966             base: 'a',
25967             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",
25968           }, {
25969             base: 'aa',
25970             chars: "\uA733",
25971           }, {
25972             base: 'ae',
25973             chars: "\u00E6\u01FD\u01E3",
25974           }, {
25975             base: 'ao',
25976             chars: "\uA735",
25977           }, {
25978             base: 'au',
25979             chars: "\uA737",
25980           }, {
25981             base: 'av',
25982             chars: "\uA739\uA73B",
25983           }, {
25984             base: 'ay',
25985             chars: "\uA73D",
25986           }, {
25987             base: 'b',
25988             chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
25989           }, {
25990             base: 'c',
25991             chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
25992           }, {
25993             base: 'd',
25994             chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
25995           }, {
25996             base: 'dh',
25997             chars: "\u00F0",
25998           }, {
25999             base: 'dz',
26000             chars: "\u01F3\u01C6",
26001           }, {
26002             base: 'e',
26003             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",
26004           }, {
26005             base: 'f',
26006             chars: "\u24D5\uFF46\u1E1F\u0192",
26007           }, {
26008             base: 'ff',
26009             chars: "\uFB00",
26010           }, {
26011             base: 'fi',
26012             chars: "\uFB01",
26013           }, {
26014             base: 'fl',
26015             chars: "\uFB02",
26016           }, {
26017             base: 'ffi',
26018             chars: "\uFB03",
26019           }, {
26020             base: 'ffl',
26021             chars: "\uFB04",
26022           }, {
26023             base: 'g',
26024             chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
26025           }, {
26026             base: 'h',
26027             chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
26028           }, {
26029             base: 'hv',
26030             chars: "\u0195",
26031           }, {
26032             base: 'i',
26033             chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
26034           }, {
26035             base: 'j',
26036             chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
26037           }, {
26038             base: 'k',
26039             chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
26040           }, {
26041             base: 'l',
26042             chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
26043           }, {
26044             base: 'lj',
26045             chars: "\u01C9",
26046           }, {
26047             base: 'm',
26048             chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
26049           }, {
26050             base: 'n',
26051             chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
26052           }, {
26053             base: 'nj',
26054             chars: "\u01CC",
26055           }, {
26056             base: 'o',
26057             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",
26058           }, {
26059             base: 'oe',
26060             chars: "\u0153",
26061           }, {
26062             base: 'oi',
26063             chars: "\u01A3",
26064           }, {
26065             base: 'oo',
26066             chars: "\uA74F",
26067           }, {
26068             base: 'ou',
26069             chars: "\u0223",
26070           }, {
26071             base: 'p',
26072             chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
26073           }, {
26074             base: 'q',
26075             chars: "\u24E0\uFF51\u024B\uA757\uA759",
26076           }, {
26077             base: 'r',
26078             chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
26079           }, {
26080             base: 's',
26081             chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
26082           }, {
26083             base: 'ss',
26084             chars: "\xDF",
26085           }, {
26086             base: 't',
26087             chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
26088           }, {
26089             base: 'th',
26090             chars: "\u00FE",
26091           }, {
26092             base: 'tz',
26093             chars: "\uA729",
26094           }, {
26095             base: 'u',
26096             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",
26097           }, {
26098             base: 'v',
26099             chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
26100           }, {
26101             base: 'vy',
26102             chars: "\uA761",
26103           }, {
26104             base: 'w',
26105             chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
26106           }, {
26107             base: 'x',
26108             chars: "\u24E7\uFF58\u1E8B\u1E8D",
26109           }, {
26110             base: 'y',
26111             chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
26112           }, {
26113             base: 'z',
26114             chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
26115           }
26116         ];
26117
26118         var diacriticsMap = {};
26119         for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
26120           var chars = replacementList[i$1].chars;
26121           for (var j = 0; j < chars.length; j += 1) {
26122             diacriticsMap[chars[j]] = replacementList[i$1].base;
26123           }
26124         }
26125
26126         function removeDiacritics(str) {
26127           return str.replace(/[^\u0000-\u007e]/g, function(c) {
26128             return diacriticsMap[c] || c;
26129           });
26130         }
26131
26132         var replacementList_1 = replacementList;
26133         var diacriticsMap_1 = diacriticsMap;
26134
26135         var diacritics = {
26136                 remove: remove$1,
26137                 replacementList: replacementList_1,
26138                 diacriticsMap: diacriticsMap_1
26139         };
26140
26141         var isArabic_1 = createCommonjsModule(function (module, exports) {
26142         Object.defineProperty(exports, "__esModule", { value: true });
26143         var arabicBlocks = [
26144             [0x0600, 0x06FF],
26145             [0x0750, 0x077F],
26146             [0x08A0, 0x08FF],
26147             [0xFB50, 0xFDFF],
26148             [0xFE70, 0xFEFF],
26149             [0x10E60, 0x10E7F],
26150             [0x1EC70, 0x1ECBF],
26151             [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
26152         ];
26153         function isArabic(char) {
26154             if (char.length > 1) {
26155                 // allow the newer chars?
26156                 throw new Error('isArabic works on only one-character strings');
26157             }
26158             var code = char.charCodeAt(0);
26159             for (var i = 0; i < arabicBlocks.length; i++) {
26160                 var block = arabicBlocks[i];
26161                 if (code >= block[0] && code <= block[1]) {
26162                     return true;
26163                 }
26164             }
26165             return false;
26166         }
26167         exports.isArabic = isArabic;
26168         function isMath(char) {
26169             if (char.length > 2) {
26170                 // allow the newer chars?
26171                 throw new Error('isMath works on only one-character strings');
26172             }
26173             var code = char.charCodeAt(0);
26174             return ((code >= 0x660 && code <= 0x66C) || (code >= 0x6F0 && code <= 0x6F9));
26175         }
26176         exports.isMath = isMath;
26177         });
26178
26179         unwrapExports(isArabic_1);
26180         var isArabic_2 = isArabic_1.isArabic;
26181         var isArabic_3 = isArabic_1.isMath;
26182
26183         var unicodeArabic = createCommonjsModule(function (module, exports) {
26184         Object.defineProperty(exports, "__esModule", { value: true });
26185         var arabicReference = {
26186             "alef": {
26187                 "normal": [
26188                     "\u0627"
26189                 ],
26190                 "madda_above": {
26191                     "normal": [
26192                         "\u0627\u0653",
26193                         "\u0622"
26194                     ],
26195                     "isolated": "\uFE81",
26196                     "final": "\uFE82"
26197                 },
26198                 "hamza_above": {
26199                     "normal": [
26200                         "\u0627\u0654",
26201                         "\u0623"
26202                     ],
26203                     "isolated": "\uFE83",
26204                     "final": "\uFE84"
26205                 },
26206                 "hamza_below": {
26207                     "normal": [
26208                         "\u0627\u0655",
26209                         "\u0625"
26210                     ],
26211                     "isolated": "\uFE87",
26212                     "final": "\uFE88"
26213                 },
26214                 "wasla": {
26215                     "normal": "\u0671",
26216                     "isolated": "\uFB50",
26217                     "final": "\uFB51"
26218                 },
26219                 "wavy_hamza_above": [
26220                     "\u0672"
26221                 ],
26222                 "wavy_hamza_below": [
26223                     "\u0627\u065F",
26224                     "\u0673"
26225                 ],
26226                 "high_hamza": [
26227                     "\u0675",
26228                     "\u0627\u0674"
26229                 ],
26230                 "indic_two_above": [
26231                     "\u0773"
26232                 ],
26233                 "indic_three_above": [
26234                     "\u0774"
26235                 ],
26236                 "fathatan": {
26237                     "normal": [
26238                         "\u0627\u064B"
26239                     ],
26240                     "final": "\uFD3C",
26241                     "isolated": "\uFD3D"
26242                 },
26243                 "isolated": "\uFE8D",
26244                 "final": "\uFE8E"
26245             },
26246             "beh": {
26247                 "normal": [
26248                     "\u0628"
26249                 ],
26250                 "dotless": [
26251                     "\u066E"
26252                 ],
26253                 "three_dots_horizontally_below": [
26254                     "\u0750"
26255                 ],
26256                 "dot_below_three_dots_above": [
26257                     "\u0751"
26258                 ],
26259                 "three_dots_pointing_upwards_below": [
26260                     "\u0752"
26261                 ],
26262                 "three_dots_pointing_upwards_below_two_dots_above": [
26263                     "\u0753"
26264                 ],
26265                 "two_dots_below_dot_above": [
26266                     "\u0754"
26267                 ],
26268                 "inverted_small_v_below": [
26269                     "\u0755"
26270                 ],
26271                 "small_v": [
26272                     "\u0756"
26273                 ],
26274                 "small_v_below": [
26275                     "\u08A0"
26276                 ],
26277                 "hamza_above": [
26278                     "\u08A1"
26279                 ],
26280                 "small_meem_above": [
26281                     "\u08B6"
26282                 ],
26283                 "isolated": "\uFE8F",
26284                 "final": "\uFE90",
26285                 "initial": "\uFE91",
26286                 "medial": "\uFE92"
26287             },
26288             "teh marbuta": {
26289                 "normal": [
26290                     "\u0629"
26291                 ],
26292                 "isolated": "\uFE93",
26293                 "final": "\uFE94"
26294             },
26295             "teh": {
26296                 "normal": [
26297                     "\u062A"
26298                 ],
26299                 "ring": [
26300                     "\u067C"
26301                 ],
26302                 "three_dots_above_downwards": [
26303                     "\u067D"
26304                 ],
26305                 "small_teh_above": [
26306                     "\u08B8"
26307                 ],
26308                 "isolated": "\uFE95",
26309                 "final": "\uFE96",
26310                 "initial": "\uFE97",
26311                 "medial": "\uFE98"
26312             },
26313             "theh": {
26314                 "normal": [
26315                     "\u062B"
26316                 ],
26317                 "isolated": "\uFE99",
26318                 "final": "\uFE9A",
26319                 "initial": "\uFE9B",
26320                 "medial": "\uFE9C"
26321             },
26322             "jeem": {
26323                 "normal": [
26324                     "\u062C"
26325                 ],
26326                 "two_dots_above": [
26327                     "\u08A2"
26328                 ],
26329                 "isolated": "\uFE9D",
26330                 "final": "\uFE9E",
26331                 "initial": "\uFE9F",
26332                 "medial": "\uFEA0"
26333             },
26334             "hah": {
26335                 "normal": [
26336                     "\u062D"
26337                 ],
26338                 "hamza_above": [
26339                     "\u0681"
26340                 ],
26341                 "two_dots_vertical_above": [
26342                     "\u0682"
26343                 ],
26344                 "three_dots_above": [
26345                     "\u0685"
26346                 ],
26347                 "two_dots_above": [
26348                     "\u0757"
26349                 ],
26350                 "three_dots_pointing_upwards_below": [
26351                     "\u0758"
26352                 ],
26353                 "small_tah_below": [
26354                     "\u076E"
26355                 ],
26356                 "small_tah_two_dots": [
26357                     "\u076F"
26358                 ],
26359                 "small_tah_above": [
26360                     "\u0772"
26361                 ],
26362                 "indic_four_below": [
26363                     "\u077C"
26364                 ],
26365                 "isolated": "\uFEA1",
26366                 "final": "\uFEA2",
26367                 "initial": "\uFEA3",
26368                 "medial": "\uFEA4"
26369             },
26370             "khah": {
26371                 "normal": [
26372                     "\u062E"
26373                 ],
26374                 "isolated": "\uFEA5",
26375                 "final": "\uFEA6",
26376                 "initial": "\uFEA7",
26377                 "medial": "\uFEA8"
26378             },
26379             "dal": {
26380                 "normal": [
26381                     "\u062F"
26382                 ],
26383                 "ring": [
26384                     "\u0689"
26385                 ],
26386                 "dot_below": [
26387                     "\u068A"
26388                 ],
26389                 "dot_below_small_tah": [
26390                     "\u068B"
26391                 ],
26392                 "three_dots_above_downwards": [
26393                     "\u068F"
26394                 ],
26395                 "four_dots_above": [
26396                     "\u0690"
26397                 ],
26398                 "inverted_v": [
26399                     "\u06EE"
26400                 ],
26401                 "two_dots_vertically_below_small_tah": [
26402                     "\u0759"
26403                 ],
26404                 "inverted_small_v_below": [
26405                     "\u075A"
26406                 ],
26407                 "three_dots_below": [
26408                     "\u08AE"
26409                 ],
26410                 "isolated": "\uFEA9",
26411                 "final": "\uFEAA"
26412             },
26413             "thal": {
26414                 "normal": [
26415                     "\u0630"
26416                 ],
26417                 "isolated": "\uFEAB",
26418                 "final": "\uFEAC"
26419             },
26420             "reh": {
26421                 "normal": [
26422                     "\u0631"
26423                 ],
26424                 "small_v": [
26425                     "\u0692"
26426                 ],
26427                 "ring": [
26428                     "\u0693"
26429                 ],
26430                 "dot_below": [
26431                     "\u0694"
26432                 ],
26433                 "small_v_below": [
26434                     "\u0695"
26435                 ],
26436                 "dot_below_dot_above": [
26437                     "\u0696"
26438                 ],
26439                 "two_dots_above": [
26440                     "\u0697"
26441                 ],
26442                 "four_dots_above": [
26443                     "\u0699"
26444                 ],
26445                 "inverted_v": [
26446                     "\u06EF"
26447                 ],
26448                 "stroke": [
26449                     "\u075B"
26450                 ],
26451                 "two_dots_vertically_above": [
26452                     "\u076B"
26453                 ],
26454                 "hamza_above": [
26455                     "\u076C"
26456                 ],
26457                 "small_tah_two_dots": [
26458                     "\u0771"
26459                 ],
26460                 "loop": [
26461                     "\u08AA"
26462                 ],
26463                 "small_noon_above": [
26464                     "\u08B9"
26465                 ],
26466                 "isolated": "\uFEAD",
26467                 "final": "\uFEAE"
26468             },
26469             "zain": {
26470                 "normal": [
26471                     "\u0632"
26472                 ],
26473                 "inverted_v_above": [
26474                     "\u08B2"
26475                 ],
26476                 "isolated": "\uFEAF",
26477                 "final": "\uFEB0"
26478             },
26479             "seen": {
26480                 "normal": [
26481                     "\u0633"
26482                 ],
26483                 "dot_below_dot_above": [
26484                     "\u069A"
26485                 ],
26486                 "three_dots_below": [
26487                     "\u069B"
26488                 ],
26489                 "three_dots_below_three_dots_above": [
26490                     "\u069C"
26491                 ],
26492                 "four_dots_above": [
26493                     "\u075C"
26494                 ],
26495                 "two_dots_vertically_above": [
26496                     "\u076D"
26497                 ],
26498                 "small_tah_two_dots": [
26499                     "\u0770"
26500                 ],
26501                 "indic_four_above": [
26502                     "\u077D"
26503                 ],
26504                 "inverted_v": [
26505                     "\u077E"
26506                 ],
26507                 "isolated": "\uFEB1",
26508                 "final": "\uFEB2",
26509                 "initial": "\uFEB3",
26510                 "medial": "\uFEB4"
26511             },
26512             "sheen": {
26513                 "normal": [
26514                     "\u0634"
26515                 ],
26516                 "dot_below": [
26517                     "\u06FA"
26518                 ],
26519                 "isolated": "\uFEB5",
26520                 "final": "\uFEB6",
26521                 "initial": "\uFEB7",
26522                 "medial": "\uFEB8"
26523             },
26524             "sad": {
26525                 "normal": [
26526                     "\u0635"
26527                 ],
26528                 "two_dots_below": [
26529                     "\u069D"
26530                 ],
26531                 "three_dots_above": [
26532                     "\u069E"
26533                 ],
26534                 "three_dots_below": [
26535                     "\u08AF"
26536                 ],
26537                 "isolated": "\uFEB9",
26538                 "final": "\uFEBA",
26539                 "initial": "\uFEBB",
26540                 "medial": "\uFEBC"
26541             },
26542             "dad": {
26543                 "normal": [
26544                     "\u0636"
26545                 ],
26546                 "dot_below": [
26547                     "\u06FB"
26548                 ],
26549                 "isolated": "\uFEBD",
26550                 "final": "\uFEBE",
26551                 "initial": "\uFEBF",
26552                 "medial": "\uFEC0"
26553             },
26554             "tah": {
26555                 "normal": [
26556                     "\u0637"
26557                 ],
26558                 "three_dots_above": [
26559                     "\u069F"
26560                 ],
26561                 "two_dots_above": [
26562                     "\u08A3"
26563                 ],
26564                 "isolated": "\uFEC1",
26565                 "final": "\uFEC2",
26566                 "initial": "\uFEC3",
26567                 "medial": "\uFEC4"
26568             },
26569             "zah": {
26570                 "normal": [
26571                     "\u0638"
26572                 ],
26573                 "isolated": "\uFEC5",
26574                 "final": "\uFEC6",
26575                 "initial": "\uFEC7",
26576                 "medial": "\uFEC8"
26577             },
26578             "ain": {
26579                 "normal": [
26580                     "\u0639"
26581                 ],
26582                 "three_dots_above": [
26583                     "\u06A0"
26584                 ],
26585                 "two_dots_above": [
26586                     "\u075D"
26587                 ],
26588                 "three_dots_pointing_downwards_above": [
26589                     "\u075E"
26590                 ],
26591                 "two_dots_vertically_above": [
26592                     "\u075F"
26593                 ],
26594                 "three_dots_below": [
26595                     "\u08B3"
26596                 ],
26597                 "isolated": "\uFEC9",
26598                 "final": "\uFECA",
26599                 "initial": "\uFECB",
26600                 "medial": "\uFECC"
26601             },
26602             "ghain": {
26603                 "normal": [
26604                     "\u063A"
26605                 ],
26606                 "dot_below": [
26607                     "\u06FC"
26608                 ],
26609                 "isolated": "\uFECD",
26610                 "final": "\uFECE",
26611                 "initial": "\uFECF",
26612                 "medial": "\uFED0"
26613             },
26614             "feh": {
26615                 "normal": [
26616                     "\u0641"
26617                 ],
26618                 "dotless": [
26619                     "\u06A1"
26620                 ],
26621                 "dot_moved_below": [
26622                     "\u06A2"
26623                 ],
26624                 "dot_below": [
26625                     "\u06A3"
26626                 ],
26627                 "three_dots_below": [
26628                     "\u06A5"
26629                 ],
26630                 "two_dots_below": [
26631                     "\u0760"
26632                 ],
26633                 "three_dots_pointing_upwards_below": [
26634                     "\u0761"
26635                 ],
26636                 "dot_below_three_dots_above": [
26637                     "\u08A4"
26638                 ],
26639                 "isolated": "\uFED1",
26640                 "final": "\uFED2",
26641                 "initial": "\uFED3",
26642                 "medial": "\uFED4"
26643             },
26644             "qaf": {
26645                 "normal": [
26646                     "\u0642"
26647                 ],
26648                 "dotless": [
26649                     "\u066F"
26650                 ],
26651                 "dot_above": [
26652                     "\u06A7"
26653                 ],
26654                 "three_dots_above": [
26655                     "\u06A8"
26656                 ],
26657                 "dot_below": [
26658                     "\u08A5"
26659                 ],
26660                 "isolated": "\uFED5",
26661                 "final": "\uFED6",
26662                 "initial": "\uFED7",
26663                 "medial": "\uFED8"
26664             },
26665             "kaf": {
26666                 "normal": [
26667                     "\u0643"
26668                 ],
26669                 "swash": [
26670                     "\u06AA"
26671                 ],
26672                 "ring": [
26673                     "\u06AB"
26674                 ],
26675                 "dot_above": [
26676                     "\u06AC"
26677                 ],
26678                 "three_dots_below": [
26679                     "\u06AE"
26680                 ],
26681                 "two_dots_above": [
26682                     "\u077F"
26683                 ],
26684                 "dot_below": [
26685                     "\u08B4"
26686                 ],
26687                 "isolated": "\uFED9",
26688                 "final": "\uFEDA",
26689                 "initial": "\uFEDB",
26690                 "medial": "\uFEDC"
26691             },
26692             "lam": {
26693                 "normal": [
26694                     "\u0644"
26695                 ],
26696                 "small_v": [
26697                     "\u06B5"
26698                 ],
26699                 "dot_above": [
26700                     "\u06B6"
26701                 ],
26702                 "three_dots_above": [
26703                     "\u06B7"
26704                 ],
26705                 "three_dots_below": [
26706                     "\u06B8"
26707                 ],
26708                 "bar": [
26709                     "\u076A"
26710                 ],
26711                 "double_bar": [
26712                     "\u08A6"
26713                 ],
26714                 "isolated": "\uFEDD",
26715                 "final": "\uFEDE",
26716                 "initial": "\uFEDF",
26717                 "medial": "\uFEE0"
26718             },
26719             "meem": {
26720                 "normal": [
26721                     "\u0645"
26722                 ],
26723                 "dot_above": [
26724                     "\u0765"
26725                 ],
26726                 "dot_below": [
26727                     "\u0766"
26728                 ],
26729                 "three_dots_above": [
26730                     "\u08A7"
26731                 ],
26732                 "isolated": "\uFEE1",
26733                 "final": "\uFEE2",
26734                 "initial": "\uFEE3",
26735                 "medial": "\uFEE4"
26736             },
26737             "noon": {
26738                 "normal": [
26739                     "\u0646"
26740                 ],
26741                 "dot_below": [
26742                     "\u06B9"
26743                 ],
26744                 "ring": [
26745                     "\u06BC"
26746                 ],
26747                 "three_dots_above": [
26748                     "\u06BD"
26749                 ],
26750                 "two_dots_below": [
26751                     "\u0767"
26752                 ],
26753                 "small_tah": [
26754                     "\u0768"
26755                 ],
26756                 "small_v": [
26757                     "\u0769"
26758                 ],
26759                 "isolated": "\uFEE5",
26760                 "final": "\uFEE6",
26761                 "initial": "\uFEE7",
26762                 "medial": "\uFEE8"
26763             },
26764             "heh": {
26765                 "normal": [
26766                     "\u0647"
26767                 ],
26768                 "isolated": "\uFEE9",
26769                 "final": "\uFEEA",
26770                 "initial": "\uFEEB",
26771                 "medial": "\uFEEC"
26772             },
26773             "waw": {
26774                 "normal": [
26775                     "\u0648"
26776                 ],
26777                 "hamza_above": {
26778                     "normal": [
26779                         "\u0624",
26780                         "\u0648\u0654"
26781                     ],
26782                     "isolated": "\uFE85",
26783                     "final": "\uFE86"
26784                 },
26785                 "high_hamza": [
26786                     "\u0676",
26787                     "\u0648\u0674"
26788                 ],
26789                 "ring": [
26790                     "\u06C4"
26791                 ],
26792                 "two_dots_above": [
26793                     "\u06CA"
26794                 ],
26795                 "dot_above": [
26796                     "\u06CF"
26797                 ],
26798                 "indic_two_above": [
26799                     "\u0778"
26800                 ],
26801                 "indic_three_above": [
26802                     "\u0779"
26803                 ],
26804                 "dot_within": [
26805                     "\u08AB"
26806                 ],
26807                 "isolated": "\uFEED",
26808                 "final": "\uFEEE"
26809             },
26810             "alef_maksura": {
26811                 "normal": [
26812                     "\u0649"
26813                 ],
26814                 "hamza_above": [
26815                     "\u0626",
26816                     "\u064A\u0654"
26817                 ],
26818                 "initial": "\uFBE8",
26819                 "medial": "\uFBE9",
26820                 "isolated": "\uFEEF",
26821                 "final": "\uFEF0"
26822             },
26823             "yeh": {
26824                 "normal": [
26825                     "\u064A"
26826                 ],
26827                 "hamza_above": {
26828                     "normal": [
26829                         "\u0626",
26830                         "\u0649\u0654"
26831                     ],
26832                     "isolated": "\uFE89",
26833                     "final": "\uFE8A",
26834                     "initial": "\uFE8B",
26835                     "medial": "\uFE8C"
26836                 },
26837                 "two_dots_below_hamza_above": [
26838                     "\u08A8"
26839                 ],
26840                 "high_hamza": [
26841                     "\u0678",
26842                     "\u064A\u0674"
26843                 ],
26844                 "tail": [
26845                     "\u06CD"
26846                 ],
26847                 "small_v": [
26848                     "\u06CE"
26849                 ],
26850                 "three_dots_below": [
26851                     "\u06D1"
26852                 ],
26853                 "two_dots_below_dot_above": [
26854                     "\u08A9"
26855                 ],
26856                 "two_dots_below_small_noon_above": [
26857                     "\u08BA"
26858                 ],
26859                 "isolated": "\uFEF1",
26860                 "final": "\uFEF2",
26861                 "initial": "\uFEF3",
26862                 "medial": "\uFEF4"
26863             },
26864             "tteh": {
26865                 "normal": [
26866                     "\u0679"
26867                 ],
26868                 "isolated": "\uFB66",
26869                 "final": "\uFB67",
26870                 "initial": "\uFB68",
26871                 "medial": "\uFB69"
26872             },
26873             "tteheh": {
26874                 "normal": [
26875                     "\u067A"
26876                 ],
26877                 "isolated": "\uFB5E",
26878                 "final": "\uFB5F",
26879                 "initial": "\uFB60",
26880                 "medial": "\uFB61"
26881             },
26882             "beeh": {
26883                 "normal": [
26884                     "\u067B"
26885                 ],
26886                 "isolated": "\uFB52",
26887                 "final": "\uFB53",
26888                 "initial": "\uFB54",
26889                 "medial": "\uFB55"
26890             },
26891             "peh": {
26892                 "normal": [
26893                     "\u067E"
26894                 ],
26895                 "small_meem_above": [
26896                     "\u08B7"
26897                 ],
26898                 "isolated": "\uFB56",
26899                 "final": "\uFB57",
26900                 "initial": "\uFB58",
26901                 "medial": "\uFB59"
26902             },
26903             "teheh": {
26904                 "normal": [
26905                     "\u067F"
26906                 ],
26907                 "isolated": "\uFB62",
26908                 "final": "\uFB63",
26909                 "initial": "\uFB64",
26910                 "medial": "\uFB65"
26911             },
26912             "beheh": {
26913                 "normal": [
26914                     "\u0680"
26915                 ],
26916                 "isolated": "\uFB5A",
26917                 "final": "\uFB5B",
26918                 "initial": "\uFB5C",
26919                 "medial": "\uFB5D"
26920             },
26921             "nyeh": {
26922                 "normal": [
26923                     "\u0683"
26924                 ],
26925                 "isolated": "\uFB76",
26926                 "final": "\uFB77",
26927                 "initial": "\uFB78",
26928                 "medial": "\uFB79"
26929             },
26930             "dyeh": {
26931                 "normal": [
26932                     "\u0684"
26933                 ],
26934                 "isolated": "\uFB72",
26935                 "final": "\uFB73",
26936                 "initial": "\uFB74",
26937                 "medial": "\uFB75"
26938             },
26939             "tcheh": {
26940                 "normal": [
26941                     "\u0686"
26942                 ],
26943                 "dot_above": [
26944                     "\u06BF"
26945                 ],
26946                 "isolated": "\uFB7A",
26947                 "final": "\uFB7B",
26948                 "initial": "\uFB7C",
26949                 "medial": "\uFB7D"
26950             },
26951             "tcheheh": {
26952                 "normal": [
26953                     "\u0687"
26954                 ],
26955                 "isolated": "\uFB7E",
26956                 "final": "\uFB7F",
26957                 "initial": "\uFB80",
26958                 "medial": "\uFB81"
26959             },
26960             "ddal": {
26961                 "normal": [
26962                     "\u0688"
26963                 ],
26964                 "isolated": "\uFB88",
26965                 "final": "\uFB89"
26966             },
26967             "dahal": {
26968                 "normal": [
26969                     "\u068C"
26970                 ],
26971                 "isolated": "\uFB84",
26972                 "final": "\uFB85"
26973             },
26974             "ddahal": {
26975                 "normal": [
26976                     "\u068D"
26977                 ],
26978                 "isolated": "\uFB82",
26979                 "final": "\uFB83"
26980             },
26981             "dul": {
26982                 "normal": [
26983                     "\u068F",
26984                     "\u068E"
26985                 ],
26986                 "isolated": "\uFB86",
26987                 "final": "\uFB87"
26988             },
26989             "rreh": {
26990                 "normal": [
26991                     "\u0691"
26992                 ],
26993                 "isolated": "\uFB8C",
26994                 "final": "\uFB8D"
26995             },
26996             "jeh": {
26997                 "normal": [
26998                     "\u0698"
26999                 ],
27000                 "isolated": "\uFB8A",
27001                 "final": "\uFB8B"
27002             },
27003             "veh": {
27004                 "normal": [
27005                     "\u06A4"
27006                 ],
27007                 "isolated": "\uFB6A",
27008                 "final": "\uFB6B",
27009                 "initial": "\uFB6C",
27010                 "medial": "\uFB6D"
27011             },
27012             "peheh": {
27013                 "normal": [
27014                     "\u06A6"
27015                 ],
27016                 "isolated": "\uFB6E",
27017                 "final": "\uFB6F",
27018                 "initial": "\uFB70",
27019                 "medial": "\uFB71"
27020             },
27021             "keheh": {
27022                 "normal": [
27023                     "\u06A9"
27024                 ],
27025                 "dot_above": [
27026                     "\u0762"
27027                 ],
27028                 "three_dots_above": [
27029                     "\u0763"
27030                 ],
27031                 "three_dots_pointing_upwards_below": [
27032                     "\u0764"
27033                 ],
27034                 "isolated": "\uFB8E",
27035                 "final": "\uFB8F",
27036                 "initial": "\uFB90",
27037                 "medial": "\uFB91"
27038             },
27039             "ng": {
27040                 "normal": [
27041                     "\u06AD"
27042                 ],
27043                 "isolated": "\uFBD3",
27044                 "final": "\uFBD4",
27045                 "initial": "\uFBD5",
27046                 "medial": "\uFBD6"
27047             },
27048             "gaf": {
27049                 "normal": [
27050                     "\u06AF"
27051                 ],
27052                 "ring": [
27053                     "\u06B0"
27054                 ],
27055                 "two_dots_below": [
27056                     "\u06B2"
27057                 ],
27058                 "three_dots_above": [
27059                     "\u06B4"
27060                 ],
27061                 "inverted_stroke": [
27062                     "\u08B0"
27063                 ],
27064                 "isolated": "\uFB92",
27065                 "final": "\uFB93",
27066                 "initial": "\uFB94",
27067                 "medial": "\uFB95"
27068             },
27069             "ngoeh": {
27070                 "normal": [
27071                     "\u06B1"
27072                 ],
27073                 "isolated": "\uFB9A",
27074                 "final": "\uFB9B",
27075                 "initial": "\uFB9C",
27076                 "medial": "\uFB9D"
27077             },
27078             "gueh": {
27079                 "normal": [
27080                     "\u06B3"
27081                 ],
27082                 "isolated": "\uFB96",
27083                 "final": "\uFB97",
27084                 "initial": "\uFB98",
27085                 "medial": "\uFB99"
27086             },
27087             "noon ghunna": {
27088                 "normal": [
27089                     "\u06BA"
27090                 ],
27091                 "isolated": "\uFB9E",
27092                 "final": "\uFB9F"
27093             },
27094             "rnoon": {
27095                 "normal": [
27096                     "\u06BB"
27097                 ],
27098                 "isolated": "\uFBA0",
27099                 "final": "\uFBA1",
27100                 "initial": "\uFBA2",
27101                 "medial": "\uFBA3"
27102             },
27103             "heh doachashmee": {
27104                 "normal": [
27105                     "\u06BE"
27106                 ],
27107                 "isolated": "\uFBAA",
27108                 "final": "\uFBAB",
27109                 "initial": "\uFBAC",
27110                 "medial": "\uFBAD"
27111             },
27112             "heh goal": {
27113                 "normal": [
27114                     "\u06C1"
27115                 ],
27116                 "hamza_above": [
27117                     "\u06C1\u0654",
27118                     "\u06C2"
27119                 ],
27120                 "isolated": "\uFBA6",
27121                 "final": "\uFBA7",
27122                 "initial": "\uFBA8",
27123                 "medial": "\uFBA9"
27124             },
27125             "teh marbuta goal": {
27126                 "normal": [
27127                     "\u06C3"
27128                 ]
27129             },
27130             "kirghiz oe": {
27131                 "normal": [
27132                     "\u06C5"
27133                 ],
27134                 "isolated": "\uFBE0",
27135                 "final": "\uFBE1"
27136             },
27137             "oe": {
27138                 "normal": [
27139                     "\u06C6"
27140                 ],
27141                 "isolated": "\uFBD9",
27142                 "final": "\uFBDA"
27143             },
27144             "u": {
27145                 "normal": [
27146                     "\u06C7"
27147                 ],
27148                 "hamza_above": {
27149                     "normal": [
27150                         "\u0677",
27151                         "\u06C7\u0674"
27152                     ],
27153                     "isolated": "\uFBDD"
27154                 },
27155                 "isolated": "\uFBD7",
27156                 "final": "\uFBD8"
27157             },
27158             "yu": {
27159                 "normal": [
27160                     "\u06C8"
27161                 ],
27162                 "isolated": "\uFBDB",
27163                 "final": "\uFBDC"
27164             },
27165             "kirghiz yu": {
27166                 "normal": [
27167                     "\u06C9"
27168                 ],
27169                 "isolated": "\uFBE2",
27170                 "final": "\uFBE3"
27171             },
27172             "ve": {
27173                 "normal": [
27174                     "\u06CB"
27175                 ],
27176                 "isolated": "\uFBDE",
27177                 "final": "\uFBDF"
27178             },
27179             "farsi yeh": {
27180                 "normal": [
27181                     "\u06CC"
27182                 ],
27183                 "indic_two_above": [
27184                     "\u0775"
27185                 ],
27186                 "indic_three_above": [
27187                     "\u0776"
27188                 ],
27189                 "indic_four_above": [
27190                     "\u0777"
27191                 ],
27192                 "isolated": "\uFBFC",
27193                 "final": "\uFBFD",
27194                 "initial": "\uFBFE",
27195                 "medial": "\uFBFF"
27196             },
27197             "e": {
27198                 "normal": [
27199                     "\u06D0"
27200                 ],
27201                 "isolated": "\uFBE4",
27202                 "final": "\uFBE5",
27203                 "initial": "\uFBE6",
27204                 "medial": "\uFBE7"
27205             },
27206             "yeh barree": {
27207                 "normal": [
27208                     "\u06D2"
27209                 ],
27210                 "hamza_above": {
27211                     "normal": [
27212                         "\u06D2\u0654",
27213                         "\u06D3"
27214                     ],
27215                     "isolated": "\uFBB0",
27216                     "final": "\uFBB1"
27217                 },
27218                 "indic_two_above": [
27219                     "\u077A"
27220                 ],
27221                 "indic_three_above": [
27222                     "\u077B"
27223                 ],
27224                 "isolated": "\uFBAE",
27225                 "final": "\uFBAF"
27226             },
27227             "ae": {
27228                 "normal": [
27229                     "\u06D5"
27230                 ],
27231                 "isolated": "\u06D5",
27232                 "final": "\uFEEA",
27233                 "yeh_above": {
27234                     "normal": [
27235                         "\u06C0",
27236                         "\u06D5\u0654"
27237                     ],
27238                     "isolated": "\uFBA4",
27239                     "final": "\uFBA5"
27240                 }
27241             },
27242             "rohingya yeh": {
27243                 "normal": [
27244                     "\u08AC"
27245                 ]
27246             },
27247             "low alef": {
27248                 "normal": [
27249                     "\u08AD"
27250                 ]
27251             },
27252             "straight waw": {
27253                 "normal": [
27254                     "\u08B1"
27255                 ]
27256             },
27257             "african feh": {
27258                 "normal": [
27259                     "\u08BB"
27260                 ]
27261             },
27262             "african qaf": {
27263                 "normal": [
27264                     "\u08BC"
27265                 ]
27266             },
27267             "african noon": {
27268                 "normal": [
27269                     "\u08BD"
27270                 ]
27271             }
27272         };
27273         exports.default = arabicReference;
27274         });
27275
27276         unwrapExports(unicodeArabic);
27277
27278         var unicodeLigatures = createCommonjsModule(function (module, exports) {
27279         Object.defineProperty(exports, "__esModule", { value: true });
27280         var ligatureReference = {
27281             "\u0626\u0627": {
27282                 "isolated": "\uFBEA",
27283                 "final": "\uFBEB"
27284             },
27285             "\u0626\u06D5": {
27286                 "isolated": "\uFBEC",
27287                 "final": "\uFBED"
27288             },
27289             "\u0626\u0648": {
27290                 "isolated": "\uFBEE",
27291                 "final": "\uFBEF"
27292             },
27293             "\u0626\u06C7": {
27294                 "isolated": "\uFBF0",
27295                 "final": "\uFBF1"
27296             },
27297             "\u0626\u06C6": {
27298                 "isolated": "\uFBF2",
27299                 "final": "\uFBF3"
27300             },
27301             "\u0626\u06C8": {
27302                 "isolated": "\uFBF4",
27303                 "final": "\uFBF5"
27304             },
27305             "\u0626\u06D0": {
27306                 "isolated": "\uFBF6",
27307                 "final": "\uFBF7",
27308                 "initial": "\uFBF8"
27309             },
27310             "\u0626\u0649": {
27311                 "uighur_kirghiz": {
27312                     "isolated": "\uFBF9",
27313                     "final": "\uFBFA",
27314                     "initial": "\uFBFB"
27315                 },
27316                 "isolated": "\uFC03",
27317                 "final": "\uFC68"
27318             },
27319             "\u0626\u062C": {
27320                 "isolated": "\uFC00",
27321                 "initial": "\uFC97"
27322             },
27323             "\u0626\u062D": {
27324                 "isolated": "\uFC01",
27325                 "initial": "\uFC98"
27326             },
27327             "\u0626\u0645": {
27328                 "isolated": "\uFC02",
27329                 "final": "\uFC66",
27330                 "initial": "\uFC9A",
27331                 "medial": "\uFCDF"
27332             },
27333             "\u0626\u064A": {
27334                 "isolated": "\uFC04",
27335                 "final": "\uFC69"
27336             },
27337             "\u0628\u062C": {
27338                 "isolated": "\uFC05",
27339                 "initial": "\uFC9C"
27340             },
27341             "\u0628\u062D": {
27342                 "isolated": "\uFC06",
27343                 "initial": "\uFC9D"
27344             },
27345             "\u0628\u062E": {
27346                 "isolated": "\uFC07",
27347                 "initial": "\uFC9E"
27348             },
27349             "\u0628\u0645": {
27350                 "isolated": "\uFC08",
27351                 "final": "\uFC6C",
27352                 "initial": "\uFC9F",
27353                 "medial": "\uFCE1"
27354             },
27355             "\u0628\u0649": {
27356                 "isolated": "\uFC09",
27357                 "final": "\uFC6E"
27358             },
27359             "\u0628\u064A": {
27360                 "isolated": "\uFC0A",
27361                 "final": "\uFC6F"
27362             },
27363             "\u062A\u062C": {
27364                 "isolated": "\uFC0B",
27365                 "initial": "\uFCA1"
27366             },
27367             "\u062A\u062D": {
27368                 "isolated": "\uFC0C",
27369                 "initial": "\uFCA2"
27370             },
27371             "\u062A\u062E": {
27372                 "isolated": "\uFC0D",
27373                 "initial": "\uFCA3"
27374             },
27375             "\u062A\u0645": {
27376                 "isolated": "\uFC0E",
27377                 "final": "\uFC72",
27378                 "initial": "\uFCA4",
27379                 "medial": "\uFCE3"
27380             },
27381             "\u062A\u0649": {
27382                 "isolated": "\uFC0F",
27383                 "final": "\uFC74"
27384             },
27385             "\u062A\u064A": {
27386                 "isolated": "\uFC10",
27387                 "final": "\uFC75"
27388             },
27389             "\u062B\u062C": {
27390                 "isolated": "\uFC11"
27391             },
27392             "\u062B\u0645": {
27393                 "isolated": "\uFC12",
27394                 "final": "\uFC78",
27395                 "initial": "\uFCA6",
27396                 "medial": "\uFCE5"
27397             },
27398             "\u062B\u0649": {
27399                 "isolated": "\uFC13",
27400                 "final": "\uFC7A"
27401             },
27402             "\u062B\u0648": {
27403                 "isolated": "\uFC14"
27404             },
27405             "\u062C\u062D": {
27406                 "isolated": "\uFC15",
27407                 "initial": "\uFCA7"
27408             },
27409             "\u062C\u0645": {
27410                 "isolated": "\uFC16",
27411                 "initial": "\uFCA8"
27412             },
27413             "\u062D\u062C": {
27414                 "isolated": "\uFC17",
27415                 "initial": "\uFCA9"
27416             },
27417             "\u062D\u0645": {
27418                 "isolated": "\uFC18",
27419                 "initial": "\uFCAA"
27420             },
27421             "\u062E\u062C": {
27422                 "isolated": "\uFC19",
27423                 "initial": "\uFCAB"
27424             },
27425             "\u062E\u062D": {
27426                 "isolated": "\uFC1A"
27427             },
27428             "\u062E\u0645": {
27429                 "isolated": "\uFC1B",
27430                 "initial": "\uFCAC"
27431             },
27432             "\u0633\u062C": {
27433                 "isolated": "\uFC1C",
27434                 "initial": "\uFCAD",
27435                 "medial": "\uFD34"
27436             },
27437             "\u0633\u062D": {
27438                 "isolated": "\uFC1D",
27439                 "initial": "\uFCAE",
27440                 "medial": "\uFD35"
27441             },
27442             "\u0633\u062E": {
27443                 "isolated": "\uFC1E",
27444                 "initial": "\uFCAF",
27445                 "medial": "\uFD36"
27446             },
27447             "\u0633\u0645": {
27448                 "isolated": "\uFC1F",
27449                 "initial": "\uFCB0",
27450                 "medial": "\uFCE7"
27451             },
27452             "\u0635\u062D": {
27453                 "isolated": "\uFC20",
27454                 "initial": "\uFCB1"
27455             },
27456             "\u0635\u0645": {
27457                 "isolated": "\uFC21",
27458                 "initial": "\uFCB3"
27459             },
27460             "\u0636\u062C": {
27461                 "isolated": "\uFC22",
27462                 "initial": "\uFCB4"
27463             },
27464             "\u0636\u062D": {
27465                 "isolated": "\uFC23",
27466                 "initial": "\uFCB5"
27467             },
27468             "\u0636\u062E": {
27469                 "isolated": "\uFC24",
27470                 "initial": "\uFCB6"
27471             },
27472             "\u0636\u0645": {
27473                 "isolated": "\uFC25",
27474                 "initial": "\uFCB7"
27475             },
27476             "\u0637\u062D": {
27477                 "isolated": "\uFC26",
27478                 "initial": "\uFCB8"
27479             },
27480             "\u0637\u0645": {
27481                 "isolated": "\uFC27",
27482                 "initial": "\uFD33",
27483                 "medial": "\uFD3A"
27484             },
27485             "\u0638\u0645": {
27486                 "isolated": "\uFC28",
27487                 "initial": "\uFCB9",
27488                 "medial": "\uFD3B"
27489             },
27490             "\u0639\u062C": {
27491                 "isolated": "\uFC29",
27492                 "initial": "\uFCBA"
27493             },
27494             "\u0639\u0645": {
27495                 "isolated": "\uFC2A",
27496                 "initial": "\uFCBB"
27497             },
27498             "\u063A\u062C": {
27499                 "isolated": "\uFC2B",
27500                 "initial": "\uFCBC"
27501             },
27502             "\u063A\u0645": {
27503                 "isolated": "\uFC2C",
27504                 "initial": "\uFCBD"
27505             },
27506             "\u0641\u062C": {
27507                 "isolated": "\uFC2D",
27508                 "initial": "\uFCBE"
27509             },
27510             "\u0641\u062D": {
27511                 "isolated": "\uFC2E",
27512                 "initial": "\uFCBF"
27513             },
27514             "\u0641\u062E": {
27515                 "isolated": "\uFC2F",
27516                 "initial": "\uFCC0"
27517             },
27518             "\u0641\u0645": {
27519                 "isolated": "\uFC30",
27520                 "initial": "\uFCC1"
27521             },
27522             "\u0641\u0649": {
27523                 "isolated": "\uFC31",
27524                 "final": "\uFC7C"
27525             },
27526             "\u0641\u064A": {
27527                 "isolated": "\uFC32",
27528                 "final": "\uFC7D"
27529             },
27530             "\u0642\u062D": {
27531                 "isolated": "\uFC33",
27532                 "initial": "\uFCC2"
27533             },
27534             "\u0642\u0645": {
27535                 "isolated": "\uFC34",
27536                 "initial": "\uFCC3"
27537             },
27538             "\u0642\u0649": {
27539                 "isolated": "\uFC35",
27540                 "final": "\uFC7E"
27541             },
27542             "\u0642\u064A": {
27543                 "isolated": "\uFC36",
27544                 "final": "\uFC7F"
27545             },
27546             "\u0643\u0627": {
27547                 "isolated": "\uFC37",
27548                 "final": "\uFC80"
27549             },
27550             "\u0643\u062C": {
27551                 "isolated": "\uFC38",
27552                 "initial": "\uFCC4"
27553             },
27554             "\u0643\u062D": {
27555                 "isolated": "\uFC39",
27556                 "initial": "\uFCC5"
27557             },
27558             "\u0643\u062E": {
27559                 "isolated": "\uFC3A",
27560                 "initial": "\uFCC6"
27561             },
27562             "\u0643\u0644": {
27563                 "isolated": "\uFC3B",
27564                 "final": "\uFC81",
27565                 "initial": "\uFCC7",
27566                 "medial": "\uFCEB"
27567             },
27568             "\u0643\u0645": {
27569                 "isolated": "\uFC3C",
27570                 "final": "\uFC82",
27571                 "initial": "\uFCC8",
27572                 "medial": "\uFCEC"
27573             },
27574             "\u0643\u0649": {
27575                 "isolated": "\uFC3D",
27576                 "final": "\uFC83"
27577             },
27578             "\u0643\u064A": {
27579                 "isolated": "\uFC3E",
27580                 "final": "\uFC84"
27581             },
27582             "\u0644\u062C": {
27583                 "isolated": "\uFC3F",
27584                 "initial": "\uFCC9"
27585             },
27586             "\u0644\u062D": {
27587                 "isolated": "\uFC40",
27588                 "initial": "\uFCCA"
27589             },
27590             "\u0644\u062E": {
27591                 "isolated": "\uFC41",
27592                 "initial": "\uFCCB"
27593             },
27594             "\u0644\u0645": {
27595                 "isolated": "\uFC42",
27596                 "final": "\uFC85",
27597                 "initial": "\uFCCC",
27598                 "medial": "\uFCED"
27599             },
27600             "\u0644\u0649": {
27601                 "isolated": "\uFC43",
27602                 "final": "\uFC86"
27603             },
27604             "\u0644\u064A": {
27605                 "isolated": "\uFC44",
27606                 "final": "\uFC87"
27607             },
27608             "\u0645\u062C": {
27609                 "isolated": "\uFC45",
27610                 "initial": "\uFCCE"
27611             },
27612             "\u0645\u062D": {
27613                 "isolated": "\uFC46",
27614                 "initial": "\uFCCF"
27615             },
27616             "\u0645\u062E": {
27617                 "isolated": "\uFC47",
27618                 "initial": "\uFCD0"
27619             },
27620             "\u0645\u0645": {
27621                 "isolated": "\uFC48",
27622                 "final": "\uFC89",
27623                 "initial": "\uFCD1"
27624             },
27625             "\u0645\u0649": {
27626                 "isolated": "\uFC49"
27627             },
27628             "\u0645\u064A": {
27629                 "isolated": "\uFC4A"
27630             },
27631             "\u0646\u062C": {
27632                 "isolated": "\uFC4B",
27633                 "initial": "\uFCD2"
27634             },
27635             "\u0646\u062D": {
27636                 "isolated": "\uFC4C",
27637                 "initial": "\uFCD3"
27638             },
27639             "\u0646\u062E": {
27640                 "isolated": "\uFC4D",
27641                 "initial": "\uFCD4"
27642             },
27643             "\u0646\u0645": {
27644                 "isolated": "\uFC4E",
27645                 "final": "\uFC8C",
27646                 "initial": "\uFCD5",
27647                 "medial": "\uFCEE"
27648             },
27649             "\u0646\u0649": {
27650                 "isolated": "\uFC4F",
27651                 "final": "\uFC8E"
27652             },
27653             "\u0646\u064A": {
27654                 "isolated": "\uFC50",
27655                 "final": "\uFC8F"
27656             },
27657             "\u0647\u062C": {
27658                 "isolated": "\uFC51",
27659                 "initial": "\uFCD7"
27660             },
27661             "\u0647\u0645": {
27662                 "isolated": "\uFC52",
27663                 "initial": "\uFCD8"
27664             },
27665             "\u0647\u0649": {
27666                 "isolated": "\uFC53"
27667             },
27668             "\u0647\u064A": {
27669                 "isolated": "\uFC54"
27670             },
27671             "\u064A\u062C": {
27672                 "isolated": "\uFC55",
27673                 "initial": "\uFCDA"
27674             },
27675             "\u064A\u062D": {
27676                 "isolated": "\uFC56",
27677                 "initial": "\uFCDB"
27678             },
27679             "\u064A\u062E": {
27680                 "isolated": "\uFC57",
27681                 "initial": "\uFCDC"
27682             },
27683             "\u064A\u0645": {
27684                 "isolated": "\uFC58",
27685                 "final": "\uFC93",
27686                 "initial": "\uFCDD",
27687                 "medial": "\uFCF0"
27688             },
27689             "\u064A\u0649": {
27690                 "isolated": "\uFC59",
27691                 "final": "\uFC95"
27692             },
27693             "\u064A\u064A": {
27694                 "isolated": "\uFC5A",
27695                 "final": "\uFC96"
27696             },
27697             "\u0630\u0670": {
27698                 "isolated": "\uFC5B"
27699             },
27700             "\u0631\u0670": {
27701                 "isolated": "\uFC5C"
27702             },
27703             "\u0649\u0670": {
27704                 "isolated": "\uFC5D",
27705                 "final": "\uFC90"
27706             },
27707             "\u064C\u0651": {
27708                 "isolated": "\uFC5E"
27709             },
27710             "\u064D\u0651": {
27711                 "isolated": "\uFC5F"
27712             },
27713             "\u064E\u0651": {
27714                 "isolated": "\uFC60"
27715             },
27716             "\u064F\u0651": {
27717                 "isolated": "\uFC61"
27718             },
27719             "\u0650\u0651": {
27720                 "isolated": "\uFC62"
27721             },
27722             "\u0651\u0670": {
27723                 "isolated": "\uFC63"
27724             },
27725             "\u0626\u0631": {
27726                 "final": "\uFC64"
27727             },
27728             "\u0626\u0632": {
27729                 "final": "\uFC65"
27730             },
27731             "\u0626\u0646": {
27732                 "final": "\uFC67"
27733             },
27734             "\u0628\u0631": {
27735                 "final": "\uFC6A"
27736             },
27737             "\u0628\u0632": {
27738                 "final": "\uFC6B"
27739             },
27740             "\u0628\u0646": {
27741                 "final": "\uFC6D"
27742             },
27743             "\u062A\u0631": {
27744                 "final": "\uFC70"
27745             },
27746             "\u062A\u0632": {
27747                 "final": "\uFC71"
27748             },
27749             "\u062A\u0646": {
27750                 "final": "\uFC73"
27751             },
27752             "\u062B\u0631": {
27753                 "final": "\uFC76"
27754             },
27755             "\u062B\u0632": {
27756                 "final": "\uFC77"
27757             },
27758             "\u062B\u0646": {
27759                 "final": "\uFC79"
27760             },
27761             "\u062B\u064A": {
27762                 "final": "\uFC7B"
27763             },
27764             "\u0645\u0627": {
27765                 "final": "\uFC88"
27766             },
27767             "\u0646\u0631": {
27768                 "final": "\uFC8A"
27769             },
27770             "\u0646\u0632": {
27771                 "final": "\uFC8B"
27772             },
27773             "\u0646\u0646": {
27774                 "final": "\uFC8D"
27775             },
27776             "\u064A\u0631": {
27777                 "final": "\uFC91"
27778             },
27779             "\u064A\u0632": {
27780                 "final": "\uFC92"
27781             },
27782             "\u064A\u0646": {
27783                 "final": "\uFC94"
27784             },
27785             "\u0626\u062E": {
27786                 "initial": "\uFC99"
27787             },
27788             "\u0626\u0647": {
27789                 "initial": "\uFC9B",
27790                 "medial": "\uFCE0"
27791             },
27792             "\u0628\u0647": {
27793                 "initial": "\uFCA0",
27794                 "medial": "\uFCE2"
27795             },
27796             "\u062A\u0647": {
27797                 "initial": "\uFCA5",
27798                 "medial": "\uFCE4"
27799             },
27800             "\u0635\u062E": {
27801                 "initial": "\uFCB2"
27802             },
27803             "\u0644\u0647": {
27804                 "initial": "\uFCCD"
27805             },
27806             "\u0646\u0647": {
27807                 "initial": "\uFCD6",
27808                 "medial": "\uFCEF"
27809             },
27810             "\u0647\u0670": {
27811                 "initial": "\uFCD9"
27812             },
27813             "\u064A\u0647": {
27814                 "initial": "\uFCDE",
27815                 "medial": "\uFCF1"
27816             },
27817             "\u062B\u0647": {
27818                 "medial": "\uFCE6"
27819             },
27820             "\u0633\u0647": {
27821                 "medial": "\uFCE8",
27822                 "initial": "\uFD31"
27823             },
27824             "\u0634\u0645": {
27825                 "medial": "\uFCE9",
27826                 "isolated": "\uFD0C",
27827                 "final": "\uFD28",
27828                 "initial": "\uFD30"
27829             },
27830             "\u0634\u0647": {
27831                 "medial": "\uFCEA",
27832                 "initial": "\uFD32"
27833             },
27834             "\u0640\u064E\u0651": {
27835                 "medial": "\uFCF2"
27836             },
27837             "\u0640\u064F\u0651": {
27838                 "medial": "\uFCF3"
27839             },
27840             "\u0640\u0650\u0651": {
27841                 "medial": "\uFCF4"
27842             },
27843             "\u0637\u0649": {
27844                 "isolated": "\uFCF5",
27845                 "final": "\uFD11"
27846             },
27847             "\u0637\u064A": {
27848                 "isolated": "\uFCF6",
27849                 "final": "\uFD12"
27850             },
27851             "\u0639\u0649": {
27852                 "isolated": "\uFCF7",
27853                 "final": "\uFD13"
27854             },
27855             "\u0639\u064A": {
27856                 "isolated": "\uFCF8",
27857                 "final": "\uFD14"
27858             },
27859             "\u063A\u0649": {
27860                 "isolated": "\uFCF9",
27861                 "final": "\uFD15"
27862             },
27863             "\u063A\u064A": {
27864                 "isolated": "\uFCFA",
27865                 "final": "\uFD16"
27866             },
27867             "\u0633\u0649": {
27868                 "isolated": "\uFCFB"
27869             },
27870             "\u0633\u064A": {
27871                 "isolated": "\uFCFC",
27872                 "final": "\uFD18"
27873             },
27874             "\u0634\u0649": {
27875                 "isolated": "\uFCFD",
27876                 "final": "\uFD19"
27877             },
27878             "\u0634\u064A": {
27879                 "isolated": "\uFCFE",
27880                 "final": "\uFD1A"
27881             },
27882             "\u062D\u0649": {
27883                 "isolated": "\uFCFF",
27884                 "final": "\uFD1B"
27885             },
27886             "\u062D\u064A": {
27887                 "isolated": "\uFD00",
27888                 "final": "\uFD1C"
27889             },
27890             "\u062C\u0649": {
27891                 "isolated": "\uFD01",
27892                 "final": "\uFD1D"
27893             },
27894             "\u062C\u064A": {
27895                 "isolated": "\uFD02",
27896                 "final": "\uFD1E"
27897             },
27898             "\u062E\u0649": {
27899                 "isolated": "\uFD03",
27900                 "final": "\uFD1F"
27901             },
27902             "\u062E\u064A": {
27903                 "isolated": "\uFD04",
27904                 "final": "\uFD20"
27905             },
27906             "\u0635\u0649": {
27907                 "isolated": "\uFD05",
27908                 "final": "\uFD21"
27909             },
27910             "\u0635\u064A": {
27911                 "isolated": "\uFD06",
27912                 "final": "\uFD22"
27913             },
27914             "\u0636\u0649": {
27915                 "isolated": "\uFD07",
27916                 "final": "\uFD23"
27917             },
27918             "\u0636\u064A": {
27919                 "isolated": "\uFD08",
27920                 "final": "\uFD24"
27921             },
27922             "\u0634\u062C": {
27923                 "isolated": "\uFD09",
27924                 "final": "\uFD25",
27925                 "initial": "\uFD2D",
27926                 "medial": "\uFD37"
27927             },
27928             "\u0634\u062D": {
27929                 "isolated": "\uFD0A",
27930                 "final": "\uFD26",
27931                 "initial": "\uFD2E",
27932                 "medial": "\uFD38"
27933             },
27934             "\u0634\u062E": {
27935                 "isolated": "\uFD0B",
27936                 "final": "\uFD27",
27937                 "initial": "\uFD2F",
27938                 "medial": "\uFD39"
27939             },
27940             "\u0634\u0631": {
27941                 "isolated": "\uFD0D",
27942                 "final": "\uFD29"
27943             },
27944             "\u0633\u0631": {
27945                 "isolated": "\uFD0E",
27946                 "final": "\uFD2A"
27947             },
27948             "\u0635\u0631": {
27949                 "isolated": "\uFD0F",
27950                 "final": "\uFD2B"
27951             },
27952             "\u0636\u0631": {
27953                 "isolated": "\uFD10",
27954                 "final": "\uFD2C"
27955             },
27956             "\u0633\u0639": {
27957                 "final": "\uFD17"
27958             },
27959             "\u062A\u062C\u0645": {
27960                 "initial": "\uFD50"
27961             },
27962             "\u062A\u062D\u062C": {
27963                 "final": "\uFD51",
27964                 "initial": "\uFD52"
27965             },
27966             "\u062A\u062D\u0645": {
27967                 "initial": "\uFD53"
27968             },
27969             "\u062A\u062E\u0645": {
27970                 "initial": "\uFD54"
27971             },
27972             "\u062A\u0645\u062C": {
27973                 "initial": "\uFD55"
27974             },
27975             "\u062A\u0645\u062D": {
27976                 "initial": "\uFD56"
27977             },
27978             "\u062A\u0645\u062E": {
27979                 "initial": "\uFD57"
27980             },
27981             "\u062C\u0645\u062D": {
27982                 "final": "\uFD58",
27983                 "initial": "\uFD59"
27984             },
27985             "\u062D\u0645\u064A": {
27986                 "final": "\uFD5A"
27987             },
27988             "\u062D\u0645\u0649": {
27989                 "final": "\uFD5B"
27990             },
27991             "\u0633\u062D\u062C": {
27992                 "initial": "\uFD5C"
27993             },
27994             "\u0633\u062C\u062D": {
27995                 "initial": "\uFD5D"
27996             },
27997             "\u0633\u062C\u0649": {
27998                 "final": "\uFD5E"
27999             },
28000             "\u0633\u0645\u062D": {
28001                 "final": "\uFD5F",
28002                 "initial": "\uFD60"
28003             },
28004             "\u0633\u0645\u062C": {
28005                 "initial": "\uFD61"
28006             },
28007             "\u0633\u0645\u0645": {
28008                 "final": "\uFD62",
28009                 "initial": "\uFD63"
28010             },
28011             "\u0635\u062D\u062D": {
28012                 "final": "\uFD64",
28013                 "initial": "\uFD65"
28014             },
28015             "\u0635\u0645\u0645": {
28016                 "final": "\uFD66",
28017                 "initial": "\uFDC5"
28018             },
28019             "\u0634\u062D\u0645": {
28020                 "final": "\uFD67",
28021                 "initial": "\uFD68"
28022             },
28023             "\u0634\u062C\u064A": {
28024                 "final": "\uFD69"
28025             },
28026             "\u0634\u0645\u062E": {
28027                 "final": "\uFD6A",
28028                 "initial": "\uFD6B"
28029             },
28030             "\u0634\u0645\u0645": {
28031                 "final": "\uFD6C",
28032                 "initial": "\uFD6D"
28033             },
28034             "\u0636\u062D\u0649": {
28035                 "final": "\uFD6E"
28036             },
28037             "\u0636\u062E\u0645": {
28038                 "final": "\uFD6F",
28039                 "initial": "\uFD70"
28040             },
28041             "\u0636\u0645\u062D": {
28042                 "final": "\uFD71"
28043             },
28044             "\u0637\u0645\u062D": {
28045                 "initial": "\uFD72"
28046             },
28047             "\u0637\u0645\u0645": {
28048                 "initial": "\uFD73"
28049             },
28050             "\u0637\u0645\u064A": {
28051                 "final": "\uFD74"
28052             },
28053             "\u0639\u062C\u0645": {
28054                 "final": "\uFD75",
28055                 "initial": "\uFDC4"
28056             },
28057             "\u0639\u0645\u0645": {
28058                 "final": "\uFD76",
28059                 "initial": "\uFD77"
28060             },
28061             "\u0639\u0645\u0649": {
28062                 "final": "\uFD78"
28063             },
28064             "\u063A\u0645\u0645": {
28065                 "final": "\uFD79"
28066             },
28067             "\u063A\u0645\u064A": {
28068                 "final": "\uFD7A"
28069             },
28070             "\u063A\u0645\u0649": {
28071                 "final": "\uFD7B"
28072             },
28073             "\u0641\u062E\u0645": {
28074                 "final": "\uFD7C",
28075                 "initial": "\uFD7D"
28076             },
28077             "\u0642\u0645\u062D": {
28078                 "final": "\uFD7E",
28079                 "initial": "\uFDB4"
28080             },
28081             "\u0642\u0645\u0645": {
28082                 "final": "\uFD7F"
28083             },
28084             "\u0644\u062D\u0645": {
28085                 "final": "\uFD80",
28086                 "initial": "\uFDB5"
28087             },
28088             "\u0644\u062D\u064A": {
28089                 "final": "\uFD81"
28090             },
28091             "\u0644\u062D\u0649": {
28092                 "final": "\uFD82"
28093             },
28094             "\u0644\u062C\u062C": {
28095                 "initial": "\uFD83",
28096                 "final": "\uFD84"
28097             },
28098             "\u0644\u062E\u0645": {
28099                 "final": "\uFD85",
28100                 "initial": "\uFD86"
28101             },
28102             "\u0644\u0645\u062D": {
28103                 "final": "\uFD87",
28104                 "initial": "\uFD88"
28105             },
28106             "\u0645\u062D\u062C": {
28107                 "initial": "\uFD89"
28108             },
28109             "\u0645\u062D\u0645": {
28110                 "initial": "\uFD8A"
28111             },
28112             "\u0645\u062D\u064A": {
28113                 "final": "\uFD8B"
28114             },
28115             "\u0645\u062C\u062D": {
28116                 "initial": "\uFD8C"
28117             },
28118             "\u0645\u062C\u0645": {
28119                 "initial": "\uFD8D"
28120             },
28121             "\u0645\u062E\u062C": {
28122                 "initial": "\uFD8E"
28123             },
28124             "\u0645\u062E\u0645": {
28125                 "initial": "\uFD8F"
28126             },
28127             "\u0645\u062C\u062E": {
28128                 "initial": "\uFD92"
28129             },
28130             "\u0647\u0645\u062C": {
28131                 "initial": "\uFD93"
28132             },
28133             "\u0647\u0645\u0645": {
28134                 "initial": "\uFD94"
28135             },
28136             "\u0646\u062D\u0645": {
28137                 "initial": "\uFD95"
28138             },
28139             "\u0646\u062D\u0649": {
28140                 "final": "\uFD96"
28141             },
28142             "\u0646\u062C\u0645": {
28143                 "final": "\uFD97",
28144                 "initial": "\uFD98"
28145             },
28146             "\u0646\u062C\u0649": {
28147                 "final": "\uFD99"
28148             },
28149             "\u0646\u0645\u064A": {
28150                 "final": "\uFD9A"
28151             },
28152             "\u0646\u0645\u0649": {
28153                 "final": "\uFD9B"
28154             },
28155             "\u064A\u0645\u0645": {
28156                 "final": "\uFD9C",
28157                 "initial": "\uFD9D"
28158             },
28159             "\u0628\u062E\u064A": {
28160                 "final": "\uFD9E"
28161             },
28162             "\u062A\u062C\u064A": {
28163                 "final": "\uFD9F"
28164             },
28165             "\u062A\u062C\u0649": {
28166                 "final": "\uFDA0"
28167             },
28168             "\u062A\u062E\u064A": {
28169                 "final": "\uFDA1"
28170             },
28171             "\u062A\u062E\u0649": {
28172                 "final": "\uFDA2"
28173             },
28174             "\u062A\u0645\u064A": {
28175                 "final": "\uFDA3"
28176             },
28177             "\u062A\u0645\u0649": {
28178                 "final": "\uFDA4"
28179             },
28180             "\u062C\u0645\u064A": {
28181                 "final": "\uFDA5"
28182             },
28183             "\u062C\u062D\u0649": {
28184                 "final": "\uFDA6"
28185             },
28186             "\u062C\u0645\u0649": {
28187                 "final": "\uFDA7"
28188             },
28189             "\u0633\u062E\u0649": {
28190                 "final": "\uFDA8"
28191             },
28192             "\u0635\u062D\u064A": {
28193                 "final": "\uFDA9"
28194             },
28195             "\u0634\u062D\u064A": {
28196                 "final": "\uFDAA"
28197             },
28198             "\u0636\u062D\u064A": {
28199                 "final": "\uFDAB"
28200             },
28201             "\u0644\u062C\u064A": {
28202                 "final": "\uFDAC"
28203             },
28204             "\u0644\u0645\u064A": {
28205                 "final": "\uFDAD"
28206             },
28207             "\u064A\u062D\u064A": {
28208                 "final": "\uFDAE"
28209             },
28210             "\u064A\u062C\u064A": {
28211                 "final": "\uFDAF"
28212             },
28213             "\u064A\u0645\u064A": {
28214                 "final": "\uFDB0"
28215             },
28216             "\u0645\u0645\u064A": {
28217                 "final": "\uFDB1"
28218             },
28219             "\u0642\u0645\u064A": {
28220                 "final": "\uFDB2"
28221             },
28222             "\u0646\u062D\u064A": {
28223                 "final": "\uFDB3"
28224             },
28225             "\u0639\u0645\u064A": {
28226                 "final": "\uFDB6"
28227             },
28228             "\u0643\u0645\u064A": {
28229                 "final": "\uFDB7"
28230             },
28231             "\u0646\u062C\u062D": {
28232                 "initial": "\uFDB8",
28233                 "final": "\uFDBD"
28234             },
28235             "\u0645\u062E\u064A": {
28236                 "final": "\uFDB9"
28237             },
28238             "\u0644\u062C\u0645": {
28239                 "initial": "\uFDBA",
28240                 "final": "\uFDBC"
28241             },
28242             "\u0643\u0645\u0645": {
28243                 "final": "\uFDBB",
28244                 "initial": "\uFDC3"
28245             },
28246             "\u062C\u062D\u064A": {
28247                 "final": "\uFDBE"
28248             },
28249             "\u062D\u062C\u064A": {
28250                 "final": "\uFDBF"
28251             },
28252             "\u0645\u062C\u064A": {
28253                 "final": "\uFDC0"
28254             },
28255             "\u0641\u0645\u064A": {
28256                 "final": "\uFDC1"
28257             },
28258             "\u0628\u062D\u064A": {
28259                 "final": "\uFDC2"
28260             },
28261             "\u0633\u062E\u064A": {
28262                 "final": "\uFDC6"
28263             },
28264             "\u0646\u062C\u064A": {
28265                 "final": "\uFDC7"
28266             },
28267             "\u0644\u0622": {
28268                 "isolated": "\uFEF5",
28269                 "final": "\uFEF6"
28270             },
28271             "\u0644\u0623": {
28272                 "isolated": "\uFEF7",
28273                 "final": "\uFEF8"
28274             },
28275             "\u0644\u0625": {
28276                 "isolated": "\uFEF9",
28277                 "final": "\uFEFA"
28278             },
28279             "\u0644\u0627": {
28280                 "isolated": "\uFEFB",
28281                 "final": "\uFEFC"
28282             },
28283             "words": {
28284                 "\u0635\u0644\u06D2": "\uFDF0",
28285                 "\u0642\u0644\u06D2": "\uFDF1",
28286                 "\u0627\u0644\u0644\u0647": "\uFDF2",
28287                 "\u0627\u0643\u0628\u0631": "\uFDF3",
28288                 "\u0645\u062D\u0645\u062F": "\uFDF4",
28289                 "\u0635\u0644\u0639\u0645": "\uFDF5",
28290                 "\u0631\u0633\u0648\u0644": "\uFDF6",
28291                 "\u0639\u0644\u064A\u0647": "\uFDF7",
28292                 "\u0648\u0633\u0644\u0645": "\uFDF8",
28293                 "\u0635\u0644\u0649": "\uFDF9",
28294                 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
28295                 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
28296                 "\u0631\u06CC\u0627\u0644": "\uFDFC"
28297             }
28298         };
28299         exports.default = ligatureReference;
28300         });
28301
28302         unwrapExports(unicodeLigatures);
28303
28304         var reference = createCommonjsModule(function (module, exports) {
28305         Object.defineProperty(exports, "__esModule", { value: true });
28306
28307
28308         var letterList = Object.keys(unicodeArabic.default);
28309         exports.letterList = letterList;
28310         var ligatureList = Object.keys(unicodeLigatures.default);
28311         exports.ligatureList = ligatureList;
28312         var ligatureWordList = Object.keys(unicodeLigatures.default.words);
28313         exports.ligatureWordList = ligatureWordList;
28314         var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
28315         exports.lams = lams;
28316         var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
28317         exports.alefs = alefs;
28318         // for (var l = 1; l < lams.length; l++) {
28319         //   console.log('-');
28320         //   for (var a = 0; a < alefs.length; a++) {
28321         //     console.log(a + ': ' + lams[l] + alefs[a]);
28322         //   }
28323         // }
28324         var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
28325         exports.tashkeel = tashkeel;
28326         function addToTashkeel(start, finish) {
28327             for (var i = start; i <= finish; i++) {
28328                 exports.tashkeel = tashkeel += String.fromCharCode(i);
28329             }
28330         }
28331         addToTashkeel(0x0610, 0x061A);
28332         addToTashkeel(0x064B, 0x065F);
28333         addToTashkeel(0x06D6, 0x06DC);
28334         addToTashkeel(0x06E0, 0x06E4);
28335         addToTashkeel(0x06EA, 0x06ED);
28336         addToTashkeel(0x08D3, 0x08E1);
28337         addToTashkeel(0x08E3, 0x08FF);
28338         addToTashkeel(0xFE70, 0xFE7F);
28339         var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
28340         exports.lineBreakers = lineBreakers;
28341         function addToLineBreakers(start, finish) {
28342             for (var i = start; i <= finish; i++) {
28343                 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
28344             }
28345         }
28346         addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
28347         addToLineBreakers(0x0621, 0x0625);
28348         addToLineBreakers(0x062F, 0x0632);
28349         addToLineBreakers(0x0660, 0x066D); // numerals, math
28350         addToLineBreakers(0x0671, 0x0677);
28351         addToLineBreakers(0x0688, 0x0699);
28352         addToLineBreakers(0x06C3, 0x06CB);
28353         addToLineBreakers(0x06D2, 0x06F9);
28354         addToLineBreakers(0x0759, 0x075B);
28355         addToLineBreakers(0x08AA, 0x08AE);
28356         addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
28357         // Presentation Forms A includes diacritics but they are meant to stand alone
28358         addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
28359         // numerals, math
28360         addToLineBreakers(0x10E60, 0x10E7F);
28361         addToLineBreakers(0x1EC70, 0x1ECBF);
28362         addToLineBreakers(0x1EE00, 0x1EEFF);
28363         });
28364
28365         unwrapExports(reference);
28366         var reference_1 = reference.letterList;
28367         var reference_2 = reference.ligatureList;
28368         var reference_3 = reference.ligatureWordList;
28369         var reference_4 = reference.lams;
28370         var reference_5 = reference.alefs;
28371         var reference_6 = reference.tashkeel;
28372         var reference_7 = reference.lineBreakers;
28373
28374         var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
28375         Object.defineProperty(exports, "__esModule", { value: true });
28376
28377
28378         function GlyphSplitter(word) {
28379             var letters = [];
28380             var lastLetter = '';
28381             word.split('').forEach(function (letter) {
28382                 if (isArabic_1.isArabic(letter)) {
28383                     if (reference.tashkeel.indexOf(letter) > -1) {
28384                         letters[letters.length - 1] += letter;
28385                     }
28386                     else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
28387                         // valid LA forms
28388                         letters[letters.length - 1] += letter;
28389                     }
28390                     else {
28391                         letters.push(letter);
28392                     }
28393                 }
28394                 else {
28395                     letters.push(letter);
28396                 }
28397                 if (reference.tashkeel.indexOf(letter) === -1) {
28398                     lastLetter = letter;
28399                 }
28400             });
28401             return letters;
28402         }
28403         exports.GlyphSplitter = GlyphSplitter;
28404         });
28405
28406         unwrapExports(GlyphSplitter_1);
28407         var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
28408
28409         var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
28410         Object.defineProperty(exports, "__esModule", { value: true });
28411
28412
28413         function BaselineSplitter(word) {
28414             var letters = [];
28415             var lastLetter = '';
28416             word.split('').forEach(function (letter) {
28417                 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
28418                     if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
28419                         letters[letters.length - 1] += letter;
28420                     }
28421                     else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
28422                         letters.push(letter);
28423                     }
28424                     else {
28425                         letters[letters.length - 1] += letter;
28426                     }
28427                 }
28428                 else {
28429                     letters.push(letter);
28430                 }
28431                 if (reference.tashkeel.indexOf(letter) === -1) {
28432                     // don't allow tashkeel to hide line break
28433                     lastLetter = letter;
28434                 }
28435             });
28436             return letters;
28437         }
28438         exports.BaselineSplitter = BaselineSplitter;
28439         });
28440
28441         unwrapExports(BaselineSplitter_1);
28442         var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
28443
28444         var Normalization = createCommonjsModule(function (module, exports) {
28445         Object.defineProperty(exports, "__esModule", { value: true });
28446
28447
28448
28449
28450         function Normal(word, breakPresentationForm) {
28451             // default is to turn initial/isolated/medial/final presentation form to generic
28452             if (typeof breakPresentationForm === 'undefined') {
28453                 breakPresentationForm = true;
28454             }
28455             var returnable = '';
28456             word.split('').forEach(function (letter) {
28457                 if (!isArabic_1.isArabic(letter)) {
28458                     returnable += letter;
28459                     return;
28460                 }
28461                 for (var w = 0; w < reference.letterList.length; w++) {
28462                     // ok so we are checking this potential lettertron
28463                     var letterForms = unicodeArabic.default[reference.letterList[w]];
28464                     var versions = Object.keys(letterForms);
28465                     for (var v = 0; v < versions.length; v++) {
28466                         var localVersion = letterForms[versions[v]];
28467                         if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28468                             // look at this embedded object
28469                             var embeddedForms = Object.keys(localVersion);
28470                             for (var ef = 0; ef < embeddedForms.length; ef++) {
28471                                 var form = localVersion[embeddedForms[ef]];
28472                                 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28473                                     // match
28474                                     // console.log('embedded match');
28475                                     if (form === letter) {
28476                                         // match exact
28477                                         if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
28478                                             // replace presentation form
28479                                             // console.log('keeping normal form of the letter');
28480                                             if (typeof localVersion['normal'] === 'object') {
28481                                                 returnable += localVersion['normal'][0];
28482                                             }
28483                                             else {
28484                                                 returnable += localVersion['normal'];
28485                                             }
28486                                             return;
28487                                         }
28488                                         // console.log('keeping this letter');
28489                                         returnable += letter;
28490                                         return;
28491                                     }
28492                                     else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
28493                                         // match
28494                                         returnable += form[0];
28495                                         // console.log('added the first letter from the same array');
28496                                         return;
28497                                     }
28498                                 }
28499                             }
28500                         }
28501                         else if (localVersion === letter) {
28502                             // match exact
28503                             if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
28504                                 // replace presentation form
28505                                 // console.log('keeping normal form of the letter');
28506                                 if (typeof letterForms['normal'] === 'object') {
28507                                     returnable += letterForms['normal'][0];
28508                                 }
28509                                 else {
28510                                     returnable += letterForms['normal'];
28511                                 }
28512                                 return;
28513                             }
28514                             // console.log('keeping this letter');
28515                             returnable += letter;
28516                             return;
28517                         }
28518                         else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
28519                             // match
28520                             returnable += localVersion[0];
28521                             // console.log('added the first letter from the same array');
28522                             return;
28523                         }
28524                     }
28525                 }
28526                 // try ligatures
28527                 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
28528                     var normalForm = reference.ligatureList[v2];
28529                     if (normalForm !== 'words') {
28530                         var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
28531                         for (var f = 0; f < ligForms.length; f++) {
28532                             if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
28533                                 returnable += normalForm;
28534                                 return;
28535                             }
28536                         }
28537                     }
28538                 }
28539                 // try words ligatures
28540                 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
28541                     var normalForm = reference.ligatureWordList[v3];
28542                     if (unicodeLigatures.default.words[normalForm] === letter) {
28543                         returnable += normalForm;
28544                         return;
28545                     }
28546                 }
28547                 returnable += letter;
28548                 // console.log('kept the letter')
28549             });
28550             return returnable;
28551         }
28552         exports.Normal = Normal;
28553         });
28554
28555         unwrapExports(Normalization);
28556         var Normalization_1 = Normalization.Normal;
28557
28558         var CharShaper_1 = createCommonjsModule(function (module, exports) {
28559         Object.defineProperty(exports, "__esModule", { value: true });
28560
28561
28562
28563         function CharShaper(letter, form) {
28564             if (!isArabic_1.isArabic(letter)) {
28565                 // fail not Arabic
28566                 throw new Error('Not Arabic');
28567             }
28568             if (letter === "\u0621") {
28569                 // hamza alone
28570                 return "\u0621";
28571             }
28572             for (var w = 0; w < reference.letterList.length; w++) {
28573                 // ok so we are checking this potential lettertron
28574                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28575                 var versions = Object.keys(letterForms);
28576                 for (var v = 0; v < versions.length; v++) {
28577                     var localVersion = letterForms[versions[v]];
28578                     if ((localVersion === letter) ||
28579                         (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28580                         if (versions.indexOf(form) > -1) {
28581                             return letterForms[form];
28582                         }
28583                     }
28584                     else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28585                         // check embedded
28586                         var embeddedVersions = Object.keys(localVersion);
28587                         for (var ev = 0; ev < embeddedVersions.length; ev++) {
28588                             if ((localVersion[embeddedVersions[ev]] === letter) ||
28589                                 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
28590                                 if (embeddedVersions.indexOf(form) > -1) {
28591                                     return localVersion[form];
28592                                 }
28593                             }
28594                         }
28595                     }
28596                 }
28597             }
28598         }
28599         exports.CharShaper = CharShaper;
28600         });
28601
28602         unwrapExports(CharShaper_1);
28603         var CharShaper_2 = CharShaper_1.CharShaper;
28604
28605         var WordShaper_1 = createCommonjsModule(function (module, exports) {
28606         Object.defineProperty(exports, "__esModule", { value: true });
28607
28608
28609
28610
28611         function WordShaper(word) {
28612             var state = 'initial';
28613             var output = '';
28614             for (var w = 0; w < word.length; w++) {
28615                 var nextLetter = ' ';
28616                 for (var nxw = w + 1; nxw < word.length; nxw++) {
28617                     if (!isArabic_1.isArabic(word[nxw])) {
28618                         break;
28619                     }
28620                     if (reference.tashkeel.indexOf(word[nxw]) === -1) {
28621                         nextLetter = word[nxw];
28622                         break;
28623                     }
28624                 }
28625                 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
28626                     // space or other non-Arabic
28627                     output += word[w];
28628                     state = 'initial';
28629                 }
28630                 else if (reference.tashkeel.indexOf(word[w]) > -1) {
28631                     // tashkeel - add without changing state
28632                     output += word[w];
28633                 }
28634                 else if ((nextLetter === ' ') // last Arabic letter in this word
28635                     || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
28636                     output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
28637                     state = 'initial';
28638                 }
28639                 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
28640                     // LA letters - advance an additional letter after this
28641                     output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
28642                     while (word[w] !== nextLetter) {
28643                         w++;
28644                     }
28645                     state = 'initial';
28646                 }
28647                 else {
28648                     output += CharShaper_1.CharShaper(word[w], state);
28649                     state = 'medial';
28650                 }
28651             }
28652             return output;
28653         }
28654         exports.WordShaper = WordShaper;
28655         });
28656
28657         unwrapExports(WordShaper_1);
28658         var WordShaper_2 = WordShaper_1.WordShaper;
28659
28660         var ParentLetter_1 = createCommonjsModule(function (module, exports) {
28661         Object.defineProperty(exports, "__esModule", { value: true });
28662
28663
28664
28665         function ParentLetter(letter) {
28666             if (!isArabic_1.isArabic(letter)) {
28667                 throw new Error('Not an Arabic letter');
28668             }
28669             for (var w = 0; w < reference.letterList.length; w++) {
28670                 // ok so we are checking this potential lettertron
28671                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28672                 var versions = Object.keys(letterForms);
28673                 for (var v = 0; v < versions.length; v++) {
28674                     var localVersion = letterForms[versions[v]];
28675                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28676                         // look at this embedded object
28677                         var embeddedForms = Object.keys(localVersion);
28678                         for (var ef = 0; ef < embeddedForms.length; ef++) {
28679                             var form = localVersion[embeddedForms[ef]];
28680                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28681                                 // match
28682                                 return localVersion;
28683                             }
28684                         }
28685                     }
28686                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28687                         // match
28688                         return letterForms;
28689                     }
28690                 }
28691                 return null;
28692             }
28693         }
28694         exports.ParentLetter = ParentLetter;
28695         function GrandparentLetter(letter) {
28696             if (!isArabic_1.isArabic(letter)) {
28697                 throw new Error('Not an Arabic letter');
28698             }
28699             for (var w = 0; w < reference.letterList.length; w++) {
28700                 // ok so we are checking this potential lettertron
28701                 var letterForms = unicodeArabic.default[reference.letterList[w]];
28702                 var versions = Object.keys(letterForms);
28703                 for (var v = 0; v < versions.length; v++) {
28704                     var localVersion = letterForms[versions[v]];
28705                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
28706                         // look at this embedded object
28707                         var embeddedForms = Object.keys(localVersion);
28708                         for (var ef = 0; ef < embeddedForms.length; ef++) {
28709                             var form = localVersion[embeddedForms[ef]];
28710                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
28711                                 // match
28712                                 return letterForms;
28713                             }
28714                         }
28715                     }
28716                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
28717                         // match
28718                         return letterForms;
28719                     }
28720                 }
28721                 return null;
28722             }
28723         }
28724         exports.GrandparentLetter = GrandparentLetter;
28725         });
28726
28727         unwrapExports(ParentLetter_1);
28728         var ParentLetter_2 = ParentLetter_1.ParentLetter;
28729         var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
28730
28731         var lib$1 = createCommonjsModule(function (module, exports) {
28732         Object.defineProperty(exports, "__esModule", { value: true });
28733
28734         exports.isArabic = isArabic_1.isArabic;
28735
28736         exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
28737
28738         exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
28739
28740         exports.Normal = Normalization.Normal;
28741
28742         exports.CharShaper = CharShaper_1.CharShaper;
28743
28744         exports.WordShaper = WordShaper_1.WordShaper;
28745
28746         exports.ParentLetter = ParentLetter_1.ParentLetter;
28747         exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
28748         });
28749
28750         unwrapExports(lib$1);
28751         var lib_1 = lib$1.isArabic;
28752         var lib_2 = lib$1.GlyphSplitter;
28753         var lib_3 = lib$1.BaselineSplitter;
28754         var lib_4 = lib$1.Normal;
28755         var lib_5 = lib$1.CharShaper;
28756         var lib_6 = lib$1.WordShaper;
28757         var lib_7 = lib$1.ParentLetter;
28758         var lib_8 = lib$1.GrandparentLetter;
28759
28760         // see https://github.com/openstreetmap/iD/pull/3707
28761
28762         var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0780-\u07BF]/;
28763
28764         function fixRTLTextForSvg(inputText) {
28765             var ret = '', rtlBuffer = [];
28766             var arabicRegex = /[\u0600-\u06FF]/g;
28767             var arabicMath = /[\u0660-\u066C]+/g;
28768             var thaanaVowel = /[\u07A6-\u07B0]/;
28769             var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
28770
28771             if (!arabicRegex.test(inputText)) {
28772                 // Hebrew or Thaana RTL script
28773                 for (var n = 0; n < inputText.length; n++) {
28774                     var c = inputText[n];
28775                     if ((thaanaVowel.test(c) || hebrewSign.test(c)) && rtlBuffer.length) {
28776                         rtlBuffer[rtlBuffer.length - 1] += c;
28777                     } else if (rtlRegex.test(c)) {
28778                         rtlBuffer.push(c);
28779                     } else if (c === ' ' && rtlBuffer.length) {
28780                         // whitespace within RTL text
28781                         rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
28782                     } else {
28783                         // non-RTL character
28784                         ret += rtlBuffer.reverse().join('') + c;
28785                         rtlBuffer = [];
28786                     }
28787                 }
28788                 ret += rtlBuffer.reverse().join('');
28789                 return ret;
28790             } else {
28791                 var label = lib_6(inputText).split('').reverse().join('');
28792                 // prevent Arabic numbers from being reversed
28793                 var numericSwaps = label.match(arabicMath) || [];
28794                 for (var i = 0; i < numericSwaps.length; i++) {
28795                     if (numericSwaps[i].length > 1) {
28796                         label = label.replace(numericSwaps[i], numericSwaps[i].split('').reverse().join(''));
28797                     }
28798                 }
28799                 return label;
28800             }
28801         }
28802
28803         var translations = Object.create(null);
28804
28805         var currentLocale = 'en';
28806         var textDirection = 'ltr';
28807         var languageNames = {};
28808         var scriptNames = {};
28809
28810         function setLocale(val) {
28811             if (translations[val] !== undefined) {
28812                 currentLocale = val;
28813             } else if (translations[val.split('-')[0]]) {
28814                 currentLocale = val.split('-')[0];
28815             }
28816         }
28817
28818         function addTranslation(id, value) {
28819             translations[id] = value;
28820         }
28821
28822         /**
28823          * Given a string identifier, try to find that string in the current
28824          * language, and return it.  This function will be called recursively
28825          * with locale `en` if a string can not be found in the requested language.
28826          *
28827          * @param {string}   s   string identifier
28828          * @param {object?}  o   object of token replacements and default string
28829          * @param {string?}  loc locale to use
28830          * @returns {string?} locale string
28831          */
28832         function t(s, o, loc) {
28833             loc = loc || currentLocale;
28834
28835             var path = s
28836                 .split('.')
28837                 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
28838                 .reverse();
28839
28840             var rep = translations[loc];
28841
28842             while (rep !== undefined && path.length) {
28843                 rep = rep[path.pop()];
28844             }
28845
28846             if (rep !== undefined) {
28847                 if (o) {
28848                     for (var k in o) {
28849                         var variable = '{' + k + '}';
28850                         var re = new RegExp(variable, 'g'); // check globally for variables
28851                         rep = rep.replace(re, o[k]);
28852                     }
28853                 }
28854                 return rep;
28855             }
28856
28857             if (loc !== 'en') {
28858                 return t(s, o, 'en');
28859             }
28860
28861             if (o && 'default' in o) {
28862                 return o.default;
28863             }
28864
28865             var missing = 'Missing ' + loc + ' translation: ' + s;
28866             if (typeof console !== 'undefined') console.error(missing); // eslint-disable-line
28867
28868             return missing;
28869         }
28870
28871         /**
28872          * Given string 'ltr' or 'rtl', save that setting
28873          *
28874          * @param {string} dir ltr or rtl
28875          */
28876
28877         function setTextDirection(dir) {
28878             textDirection = dir;
28879         }
28880
28881         function setLanguageNames(obj) {
28882             languageNames = obj;
28883         }
28884
28885         function setScriptNames(obj) {
28886             scriptNames = obj;
28887         }
28888
28889         function languageName(code, options) {
28890             if (languageNames[code]) { // name in locale langauge
28891
28892                 // e.g. German
28893                 return languageNames[code];
28894             }
28895             // sometimes we only want the local name
28896             if (options && options.localOnly) return null;
28897
28898             var langInfo = dataLanguages[code];
28899
28900             if (langInfo) {
28901                 if (langInfo.nativeName) { // name in native language
28902
28903                     // e.g. Deutsch (de)
28904                     return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
28905
28906                 } else if (langInfo.base && langInfo.script) {
28907
28908                     var base = langInfo.base; // the code of the langauge this is based on
28909
28910                     if (languageNames[base]) { // base language name in locale langauge
28911                         var scriptCode = langInfo.script;
28912                         var script = scriptNames[scriptCode] || scriptCode;
28913
28914                         // e.g. Serbian (Cyrillic)
28915                         return t('translate.language_and_code', { language: languageNames[base], code: script });
28916
28917                     } else if (dataLanguages[base] && dataLanguages[base].nativeName) {
28918
28919                         // e.g. српски (sr-Cyrl)
28920                         return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
28921                     }
28922                 }
28923             }
28924             return code; // if not found, use the code
28925         }
28926
28927         var detected;
28928
28929         function utilDetect(force) {
28930             if (detected && !force) return detected;
28931             detected = {};
28932
28933             var ua = navigator.userAgent,
28934                 m = null,
28935                 q = utilStringQs(window.location.hash.substring(1));
28936
28937             m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
28938             if (m !== null) {
28939                 detected.browser = m[1];
28940                 detected.version = m[2];
28941             }
28942             if (!detected.browser) {
28943                 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
28944                 if (m !== null) {
28945                     detected.browser = 'msie';
28946                     detected.version = m[1];
28947                 }
28948             }
28949             if (!detected.browser) {
28950                 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
28951                 if (m !== null) {
28952                     detected.browser = 'Opera';
28953                     detected.version = m[2];
28954                 }
28955             }
28956             if (!detected.browser) {
28957                 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
28958                 if (m !== null) {
28959                     detected.browser = m[1];
28960                     detected.version = m[2];
28961                     m = ua.match(/version\/([\.\d]+)/i);
28962                     if (m !== null) detected.version = m[1];
28963                 }
28964             }
28965             if (!detected.browser) {
28966                 detected.browser = navigator.appName;
28967                 detected.version = navigator.appVersion;
28968             }
28969
28970             // keep major.minor version only..
28971             detected.version = detected.version.split(/\W/).slice(0,2).join('.');
28972
28973             if (detected.browser.toLowerCase() === 'msie') {
28974                 detected.ie = true;
28975                 detected.browser = 'Internet Explorer';
28976                 detected.support = parseFloat(detected.version) >= 11;
28977             } else {
28978                 detected.ie = false;
28979                 detected.support = true;
28980             }
28981
28982             // Added due to incomplete svg style support. See #715
28983             detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
28984
28985             // Set locale based on url param (format 'en-US') or browser lang (default)
28986             if (q.hasOwnProperty('locale')) {
28987                 detected.locale = q.locale;
28988                 detected.language = q.locale.split('-')[0];
28989             } else {
28990                 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
28991                 detected.language = detected.locale.split('-')[0];
28992
28993                 // Search `navigator.languages` for a better locale. Prefer the first language,
28994                 // unless the second language is a culture-specific version of the first one, see #3842
28995                 if (navigator.languages && navigator.languages.length > 0) {
28996                     var code0 = navigator.languages[0],
28997                         parts0 = code0.split('-');
28998
28999                     detected.locale = code0;
29000                     detected.language = parts0[0];
29001
29002                     if (navigator.languages.length > 1 && parts0.length === 1) {
29003                         var code1 = navigator.languages[1],
29004                             parts1 = code1.split('-');
29005
29006                         if (parts1[0] === parts0[0]) {
29007                             detected.locale = code1;
29008                         }
29009                     }
29010                 }
29011             }
29012
29013             // Loaded locale is stored in currentLocale
29014             // return that instead (except in the situation where 'en' might override 'en-US')
29015             var loadedLocale = currentLocale || 'en';
29016             if (loadedLocale !== 'en') {
29017                 detected.locale = loadedLocale;
29018                 detected.language = detected.locale.split('-')[0];
29019             }
29020
29021             // detect text direction
29022             var lang = dataLocales[detected.locale] || dataLocales[detected.language];
29023             if ((lang && lang.rtl) || (q.rtl === 'true')) {
29024                 detected.textDirection = 'rtl';
29025             } else {
29026                 detected.textDirection = 'ltr';
29027             }
29028             setTextDirection(detected.textDirection);
29029             setLanguageNames((lang && lang.languageNames) || {});
29030             setScriptNames((lang && lang.scriptNames) || {});
29031
29032             // detect host
29033             var loc = window.top.location;
29034             var origin = loc.origin;
29035             if (!origin) {  // for unpatched IE11
29036                 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
29037             }
29038
29039             detected.host = origin + loc.pathname;
29040
29041             detected.filedrop = (window.FileReader && 'ondrop' in window);
29042
29043             detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
29044
29045             detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
29046
29047             function nav(x) {
29048                 return navigator.userAgent.indexOf(x) !== -1;
29049             }
29050
29051             if (nav('Win')) {
29052                 detected.os = 'win';
29053                 detected.platform = 'Windows';
29054             }
29055             else if (nav('Mac')) {
29056                 detected.os = 'mac';
29057                 detected.platform = 'Macintosh';
29058             }
29059             else if (nav('X11') || nav('Linux')) {
29060                 detected.os = 'linux';
29061                 detected.platform = 'Linux';
29062             }
29063             else {
29064                 detected.os = 'win';
29065                 detected.platform = 'Unknown';
29066             }
29067
29068             return detected;
29069         }
29070
29071         function utilTagText(entity) {
29072             var obj = (entity && entity.tags) || {};
29073             return Object.keys(obj)
29074                 .map(function(k) { return k + '=' + obj[k]; })
29075                 .join(', ');
29076         }
29077
29078
29079         function utilTagDiff(oldTags, newTags) {
29080             var tagDiff = [];
29081             var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
29082             keys.forEach(function(k) {
29083                 var oldVal = oldTags[k];
29084                 var newVal = newTags[k];
29085
29086                 if (oldVal && (!newVal || newVal !== oldVal)) {
29087                     tagDiff.push({
29088                         type: '-',
29089                         key: k,
29090                         oldVal: oldVal,
29091                         newVal: newVal,
29092                         display: '- ' + k + '=' + oldVal
29093                     });
29094                 }
29095                 if (newVal && (!oldVal || newVal !== oldVal)) {
29096                     tagDiff.push({
29097                         type: '+',
29098                         key: k,
29099                         oldVal: oldVal,
29100                         newVal: newVal,
29101                         display: '+ ' + k + '=' + newVal
29102                     });
29103                 }
29104             });
29105             return tagDiff;
29106         }
29107
29108
29109         function utilEntitySelector(ids) {
29110             return ids.length ? '.' + ids.join(',.') : 'nothing';
29111         }
29112
29113
29114         // returns an selector to select entity ids for:
29115         //  - entityIDs passed in
29116         //  - shallow descendant entityIDs for any of those entities that are relations
29117         function utilEntityOrMemberSelector(ids, graph) {
29118             var seen = new Set(ids);
29119             ids.forEach(collectShallowDescendants);
29120             return utilEntitySelector(Array.from(seen));
29121
29122             function collectShallowDescendants(id) {
29123                 var entity = graph.hasEntity(id);
29124                 if (!entity || entity.type !== 'relation') return;
29125
29126                 entity.members
29127                     .map(function(member) { return member.id; })
29128                     .forEach(function(id) { seen.add(id); });
29129             }
29130         }
29131
29132
29133         // returns an selector to select entity ids for:
29134         //  - entityIDs passed in
29135         //  - deep descendant entityIDs for any of those entities that are relations
29136         function utilEntityOrDeepMemberSelector(ids, graph) {
29137             var seen = new Set();
29138             ids.forEach(collectDeepDescendants);
29139             return utilEntitySelector(Array.from(seen));
29140
29141             function collectDeepDescendants(id) {
29142                 if (seen.has(id)) return;
29143                 seen.add(id);
29144
29145                 var entity = graph.hasEntity(id);
29146                 if (!entity || entity.type !== 'relation') return;
29147
29148                 entity.members
29149                     .map(function(member) { return member.id; })
29150                     .forEach(collectDeepDescendants);   // recurse
29151             }
29152         }
29153
29154
29155         // Adds or removes highlight styling for the specified entities
29156         function utilHighlightEntities(ids, highlighted, context) {
29157             context.surface()
29158                 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
29159                 .classed('highlighted', highlighted);
29160         }
29161
29162
29163         // returns an Array that is the union of:
29164         //  - nodes for any nodeIDs passed in
29165         //  - child nodes of any wayIDs passed in
29166         //  - descendant member and child nodes of relationIDs passed in
29167         function utilGetAllNodes(ids, graph) {
29168             var seen = new Set();
29169             var nodes = new Set();
29170
29171             ids.forEach(collectNodes);
29172             return Array.from(nodes);
29173
29174             function collectNodes(id) {
29175                 if (seen.has(id)) return;
29176                 seen.add(id);
29177
29178                 var entity = graph.hasEntity(id);
29179                 if (!entity) return;
29180
29181                 if (entity.type === 'node') {
29182                     nodes.add(entity);
29183                 } else if (entity.type === 'way') {
29184                     entity.nodes.forEach(collectNodes);
29185                 } else {
29186                     entity.members
29187                         .map(function(member) { return member.id; })
29188                         .forEach(collectNodes);   // recurse
29189                 }
29190             }
29191         }
29192
29193
29194         function utilDisplayName(entity) {
29195             var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
29196             var name = entity.tags[localizedNameKey] || entity.tags.name || '';
29197             var network = entity.tags.cycle_network || entity.tags.network;
29198
29199             if (!name && entity.tags.ref) {
29200                 name = entity.tags.ref;
29201                 if (network) {
29202                     name = network + ' ' + name;
29203                 }
29204             }
29205
29206             return name;
29207         }
29208
29209
29210         function utilDisplayNameForPath(entity) {
29211             var name = utilDisplayName(entity);
29212             var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
29213
29214             if (!isFirefox && name && rtlRegex.test(name)) {
29215                 name = fixRTLTextForSvg(name);
29216             }
29217
29218             return name;
29219         }
29220
29221
29222         function utilDisplayType(id) {
29223             return {
29224                 n: t('inspector.node'),
29225                 w: t('inspector.way'),
29226                 r: t('inspector.relation')
29227             }[id.charAt(0)];
29228         }
29229
29230
29231         function utilDisplayLabel(entity, context) {
29232             var displayName = utilDisplayName(entity);
29233             if (displayName) {
29234                 // use the display name if there is one
29235                 return displayName;
29236             }
29237             var preset = utilPreset(entity, context);
29238             if (preset && preset.name()) {
29239                 // use the preset name if there is a match
29240                 return preset.name();
29241             }
29242             // fallback to the display type (node/way/relation)
29243             return utilDisplayType(entity.id);
29244         }
29245
29246
29247         function utilPreset(entity, context) {
29248             return context.presets().match(entity, context.graph());
29249         }
29250
29251
29252         function utilEntityRoot(entityType) {
29253             return {
29254                 node: 'n',
29255                 way: 'w',
29256                 relation: 'r'
29257             }[entityType];
29258         }
29259
29260
29261         function utilStringQs(str) {
29262             return str.split('&').reduce(function(obj, pair){
29263                 var parts = pair.split('=');
29264                 if (parts.length === 2) {
29265                     obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
29266                 }
29267                 return obj;
29268             }, {});
29269         }
29270
29271
29272         function utilQsString(obj, noencode) {
29273             // encode everything except special characters used in certain hash parameters:
29274             // "/" in map states, ":", ",", {" and "}" in background
29275             function softEncode(s) {
29276                 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
29277             }
29278
29279             return Object.keys(obj).sort().map(function(key) {
29280                 return encodeURIComponent(key) + '=' + (
29281                     noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
29282             }).join('&');
29283         }
29284
29285
29286         function utilPrefixDOMProperty(property) {
29287             var prefixes = ['webkit', 'ms', 'moz', 'o'];
29288             var i = -1;
29289             var n = prefixes.length;
29290             var s = document.body;
29291
29292             if (property in s)
29293                 return property;
29294
29295             property = property.substr(0, 1).toUpperCase() + property.substr(1);
29296
29297             while (++i < n) {
29298                 if (prefixes[i] + property in s) {
29299                     return prefixes[i] + property;
29300                 }
29301             }
29302
29303             return false;
29304         }
29305
29306
29307         function utilPrefixCSSProperty(property) {
29308             var prefixes = ['webkit', 'ms', 'Moz', 'O'];
29309             var i = -1;
29310             var n = prefixes.length;
29311             var s = document.body.style;
29312
29313             if (property.toLowerCase() in s) {
29314                 return property.toLowerCase();
29315             }
29316
29317             while (++i < n) {
29318                 if (prefixes[i] + property in s) {
29319                     return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
29320                 }
29321             }
29322
29323             return false;
29324         }
29325
29326
29327         var transformProperty;
29328         function utilSetTransform(el, x, y, scale) {
29329             var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
29330             var translate = utilDetect().opera ? 'translate('   + x + 'px,' + y + 'px)'
29331                 : 'translate3d(' + x + 'px,' + y + 'px,0)';
29332             return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
29333         }
29334
29335
29336         // Calculates Levenshtein distance between two strings
29337         // see:  https://en.wikipedia.org/wiki/Levenshtein_distance
29338         // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
29339         function utilEditDistance(a, b) {
29340             a = remove$1(a.toLowerCase());
29341             b = remove$1(b.toLowerCase());
29342             if (a.length === 0) return b.length;
29343             if (b.length === 0) return a.length;
29344             var matrix = [];
29345             for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
29346             for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
29347             for (i = 1; i <= b.length; i++) {
29348                 for (j = 1; j <= a.length; j++) {
29349                     if (b.charAt(i-1) === a.charAt(j-1)) {
29350                         matrix[i][j] = matrix[i-1][j-1];
29351                     } else {
29352                         matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
29353                             Math.min(matrix[i][j-1] + 1, // insertion
29354                             matrix[i-1][j] + 1)); // deletion
29355                     }
29356                 }
29357             }
29358             return matrix[b.length][a.length];
29359         }
29360
29361
29362         // a d3.mouse-alike which
29363         // 1. Only works on HTML elements, not SVG
29364         // 2. Does not cause style recalculation
29365         function utilFastMouse(container) {
29366             var rect = container.getBoundingClientRect();
29367             var rectLeft = rect.left;
29368             var rectTop = rect.top;
29369             var clientLeft = +container.clientLeft;
29370             var clientTop = +container.clientTop;
29371
29372             if (textDirection === 'rtl') {
29373                 rectLeft = 0;
29374             }
29375             return function(e) {
29376                 return [
29377                     e.clientX - rectLeft - clientLeft,
29378                     e.clientY - rectTop - clientTop];
29379             };
29380         }
29381
29382
29383         function utilAsyncMap(inputs, func, callback) {
29384             var remaining = inputs.length;
29385             var results = [];
29386             var errors = [];
29387
29388             inputs.forEach(function(d, i) {
29389                 func(d, function done(err, data) {
29390                     errors[i] = err;
29391                     results[i] = data;
29392                     remaining--;
29393                     if (!remaining) callback(errors, results);
29394                 });
29395             });
29396         }
29397
29398
29399         // wraps an index to an interval [0..length-1]
29400         function utilWrap(index, length) {
29401             if (index < 0) {
29402                 index += Math.ceil(-index/length)*length;
29403             }
29404             return index % length;
29405         }
29406
29407
29408         /**
29409          * a replacement for functor
29410          *
29411          * @param {*} value any value
29412          * @returns {Function} a function that returns that value or the value if it's a function
29413          */
29414         function utilFunctor(value) {
29415             if (typeof value === 'function') return value;
29416             return function() {
29417                 return value;
29418             };
29419         }
29420
29421
29422         function utilNoAuto(selection) {
29423             var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
29424
29425             return selection
29426                 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
29427                 .attr('autocomplete', 'new-password')
29428                 .attr('autocorrect', 'off')
29429                 .attr('autocapitalize', 'off')
29430                 .attr('spellcheck', isText ? 'true' : 'false');
29431         }
29432
29433
29434         // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
29435         // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
29436         function utilHashcode(str) {
29437             var hash = 0;
29438             if (str.length === 0) {
29439                 return hash;
29440             }
29441             for (var i = 0; i < str.length; i++) {
29442                 var char = str.charCodeAt(i);
29443                 hash = ((hash << 5) - hash) + char;
29444                 hash = hash & hash; // Convert to 32bit integer
29445             }
29446             return hash;
29447         }
29448
29449         function utilCleanTags(tags) {
29450             var out = {};
29451             for (var k in tags) {
29452                 if (!k) continue;
29453                 var v = tags[k];
29454                 if (v !== undefined) {
29455                     out[k] = cleanValue(k, v);
29456                 }
29457             }
29458
29459             return out;
29460
29461
29462             function cleanValue(k, v) {
29463                 function keepSpaces(k) {
29464                     return /_hours|_times|:conditional$/.test(k);
29465                 }
29466
29467                 function skip(k) {
29468                     return /^(description|note|fixme)$/.test(k);
29469                 }
29470
29471                 if (skip(k)) return v;
29472
29473                 var cleaned = v
29474                     .split(';')
29475                     .map(function(s) { return s.trim(); })
29476                     .join(keepSpaces(k) ? '; ' : ';');
29477
29478                 // The code below is not intended to validate websites and emails.
29479                 // It is only intended to prevent obvious copy-paste errors. (#2323)
29480                 // clean website- and email-like tags
29481                 if (k.indexOf('website') !== -1 ||
29482                     k.indexOf('email') !== -1 ||
29483                     cleaned.indexOf('http') === 0) {
29484                     cleaned = cleaned
29485                         .replace(/[\u200B-\u200F\uFEFF]/g, '');  // strip LRM and other zero width chars
29486
29487                 }
29488
29489                 return cleaned;
29490             }
29491         }
29492
29493         // Like selection.property('value', ...), but avoids no-op value sets,
29494         // which can result in layout/repaint thrashing in some situations.
29495         function utilGetSetValue(selection, value) {
29496             function d3_selection_value(value) {
29497                 function valueNull() {
29498                     delete this.value;
29499                 }
29500
29501                 function valueConstant() {
29502                     if (this.value !== value) {
29503                         this.value = value;
29504                     }
29505                 }
29506
29507                 function valueFunction() {
29508                     var x = value.apply(this, arguments);
29509                     if (x == null) {
29510                         delete this.value;
29511                     } else if (this.value !== x) {
29512                         this.value = x;
29513                     }
29514                 }
29515
29516                 return value == null
29517                     ? valueNull : (typeof value === 'function'
29518                     ? valueFunction : valueConstant);
29519             }
29520
29521             if (arguments.length === 1) {
29522                 return selection.property('value');
29523             }
29524
29525             return selection.each(d3_selection_value(value));
29526         }
29527
29528         function utilKeybinding(namespace) {
29529             var _keybindings = {};
29530
29531
29532             function testBindings(isCapturing) {
29533                 var didMatch = false;
29534                 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
29535                 var i, binding;
29536
29537                 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
29538                 // so we don't strictly match on the shift key, but we prioritize
29539                 // shifted keybindings first, and fallback to unshifted only if no match.
29540                 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
29541
29542                 // priority match shifted keybindings first
29543                 for (i = 0; i < bindings.length; i++) {
29544                     binding = bindings[i];
29545                     if (!binding.event.modifiers.shiftKey) continue;  // no shift
29546                     if (!!binding.capture !== isCapturing) continue;
29547                     if (matches(binding, true)) {
29548                         binding.callback();
29549                         didMatch = true;
29550                     }
29551                 }
29552
29553                 // then unshifted keybindings
29554                 if (didMatch) return;
29555                 for (i = 0; i < bindings.length; i++) {
29556                     binding = bindings[i];
29557                     if (binding.event.modifiers.shiftKey) continue;   // shift
29558                     if (!!binding.capture !== isCapturing) continue;
29559                     if (matches(binding, false)) {
29560                         binding.callback();
29561                     }
29562                 }
29563
29564
29565                 function matches(binding, testShift) {
29566                     var event$1 = event;
29567                     var isMatch = false;
29568                     var tryKeyCode = true;
29569
29570                     // Prefer a match on `KeyboardEvent.key`
29571                     if (event$1.key !== undefined) {
29572                         tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
29573                         isMatch = true;
29574
29575                         if (binding.event.key === undefined) {
29576                             isMatch = false;
29577                         } else if (Array.isArray(binding.event.key)) {
29578                             if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
29579                                 isMatch = false;
29580                         } else {
29581                             if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
29582                                 isMatch = false;
29583                         }
29584                     }
29585
29586                     // Fallback match on `KeyboardEvent.keyCode`, can happen if:
29587                     // - browser doesn't support `KeyboardEvent.key`
29588                     // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
29589                     if (!isMatch && tryKeyCode) {
29590                         isMatch = (event$1.keyCode === binding.event.keyCode);
29591                     }
29592
29593                     if (!isMatch) return false;
29594
29595                     // test modifier keys
29596                     if (!(event$1.ctrlKey && event$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
29597                         if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false;
29598                         if (event$1.altKey !== binding.event.modifiers.altKey) return false;
29599                     }
29600                     if (event$1.metaKey !== binding.event.modifiers.metaKey) return false;
29601                     if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) return false;
29602
29603                     return true;
29604                 }
29605             }
29606
29607
29608             function capture() {
29609                 testBindings(true);
29610             }
29611
29612
29613             function bubble() {
29614                 var tagName = d3_select(event.target).node().tagName;
29615                 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
29616                     return;
29617                 }
29618                 testBindings(false);
29619             }
29620
29621
29622             function keybinding(selection) {
29623                 selection = selection || d3_select(document);
29624                 selection.on('keydown.capture.' + namespace, capture, true);
29625                 selection.on('keydown.bubble.' + namespace, bubble, false);
29626                 return keybinding;
29627             }
29628
29629             // was: keybinding.off()
29630             keybinding.unbind = function(selection) {
29631                 _keybindings = [];
29632                 selection = selection || d3_select(document);
29633                 selection.on('keydown.capture.' + namespace, null);
29634                 selection.on('keydown.bubble.' + namespace, null);
29635                 return keybinding;
29636             };
29637
29638
29639             keybinding.clear = function() {
29640                 _keybindings = {};
29641                 return keybinding;
29642             };
29643
29644
29645             // Remove one or more keycode bindings.
29646             keybinding.off = function(codes, capture) {
29647                 var arr = utilArrayUniq([].concat(codes));
29648
29649                 for (var i = 0; i < arr.length; i++) {
29650                     var id = arr[i] + (capture ? '-capture' : '-bubble');
29651                     delete _keybindings[id];
29652                 }
29653                 return keybinding;
29654             };
29655
29656
29657             // Add one or more keycode bindings.
29658             keybinding.on = function(codes, callback, capture) {
29659                 if (typeof callback !== 'function') {
29660                     return keybinding.off(codes, capture);
29661                 }
29662
29663                 var arr = utilArrayUniq([].concat(codes));
29664
29665                 for (var i = 0; i < arr.length; i++) {
29666                     var id = arr[i] + (capture ? '-capture' : '-bubble');
29667                     var binding = {
29668                         id: id,
29669                         capture: capture,
29670                         callback: callback,
29671                         event: {
29672                             key: undefined,  // preferred
29673                             keyCode: 0,      // fallback
29674                             modifiers: {
29675                                 shiftKey: false,
29676                                 ctrlKey: false,
29677                                 altKey: false,
29678                                 metaKey: false
29679                             }
29680                         }
29681                     };
29682
29683                     if (_keybindings[id]) {
29684                         console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
29685                     }
29686
29687                     _keybindings[id] = binding;
29688
29689                     var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
29690                     for (var j = 0; j < matches.length; j++) {
29691                         // Normalise matching errors
29692                         if (matches[j] === '++') matches[j] = '+';
29693
29694                         if (matches[j] in utilKeybinding.modifierCodes) {
29695                             var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
29696                             binding.event.modifiers[prop] = true;
29697                         } else {
29698                             binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
29699                             if (matches[j] in utilKeybinding.keyCodes) {
29700                                 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
29701                             }
29702                         }
29703                     }
29704                 }
29705
29706                 return keybinding;
29707             };
29708
29709
29710             return keybinding;
29711         }
29712
29713
29714         /*
29715          * See https://github.com/keithamus/jwerty
29716          */
29717
29718         utilKeybinding.modifierCodes = {
29719             // Shift key, ⇧
29720             '⇧': 16, shift: 16,
29721             // CTRL key, on Mac: ⌃
29722             '⌃': 17, ctrl: 17,
29723             // ALT key, on Mac: ⌥ (Alt)
29724             '⌥': 18, alt: 18, option: 18,
29725             // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
29726             '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
29727         };
29728
29729         utilKeybinding.modifierProperties = {
29730             16: 'shiftKey',
29731             17: 'ctrlKey',
29732             18: 'altKey',
29733             91: 'metaKey'
29734         };
29735
29736         utilKeybinding.keys = {
29737             // Backspace key, on Mac: ⌫ (Backspace)
29738             '⌫': 'Backspace', backspace: 'Backspace',
29739             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29740             '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
29741             // Return key, ↩
29742             '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
29743             // Pause/Break key
29744             'pause': 'Pause', 'pause-break': 'Pause',
29745             // Caps Lock key, ⇪
29746             '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
29747             // Escape key, on Mac: ⎋, on Windows: Esc
29748             '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
29749             // Space key
29750             space: [' ', 'Spacebar'],
29751             // Page-Up key, or pgup, on Mac: ↖
29752             '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
29753             // Page-Down key, or pgdown, on Mac: ↘
29754             '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
29755             // END key, on Mac: ⇟
29756             '⇟': 'End', end: 'End',
29757             // HOME key, on Mac: ⇞
29758             '⇞': 'Home', home: 'Home',
29759             // Insert key, or ins
29760             ins: 'Insert', insert: 'Insert',
29761             // Delete key, on Mac: ⌦ (Delete)
29762             '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
29763             // Left Arrow Key, or ←
29764             '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
29765             // Up Arrow Key, or ↑
29766             '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
29767             // Right Arrow Key, or →
29768             '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
29769             // Up Arrow Key, or ↓
29770             '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
29771             // odities, stuff for backward compatibility (browsers and code):
29772             // Num-Multiply, or *
29773             '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
29774             // Num-Plus or +
29775             '+': ['+', 'Add'], 'plus': ['+', 'Add'],
29776             // Num-Subtract, or -
29777             '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
29778             // Semicolon
29779             semicolon: ';',
29780             // = or equals
29781             equals: '=',
29782             // Comma, or ,
29783             comma: ',',
29784             // Period, or ., or full-stop
29785             period: '.', 'full-stop': '.',
29786             // Slash, or /, or forward-slash
29787             slash: '/', 'forward-slash': '/',
29788             // Tick, or `, or back-quote
29789             tick: '`', 'back-quote': '`',
29790             // Open bracket, or [
29791             'open-bracket': '[',
29792             // Back slash, or \
29793             'back-slash': '\\',
29794             // Close backet, or ]
29795             'close-bracket': ']',
29796             // Apostrophe, or Quote, or '
29797             quote: '\'', apostrophe: '\'',
29798             // NUMPAD 0-9
29799             'num-0': '0',
29800             'num-1': '1',
29801             'num-2': '2',
29802             'num-3': '3',
29803             'num-4': '4',
29804             'num-5': '5',
29805             'num-6': '6',
29806             'num-7': '7',
29807             'num-8': '8',
29808             'num-9': '9',
29809             // F1-F25
29810             f1: 'F1',
29811             f2: 'F2',
29812             f3: 'F3',
29813             f4: 'F4',
29814             f5: 'F5',
29815             f6: 'F6',
29816             f7: 'F7',
29817             f8: 'F8',
29818             f9: 'F9',
29819             f10: 'F10',
29820             f11: 'F11',
29821             f12: 'F12',
29822             f13: 'F13',
29823             f14: 'F14',
29824             f15: 'F15',
29825             f16: 'F16',
29826             f17: 'F17',
29827             f18: 'F18',
29828             f19: 'F19',
29829             f20: 'F20',
29830             f21: 'F21',
29831             f22: 'F22',
29832             f23: 'F23',
29833             f24: 'F24',
29834             f25: 'F25'
29835         };
29836
29837         utilKeybinding.keyCodes = {
29838             // Backspace key, on Mac: ⌫ (Backspace)
29839             '⌫': 8, backspace: 8,
29840             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
29841             '⇥': 9, '⇆': 9, tab: 9,
29842             // Return key, ↩
29843             '↩': 13, 'return': 13, enter: 13, '⌅': 13,
29844             // Pause/Break key
29845             'pause': 19, 'pause-break': 19,
29846             // Caps Lock key, ⇪
29847             '⇪': 20, caps: 20, 'caps-lock': 20,
29848             // Escape key, on Mac: ⎋, on Windows: Esc
29849             '⎋': 27, escape: 27, esc: 27,
29850             // Space key
29851             space: 32,
29852             // Page-Up key, or pgup, on Mac: ↖
29853             '↖': 33, pgup: 33, 'page-up': 33,
29854             // Page-Down key, or pgdown, on Mac: ↘
29855             '↘': 34, pgdown: 34, 'page-down': 34,
29856             // END key, on Mac: ⇟
29857             '⇟': 35, end: 35,
29858             // HOME key, on Mac: ⇞
29859             '⇞': 36, home: 36,
29860             // Insert key, or ins
29861             ins: 45, insert: 45,
29862             // Delete key, on Mac: ⌦ (Delete)
29863             '⌦': 46, del: 46, 'delete': 46,
29864             // Left Arrow Key, or ←
29865             '←': 37, left: 37, 'arrow-left': 37,
29866             // Up Arrow Key, or ↑
29867             '↑': 38, up: 38, 'arrow-up': 38,
29868             // Right Arrow Key, or →
29869             '→': 39, right: 39, 'arrow-right': 39,
29870             // Up Arrow Key, or ↓
29871             '↓': 40, down: 40, 'arrow-down': 40,
29872             // odities, printing characters that come out wrong:
29873             // Firefox Equals
29874             'ffequals': 61,
29875             // Num-Multiply, or *
29876             '*': 106, star: 106, asterisk: 106, multiply: 106,
29877             // Num-Plus or +
29878             '+': 107, 'plus': 107,
29879             // Num-Subtract, or -
29880             '-': 109, subtract: 109,
29881             // Firefox Plus
29882             'ffplus': 171,
29883             // Firefox Minus
29884             'ffminus': 173,
29885             // Semicolon
29886             ';': 186, semicolon: 186,
29887             // = or equals
29888             '=': 187, 'equals': 187,
29889             // Comma, or ,
29890             ',': 188, comma: 188,
29891             // Dash / Underscore key
29892             'dash': 189,
29893             // Period, or ., or full-stop
29894             '.': 190, period: 190, 'full-stop': 190,
29895             // Slash, or /, or forward-slash
29896             '/': 191, slash: 191, 'forward-slash': 191,
29897             // Tick, or `, or back-quote
29898             '`': 192, tick: 192, 'back-quote': 192,
29899             // Open bracket, or [
29900             '[': 219, 'open-bracket': 219,
29901             // Back slash, or \
29902             '\\': 220, 'back-slash': 220,
29903             // Close backet, or ]
29904             ']': 221, 'close-bracket': 221,
29905             // Apostrophe, or Quote, or '
29906             '\'': 222, quote: 222, apostrophe: 222
29907         };
29908
29909         // NUMPAD 0-9
29910         var i$2 = 95, n = 0;
29911         while (++i$2 < 106) {
29912             utilKeybinding.keyCodes['num-' + n] = i$2;
29913             ++n;
29914         }
29915
29916         // 0-9
29917         i$2 = 47; n = 0;
29918         while (++i$2 < 58) {
29919             utilKeybinding.keyCodes[n] = i$2;
29920             ++n;
29921         }
29922
29923         // F1-F25
29924         i$2 = 111; n = 1;
29925         while (++i$2 < 136) {
29926             utilKeybinding.keyCodes['f' + n] = i$2;
29927             ++n;
29928         }
29929
29930         // a-z
29931         i$2 = 64;
29932         while (++i$2 < 91) {
29933             utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
29934         }
29935
29936         function utilObjectOmit(obj, omitKeys) {
29937             return Object.keys(obj).reduce(function(result, key) {
29938                 if (omitKeys.indexOf(key) === -1) {
29939                     result[key] = obj[key];  // keep
29940                 }
29941                 return result;
29942             }, {});
29943         }
29944
29945         // Copies a variable number of methods from source to target.
29946         function utilRebind(target, source) {
29947             var i = 1, n = arguments.length, method;
29948             while (++i < n) {
29949                 target[method = arguments[i]] = d3_rebind(target, source, source[method]);
29950             }
29951             return target;
29952         }
29953
29954         // Method is assumed to be a standard D3 getter-setter:
29955         // If passed with no arguments, gets the value.
29956         // If passed with arguments, sets the value and returns the target.
29957         function d3_rebind(target, source, method) {
29958             return function() {
29959                 var value = method.apply(source, arguments);
29960                 return value === source ? target : value;
29961             };
29962         }
29963
29964         // A per-domain session mutex backed by a cookie and dead man's
29965         // switch. If the session crashes, the mutex will auto-release
29966         // after 5 seconds.
29967
29968         // This accepts a string and returns an object that complies with utilSessionMutexType
29969         function utilSessionMutex(name) {
29970             var mutex = {};
29971             var intervalID;
29972
29973             function renew() {
29974                 var expires = new Date();
29975                 expires.setSeconds(expires.getSeconds() + 5);
29976                 document.cookie = name + '=1; expires=' + expires.toUTCString();
29977             }
29978
29979             mutex.lock = function () {
29980                 if (intervalID) return true;
29981                 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
29982                 if (cookie) return false;
29983                 renew();
29984                 intervalID = window.setInterval(renew, 4000);
29985                 return true;
29986             };
29987
29988             mutex.unlock = function () {
29989                 if (!intervalID) return;
29990                 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
29991                 clearInterval(intervalID);
29992                 intervalID = null;
29993             };
29994
29995             mutex.locked = function () {
29996                 return !!intervalID;
29997             };
29998
29999             return mutex;
30000         }
30001
30002         function utilTiler() {
30003             var _size = [256, 256];
30004             var _scale = 256;
30005             var _tileSize = 256;
30006             var _zoomExtent = [0, 20];
30007             var _translate = [_size[0] / 2, _size[1] / 2];
30008             var _margin = 0;
30009             var _skipNullIsland = false;
30010
30011
30012             function clamp(num, min, max) {
30013                 return Math.max(min, Math.min(num, max));
30014             }
30015
30016
30017             function nearNullIsland(tile) {
30018                 var x = tile[0];
30019                 var y = tile[1];
30020                 var z = tile[2];
30021                 if (z >= 7) {
30022                     var center = Math.pow(2, z - 1);
30023                     var width = Math.pow(2, z - 6);
30024                     var min = center - (width / 2);
30025                     var max = center + (width / 2) - 1;
30026                     return x >= min && x <= max && y >= min && y <= max;
30027                 }
30028                 return false;
30029             }
30030
30031
30032             function tiler() {
30033                 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
30034                 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
30035                 var tileMin = 0;
30036                 var tileMax = Math.pow(2, z0) - 1;
30037                 var log2ts = Math.log(_tileSize) * Math.LOG2E;
30038                 var k = Math.pow(2, z - z0 + log2ts);
30039                 var origin = [
30040                     (_translate[0] - _scale / 2) / k,
30041                     (_translate[1] - _scale / 2) / k
30042                 ];
30043
30044                 var cols = d3_range(
30045                     clamp(Math.floor(-origin[0]) - _margin,               tileMin, tileMax + 1),
30046                     clamp(Math.ceil(_size[0] / k - origin[0]) + _margin,  tileMin, tileMax + 1)
30047                 );
30048                 var rows = d3_range(
30049                     clamp(Math.floor(-origin[1]) - _margin,               tileMin, tileMax + 1),
30050                     clamp(Math.ceil(_size[1] / k - origin[1]) + _margin,  tileMin, tileMax + 1)
30051                 );
30052
30053                 var tiles = [];
30054                 for (var i = 0; i < rows.length; i++) {
30055                     var y = rows[i];
30056                     for (var j = 0; j < cols.length; j++) {
30057                         var x = cols[j];
30058
30059                         if (i >= _margin && i <= rows.length - _margin &&
30060                             j >= _margin && j <= cols.length - _margin) {
30061                             tiles.unshift([x, y, z0]);  // tiles in view at beginning
30062                         } else {
30063                             tiles.push([x, y, z0]);     // tiles in margin at the end
30064                         }
30065                     }
30066                 }
30067
30068                 tiles.translate = origin;
30069                 tiles.scale = k;
30070
30071                 return tiles;
30072             }
30073
30074
30075             /**
30076              * getTiles() returns an array of tiles that cover the map view
30077              */
30078             tiler.getTiles = function(projection) {
30079                 var origin = [
30080                     projection.scale() * Math.PI - projection.translate()[0],
30081                     projection.scale() * Math.PI - projection.translate()[1]
30082                 ];
30083
30084                 this
30085                     .size(projection.clipExtent()[1])
30086                     .scale(projection.scale() * 2 * Math.PI)
30087                     .translate(projection.translate());
30088
30089                 var tiles = tiler();
30090                 var ts = tiles.scale;
30091
30092                 return tiles
30093                     .map(function(tile) {
30094                         if (_skipNullIsland && nearNullIsland(tile)) {
30095                             return false;
30096                         }
30097                         var x = tile[0] * ts - origin[0];
30098                         var y = tile[1] * ts - origin[1];
30099                         return {
30100                             id: tile.toString(),
30101                             xyz: tile,
30102                             extent: geoExtent(
30103                                 projection.invert([x, y + ts]),
30104                                 projection.invert([x + ts, y])
30105                             )
30106                         };
30107                     }).filter(Boolean);
30108             };
30109
30110
30111             /**
30112              * getGeoJSON() returns a FeatureCollection for debugging tiles
30113              */
30114             tiler.getGeoJSON = function(projection) {
30115                 var features = tiler.getTiles(projection).map(function(tile) {
30116                     return {
30117                         type: 'Feature',
30118                         properties: {
30119                             id: tile.id,
30120                             name: tile.id
30121                         },
30122                         geometry: {
30123                             type: 'Polygon',
30124                             coordinates: [ tile.extent.polygon() ]
30125                         }
30126                     };
30127                 });
30128
30129                 return {
30130                     type: 'FeatureCollection',
30131                     features: features
30132                 };
30133             };
30134
30135
30136             tiler.tileSize = function(val) {
30137                 if (!arguments.length) return _tileSize;
30138                 _tileSize = val;
30139                 return tiler;
30140             };
30141
30142
30143             tiler.zoomExtent = function(val) {
30144                 if (!arguments.length) return _zoomExtent;
30145                 _zoomExtent = val;
30146                 return tiler;
30147             };
30148
30149
30150             tiler.size = function(val) {
30151                 if (!arguments.length) return _size;
30152                 _size = val;
30153                 return tiler;
30154             };
30155
30156
30157             tiler.scale = function(val) {
30158                 if (!arguments.length) return _scale;
30159                 _scale = val;
30160                 return tiler;
30161             };
30162
30163
30164             tiler.translate = function(val) {
30165                 if (!arguments.length) return _translate;
30166                 _translate = val;
30167                 return tiler;
30168             };
30169
30170
30171             // number to extend the rows/columns beyond those covering the viewport
30172             tiler.margin = function(val) {
30173                 if (!arguments.length) return _margin;
30174                 _margin = +val;
30175                 return tiler;
30176             };
30177
30178
30179             tiler.skipNullIsland = function(val) {
30180                 if (!arguments.length) return _skipNullIsland;
30181                 _skipNullIsland = val;
30182                 return tiler;
30183             };
30184
30185
30186             return tiler;
30187         }
30188
30189         function utilTriggerEvent(target, type) {
30190             target.each(function() {
30191                 var evt = document.createEvent('HTMLEvents');
30192                 evt.initEvent(type, true, true);
30193                 this.dispatchEvent(evt);
30194             });
30195         }
30196
30197         function osmEntity(attrs) {
30198             // For prototypal inheritance.
30199             if (this instanceof osmEntity) return;
30200
30201             // Create the appropriate subtype.
30202             if (attrs && attrs.type) {
30203                 return osmEntity[attrs.type].apply(this, arguments);
30204             } else if (attrs && attrs.id) {
30205                 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
30206             }
30207
30208             // Initialize a generic Entity (used only in tests).
30209             return (new osmEntity()).initialize(arguments);
30210         }
30211
30212
30213         osmEntity.id = function(type) {
30214             return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
30215         };
30216
30217
30218         osmEntity.id.next = {
30219             changeset: -1, node: -1, way: -1, relation: -1
30220         };
30221
30222
30223         osmEntity.id.fromOSM = function(type, id) {
30224             return type[0] + id;
30225         };
30226
30227
30228         osmEntity.id.toOSM = function(id) {
30229             return id.slice(1);
30230         };
30231
30232
30233         osmEntity.id.type = function(id) {
30234             return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
30235         };
30236
30237
30238         // A function suitable for use as the second argument to d3.selection#data().
30239         osmEntity.key = function(entity) {
30240             return entity.id + 'v' + (entity.v || 0);
30241         };
30242
30243         var _deprecatedTagValuesByKey;
30244
30245         osmEntity.deprecatedTagValuesByKey = function() {
30246             if (!_deprecatedTagValuesByKey) {
30247                 _deprecatedTagValuesByKey = {};
30248                 dataDeprecated.forEach(function(d) {
30249                     var oldKeys = Object.keys(d.old);
30250                     if (oldKeys.length === 1) {
30251                         var oldKey = oldKeys[0];
30252                         var oldValue = d.old[oldKey];
30253                         if (oldValue !== '*') {
30254                             if (!_deprecatedTagValuesByKey[oldKey]) {
30255                                 _deprecatedTagValuesByKey[oldKey] = [oldValue];
30256                             } else {
30257                                 _deprecatedTagValuesByKey[oldKey].push(oldValue);
30258                             }
30259                         }
30260                     }
30261                 });
30262             }
30263             return _deprecatedTagValuesByKey;
30264         };
30265
30266
30267         osmEntity.prototype = {
30268
30269             tags: {},
30270
30271
30272             initialize: function(sources) {
30273                 for (var i = 0; i < sources.length; ++i) {
30274                     var source = sources[i];
30275                     for (var prop in source) {
30276                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
30277                             if (source[prop] === undefined) {
30278                                 delete this[prop];
30279                             } else {
30280                                 this[prop] = source[prop];
30281                             }
30282                         }
30283                     }
30284                 }
30285
30286                 if (!this.id && this.type) {
30287                     this.id = osmEntity.id(this.type);
30288                 }
30289                 if (!this.hasOwnProperty('visible')) {
30290                     this.visible = true;
30291                 }
30292
30293                 return this;
30294             },
30295
30296
30297             copy: function(resolver, copies) {
30298                 if (copies[this.id])
30299                     return copies[this.id];
30300
30301                 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
30302                 copies[this.id] = copy;
30303
30304                 return copy;
30305             },
30306
30307
30308             osmId: function() {
30309                 return osmEntity.id.toOSM(this.id);
30310             },
30311
30312
30313             isNew: function() {
30314                 return this.osmId() < 0;
30315             },
30316
30317
30318             update: function(attrs) {
30319                 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
30320             },
30321
30322
30323             mergeTags: function(tags) {
30324                 var merged = Object.assign({}, this.tags);   // shallow copy
30325                 var changed = false;
30326                 for (var k in tags) {
30327                     var t1 = merged[k];
30328                     var t2 = tags[k];
30329                     if (!t1) {
30330                         changed = true;
30331                         merged[k] = t2;
30332                     } else if (t1 !== t2) {
30333                         changed = true;
30334                         merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
30335                     }
30336                 }
30337                 return changed ? this.update({ tags: merged }) : this;
30338             },
30339
30340
30341             intersects: function(extent, resolver) {
30342                 return this.extent(resolver).intersects(extent);
30343             },
30344
30345
30346             hasNonGeometryTags: function() {
30347                 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
30348             },
30349
30350             hasParentRelations: function(resolver) {
30351                 return resolver.parentRelations(this).length > 0;
30352             },
30353
30354             hasInterestingTags: function() {
30355                 return Object.keys(this.tags).some(osmIsInterestingTag);
30356             },
30357
30358             hasWikidata: function() {
30359                 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
30360             },
30361
30362             isHighwayIntersection: function() {
30363                 return false;
30364             },
30365
30366             isDegenerate: function() {
30367                 return true;
30368             },
30369
30370             deprecatedTags: function() {
30371                 var tags = this.tags;
30372
30373                 // if there are no tags, none can be deprecated
30374                 if (Object.keys(tags).length === 0) return [];
30375
30376                 var deprecated = [];
30377                 dataDeprecated.forEach(function(d) {
30378                     var matchesDeprecatedTags = Object.keys(d.old).every(function(key) {
30379                         if (!tags[key]) return false;
30380                         if (d.old[key] === '*') return true;
30381
30382                         var vals = tags[key].split(';').filter(Boolean);
30383                         if (vals.length === 0) {
30384                             return false;
30385                         } else if (vals.length > 1) {
30386                             return vals.indexOf(d.old[key]) !== -1;
30387                         } else {
30388                             if (tags[key] === d.old[key]) {
30389                                 if (d.old[key] === d.replace[key]) {
30390                                     return !Object.keys(d.replace).every(function(key) {
30391                                         return tags[key] === d.replace[key];
30392                                     });
30393                                 } else {
30394                                     return true;
30395                                 }
30396                             }
30397                         }
30398                         return false;
30399                     });
30400                     if (matchesDeprecatedTags) {
30401                         deprecated.push(d);
30402                     }
30403                 });
30404
30405                 return deprecated;
30406             }
30407         };
30408
30409         function osmLanes(entity) {
30410             if (entity.type !== 'way') return null;
30411             if (!entity.tags.highway) return null;
30412
30413             var tags = entity.tags;
30414             var isOneWay = entity.isOneWay();
30415             var laneCount = getLaneCount(tags, isOneWay);
30416             var maxspeed = parseMaxspeed(tags);
30417
30418             var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
30419             var forward = laneDirections.forward;
30420             var backward = laneDirections.backward;
30421             var bothways = laneDirections.bothways;
30422
30423             // parse the piped string 'x|y|z' format
30424             var turnLanes = {};
30425             turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
30426             turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
30427             turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
30428
30429             var maxspeedLanes = {};
30430             maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
30431             maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
30432             maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
30433
30434             var psvLanes = {};
30435             psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
30436             psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
30437             psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
30438
30439             var busLanes = {};
30440             busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
30441             busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
30442             busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
30443
30444             var taxiLanes = {};
30445             taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
30446             taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
30447             taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
30448
30449             var hovLanes = {};
30450             hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
30451             hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
30452             hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
30453
30454             var hgvLanes = {};
30455             hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
30456             hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
30457             hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
30458
30459             var bicyclewayLanes = {};
30460             bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
30461             bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
30462             bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
30463
30464             var lanesObj = {
30465                 forward: [],
30466                 backward: [],
30467                 unspecified: []
30468             };
30469
30470             // map forward/backward/unspecified of each lane type to lanesObj
30471             mapToLanesObj(lanesObj, turnLanes, 'turnLane');
30472             mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
30473             mapToLanesObj(lanesObj, psvLanes, 'psv');
30474             mapToLanesObj(lanesObj, busLanes, 'bus');
30475             mapToLanesObj(lanesObj, taxiLanes, 'taxi');
30476             mapToLanesObj(lanesObj, hovLanes, 'hov');
30477             mapToLanesObj(lanesObj, hgvLanes, 'hgv');
30478             mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
30479
30480             return {
30481                 metadata: {
30482                     count: laneCount,
30483                     oneway: isOneWay,
30484                     forward: forward,
30485                     backward: backward,
30486                     bothways: bothways,
30487                     turnLanes: turnLanes,
30488                     maxspeed: maxspeed,
30489                     maxspeedLanes: maxspeedLanes,
30490                     psvLanes: psvLanes,
30491                     busLanes: busLanes,
30492                     taxiLanes: taxiLanes,
30493                     hovLanes: hovLanes,
30494                     hgvLanes: hgvLanes,
30495                     bicyclewayLanes: bicyclewayLanes
30496                 },
30497                 lanes: lanesObj
30498             };
30499         }
30500
30501
30502         function getLaneCount(tags, isOneWay) {
30503             var count;
30504             if (tags.lanes) {
30505                 count = parseInt(tags.lanes, 10);
30506                 if (count > 0) {
30507                     return count;
30508                 }
30509             }
30510
30511
30512             switch (tags.highway) {
30513                 case 'trunk':
30514                 case 'motorway':
30515                     count = isOneWay ? 2 : 4;
30516                     break;
30517                 default:
30518                     count = isOneWay ? 1 : 2;
30519                     break;
30520             }
30521
30522             return count;
30523         }
30524
30525
30526         function parseMaxspeed(tags) {
30527             var maxspeed = tags.maxspeed;
30528             if (!maxspeed) return;
30529
30530             var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
30531             if (!maxspeedRegex.test(maxspeed)) return;
30532
30533             return parseInt(maxspeed, 10);
30534         }
30535
30536
30537         function parseLaneDirections(tags, isOneWay, laneCount) {
30538             var forward = parseInt(tags['lanes:forward'], 10);
30539             var backward = parseInt(tags['lanes:backward'], 10);
30540             var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
30541
30542             if (parseInt(tags.oneway, 10) === -1) {
30543                 forward = 0;
30544                 bothways = 0;
30545                 backward = laneCount;
30546             }
30547             else if (isOneWay) {
30548                 forward = laneCount;
30549                 bothways = 0;
30550                 backward = 0;
30551             }
30552             else if (isNaN(forward) && isNaN(backward)) {
30553                 backward = Math.floor((laneCount - bothways) / 2);
30554                 forward = laneCount - bothways - backward;
30555             }
30556             else if (isNaN(forward)) {
30557                 if (backward > laneCount - bothways) {
30558                     backward = laneCount - bothways;
30559                 }
30560                 forward = laneCount - bothways - backward;
30561             }
30562             else if (isNaN(backward)) {
30563                 if (forward > laneCount - bothways) {
30564                     forward = laneCount - bothways;
30565                 }
30566                 backward = laneCount - bothways - forward;
30567             }
30568             return {
30569                 forward: forward,
30570                 backward: backward,
30571                 bothways: bothways
30572             };
30573         }
30574
30575
30576         function parseTurnLanes(tag){
30577             if (!tag) return;
30578
30579             var validValues = [
30580                 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
30581                 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
30582             ];
30583
30584             return tag.split('|')
30585                 .map(function (s) {
30586                     if (s === '') s = 'none';
30587                     return s.split(';')
30588                         .map(function (d) {
30589                             return validValues.indexOf(d) === -1 ? 'unknown': d;
30590                         });
30591                 });
30592         }
30593
30594
30595         function parseMaxspeedLanes(tag, maxspeed) {
30596             if (!tag) return;
30597
30598             return tag.split('|')
30599                 .map(function (s) {
30600                     if (s === 'none') return s;
30601                     var m = parseInt(s, 10);
30602                     if (s === '' || m === maxspeed) return null;
30603                     return isNaN(m) ? 'unknown': m;
30604                 });
30605         }
30606
30607
30608         function parseMiscLanes(tag) {
30609             if (!tag) return;
30610
30611             var validValues = [
30612                 'yes', 'no', 'designated'
30613             ];
30614
30615             return tag.split('|')
30616                 .map(function (s) {
30617                     if (s === '') s = 'no';
30618                     return validValues.indexOf(s) === -1 ? 'unknown': s;
30619                 });
30620         }
30621
30622
30623         function parseBicycleWay(tag) {
30624             if (!tag) return;
30625
30626             var validValues = [
30627                 'yes', 'no', 'designated', 'lane'
30628             ];
30629
30630             return tag.split('|')
30631                 .map(function (s) {
30632                     if (s === '') s = 'no';
30633                     return validValues.indexOf(s) === -1 ? 'unknown': s;
30634                 });
30635         }
30636
30637
30638         function mapToLanesObj(lanesObj, data, key) {
30639             if (data.forward) data.forward.forEach(function(l, i) {
30640                 if (!lanesObj.forward[i]) lanesObj.forward[i] = {};
30641                 lanesObj.forward[i][key] = l;
30642             });
30643             if (data.backward) data.backward.forEach(function(l, i) {
30644                 if (!lanesObj.backward[i]) lanesObj.backward[i] = {};
30645                 lanesObj.backward[i][key] = l;
30646             });
30647             if (data.unspecified) data.unspecified.forEach(function(l, i) {
30648                 if (!lanesObj.unspecified[i]) lanesObj.unspecified[i] = {};
30649                 lanesObj.unspecified[i][key] = l;
30650             });
30651         }
30652
30653         function osmWay() {
30654             if (!(this instanceof osmWay)) {
30655                 return (new osmWay()).initialize(arguments);
30656             } else if (arguments.length) {
30657                 this.initialize(arguments);
30658             }
30659         }
30660
30661
30662         osmEntity.way = osmWay;
30663
30664         osmWay.prototype = Object.create(osmEntity.prototype);
30665
30666
30667         Object.assign(osmWay.prototype, {
30668             type: 'way',
30669             nodes: [],
30670
30671
30672             copy: function(resolver, copies) {
30673                 if (copies[this.id]) return copies[this.id];
30674
30675                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
30676
30677                 var nodes = this.nodes.map(function(id) {
30678                     return resolver.entity(id).copy(resolver, copies).id;
30679                 });
30680
30681                 copy = copy.update({ nodes: nodes });
30682                 copies[this.id] = copy;
30683
30684                 return copy;
30685             },
30686
30687
30688             extent: function(resolver) {
30689                 return resolver.transient(this, 'extent', function() {
30690                     var extent = geoExtent();
30691                     for (var i = 0; i < this.nodes.length; i++) {
30692                         var node = resolver.hasEntity(this.nodes[i]);
30693                         if (node) {
30694                             extent._extend(node.extent());
30695                         }
30696                     }
30697                     return extent;
30698                 });
30699             },
30700
30701
30702             first: function() {
30703                 return this.nodes[0];
30704             },
30705
30706
30707             last: function() {
30708                 return this.nodes[this.nodes.length - 1];
30709             },
30710
30711
30712             contains: function(node) {
30713                 return this.nodes.indexOf(node) >= 0;
30714             },
30715
30716
30717             affix: function(node) {
30718                 if (this.nodes[0] === node) return 'prefix';
30719                 if (this.nodes[this.nodes.length - 1] === node) return 'suffix';
30720             },
30721
30722
30723             layer: function() {
30724                 // explicit layer tag, clamp between -10, 10..
30725                 if (isFinite(this.tags.layer)) {
30726                     return Math.max(-10, Math.min(+(this.tags.layer), 10));
30727                 }
30728
30729                 // implied layer tag..
30730                 if (this.tags.covered === 'yes') return -1;
30731                 if (this.tags.location === 'overground') return 1;
30732                 if (this.tags.location === 'underground') return -1;
30733                 if (this.tags.location === 'underwater') return -10;
30734
30735                 if (this.tags.power === 'line') return 10;
30736                 if (this.tags.power === 'minor_line') return 10;
30737                 if (this.tags.aerialway) return 10;
30738                 if (this.tags.bridge) return 1;
30739                 if (this.tags.cutting) return -1;
30740                 if (this.tags.tunnel) return -1;
30741                 if (this.tags.waterway) return -1;
30742                 if (this.tags.man_made === 'pipeline') return -10;
30743                 if (this.tags.boundary) return -10;
30744                 return 0;
30745             },
30746
30747
30748             isOneWay: function() {
30749                 // explicit oneway tag..
30750                 var values = {
30751                     'yes': true,
30752                     '1': true,
30753                     '-1': true,
30754                     'reversible': true,
30755                     'alternating': true,
30756                     'no': false,
30757                     '0': false
30758                 };
30759                 if (values[this.tags.oneway] !== undefined) {
30760                     return values[this.tags.oneway];
30761                 }
30762
30763                 // implied oneway tag..
30764                 for (var key in this.tags) {
30765                     if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
30766                         return true;
30767                 }
30768                 return false;
30769             },
30770
30771             // Some identifier for tag that implies that this way is "sided",
30772             // i.e. the right side is the 'inside' (e.g. the right side of a
30773             // natural=cliff is lower).
30774             sidednessIdentifier: function() {
30775                 for (var key in this.tags) {
30776                     var value = this.tags[key];
30777                     if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
30778                         if (osmRightSideIsInsideTags[key][value] === true) {
30779                             return key;
30780                         } else {
30781                             // if the map's value is something other than a
30782                             // literal true, we should use it so we can
30783                             // special case some keys (e.g. natural=coastline
30784                             // is handled differently to other naturals).
30785                             return osmRightSideIsInsideTags[key][value];
30786                         }
30787                     }
30788                 }
30789
30790                 return null;
30791             },
30792
30793             isSided: function() {
30794                 if (this.tags.two_sided === 'yes') {
30795                     return false;
30796                 }
30797
30798                 return this.sidednessIdentifier() !== null;
30799             },
30800
30801             lanes: function() {
30802                 return osmLanes(this);
30803             },
30804
30805
30806             isClosed: function() {
30807                 return this.nodes.length > 1 && this.first() === this.last();
30808             },
30809
30810
30811             isConvex: function(resolver) {
30812                 if (!this.isClosed() || this.isDegenerate()) return null;
30813
30814                 var nodes = utilArrayUniq(resolver.childNodes(this));
30815                 var coords = nodes.map(function(n) { return n.loc; });
30816                 var curr = 0;
30817                 var prev = 0;
30818
30819                 for (var i = 0; i < coords.length; i++) {
30820                     var o = coords[(i+1) % coords.length];
30821                     var a = coords[i];
30822                     var b = coords[(i+2) % coords.length];
30823                     var res = geoVecCross(a, b, o);
30824
30825                     curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
30826                     if (curr === 0) {
30827                         continue;
30828                     } else if (prev && curr !== prev) {
30829                         return false;
30830                     }
30831                     prev = curr;
30832                 }
30833                 return true;
30834             },
30835
30836             // returns an object with the tag that implies this is an area, if any
30837             tagSuggestingArea: function() {
30838                 if (this.tags.area === 'yes') return { area: 'yes' };
30839                 if (this.tags.area === 'no') return null;
30840
30841                 // `highway` and `railway` are typically linear features, but there
30842                 // are a few exceptions that should be treated as areas, even in the
30843                 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
30844                 var lineKeys = {
30845                     highway: {
30846                         rest_area: true,
30847                         services: true
30848                     },
30849                     railway: {
30850                         roundhouse: true,
30851                         station: true,
30852                         traverser: true,
30853                         turntable: true,
30854                         wash: true
30855                     }
30856                 };
30857                 var returnTags = {};
30858                 for (var key in this.tags) {
30859                     if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
30860                         returnTags[key] = this.tags[key];
30861                         return returnTags;
30862                     }
30863                     if (key in lineKeys && this.tags[key] in lineKeys[key]) {
30864                         returnTags[key] = this.tags[key];
30865                         return returnTags;
30866                     }
30867                 }
30868                 return null;
30869             },
30870
30871             isArea: function() {
30872                 if (this.tags.area === 'yes')
30873                     return true;
30874                 if (!this.isClosed() || this.tags.area === 'no')
30875                     return false;
30876                 return this.tagSuggestingArea() !== null;
30877             },
30878
30879
30880             isDegenerate: function() {
30881                 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
30882             },
30883
30884
30885             areAdjacent: function(n1, n2) {
30886                 for (var i = 0; i < this.nodes.length; i++) {
30887                     if (this.nodes[i] === n1) {
30888                         if (this.nodes[i - 1] === n2) return true;
30889                         if (this.nodes[i + 1] === n2) return true;
30890                     }
30891                 }
30892                 return false;
30893             },
30894
30895
30896             geometry: function(graph) {
30897                 return graph.transient(this, 'geometry', function() {
30898                     return this.isArea() ? 'area' : 'line';
30899                 });
30900             },
30901
30902
30903             // If this way is not closed, append the beginning node to the end of the nodelist to close it.
30904             close: function() {
30905                 if (this.isClosed() || !this.nodes.length) return this;
30906
30907                 var nodes = this.nodes.slice();
30908                 nodes = nodes.filter(noRepeatNodes);
30909                 nodes.push(nodes[0]);
30910                 return this.update({ nodes: nodes });
30911             },
30912
30913
30914             // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
30915             unclose: function() {
30916                 if (!this.isClosed()) return this;
30917
30918                 var nodes = this.nodes.slice();
30919                 var connector = this.first();
30920                 var i = nodes.length - 1;
30921
30922                 // remove trailing connectors..
30923                 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30924                     nodes.splice(i, 1);
30925                     i = nodes.length - 1;
30926                 }
30927
30928                 nodes = nodes.filter(noRepeatNodes);
30929                 return this.update({ nodes: nodes });
30930             },
30931
30932
30933             // Adds a node (id) in front of the node which is currently at position index.
30934             // If index is undefined, the node will be added to the end of the way for linear ways,
30935             //   or just before the final connecting node for circular ways.
30936             // Consecutive duplicates are eliminated including existing ones.
30937             // Circularity is always preserved when adding a node.
30938             addNode: function(id, index) {
30939                 var nodes = this.nodes.slice();
30940                 var isClosed = this.isClosed();
30941                 var max = isClosed ? nodes.length - 1 : nodes.length;
30942
30943                 if (index === undefined) {
30944                     index = max;
30945                 }
30946
30947                 if (index < 0 || index > max) {
30948                     throw new RangeError('index ' + index + ' out of range 0..' + max);
30949                 }
30950
30951                 // If this is a closed way, remove all connector nodes except the first one
30952                 // (there may be duplicates) and adjust index if necessary..
30953                 if (isClosed) {
30954                     var connector = this.first();
30955
30956                     // leading connectors..
30957                     var i = 1;
30958                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
30959                         nodes.splice(i, 1);
30960                         if (index > i) index--;
30961                     }
30962
30963                     // trailing connectors..
30964                     i = nodes.length - 1;
30965                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
30966                         nodes.splice(i, 1);
30967                         if (index > i) index--;
30968                         i = nodes.length - 1;
30969                     }
30970                 }
30971
30972                 nodes.splice(index, 0, id);
30973                 nodes = nodes.filter(noRepeatNodes);
30974
30975                 // If the way was closed before, append a connector node to keep it closed..
30976                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
30977                     nodes.push(nodes[0]);
30978                 }
30979
30980                 return this.update({ nodes: nodes });
30981             },
30982
30983
30984             // Replaces the node which is currently at position index with the given node (id).
30985             // Consecutive duplicates are eliminated including existing ones.
30986             // Circularity is preserved when updating a node.
30987             updateNode: function(id, index) {
30988                 var nodes = this.nodes.slice();
30989                 var isClosed = this.isClosed();
30990                 var max = nodes.length - 1;
30991
30992                 if (index === undefined || index < 0 || index > max) {
30993                     throw new RangeError('index ' + index + ' out of range 0..' + max);
30994                 }
30995
30996                 // If this is a closed way, remove all connector nodes except the first one
30997                 // (there may be duplicates) and adjust index if necessary..
30998                 if (isClosed) {
30999                     var connector = this.first();
31000
31001                     // leading connectors..
31002                     var i = 1;
31003                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
31004                         nodes.splice(i, 1);
31005                         if (index > i) index--;
31006                     }
31007
31008                     // trailing connectors..
31009                     i = nodes.length - 1;
31010                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
31011                         nodes.splice(i, 1);
31012                         if (index === i) index = 0;  // update leading connector instead
31013                         i = nodes.length - 1;
31014                     }
31015                 }
31016
31017                 nodes.splice(index, 1, id);
31018                 nodes = nodes.filter(noRepeatNodes);
31019
31020                 // If the way was closed before, append a connector node to keep it closed..
31021                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
31022                     nodes.push(nodes[0]);
31023                 }
31024
31025                 return this.update({nodes: nodes});
31026             },
31027
31028
31029             // Replaces each occurrence of node id needle with replacement.
31030             // Consecutive duplicates are eliminated including existing ones.
31031             // Circularity is preserved.
31032             replaceNode: function(needleID, replacementID) {
31033                 var nodes = this.nodes.slice();
31034                 var isClosed = this.isClosed();
31035
31036                 for (var i = 0; i < nodes.length; i++) {
31037                     if (nodes[i] === needleID) {
31038                         nodes[i] = replacementID;
31039                     }
31040                 }
31041
31042                 nodes = nodes.filter(noRepeatNodes);
31043
31044                 // If the way was closed before, append a connector node to keep it closed..
31045                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
31046                     nodes.push(nodes[0]);
31047                 }
31048
31049                 return this.update({nodes: nodes});
31050             },
31051
31052
31053             // Removes each occurrence of node id.
31054             // Consecutive duplicates are eliminated including existing ones.
31055             // Circularity is preserved.
31056             removeNode: function(id) {
31057                 var nodes = this.nodes.slice();
31058                 var isClosed = this.isClosed();
31059
31060                 nodes = nodes
31061                     .filter(function(node) { return node !== id; })
31062                     .filter(noRepeatNodes);
31063
31064                 // If the way was closed before, append a connector node to keep it closed..
31065                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
31066                     nodes.push(nodes[0]);
31067                 }
31068
31069                 return this.update({nodes: nodes});
31070             },
31071
31072
31073             asJXON: function(changeset_id) {
31074                 var r = {
31075                     way: {
31076                         '@id': this.osmId(),
31077                         '@version': this.version || 0,
31078                         nd: this.nodes.map(function(id) {
31079                             return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
31080                         }, this),
31081                         tag: Object.keys(this.tags).map(function(k) {
31082                             return { keyAttributes: { k: k, v: this.tags[k] } };
31083                         }, this)
31084                     }
31085                 };
31086                 if (changeset_id) {
31087                     r.way['@changeset'] = changeset_id;
31088                 }
31089                 return r;
31090             },
31091
31092
31093             asGeoJSON: function(resolver) {
31094                 return resolver.transient(this, 'GeoJSON', function() {
31095                     var coordinates = resolver.childNodes(this)
31096                         .map(function(n) { return n.loc; });
31097
31098                     if (this.isArea() && this.isClosed()) {
31099                         return {
31100                             type: 'Polygon',
31101                             coordinates: [coordinates]
31102                         };
31103                     } else {
31104                         return {
31105                             type: 'LineString',
31106                             coordinates: coordinates
31107                         };
31108                     }
31109                 });
31110             },
31111
31112
31113             area: function(resolver) {
31114                 return resolver.transient(this, 'area', function() {
31115                     var nodes = resolver.childNodes(this);
31116
31117                     var json = {
31118                         type: 'Polygon',
31119                         coordinates: [ nodes.map(function(n) { return n.loc; }) ]
31120                     };
31121
31122                     if (!this.isClosed() && nodes.length) {
31123                         json.coordinates[0].push(nodes[0].loc);
31124                     }
31125
31126                     var area = d3_geoArea(json);
31127
31128                     // Heuristic for detecting counterclockwise winding order. Assumes
31129                     // that OpenStreetMap polygons are not hemisphere-spanning.
31130                     if (area > 2 * Math.PI) {
31131                         json.coordinates[0] = json.coordinates[0].reverse();
31132                         area = d3_geoArea(json);
31133                     }
31134
31135                     return isNaN(area) ? 0 : area;
31136                 });
31137             }
31138         });
31139
31140
31141         // Filter function to eliminate consecutive duplicates.
31142         function noRepeatNodes(node, i, arr) {
31143             return i === 0 || node !== arr[i - 1];
31144         }
31145
31146         // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
31147         //
31148         // 1. Relation tagged with `type=multipolygon` and no interesting tags.
31149         // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
31150         // 3. No members without a role.
31151         //
31152         // Old multipolygons are no longer recommended but are still rendered as areas by iD.
31153
31154         function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
31155             if (entity.type !== 'relation' ||
31156                 !entity.isMultipolygon()
31157                 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
31158                 return false;
31159             }
31160
31161             var outerMember;
31162             for (var memberIndex in entity.members) {
31163                 var member = entity.members[memberIndex];
31164                 if (!member.role || member.role === 'outer') {
31165                     if (outerMember) return false;
31166                     if (member.type !== 'way') return false;
31167                     if (!graph.hasEntity(member.id)) return false;
31168
31169                     outerMember = graph.entity(member.id);
31170
31171                     if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
31172                         return false;
31173                     }
31174                 }
31175             }
31176
31177             return outerMember;
31178         }
31179
31180         // For fixing up rendering of multipolygons with tags on the outer member.
31181         // https://github.com/openstreetmap/iD/issues/613
31182         function osmIsOldMultipolygonOuterMember(entity, graph) {
31183             if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
31184                 return false;
31185
31186             var parents = graph.parentRelations(entity);
31187             if (parents.length !== 1)
31188                 return false;
31189
31190             var parent = parents[0];
31191             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31192                 return false;
31193
31194             var members = parent.members, member;
31195             for (var i = 0; i < members.length; i++) {
31196                 member = members[i];
31197                 if (member.id === entity.id && member.role && member.role !== 'outer')
31198                     return false; // Not outer member
31199                 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
31200                     return false; // Not a simple multipolygon
31201             }
31202
31203             return parent;
31204         }
31205
31206
31207         function osmOldMultipolygonOuterMember(entity, graph) {
31208             if (entity.type !== 'way')
31209                 return false;
31210
31211             var parents = graph.parentRelations(entity);
31212             if (parents.length !== 1)
31213                 return false;
31214
31215             var parent = parents[0];
31216             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
31217                 return false;
31218
31219             var members = parent.members, member, outerMember;
31220             for (var i = 0; i < members.length; i++) {
31221                 member = members[i];
31222                 if (!member.role || member.role === 'outer') {
31223                     if (outerMember)
31224                         return false; // Not a simple multipolygon
31225                     outerMember = member;
31226                 }
31227             }
31228
31229             if (!outerMember)
31230                 return false;
31231
31232             var outerEntity = graph.hasEntity(outerMember.id);
31233             if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
31234                 return false;
31235
31236             return outerEntity;
31237         }
31238
31239
31240         // Join `toJoin` array into sequences of connecting ways.
31241
31242         // Segments which share identical start/end nodes will, as much as possible,
31243         // be connected with each other.
31244         //
31245         // The return value is a nested array. Each constituent array contains elements
31246         // of `toJoin` which have been determined to connect.
31247         //
31248         // Each consitituent array also has a `nodes` property whose value is an
31249         // ordered array of member nodes, with appropriate order reversal and
31250         // start/end coordinate de-duplication.
31251         //
31252         // Members of `toJoin` must have, at minimum, `type` and `id` properties.
31253         // Thus either an array of `osmWay`s or a relation member array may be used.
31254         //
31255         // If an member is an `osmWay`, its tags and childnodes may be reversed via
31256         // `actionReverse` in the output.
31257         //
31258         // The returned sequences array also has an `actions` array property, containing
31259         // any reversal actions that should be applied to the graph, should the calling
31260         // code attempt to actually join the given ways.
31261         //
31262         // Incomplete members (those for which `graph.hasEntity(element.id)` returns
31263         // false) and non-way members are ignored.
31264         //
31265         function osmJoinWays(toJoin, graph) {
31266             function resolve(member) {
31267                 return graph.childNodes(graph.entity(member.id));
31268             }
31269
31270             function reverse(item) {
31271                 var action = actionReverse(item.id, { reverseOneway: true });
31272                 sequences.actions.push(action);
31273                 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
31274             }
31275
31276             // make a copy containing only the items to join
31277             toJoin = toJoin.filter(function(member) {
31278                 return member.type === 'way' && graph.hasEntity(member.id);
31279             });
31280
31281             // Are the things we are joining relation members or `osmWays`?
31282             // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
31283             var i;
31284             var joinAsMembers = true;
31285             for (i = 0; i < toJoin.length; i++) {
31286                 if (toJoin[i] instanceof osmWay) {
31287                     joinAsMembers = false;
31288                     break;
31289                 }
31290             }
31291
31292             var sequences = [];
31293             sequences.actions = [];
31294
31295             while (toJoin.length) {
31296                 // start a new sequence
31297                 var item = toJoin.shift();
31298                 var currWays = [item];
31299                 var currNodes = resolve(item).slice();
31300                 var doneSequence = false;
31301
31302                 // add to it
31303                 while (toJoin.length && !doneSequence) {
31304                     var start = currNodes[0];
31305                     var end = currNodes[currNodes.length - 1];
31306                     var fn = null;
31307                     var nodes = null;
31308
31309                     // Find the next way/member to join.
31310                     for (i = 0; i < toJoin.length; i++) {
31311                         item = toJoin[i];
31312                         nodes = resolve(item);
31313
31314                         // (for member ordering only, not way ordering - see #4872)
31315                         // Strongly prefer to generate a forward path that preserves the order
31316                         // of the members array. For multipolygons and most relations, member
31317                         // order does not matter - but for routes, it does. (see #4589)
31318                         // If we started this sequence backwards (i.e. next member way attaches to
31319                         // the start node and not the end node), reverse the initial way before continuing.
31320                         if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
31321                             (nodes[nodes.length - 1] === start || nodes[0] === start)
31322                         ) {
31323                             currWays[0] = reverse(currWays[0]);
31324                             currNodes.reverse();
31325                             start = currNodes[0];
31326                             end = currNodes[currNodes.length - 1];
31327                         }
31328
31329                         if (nodes[0] === end) {
31330                             fn = currNodes.push;               // join to end
31331                             nodes = nodes.slice(1);
31332                             break;
31333                         } else if (nodes[nodes.length - 1] === end) {
31334                             fn = currNodes.push;               // join to end
31335                             nodes = nodes.slice(0, -1).reverse();
31336                             item = reverse(item);
31337                             break;
31338                         } else if (nodes[nodes.length - 1] === start) {
31339                             fn = currNodes.unshift;            // join to beginning
31340                             nodes = nodes.slice(0, -1);
31341                             break;
31342                         } else if (nodes[0] === start) {
31343                             fn = currNodes.unshift;            // join to beginning
31344                             nodes = nodes.slice(1).reverse();
31345                             item = reverse(item);
31346                             break;
31347                         } else {
31348                             fn = nodes = null;
31349                         }
31350                     }
31351
31352                     if (!nodes) {     // couldn't find a joinable way/member
31353                         doneSequence = true;
31354                         break;
31355                     }
31356
31357                     fn.apply(currWays, [item]);
31358                     fn.apply(currNodes, nodes);
31359
31360                     toJoin.splice(i, 1);
31361                 }
31362
31363                 currWays.nodes = currNodes;
31364                 sequences.push(currWays);
31365             }
31366
31367             return sequences;
31368         }
31369
31370         function actionAddMember(relationId, member, memberIndex, insertPair) {
31371
31372             return function action(graph) {
31373                 var relation = graph.entity(relationId);
31374
31375                 // There are some special rules for Public Transport v2 routes.
31376                 var isPTv2 = /stop|platform/.test(member.role);
31377
31378                 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
31379                     // Try to perform sensible inserts based on how the ways join together
31380                     graph = addWayMember(relation, graph);
31381                 } else {
31382                     // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31383                     // Stops and Platforms for PTv2 should be ordered first.
31384                     // hack: We do not currently have the ability to place them in the exactly correct order.
31385                     if (isPTv2 && isNaN(memberIndex)) {
31386                         memberIndex = 0;
31387                     }
31388
31389                     graph = graph.replace(relation.addMember(member, memberIndex));
31390                 }
31391
31392                 return graph;
31393             };
31394
31395
31396             // Add a way member into the relation "wherever it makes sense".
31397             // In this situation we were not supplied a memberIndex.
31398             function addWayMember(relation, graph) {
31399                 var groups, tempWay, item, i, j, k;
31400
31401                 // remove PTv2 stops and platforms before doing anything.
31402                 var PTv2members = [];
31403                 var members = [];
31404                 for (i = 0; i < relation.members.length; i++) {
31405                     var m = relation.members[i];
31406                     if (/stop|platform/.test(m.role)) {
31407                         PTv2members.push(m);
31408                     } else {
31409                         members.push(m);
31410                     }
31411                 }
31412                 relation = relation.update({ members: members });
31413
31414
31415                 if (insertPair) {
31416                     // We're adding a member that must stay paired with an existing member.
31417                     // (This feature is used by `actionSplit`)
31418                     //
31419                     // This is tricky because the members may exist multiple times in the
31420                     // member list, and with different A-B/B-A ordering and different roles.
31421                     // (e.g. a bus route that loops out and back - #4589).
31422                     //
31423                     // Replace the existing member with a temporary way,
31424                     // so that `osmJoinWays` can treat the pair like a single way.
31425                     tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
31426                     graph = graph.replace(tempWay);
31427                     var tempMember = { id: tempWay.id, type: 'way', role: member.role };
31428                     var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
31429                     groups = utilArrayGroupBy(tempRelation.members, 'type');
31430                     groups.way = groups.way || [];
31431
31432                 } else {
31433                     // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
31434                     groups = utilArrayGroupBy(relation.members, 'type');
31435                     groups.way = groups.way || [];
31436                     groups.way.push(member);
31437                 }
31438
31439                 members = withIndex(groups.way);
31440                 var joined = osmJoinWays(members, graph);
31441
31442                 // `joined` might not contain all of the way members,
31443                 // But will contain only the completed (downloaded) members
31444                 for (i = 0; i < joined.length; i++) {
31445                     var segment = joined[i];
31446                     var nodes = segment.nodes.slice();
31447                     var startIndex = segment[0].index;
31448
31449                     // j = array index in `members` where this segment starts
31450                     for (j = 0; j < members.length; j++) {
31451                         if (members[j].index === startIndex) {
31452                             break;
31453                         }
31454                     }
31455
31456                     // k = each member in segment
31457                     for (k = 0; k < segment.length; k++) {
31458                         item = segment[k];
31459                         var way = graph.entity(item.id);
31460
31461                         // If this is a paired item, generate members in correct order and role
31462                         if (tempWay && item.id === tempWay.id) {
31463                             if (nodes[0].id === insertPair.nodes[0]) {
31464                                 item.pair = [
31465                                     { id: insertPair.originalID, type: 'way', role: item.role },
31466                                     { id: insertPair.insertedID, type: 'way', role: item.role }
31467                                 ];
31468                             } else {
31469                                 item.pair = [
31470                                     { id: insertPair.insertedID, type: 'way', role: item.role },
31471                                     { id: insertPair.originalID, type: 'way', role: item.role }
31472                                 ];
31473                             }
31474                         }
31475
31476                         // reorder `members` if necessary
31477                         if (k > 0) {
31478                             if (j+k >= members.length || item.index !== members[j+k].index) {
31479                                 moveMember(members, item.index, j+k);
31480                             }
31481                         }
31482
31483                         nodes.splice(0, way.nodes.length - 1);
31484                     }
31485                 }
31486
31487                 if (tempWay) {
31488                     graph = graph.remove(tempWay);
31489                 }
31490
31491                 // Final pass: skip dead items, split pairs, remove index properties
31492                 var wayMembers = [];
31493                 for (i = 0; i < members.length; i++) {
31494                     item = members[i];
31495                     if (item.index === -1) continue;
31496
31497                     if (item.pair) {
31498                         wayMembers.push(item.pair[0]);
31499                         wayMembers.push(item.pair[1]);
31500                     } else {
31501                         wayMembers.push(utilObjectOmit(item, ['index']));
31502                     }
31503                 }
31504
31505                 // Put stops and platforms first, then nodes, ways, relations
31506                 // This is recommended for Public Transport v2 routes:
31507                 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
31508                 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
31509
31510                 return graph.replace(relation.update({ members: newMembers }));
31511
31512
31513                 // `moveMember()` changes the `members` array in place by splicing
31514                 // the item with `.index = findIndex` to where it belongs,
31515                 // and marking the old position as "dead" with `.index = -1`
31516                 //
31517                 // j=5, k=0                jk
31518                 // segment                 5 4 7 6
31519                 // members       0 1 2 3 4 5 6 7 8 9        keep 5 in j+k
31520                 //
31521                 // j=5, k=1                j k
31522                 // segment                 5 4 7 6
31523                 // members       0 1 2 3 4 5 6 7 8 9        move 4 to j+k
31524                 // members       0 1 2 3 x 5 4 6 7 8 9      moved
31525                 //
31526                 // j=5, k=2                j   k
31527                 // segment                 5 4 7 6
31528                 // members       0 1 2 3 x 5 4 6 7 8 9      move 7 to j+k
31529                 // members       0 1 2 3 x 5 4 7 6 x 8 9    moved
31530                 //
31531                 // j=5, k=3                j     k
31532                 // segment                 5 4 7 6
31533                 // members       0 1 2 3 x 5 4 7 6 x 8 9    keep 6 in j+k
31534                 //
31535                 function moveMember(arr, findIndex, toIndex) {
31536                     for (var i = 0; i < arr.length; i++) {
31537                         if (arr[i].index === findIndex) {
31538                             break;
31539                         }
31540                     }
31541
31542                     var item = Object.assign({}, arr[i]);   // shallow copy
31543                     arr[i].index = -1;   // mark as dead
31544                     item.index = toIndex;
31545                     arr.splice(toIndex, 0, item);
31546                 }
31547
31548
31549                 // This is the same as `Relation.indexedMembers`,
31550                 // Except we don't want to index all the members, only the ways
31551                 function withIndex(arr) {
31552                     var result = new Array(arr.length);
31553                     for (var i = 0; i < arr.length; i++) {
31554                         result[i] = Object.assign({}, arr[i]);   // shallow copy
31555                         result[i].index = i;
31556                     }
31557                     return result;
31558                 }
31559             }
31560
31561         }
31562
31563         function actionAddMidpoint(midpoint, node) {
31564             return function(graph) {
31565                 graph = graph.replace(node.move(midpoint.loc));
31566
31567                 var parents = utilArrayIntersection(
31568                     graph.parentWays(graph.entity(midpoint.edge[0])),
31569                     graph.parentWays(graph.entity(midpoint.edge[1]))
31570                 );
31571
31572                 parents.forEach(function(way) {
31573                     for (var i = 0; i < way.nodes.length - 1; i++) {
31574                         if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
31575                             graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
31576
31577                             // Add only one midpoint on doubled-back segments,
31578                             // turning them into self-intersections.
31579                             return;
31580                         }
31581                     }
31582                 });
31583
31584                 return graph;
31585             };
31586         }
31587
31588         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
31589         function actionAddVertex(wayId, nodeId, index) {
31590             return function(graph) {
31591                 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
31592             };
31593         }
31594
31595         function actionChangeMember(relationId, member, memberIndex) {
31596             return function(graph) {
31597                 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
31598             };
31599         }
31600
31601         function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
31602             return function action(graph) {
31603                 var entity = graph.entity(entityID);
31604                 var geometry = entity.geometry(graph);
31605                 var tags = entity.tags;
31606
31607                 if (oldPreset) tags = oldPreset.unsetTags(tags, geometry);
31608                 if (newPreset) tags = newPreset.setTags(tags, geometry, skipFieldDefaults);
31609
31610                 return graph.replace(entity.update({tags: tags}));
31611             };
31612         }
31613
31614         function actionChangeTags(entityId, tags) {
31615             return function(graph) {
31616                 var entity = graph.entity(entityId);
31617                 return graph.replace(entity.update({tags: tags}));
31618             };
31619         }
31620
31621         function osmNode() {
31622             if (!(this instanceof osmNode)) {
31623                 return (new osmNode()).initialize(arguments);
31624             } else if (arguments.length) {
31625                 this.initialize(arguments);
31626             }
31627         }
31628
31629         osmEntity.node = osmNode;
31630
31631         osmNode.prototype = Object.create(osmEntity.prototype);
31632
31633         Object.assign(osmNode.prototype, {
31634             type: 'node',
31635             loc: [9999, 9999],
31636
31637             extent: function() {
31638                 return new geoExtent(this.loc);
31639             },
31640
31641
31642             geometry: function(graph) {
31643                 return graph.transient(this, 'geometry', function() {
31644                     return graph.isPoi(this) ? 'point' : 'vertex';
31645                 });
31646             },
31647
31648
31649             move: function(loc) {
31650                 return this.update({loc: loc});
31651             },
31652
31653
31654             isDegenerate: function() {
31655                 return !(
31656                     Array.isArray(this.loc) && this.loc.length === 2 &&
31657                     this.loc[0] >= -180 && this.loc[0] <= 180 &&
31658                     this.loc[1] >= -90 && this.loc[1] <= 90
31659                 );
31660             },
31661
31662
31663             // Inspect tags and geometry to determine which direction(s) this node/vertex points
31664             directions: function(resolver, projection) {
31665                 var val;
31666                 var i;
31667
31668                 // which tag to use?
31669                 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
31670                     // all-way stop tag on a highway intersection
31671                     val = 'all';
31672                 } else {
31673                     // generic direction tag
31674                     val = (this.tags.direction || '').toLowerCase();
31675
31676                     // better suffix-style direction tag
31677                     var re = /:direction$/i;
31678                     var keys = Object.keys(this.tags);
31679                     for (i = 0; i < keys.length; i++) {
31680                         if (re.test(keys[i])) {
31681                             val = this.tags[keys[i]].toLowerCase();
31682                             break;
31683                         }
31684                     }
31685                 }
31686
31687                 if (val === '') return [];
31688
31689                 var cardinal = {
31690                     north: 0,               n: 0,
31691                     northnortheast: 22,     nne: 22,
31692                     northeast: 45,          ne: 45,
31693                     eastnortheast: 67,      ene: 67,
31694                     east: 90,               e: 90,
31695                     eastsoutheast: 112,     ese: 112,
31696                     southeast: 135,         se: 135,
31697                     southsoutheast: 157,    sse: 157,
31698                     south: 180,             s: 180,
31699                     southsouthwest: 202,    ssw: 202,
31700                     southwest: 225,         sw: 225,
31701                     westsouthwest: 247,     wsw: 247,
31702                     west: 270,              w: 270,
31703                     westnorthwest: 292,     wnw: 292,
31704                     northwest: 315,         nw: 315,
31705                     northnorthwest: 337,    nnw: 337
31706                 };
31707
31708
31709                 var values = val.split(';');
31710                 var results = [];
31711
31712                 values.forEach(function(v) {
31713                     // swap cardinal for numeric directions
31714                     if (cardinal[v] !== undefined) {
31715                         v = cardinal[v];
31716                     }
31717
31718                     // numeric direction - just add to results
31719                     if (v !== '' && !isNaN(+v)) {
31720                         results.push(+v);
31721                         return;
31722                     }
31723
31724                     // string direction - inspect parent ways
31725                     var lookBackward =
31726                         (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
31727                     var lookForward =
31728                         (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
31729
31730                     if (!lookForward && !lookBackward) return;
31731
31732                     var nodeIds = {};
31733                     resolver.parentWays(this).forEach(function(parent) {
31734                         var nodes = parent.nodes;
31735                         for (i = 0; i < nodes.length; i++) {
31736                             if (nodes[i] === this.id) {  // match current entity
31737                                 if (lookForward && i > 0) {
31738                                     nodeIds[nodes[i - 1]] = true;  // look back to prev node
31739                                 }
31740                                 if (lookBackward && i < nodes.length - 1) {
31741                                     nodeIds[nodes[i + 1]] = true;  // look ahead to next node
31742                                 }
31743                             }
31744                         }
31745                     }, this);
31746
31747                     Object.keys(nodeIds).forEach(function(nodeId) {
31748                         // +90 because geoAngle returns angle from X axis, not Y (north)
31749                         results.push(
31750                             (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
31751                         );
31752                     }, this);
31753
31754                 }, this);
31755
31756                 return utilArrayUniq(results);
31757             },
31758
31759
31760             isEndpoint: function(resolver) {
31761                 return resolver.transient(this, 'isEndpoint', function() {
31762                     var id = this.id;
31763                     return resolver.parentWays(this).filter(function(parent) {
31764                         return !parent.isClosed() && !!parent.affix(id);
31765                     }).length > 0;
31766                 });
31767             },
31768
31769
31770             isConnected: function(resolver) {
31771                 return resolver.transient(this, 'isConnected', function() {
31772                     var parents = resolver.parentWays(this);
31773
31774                     function isLine(entity) {
31775                         return entity.geometry(resolver) === 'line' &&
31776                             entity.hasInterestingTags();
31777                     }
31778
31779                     // vertex is connected to multiple parent lines
31780                     if (parents.length > 1 && parents.some(isLine)) {
31781                         return true;
31782
31783                     } else if (parents.length === 1) {
31784                         var way = parents[0];
31785                         var nodes = way.nodes.slice();
31786                         if (way.isClosed()) { nodes.pop(); }  // ignore connecting node if closed
31787
31788                         // return true if vertex appears multiple times (way is self intersecting)
31789                         return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
31790                     }
31791
31792                     return false;
31793                 });
31794             },
31795
31796
31797             isIntersection: function(resolver) {
31798                 return resolver.transient(this, 'isIntersection', function() {
31799                     return resolver.parentWays(this).filter(function(parent) {
31800                         return (parent.tags.highway ||
31801                             parent.tags.waterway ||
31802                             parent.tags.railway ||
31803                             parent.tags.aeroway) &&
31804                             parent.geometry(resolver) === 'line';
31805                     }).length > 1;
31806                 });
31807             },
31808
31809
31810             isHighwayIntersection: function(resolver) {
31811                 return resolver.transient(this, 'isHighwayIntersection', function() {
31812                     return resolver.parentWays(this).filter(function(parent) {
31813                         return parent.tags.highway && parent.geometry(resolver) === 'line';
31814                     }).length > 1;
31815                 });
31816             },
31817
31818
31819             isOnAddressLine: function(resolver) {
31820                 return resolver.transient(this, 'isOnAddressLine', function() {
31821                     return resolver.parentWays(this).filter(function(parent) {
31822                         return parent.tags.hasOwnProperty('addr:interpolation') &&
31823                             parent.geometry(resolver) === 'line';
31824                     }).length > 0;
31825                 });
31826             },
31827
31828
31829             asJXON: function(changeset_id) {
31830                 var r = {
31831                     node: {
31832                         '@id': this.osmId(),
31833                         '@lon': this.loc[0],
31834                         '@lat': this.loc[1],
31835                         '@version': (this.version || 0),
31836                         tag: Object.keys(this.tags).map(function(k) {
31837                             return { keyAttributes: { k: k, v: this.tags[k] } };
31838                         }, this)
31839                     }
31840                 };
31841                 if (changeset_id) r.node['@changeset'] = changeset_id;
31842                 return r;
31843             },
31844
31845
31846             asGeoJSON: function() {
31847                 return {
31848                     type: 'Point',
31849                     coordinates: this.loc
31850                 };
31851             }
31852         });
31853
31854         function actionCircularize(wayId, projection, maxAngle) {
31855             maxAngle = (maxAngle || 20) * Math.PI / 180;
31856
31857
31858             var action = function(graph, t) {
31859                 if (t === null || !isFinite(t)) t = 1;
31860                 t = Math.min(Math.max(+t, 0), 1);
31861
31862                 var way = graph.entity(wayId);
31863                 var origNodes = {};
31864
31865                 graph.childNodes(way).forEach(function(node) {
31866                     if (!origNodes[node.id]) origNodes[node.id] = node;
31867                 });
31868
31869                 if (!way.isConvex(graph)) {
31870                     graph = action.makeConvex(graph);
31871                 }
31872
31873                 var nodes = utilArrayUniq(graph.childNodes(way));
31874                 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
31875                 var points = nodes.map(function(n) { return projection(n.loc); });
31876                 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
31877                 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
31878                 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
31879                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
31880                 var ids, i, j, k;
31881
31882                 // we need atleast two key nodes for the algorithm to work
31883                 if (!keyNodes.length) {
31884                     keyNodes = [nodes[0]];
31885                     keyPoints = [points[0]];
31886                 }
31887
31888                 if (keyNodes.length === 1) {
31889                     var index = nodes.indexOf(keyNodes[0]);
31890                     var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
31891
31892                     keyNodes.push(nodes[oppositeIndex]);
31893                     keyPoints.push(points[oppositeIndex]);
31894                 }
31895
31896                 // key points and nodes are those connected to the ways,
31897                 // they are projected onto the circle, inbetween nodes are moved
31898                 // to constant intervals between key nodes, extra inbetween nodes are
31899                 // added if necessary.
31900                 for (i = 0; i < keyPoints.length; i++) {
31901                     var nextKeyNodeIndex = (i + 1) % keyNodes.length;
31902                     var startNode = keyNodes[i];
31903                     var endNode = keyNodes[nextKeyNodeIndex];
31904                     var startNodeIndex = nodes.indexOf(startNode);
31905                     var endNodeIndex = nodes.indexOf(endNode);
31906                     var numberNewPoints = -1;
31907                     var indexRange = endNodeIndex - startNodeIndex;
31908                     var nearNodes = {};
31909                     var inBetweenNodes = [];
31910                     var startAngle, endAngle, totalAngle, eachAngle;
31911                     var angle, loc, node, origNode;
31912
31913                     if (indexRange < 0) {
31914                         indexRange += nodes.length;
31915                     }
31916
31917                     // position this key node
31918                     var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
31919                     keyPoints[i] = [
31920                         centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
31921                         centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
31922                     ];
31923                     loc = projection.invert(keyPoints[i]);
31924                     node = keyNodes[i];
31925                     origNode = origNodes[node.id];
31926                     node = node.move(geoVecInterp(origNode.loc, loc, t));
31927                     graph = graph.replace(node);
31928
31929                     // figure out the between delta angle we want to match to
31930                     startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
31931                     endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
31932                     totalAngle = endAngle - startAngle;
31933
31934                     // detects looping around -pi/pi
31935                     if (totalAngle * sign > 0) {
31936                         totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
31937                     }
31938
31939                     do {
31940                         numberNewPoints++;
31941                         eachAngle = totalAngle / (indexRange + numberNewPoints);
31942                     } while (Math.abs(eachAngle) > maxAngle);
31943
31944
31945                     // move existing nodes
31946                     for (j = 1; j < indexRange; j++) {
31947                         angle = startAngle + j * eachAngle;
31948                         loc = projection.invert([
31949                             centroid[0] + Math.cos(angle) * radius,
31950                             centroid[1] + Math.sin(angle) * radius
31951                         ]);
31952
31953                         node = nodes[(j + startNodeIndex) % nodes.length];
31954                         origNode = origNodes[node.id];
31955                         nearNodes[node.id] = angle;
31956
31957                         node = node.move(geoVecInterp(origNode.loc, loc, t));
31958                         graph = graph.replace(node);
31959                     }
31960
31961                     // add new inbetween nodes if necessary
31962                     for (j = 0; j < numberNewPoints; j++) {
31963                         angle = startAngle + (indexRange + j) * eachAngle;
31964                         loc = projection.invert([
31965                             centroid[0] + Math.cos(angle) * radius,
31966                             centroid[1] + Math.sin(angle) * radius
31967                         ]);
31968
31969                         // choose a nearnode to use as the original
31970                         var min = Infinity;
31971                         for (var nodeId in nearNodes) {
31972                             var nearAngle = nearNodes[nodeId];
31973                             var dist = Math.abs(nearAngle - angle);
31974                             if (dist < min) {
31975                                 dist = min;
31976                                 origNode = origNodes[nodeId];
31977                             }
31978                         }
31979
31980                         node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
31981                         graph = graph.replace(node);
31982
31983                         nodes.splice(endNodeIndex + j, 0, node);
31984                         inBetweenNodes.push(node.id);
31985                     }
31986
31987                     // Check for other ways that share these keyNodes..
31988                     // If keyNodes are adjacent in both ways,
31989                     // we can add inBetween nodes to that shared way too..
31990                     if (indexRange === 1 && inBetweenNodes.length) {
31991                         var startIndex1 = way.nodes.lastIndexOf(startNode.id);
31992                         var endIndex1 = way.nodes.lastIndexOf(endNode.id);
31993                         var wayDirection1 = (endIndex1 - startIndex1);
31994                         if (wayDirection1 < -1) { wayDirection1 = 1; }
31995
31996                         var parentWays = graph.parentWays(keyNodes[i]);
31997                         for (j = 0; j < parentWays.length; j++) {
31998                             var sharedWay = parentWays[j];
31999                             if (sharedWay === way) continue;
32000
32001                             if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
32002                                 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
32003                                 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
32004                                 var wayDirection2 = (endIndex2 - startIndex2);
32005                                 var insertAt = endIndex2;
32006                                 if (wayDirection2 < -1) { wayDirection2 = 1; }
32007
32008                                 if (wayDirection1 !== wayDirection2) {
32009                                     inBetweenNodes.reverse();
32010                                     insertAt = startIndex2;
32011                                 }
32012                                 for (k = 0; k < inBetweenNodes.length; k++) {
32013                                     sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
32014                                 }
32015                                 graph = graph.replace(sharedWay);
32016                             }
32017                         }
32018                     }
32019
32020                 }
32021
32022                 // update the way to have all the new nodes
32023                 ids = nodes.map(function(n) { return n.id; });
32024                 ids.push(ids[0]);
32025
32026                 way = way.update({nodes: ids});
32027                 graph = graph.replace(way);
32028
32029                 return graph;
32030             };
32031
32032
32033             action.makeConvex = function(graph) {
32034                 var way = graph.entity(wayId);
32035                 var nodes = utilArrayUniq(graph.childNodes(way));
32036                 var points = nodes.map(function(n) { return projection(n.loc); });
32037                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
32038                 var hull = d3_polygonHull(points);
32039                 var i, j;
32040
32041                 // D3 convex hulls go counterclockwise..
32042                 if (sign === -1) {
32043                     nodes.reverse();
32044                     points.reverse();
32045                 }
32046
32047                 for (i = 0; i < hull.length - 1; i++) {
32048                     var startIndex = points.indexOf(hull[i]);
32049                     var endIndex = points.indexOf(hull[i+1]);
32050                     var indexRange = (endIndex - startIndex);
32051
32052                     if (indexRange < 0) {
32053                         indexRange += nodes.length;
32054                     }
32055
32056                     // move interior nodes to the surface of the convex hull..
32057                     for (j = 1; j < indexRange; j++) {
32058                         var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
32059                         var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
32060                         graph = graph.replace(node);
32061                     }
32062                 }
32063                 return graph;
32064             };
32065
32066
32067             action.disabled = function(graph) {
32068                 if (!graph.entity(wayId).isClosed()) {
32069                     return 'not_closed';
32070                 }
32071             };
32072
32073
32074             action.transitionable = true;
32075
32076
32077             return action;
32078         }
32079
32080         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
32081         function actionDeleteWay(wayID) {
32082
32083             function canDeleteNode(node, graph) {
32084                 // don't delete nodes still attached to ways or relations
32085                 if (graph.parentWays(node).length ||
32086                     graph.parentRelations(node).length) return false;
32087
32088                 var geometries = osmNodeGeometriesForTags(node.tags);
32089                 // don't delete if this node can be a standalone point
32090                 if (geometries.point) return false;
32091                 // delete if this node only be a vertex
32092                 if (geometries.vertex) return true;
32093
32094                 // iD doesn't know if this should be a point or vertex,
32095                 // so only delete if there are no interesting tags
32096                 return !node.hasInterestingTags();
32097             }
32098
32099
32100             var action = function(graph) {
32101                 var way = graph.entity(wayID);
32102
32103                 graph.parentRelations(way).forEach(function(parent) {
32104                     parent = parent.removeMembersWithID(wayID);
32105                     graph = graph.replace(parent);
32106
32107                     if (parent.isDegenerate()) {
32108                         graph = actionDeleteRelation(parent.id)(graph);
32109                     }
32110                 });
32111
32112                 (new Set(way.nodes)).forEach(function(nodeID) {
32113                     graph = graph.replace(way.removeNode(nodeID));
32114
32115                     var node = graph.entity(nodeID);
32116                     if (canDeleteNode(node, graph)) {
32117                         graph = graph.remove(node);
32118                     }
32119                 });
32120
32121                 return graph.remove(way);
32122             };
32123
32124
32125             return action;
32126         }
32127
32128         function actionDeleteMultiple(ids) {
32129             var actions = {
32130                 way: actionDeleteWay,
32131                 node: actionDeleteNode,
32132                 relation: actionDeleteRelation
32133             };
32134
32135
32136             var action = function(graph) {
32137                 ids.forEach(function(id) {
32138                     if (graph.hasEntity(id)) { // It may have been deleted aready.
32139                         graph = actions[graph.entity(id).type](id)(graph);
32140                     }
32141                 });
32142
32143                 return graph;
32144             };
32145
32146
32147             return action;
32148         }
32149
32150         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
32151         function actionDeleteRelation(relationID, allowUntaggedMembers) {
32152
32153             function canDeleteEntity(entity, graph) {
32154                 return !graph.parentWays(entity).length &&
32155                     !graph.parentRelations(entity).length &&
32156                     (!entity.hasInterestingTags() && !allowUntaggedMembers);
32157             }
32158
32159
32160             var action = function(graph) {
32161                 var relation = graph.entity(relationID);
32162
32163                 graph.parentRelations(relation)
32164                     .forEach(function(parent) {
32165                         parent = parent.removeMembersWithID(relationID);
32166                         graph = graph.replace(parent);
32167
32168                         if (parent.isDegenerate()) {
32169                             graph = actionDeleteRelation(parent.id)(graph);
32170                         }
32171                     });
32172
32173                 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
32174                 memberIDs.forEach(function(memberID) {
32175                     graph = graph.replace(relation.removeMembersWithID(memberID));
32176
32177                     var entity = graph.entity(memberID);
32178                     if (canDeleteEntity(entity, graph)) {
32179                         graph = actionDeleteMultiple([memberID])(graph);
32180                     }
32181                 });
32182
32183                 return graph.remove(relation);
32184             };
32185
32186
32187             return action;
32188         }
32189
32190         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
32191         function actionDeleteNode(nodeId) {
32192             var action = function(graph) {
32193                 var node = graph.entity(nodeId);
32194
32195                 graph.parentWays(node)
32196                     .forEach(function(parent) {
32197                         parent = parent.removeNode(nodeId);
32198                         graph = graph.replace(parent);
32199
32200                         if (parent.isDegenerate()) {
32201                             graph = actionDeleteWay(parent.id)(graph);
32202                         }
32203                     });
32204
32205                 graph.parentRelations(node)
32206                     .forEach(function(parent) {
32207                         parent = parent.removeMembersWithID(nodeId);
32208                         graph = graph.replace(parent);
32209
32210                         if (parent.isDegenerate()) {
32211                             graph = actionDeleteRelation(parent.id)(graph);
32212                         }
32213                     });
32214
32215                 return graph.remove(node);
32216             };
32217
32218
32219             return action;
32220         }
32221
32222         // Connect the ways at the given nodes.
32223         //
32224         // First choose a node to be the survivor, with preference given
32225         // to an existing (not new) node.
32226         //
32227         // Tags and relation memberships of of non-surviving nodes are merged
32228         // to the survivor.
32229         //
32230         // This is the inverse of `iD.actionDisconnect`.
32231         //
32232         // Reference:
32233         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
32234         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
32235         //
32236         function actionConnect(nodeIDs) {
32237             var action = function(graph) {
32238                 var survivor;
32239                 var node;
32240                 var parents;
32241                 var i, j;
32242
32243                 // Choose a survivor node, prefer an existing (not new) node - #4974
32244                 for (i = 0; i < nodeIDs.length; i++) {
32245                     survivor = graph.entity(nodeIDs[i]);
32246                     if (survivor.version) break;  // found one
32247                 }
32248
32249                 // Replace all non-surviving nodes with the survivor and merge tags.
32250                 for (i = 0; i < nodeIDs.length; i++) {
32251                     node = graph.entity(nodeIDs[i]);
32252                     if (node.id === survivor.id) continue;
32253
32254                     parents = graph.parentWays(node);
32255                     for (j = 0; j < parents.length; j++) {
32256                         if (!parents[j].areAdjacent(node.id, survivor.id)) {
32257                             graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
32258                         }
32259                     }
32260
32261                     parents = graph.parentRelations(node);
32262                     for (j = 0; j < parents.length; j++) {
32263                         graph = graph.replace(parents[j].replaceMember(node, survivor));
32264                     }
32265
32266                     survivor = survivor.mergeTags(node.tags);
32267                     graph = actionDeleteNode(node.id)(graph);
32268                 }
32269
32270                 graph = graph.replace(survivor);
32271
32272                 return graph;
32273             };
32274
32275
32276             action.disabled = function(graph) {
32277                 var seen = {};
32278                 var restrictionIDs = [];
32279                 var survivor;
32280                 var node, way;
32281                 var relations, relation, role;
32282                 var i, j, k;
32283
32284                 // Choose a survivor node, prefer an existing (not new) node - #4974
32285                 for (i = 0; i < nodeIDs.length; i++) {
32286                     survivor = graph.entity(nodeIDs[i]);
32287                     if (survivor.version) break;  // found one
32288                 }
32289
32290                 // 1. disable if the nodes being connected have conflicting relation roles
32291                 for (i = 0; i < nodeIDs.length; i++) {
32292                     node = graph.entity(nodeIDs[i]);
32293                     relations = graph.parentRelations(node);
32294
32295                     for (j = 0; j < relations.length; j++) {
32296                         relation = relations[j];
32297                         role = relation.memberById(node.id).role || '';
32298
32299                         // if this node is a via node in a restriction, remember for later
32300                         if (relation.hasFromViaTo()) {
32301                             restrictionIDs.push(relation.id);
32302                         }
32303
32304                         if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
32305                             return 'relation';
32306                         } else {
32307                             seen[relation.id] = role;
32308                         }
32309                     }
32310                 }
32311
32312                 // gather restrictions for parent ways
32313                 for (i = 0; i < nodeIDs.length; i++) {
32314                     node = graph.entity(nodeIDs[i]);
32315
32316                     var parents = graph.parentWays(node);
32317                     for (j = 0; j < parents.length; j++) {
32318                         var parent = parents[j];
32319                         relations = graph.parentRelations(parent);
32320
32321                         for (k = 0; k < relations.length; k++) {
32322                             relation = relations[k];
32323                             if (relation.hasFromViaTo()) {
32324                                 restrictionIDs.push(relation.id);
32325                             }
32326                         }
32327                     }
32328                 }
32329
32330
32331                 // test restrictions
32332                 restrictionIDs = utilArrayUniq(restrictionIDs);
32333                 for (i = 0; i < restrictionIDs.length; i++) {
32334                     relation = graph.entity(restrictionIDs[i]);
32335                     if (!relation.isComplete(graph)) continue;
32336
32337                     var memberWays = relation.members
32338                         .filter(function(m) { return m.type === 'way'; })
32339                         .map(function(m) { return graph.entity(m.id); });
32340
32341                     memberWays = utilArrayUniq(memberWays);
32342                     var f = relation.memberByRole('from');
32343                     var t = relation.memberByRole('to');
32344                     var isUturn = (f.id === t.id);
32345
32346                     // 2a. disable if connection would damage a restriction
32347                     // (a key node is a node at the junction of ways)
32348                     var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
32349                     for (j = 0; j < relation.members.length; j++) {
32350                         collectNodes(relation.members[j], nodes);
32351                     }
32352
32353                     nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
32354                     nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
32355
32356                     var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
32357                     nodes.from = nodes.from.filter(filter);
32358                     nodes.via = nodes.via.filter(filter);
32359                     nodes.to = nodes.to.filter(filter);
32360
32361                     var connectFrom = false;
32362                     var connectVia = false;
32363                     var connectTo = false;
32364                     var connectKeyFrom = false;
32365                     var connectKeyTo = false;
32366
32367                     for (j = 0; j < nodeIDs.length; j++) {
32368                         var n = nodeIDs[j];
32369                         if (nodes.from.indexOf(n) !== -1)    { connectFrom = true; }
32370                         if (nodes.via.indexOf(n) !== -1)     { connectVia = true; }
32371                         if (nodes.to.indexOf(n) !== -1)      { connectTo = true; }
32372                         if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
32373                         if (nodes.keyto.indexOf(n) !== -1)   { connectKeyTo = true; }
32374                     }
32375                     if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
32376                     if (connectFrom && connectVia) { return 'restriction'; }
32377                     if (connectTo   && connectVia) { return 'restriction'; }
32378
32379                     // connecting to a key node -
32380                     // if both nodes are on a member way (i.e. part of the turn restriction),
32381                     // the connecting node must be adjacent to the key node.
32382                     if (connectKeyFrom || connectKeyTo) {
32383                         if (nodeIDs.length !== 2) { return 'restriction'; }
32384
32385                         var n0 = null;
32386                         var n1 = null;
32387                         for (j = 0; j < memberWays.length; j++) {
32388                             way = memberWays[j];
32389                             if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
32390                             if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
32391                         }
32392
32393                         if (n0 && n1) {    // both nodes are part of the restriction
32394                             var ok = false;
32395                             for (j = 0; j < memberWays.length; j++) {
32396                                 way = memberWays[j];
32397                                 if (way.areAdjacent(n0, n1)) {
32398                                     ok = true;
32399                                     break;
32400                                 }
32401                             }
32402                             if (!ok) {
32403                                 return 'restriction';
32404                             }
32405                         }
32406                     }
32407
32408                     // 2b. disable if nodes being connected will destroy a member way in a restriction
32409                     // (to test, make a copy and try actually connecting the nodes)
32410                     for (j = 0; j < memberWays.length; j++) {
32411                         way = memberWays[j].update({});   // make copy
32412                         for (k = 0; k < nodeIDs.length; k++) {
32413                             if (nodeIDs[k] === survivor.id) continue;
32414
32415                             if (way.areAdjacent(nodeIDs[k], survivor.id)) {
32416                                 way = way.removeNode(nodeIDs[k]);
32417                             } else {
32418                                 way = way.replaceNode(nodeIDs[k], survivor.id);
32419                             }
32420                         }
32421                         if (way.isDegenerate()) {
32422                             return 'restriction';
32423                         }
32424                     }
32425                 }
32426
32427                 return false;
32428
32429
32430                 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
32431                 function hasDuplicates(n, i, arr) {
32432                     return arr.indexOf(n) !== arr.lastIndexOf(n);
32433                 }
32434
32435                 function keyNodeFilter(froms, tos) {
32436                     return function(n) {
32437                         return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
32438                     };
32439                 }
32440
32441                 function collectNodes(member, collection) {
32442                     var entity = graph.hasEntity(member.id);
32443                     if (!entity) return;
32444
32445                     var role = member.role || '';
32446                     if (!collection[role]) {
32447                         collection[role] = [];
32448                     }
32449
32450                     if (member.type === 'node') {
32451                         collection[role].push(member.id);
32452                         if (role === 'via') {
32453                             collection.keyfrom.push(member.id);
32454                             collection.keyto.push(member.id);
32455                         }
32456
32457                     } else if (member.type === 'way') {
32458                         collection[role].push.apply(collection[role], entity.nodes);
32459                         if (role === 'from' || role === 'via') {
32460                             collection.keyfrom.push(entity.first());
32461                             collection.keyfrom.push(entity.last());
32462                         }
32463                         if (role === 'to' || role === 'via') {
32464                             collection.keyto.push(entity.first());
32465                             collection.keyto.push(entity.last());
32466                         }
32467                     }
32468                 }
32469             };
32470
32471
32472             return action;
32473         }
32474
32475         function actionCopyEntities(ids, fromGraph) {
32476             var _copies = {};
32477
32478
32479             var action = function(graph) {
32480                 ids.forEach(function(id) {
32481                     fromGraph.entity(id).copy(fromGraph, _copies);
32482                 });
32483
32484                 for (var id in _copies) {
32485                     graph = graph.replace(_copies[id]);
32486                 }
32487
32488                 return graph;
32489             };
32490
32491
32492             action.copies = function() {
32493                 return _copies;
32494             };
32495
32496
32497             return action;
32498         }
32499
32500         function actionDeleteMember(relationId, memberIndex) {
32501             return function(graph) {
32502                 var relation = graph.entity(relationId)
32503                     .removeMember(memberIndex);
32504
32505                 graph = graph.replace(relation);
32506
32507                 if (relation.isDegenerate())
32508                     graph = actionDeleteRelation(relation.id)(graph);
32509
32510                 return graph;
32511             };
32512         }
32513
32514         function actionDiscardTags(difference) {
32515
32516             return function(graph) {
32517                 function discardTags(entity) {
32518                     var tags = {};
32519                     var keys = Object.keys(entity.tags);
32520                     var discarded = false;
32521
32522                     for (var i = 0; i < keys.length; i++) {
32523                         var k = keys[i];
32524                         if (dataDiscarded[k] || !entity.tags[k]) {
32525                             discarded = true;
32526                         } else {
32527                             tags[k] = entity.tags[k];
32528                         }
32529                     }
32530
32531                     if (discarded) {
32532                         graph = graph.replace(entity.update({ tags: tags }));
32533                     }
32534                 }
32535
32536                 difference.modified().forEach(discardTags);
32537                 difference.created().forEach(discardTags);
32538
32539                 return graph;
32540             };
32541         }
32542
32543         // Disconect the ways at the given node.
32544         //
32545         // Optionally, disconnect only the given ways.
32546         //
32547         // For testing convenience, accepts an ID to assign to the (first) new node.
32548         // Normally, this will be undefined and the way will automatically
32549         // be assigned a new ID.
32550         //
32551         // This is the inverse of `iD.actionConnect`.
32552         //
32553         // Reference:
32554         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
32555         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
32556         //
32557         function actionDisconnect(nodeId, newNodeId) {
32558             var wayIds;
32559
32560
32561             var action = function(graph) {
32562                 var node = graph.entity(nodeId);
32563                 var connections = action.connections(graph);
32564
32565                 connections.forEach(function(connection) {
32566                     var way = graph.entity(connection.wayID);
32567                     var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
32568
32569                     graph = graph.replace(newNode);
32570                     if (connection.index === 0 && way.isArea()) {
32571                         // replace shared node with shared node..
32572                         graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
32573                     } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
32574                         // replace closing node with new new node..
32575                         graph = graph.replace(way.unclose().addNode(newNode.id));
32576                     } else {
32577                         // replace shared node with multiple new nodes..
32578                         graph = graph.replace(way.updateNode(newNode.id, connection.index));
32579                     }
32580                 });
32581
32582                 return graph;
32583             };
32584
32585
32586             action.connections = function(graph) {
32587                 var candidates = [];
32588                 var keeping = false;
32589                 var parentWays = graph.parentWays(graph.entity(nodeId));
32590
32591                 parentWays.forEach(function(way) {
32592                     if (wayIds && wayIds.indexOf(way.id) === -1) {
32593                         keeping = true;
32594                         return;
32595                     }
32596                     if (way.isArea() && (way.nodes[0] === nodeId)) {
32597                         candidates.push({ wayID: way.id, index: 0 });
32598                     } else {
32599                         way.nodes.forEach(function(waynode, index) {
32600                             if (waynode === nodeId) {
32601                                 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
32602                                     return;
32603                                 }
32604                                 candidates.push({ wayID: way.id, index: index });
32605                             }
32606                         });
32607                     }
32608                 });
32609
32610                 return keeping ? candidates : candidates.slice(1);
32611             };
32612
32613
32614             action.disabled = function(graph) {
32615                 var connections = action.connections(graph);
32616                 if (connections.length === 0)
32617                     return 'not_connected';
32618
32619                 var parentWays = graph.parentWays(graph.entity(nodeId));
32620                 var seenRelationIds = {};
32621                 var sharedRelation;
32622
32623                 parentWays.forEach(function(way) {
32624                     var relations = graph.parentRelations(way);
32625                     relations.forEach(function(relation) {
32626                         if (relation.id in seenRelationIds) {
32627                             if (wayIds) {
32628                                 if (wayIds.indexOf(way.id) !== -1 ||
32629                                     wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
32630                                     sharedRelation = relation;
32631                                 }
32632                             } else {
32633                                 sharedRelation = relation;
32634                             }
32635                         } else {
32636                             seenRelationIds[relation.id] = way.id;
32637                         }
32638                     });
32639                 });
32640
32641                 if (sharedRelation)
32642                     return 'relation';
32643             };
32644
32645
32646             action.limitWays = function(val) {
32647                 if (!arguments.length) return wayIds;
32648                 wayIds = val;
32649                 return action;
32650             };
32651
32652
32653             return action;
32654         }
32655
32656         function actionExtract(entityID, projection) {
32657
32658             var extractedNodeID;
32659
32660             var action = function(graph) {
32661                 var entity = graph.entity(entityID);
32662
32663                 if (entity.type === 'node') {
32664                     return extractFromNode(entity, graph);
32665                 }
32666
32667                 return extractFromArea(entity, graph);
32668             };
32669
32670             function extractFromNode(node, graph) {
32671
32672                 extractedNodeID = node.id;
32673
32674                 // Create a new node to replace the one we will detach
32675                 var replacement = osmNode({ loc: node.loc });
32676                 graph = graph.replace(replacement);
32677
32678                 // Process each way in turn, updating the graph as we go
32679                 graph = graph.parentWays(node)
32680                     .reduce(function(accGraph, parentWay) {
32681                         return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
32682                     }, graph);
32683
32684                 // Process any relations too
32685                 return graph.parentRelations(node)
32686                     .reduce(function(accGraph, parentRel) {
32687                         return accGraph.replace(parentRel.replaceMember(node, replacement));
32688                     }, graph);
32689             }
32690
32691             function extractFromArea(entity, graph) {
32692
32693                 var keysToCopyAndRetain = ['source', 'wheelchair'];
32694                 var keysToRetain = ['type'];
32695                 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
32696
32697                 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
32698
32699                 var isBuilding = entity.tags.building;
32700
32701                 var areaTags = Object.assign({}, entity.tags);  // shallow copy
32702                 var pointTags = {};
32703                 for (var key in areaTags) {
32704
32705                     if (keysToRetain.indexOf(key) !== -1) {
32706                         continue;
32707                     }
32708
32709                     if (isBuilding) {
32710                         // don't transfer building-related tags
32711                         if (buildingKeysToRetain.indexOf(key) !== -1 ||
32712                             key.match(/^building:.{1,}/) ||
32713                             key.match(/^roof:.{1,}/)) continue;
32714                     }
32715
32716                     // copy the tag from the area to the point
32717                     pointTags[key] = areaTags[key];
32718
32719                     // leave addresses and some other tags so they're on both features
32720                     if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
32721                         continue;
32722                     }
32723
32724                     // remove the tag from the area
32725                     delete areaTags[key];
32726                 }
32727
32728                 if (!isBuilding) {
32729                     // ensure that the area keeps the area geometry
32730                     areaTags.area = 'yes';
32731                 }
32732
32733                 var replacement = osmNode({ loc: centroid, tags: pointTags });
32734                 graph = graph.replace(replacement);
32735
32736                 extractedNodeID = replacement.id;
32737
32738                 return graph.replace(entity.update({tags: areaTags}));
32739             }
32740
32741             action.getExtractedNodeID = function() {
32742                 return extractedNodeID;
32743             };
32744
32745             action.disabled = function(graph) {
32746                 var entity = graph.entity(entityID);
32747
32748                 if (entity.type === 'node') {
32749                     var parentRels = graph.parentRelations(entity);
32750                     for (var i = 0; i < parentRels.length; i++) {
32751                         var relation = parentRels[i];
32752                         if (!relation.hasFromViaTo()) continue;
32753
32754                         for (var j = 0; j < relation.members.length; j++) {
32755                             var m = relation.members[j];
32756                             if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
32757                                 return 'restriction';
32758                             }
32759                         }
32760                     }
32761                 }
32762
32763                 return false;
32764             };
32765
32766
32767             return action;
32768         }
32769
32770         // Join ways at the end node they share.
32771         //
32772         // This is the inverse of `iD.actionSplit`.
32773         //
32774         // Reference:
32775         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
32776         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
32777         //
32778         function actionJoin(ids) {
32779
32780             function groupEntitiesByGeometry(graph) {
32781                 var entities = ids.map(function(id) { return graph.entity(id); });
32782                 return Object.assign(
32783                     { line: [] },
32784                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32785                 );
32786             }
32787
32788
32789             var action = function(graph) {
32790                 var ways = ids.map(graph.entity, graph);
32791                 var survivorID = ways[0].id;
32792
32793                 // if any of the ways are sided (e.g. coastline, cliff, kerb)
32794                 // sort them first so they establish the overall order - #6033
32795                 ways.sort(function(a, b) {
32796                     var aSided = a.isSided();
32797                     var bSided = b.isSided();
32798                     return (aSided && !bSided) ? -1
32799                         : (bSided && !aSided) ? 1
32800                         : 0;
32801                 });
32802
32803                 // Prefer to keep an existing way.
32804                 for (var i = 0; i < ways.length; i++) {
32805                     if (!ways[i].isNew()) {
32806                         survivorID = ways[i].id;
32807                         break;
32808                     }
32809                 }
32810
32811                 var sequences = osmJoinWays(ways, graph);
32812                 var joined = sequences[0];
32813
32814                 // We might need to reverse some of these ways before joining them.  #4688
32815                 // `joined.actions` property will contain any actions we need to apply.
32816                 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
32817
32818                 var survivor = graph.entity(survivorID);
32819                 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
32820                 graph = graph.replace(survivor);
32821
32822                 joined.forEach(function(way) {
32823                     if (way.id === survivorID) return;
32824
32825                     graph.parentRelations(way).forEach(function(parent) {
32826                         graph = graph.replace(parent.replaceMember(way, survivor));
32827                     });
32828
32829                     survivor = survivor.mergeTags(way.tags);
32830
32831                     graph = graph.replace(survivor);
32832                     graph = actionDeleteWay(way.id)(graph);
32833                 });
32834
32835                 return graph;
32836             };
32837
32838
32839             action.disabled = function(graph) {
32840                 var geometries = groupEntitiesByGeometry(graph);
32841                 if (ids.length < 2 || ids.length !== geometries.line.length) {
32842                     return 'not_eligible';
32843                 }
32844
32845                 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
32846                 if (joined.length > 1) {
32847                     return 'not_adjacent';
32848                 }
32849
32850                 // Loop through all combinations of path-pairs
32851                 // to check potential intersections between all pairs
32852                 for (var i = 0; i < ids.length - 1; i++) {
32853                     for (var j = i + 1; j < ids.length; j++) {
32854                         var path1 = graph.childNodes(graph.entity(ids[i]))
32855                             .map(function(e) { return e.loc; });
32856                         var path2 = graph.childNodes(graph.entity(ids[j]))
32857                             .map(function(e) { return e.loc; });
32858                         var intersections = geoPathIntersections(path1, path2);
32859
32860                         // Check if intersections are just nodes lying on top of
32861                         // each other/the line, as opposed to crossing it
32862                         var common = utilArrayIntersection(
32863                             joined[0].nodes.map(function(n) { return n.loc.toString(); }),
32864                             intersections.map(function(n) { return n.toString(); })
32865                         );
32866                         if (common.length !== intersections.length) {
32867                             return 'paths_intersect';
32868                         }
32869                     }
32870                 }
32871
32872                 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
32873                 var relation;
32874                 var tags = {};
32875                 var conflicting = false;
32876
32877                 joined[0].forEach(function(way) {
32878                     var parents = graph.parentRelations(way);
32879                     parents.forEach(function(parent) {
32880                         if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
32881                             relation = parent;
32882                         }
32883                     });
32884
32885                     for (var k in way.tags) {
32886                         if (!(k in tags)) {
32887                             tags[k] = way.tags[k];
32888                         } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
32889                             conflicting = true;
32890                         }
32891                     }
32892                 });
32893
32894                 if (relation) {
32895                     return 'restriction';
32896                 }
32897
32898                 if (conflicting) {
32899                     return 'conflicting_tags';
32900                 }
32901             };
32902
32903
32904             return action;
32905         }
32906
32907         function actionMerge(ids) {
32908
32909             function groupEntitiesByGeometry(graph) {
32910                 var entities = ids.map(function(id) { return graph.entity(id); });
32911                 return Object.assign(
32912                     { point: [], area: [], line: [], relation: [] },
32913                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
32914                 );
32915             }
32916
32917
32918             var action = function(graph) {
32919                 var geometries = groupEntitiesByGeometry(graph);
32920                 var target = geometries.area[0] || geometries.line[0];
32921                 var points = geometries.point;
32922
32923                 points.forEach(function(point) {
32924                     target = target.mergeTags(point.tags);
32925                     graph = graph.replace(target);
32926
32927                     graph.parentRelations(point).forEach(function(parent) {
32928                         graph = graph.replace(parent.replaceMember(point, target));
32929                     });
32930
32931                     var nodes = utilArrayUniq(graph.childNodes(target));
32932                     var removeNode = point;
32933
32934                     for (var i = 0; i < nodes.length; i++) {
32935                         var node = nodes[i];
32936                         if (graph.parentWays(node).length > 1 ||
32937                             graph.parentRelations(node).length ||
32938                             node.hasInterestingTags()) {
32939                             continue;
32940                         }
32941
32942                         // Found an uninteresting child node on the target way.
32943                         // Move orig point into its place to preserve point's history. #3683
32944                         graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
32945                         target = target.replaceNode(node.id, point.id);
32946                         graph = graph.replace(target);
32947                         removeNode = node;
32948                         break;
32949                     }
32950
32951                     graph = graph.remove(removeNode);
32952                 });
32953
32954                 return graph;
32955             };
32956
32957
32958             action.disabled = function(graph) {
32959                 var geometries = groupEntitiesByGeometry(graph);
32960                 if (geometries.point.length === 0 ||
32961                     (geometries.area.length + geometries.line.length) !== 1 ||
32962                     geometries.relation.length !== 0) {
32963                     return 'not_eligible';
32964                 }
32965             };
32966
32967
32968             return action;
32969         }
32970
32971         // `actionMergeNodes` is just a combination of:
32972         //
32973         // 1. move all the nodes to a common location
32974         // 2. `actionConnect` them
32975
32976         function actionMergeNodes(nodeIDs, loc) {
32977
32978             // If there is a single "interesting" node, use that as the location.
32979             // Otherwise return the average location of all the nodes.
32980             function chooseLoc(graph) {
32981                 if (!nodeIDs.length) return null;
32982                 var sum = [0,0];
32983                 var interestingCount = 0;
32984                 var interestingLoc;
32985
32986                 for (var i = 0; i < nodeIDs.length; i++) {
32987                     var node = graph.entity(nodeIDs[i]);
32988                     if (node.hasInterestingTags()) {
32989                         interestingLoc = (++interestingCount === 1) ? node.loc : null;
32990                     }
32991                     sum = geoVecAdd(sum, node.loc);
32992                 }
32993
32994                 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
32995             }
32996
32997
32998             var action = function(graph) {
32999                 if (nodeIDs.length < 2) return graph;
33000                 var toLoc = loc;
33001                 if (!toLoc) {
33002                     toLoc = chooseLoc(graph);
33003                 }
33004
33005                 for (var i = 0; i < nodeIDs.length; i++) {
33006                     var node = graph.entity(nodeIDs[i]);
33007                     if (node.loc !== toLoc) {
33008                         graph = graph.replace(node.move(toLoc));
33009                     }
33010                 }
33011
33012                 return actionConnect(nodeIDs)(graph);
33013             };
33014
33015
33016             action.disabled = function(graph) {
33017                 if (nodeIDs.length < 2) return 'not_eligible';
33018
33019                 for (var i = 0; i < nodeIDs.length; i++) {
33020                     var entity = graph.entity(nodeIDs[i]);
33021                     if (entity.type !== 'node') return 'not_eligible';
33022                 }
33023
33024                 return actionConnect(nodeIDs).disabled(graph);
33025             };
33026
33027             return action;
33028         }
33029
33030         function osmChangeset() {
33031             if (!(this instanceof osmChangeset)) {
33032                 return (new osmChangeset()).initialize(arguments);
33033             } else if (arguments.length) {
33034                 this.initialize(arguments);
33035             }
33036         }
33037
33038
33039         osmEntity.changeset = osmChangeset;
33040
33041         osmChangeset.prototype = Object.create(osmEntity.prototype);
33042
33043         Object.assign(osmChangeset.prototype, {
33044
33045             type: 'changeset',
33046
33047
33048             extent: function() {
33049                 return new geoExtent();
33050             },
33051
33052
33053             geometry: function() {
33054                 return 'changeset';
33055             },
33056
33057
33058             asJXON: function() {
33059                 return {
33060                     osm: {
33061                         changeset: {
33062                             tag: Object.keys(this.tags).map(function(k) {
33063                                 return { '@k': k, '@v': this.tags[k] };
33064                             }, this),
33065                             '@version': 0.6,
33066                             '@generator': 'iD'
33067                         }
33068                     }
33069                 };
33070             },
33071
33072
33073             // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
33074             // XML. Returns a string.
33075             osmChangeJXON: function(changes) {
33076                 var changeset_id = this.id;
33077
33078                 function nest(x, order) {
33079                     var groups = {};
33080                     for (var i = 0; i < x.length; i++) {
33081                         var tagName = Object.keys(x[i])[0];
33082                         if (!groups[tagName]) groups[tagName] = [];
33083                         groups[tagName].push(x[i][tagName]);
33084                     }
33085                     var ordered = {};
33086                     order.forEach(function(o) {
33087                         if (groups[o]) ordered[o] = groups[o];
33088                     });
33089                     return ordered;
33090                 }
33091
33092
33093                 // sort relations in a changeset by dependencies
33094                 function sort(changes) {
33095
33096                     // find a referenced relation in the current changeset
33097                     function resolve(item) {
33098                         return relations.find(function(relation) {
33099                             return item.keyAttributes.type === 'relation'
33100                                 && item.keyAttributes.ref === relation['@id'];
33101                         });
33102                     }
33103
33104                     // a new item is an item that has not been already processed
33105                     function isNew(item) {
33106                         return !sorted[ item['@id'] ] && !processing.find(function(proc) {
33107                             return proc['@id'] === item['@id'];
33108                         });
33109                     }
33110
33111                     var processing = [];
33112                     var sorted = {};
33113                     var relations = changes.relation;
33114
33115                     if (!relations) return changes;
33116
33117                     for (var i = 0; i < relations.length; i++) {
33118                         var relation = relations[i];
33119
33120                         // skip relation if already sorted
33121                         if (!sorted[relation['@id']]) {
33122                             processing.push(relation);
33123                         }
33124
33125                         while (processing.length > 0) {
33126                             var next = processing[0],
33127                             deps = next.member.map(resolve).filter(Boolean).filter(isNew);
33128                             if (deps.length === 0) {
33129                                 sorted[next['@id']] = next;
33130                                 processing.shift();
33131                             } else {
33132                                 processing = deps.concat(processing);
33133                             }
33134                         }
33135                     }
33136
33137                     changes.relation = Object.values(sorted);
33138                     return changes;
33139                 }
33140
33141                 function rep(entity) {
33142                     return entity.asJXON(changeset_id);
33143                 }
33144
33145                 return {
33146                     osmChange: {
33147                         '@version': 0.6,
33148                         '@generator': 'iD',
33149                         'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
33150                         'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
33151                         'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
33152                     }
33153                 };
33154             },
33155
33156
33157             asGeoJSON: function() {
33158                 return {};
33159             }
33160
33161         });
33162
33163         function osmNote() {
33164             if (!(this instanceof osmNote)) {
33165                 return (new osmNote()).initialize(arguments);
33166             } else if (arguments.length) {
33167                 this.initialize(arguments);
33168             }
33169         }
33170
33171
33172         osmNote.id = function() {
33173             return osmNote.id.next--;
33174         };
33175
33176
33177         osmNote.id.next = -1;
33178
33179
33180         Object.assign(osmNote.prototype, {
33181
33182             type: 'note',
33183
33184             initialize: function(sources) {
33185                 for (var i = 0; i < sources.length; ++i) {
33186                     var source = sources[i];
33187                     for (var prop in source) {
33188                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
33189                             if (source[prop] === undefined) {
33190                                 delete this[prop];
33191                             } else {
33192                                 this[prop] = source[prop];
33193                             }
33194                         }
33195                     }
33196                 }
33197
33198                 if (!this.id) {
33199                     this.id = osmNote.id() + '';  // as string
33200                 }
33201
33202                 return this;
33203             },
33204
33205             extent: function() {
33206                 return new geoExtent(this.loc);
33207             },
33208
33209             update: function(attrs) {
33210                 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
33211             },
33212
33213             isNew: function() {
33214                 return this.id < 0;
33215             },
33216
33217             move: function(loc) {
33218                 return this.update({ loc: loc });
33219             }
33220
33221         });
33222
33223         function osmRelation() {
33224             if (!(this instanceof osmRelation)) {
33225                 return (new osmRelation()).initialize(arguments);
33226             } else if (arguments.length) {
33227                 this.initialize(arguments);
33228             }
33229         }
33230
33231
33232         osmEntity.relation = osmRelation;
33233
33234         osmRelation.prototype = Object.create(osmEntity.prototype);
33235
33236
33237         osmRelation.creationOrder = function(a, b) {
33238             var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
33239             var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
33240
33241             if (aId < 0 || bId < 0) return aId - bId;
33242             return bId - aId;
33243         };
33244
33245
33246         Object.assign(osmRelation.prototype, {
33247             type: 'relation',
33248             members: [],
33249
33250
33251             copy: function(resolver, copies) {
33252                 if (copies[this.id]) return copies[this.id];
33253
33254                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
33255
33256                 var members = this.members.map(function(member) {
33257                     return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
33258                 });
33259
33260                 copy = copy.update({members: members});
33261                 copies[this.id] = copy;
33262
33263                 return copy;
33264             },
33265
33266
33267             extent: function(resolver, memo) {
33268                 return resolver.transient(this, 'extent', function() {
33269                     if (memo && memo[this.id]) return geoExtent();
33270                     memo = memo || {};
33271                     memo[this.id] = true;
33272
33273                     var extent = geoExtent();
33274                     for (var i = 0; i < this.members.length; i++) {
33275                         var member = resolver.hasEntity(this.members[i].id);
33276                         if (member) {
33277                             extent._extend(member.extent(resolver, memo));
33278                         }
33279                     }
33280                     return extent;
33281                 });
33282             },
33283
33284
33285             geometry: function(graph) {
33286                 return graph.transient(this, 'geometry', function() {
33287                     return this.isMultipolygon() ? 'area' : 'relation';
33288                 });
33289             },
33290
33291
33292             isDegenerate: function() {
33293                 return this.members.length === 0;
33294             },
33295
33296
33297             // Return an array of members, each extended with an 'index' property whose value
33298             // is the member index.
33299             indexedMembers: function() {
33300                 var result = new Array(this.members.length);
33301                 for (var i = 0; i < this.members.length; i++) {
33302                     result[i] = Object.assign({}, this.members[i], {index: i});
33303                 }
33304                 return result;
33305             },
33306
33307
33308             // Return the first member with the given role. A copy of the member object
33309             // is returned, extended with an 'index' property whose value is the member index.
33310             memberByRole: function(role) {
33311                 for (var i = 0; i < this.members.length; i++) {
33312                     if (this.members[i].role === role) {
33313                         return Object.assign({}, this.members[i], {index: i});
33314                     }
33315                 }
33316             },
33317
33318             // Same as memberByRole, but returns all members with the given role
33319             membersByRole: function(role) {
33320                 var result = [];
33321                 for (var i = 0; i < this.members.length; i++) {
33322                     if (this.members[i].role === role) {
33323                         result.push(Object.assign({}, this.members[i], {index: i}));
33324                     }
33325                 }
33326                 return result;
33327             },
33328
33329             // Return the first member with the given id. A copy of the member object
33330             // is returned, extended with an 'index' property whose value is the member index.
33331             memberById: function(id) {
33332                 for (var i = 0; i < this.members.length; i++) {
33333                     if (this.members[i].id === id) {
33334                         return Object.assign({}, this.members[i], {index: i});
33335                     }
33336                 }
33337             },
33338
33339
33340             // Return the first member with the given id and role. A copy of the member object
33341             // is returned, extended with an 'index' property whose value is the member index.
33342             memberByIdAndRole: function(id, role) {
33343                 for (var i = 0; i < this.members.length; i++) {
33344                     if (this.members[i].id === id && this.members[i].role === role) {
33345                         return Object.assign({}, this.members[i], {index: i});
33346                     }
33347                 }
33348             },
33349
33350
33351             addMember: function(member, index) {
33352                 var members = this.members.slice();
33353                 members.splice(index === undefined ? members.length : index, 0, member);
33354                 return this.update({members: members});
33355             },
33356
33357
33358             updateMember: function(member, index) {
33359                 var members = this.members.slice();
33360                 members.splice(index, 1, Object.assign({}, members[index], member));
33361                 return this.update({members: members});
33362             },
33363
33364
33365             removeMember: function(index) {
33366                 var members = this.members.slice();
33367                 members.splice(index, 1);
33368                 return this.update({members: members});
33369             },
33370
33371
33372             removeMembersWithID: function(id) {
33373                 var members = this.members.filter(function(m) { return m.id !== id; });
33374                 return this.update({members: members});
33375             },
33376
33377             moveMember: function(fromIndex, toIndex) {
33378                 var members = this.members.slice();
33379                 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
33380                 return this.update({members: members});
33381             },
33382
33383
33384             // Wherever a member appears with id `needle.id`, replace it with a member
33385             // with id `replacement.id`, type `replacement.type`, and the original role,
33386             // By default, adding a duplicate member (by id and role) is prevented.
33387             // Return an updated relation.
33388             replaceMember: function(needle, replacement, keepDuplicates) {
33389                 if (!this.memberById(needle.id)) return this;
33390
33391                 var members = [];
33392
33393                 for (var i = 0; i < this.members.length; i++) {
33394                     var member = this.members[i];
33395                     if (member.id !== needle.id) {
33396                         members.push(member);
33397                     } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
33398                         members.push({ id: replacement.id, type: replacement.type, role: member.role });
33399                     }
33400                 }
33401
33402                 return this.update({ members: members });
33403             },
33404
33405
33406             asJXON: function(changeset_id) {
33407                 var r = {
33408                     relation: {
33409                         '@id': this.osmId(),
33410                         '@version': this.version || 0,
33411                         member: this.members.map(function(member) {
33412                             return {
33413                                 keyAttributes: {
33414                                     type: member.type,
33415                                     role: member.role,
33416                                     ref: osmEntity.id.toOSM(member.id)
33417                                 }
33418                             };
33419                         }, this),
33420                         tag: Object.keys(this.tags).map(function(k) {
33421                             return { keyAttributes: { k: k, v: this.tags[k] } };
33422                         }, this)
33423                     }
33424                 };
33425                 if (changeset_id) {
33426                     r.relation['@changeset'] = changeset_id;
33427                 }
33428                 return r;
33429             },
33430
33431
33432             asGeoJSON: function(resolver) {
33433                 return resolver.transient(this, 'GeoJSON', function () {
33434                     if (this.isMultipolygon()) {
33435                         return {
33436                             type: 'MultiPolygon',
33437                             coordinates: this.multipolygon(resolver)
33438                         };
33439                     } else {
33440                         return {
33441                             type: 'FeatureCollection',
33442                             properties: this.tags,
33443                             features: this.members.map(function (member) {
33444                                 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
33445                             })
33446                         };
33447                     }
33448                 });
33449             },
33450
33451
33452             area: function(resolver) {
33453                 return resolver.transient(this, 'area', function() {
33454                     return d3_geoArea(this.asGeoJSON(resolver));
33455                 });
33456             },
33457
33458
33459             isMultipolygon: function() {
33460                 return this.tags.type === 'multipolygon';
33461             },
33462
33463
33464             isComplete: function(resolver) {
33465                 for (var i = 0; i < this.members.length; i++) {
33466                     if (!resolver.hasEntity(this.members[i].id)) {
33467                         return false;
33468                     }
33469                 }
33470                 return true;
33471             },
33472
33473
33474             hasFromViaTo: function() {
33475                 return (
33476                     this.members.some(function(m) { return m.role === 'from'; }) &&
33477                     this.members.some(function(m) { return m.role === 'via'; }) &&
33478                     this.members.some(function(m) { return m.role === 'to'; })
33479                 );
33480             },
33481
33482
33483             isRestriction: function() {
33484                 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
33485             },
33486
33487
33488             isValidRestriction: function() {
33489                 if (!this.isRestriction()) return false;
33490
33491                 var froms = this.members.filter(function(m) { return m.role === 'from'; });
33492                 var vias = this.members.filter(function(m) { return m.role === 'via'; });
33493                 var tos = this.members.filter(function(m) { return m.role === 'to'; });
33494
33495                 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') return false;
33496                 if (froms.some(function(m) { return m.type !== 'way'; })) return false;
33497
33498                 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') return false;
33499                 if (tos.some(function(m) { return m.type !== 'way'; })) return false;
33500
33501                 if (vias.length === 0) return false;
33502                 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) return false;
33503
33504                 return true;
33505             },
33506
33507
33508             // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
33509             // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
33510             //
33511             // This corresponds to the structure needed for rendering a multipolygon path using a
33512             // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
33513             //
33514             // In the case of invalid geometries, this function will still return a result which
33515             // includes the nodes of all way members, but some Nds may be unclosed and some inner
33516             // rings not matched with the intended outer ring.
33517             //
33518             multipolygon: function(resolver) {
33519                 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
33520                 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
33521
33522                 outers = osmJoinWays(outers, resolver);
33523                 inners = osmJoinWays(inners, resolver);
33524
33525                 outers = outers.map(function(outer) {
33526                     return outer.nodes.map(function(node) { return node.loc; });
33527                 });
33528                 inners = inners.map(function(inner) {
33529                     return inner.nodes.map(function(node) { return node.loc; });
33530                 });
33531
33532                 var result = outers.map(function(o) {
33533                     // Heuristic for detecting counterclockwise winding order. Assumes
33534                     // that OpenStreetMap polygons are not hemisphere-spanning.
33535                     return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
33536                 });
33537
33538                 function findOuter(inner) {
33539                     var o, outer;
33540
33541                     for (o = 0; o < outers.length; o++) {
33542                         outer = outers[o];
33543                         if (geoPolygonContainsPolygon(outer, inner))
33544                             return o;
33545                     }
33546
33547                     for (o = 0; o < outers.length; o++) {
33548                         outer = outers[o];
33549                         if (geoPolygonIntersectsPolygon(outer, inner, false))
33550                             return o;
33551                     }
33552                 }
33553
33554                 for (var i = 0; i < inners.length; i++) {
33555                     var inner = inners[i];
33556
33557                     if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
33558                         inner = inner.reverse();
33559                     }
33560
33561                     var o = findOuter(inners[i]);
33562                     if (o !== undefined) {
33563                         result[o].push(inners[i]);
33564                     } else {
33565                         result.push([inners[i]]); // Invalid geometry
33566                     }
33567                 }
33568
33569                 return result;
33570             }
33571         });
33572
33573         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:{}}};
33574
33575         function qaError() {
33576             if (!(this instanceof qaError)) {
33577                 return (new qaError()).initialize(arguments);
33578             } else if (arguments.length) {
33579                 this.initialize(arguments);
33580             }
33581         }
33582
33583         // Generic handling for services without nice IDs
33584         qaError.id = function() {
33585             return qaError.id.next--;
33586         };
33587
33588         qaError.id.next = -1;
33589
33590         Object.assign(qaError.prototype, {
33591             type: 'qaError',
33592
33593             // All errors need a position
33594             loc: [0, 0],
33595
33596             // These should be passed in, used to retrieve from qa_errors.json
33597             service: '',
33598             error_type: '',
33599
33600             initialize: function(sources) {
33601                 for (var i = 0; i < sources.length; ++i) {
33602                     var source = sources[i];
33603                     for (var prop in source) {
33604                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
33605                             if (source[prop] === undefined) {
33606                                 delete this[prop];
33607                             } else {
33608                                 this[prop] = source[prop];
33609                             }
33610                         }
33611                     }
33612                 }
33613
33614                 // Extract common error information from data
33615                 if (this.service && this.error_type) {
33616                     var serviceInfo = services[this.service];
33617
33618                     if (serviceInfo) {
33619                         var errInfo = serviceInfo.errorTypes[this.error_type];
33620
33621                         if (errInfo) {
33622                             this.icon = errInfo.icon;
33623                             this.category = errInfo.category;
33624                         }
33625                     }
33626                 }
33627
33628                 // All errors must have an ID for selection
33629                 if (!this.id) {
33630                     this.id = qaError.id() + '';  // as string
33631                 }
33632
33633                 return this;
33634             },
33635
33636             update: function(attrs) {
33637                 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
33638             }
33639         });
33640
33641         // Split a way at the given node.
33642         //
33643         // Optionally, split only the given ways, if multiple ways share
33644         // the given node.
33645         //
33646         // This is the inverse of `iD.actionJoin`.
33647         //
33648         // For testing convenience, accepts an ID to assign to the new way.
33649         // Normally, this will be undefined and the way will automatically
33650         // be assigned a new ID.
33651         //
33652         // Reference:
33653         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
33654         //
33655         function actionSplit(nodeId, newWayIds) {
33656             var _wayIDs;
33657
33658             // If the way is closed, we need to search for a partner node
33659             // to split the way at.
33660             //
33661             // The following looks for a node that is both far away from
33662             // the initial node in terms of way segment length and nearby
33663             // in terms of beeline-distance. This assures that areas get
33664             // split on the most "natural" points (independent of the number
33665             // of nodes).
33666             // For example: bone-shaped areas get split across their waist
33667             // line, circles across the diameter.
33668             function splitArea(nodes, idxA, graph) {
33669                 var lengths = new Array(nodes.length);
33670                 var length;
33671                 var i;
33672                 var best = 0;
33673                 var idxB;
33674
33675                 function wrap(index) {
33676                     return utilWrap(index, nodes.length);
33677                 }
33678
33679                 function dist(nA, nB) {
33680                     var locA = graph.entity(nA).loc;
33681                     var locB = graph.entity(nB).loc;
33682                     var epsilon = 1e-6;
33683                     return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
33684                 }
33685
33686                 // calculate lengths
33687                 length = 0;
33688                 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
33689                     length += dist(nodes[i], nodes[wrap(i - 1)]);
33690                     lengths[i] = length;
33691                 }
33692
33693                 length = 0;
33694                 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
33695                     length += dist(nodes[i], nodes[wrap(i + 1)]);
33696                     if (length < lengths[i]) {
33697                         lengths[i] = length;
33698                     }
33699                 }
33700
33701                 // determine best opposite node to split
33702                 for (i = 0; i < nodes.length; i++) {
33703                     var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
33704                     if (cost > best) {
33705                         idxB = i;
33706                         best = cost;
33707                     }
33708                 }
33709
33710                 return idxB;
33711             }
33712
33713
33714             function split(graph, wayA, newWayId) {
33715                 var wayB = osmWay({ id: newWayId, tags: wayA.tags });   // `wayB` is the NEW way
33716                 var origNodes = wayA.nodes.slice();
33717                 var nodesA;
33718                 var nodesB;
33719                 var isArea = wayA.isArea();
33720                 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
33721
33722                 if (wayA.isClosed()) {
33723                     var nodes = wayA.nodes.slice(0, -1);
33724                     var idxA = nodes.indexOf(nodeId);
33725                     var idxB = splitArea(nodes, idxA, graph);
33726
33727                     if (idxB < idxA) {
33728                         nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
33729                         nodesB = nodes.slice(idxB, idxA + 1);
33730                     } else {
33731                         nodesA = nodes.slice(idxA, idxB + 1);
33732                         nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
33733                     }
33734                 } else {
33735                     var idx = wayA.nodes.indexOf(nodeId, 1);
33736                     nodesA = wayA.nodes.slice(0, idx + 1);
33737                     nodesB = wayA.nodes.slice(idx);
33738                 }
33739
33740                 wayA = wayA.update({ nodes: nodesA });
33741                 wayB = wayB.update({ nodes: nodesB });
33742
33743                 graph = graph.replace(wayA);
33744                 graph = graph.replace(wayB);
33745
33746                 graph.parentRelations(wayA).forEach(function(relation) {
33747                     var member;
33748
33749                     // Turn restrictions - make sure:
33750                     // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
33751                     //    (whichever one is connected to the VIA node/ways)
33752                     // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
33753                     if (relation.hasFromViaTo()) {
33754                         var f = relation.memberByRole('from');
33755                         var v = relation.membersByRole('via');
33756                         var t = relation.memberByRole('to');
33757                         var i;
33758
33759                         // 1. split a FROM/TO
33760                         if (f.id === wayA.id || t.id === wayA.id) {
33761                             var keepB = false;
33762                             if (v.length === 1 && v[0].type === 'node') {   // check via node
33763                                 keepB = wayB.contains(v[0].id);
33764                             } else {                                        // check via way(s)
33765                                 for (i = 0; i < v.length; i++) {
33766                                     if (v[i].type === 'way') {
33767                                         var wayVia = graph.hasEntity(v[i].id);
33768                                         if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
33769                                             keepB = true;
33770                                             break;
33771                                         }
33772                                     }
33773                                 }
33774                             }
33775
33776                             if (keepB) {
33777                                 relation = relation.replaceMember(wayA, wayB);
33778                                 graph = graph.replace(relation);
33779                             }
33780
33781                         // 2. split a VIA
33782                         } else {
33783                             for (i = 0; i < v.length; i++) {
33784                                 if (v[i].type === 'way' && v[i].id === wayA.id) {
33785                                     member = {
33786                                         id: wayB.id,
33787                                         type: 'way',
33788                                         role: 'via'
33789                                     };
33790                                     graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
33791                                     break;
33792                                 }
33793                             }
33794                         }
33795
33796                     // All other relations (Routes, Multipolygons, etc):
33797                     // 1. Both `wayA` and `wayB` remain in the relation
33798                     // 2. But must be inserted as a pair (see `actionAddMember` for details)
33799                     } else {
33800                         if (relation === isOuter) {
33801                             graph = graph.replace(relation.mergeTags(wayA.tags));
33802                             graph = graph.replace(wayA.update({ tags: {} }));
33803                             graph = graph.replace(wayB.update({ tags: {} }));
33804                         }
33805
33806                         member = {
33807                             id: wayB.id,
33808                             type: 'way',
33809                             role: relation.memberById(wayA.id).role
33810                         };
33811
33812                         var insertPair = {
33813                             originalID: wayA.id,
33814                             insertedID: wayB.id,
33815                             nodes: origNodes
33816                         };
33817
33818                         graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
33819                     }
33820                 });
33821
33822                 if (!isOuter && isArea) {
33823                     var multipolygon = osmRelation({
33824                         tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
33825                         members: [
33826                             { id: wayA.id, role: 'outer', type: 'way' },
33827                             { id: wayB.id, role: 'outer', type: 'way' }
33828                         ]
33829                     });
33830
33831                     graph = graph.replace(multipolygon);
33832                     graph = graph.replace(wayA.update({ tags: {} }));
33833                     graph = graph.replace(wayB.update({ tags: {} }));
33834                 }
33835
33836                 return graph;
33837             }
33838
33839
33840             var action = function(graph) {
33841                 var candidates = action.ways(graph);
33842                 for (var i = 0; i < candidates.length; i++) {
33843                     graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
33844                 }
33845                 return graph;
33846             };
33847
33848
33849             action.ways = function(graph) {
33850                 var node = graph.entity(nodeId);
33851                 var parents = graph.parentWays(node);
33852                 var hasLines = parents.some(function(parent) {
33853                     return parent.geometry(graph) === 'line';
33854                 });
33855
33856                 return parents.filter(function(parent) {
33857                     if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
33858                         return false;
33859
33860                     if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
33861                         return false;
33862
33863                     if (parent.isClosed()) {
33864                         return true;
33865                     }
33866
33867                     for (var i = 1; i < parent.nodes.length - 1; i++) {
33868                         if (parent.nodes[i] === nodeId) {
33869                             return true;
33870                         }
33871                     }
33872
33873                     return false;
33874                 });
33875             };
33876
33877
33878             action.disabled = function(graph) {
33879                 var candidates = action.ways(graph);
33880                 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
33881                     return 'not_eligible';
33882                 }
33883             };
33884
33885
33886             action.limitWays = function(val) {
33887                 if (!arguments.length) return _wayIDs;
33888                 _wayIDs = val;
33889                 return action;
33890             };
33891
33892
33893             return action;
33894         }
33895
33896         function coreGraph(other, mutable) {
33897             if (!(this instanceof coreGraph)) return new coreGraph(other, mutable);
33898
33899             if (other instanceof coreGraph) {
33900                 var base = other.base();
33901                 this.entities = Object.assign(Object.create(base.entities), other.entities);
33902                 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
33903                 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
33904
33905             } else {
33906                 this.entities = Object.create({});
33907                 this._parentWays = Object.create({});
33908                 this._parentRels = Object.create({});
33909                 this.rebase(other || [], [this]);
33910             }
33911
33912             this.transients = {};
33913             this._childNodes = {};
33914             this.frozen = !mutable;
33915         }
33916
33917
33918         coreGraph.prototype = {
33919
33920             hasEntity: function(id) {
33921                 return this.entities[id];
33922             },
33923
33924
33925             entity: function(id) {
33926                 var entity = this.entities[id];
33927
33928                 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
33929                 if (!entity) {
33930                     entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
33931                 }
33932
33933                 if (!entity) {
33934                     throw new Error('entity ' + id + ' not found');
33935                 }
33936                 return entity;
33937             },
33938
33939
33940             transient: function(entity, key, fn) {
33941                 var id = entity.id;
33942                 var transients = this.transients[id] || (this.transients[id] = {});
33943
33944                 if (transients[key] !== undefined) {
33945                     return transients[key];
33946                 }
33947
33948                 transients[key] = fn.call(entity);
33949
33950                 return transients[key];
33951             },
33952
33953
33954             parentWays: function(entity) {
33955                 var parents = this._parentWays[entity.id];
33956                 var result = [];
33957                 if (parents) {
33958                     parents.forEach(function(id) {
33959                         result.push(this.entity(id));
33960                     }, this);
33961                 }
33962                 return result;
33963             },
33964
33965
33966             isPoi: function(entity) {
33967                 var parents = this._parentWays[entity.id];
33968                 return !parents || parents.size === 0;
33969             },
33970
33971
33972             isShared: function(entity) {
33973                 var parents = this._parentWays[entity.id];
33974                 return parents && parents.size > 1;
33975             },
33976
33977
33978             parentRelations: function(entity) {
33979                 var parents = this._parentRels[entity.id];
33980                 var result = [];
33981                 if (parents) {
33982                     parents.forEach(function(id) {
33983                         result.push(this.entity(id));
33984                     }, this);
33985                 }
33986                 return result;
33987             },
33988
33989             parentMultipolygons: function(entity) {
33990                 return this.parentRelations(entity).filter(function(relation) {
33991                     return relation.isMultipolygon();
33992                 });
33993             },
33994
33995
33996             childNodes: function(entity) {
33997                 if (this._childNodes[entity.id]) return this._childNodes[entity.id];
33998                 if (!entity.nodes) return [];
33999
34000                 var nodes = [];
34001                 for (var i = 0; i < entity.nodes.length; i++) {
34002                     nodes[i] = this.entity(entity.nodes[i]);
34003                 }
34004
34005                 this._childNodes[entity.id] = nodes;
34006                 return this._childNodes[entity.id];
34007             },
34008
34009
34010             base: function() {
34011                 return {
34012                     'entities': Object.getPrototypeOf(this.entities),
34013                     'parentWays': Object.getPrototypeOf(this._parentWays),
34014                     'parentRels': Object.getPrototypeOf(this._parentRels)
34015                 };
34016             },
34017
34018
34019             // Unlike other graph methods, rebase mutates in place. This is because it
34020             // is used only during the history operation that merges newly downloaded
34021             // data into each state. To external consumers, it should appear as if the
34022             // graph always contained the newly downloaded data.
34023             rebase: function(entities, stack, force) {
34024                 var base = this.base();
34025                 var i, j, k, id;
34026
34027                 for (i = 0; i < entities.length; i++) {
34028                     var entity = entities[i];
34029
34030                     if (!entity.visible || (!force && base.entities[entity.id]))
34031                         continue;
34032
34033                     // Merging data into the base graph
34034                     base.entities[entity.id] = entity;
34035                     this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
34036
34037                     // Restore provisionally-deleted nodes that are discovered to have an extant parent
34038                     if (entity.type === 'way') {
34039                         for (j = 0; j < entity.nodes.length; j++) {
34040                             id = entity.nodes[j];
34041                             for (k = 1; k < stack.length; k++) {
34042                                 var ents = stack[k].entities;
34043                                 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
34044                                     delete ents[id];
34045                                 }
34046                             }
34047                         }
34048                     }
34049                 }
34050
34051                 for (i = 0; i < stack.length; i++) {
34052                     stack[i]._updateRebased();
34053                 }
34054             },
34055
34056
34057             _updateRebased: function() {
34058                 var base = this.base();
34059
34060                 Object.keys(this._parentWays).forEach(function(child) {
34061                     if (base.parentWays[child]) {
34062                         base.parentWays[child].forEach(function(id) {
34063                             if (!this.entities.hasOwnProperty(id)) {
34064                                 this._parentWays[child].add(id);
34065                             }
34066                         }, this);
34067                     }
34068                 }, this);
34069
34070                 Object.keys(this._parentRels).forEach(function(child) {
34071                     if (base.parentRels[child]) {
34072                         base.parentRels[child].forEach(function(id) {
34073                             if (!this.entities.hasOwnProperty(id)) {
34074                                 this._parentRels[child].add(id);
34075                             }
34076                         }, this);
34077                     }
34078                 }, this);
34079
34080                 this.transients = {};
34081
34082                 // this._childNodes is not updated, under the assumption that
34083                 // ways are always downloaded with their child nodes.
34084             },
34085
34086
34087             // Updates calculated properties (parentWays, parentRels) for the specified change
34088             _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
34089                 parentWays = parentWays || this._parentWays;
34090                 parentRels = parentRels || this._parentRels;
34091
34092                 var type = entity && entity.type || oldentity && oldentity.type;
34093                 var removed, added, i;
34094
34095                 if (type === 'way') {   // Update parentWays
34096                     if (oldentity && entity) {
34097                         removed = utilArrayDifference(oldentity.nodes, entity.nodes);
34098                         added = utilArrayDifference(entity.nodes, oldentity.nodes);
34099                     } else if (oldentity) {
34100                         removed = oldentity.nodes;
34101                         added = [];
34102                     } else if (entity) {
34103                         removed = [];
34104                         added = entity.nodes;
34105                     }
34106                     for (i = 0; i < removed.length; i++) {
34107                         // make a copy of prototype property, store as own property, and update..
34108                         parentWays[removed[i]] = new Set(parentWays[removed[i]]);
34109                         parentWays[removed[i]].delete(oldentity.id);
34110                     }
34111                     for (i = 0; i < added.length; i++) {
34112                         // make a copy of prototype property, store as own property, and update..
34113                         parentWays[added[i]] = new Set(parentWays[added[i]]);
34114                         parentWays[added[i]].add(entity.id);
34115                     }
34116
34117                 } else if (type === 'relation') {   // Update parentRels
34118
34119                     // diff only on the IDs since the same entity can be a member multiple times with different roles
34120                     var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
34121                     var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];
34122
34123                     if (oldentity && entity) {
34124                         removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
34125                         added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
34126                     } else if (oldentity) {
34127                         removed = oldentityMemberIDs;
34128                         added = [];
34129                     } else if (entity) {
34130                         removed = [];
34131                         added = entityMemberIDs;
34132                     }
34133                     for (i = 0; i < removed.length; i++) {
34134                         // make a copy of prototype property, store as own property, and update..
34135                         parentRels[removed[i]] = new Set(parentRels[removed[i]]);
34136                         parentRels[removed[i]].delete(oldentity.id);
34137                     }
34138                     for (i = 0; i < added.length; i++) {
34139                         // make a copy of prototype property, store as own property, and update..
34140                         parentRels[added[i]] = new Set(parentRels[added[i]]);
34141                         parentRels[added[i]].add(entity.id);
34142                     }
34143                 }
34144             },
34145
34146
34147             replace: function(entity) {
34148                 if (this.entities[entity.id] === entity) return this;
34149
34150                 return this.update(function() {
34151                     this._updateCalculated(this.entities[entity.id], entity);
34152                     this.entities[entity.id] = entity;
34153                 });
34154             },
34155
34156
34157             remove: function(entity) {
34158                 return this.update(function() {
34159                     this._updateCalculated(entity, undefined);
34160                     this.entities[entity.id] = undefined;
34161                 });
34162             },
34163
34164
34165             revert: function(id) {
34166                 var baseEntity = this.base().entities[id];
34167                 var headEntity = this.entities[id];
34168                 if (headEntity === baseEntity) return this;
34169
34170                 return this.update(function() {
34171                     this._updateCalculated(headEntity, baseEntity);
34172                     delete this.entities[id];
34173                 });
34174             },
34175
34176
34177             update: function() {
34178                 var graph = this.frozen ? coreGraph(this, true) : this;
34179                 for (var i = 0; i < arguments.length; i++) {
34180                     arguments[i].call(graph, graph);
34181                 }
34182
34183                 if (this.frozen) graph.frozen = true;
34184
34185                 return graph;
34186             },
34187
34188
34189             // Obliterates any existing entities
34190             load: function(entities) {
34191                 var base = this.base();
34192                 this.entities = Object.create(base.entities);
34193
34194                 for (var i in entities) {
34195                     this.entities[i] = entities[i];
34196                     this._updateCalculated(base.entities[i], this.entities[i]);
34197                 }
34198
34199                 return this;
34200             }
34201         };
34202
34203         function osmTurn(turn) {
34204             if (!(this instanceof osmTurn)) {
34205                 return new osmTurn(turn);
34206             }
34207             Object.assign(this, turn);
34208         }
34209
34210
34211         function osmIntersection(graph, startVertexId, maxDistance) {
34212             maxDistance = maxDistance || 30;    // in meters
34213             var vgraph = coreGraph();           // virtual graph
34214             var i, j, k;
34215
34216
34217             function memberOfRestriction(entity) {
34218                 return graph.parentRelations(entity)
34219                     .some(function(r) { return r.isRestriction(); });
34220             }
34221
34222             function isRoad(way) {
34223                 if (way.isArea() || way.isDegenerate()) return false;
34224                 var roads = {
34225                     'motorway': true,
34226                     'motorway_link': true,
34227                     'trunk': true,
34228                     'trunk_link': true,
34229                     'primary': true,
34230                     'primary_link': true,
34231                     'secondary': true,
34232                     'secondary_link': true,
34233                     'tertiary': true,
34234                     'tertiary_link': true,
34235                     'residential': true,
34236                     'unclassified': true,
34237                     'living_street': true,
34238                     'service': true,
34239                     'road': true,
34240                     'track': true
34241                 };
34242                 return roads[way.tags.highway];
34243             }
34244
34245
34246             var startNode = graph.entity(startVertexId);
34247             var checkVertices = [startNode];
34248             var checkWays;
34249             var vertices = [];
34250             var vertexIds = [];
34251             var vertex;
34252             var ways = [];
34253             var wayIds = [];
34254             var way;
34255             var nodes = [];
34256             var node;
34257             var parents = [];
34258             var parent;
34259
34260             // `actions` will store whatever actions must be performed to satisfy
34261             // preconditions for adding a turn restriction to this intersection.
34262             //  - Remove any existing degenerate turn restrictions (missing from/to, etc)
34263             //  - Reverse oneways so that they are drawn in the forward direction
34264             //  - Split ways on key vertices
34265             var actions = [];
34266
34267
34268             // STEP 1:  walk the graph outwards from starting vertex to search
34269             //  for more key vertices and ways to include in the intersection..
34270
34271             while (checkVertices.length) {
34272                 vertex = checkVertices.pop();
34273
34274                 // check this vertex for parent ways that are roads
34275                 checkWays = graph.parentWays(vertex);
34276                 var hasWays = false;
34277                 for (i = 0; i < checkWays.length; i++) {
34278                     way = checkWays[i];
34279                     if (!isRoad(way) && !memberOfRestriction(way)) continue;
34280
34281                     ways.push(way);   // it's a road, or it's already in a turn restriction
34282                     hasWays = true;
34283
34284                     // check the way's children for more key vertices
34285                     nodes = utilArrayUniq(graph.childNodes(way));
34286                     for (j = 0; j < nodes.length; j++) {
34287                         node = nodes[j];
34288                         if (node === vertex) continue;                                           // same thing
34289                         if (vertices.indexOf(node) !== -1) continue;                             // seen it already
34290                         if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) continue;   // too far from start
34291
34292                         // a key vertex will have parents that are also roads
34293                         var hasParents = false;
34294                         parents = graph.parentWays(node);
34295                         for (k = 0; k < parents.length; k++) {
34296                             parent = parents[k];
34297                             if (parent === way) continue;                 // same thing
34298                             if (ways.indexOf(parent) !== -1) continue;    // seen it already
34299                             if (!isRoad(parent)) continue;                // not a road
34300                             hasParents = true;
34301                             break;
34302                         }
34303
34304                         if (hasParents) {
34305                             checkVertices.push(node);
34306                         }
34307                     }
34308                 }
34309
34310                 if (hasWays) {
34311                     vertices.push(vertex);
34312                 }
34313             }
34314
34315             vertices = utilArrayUniq(vertices);
34316             ways = utilArrayUniq(ways);
34317
34318
34319             // STEP 2:  Build a virtual graph containing only the entities in the intersection..
34320             // Everything done after this step should act on the virtual graph
34321             // Any actions that must be performed later to the main graph go in `actions` array
34322             ways.forEach(function(way) {
34323                 graph.childNodes(way).forEach(function(node) {
34324                     vgraph = vgraph.replace(node);
34325                 });
34326
34327                 vgraph = vgraph.replace(way);
34328
34329                 graph.parentRelations(way).forEach(function(relation) {
34330                     if (relation.isRestriction()) {
34331                         if (relation.isValidRestriction(graph)) {
34332                             vgraph = vgraph.replace(relation);
34333                         } else if (relation.isComplete(graph)) {
34334                             actions.push(actionDeleteRelation(relation.id));
34335                         }
34336                     }
34337                 });
34338             });
34339
34340
34341             // STEP 3:  Force all oneways to be drawn in the forward direction
34342             ways.forEach(function(w) {
34343                 var way = vgraph.entity(w.id);
34344                 if (way.tags.oneway === '-1') {
34345                     var action = actionReverse(way.id, { reverseOneway: true });
34346                     actions.push(action);
34347                     vgraph = action(vgraph);
34348                 }
34349             });
34350
34351
34352             // STEP 4:  Split ways on key vertices
34353             var origCount = osmEntity.id.next.way;
34354             vertices.forEach(function(v) {
34355                 // This is an odd way to do it, but we need to find all the ways that
34356                 // will be split here, then split them one at a time to ensure that these
34357                 // actions can be replayed on the main graph exactly in the same order.
34358                 // (It is unintuitive, but the order of ways returned from graph.parentWays()
34359                 // is arbitrary, depending on how the main graph and vgraph were built)
34360                 var splitAll = actionSplit(v.id);
34361                 if (!splitAll.disabled(vgraph)) {
34362                     splitAll.ways(vgraph).forEach(function(way) {
34363                         var splitOne = actionSplit(v.id).limitWays([way.id]);
34364                         actions.push(splitOne);
34365                         vgraph = splitOne(vgraph);
34366                     });
34367                 }
34368             });
34369
34370             // In here is where we should also split the intersection at nearby junction.
34371             //   for https://github.com/mapbox/iD-internal/issues/31
34372             // nearbyVertices.forEach(function(v) {
34373             // });
34374
34375             // Reasons why we reset the way id count here:
34376             //  1. Continuity with way ids created by the splits so that we can replay
34377             //     these actions later if the user decides to create a turn restriction
34378             //  2. Avoids churning way ids just by hovering over a vertex
34379             //     and displaying the turn restriction editor
34380             osmEntity.id.next.way = origCount;
34381
34382
34383             // STEP 5:  Update arrays to point to vgraph entities
34384             vertexIds = vertices.map(function(v) { return v.id; });
34385             vertices = [];
34386             ways = [];
34387
34388             vertexIds.forEach(function(id) {
34389                 var vertex = vgraph.entity(id);
34390                 var parents = vgraph.parentWays(vertex);
34391                 vertices.push(vertex);
34392                 ways = ways.concat(parents);
34393             });
34394
34395             vertices = utilArrayUniq(vertices);
34396             ways = utilArrayUniq(ways);
34397
34398             vertexIds = vertices.map(function(v) { return v.id; });
34399             wayIds = ways.map(function(w) { return w.id; });
34400
34401
34402             // STEP 6:  Update the ways with some metadata that will be useful for
34403             // walking the intersection graph later and rendering turn arrows.
34404
34405             function withMetadata(way, vertexIds) {
34406                 var __oneWay = way.isOneWay();
34407
34408                 // which affixes are key vertices?
34409                 var __first = (vertexIds.indexOf(way.first()) !== -1);
34410                 var __last = (vertexIds.indexOf(way.last()) !== -1);
34411
34412                 // what roles is this way eligible for?
34413                 var __via = (__first && __last);
34414                 var __from = ((__first && !__oneWay) || __last);
34415                 var __to = (__first || (__last && !__oneWay));
34416
34417                 return way.update({
34418                     __first:  __first,
34419                     __last:  __last,
34420                     __from:  __from,
34421                     __via: __via,
34422                     __to:  __to,
34423                     __oneWay:  __oneWay
34424                 });
34425             }
34426
34427             ways = [];
34428             wayIds.forEach(function(id) {
34429                 var way = withMetadata(vgraph.entity(id), vertexIds);
34430                 vgraph = vgraph.replace(way);
34431                 ways.push(way);
34432             });
34433
34434
34435             // STEP 7:  Simplify - This is an iterative process where we:
34436             //  1. Find trivial vertices with only 2 parents
34437             //  2. trim off the leaf way from those vertices and remove from vgraph
34438
34439             var keepGoing;
34440             var removeWayIds = [];
34441             var removeVertexIds = [];
34442
34443             do {
34444                 keepGoing = false;
34445                 checkVertices = vertexIds.slice();
34446
34447                 for (i = 0; i < checkVertices.length; i++) {
34448                     var vertexId = checkVertices[i];
34449                     vertex = vgraph.hasEntity(vertexId);
34450
34451                     if (!vertex) {
34452                         if (vertexIds.indexOf(vertexId) !== -1) {
34453                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34454                         }
34455                         removeVertexIds.push(vertexId);
34456                         continue;
34457                     }
34458
34459                     parents = vgraph.parentWays(vertex);
34460                     if (parents.length < 3) {
34461                         if (vertexIds.indexOf(vertexId) !== -1) {
34462                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34463                         }
34464                     }
34465
34466                     if (parents.length === 2) {     // vertex with 2 parents is trivial
34467                         var a = parents[0];
34468                         var b = parents[1];
34469                         var aIsLeaf = a && !a.__via;
34470                         var bIsLeaf = b && !b.__via;
34471                         var leaf, survivor;
34472
34473                         if (aIsLeaf && !bIsLeaf) {
34474                             leaf = a;
34475                             survivor = b;
34476                         } else if (!aIsLeaf && bIsLeaf) {
34477                             leaf = b;
34478                             survivor = a;
34479                         }
34480
34481                         if (leaf && survivor) {
34482                             survivor = withMetadata(survivor, vertexIds);      // update survivor way
34483                             vgraph = vgraph.replace(survivor).remove(leaf);    // update graph
34484                             removeWayIds.push(leaf.id);
34485                             keepGoing = true;
34486                         }
34487                     }
34488
34489                     parents = vgraph.parentWays(vertex);
34490
34491                     if (parents.length < 2) {     // vertex is no longer a key vertex
34492                         if (vertexIds.indexOf(vertexId) !== -1) {
34493                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
34494                         }
34495                         removeVertexIds.push(vertexId);
34496                         keepGoing = true;
34497                     }
34498
34499                     if (parents.length < 1) {     // vertex is no longer attached to anything
34500                         vgraph = vgraph.remove(vertex);
34501                     }
34502
34503                 }
34504             } while (keepGoing);
34505
34506
34507             vertices = vertices
34508                 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
34509                 .map(function(vertex) { return vgraph.entity(vertex.id); });
34510             ways = ways
34511                 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
34512                 .map(function(way) { return vgraph.entity(way.id); });
34513
34514
34515             // OK!  Here is our intersection..
34516             var intersection = {
34517                 graph: vgraph,
34518                 actions: actions,
34519                 vertices: vertices,
34520                 ways: ways,
34521             };
34522
34523
34524
34525             // Get all the valid turns through this intersection given a starting way id.
34526             // This operates on the virtual graph for everything.
34527             //
34528             // Basically, walk through all possible paths from starting way,
34529             //   honoring the existing turn restrictions as we go (watch out for loops!)
34530             //
34531             // For each path found, generate and return a `osmTurn` datastructure.
34532             //
34533             intersection.turns = function(fromWayId, maxViaWay) {
34534                 if (!fromWayId) return [];
34535                 if (!maxViaWay) maxViaWay = 0;
34536
34537                 var vgraph = intersection.graph;
34538                 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
34539
34540                 var start = vgraph.entity(fromWayId);
34541                 if (!start || !(start.__from || start.__via)) return [];
34542
34543                 // maxViaWay=0   from-*-to              (0 vias)
34544                 // maxViaWay=1   from-*-via-*-to        (1 via max)
34545                 // maxViaWay=2   from-*-via-*-via-*-to  (2 vias max)
34546                 var maxPathLength = (maxViaWay * 2) + 3;
34547                 var turns = [];
34548
34549                 step(start);
34550                 return turns;
34551
34552
34553                 // traverse the intersection graph and find all the valid paths
34554                 function step(entity, currPath, currRestrictions, matchedRestriction) {
34555                     currPath = (currPath || []).slice();  // shallow copy
34556                     if (currPath.length >= maxPathLength) return;
34557                     currPath.push(entity.id);
34558                     currRestrictions = (currRestrictions || []).slice();  // shallow copy
34559                     var i, j;
34560
34561                     if (entity.type === 'node') {
34562                         var parents = vgraph.parentWays(entity);
34563                         var nextWays = [];
34564
34565                         // which ways can we step into?
34566                         for (i = 0; i < parents.length; i++) {
34567                             var way = parents[i];
34568
34569                             // if next way is a oneway incoming to this vertex, skip
34570                             if (way.__oneWay && way.nodes[0] !== entity.id) continue;
34571
34572                             // if we have seen it before (allowing for an initial u-turn), skip
34573                             if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) continue;
34574
34575                             // Check all "current" restrictions (where we've already walked the `FROM`)
34576                             var restrict = undefined;
34577                             for (j = 0; j < currRestrictions.length; j++) {
34578                                 var restriction = currRestrictions[j];
34579                                 var f = restriction.memberByRole('from');
34580                                 var v = restriction.membersByRole('via');
34581                                 var t = restriction.memberByRole('to');
34582                                 var isOnly = /^only_/.test(restriction.tags.restriction);
34583
34584                                 // Does the current path match this turn restriction?
34585                                 var matchesFrom = (f.id === fromWayId);
34586                                 var matchesViaTo = false;
34587                                 var isAlongOnlyPath = false;
34588
34589                                 if (t.id === way.id) {     // match TO
34590
34591                                     if (v.length === 1 && v[0].type === 'node') {    // match VIA node
34592                                         matchesViaTo = (v[0].id === entity.id && (
34593                                             (matchesFrom && currPath.length === 2) ||
34594                                             (!matchesFrom && currPath.length > 2)
34595                                         ));
34596
34597                                     } else {                                         // match all VIA ways
34598                                         var pathVias = [];
34599                                         for (k = 2; k < currPath.length; k +=2 ) {   // k = 2 skips FROM
34600                                             pathVias.push(currPath[k]);              // (path goes way-node-way...)
34601                                         }
34602                                         var restrictionVias = [];
34603                                         for (k = 0; k < v.length; k++) {
34604                                             if (v[k].type === 'way') {
34605                                                 restrictionVias.push(v[k].id);
34606                                             }
34607                                         }
34608                                         var diff = utilArrayDifference(pathVias, restrictionVias);
34609                                         matchesViaTo = !diff.length;
34610                                     }
34611
34612                                 } else if (isOnly) {
34613                                     for (k = 0; k < v.length; k++) {
34614                                         // way doesn't match TO, but is one of the via ways along the path of an "only"
34615                                         if (v[k].type === 'way' && v[k].id === way.id) {
34616                                             isAlongOnlyPath = true;
34617                                             break;
34618                                         }
34619                                     }
34620                                 }
34621
34622                                 if (matchesViaTo) {
34623                                     if (isOnly) {
34624                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
34625                                     } else {
34626                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
34627                                     }
34628                                 } else {    // indirect - caused by a different nearby restriction
34629                                     if (isAlongOnlyPath) {
34630                                         restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
34631                                     } else if (isOnly) {
34632                                         restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
34633                                     }
34634                                 }
34635
34636                                 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
34637                                 if (restrict && restrict.direct)
34638                                     break;
34639                             }
34640
34641                             nextWays.push({ way: way, restrict: restrict });
34642                         }
34643
34644                         nextWays.forEach(function(nextWay) {
34645                             step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
34646                         });
34647
34648
34649                     } else {  // entity.type === 'way'
34650                         if (currPath.length >= 3) {     // this is a "complete" path..
34651                             var turnPath = currPath.slice();   // shallow copy
34652
34653                             // an indirect restriction - only include the partial path (starting at FROM)
34654                             if (matchedRestriction && matchedRestriction.direct === false) {
34655                                 for (i = 0; i < turnPath.length; i++) {
34656                                     if (turnPath[i] === matchedRestriction.from) {
34657                                         turnPath = turnPath.slice(i);
34658                                         break;
34659                                     }
34660                                 }
34661                             }
34662
34663                             var turn = pathToTurn(turnPath);
34664                             if (turn) {
34665                                 if (matchedRestriction) {
34666                                     turn.restrictionID = matchedRestriction.id;
34667                                     turn.no = matchedRestriction.no;
34668                                     turn.only = matchedRestriction.only;
34669                                     turn.direct = matchedRestriction.direct;
34670                                 }
34671                                 turns.push(osmTurn(turn));
34672                             }
34673
34674                             if (currPath[0] === currPath[2]) return;   // if we made a u-turn - stop here
34675                         }
34676
34677                         if (matchedRestriction && matchedRestriction.end) return;  // don't advance any further
34678
34679                         // which nodes can we step into?
34680                         var n1 = vgraph.entity(entity.first());
34681                         var n2 = vgraph.entity(entity.last());
34682                         var dist = geoSphericalDistance(n1.loc, n2.loc);
34683                         var nextNodes = [];
34684
34685                         if (currPath.length > 1) {
34686                             if (dist > maxDistance) return;   // the next node is too far
34687                             if (!entity.__via) return;        // this way is a leaf / can't be a via
34688                         }
34689
34690                         if (!entity.__oneWay &&                     // bidirectional..
34691                             keyVertexIds.indexOf(n1.id) !== -1 &&   // key vertex..
34692                             currPath.indexOf(n1.id) === -1) {       // haven't seen it yet..
34693                             nextNodes.push(n1);                     // can advance to first node
34694                         }
34695                         if (keyVertexIds.indexOf(n2.id) !== -1 &&   // key vertex..
34696                             currPath.indexOf(n2.id) === -1) {       // haven't seen it yet..
34697                             nextNodes.push(n2);                     // can advance to last node
34698                         }
34699
34700                         nextNodes.forEach(function(nextNode) {
34701                             // gather restrictions FROM this way
34702                             var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
34703                                 if (!r.isRestriction()) return false;
34704
34705                                 var f = r.memberByRole('from');
34706                                 if (!f || f.id !== entity.id) return false;
34707
34708                                 var isOnly = /^only_/.test(r.tags.restriction);
34709                                 if (!isOnly) return true;
34710
34711                                 // `only_` restrictions only matter along the direction of the VIA - #4849
34712                                 var isOnlyVia = false;
34713                                 var v = r.membersByRole('via');
34714                                 if (v.length === 1 && v[0].type === 'node') {   // via node
34715                                     isOnlyVia = (v[0].id === nextNode.id);
34716                                 } else {                                        // via way(s)
34717                                     for (var i = 0; i < v.length; i++) {
34718                                         if (v[i].type !== 'way') continue;
34719                                         var viaWay = vgraph.entity(v[i].id);
34720                                         if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
34721                                             isOnlyVia = true;
34722                                             break;
34723                                         }
34724                                     }
34725                                 }
34726                                 return isOnlyVia;
34727                             });
34728
34729                             step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
34730                         });
34731                     }
34732                 }
34733
34734
34735                 // assumes path is alternating way-node-way of odd length
34736                 function pathToTurn(path) {
34737                     if (path.length < 3) return;
34738                     var fromWayId, fromNodeId, fromVertexId;
34739                     var toWayId, toNodeId, toVertexId;
34740                     var viaWayIds, viaNodeId, isUturn;
34741
34742                     fromWayId = path[0];
34743                     toWayId = path[path.length - 1];
34744
34745                     if (path.length === 3 && fromWayId === toWayId) {  // u turn
34746                         var way = vgraph.entity(fromWayId);
34747                         if (way.__oneWay) return null;
34748
34749                         isUturn = true;
34750                         viaNodeId = fromVertexId = toVertexId = path[1];
34751                         fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
34752
34753                     } else {
34754                         isUturn = false;
34755                         fromVertexId = path[1];
34756                         fromNodeId = adjacentNode(fromWayId, fromVertexId);
34757                         toVertexId = path[path.length - 2];
34758                         toNodeId = adjacentNode(toWayId, toVertexId);
34759
34760                         if (path.length === 3) {
34761                             viaNodeId = path[1];
34762                         } else {
34763                             viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
34764                             viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);  // remove first, last
34765                         }
34766                     }
34767
34768                     return {
34769                         key:  path.join('_'),
34770                         path: path,
34771                         from: { node: fromNodeId, way:  fromWayId, vertex: fromVertexId },
34772                         via:  { node: viaNodeId,  ways: viaWayIds },
34773                         to:   { node: toNodeId,   way:  toWayId, vertex: toVertexId },
34774                         u:    isUturn
34775                     };
34776
34777
34778                     function adjacentNode(wayId, affixId) {
34779                         var nodes = vgraph.entity(wayId).nodes;
34780                         return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
34781                     }
34782                 }
34783
34784             };
34785
34786             return intersection;
34787         }
34788
34789
34790         function osmInferRestriction(graph, turn, projection) {
34791             var fromWay = graph.entity(turn.from.way);
34792             var fromNode = graph.entity(turn.from.node);
34793             var fromVertex = graph.entity(turn.from.vertex);
34794             var toWay = graph.entity(turn.to.way);
34795             var toNode = graph.entity(turn.to.node);
34796             var toVertex = graph.entity(turn.to.vertex);
34797
34798             var fromOneWay = (fromWay.tags.oneway === 'yes');
34799             var toOneWay = (toWay.tags.oneway === 'yes');
34800             var angle = (geoAngle(fromVertex, fromNode, projection) -
34801                         geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
34802
34803             while (angle < 0)
34804                 angle += 360;
34805
34806             if (fromNode === toNode)
34807                 return 'no_u_turn';
34808             if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
34809                 return 'no_u_turn';   // wider tolerance for u-turn if both ways are oneway
34810             if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
34811                 return 'no_u_turn';   // even wider tolerance for u-turn if there is a via way (from !== to)
34812             if (angle < 158)
34813                 return 'no_right_turn';
34814             if (angle > 202)
34815                 return 'no_left_turn';
34816
34817             return 'no_straight_on';
34818         }
34819
34820         function actionMergePolygon(ids, newRelationId) {
34821
34822             function groupEntities(graph) {
34823                 var entities = ids.map(function (id) { return graph.entity(id); });
34824                 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
34825                     if (entity.type === 'way' && entity.isClosed()) {
34826                         return 'closedWay';
34827                     } else if (entity.type === 'relation' && entity.isMultipolygon()) {
34828                         return 'multipolygon';
34829                     } else {
34830                         return 'other';
34831                     }
34832                 });
34833
34834                 return Object.assign(
34835                     { closedWay: [], multipolygon: [], other: [] },
34836                     geometryGroups
34837                 );
34838             }
34839
34840
34841             var action = function(graph) {
34842                 var entities = groupEntities(graph);
34843
34844                 // An array representing all the polygons that are part of the multipolygon.
34845                 //
34846                 // Each element is itself an array of objects with an id property, and has a
34847                 // locs property which is an array of the locations forming the polygon.
34848                 var polygons = entities.multipolygon.reduce(function(polygons, m) {
34849                     return polygons.concat(osmJoinWays(m.members, graph));
34850                 }, []).concat(entities.closedWay.map(function(d) {
34851                     var member = [{id: d.id}];
34852                     member.nodes = graph.childNodes(d);
34853                     return member;
34854                 }));
34855
34856                 // contained is an array of arrays of boolean values,
34857                 // where contained[j][k] is true iff the jth way is
34858                 // contained by the kth way.
34859                 var contained = polygons.map(function(w, i) {
34860                     return polygons.map(function(d, n) {
34861                         if (i === n) return null;
34862                         return geoPolygonContainsPolygon(
34863                             d.nodes.map(function(n) { return n.loc; }),
34864                             w.nodes.map(function(n) { return n.loc; })
34865                         );
34866                     });
34867                 });
34868
34869                 // Sort all polygons as either outer or inner ways
34870                 var members = [];
34871                 var outer = true;
34872
34873                 while (polygons.length) {
34874                     extractUncontained(polygons);
34875                     polygons = polygons.filter(isContained);
34876                     contained = contained.filter(isContained).map(filterContained);
34877                 }
34878
34879                 function isContained(d, i) {
34880                     return contained[i].some(function(val) { return val; });
34881                 }
34882
34883                 function filterContained(d) {
34884                     return d.filter(isContained);
34885                 }
34886
34887                 function extractUncontained(polygons) {
34888                     polygons.forEach(function(d, i) {
34889                         if (!isContained(d, i)) {
34890                             d.forEach(function(member) {
34891                                 members.push({
34892                                     type: 'way',
34893                                     id: member.id,
34894                                     role: outer ? 'outer' : 'inner'
34895                                 });
34896                             });
34897                         }
34898                     });
34899                     outer = !outer;
34900                 }
34901
34902                 // Move all tags to one relation
34903                 var relation = entities.multipolygon[0] ||
34904                     osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
34905
34906                 entities.multipolygon.slice(1).forEach(function(m) {
34907                     relation = relation.mergeTags(m.tags);
34908                     graph = graph.remove(m);
34909                 });
34910
34911                 entities.closedWay.forEach(function(way) {
34912                     function isThisOuter(m) {
34913                         return m.id === way.id && m.role !== 'inner';
34914                     }
34915                     if (members.some(isThisOuter)) {
34916                         relation = relation.mergeTags(way.tags);
34917                         graph = graph.replace(way.update({ tags: {} }));
34918                     }
34919                 });
34920
34921                 return graph.replace(relation.update({
34922                     members: members,
34923                     tags: utilObjectOmit(relation.tags, ['area'])
34924                 }));
34925             };
34926
34927
34928             action.disabled = function(graph) {
34929                 var entities = groupEntities(graph);
34930                 if (entities.other.length > 0 ||
34931                     entities.closedWay.length + entities.multipolygon.length < 2)
34932                     return 'not_eligible';
34933                 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
34934                     return 'incomplete_relation';
34935             };
34936
34937
34938             return action;
34939         }
34940
34941         var isArray$3 = Array.isArray;
34942         var keyList = Object.keys;
34943         var hasProp = Object.prototype.hasOwnProperty;
34944
34945         var fastDeepEqual = function equal(a, b) {
34946           if (a === b) return true;
34947
34948           if (a && b && typeof a == 'object' && typeof b == 'object') {
34949             var arrA = isArray$3(a)
34950               , arrB = isArray$3(b)
34951               , i
34952               , length
34953               , key;
34954
34955             if (arrA && arrB) {
34956               length = a.length;
34957               if (length != b.length) return false;
34958               for (i = length; i-- !== 0;)
34959                 if (!equal(a[i], b[i])) return false;
34960               return true;
34961             }
34962
34963             if (arrA != arrB) return false;
34964
34965             var dateA = a instanceof Date
34966               , dateB = b instanceof Date;
34967             if (dateA != dateB) return false;
34968             if (dateA && dateB) return a.getTime() == b.getTime();
34969
34970             var regexpA = a instanceof RegExp
34971               , regexpB = b instanceof RegExp;
34972             if (regexpA != regexpB) return false;
34973             if (regexpA && regexpB) return a.toString() == b.toString();
34974
34975             var keys = keyList(a);
34976             length = keys.length;
34977
34978             if (length !== keyList(b).length)
34979               return false;
34980
34981             for (i = length; i-- !== 0;)
34982               if (!hasProp.call(b, keys[i])) return false;
34983
34984             for (i = length; i-- !== 0;) {
34985               key = keys[i];
34986               if (!equal(a[key], b[key])) return false;
34987             }
34988
34989             return true;
34990           }
34991
34992           return a!==a && b!==b;
34993         };
34994
34995         // Text diff algorithm following Hunt and McIlroy 1976.
34996         // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
34997         // comparison, Bell Telephone Laboratories CSTR #41 (1976)
34998         // http://www.cs.dartmouth.edu/~doug/
34999         //
35000         // Expects two arrays of strings.
35001         function LCS(file1, file2) {
35002           var equivalenceClasses;
35003           var file2indices;
35004           var newCandidate;
35005           var candidates;
35006           var line;
35007           var c, i, j, jX, r, s;
35008
35009           equivalenceClasses = {};
35010           for (j = 0; j < file2.length; j++) {
35011             line = file2[j];
35012             if (equivalenceClasses[line]) {
35013               equivalenceClasses[line].push(j);
35014             } else {
35015               equivalenceClasses[line] = [j];
35016             }
35017           }
35018
35019           candidates = [
35020             { file1index: -1, file2index: -1, chain: null }
35021           ];
35022
35023           for (i = 0; i < file1.length; i++) {
35024             line = file1[i];
35025             file2indices = equivalenceClasses[line] || [];
35026
35027             r = 0;
35028             c = candidates[0];
35029
35030             for (jX = 0; jX < file2indices.length; jX++) {
35031               j = file2indices[jX];
35032
35033               for (s = r; s < candidates.length; s++) {
35034                 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
35035                   break;
35036                 }
35037               }
35038
35039               if (s < candidates.length) {
35040                 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
35041                 if (r === candidates.length) {
35042                   candidates.push(c);
35043                 } else {
35044                   candidates[r] = c;
35045                 }
35046                 r = s + 1;
35047                 c = newCandidate;
35048                 if (r === candidates.length) {
35049                   break; // no point in examining further (j)s
35050                 }
35051               }
35052             }
35053
35054             candidates[r] = c;
35055           }
35056
35057           // At this point, we know the LCS: it's in the reverse of the
35058           // linked-list through .chain of candidates[candidates.length - 1].
35059
35060           return candidates[candidates.length - 1];
35061         }
35062
35063
35064         // We apply the LCS to give a simple representation of the
35065         // offsets and lengths of mismatched chunks in the input
35066         // files. This is used by diff3MergeIndices below.
35067         function diffIndices(file1, file2) {
35068           var result = [];
35069           var tail1 = file1.length;
35070           var tail2 = file2.length;
35071
35072           for (var candidate = LCS(file1, file2);
35073              candidate !== null;
35074              candidate = candidate.chain)
35075           {
35076             var mismatchLength1 = tail1 - candidate.file1index - 1;
35077             var mismatchLength2 = tail2 - candidate.file2index - 1;
35078             tail1 = candidate.file1index;
35079             tail2 = candidate.file2index;
35080
35081             if (mismatchLength1 || mismatchLength2) {
35082               result.push({
35083                 file1: [tail1 + 1, mismatchLength1],
35084                 file2: [tail2 + 1, mismatchLength2]
35085               });
35086             }
35087           }
35088
35089           result.reverse();
35090           return result;
35091         }
35092
35093
35094         // Given three files, A, O, and B, where both A and B are
35095         // independently derived from O, returns a fairly complicated
35096         // internal representation of merge decisions it's taken. The
35097         // interested reader may wish to consult
35098         //
35099         // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
35100         // 'A Formal Investigation of ' In Arvind and Prasad,
35101         // editors, Foundations of Software Technology and Theoretical
35102         // Computer Science (FSTTCS), December 2007.
35103         //
35104         // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
35105         function diff3MergeIndices(a, o, b) {
35106           var i;
35107           var m1 = diffIndices(o, a);
35108           var m2 = diffIndices(o, b);
35109
35110           var hunks = [];
35111           function addHunk(h, side) {
35112             hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
35113           }
35114           for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
35115           for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
35116           hunks.sort(function (x, y) { return x[0] - y[0]; });
35117
35118           var result = [];
35119           var commonOffset = 0;
35120           function copyCommon(targetOffset) {
35121             if (targetOffset > commonOffset) {
35122               result.push([1, commonOffset, targetOffset - commonOffset]);
35123               commonOffset = targetOffset;
35124             }
35125           }
35126
35127           for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
35128             var firstHunkIndex = hunkIndex;
35129             var hunk = hunks[hunkIndex];
35130             var regionLhs = hunk[0];
35131             var regionRhs = regionLhs + hunk[2];
35132             while (hunkIndex < hunks.length - 1) {
35133               var maybeOverlapping = hunks[hunkIndex + 1];
35134               var maybeLhs = maybeOverlapping[0];
35135               if (maybeLhs > regionRhs) {
35136                 break;
35137               }
35138               regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
35139               hunkIndex++;
35140             }
35141
35142             copyCommon(regionLhs);
35143             if (firstHunkIndex === hunkIndex) {
35144               // The 'overlap' was only one hunk long, meaning that
35145               // there's no conflict here. Either a and o were the
35146               // same, or b and o were the same.
35147               if (hunk[4] > 0) {
35148                 result.push([hunk[1], hunk[3], hunk[4]]);
35149               }
35150             } else {
35151               // A proper conflict. Determine the extents of the
35152               // regions involved from a, o and b. Effectively merge
35153               // all the hunks on the left into one giant hunk, and
35154               // do the same for the right; then, correct for skew
35155               // in the regions of o that each side changed, and
35156               // report appropriate spans for the three sides.
35157               var regions = {
35158                 0: [a.length, -1, o.length, -1],
35159                 2: [b.length, -1, o.length, -1]
35160               };
35161               for (i = firstHunkIndex; i <= hunkIndex; i++) {
35162                 hunk = hunks[i];
35163                 var side = hunk[1];
35164                 var r = regions[side];
35165                 var oLhs = hunk[0];
35166                 var oRhs = oLhs + hunk[2];
35167                 var abLhs = hunk[3];
35168                 var abRhs = abLhs + hunk[4];
35169                 r[0] = Math.min(abLhs, r[0]);
35170                 r[1] = Math.max(abRhs, r[1]);
35171                 r[2] = Math.min(oLhs, r[2]);
35172                 r[3] = Math.max(oRhs, r[3]);
35173               }
35174               var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
35175               var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
35176               var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
35177               var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
35178               result.push([-1,
35179                            aLhs,      aRhs      - aLhs,
35180                            regionLhs, regionRhs - regionLhs,
35181                            bLhs,      bRhs      - bLhs]);
35182             }
35183             commonOffset = regionRhs;
35184           }
35185
35186           copyCommon(o.length);
35187           return result;
35188         }
35189
35190
35191         // Applies the output of diff3MergeIndices to actually
35192         // construct the merged file; the returned result alternates
35193         // between 'ok' and 'conflict' blocks.
35194         function diff3Merge(a, o, b, excludeFalseConflicts) {
35195           var result = [];
35196           var files = [a, o, b];
35197           var indices = diff3MergeIndices(a, o, b);
35198
35199           var okLines = [];
35200           function flushOk() {
35201             if (okLines.length) {
35202               result.push({ok: okLines});
35203             }
35204             okLines = [];
35205           }
35206           function pushOk(xs) {
35207             for (var j = 0; j < xs.length; j++) {
35208               okLines.push(xs[j]);
35209             }
35210           }
35211
35212           function isTrueConflict(rec) {
35213             if (rec[2] !== rec[6]) return true;
35214             var aoff = rec[1];
35215             var boff = rec[5];
35216             for (var j = 0; j < rec[2]; j++) {
35217               if (a[j + aoff] !== b[j + boff]) {
35218                 return true;
35219               }
35220             }
35221             return false;
35222           }
35223
35224           for (var i = 0; i < indices.length; i++) {
35225             var x = indices[i];
35226             var side = x[0];
35227             if (side === -1) {
35228               if (excludeFalseConflicts && !isTrueConflict(x)) {
35229                 pushOk(files[0].slice(x[1], x[1] + x[2]));
35230               } else {
35231                 flushOk();
35232                 result.push({
35233                   conflict: {
35234                     a: a.slice(x[1], x[1] + x[2]),
35235                     aIndex: x[1],
35236                     o: o.slice(x[3], x[3] + x[4]),
35237                     oIndex: x[3],
35238                     b: b.slice(x[5], x[5] + x[6]),
35239                     bIndex: x[5]
35240                   }
35241                 });
35242               }
35243             } else {
35244               pushOk(files[side].slice(x[1], x[1] + x[2]));
35245             }
35246           }
35247
35248           flushOk();
35249           return result;
35250         }
35251
35252         function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
35253             var _option = 'safe';  // 'safe', 'force_local', 'force_remote'
35254             var _conflicts = [];
35255
35256
35257             function user(d) {
35258                 return (typeof formatUser === 'function') ? formatUser(d) : d;
35259             }
35260
35261
35262             function mergeLocation(remote, target) {
35263                 function pointEqual(a, b) {
35264                     var epsilon = 1e-6;
35265                     return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
35266                 }
35267
35268                 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
35269                     return target;
35270                 }
35271                 if (_option === 'force_remote') {
35272                     return target.update({loc: remote.loc});
35273                 }
35274
35275                 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
35276                 return target;
35277             }
35278
35279
35280             function mergeNodes(base, remote, target) {
35281                 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
35282                     return target;
35283                 }
35284                 if (_option === 'force_remote') {
35285                     return target.update({nodes: remote.nodes});
35286                 }
35287
35288                 var ccount = _conflicts.length;
35289                 var o = base.nodes || [];
35290                 var a = target.nodes || [];
35291                 var b = remote.nodes || [];
35292                 var nodes = [];
35293                 var hunks = diff3Merge(a, o, b, true);
35294
35295                 for (var i = 0; i < hunks.length; i++) {
35296                     var hunk = hunks[i];
35297                     if (hunk.ok) {
35298                         nodes.push.apply(nodes, hunk.ok);
35299                     } else {
35300                         // for all conflicts, we can assume c.a !== c.b
35301                         // because `diff3Merge` called with `true` option to exclude false conflicts..
35302                         var c = hunk.conflict;
35303                         if (fastDeepEqual(c.o, c.a)) {  // only changed remotely
35304                             nodes.push.apply(nodes, c.b);
35305                         } else if (fastDeepEqual(c.o, c.b)) {  // only changed locally
35306                             nodes.push.apply(nodes, c.a);
35307                         } else {       // changed both locally and remotely
35308                             _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
35309                             break;
35310                         }
35311                     }
35312                 }
35313
35314                 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
35315             }
35316
35317
35318             function mergeChildren(targetWay, children, updates, graph) {
35319                 function isUsed(node, targetWay) {
35320                     var hasInterestingParent = graph.parentWays(node)
35321                         .some(function(way) { return way.id !== targetWay.id; });
35322
35323                     return node.hasInterestingTags() ||
35324                         hasInterestingParent ||
35325                         graph.parentRelations(node).length > 0;
35326                 }
35327
35328                 var ccount = _conflicts.length;
35329
35330                 for (var i = 0; i < children.length; i++) {
35331                     var id = children[i];
35332                     var node = graph.hasEntity(id);
35333
35334                     // remove unused childNodes..
35335                     if (targetWay.nodes.indexOf(id) === -1) {
35336                         if (node && !isUsed(node, targetWay)) {
35337                             updates.removeIds.push(id);
35338                         }
35339                         continue;
35340                     }
35341
35342                     // restore used childNodes..
35343                     var local = localGraph.hasEntity(id);
35344                     var remote = remoteGraph.hasEntity(id);
35345                     var target;
35346
35347                     if (_option === 'force_remote' && remote && remote.visible) {
35348                         updates.replacements.push(remote);
35349
35350                     } else if (_option === 'force_local' && local) {
35351                         target = osmEntity(local);
35352                         if (remote) {
35353                             target = target.update({ version: remote.version });
35354                         }
35355                         updates.replacements.push(target);
35356
35357                     } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
35358                         target = osmEntity(local, { version: remote.version });
35359                         if (remote.visible) {
35360                             target = mergeLocation(remote, target);
35361                         } else {
35362                             _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35363                         }
35364
35365                         if (_conflicts.length !== ccount) break;
35366                         updates.replacements.push(target);
35367                     }
35368                 }
35369
35370                 return targetWay;
35371             }
35372
35373
35374             function updateChildren(updates, graph) {
35375                 for (var i = 0; i < updates.replacements.length; i++) {
35376                     graph = graph.replace(updates.replacements[i]);
35377                 }
35378                 if (updates.removeIds.length) {
35379                     graph = actionDeleteMultiple(updates.removeIds)(graph);
35380                 }
35381                 return graph;
35382             }
35383
35384
35385             function mergeMembers(remote, target) {
35386                 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
35387                     return target;
35388                 }
35389                 if (_option === 'force_remote') {
35390                     return target.update({members: remote.members});
35391                 }
35392
35393                 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
35394                 return target;
35395             }
35396
35397
35398             function mergeTags(base, remote, target) {
35399                 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
35400                     return target;
35401                 }
35402                 if (_option === 'force_remote') {
35403                     return target.update({tags: remote.tags});
35404                 }
35405
35406                 var ccount = _conflicts.length;
35407                 var o = base.tags || {};
35408                 var a = target.tags || {};
35409                 var b = remote.tags || {};
35410                 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
35411                     .filter(function(k) { return !dataDiscarded[k]; });
35412                 var tags = Object.assign({}, a);   // shallow copy
35413                 var changed = false;
35414
35415                 for (var i = 0; i < keys.length; i++) {
35416                     var k = keys[i];
35417
35418                     if (o[k] !== b[k] && a[k] !== b[k]) {    // changed remotely..
35419                         if (o[k] !== a[k]) {      // changed locally..
35420                             _conflicts.push(t('merge_remote_changes.conflict.tags',
35421                                 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
35422
35423                         } else {                  // unchanged locally, accept remote change..
35424                             if (b.hasOwnProperty(k)) {
35425                                 tags[k] = b[k];
35426                             } else {
35427                                 delete tags[k];
35428                             }
35429                             changed = true;
35430                         }
35431                     }
35432                 }
35433
35434                 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
35435             }
35436
35437
35438             //  `graph.base()` is the common ancestor of the two graphs.
35439             //  `localGraph` contains user's edits up to saving
35440             //  `remoteGraph` contains remote edits to modified nodes
35441             //  `graph` must be a descendent of `localGraph` and may include
35442             //      some conflict resolution actions performed on it.
35443             //
35444             //                  --- ... --- `localGraph` -- ... -- `graph`
35445             //                 /
35446             //  `graph.base()` --- ... --- `remoteGraph`
35447             //
35448             var action = function(graph) {
35449                 var updates = { replacements: [], removeIds: [] };
35450                 var base = graph.base().entities[id];
35451                 var local = localGraph.entity(id);
35452                 var remote = remoteGraph.entity(id);
35453                 var target = osmEntity(local, { version: remote.version });
35454
35455                 // delete/undelete
35456                 if (!remote.visible) {
35457                     if (_option === 'force_remote') {
35458                         return actionDeleteMultiple([id])(graph);
35459
35460                     } else if (_option === 'force_local') {
35461                         if (target.type === 'way') {
35462                             target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
35463                             graph = updateChildren(updates, graph);
35464                         }
35465                         return graph.replace(target);
35466
35467                     } else {
35468                         _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
35469                         return graph;  // do nothing
35470                     }
35471                 }
35472
35473                 // merge
35474                 if (target.type === 'node') {
35475                     target = mergeLocation(remote, target);
35476
35477                 } else if (target.type === 'way') {
35478                     // pull in any child nodes that may not be present locally..
35479                     graph.rebase(remoteGraph.childNodes(remote), [graph], false);
35480                     target = mergeNodes(base, remote, target);
35481                     target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
35482
35483                 } else if (target.type === 'relation') {
35484                     target = mergeMembers(remote, target);
35485                 }
35486
35487                 target = mergeTags(base, remote, target);
35488
35489                 if (!_conflicts.length) {
35490                     graph = updateChildren(updates, graph).replace(target);
35491                 }
35492
35493                 return graph;
35494             };
35495
35496
35497             action.withOption = function(opt) {
35498                 _option = opt;
35499                 return action;
35500             };
35501
35502
35503             action.conflicts = function() {
35504                 return _conflicts;
35505             };
35506
35507
35508             return action;
35509         }
35510
35511         // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
35512         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
35513         function actionMove(moveIDs, tryDelta, projection, cache) {
35514             var _delta = tryDelta;
35515
35516             function setupCache(graph) {
35517                 function canMove(nodeID) {
35518                     // Allow movement of any node that is in the selectedIDs list..
35519                     if (moveIDs.indexOf(nodeID) !== -1) return true;
35520
35521                     // Allow movement of a vertex where 2 ways meet..
35522                     var parents = graph.parentWays(graph.entity(nodeID));
35523                     if (parents.length < 3) return true;
35524
35525                     // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
35526                     var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
35527                     if (!parentsMoving) delete cache.moving[nodeID];
35528
35529                     return parentsMoving;
35530                 }
35531
35532                 function cacheEntities(ids) {
35533                     for (var i = 0; i < ids.length; i++) {
35534                         var id = ids[i];
35535                         if (cache.moving[id]) continue;
35536                         cache.moving[id] = true;
35537
35538                         var entity = graph.hasEntity(id);
35539                         if (!entity) continue;
35540
35541                         if (entity.type === 'node') {
35542                             cache.nodes.push(id);
35543                             cache.startLoc[id] = entity.loc;
35544                         } else if (entity.type === 'way') {
35545                             cache.ways.push(id);
35546                             cacheEntities(entity.nodes);
35547                         } else {
35548                             cacheEntities(entity.members.map(function(member) {
35549                                 return member.id;
35550                             }));
35551                         }
35552                     }
35553                 }
35554
35555                 function cacheIntersections(ids) {
35556                     function isEndpoint(way, id) {
35557                         return !way.isClosed() && !!way.affix(id);
35558                     }
35559
35560                     for (var i = 0; i < ids.length; i++) {
35561                         var id = ids[i];
35562
35563                         // consider only intersections with 1 moved and 1 unmoved way.
35564                         var childNodes = graph.childNodes(graph.entity(id));
35565                         for (var j = 0; j < childNodes.length; j++) {
35566                             var node = childNodes[j];
35567                             var parents = graph.parentWays(node);
35568                             if (parents.length !== 2) continue;
35569
35570                             var moved = graph.entity(id);
35571                             var unmoved = null;
35572                             for (var k = 0; k < parents.length; k++) {
35573                                 var way = parents[k];
35574                                 if (!cache.moving[way.id]) {
35575                                     unmoved = way;
35576                                     break;
35577                                 }
35578                             }
35579                             if (!unmoved) continue;
35580
35581                             // exclude ways that are overly connected..
35582                             if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) continue;
35583                             if (moved.isArea() || unmoved.isArea()) continue;
35584
35585                             cache.intersections.push({
35586                                 nodeId: node.id,
35587                                 movedId: moved.id,
35588                                 unmovedId: unmoved.id,
35589                                 movedIsEP: isEndpoint(moved, node.id),
35590                                 unmovedIsEP: isEndpoint(unmoved, node.id)
35591                             });
35592                         }
35593                     }
35594                 }
35595
35596
35597                 if (!cache) {
35598                     cache = {};
35599                 }
35600                 if (!cache.ok) {
35601                     cache.moving = {};
35602                     cache.intersections = [];
35603                     cache.replacedVertex = {};
35604                     cache.startLoc = {};
35605                     cache.nodes = [];
35606                     cache.ways = [];
35607
35608                     cacheEntities(moveIDs);
35609                     cacheIntersections(cache.ways);
35610                     cache.nodes = cache.nodes.filter(canMove);
35611
35612                     cache.ok = true;
35613                 }
35614             }
35615
35616
35617             // Place a vertex where the moved vertex used to be, to preserve way shape..
35618             //
35619             //  Start:
35620             //      b ---- e
35621             //     / \
35622             //    /   \
35623             //   /     \
35624             //  a       c
35625             //
35626             //      *               node '*' added to preserve shape
35627             //     / \
35628             //    /   b ---- e      way `b,e` moved here:
35629             //   /     \
35630             //  a       c
35631             //
35632             //
35633             function replaceMovedVertex(nodeId, wayId, graph, delta) {
35634                 var way = graph.entity(wayId);
35635                 var moved = graph.entity(nodeId);
35636                 var movedIndex = way.nodes.indexOf(nodeId);
35637                 var len, prevIndex, nextIndex;
35638
35639                 if (way.isClosed()) {
35640                     len = way.nodes.length - 1;
35641                     prevIndex = (movedIndex + len - 1) % len;
35642                     nextIndex = (movedIndex + len + 1) % len;
35643                 } else {
35644                     len = way.nodes.length;
35645                     prevIndex = movedIndex - 1;
35646                     nextIndex = movedIndex + 1;
35647                 }
35648
35649                 var prev = graph.hasEntity(way.nodes[prevIndex]);
35650                 var next = graph.hasEntity(way.nodes[nextIndex]);
35651
35652                 // Don't add orig vertex at endpoint..
35653                 if (!prev || !next) return graph;
35654
35655                 var key = wayId + '_' + nodeId;
35656                 var orig = cache.replacedVertex[key];
35657                 if (!orig) {
35658                     orig = osmNode();
35659                     cache.replacedVertex[key] = orig;
35660                     cache.startLoc[orig.id] = cache.startLoc[nodeId];
35661                 }
35662
35663                 var start, end;
35664                 if (delta) {
35665                     start = projection(cache.startLoc[nodeId]);
35666                     end = projection.invert(geoVecAdd(start, delta));
35667                 } else {
35668                     end = cache.startLoc[nodeId];
35669                 }
35670                 orig = orig.move(end);
35671
35672                 var angle = Math.abs(geoAngle(orig, prev, projection) -
35673                         geoAngle(orig, next, projection)) * 180 / Math.PI;
35674
35675                 // Don't add orig vertex if it would just make a straight line..
35676                 if (angle > 175 && angle < 185) return graph;
35677
35678                 // moving forward or backward along way?
35679                 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
35680                 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
35681                 var d1 = geoPathLength(p1);
35682                 var d2 = geoPathLength(p2);
35683                 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
35684
35685                 // moving around closed loop?
35686                 if (way.isClosed() && insertAt === 0) insertAt = len;
35687
35688                 way = way.addNode(orig.id, insertAt);
35689                 return graph.replace(orig).replace(way);
35690             }
35691
35692
35693             // Remove duplicate vertex that might have been added by
35694             // replaceMovedVertex.  This is done after the unzorro checks.
35695             function removeDuplicateVertices(wayId, graph) {
35696                 var way = graph.entity(wayId);
35697                 var epsilon = 1e-6;
35698                 var prev, curr;
35699
35700                 function isInteresting(node, graph) {
35701                     return graph.parentWays(node).length > 1 ||
35702                         graph.parentRelations(node).length ||
35703                         node.hasInterestingTags();
35704                 }
35705
35706                 for (var i = 0; i < way.nodes.length; i++) {
35707                     curr = graph.entity(way.nodes[i]);
35708
35709                     if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
35710                         if (!isInteresting(prev, graph)) {
35711                             way = way.removeNode(prev.id);
35712                             graph = graph.replace(way).remove(prev);
35713                         } else if (!isInteresting(curr, graph)) {
35714                             way = way.removeNode(curr.id);
35715                             graph = graph.replace(way).remove(curr);
35716                         }
35717                     }
35718
35719                     prev = curr;
35720                 }
35721
35722                 return graph;
35723             }
35724
35725
35726             // Reorder nodes around intersections that have moved..
35727             //
35728             //  Start:                way1.nodes: b,e         (moving)
35729             //  a - b - c ----- d     way2.nodes: a,b,c,d     (static)
35730             //      |                 vertex: b
35731             //      e                 isEP1: true,  isEP2, false
35732             //
35733             //  way1 `b,e` moved here:
35734             //  a ----- c = b - d
35735             //              |
35736             //              e
35737             //
35738             //  reorder nodes         way1.nodes: b,e
35739             //  a ----- c - b - d     way2.nodes: a,c,b,d
35740             //              |
35741             //              e
35742             //
35743             function unZorroIntersection(intersection, graph) {
35744                 var vertex = graph.entity(intersection.nodeId);
35745                 var way1 = graph.entity(intersection.movedId);
35746                 var way2 = graph.entity(intersection.unmovedId);
35747                 var isEP1 = intersection.movedIsEP;
35748                 var isEP2 = intersection.unmovedIsEP;
35749
35750                 // don't move the vertex if it is the endpoint of both ways.
35751                 if (isEP1 && isEP2) return graph;
35752
35753                 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
35754                 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
35755
35756                 if (way1.isClosed() && way1.first() === vertex.id) nodes1.push(nodes1[0]);
35757                 if (way2.isClosed() && way2.first() === vertex.id) nodes2.push(nodes2[0]);
35758
35759                 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
35760                 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
35761                 var loc;
35762
35763                 // snap vertex to nearest edge (or some point between them)..
35764                 if (!isEP1 && !isEP2) {
35765                     var epsilon = 1e-6, maxIter = 10;
35766                     for (var i = 0; i < maxIter; i++) {
35767                         loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
35768                         edge1 = geoChooseEdge(nodes1, projection(loc), projection);
35769                         edge2 = geoChooseEdge(nodes2, projection(loc), projection);
35770                         if (Math.abs(edge1.distance - edge2.distance) < epsilon) break;
35771                     }
35772                 } else if (!isEP1) {
35773                     loc = edge1.loc;
35774                 } else {
35775                     loc = edge2.loc;
35776                 }
35777
35778                 graph = graph.replace(vertex.move(loc));
35779
35780                 // if zorro happened, reorder nodes..
35781                 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
35782                     way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
35783                     graph = graph.replace(way1);
35784                 }
35785                 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
35786                     way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
35787                     graph = graph.replace(way2);
35788                 }
35789
35790                 return graph;
35791             }
35792
35793
35794             function cleanupIntersections(graph) {
35795                 for (var i = 0; i < cache.intersections.length; i++) {
35796                     var obj = cache.intersections[i];
35797                     graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
35798                     graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
35799                     graph = unZorroIntersection(obj, graph);
35800                     graph = removeDuplicateVertices(obj.movedId, graph);
35801                     graph = removeDuplicateVertices(obj.unmovedId, graph);
35802                 }
35803
35804                 return graph;
35805             }
35806
35807
35808             // check if moving way endpoint can cross an unmoved way, if so limit delta..
35809             function limitDelta(graph) {
35810                 function moveNode(loc) {
35811                     return geoVecAdd(projection(loc), _delta);
35812                 }
35813
35814                 for (var i = 0; i < cache.intersections.length; i++) {
35815                     var obj = cache.intersections[i];
35816
35817                     // Don't limit movement if this is vertex joins 2 endpoints..
35818                     if (obj.movedIsEP && obj.unmovedIsEP) continue;
35819                     // Don't limit movement if this vertex is not an endpoint anyway..
35820                     if (!obj.movedIsEP) continue;
35821
35822                     var node = graph.entity(obj.nodeId);
35823                     var start = projection(node.loc);
35824                     var end = geoVecAdd(start, _delta);
35825                     var movedNodes = graph.childNodes(graph.entity(obj.movedId));
35826                     var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
35827                     var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
35828                     var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
35829                     var hits = geoPathIntersections(movedPath, unmovedPath);
35830
35831                     for (var j = 0; i < hits.length; i++) {
35832                         if (geoVecEqual(hits[j], end)) continue;
35833                         var edge = geoChooseEdge(unmovedNodes, end, projection);
35834                         _delta = geoVecSubtract(projection(edge.loc), start);
35835                     }
35836                 }
35837             }
35838
35839
35840             var action = function(graph) {
35841                 if (_delta[0] === 0 && _delta[1] === 0) return graph;
35842
35843                 setupCache(graph);
35844
35845                 if (cache.intersections.length) {
35846                     limitDelta(graph);
35847                 }
35848
35849                 for (var i = 0; i < cache.nodes.length; i++) {
35850                     var node = graph.entity(cache.nodes[i]);
35851                     var start = projection(node.loc);
35852                     var end = geoVecAdd(start, _delta);
35853                     graph = graph.replace(node.move(projection.invert(end)));
35854                 }
35855
35856                 if (cache.intersections.length) {
35857                     graph = cleanupIntersections(graph);
35858                 }
35859
35860                 return graph;
35861             };
35862
35863
35864             action.delta = function() {
35865                 return _delta;
35866             };
35867
35868
35869             return action;
35870         }
35871
35872         function actionMoveMember(relationId, fromIndex, toIndex) {
35873             return function(graph) {
35874                 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
35875             };
35876         }
35877
35878         function actionMoveNode(nodeID, toLoc) {
35879
35880             var action = function(graph, t) {
35881                 if (t === null || !isFinite(t)) t = 1;
35882                 t = Math.min(Math.max(+t, 0), 1);
35883
35884                 var node = graph.entity(nodeID);
35885                 return graph.replace(
35886                     node.move(geoVecInterp(node.loc, toLoc, t))
35887                 );
35888             };
35889
35890             action.transitionable = true;
35891
35892             return action;
35893         }
35894
35895         function actionNoop() {
35896             return function(graph) {
35897                 return graph;
35898             };
35899         }
35900
35901         function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
35902             var epsilon = ep || 1e-4;
35903             var threshold = degThresh || 13;  // degrees within right or straight to alter
35904
35905             // We test normalized dot products so we can compare as cos(angle)
35906             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
35907             var upperThreshold = Math.cos(threshold * Math.PI / 180);
35908
35909
35910             var action = function(graph, t) {
35911                 if (t === null || !isFinite(t)) t = 1;
35912                 t = Math.min(Math.max(+t, 0), 1);
35913
35914                 var way = graph.entity(wayID);
35915                 way = way.removeNode('');   // sanity check - remove any consecutive duplicates
35916
35917                 if (way.tags.nonsquare) {
35918                     var tags = Object.assign({}, way.tags);
35919                     // since we're squaring, remove indication that this is physically unsquare
35920                     delete tags.nonsquare;
35921                     way = way.update({tags: tags});
35922                 }
35923
35924                 graph = graph.replace(way);
35925
35926                 var isClosed = way.isClosed();
35927                 var nodes = graph.childNodes(way).slice();  // shallow copy
35928                 if (isClosed) nodes.pop();
35929
35930                 if (vertexID !== undefined) {
35931                     nodes = nodeSubset(nodes, vertexID, isClosed);
35932                     if (nodes.length !== 3) return graph;
35933                 }
35934
35935                 // note: all geometry functions here use the unclosed node/point/coord list
35936
35937                 var nodeCount = {};
35938                 var points = [];
35939                 var corner = { i: 0, dotp: 1 };
35940                 var node, point, loc, score, motions, i, j;
35941
35942                 for (i = 0; i < nodes.length; i++) {
35943                     node = nodes[i];
35944                     nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
35945                     points.push({ id: node.id, coord: projection(node.loc) });
35946                 }
35947
35948
35949                 if (points.length === 3) {   // move only one vertex for right triangle
35950                     for (i = 0; i < 1000; i++) {
35951                         motions = points.map(calcMotion);
35952
35953                         points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
35954                         score = corner.dotp;
35955                         if (score < epsilon) {
35956                             break;
35957                         }
35958                     }
35959
35960                     node = graph.entity(nodes[corner.i].id);
35961                     loc = projection.invert(points[corner.i].coord);
35962                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
35963
35964                 } else {
35965                     var straights = [];
35966                     var simplified = [];
35967
35968                     // Remove points from nearly straight sections..
35969                     // This produces a simplified shape to orthogonalize
35970                     for (i = 0; i < points.length; i++) {
35971                         point = points[i];
35972                         var dotp = 0;
35973                         if (isClosed || (i > 0 && i < points.length - 1)) {
35974                             var a = points[(i - 1 + points.length) % points.length];
35975                             var b = points[(i + 1) % points.length];
35976                             dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
35977                         }
35978
35979                         if (dotp > upperThreshold) {
35980                             straights.push(point);
35981                         } else {
35982                             simplified.push(point);
35983                         }
35984                     }
35985
35986                     // Orthogonalize the simplified shape
35987                     var bestPoints = clonePoints(simplified);
35988                     var originalPoints = clonePoints(simplified);
35989
35990                     score = Infinity;
35991                     for (i = 0; i < 1000; i++) {
35992                         motions = simplified.map(calcMotion);
35993
35994                         for (j = 0; j < motions.length; j++) {
35995                             simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
35996                         }
35997                         var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
35998                         if (newScore < score) {
35999                             bestPoints = clonePoints(simplified);
36000                             score = newScore;
36001                         }
36002                         if (score < epsilon) {
36003                             break;
36004                         }
36005                     }
36006
36007                     var bestCoords = bestPoints.map(function(p) { return p.coord; });
36008                     if (isClosed) bestCoords.push(bestCoords[0]);
36009
36010                     // move the nodes that should move
36011                     for (i = 0; i < bestPoints.length; i++) {
36012                         point = bestPoints[i];
36013                         if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
36014                             node = graph.entity(point.id);
36015                             loc = projection.invert(point.coord);
36016                             graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
36017                         }
36018                     }
36019
36020                     // move the nodes along straight segments
36021                     for (i = 0; i < straights.length; i++) {
36022                         point = straights[i];
36023                         if (nodeCount[point.id] > 1) continue;   // skip self-intersections
36024
36025                         node = graph.entity(point.id);
36026
36027                         if (t === 1 &&
36028                             graph.parentWays(node).length === 1 &&
36029                             graph.parentRelations(node).length === 0 &&
36030                             !node.hasInterestingTags()
36031                         ) {
36032                             // remove uninteresting points..
36033                             graph = actionDeleteNode(node.id)(graph);
36034
36035                         } else {
36036                             // move interesting points to the nearest edge..
36037                             var choice = geoVecProject(point.coord, bestCoords);
36038                             if (choice) {
36039                                 loc = projection.invert(choice.target);
36040                                 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
36041                             }
36042                         }
36043                     }
36044                 }
36045
36046                 return graph;
36047
36048
36049                 function clonePoints(array) {
36050                     return array.map(function(p) {
36051                         return { id: p.id, coord: [p.coord[0], p.coord[1]] };
36052                     });
36053                 }
36054
36055
36056                 function calcMotion(point, i, array) {
36057                     // don't try to move the endpoints of a non-closed way.
36058                     if (!isClosed && (i === 0 || i === array.length - 1)) return [0, 0];
36059                     // don't try to move a node that appears more than once (self intersection)
36060                     if (nodeCount[array[i].id] > 1) return [0, 0];
36061
36062                     var a = array[(i - 1 + array.length) % array.length].coord;
36063                     var origin = point.coord;
36064                     var b = array[(i + 1) % array.length].coord;
36065                     var p = geoVecSubtract(a, origin);
36066                     var q = geoVecSubtract(b, origin);
36067
36068                     var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
36069                     p = geoVecNormalize(p);
36070                     q = geoVecNormalize(q);
36071
36072                     var dotp = (p[0] * q[0] + p[1] * q[1]);
36073                     var val = Math.abs(dotp);
36074
36075                     if (val < lowerThreshold) {  // nearly orthogonal
36076                         corner.i = i;
36077                         corner.dotp = val;
36078                         var vec = geoVecNormalize(geoVecAdd(p, q));
36079                         return geoVecScale(vec, 0.1 * dotp * scale);
36080                     }
36081
36082                     return [0, 0];   // do nothing
36083                 }
36084             };
36085
36086
36087             // if we are only orthogonalizing one vertex,
36088             // get that vertex and the previous and next
36089             function nodeSubset(nodes, vertexID, isClosed) {
36090                 var first = isClosed ? 0 : 1;
36091                 var last = isClosed ? nodes.length : nodes.length - 1;
36092
36093                 for (var i = first; i < last; i++) {
36094                     if (nodes[i].id === vertexID) {
36095                         return [
36096                             nodes[(i - 1 + nodes.length) % nodes.length],
36097                             nodes[i],
36098                             nodes[(i + 1) % nodes.length]
36099                         ];
36100                     }
36101                 }
36102
36103                 return [];
36104             }
36105
36106
36107             action.disabled = function(graph) {
36108                 var way = graph.entity(wayID);
36109                 way = way.removeNode('');  // sanity check - remove any consecutive duplicates
36110                 graph = graph.replace(way);
36111
36112                 var isClosed = way.isClosed();
36113                 var nodes = graph.childNodes(way).slice();  // shallow copy
36114                 if (isClosed) nodes.pop();
36115
36116                 var allowStraightAngles = false;
36117                 if (vertexID !== undefined) {
36118                     allowStraightAngles = true;
36119                     nodes = nodeSubset(nodes, vertexID, isClosed);
36120                     if (nodes.length !== 3) return 'end_vertex';
36121                 }
36122
36123                 var coords = nodes.map(function(n) { return projection(n.loc); });
36124                 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
36125
36126                 if (score === null) {
36127                     return 'not_squarish';
36128                 } else if (score === 0) {
36129                     return 'square_enough';
36130                 } else {
36131                     return false;
36132                 }
36133             };
36134
36135
36136             action.transitionable = true;
36137
36138             return action;
36139         }
36140
36141         // `actionRestrictTurn` creates a turn restriction relation.
36142         //
36143         // `turn` must be an `osmTurn` object
36144         // see osm/intersection.js, pathToTurn()
36145         //
36146         // This specifies a restriction of type `restriction` when traveling from
36147         // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
36148         // (The action does not check that these entities form a valid intersection.)
36149         //
36150         // From, to, and via ways should be split before calling this action.
36151         // (old versions of the code would split the ways here, but we no longer do it)
36152         //
36153         // For testing convenience, accepts a restrictionID to assign to the new
36154         // relation. Normally, this will be undefined and the relation will
36155         // automatically be assigned a new ID.
36156         //
36157         function actionRestrictTurn(turn, restrictionType, restrictionID) {
36158
36159             return function(graph) {
36160                 var fromWay = graph.entity(turn.from.way);
36161                 var toWay = graph.entity(turn.to.way);
36162                 var viaNode = turn.via.node && graph.entity(turn.via.node);
36163                 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
36164                 var members = [];
36165
36166                 members.push({ id: fromWay.id, type: 'way',  role: 'from' });
36167
36168                 if (viaNode) {
36169                     members.push({ id: viaNode.id,  type: 'node', role: 'via' });
36170                 } else if (viaWays) {
36171                     viaWays.forEach(function(viaWay) {
36172                         members.push({ id: viaWay.id,  type: 'way', role: 'via' });
36173                     });
36174                 }
36175
36176                 members.push({ id: toWay.id, type: 'way',  role: 'to' });
36177
36178                 return graph.replace(osmRelation({
36179                     id: restrictionID,
36180                     tags: {
36181                         type: 'restriction',
36182                         restriction: restrictionType
36183                     },
36184                     members: members
36185                 }));
36186             };
36187         }
36188
36189         function actionRevert(id) {
36190             var action = function(graph) {
36191                 var entity = graph.hasEntity(id),
36192                     base = graph.base().entities[id];
36193
36194                 if (entity && !base) {    // entity will be removed..
36195                     if (entity.type === 'node') {
36196                         graph.parentWays(entity)
36197                             .forEach(function(parent) {
36198                                 parent = parent.removeNode(id);
36199                                 graph = graph.replace(parent);
36200
36201                                 if (parent.isDegenerate()) {
36202                                     graph = actionDeleteWay(parent.id)(graph);
36203                                 }
36204                             });
36205                     }
36206
36207                     graph.parentRelations(entity)
36208                         .forEach(function(parent) {
36209                             parent = parent.removeMembersWithID(id);
36210                             graph = graph.replace(parent);
36211
36212                             if (parent.isDegenerate()) {
36213                                 graph = actionDeleteRelation(parent.id)(graph);
36214                             }
36215                         });
36216                 }
36217
36218                 return graph.revert(id);
36219             };
36220
36221             return action;
36222         }
36223
36224         function actionRotate(rotateIds, pivot, angle, projection) {
36225
36226             var action = function(graph) {
36227                 return graph.update(function(graph) {
36228                     utilGetAllNodes(rotateIds, graph).forEach(function(node) {
36229                         var point = geoRotate([projection(node.loc)], angle, pivot)[0];
36230                         graph = graph.replace(node.move(projection.invert(point)));
36231                     });
36232                 });
36233             };
36234
36235             return action;
36236         }
36237
36238         /* Align nodes along their common axis */
36239         function actionStraightenNodes(nodeIDs, projection) {
36240
36241             function positionAlongWay(a, o, b) {
36242                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36243             }
36244
36245
36246             var action = function(graph, t) {
36247                 if (t === null || !isFinite(t)) t = 1;
36248                 t = Math.min(Math.max(+t, 0), 1);
36249
36250                 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
36251                 var points = nodes.map(function(n) { return projection(n.loc); });
36252                 var ssr = geoGetSmallestSurroundingRectangle(points);
36253
36254                 // Choose line pq = axis of symmetry.
36255                 // The shape's surrounding rectangle has 2 axes of symmetry.
36256                 // Snap points to the long axis
36257                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36258                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36259                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36260                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36261                 var p, q;
36262
36263                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36264                 if (isLong) {
36265                     p = p1;
36266                     q = q1;
36267                 } else {
36268                     p = p2;
36269                     q = q2;
36270                 }
36271
36272                 // Move points onto line pq
36273                 for (var i = 0; i < points.length; i++) {
36274                     var node = nodes[i];
36275                     var point = points[i];
36276                     var u = positionAlongWay(point, p, q);
36277                     var point2 = geoVecInterp(p, q, u);
36278                     var loc2 = projection.invert(point2);
36279                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36280                 }
36281
36282                 return graph;
36283             };
36284
36285
36286             action.disabled = function() {
36287                 return false;
36288             };
36289
36290
36291             action.transitionable = true;
36292
36293
36294             return action;
36295         }
36296
36297         /*
36298          * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
36299          */
36300         function actionStraightenWay(selectedIDs, projection) {
36301
36302             function positionAlongWay(a, o, b) {
36303                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
36304             }
36305
36306             // Return all selected ways as a continuous, ordered array of nodes
36307             function allNodes(graph) {
36308                 var nodes = [];
36309                 var startNodes = [];
36310                 var endNodes = [];
36311                 var remainingWays = [];
36312                 var selectedWays = selectedIDs.filter(function(w) {
36313                     return graph.entity(w).type === 'way';
36314                 });
36315                 var selectedNodes = selectedIDs.filter(function(n) {
36316                     return graph.entity(n).type === 'node';
36317                 });
36318
36319                 for (var i = 0; i < selectedWays.length; i++) {
36320                     var way = graph.entity(selectedWays[i]);
36321                     nodes = way.nodes.slice(0);
36322                     remainingWays.push(nodes);
36323                     startNodes.push(nodes[0]);
36324                     endNodes.push(nodes[nodes.length-1]);
36325                 }
36326
36327                 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
36328                 //   and need to be removed so currNode difference calculation below works)
36329                 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
36330                 startNodes = startNodes.filter(function(n) {
36331                     return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
36332                 });
36333                 endNodes = endNodes.filter(function(n) {
36334                     return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
36335                 });
36336
36337                 // Choose the initial endpoint to start from
36338                 var currNode = utilArrayDifference(startNodes, endNodes)
36339                     .concat(utilArrayDifference(endNodes, startNodes))[0];
36340                 var nextWay = [];
36341                 nodes = [];
36342
36343                 // Create nested function outside of loop to avoid "function in loop" lint error
36344                 var getNextWay = function(currNode, remainingWays) {
36345                     return remainingWays.filter(function(way) {
36346                         return way[0] === currNode || way[way.length-1] === currNode;
36347                     })[0];
36348                 };
36349
36350                 // Add nodes to end of nodes array, until all ways are added
36351                 while (remainingWays.length) {
36352                     nextWay = getNextWay(currNode, remainingWays);
36353                     remainingWays = utilArrayDifference(remainingWays, [nextWay]);
36354
36355                     if (nextWay[0] !== currNode) {
36356                         nextWay.reverse();
36357                     }
36358                     nodes = nodes.concat(nextWay);
36359                     currNode = nodes[nodes.length-1];
36360                 }
36361
36362                 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
36363                 if (selectedNodes.length === 2) {
36364                     var startNodeIdx = nodes.indexOf(selectedNodes[0]);
36365                     var endNodeIdx = nodes.indexOf(selectedNodes[1]);
36366                     var sortedStartEnd = [startNodeIdx, endNodeIdx];
36367
36368                     sortedStartEnd.sort(function(a, b) { return a - b; });
36369                     nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
36370                 }
36371
36372                 return nodes.map(function(n) { return graph.entity(n); });
36373             }
36374
36375
36376             var action = function(graph, t) {
36377                 if (t === null || !isFinite(t)) t = 1;
36378                 t = Math.min(Math.max(+t, 0), 1);
36379
36380                 var nodes = allNodes(graph);
36381                 var points = nodes.map(function(n) { return projection(n.loc); });
36382                 var startPoint = points[0];
36383                 var endPoint = points[points.length-1];
36384                 var toDelete = [];
36385                 var i;
36386
36387                 for (i = 1; i < points.length-1; i++) {
36388                     var node = nodes[i];
36389                     var point = points[i];
36390
36391                     if (t < 1 || graph.parentWays(node).length > 1 ||
36392                         graph.parentRelations(node).length ||
36393                         node.hasInterestingTags()
36394                     ) {
36395                         var u = positionAlongWay(point, startPoint, endPoint);
36396                         var p = geoVecInterp(startPoint, endPoint, u);
36397                         var loc2 = projection.invert(p);
36398                         graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
36399
36400                     } else {
36401                         // safe to delete
36402                         if (toDelete.indexOf(node) === -1) {
36403                             toDelete.push(node);
36404                         }
36405                     }
36406                 }
36407
36408                 for (i = 0; i < toDelete.length; i++) {
36409                     graph = actionDeleteNode(toDelete[i].id)(graph);
36410                 }
36411
36412                 return graph;
36413             };
36414
36415
36416             action.disabled = function(graph) {
36417                 // check way isn't too bendy
36418                 var nodes = allNodes(graph);
36419                 var points = nodes.map(function(n) { return projection(n.loc); });
36420                 var startPoint = points[0];
36421                 var endPoint = points[points.length-1];
36422                 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
36423                 var i;
36424
36425                 if (threshold === 0) {
36426                     return 'too_bendy';
36427                 }
36428
36429                 for (i = 1; i < points.length - 1; i++) {
36430                     var point = points[i];
36431                     var u = positionAlongWay(point, startPoint, endPoint);
36432                     var p = geoVecInterp(startPoint, endPoint, u);
36433                     var dist = geoVecLength(p, point);
36434
36435                     // to bendy if point is off by 20% of total start/end distance in projected space
36436                     if (isNaN(dist) || dist > threshold) {
36437                         return 'too_bendy';
36438                     }
36439                 }
36440             };
36441
36442             action.transitionable = true;
36443
36444
36445             return action;
36446         }
36447
36448         // `actionUnrestrictTurn` deletes a turn restriction relation.
36449         //
36450         // `turn` must be an `osmTurn` object with a `restrictionID` property.
36451         // see osm/intersection.js, pathToTurn()
36452         //
36453         function actionUnrestrictTurn(turn) {
36454             return function(graph) {
36455                 return actionDeleteRelation(turn.restrictionID)(graph);
36456             };
36457         }
36458
36459         /* Reflect the given area around its axis of symmetry */
36460         function actionReflect(reflectIds, projection) {
36461             var _useLongAxis = true;
36462
36463
36464             var action = function(graph, t) {
36465                 if (t === null || !isFinite(t)) t = 1;
36466                 t = Math.min(Math.max(+t, 0), 1);
36467
36468                 var nodes = utilGetAllNodes(reflectIds, graph);
36469                 var points = nodes.map(function(n) { return projection(n.loc); });
36470                 var ssr = geoGetSmallestSurroundingRectangle(points);
36471
36472                 // Choose line pq = axis of symmetry.
36473                 // The shape's surrounding rectangle has 2 axes of symmetry.
36474                 // Reflect across the longer axis by default.
36475                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
36476                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
36477                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
36478                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
36479                 var p, q;
36480
36481                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
36482                 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
36483                     p = p1;
36484                     q = q1;
36485                 } else {
36486                     p = p2;
36487                     q = q2;
36488                 }
36489
36490                 // reflect c across pq
36491                 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
36492                 var dx = q[0] - p[0];
36493                 var dy = q[1] - p[1];
36494                 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
36495                 var b = 2 * dx * dy / (dx * dx + dy * dy);
36496                 for (var i = 0; i < nodes.length; i++) {
36497                     var node = nodes[i];
36498                     var c = projection(node.loc);
36499                     var c2 = [
36500                         a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
36501                         b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
36502                     ];
36503                     var loc2 = projection.invert(c2);
36504                     node = node.move(geoVecInterp(node.loc, loc2, t));
36505                     graph = graph.replace(node);
36506                 }
36507
36508                 return graph;
36509             };
36510
36511
36512             action.useLongAxis = function(val) {
36513                 if (!arguments.length) return _useLongAxis;
36514                 _useLongAxis = val;
36515                 return action;
36516             };
36517
36518
36519             action.transitionable = true;
36520
36521
36522             return action;
36523         }
36524
36525         function actionUpgradeTags(entityId, oldTags, replaceTags) {
36526
36527             return function(graph) {
36528                 var entity = graph.entity(entityId);
36529                 var tags = Object.assign({}, entity.tags);  // shallow copy
36530                 var transferValue;
36531                 var semiIndex;
36532
36533                 for (var oldTagKey in oldTags) {
36534                     if (oldTags[oldTagKey] === '*') {
36535                         transferValue = tags[oldTagKey];
36536                         delete tags[oldTagKey];
36537                     } else {
36538                         var vals = tags[oldTagKey].split(';').filter(Boolean);
36539                         var oldIndex = vals.indexOf(oldTags[oldTagKey]);
36540                         if (vals.length === 1 || oldIndex === -1) {
36541                             delete tags[oldTagKey];
36542                         } else {
36543                             if (replaceTags && replaceTags[oldTagKey]) {
36544                                 // replacing a value within a semicolon-delimited value, note the index
36545                                 semiIndex = oldIndex;
36546                             }
36547                             vals.splice(oldIndex, 1);
36548                             tags[oldTagKey] = vals.join(';');
36549                         }
36550                     }
36551                 }
36552
36553                 if (replaceTags) {
36554                     for (var replaceKey in replaceTags) {
36555                         var replaceValue = replaceTags[replaceKey];
36556                         if (replaceValue === '*') {
36557                             if (tags[replaceKey] && tags[replaceKey] !== 'no') {
36558                                 // allow any pre-existing value except `no` (troll tag)
36559                                 continue;
36560                             } else {
36561                                 // otherwise assume `yes` is okay
36562                                 tags[replaceKey] = 'yes';
36563                             }
36564                         } else if (replaceValue === '$1') {
36565                             tags[replaceKey] = transferValue;
36566                         } else {
36567                             if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
36568                                 // don't override preexisting values
36569                                 var existingVals = tags[replaceKey].split(';').filter(Boolean);
36570                                 if (existingVals.indexOf(replaceValue) === -1) {
36571                                     existingVals.splice(semiIndex, 0, replaceValue);
36572                                     tags[replaceKey] = existingVals.join(';');
36573                                 }
36574                             } else {
36575                                 tags[replaceKey] = replaceValue;
36576                             }
36577                         }
36578                     }
36579                 }
36580
36581                 return graph.replace(entity.update({ tags: tags }));
36582             };
36583         }
36584
36585         function behaviorEdit(context) {
36586
36587             function behavior() {
36588                 context.map()
36589                     .minzoom(context.minEditableZoom());
36590             }
36591
36592
36593             behavior.off = function() {
36594                 context.map()
36595                     .minzoom(0);
36596             };
36597
36598             return behavior;
36599         }
36600
36601         /*
36602            The hover behavior adds the `.hover` class on mouseover to all elements to which
36603            the identical datum is bound, and removes it on mouseout.
36604
36605            The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
36606            representation may consist of several elements scattered throughout the DOM hierarchy.
36607            Only one of these elements can have the :hover pseudo-class, but all of them will
36608            have the .hover class.
36609          */
36610         function behaviorHover(context) {
36611             var dispatch$1 = dispatch('hover');
36612             var _selection = d3_select(null);
36613             var _newNodeId = null;
36614             var _initialNodeID = null;
36615             var _buttonDown;
36616             var _altDisables;
36617             var _ignoreVertex;
36618             var _target;
36619
36620
36621             function keydown() {
36622                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36623                     _selection.selectAll('.hover')
36624                         .classed('hover-suppressed', true)
36625                         .classed('hover', false);
36626
36627                     _selection
36628                         .classed('hover-disabled', true);
36629
36630                     dispatch$1.call('hover', this, null);
36631                 }
36632             }
36633
36634
36635             function keyup() {
36636                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
36637                     _selection.selectAll('.hover-suppressed')
36638                         .classed('hover-suppressed', false)
36639                         .classed('hover', true);
36640
36641                     _selection
36642                         .classed('hover-disabled', false);
36643
36644                     dispatch$1.call('hover', this, _target ? _target.id : null);
36645                 }
36646             }
36647
36648
36649             function behavior(selection) {
36650                 _selection = selection;
36651
36652                 if (_initialNodeID) {
36653                     _newNodeId = _initialNodeID;
36654                     _initialNodeID = null;
36655                 } else {
36656                     _newNodeId = null;
36657                 }
36658
36659                 _selection
36660                     .on('mouseover.hover', mouseover)
36661                     .on('mouseout.hover', mouseout)
36662                     .on('mousedown.hover', mousedown);
36663
36664                 d3_select(window)
36665                     .on('keydown.hover', keydown)
36666                     .on('keyup.hover', keyup);
36667
36668
36669                 function mouseover() {
36670                     if (_buttonDown) return;
36671                     var target = event.target;
36672                     enter(target ? target.__data__ : null);
36673                 }
36674
36675
36676                 function mouseout() {
36677                     if (_buttonDown) return;
36678                     var target = event.relatedTarget;
36679                     enter(target ? target.__data__ : null);
36680                 }
36681
36682
36683                 function mousedown() {
36684                     _buttonDown = true;
36685                     d3_select(window)
36686                         .on('mouseup.hover', mouseup, true);
36687                 }
36688
36689
36690                 function mouseup() {
36691                     _buttonDown = false;
36692                     d3_select(window)
36693                         .on('mouseup.hover', null, true);
36694                 }
36695
36696                 function allowsVertex(d) {
36697                     return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
36698                 }
36699
36700                 function modeAllowsHover(target) {
36701                     var mode = context.mode();
36702                     if (mode.id === 'add-point') {
36703                         return mode.preset.matchGeometry('vertex') ||
36704                             (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
36705                     }
36706                     return true;
36707                 }
36708
36709                 function enter(datum) {
36710                     if (datum === _target) return;
36711                     _target = datum;
36712
36713                     _selection.selectAll('.hover')
36714                         .classed('hover', false);
36715                     _selection.selectAll('.hover-suppressed')
36716                         .classed('hover-suppressed', false);
36717
36718                     // What are we hovering over?
36719                     var entity, selector;
36720                     if (datum && datum.__featurehash__) {
36721                         entity = datum;
36722                         selector = '.data' + datum.__featurehash__;
36723
36724                     } else if (datum instanceof qaError) {
36725                         entity = datum;
36726                         selector = '.' + datum.service + '.error_id-' + datum.id;
36727
36728                     } else if (datum instanceof osmNote) {
36729                         entity = datum;
36730                         selector = '.note-' + datum.id;
36731
36732                     } else if (datum instanceof osmEntity) {
36733                         entity = datum;
36734                         selector = '.' + entity.id;
36735                         if (entity.type === 'relation') {
36736                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
36737                         }
36738                     } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
36739                         entity = datum.properties.entity;
36740                         selector = '.' + entity.id;
36741                         if (entity.type === 'relation') {
36742                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
36743                         }
36744                     }
36745
36746                     var mode = context.mode();
36747
36748                     // Update hover state and dispatch event
36749                     if (entity && entity.id !== _newNodeId) {
36750                         // If drawing a way, don't hover on a node that was just placed. #3974
36751
36752                         if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
36753                             _newNodeId = entity.id;
36754                             return;
36755                         }
36756
36757                         var suppressed = (_altDisables && event && event.altKey) ||
36758                             (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
36759                             !modeAllowsHover(entity);
36760                         _selection.selectAll(selector)
36761                             .classed(suppressed ? 'hover-suppressed' : 'hover', true);
36762
36763                         dispatch$1.call('hover', this, !suppressed && entity);
36764
36765                     } else {
36766                         dispatch$1.call('hover', this, null);
36767                     }
36768                 }
36769             }
36770
36771
36772             behavior.off = function(selection) {
36773                 selection.selectAll('.hover')
36774                     .classed('hover', false);
36775                 selection.selectAll('.hover-suppressed')
36776                     .classed('hover-suppressed', false);
36777                 selection
36778                     .classed('hover-disabled', false);
36779
36780                 selection
36781                     .on('mouseover.hover', null)
36782                     .on('mouseout.hover', null)
36783                     .on('mousedown.hover', null);
36784
36785                 d3_select(window)
36786                     .on('keydown.hover', null)
36787                     .on('keyup.hover', null);
36788             };
36789
36790
36791             behavior.altDisables = function(val) {
36792                 if (!arguments.length) return _altDisables;
36793                 _altDisables = val;
36794                 return behavior;
36795             };
36796
36797             behavior.ignoreVertex = function(val) {
36798                 if (!arguments.length) return _ignoreVertex;
36799                 _ignoreVertex = val;
36800                 return behavior;
36801             };
36802
36803             behavior.initialNodeID = function(nodeId) {
36804                 _initialNodeID = nodeId;
36805                 return behavior;
36806             };
36807
36808             return utilRebind(behavior, dispatch$1, 'on');
36809         }
36810
36811         function refresh(selection, node) {
36812             var cr = node.getBoundingClientRect();
36813             var prop = [cr.width, cr.height];
36814             selection.property('__dimensions__', prop);
36815             return prop;
36816         }
36817
36818         function utilGetDimensions(selection, force) {
36819             if (!selection || selection.empty()) {
36820                 return [0, 0];
36821             }
36822             var node = selection.node(),
36823                 cached = selection.property('__dimensions__');
36824             return (!cached || force) ? refresh(selection, node) : cached;
36825         }
36826
36827
36828         function utilSetDimensions(selection, dimensions) {
36829             if (!selection || selection.empty()) {
36830                 return selection;
36831             }
36832             var node = selection.node();
36833             if (dimensions === null) {
36834                 refresh(selection, node);
36835                 return selection;
36836             }
36837             return selection
36838                 .property('__dimensions__', [dimensions[0], dimensions[1]])
36839                 .attr('width', dimensions[0])
36840                 .attr('height', dimensions[1]);
36841         }
36842
36843         function behaviorTail() {
36844             var container;
36845             var xmargin = 25;
36846             var tooltipSize = [0, 0];
36847             var selectionSize = [0, 0];
36848             var _text;
36849
36850
36851             function behavior(selection) {
36852                 if (!_text) return;
36853
36854                 d3_select(window)
36855                     .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
36856
36857                 container = d3_select(document.body)
36858                     .append('div')
36859                     .style('display', 'none')
36860                     .attr('class', 'tail tooltip-inner');
36861
36862                 container.append('div')
36863                     .text(_text);
36864
36865                 selection
36866                     .on('mousemove.tail', mousemove)
36867                     .on('mouseenter.tail', mouseenter)
36868                     .on('mouseleave.tail', mouseleave);
36869
36870                 container
36871                     .on('mousemove.tail', mousemove);
36872
36873                 tooltipSize = utilGetDimensions(container);
36874                 selectionSize = utilGetDimensions(selection);
36875
36876
36877                 function show() {
36878                     container.style('display', 'block');
36879                     tooltipSize = utilGetDimensions(container);
36880                 }
36881
36882
36883                 function mousemove() {
36884                     if (container.style('display') === 'none') show();
36885                     var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
36886                         -tooltipSize[0] - xmargin : xmargin;
36887                     container.classed('left', xoffset > 0);
36888                     utilSetTransform(container, event.clientX + xoffset, event.clientY);
36889                 }
36890
36891
36892                 function mouseleave() {
36893                     if (event.relatedTarget !== container.node()) {
36894                         container.style('display', 'none');
36895                     }
36896                 }
36897
36898
36899                 function mouseenter() {
36900                     if (event.relatedTarget !== container.node()) {
36901                         show();
36902                     }
36903                 }
36904             }
36905
36906
36907             behavior.off = function(selection) {
36908                 if (!_text) return;
36909
36910                 container
36911                     .on('mousemove.tail', null)
36912                     .remove();
36913
36914                 selection
36915                     .on('mousemove.tail', null)
36916                     .on('mouseenter.tail', null)
36917                     .on('mouseleave.tail', null);
36918
36919                 d3_select(window)
36920                     .on('resize.tail', null);
36921             };
36922
36923
36924             behavior.text = function(val) {
36925                 if (!arguments.length) return _text;
36926                 _text = val;
36927                 return behavior;
36928             };
36929
36930
36931             return behavior;
36932         }
36933
36934         var _usedTails = {};
36935         var _disableSpace = false;
36936         var _lastSpace = null;
36937
36938
36939         function behaviorDraw(context) {
36940             var dispatch$1 = dispatch(
36941                 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
36942             );
36943
36944             var keybinding = utilKeybinding('draw');
36945
36946             var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
36947                 .on('hover', context.ui().sidebar.hover);
36948             var tail = behaviorTail();
36949             var edit = behaviorEdit(context);
36950
36951             var closeTolerance = 4;
36952             var tolerance = 12;
36953             var _mouseLeave = false;
36954             var _lastMouse = null;
36955
36956
36957             // related code
36958             // - `mode/drag_node.js` `datum()`
36959             function datum() {
36960                 var mode = context.mode();
36961                 var isNote = mode && (mode.id.indexOf('note') !== -1);
36962                 if (event.altKey || isNote) return {};
36963
36964                 var element;
36965                 if (event.type === 'keydown') {
36966                     element = _lastMouse && _lastMouse.target;
36967                 } else {
36968                     element = event.target;
36969                 }
36970
36971                 // When drawing, snap only to touch targets..
36972                 // (this excludes area fills and active drawing elements)
36973                 var d = element.__data__;
36974                 return (d && d.properties && d.properties.target) ? d : {};
36975             }
36976
36977
36978             function mousedown() {
36979
36980                 function point() {
36981                     var p = context.container().node();
36982                     return touchId !== null ? d3_touches(p).filter(function(p) {
36983                         return p.identifier === touchId;
36984                     })[0] : d3_mouse(p);
36985                 }
36986
36987                 var element = d3_select(this);
36988                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
36989                 var t1 = +new Date();
36990                 var p1 = point();
36991
36992                 element.on('mousemove.draw', null);
36993
36994                 d3_select(window).on('mouseup.draw', function() {
36995                     var t2 = +new Date();
36996                     var p2 = point();
36997                     var dist = geoVecLength(p1, p2);
36998
36999                     element.on('mousemove.draw', mousemove);
37000                     d3_select(window).on('mouseup.draw', null);
37001
37002                     if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
37003                         // Prevent a quick second click
37004                         d3_select(window).on('click.draw-block', function() {
37005                             event.stopPropagation();
37006                         }, true);
37007
37008                         context.map().dblclickEnable(false);
37009
37010                         window.setTimeout(function() {
37011                             context.map().dblclickEnable(true);
37012                             d3_select(window).on('click.draw-block', null);
37013                         }, 500);
37014
37015                         click();
37016                     }
37017                 }, true);
37018             }
37019
37020
37021             function mousemove() {
37022                 _lastMouse = event;
37023                 dispatch$1.call('move', this, datum());
37024             }
37025
37026
37027             function mouseenter() {
37028                 _mouseLeave = false;
37029             }
37030
37031
37032             function mouseleave() {
37033                 _mouseLeave = true;
37034             }
37035
37036             function allowsVertex(d) {
37037                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
37038             }
37039
37040             // related code
37041             // - `mode/drag_node.js`     `doMode()`
37042             // - `behavior/draw.js`      `click()`
37043             // - `behavior/draw_way.js`  `move()`
37044             function click() {
37045                 var d = datum();
37046                 var target = d && d.properties && d.properties.entity;
37047
37048                 var mode = context.mode();
37049
37050                 if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
37051                     dispatch$1.call('clickNode', this, target, d);
37052                     return;
37053
37054                 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) {   // Snap to a way
37055                     var choice = geoChooseEdge(
37056                         context.childNodes(target), context.mouse(), context.projection, context.activeID()
37057                     );
37058                     if (choice) {
37059                         var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
37060                         dispatch$1.call('clickWay', this, choice.loc, edge, d);
37061                         return;
37062                     }
37063                 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
37064                     dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
37065                 }
37066
37067             }
37068
37069
37070             function space() {
37071                 event.preventDefault();
37072                 event.stopPropagation();
37073
37074                 var currSpace = context.mouse();
37075                 if (_disableSpace && _lastSpace) {
37076                     var dist = geoVecLength(_lastSpace, currSpace);
37077                     if (dist > tolerance) {
37078                         _disableSpace = false;
37079                     }
37080                 }
37081
37082                 if (_disableSpace || _mouseLeave || !_lastMouse) return;
37083
37084                 // user must move mouse or release space bar to allow another click
37085                 _lastSpace = currSpace;
37086                 _disableSpace = true;
37087
37088                 d3_select(window).on('keyup.space-block', function() {
37089                     event.preventDefault();
37090                     event.stopPropagation();
37091                     _disableSpace = false;
37092                     d3_select(window).on('keyup.space-block', null);
37093                 });
37094
37095                 click();
37096             }
37097
37098
37099             function backspace() {
37100                 event.preventDefault();
37101                 dispatch$1.call('undo');
37102             }
37103
37104
37105             function del() {
37106                 event.preventDefault();
37107                 dispatch$1.call('cancel');
37108             }
37109
37110
37111             function ret() {
37112                 event.preventDefault();
37113                 dispatch$1.call('finish');
37114             }
37115
37116
37117             function behavior(selection) {
37118                 context.install(_hover);
37119                 context.install(edit);
37120
37121                 if (!context.inIntro() && !_usedTails[tail.text()]) {
37122                     context.install(tail);
37123                 }
37124
37125                 keybinding
37126                     .on('⌫', backspace)
37127                     .on('⌦', del)
37128                     .on('⎋', ret)
37129                     .on('↩', ret)
37130                     .on('space', space)
37131                     .on('⌥space', space);
37132
37133                 selection
37134                     .on('mouseenter.draw', mouseenter)
37135                     .on('mouseleave.draw', mouseleave)
37136                     .on('mousedown.draw', mousedown)
37137                     .on('mousemove.draw', mousemove);
37138
37139                 d3_select(document)
37140                     .call(keybinding);
37141
37142                 return behavior;
37143             }
37144
37145
37146             behavior.off = function(selection) {
37147                 context.ui().sidebar.hover.cancel();
37148                 context.uninstall(_hover);
37149                 context.uninstall(edit);
37150
37151                 if (!context.inIntro() && !_usedTails[tail.text()]) {
37152                     context.uninstall(tail);
37153                     _usedTails[tail.text()] = true;
37154                 }
37155
37156                 selection
37157                     .on('mouseenter.draw', null)
37158                     .on('mouseleave.draw', null)
37159                     .on('mousedown.draw', null)
37160                     .on('mousemove.draw', null);
37161
37162                 d3_select(window)
37163                     .on('mouseup.draw', null);
37164                     // note: keyup.space-block, click.draw-block should remain
37165
37166                 d3_select(document)
37167                     .call(keybinding.unbind);
37168             };
37169
37170
37171             behavior.tail = function(_) {
37172                 tail.text(_);
37173                 return behavior;
37174             };
37175
37176             behavior.hover = function() {
37177                 return _hover;
37178             };
37179
37180
37181             return utilRebind(behavior, dispatch$1, 'on');
37182         }
37183
37184         function behaviorBreathe() {
37185             var duration = 800;
37186             var steps = 4;
37187             var selector = '.selected.shadow, .selected .shadow';
37188             var _selected = d3_select(null);
37189             var _classed = '';
37190             var _params = {};
37191             var _done = false;
37192             var _timer;
37193
37194
37195             function ratchetyInterpolator(a, b, steps, units) {
37196                 a = parseFloat(a);
37197                 b = parseFloat(b);
37198                 var sample = quantize()
37199                     .domain([0, 1])
37200                     .range(d3_quantize(d3_interpolateNumber(a, b), steps));
37201
37202                 return function(t) {
37203                     return String(sample(t)) + (units || '');
37204                 };
37205             }
37206
37207
37208             function reset(selection) {
37209                 selection
37210                     .style('stroke-opacity', null)
37211                     .style('stroke-width', null)
37212                     .style('fill-opacity', null)
37213                     .style('r', null);
37214             }
37215
37216
37217             function setAnimationParams(transition, fromTo) {
37218                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37219
37220                 transition
37221                     .styleTween('stroke-opacity', function(d) {
37222                         return ratchetyInterpolator(
37223                             _params[d.id][toFrom].opacity,
37224                             _params[d.id][fromTo].opacity,
37225                             steps
37226                         );
37227                     })
37228                     .styleTween('stroke-width', function(d) {
37229                         return ratchetyInterpolator(
37230                             _params[d.id][toFrom].width,
37231                             _params[d.id][fromTo].width,
37232                             steps,
37233                             'px'
37234                         );
37235                     })
37236                     .styleTween('fill-opacity', function(d) {
37237                         return ratchetyInterpolator(
37238                             _params[d.id][toFrom].opacity,
37239                             _params[d.id][fromTo].opacity,
37240                             steps
37241                         );
37242                     })
37243                     .styleTween('r', function(d) {
37244                         return ratchetyInterpolator(
37245                             _params[d.id][toFrom].width,
37246                             _params[d.id][fromTo].width,
37247                             steps,
37248                             'px'
37249                         );
37250                     });
37251             }
37252
37253
37254             function calcAnimationParams(selection) {
37255                 selection
37256                     .call(reset)
37257                     .each(function(d) {
37258                         var s = d3_select(this);
37259                         var tag = s.node().tagName;
37260                         var p = {'from': {}, 'to': {}};
37261                         var opacity;
37262                         var width;
37263
37264                         // determine base opacity and width
37265                         if (tag === 'circle') {
37266                             opacity = parseFloat(s.style('fill-opacity') || 0.5);
37267                             width = parseFloat(s.style('r') || 15.5);
37268                         } else {
37269                             opacity = parseFloat(s.style('stroke-opacity') || 0.7);
37270                             width = parseFloat(s.style('stroke-width') || 10);
37271                         }
37272
37273                         // calculate from/to interpolation params..
37274                         p.tag = tag;
37275                         p.from.opacity = opacity * 0.6;
37276                         p.to.opacity = opacity * 1.25;
37277                         p.from.width = width * 0.7;
37278                         p.to.width = width * (tag === 'circle' ? 1.5 : 1);
37279                         _params[d.id] = p;
37280                     });
37281             }
37282
37283
37284             function run(surface, fromTo) {
37285                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
37286                 var currSelected = surface.selectAll(selector);
37287                 var currClassed = surface.attr('class');
37288
37289                 if (_done || currSelected.empty()) {
37290                     _selected.call(reset);
37291                     return;
37292                 }
37293
37294                 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
37295                     _selected.call(reset);
37296                     _classed = currClassed;
37297                     _selected = currSelected.call(calcAnimationParams);
37298                 }
37299
37300                 _selected
37301                     .transition()
37302                     .duration(duration)
37303                     .call(setAnimationParams, fromTo)
37304                     .on('end', function() {
37305                         surface.call(run, toFrom);
37306                     });
37307             }
37308
37309
37310             function behavior(surface) {
37311                 _done = false;
37312                 _timer = timer(function() {
37313                     // wait for elements to actually become selected
37314                     if (surface.selectAll(selector).empty()) {
37315                         return false;
37316                     }
37317
37318                     surface.call(run, 'from');
37319                     _timer.stop();
37320                     return true;
37321                 }, 20);
37322             }
37323
37324
37325             behavior.off = function() {
37326                 _done = true;
37327                 if (_timer) {
37328                     _timer.stop();
37329                 }
37330                 _selected
37331                     .interrupt()
37332                     .call(reset);
37333             };
37334
37335
37336             return behavior;
37337         }
37338
37339         // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
37340         // For example, ⌘Z -> Ctrl+Z
37341         var uiCmd = function (code) {
37342             var detected = utilDetect();
37343
37344             if (detected.os === 'mac') {
37345                 return code;
37346             }
37347
37348             if (detected.os === 'win') {
37349                 if (code === '⌘⇧Z') return 'Ctrl+Y';
37350             }
37351
37352             var result = '',
37353                 replacements = {
37354                     '⌘': 'Ctrl',
37355                     '⇧': 'Shift',
37356                     '⌥': 'Alt',
37357                     '⌫': 'Backspace',
37358                     '⌦': 'Delete'
37359                 };
37360
37361             for (var i = 0; i < code.length; i++) {
37362                 if (code[i] in replacements) {
37363                     result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
37364                 } else {
37365                     result += code[i];
37366                 }
37367             }
37368
37369             return result;
37370         };
37371
37372
37373         // return a display-focused string for a given keyboard code
37374         uiCmd.display = function(code) {
37375             if (code.length !== 1) return code;
37376
37377             var detected = utilDetect();
37378             var mac = (detected.os === 'mac');
37379             var replacements = {
37380                 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
37381                 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
37382                 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
37383                 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
37384                 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
37385                 '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
37386                 '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
37387                 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
37388                 '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
37389                 '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
37390                 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
37391                 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
37392             };
37393
37394             return replacements[code] || code;
37395         };
37396
37397         function behaviorCopy(context) {
37398
37399             function groupEntities(ids, graph) {
37400                 var entities = ids.map(function (id) { return graph.entity(id); });
37401                 return Object.assign(
37402                     { relation: [], way: [], node: [] },
37403                     utilArrayGroupBy(entities, 'type')
37404                 );
37405             }
37406
37407
37408             function getDescendants(id, graph, descendants) {
37409                 var entity = graph.entity(id);
37410                 var children;
37411
37412                 descendants = descendants || {};
37413
37414                 if (entity.type === 'relation') {
37415                     children = entity.members.map(function(m) { return m.id; });
37416                 } else if (entity.type === 'way') {
37417                     children = entity.nodes;
37418                 } else {
37419                     children = [];
37420                 }
37421
37422                 for (var i = 0; i < children.length; i++) {
37423                     if (!descendants[children[i]]) {
37424                         descendants[children[i]] = true;
37425                         descendants = getDescendants(children[i], graph, descendants);
37426                     }
37427                 }
37428
37429                 return descendants;
37430             }
37431
37432
37433             function getSelectionText() {
37434                 return window.getSelection().toString();
37435             }
37436
37437
37438             function doCopy() {
37439                 if (!getSelectionText()) {
37440                     event.preventDefault();
37441                 }
37442
37443                 var graph = context.graph();
37444                 var selected = groupEntities(context.selectedIDs(), graph);
37445                 var canCopy = [];
37446                 var skip = {};
37447                 var entity;
37448                 var i;
37449
37450                 for (i = 0; i < selected.relation.length; i++) {
37451                     entity = selected.relation[i];
37452                     if (!skip[entity.id] && entity.isComplete(graph)) {
37453                         canCopy.push(entity.id);
37454                         skip = getDescendants(entity.id, graph, skip);
37455                     }
37456                 }
37457                 for (i = 0; i < selected.way.length; i++) {
37458                     entity = selected.way[i];
37459                     if (!skip[entity.id]) {
37460                         canCopy.push(entity.id);
37461                         skip = getDescendants(entity.id, graph, skip);
37462                     }
37463                 }
37464                 for (i = 0; i < selected.node.length; i++) {
37465                     entity = selected.node[i];
37466                     if (!skip[entity.id]) {
37467                         canCopy.push(entity.id);
37468                     }
37469                 }
37470
37471                 context.copyIDs(canCopy);
37472             }
37473
37474
37475             function behavior() {
37476                 context.keybinding().on(uiCmd('⌘C'), doCopy);
37477                 return behavior;
37478             }
37479
37480             behavior.off = function() {
37481                 context.keybinding().off(uiCmd('⌘C'));
37482             };
37483
37484
37485             return behavior;
37486         }
37487
37488         var _flashTimer;
37489
37490
37491         function uiFlash() {
37492             var _duration = 2000;
37493             var _iconName = '#iD-icon-no';
37494             var _iconClass = 'disabled';
37495             var _text = '';
37496             var _textClass;
37497
37498
37499             function flash() {
37500                 if (_flashTimer) {
37501                     _flashTimer.stop();
37502                 }
37503
37504                 d3_select('#footer-wrap')
37505                     .attr('class', 'footer-hide');
37506                 d3_select('#flash-wrap')
37507                     .attr('class', 'footer-show');
37508
37509                 var content = d3_select('#flash-wrap').selectAll('.flash-content')
37510                     .data([0]);
37511
37512                 // Enter
37513                 var contentEnter = content.enter()
37514                     .append('div')
37515                     .attr('class', 'flash-content');
37516
37517                 var iconEnter = contentEnter
37518                     .append('svg')
37519                     .attr('class', 'flash-icon')
37520                     .append('g')
37521                     .attr('transform', 'translate(10,10)');
37522
37523                 iconEnter
37524                     .append('circle')
37525                     .attr('r', 9);
37526
37527                 iconEnter
37528                     .append('use')
37529                     .attr('transform', 'translate(-7,-7)')
37530                     .attr('width', '14')
37531                     .attr('height', '14');
37532
37533                 contentEnter
37534                     .append('div')
37535                     .attr('class', 'flash-text');
37536
37537
37538                 // Update
37539                 content = content
37540                     .merge(contentEnter);
37541
37542                 content
37543                     .selectAll('.flash-icon')
37544                     .attr('class', 'flash-icon ' + (_iconClass || ''));
37545
37546                 content
37547                     .selectAll('.flash-icon use')
37548                     .attr('xlink:href', _iconName);
37549
37550                 content
37551                     .selectAll('.flash-text')
37552                     .attr('class', 'flash-text ' + (_textClass || ''))
37553                     .text(_text);
37554
37555
37556                 _flashTimer = d3_timeout(function() {
37557                     _flashTimer = null;
37558                     d3_select('#footer-wrap')
37559                         .attr('class', 'footer-show');
37560                     d3_select('#flash-wrap')
37561                         .attr('class', 'footer-hide');
37562                 }, _duration);
37563
37564                 return content;
37565             }
37566
37567
37568             flash.duration = function(_) {
37569                 if (!arguments.length) return _duration;
37570                 _duration = _;
37571                 return flash;
37572             };
37573
37574             flash.text = function(_) {
37575                 if (!arguments.length) return _text;
37576                 _text = _;
37577                 return flash;
37578             };
37579
37580             flash.textClass = function(_) {
37581                 if (!arguments.length) return _textClass;
37582                 _textClass = _;
37583                 return flash;
37584             };
37585
37586             flash.iconName = function(_) {
37587                 if (!arguments.length) return _iconName;
37588                 _iconName = _;
37589                 return flash;
37590             };
37591
37592             flash.iconClass = function(_) {
37593                 if (!arguments.length) return _iconClass;
37594                 _iconClass = _;
37595                 return flash;
37596             };
37597
37598             return flash;
37599         }
37600
37601         /* Creates a keybinding behavior for an operation */
37602         function behaviorOperation(context) {
37603             var _operation;
37604
37605             function keypress() {
37606                 event.preventDefault();
37607                 var disabled = _operation.disabled();
37608                 var flash;
37609
37610                 if (disabled) {
37611                     flash = uiFlash()
37612                         .duration(4000)
37613                         .iconName('#iD-operation-' + _operation.id)
37614                         .iconClass('operation disabled')
37615                         .text(_operation.tooltip);
37616
37617                     flash();
37618
37619                 } else {
37620                     flash = uiFlash()
37621                         .duration(2000)
37622                         .iconName('#iD-operation-' + _operation.id)
37623                         .iconClass('operation')
37624                         .text(_operation.annotation() || _operation.title);
37625
37626                     flash();
37627                     _operation();
37628                 }
37629             }
37630
37631
37632             function behavior() {
37633                 if (_operation && _operation.available()) {
37634                     context.keybinding()
37635                         .on(_operation.keys, keypress);
37636                 }
37637
37638                 return behavior;
37639             }
37640
37641
37642             behavior.off = function() {
37643                 context.keybinding()
37644                     .off(_operation.keys);
37645             };
37646
37647
37648             behavior.which = function (_) {
37649                 if (!arguments.length) return _operation;
37650                 _operation = _;
37651                 return behavior;
37652             };
37653
37654
37655             return behavior;
37656         }
37657
37658         function operationCircularize(selectedIDs, context) {
37659             var entityID = selectedIDs[0];
37660             var entity = context.entity(entityID);
37661             var extent = entity.extent(context.graph());
37662             var geometry = context.geometry(entityID);
37663             var action = actionCircularize(entityID, context.projection);
37664             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37665             var coords = nodes.map(function(n) { return n.loc; });
37666
37667             var operation = function() {
37668                 context.perform(action, operation.annotation());
37669
37670                 window.setTimeout(function() {
37671                     context.validator().validate();
37672                 }, 300);  // after any transition
37673             };
37674
37675
37676             operation.available = function() {
37677                 return selectedIDs.length === 1 &&
37678                     entity.type === 'way' &&
37679                     new Set(entity.nodes).size > 1;
37680             };
37681
37682
37683             // don't cache this because the visible extent could change
37684             operation.disabled = function() {
37685                 var actionDisabled = action.disabled(context.graph());
37686                 if (actionDisabled) {
37687                     return actionDisabled;
37688                 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
37689                     return 'too_large';
37690                 } else if (someMissing()) {
37691                     return 'not_downloaded';
37692                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37693                     return 'connected_to_hidden';
37694                 }
37695
37696                 return false;
37697
37698
37699                 function someMissing() {
37700                     if (context.inIntro()) return false;
37701                     var osm = context.connection();
37702                     if (osm) {
37703                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37704                         if (missing.length) {
37705                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37706                             return true;
37707                         }
37708                     }
37709                     return false;
37710                 }
37711             };
37712
37713
37714             operation.tooltip = function() {
37715                 var disable = operation.disabled();
37716                 return disable ?
37717                     t('operations.circularize.' + disable) :
37718                     t('operations.circularize.description.' + geometry);
37719             };
37720
37721
37722             operation.annotation = function() {
37723                 return t('operations.circularize.annotation.' + geometry);
37724             };
37725
37726
37727             operation.id = 'circularize';
37728             operation.keys = [t('operations.circularize.key')];
37729             operation.title = t('operations.circularize.title');
37730             operation.behavior = behaviorOperation(context).which(operation);
37731
37732             return operation;
37733         }
37734
37735         function operationDelete(selectedIDs, context) {
37736             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
37737             var action = actionDeleteMultiple(selectedIDs);
37738             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37739             var coords = nodes.map(function(n) { return n.loc; });
37740             var extent = nodes.reduce(function(extent, node) {
37741                 return extent.extend(node.extent(context.graph()));
37742             }, geoExtent());
37743
37744
37745             var operation = function() {
37746                 var nextSelectedID;
37747                 var nextSelectedLoc;
37748
37749                 if (selectedIDs.length === 1) {
37750                     var id = selectedIDs[0];
37751                     var entity = context.entity(id);
37752                     var geometry = context.geometry(id);
37753                     var parents = context.graph().parentWays(entity);
37754                     var parent = parents[0];
37755
37756                     // Select the next closest node in the way.
37757                     if (geometry === 'vertex') {
37758                         var nodes = parent.nodes;
37759                         var i = nodes.indexOf(id);
37760
37761                         if (i === 0) {
37762                             i++;
37763                         } else if (i === nodes.length - 1) {
37764                             i--;
37765                         } else {
37766                             var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
37767                             var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
37768                             i = a < b ? i - 1 : i + 1;
37769                         }
37770
37771                         nextSelectedID = nodes[i];
37772                         nextSelectedLoc = context.entity(nextSelectedID).loc;
37773                     }
37774                 }
37775
37776                 context.perform(action, operation.annotation());
37777                 context.validator().validate();
37778
37779                 if (nextSelectedID && nextSelectedLoc) {
37780                     if (context.hasEntity(nextSelectedID)) {
37781                         context.enter(modeSelect(context, [nextSelectedID]).follow(true));
37782                     } else {
37783                         context.map().centerEase(nextSelectedLoc);
37784                         context.enter(modeBrowse(context));
37785                     }
37786                 } else {
37787                     context.enter(modeBrowse(context));
37788                 }
37789
37790             };
37791
37792
37793             operation.available = function() {
37794                 return true;
37795             };
37796
37797
37798             operation.disabled = function() {
37799                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
37800                     return 'too_large';
37801                 } else if (someMissing()) {
37802                     return 'not_downloaded';
37803                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37804                     return 'connected_to_hidden';
37805                 } else if (selectedIDs.some(protectedMember)) {
37806                     return 'part_of_relation';
37807                 } else if (selectedIDs.some(incompleteRelation)) {
37808                     return 'incomplete_relation';
37809                 } else if (selectedIDs.some(hasWikidataTag)) {
37810                     return 'has_wikidata_tag';
37811                 }
37812
37813                 return false;
37814
37815
37816                 function someMissing() {
37817                     if (context.inIntro()) return false;
37818                     var osm = context.connection();
37819                     if (osm) {
37820                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37821                         if (missing.length) {
37822                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37823                             return true;
37824                         }
37825                     }
37826                     return false;
37827                 }
37828
37829                 function hasWikidataTag(id) {
37830                     var entity = context.entity(id);
37831                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
37832                 }
37833
37834                 function incompleteRelation(id) {
37835                     var entity = context.entity(id);
37836                     return entity.type === 'relation' && !entity.isComplete(context.graph());
37837                 }
37838
37839                 function protectedMember(id) {
37840                     var entity = context.entity(id);
37841                     if (entity.type !== 'way') return false;
37842
37843                     var parents = context.graph().parentRelations(entity);
37844                     for (var i = 0; i < parents.length; i++) {
37845                         var parent = parents[i];
37846                         var type = parent.tags.type;
37847                         var role = parent.memberById(id).role || 'outer';
37848                         if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
37849                             return true;
37850                         }
37851                     }
37852                     return false;
37853                 }
37854             };
37855
37856
37857             operation.tooltip = function() {
37858                 var disable = operation.disabled();
37859                 return disable ?
37860                     t('operations.delete.' + disable + '.' + multi) :
37861                     t('operations.delete.description' + '.' + multi);
37862             };
37863
37864
37865             operation.annotation = function() {
37866                 return selectedIDs.length === 1 ?
37867                     t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
37868                     t('operations.delete.annotation.multiple', { n: selectedIDs.length });
37869             };
37870
37871
37872             operation.id = 'delete';
37873             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
37874             operation.title = t('operations.delete.title');
37875             operation.behavior = behaviorOperation(context).which(operation);
37876
37877             return operation;
37878         }
37879
37880         function operationOrthogonalize(selectedIDs, context) {
37881             var _entityID;
37882             var _entity;
37883             var _geometry;
37884             var action = chooseAction();
37885             var nodes = utilGetAllNodes(selectedIDs, context.graph());
37886             var coords = nodes.map(function(n) { return n.loc; });
37887
37888
37889             function chooseAction() {
37890                 if (selectedIDs.length !== 1) return null;
37891
37892                 _entityID = selectedIDs[0];
37893                 _entity = context.entity(_entityID);
37894                 _geometry = context.geometry(_entityID);
37895
37896                 // square a line/area
37897                 if (_entity.type === 'way' && new Set(_entity.nodes).size > 2 ) {
37898                     return actionOrthogonalize(_entityID, context.projection);
37899
37900                 // square a single vertex
37901                 } else if (_geometry === 'vertex') {
37902                     var graph = context.graph();
37903                     var parents = graph.parentWays(_entity);
37904                     if (parents.length === 1) {
37905                         var way = parents[0];
37906                         if (way.nodes.indexOf(_entityID) !== -1) {
37907                             return actionOrthogonalize(way.id, context.projection, _entityID);
37908                         }
37909                     }
37910                 }
37911
37912                 return null;
37913             }
37914
37915
37916             var operation = function() {
37917                 if (!action) return;
37918
37919                 context.perform(action, operation.annotation());
37920
37921                 window.setTimeout(function() {
37922                     context.validator().validate();
37923                 }, 300);  // after any transition
37924             };
37925
37926
37927             operation.available = function() {
37928                 return Boolean(action);
37929             };
37930
37931
37932             // don't cache this because the visible extent could change
37933             operation.disabled = function() {
37934                 if (!action) return '';
37935
37936                 var actionDisabled = action.disabled(context.graph());
37937                 if (actionDisabled) {
37938                     return actionDisabled;
37939                 } else if (_geometry !== 'vertex' &&
37940                            _entity.extent(context.graph()).percentContainedIn(context.extent()) < 0.8) {
37941                     return 'too_large';
37942                 } else if (someMissing()) {
37943                     return 'not_downloaded';
37944                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
37945                     return 'connected_to_hidden';
37946                 }
37947
37948                 return false;
37949
37950
37951                 function someMissing() {
37952                     if (context.inIntro()) return false;
37953                     var osm = context.connection();
37954                     if (osm) {
37955                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
37956                         if (missing.length) {
37957                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
37958                             return true;
37959                         }
37960                     }
37961                     return false;
37962                 }
37963             };
37964
37965
37966             operation.tooltip = function() {
37967                 var disable = operation.disabled();
37968                 return disable ?
37969                     t('operations.orthogonalize.' + disable) :
37970                     t('operations.orthogonalize.description.' + _geometry);
37971             };
37972
37973
37974             operation.annotation = function() {
37975                 return t('operations.orthogonalize.annotation.' + _geometry);
37976             };
37977
37978
37979             operation.id = 'orthogonalize';
37980             operation.keys = [t('operations.orthogonalize.key')];
37981             operation.title = t('operations.orthogonalize.title');
37982             operation.behavior = behaviorOperation(context).which(operation);
37983
37984             return operation;
37985         }
37986
37987         function operationReflectShort(selectedIDs, context) {
37988             return operationReflect(selectedIDs, context, 'short');
37989         }
37990
37991
37992         function operationReflectLong(selectedIDs, context) {
37993             return operationReflect(selectedIDs, context, 'long');
37994         }
37995
37996
37997         function operationReflect(selectedIDs, context, axis) {
37998             axis = axis || 'long';
37999             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38000             var nodes = utilGetAllNodes(selectedIDs, context.graph());
38001             var coords = nodes.map(function(n) { return n.loc; });
38002             var extent = nodes.reduce(function(extent, node) {
38003                 return extent.extend(node.extent(context.graph()));
38004             }, geoExtent());
38005
38006
38007             var operation = function() {
38008                 var action = actionReflect(selectedIDs, context.projection)
38009                     .useLongAxis(Boolean(axis === 'long'));
38010
38011                 context.perform(action, operation.annotation());
38012
38013                 window.setTimeout(function() {
38014                     context.validator().validate();
38015                 }, 300);  // after any transition
38016             };
38017
38018
38019             operation.available = function() {
38020                 return nodes.length >= 3;
38021             };
38022
38023
38024             // don't cache this because the visible extent could change
38025             operation.disabled = function() {
38026                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38027                     return 'too_large';
38028                 } else if (someMissing()) {
38029                     return 'not_downloaded';
38030                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38031                     return 'connected_to_hidden';
38032                 } else if (selectedIDs.some(incompleteRelation)) {
38033                     return 'incomplete_relation';
38034                 }
38035
38036                 return false;
38037
38038
38039                 function someMissing() {
38040                     if (context.inIntro()) return false;
38041                     var osm = context.connection();
38042                     if (osm) {
38043                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38044                         if (missing.length) {
38045                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38046                             return true;
38047                         }
38048                     }
38049                     return false;
38050                 }
38051
38052                 function incompleteRelation(id) {
38053                     var entity = context.entity(id);
38054                     return entity.type === 'relation' && !entity.isComplete(context.graph());
38055                 }
38056             };
38057
38058
38059             operation.tooltip = function() {
38060                 var disable = operation.disabled();
38061                 return disable ?
38062                     t('operations.reflect.' + disable + '.' + multi) :
38063                     t('operations.reflect.description.' + axis + '.' + multi);
38064             };
38065
38066
38067             operation.annotation = function() {
38068                 return t('operations.reflect.annotation.' + axis + '.' + multi);
38069             };
38070
38071
38072             operation.id = 'reflect-' + axis;
38073             operation.keys = [t('operations.reflect.key.' + axis)];
38074             operation.title = t('operations.reflect.title.' + axis);
38075             operation.behavior = behaviorOperation(context).which(operation);
38076
38077             return operation;
38078         }
38079
38080         function operationMove(selectedIDs, context) {
38081             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38082             var nodes = utilGetAllNodes(selectedIDs, context.graph());
38083             var coords = nodes.map(function(n) { return n.loc; });
38084             var extent = nodes.reduce(function(extent, node) {
38085                 return extent.extend(node.extent(context.graph()));
38086             }, geoExtent());
38087
38088
38089             var operation = function() {
38090                 context.enter(modeMove(context, selectedIDs));
38091             };
38092
38093
38094             operation.available = function() {
38095                 return selectedIDs.length > 1 ||
38096                     context.entity(selectedIDs[0]).type !== 'node';
38097             };
38098
38099
38100             operation.disabled = function() {
38101                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38102                     return 'too_large';
38103                 } else if (someMissing()) {
38104                     return 'not_downloaded';
38105                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38106                     return 'connected_to_hidden';
38107                 } else if (selectedIDs.some(incompleteRelation)) {
38108                     return 'incomplete_relation';
38109                 }
38110
38111                 return false;
38112
38113
38114                 function someMissing() {
38115                     if (context.inIntro()) return false;
38116                     var osm = context.connection();
38117                     if (osm) {
38118                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38119                         if (missing.length) {
38120                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38121                             return true;
38122                         }
38123                     }
38124                     return false;
38125                 }
38126
38127                 function incompleteRelation(id) {
38128                     var entity = context.entity(id);
38129                     return entity.type === 'relation' && !entity.isComplete(context.graph());
38130                 }
38131             };
38132
38133
38134             operation.tooltip = function() {
38135                 var disable = operation.disabled();
38136                 return disable ?
38137                     t('operations.move.' + disable + '.' + multi) :
38138                     t('operations.move.description.' + multi);
38139             };
38140
38141
38142             operation.annotation = function() {
38143                 return selectedIDs.length === 1 ?
38144                     t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
38145                     t('operations.move.annotation.multiple');
38146             };
38147
38148
38149             operation.id = 'move';
38150             operation.keys = [t('operations.move.key')];
38151             operation.title = t('operations.move.title');
38152             operation.behavior = behaviorOperation(context).which(operation);
38153
38154             return operation;
38155         }
38156
38157         function modeRotate(context, entityIDs) {
38158             var mode = {
38159                 id: 'rotate',
38160                 button: 'browse'
38161             };
38162
38163             var keybinding = utilKeybinding('rotate');
38164             var behaviors = [
38165                 behaviorEdit(context),
38166                 operationCircularize(entityIDs, context).behavior,
38167                 operationDelete(entityIDs, context).behavior,
38168                 operationMove(entityIDs, context).behavior,
38169                 operationOrthogonalize(entityIDs, context).behavior,
38170                 operationReflectLong(entityIDs, context).behavior,
38171                 operationReflectShort(entityIDs, context).behavior
38172             ];
38173             var annotation = entityIDs.length === 1 ?
38174                 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
38175                 t('operations.rotate.annotation.multiple');
38176
38177             var _prevGraph;
38178             var _prevAngle;
38179             var _prevTransform;
38180             var _pivot;
38181
38182
38183             function doRotate() {
38184                 var fn;
38185                 if (context.graph() !== _prevGraph) {
38186                     fn = context.perform;
38187                 } else {
38188                     fn = context.replace;
38189                 }
38190
38191                 // projection changed, recalculate _pivot
38192                 var projection = context.projection;
38193                 var currTransform = projection.transform();
38194                 if (!_prevTransform ||
38195                     currTransform.k !== _prevTransform.k ||
38196                     currTransform.x !== _prevTransform.x ||
38197                     currTransform.y !== _prevTransform.y) {
38198
38199                     var nodes = utilGetAllNodes(entityIDs, context.graph());
38200                     var points = nodes.map(function(n) { return projection(n.loc); });
38201
38202                     if (points.length === 1) {  // degenerate case
38203                         _pivot = points[0];
38204                     } else if (points.length === 2) {
38205                         _pivot = geoVecInterp(points[0], points[1], 0.5);
38206                     } else {
38207                         _pivot = d3_polygonCentroid(d3_polygonHull(points));
38208                     }
38209                     _prevAngle = undefined;
38210                 }
38211
38212
38213                 var currMouse = context.mouse();
38214                 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
38215
38216                 if (typeof _prevAngle === 'undefined') _prevAngle = currAngle;
38217                 var delta = currAngle - _prevAngle;
38218
38219                 fn(actionRotate(entityIDs, _pivot, delta, projection));
38220
38221                 _prevTransform = currTransform;
38222                 _prevAngle = currAngle;
38223                 _prevGraph = context.graph();
38224             }
38225
38226
38227             function finish() {
38228                 event.stopPropagation();
38229                 context.replace(actionNoop(), annotation);
38230                 context.enter(modeSelect(context, entityIDs));
38231             }
38232
38233
38234             function cancel() {
38235                 context.pop();
38236                 context.enter(modeSelect(context, entityIDs));
38237             }
38238
38239
38240             function undone() {
38241                 context.enter(modeBrowse(context));
38242             }
38243
38244
38245             mode.enter = function() {
38246                 context.features().forceVisible(entityIDs);
38247
38248                 behaviors.forEach(context.install);
38249
38250                 context.surface()
38251                     .on('mousemove.rotate', doRotate)
38252                     .on('click.rotate', finish);
38253
38254                 context.history()
38255                     .on('undone.rotate', undone);
38256
38257                 keybinding
38258                     .on('⎋', cancel)
38259                     .on('↩', finish);
38260
38261                 d3_select(document)
38262                     .call(keybinding);
38263             };
38264
38265
38266             mode.exit = function() {
38267                 behaviors.forEach(context.uninstall);
38268
38269                 context.surface()
38270                     .on('mousemove.rotate', null)
38271                     .on('click.rotate', null);
38272
38273                 context.history()
38274                     .on('undone.rotate', null);
38275
38276                 d3_select(document)
38277                     .call(keybinding.unbind);
38278
38279                 context.features().forceVisible([]);
38280             };
38281
38282
38283             mode.selectedIDs = function() {
38284                 if (!arguments.length) return entityIDs;
38285                 // no assign
38286                 return mode;
38287             };
38288
38289
38290             return mode;
38291         }
38292
38293         function operationRotate(selectedIDs, context) {
38294             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
38295             var nodes = utilGetAllNodes(selectedIDs, context.graph());
38296             var coords = nodes.map(function(n) { return n.loc; });
38297             var extent = nodes.reduce(function(extent, node) {
38298                 return extent.extend(node.extent(context.graph()));
38299             }, geoExtent());
38300
38301
38302             var operation = function() {
38303                 context.enter(modeRotate(context, selectedIDs));
38304             };
38305
38306
38307             operation.available = function() {
38308                 return nodes.length >= 2;
38309             };
38310
38311
38312             operation.disabled = function() {
38313
38314                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
38315                     return 'too_large';
38316                 } else if (someMissing()) {
38317                     return 'not_downloaded';
38318                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
38319                     return 'connected_to_hidden';
38320                 } else if (selectedIDs.some(incompleteRelation)) {
38321                     return 'incomplete_relation';
38322                 }
38323
38324                 return false;
38325
38326
38327                 function someMissing() {
38328                     if (context.inIntro()) return false;
38329                     var osm = context.connection();
38330                     if (osm) {
38331                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
38332                         if (missing.length) {
38333                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
38334                             return true;
38335                         }
38336                     }
38337                     return false;
38338                 }
38339
38340                 function incompleteRelation(id) {
38341                     var entity = context.entity(id);
38342                     return entity.type === 'relation' && !entity.isComplete(context.graph());
38343                 }
38344             };
38345
38346
38347             operation.tooltip = function() {
38348                 var disable = operation.disabled();
38349                 return disable ?
38350                     t('operations.rotate.' + disable + '.' + multi) :
38351                     t('operations.rotate.description.' + multi);
38352             };
38353
38354
38355             operation.annotation = function() {
38356                 return selectedIDs.length === 1 ?
38357                     t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
38358                     t('operations.rotate.annotation.multiple');
38359             };
38360
38361
38362             operation.id = 'rotate';
38363             operation.keys = [t('operations.rotate.key')];
38364             operation.title = t('operations.rotate.title');
38365             operation.behavior = behaviorOperation(context).which(operation);
38366
38367             return operation;
38368         }
38369
38370         function modeMove(context, entityIDs, baseGraph) {
38371             var mode = {
38372                 id: 'move',
38373                 button: 'browse'
38374             };
38375
38376             var keybinding = utilKeybinding('move');
38377             var behaviors = [
38378                 behaviorEdit(context),
38379                 operationCircularize(entityIDs, context).behavior,
38380                 operationDelete(entityIDs, context).behavior,
38381                 operationOrthogonalize(entityIDs, context).behavior,
38382                 operationReflectLong(entityIDs, context).behavior,
38383                 operationReflectShort(entityIDs, context).behavior,
38384                 operationRotate(entityIDs, context).behavior
38385             ];
38386             var annotation = entityIDs.length === 1 ?
38387                 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
38388                 t('operations.move.annotation.multiple');
38389
38390             var _prevGraph;
38391             var _cache;
38392             var _origin;
38393             var _nudgeInterval;
38394
38395
38396             function doMove(nudge) {
38397                 nudge = nudge || [0, 0];
38398
38399                 var fn;
38400                 if (_prevGraph !== context.graph()) {
38401                     _cache = {};
38402                     _origin = context.map().mouseCoordinates();
38403                     fn = context.perform;
38404                 } else {
38405                     fn = context.overwrite;
38406                 }
38407
38408                 var currMouse = context.mouse();
38409                 var origMouse = context.projection(_origin);
38410                 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
38411
38412                 fn(actionMove(entityIDs, delta, context.projection, _cache));
38413                 _prevGraph = context.graph();
38414             }
38415
38416
38417             function startNudge(nudge) {
38418                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38419                 _nudgeInterval = window.setInterval(function() {
38420                     context.pan(nudge);
38421                     doMove(nudge);
38422                 }, 50);
38423             }
38424
38425
38426             function stopNudge() {
38427                 if (_nudgeInterval) {
38428                     window.clearInterval(_nudgeInterval);
38429                     _nudgeInterval = null;
38430                 }
38431             }
38432
38433
38434             function move() {
38435                 doMove();
38436                 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
38437                 if (nudge) {
38438                     startNudge(nudge);
38439                 } else {
38440                     stopNudge();
38441                 }
38442             }
38443
38444
38445             function finish() {
38446                 event.stopPropagation();
38447                 context.replace(actionNoop(), annotation);
38448                 context.enter(modeSelect(context, entityIDs));
38449                 stopNudge();
38450             }
38451
38452
38453             function cancel() {
38454                 if (baseGraph) {
38455                     while (context.graph() !== baseGraph) context.pop();
38456                     context.enter(modeBrowse(context));
38457                 } else {
38458                     context.pop();
38459                     context.enter(modeSelect(context, entityIDs));
38460                 }
38461                 stopNudge();
38462             }
38463
38464
38465             function undone() {
38466                 context.enter(modeBrowse(context));
38467             }
38468
38469
38470             mode.enter = function() {
38471                 _origin = context.map().mouseCoordinates();
38472                 _prevGraph = null;
38473                 _cache = {};
38474
38475                 context.features().forceVisible(entityIDs);
38476
38477                 behaviors.forEach(context.install);
38478
38479                 context.surface()
38480                     .on('mousemove.move', move)
38481                     .on('click.move', finish);
38482
38483                 context.history()
38484                     .on('undone.move', undone);
38485
38486                 keybinding
38487                     .on('⎋', cancel)
38488                     .on('↩', finish);
38489
38490                 d3_select(document)
38491                     .call(keybinding);
38492             };
38493
38494
38495             mode.exit = function() {
38496                 stopNudge();
38497
38498                 behaviors.forEach(function(behavior) {
38499                     context.uninstall(behavior);
38500                 });
38501
38502                 context.surface()
38503                     .on('mousemove.move', null)
38504                     .on('click.move', null);
38505
38506                 context.history()
38507                     .on('undone.move', null);
38508
38509                 d3_select(document)
38510                     .call(keybinding.unbind);
38511
38512                 context.features().forceVisible([]);
38513             };
38514
38515
38516             mode.selectedIDs = function() {
38517                 if (!arguments.length) return entityIDs;
38518                 // no assign
38519                 return mode;
38520             };
38521
38522
38523             return mode;
38524         }
38525
38526         function behaviorPaste(context) {
38527
38528             function doPaste() {
38529                 event.preventDefault();
38530
38531                 var baseGraph = context.graph();
38532                 var mouse = context.mouse();
38533                 var projection = context.projection;
38534                 var viewport = geoExtent(projection.clipExtent()).polygon();
38535
38536                 if (!geoPointInPolygon(mouse, viewport)) return;
38537
38538                 var extent = geoExtent();
38539                 var oldIDs = context.copyIDs();
38540                 var oldGraph = context.copyGraph();
38541                 var newIDs = [];
38542
38543                 if (!oldIDs.length) return;
38544
38545                 var action = actionCopyEntities(oldIDs, oldGraph);
38546                 context.perform(action);
38547
38548                 var copies = action.copies();
38549                 var originals = new Set();
38550                 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
38551
38552                 for (var id in copies) {
38553                     var oldEntity = oldGraph.entity(id);
38554                     var newEntity = copies[id];
38555
38556                     extent._extend(oldEntity.extent(oldGraph));
38557
38558                     // Exclude child nodes from newIDs if their parent way was also copied.
38559                     var parents = context.graph().parentWays(newEntity);
38560                     var parentCopied = parents.some(function(parent) {
38561                         return originals.has(parent.id);
38562                     });
38563
38564                     if (!parentCopied) {
38565                         newIDs.push(newEntity.id);
38566                     }
38567                 }
38568
38569                 // Put pasted objects where mouse pointer is..
38570                 var center = projection(extent.center());
38571                 var delta = geoVecSubtract(mouse, center);
38572
38573                 context.perform(actionMove(newIDs, delta, projection));
38574                 context.enter(modeMove(context, newIDs, baseGraph));
38575             }
38576
38577
38578             function behavior() {
38579                 context.keybinding().on(uiCmd('⌘V'), doPaste);
38580                 return behavior;
38581             }
38582
38583
38584             behavior.off = function() {
38585                 context.keybinding().off(uiCmd('⌘V'));
38586             };
38587
38588
38589             return behavior;
38590         }
38591
38592         /*
38593             `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
38594
38595             * The `origin` function is expected to return an [x, y] tuple rather than an
38596               {x, y} object.
38597             * The events are `start`, `move`, and `end`.
38598               (https://github.com/mbostock/d3/issues/563)
38599             * The `start` event is not dispatched until the first cursor movement occurs.
38600               (https://github.com/mbostock/d3/pull/368)
38601             * The `move` event has a `point` and `delta` [x, y] tuple properties rather
38602               than `x`, `y`, `dx`, and `dy` properties.
38603             * The `end` event is not dispatched if no movement occurs.
38604             * An `off` function is available that unbinds the drag's internal event handlers.
38605          */
38606
38607         function behaviorDrag() {
38608             var dispatch$1 = dispatch('start', 'move', 'end');
38609             var _origin = null;
38610             var _selector = '';
38611             var _event;
38612             var _target;
38613             var _surface;
38614
38615
38616             var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
38617             var d3_event_userSelectSuppress = function() {
38618                     var selection$1 = selection();
38619                     var select = selection$1.style(d3_event_userSelectProperty);
38620                     selection$1.style(d3_event_userSelectProperty, 'none');
38621                     return function() {
38622                         selection$1.style(d3_event_userSelectProperty, select);
38623                     };
38624                 };
38625
38626
38627             function d3_eventCancel() {
38628                 event.stopPropagation();
38629                 event.preventDefault();
38630             }
38631
38632
38633             function eventOf(thiz, argumentz) {
38634                 return function(e1) {
38635                     e1.target = behavior;
38636                     customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
38637                 };
38638             }
38639
38640
38641             function dragstart() {
38642                 _target = this;
38643                 _event = eventOf(_target, arguments);
38644
38645                 var eventTarget = event.target;
38646                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
38647                 var offset;
38648                 var startOrigin = point();
38649                 var started = false;
38650                 var selectEnable = d3_event_userSelectSuppress();
38651
38652                 d3_select(window)
38653                     .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
38654                     .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
38655
38656                 if (_origin) {
38657                     offset = _origin.apply(_target, arguments);
38658                     offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
38659                 } else {
38660                     offset = [0, 0];
38661                 }
38662
38663                 if (touchId === null) {
38664                     event.stopPropagation();
38665                 }
38666
38667
38668                 function point() {
38669                     var p = _surface || _target.parentNode;
38670                     return touchId !== null ? d3_touches(p).filter(function(p) {
38671                         return p.identifier === touchId;
38672                     })[0] : d3_mouse(p);
38673                 }
38674
38675
38676                 function dragmove() {
38677                     var p = point();
38678                     var dx = p[0] - startOrigin[0];
38679                     var dy = p[1] - startOrigin[1];
38680
38681                     if (dx === 0 && dy === 0)
38682                         return;
38683
38684                     startOrigin = p;
38685                     d3_eventCancel();
38686
38687                     if (!started) {
38688                         started = true;
38689                         _event({ type: 'start' });
38690                     } else {
38691                         _event({
38692                             type: 'move',
38693                             point: [p[0] + offset[0],  p[1] + offset[1]],
38694                             delta: [dx, dy]
38695                         });
38696                     }
38697                 }
38698
38699
38700                 function dragend() {
38701                     if (started) {
38702                         _event({ type: 'end' });
38703
38704                         d3_eventCancel();
38705                         if (event.target === eventTarget) {
38706                             d3_select(window)
38707                                 .on('click.drag', click, true);
38708                         }
38709                     }
38710
38711                     d3_select(window)
38712                         .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
38713                         .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
38714
38715                     selectEnable();
38716                 }
38717
38718
38719                 function click() {
38720                     d3_eventCancel();
38721                     d3_select(window)
38722                         .on('click.drag', null);
38723                 }
38724             }
38725
38726
38727             function behavior(selection) {
38728                 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
38729                 var delegate = dragstart;
38730
38731                 if (_selector) {
38732                     delegate = function() {
38733                         var root = this;
38734                         var target = event.target;
38735                         for (; target && target !== root; target = target.parentNode) {
38736                             var datum = target.__data__;
38737
38738                             var entity = datum instanceof osmNote ? datum
38739                                 : datum && datum.properties && datum.properties.entity;
38740
38741                             if (entity && target[matchesSelector](_selector)) {
38742                                 return dragstart.call(target, entity);
38743                             }
38744                         }
38745                     };
38746                 }
38747
38748                 selection
38749                     .on('mousedown.drag' + _selector, delegate)
38750                     .on('touchstart.drag' + _selector, delegate);
38751             }
38752
38753
38754             behavior.off = function(selection) {
38755                 selection
38756                     .on('mousedown.drag' + _selector, null)
38757                     .on('touchstart.drag' + _selector, null);
38758             };
38759
38760
38761             behavior.selector = function(_) {
38762                 if (!arguments.length) return _selector;
38763                 _selector = _;
38764                 return behavior;
38765             };
38766
38767
38768             behavior.origin = function(_) {
38769                 if (!arguments.length) return _origin;
38770                 _origin = _;
38771                 return behavior;
38772             };
38773
38774
38775             behavior.cancel = function() {
38776                 d3_select(window)
38777                     .on('mousemove.drag', null)
38778                     .on('mouseup.drag', null);
38779                 return behavior;
38780             };
38781
38782
38783             behavior.target = function() {
38784                 if (!arguments.length) return _target;
38785                 _target = arguments[0];
38786                 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
38787                 return behavior;
38788             };
38789
38790
38791             behavior.surface = function() {
38792                 if (!arguments.length) return _surface;
38793                 _surface = arguments[0];
38794                 return behavior;
38795             };
38796
38797
38798             return utilRebind(behavior, dispatch$1, 'on');
38799         }
38800
38801         function modeDragNode(context) {
38802             var mode = {
38803                 id: 'drag-node',
38804                 button: 'browse'
38805             };
38806             var hover = behaviorHover(context).altDisables(true)
38807                 .on('hover', context.ui().sidebar.hover);
38808             var edit = behaviorEdit(context);
38809
38810             var _nudgeInterval;
38811             var _restoreSelectedIDs = [];
38812             var _wasMidpoint = false;
38813             var _isCancelled = false;
38814             var _activeEntity;
38815             var _startLoc;
38816             var _lastLoc;
38817
38818
38819             function startNudge(entity, nudge) {
38820                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
38821                 _nudgeInterval = window.setInterval(function() {
38822                     context.pan(nudge);
38823                     doMove(entity, nudge);
38824                 }, 50);
38825             }
38826
38827
38828             function stopNudge() {
38829                 if (_nudgeInterval) {
38830                     window.clearInterval(_nudgeInterval);
38831                     _nudgeInterval = null;
38832                 }
38833             }
38834
38835
38836             function moveAnnotation(entity) {
38837                 return t('operations.move.annotation.' + entity.geometry(context.graph()));
38838             }
38839
38840
38841             function connectAnnotation(nodeEntity, targetEntity) {
38842                 var nodeGeometry = nodeEntity.geometry(context.graph());
38843                 var targetGeometry = targetEntity.geometry(context.graph());
38844                 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
38845                     var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
38846                     var targetParentWayIDs = context.graph().parentWays(targetEntity);
38847                     var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
38848                     // if both vertices are part of the same way
38849                     if (sharedParentWays.length !== 0) {
38850                         // if the nodes are next to each other, they are merged
38851                         if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
38852                             return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
38853                         }
38854                         return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
38855                     }
38856                 }
38857                 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
38858             }
38859
38860
38861             function shouldSnapToNode(target) {
38862                 if (!_activeEntity) return false;
38863                 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
38864                     (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
38865             }
38866
38867
38868             function origin(entity) {
38869                 return context.projection(entity.loc);
38870             }
38871
38872
38873             function keydown() {
38874                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38875                     if (context.surface().classed('nope')) {
38876                         context.surface()
38877                             .classed('nope-suppressed', true);
38878                     }
38879                     context.surface()
38880                         .classed('nope', false)
38881                         .classed('nope-disabled', true);
38882                 }
38883             }
38884
38885
38886             function keyup() {
38887                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
38888                     if (context.surface().classed('nope-suppressed')) {
38889                         context.surface()
38890                             .classed('nope', true);
38891                     }
38892                     context.surface()
38893                         .classed('nope-suppressed', false)
38894                         .classed('nope-disabled', false);
38895                 }
38896             }
38897
38898
38899             function start(entity) {
38900                 _wasMidpoint = entity.type === 'midpoint';
38901                 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
38902                 _isCancelled = event.sourceEvent.shiftKey || hasHidden;
38903
38904
38905                 if (_isCancelled) {
38906                     if (hasHidden) {
38907                         uiFlash()
38908                             .duration(4000)
38909                             .text(t('modes.drag_node.connected_to_hidden'))();
38910                     }
38911                     return drag.cancel();
38912                 }
38913
38914                 if (_wasMidpoint) {
38915                     var midpoint = entity;
38916                     entity = osmNode();
38917                     context.perform(actionAddMidpoint(midpoint, entity));
38918                     entity = context.entity(entity.id);   // get post-action entity
38919
38920                     var vertex = context.surface().selectAll('.' + entity.id);
38921                     drag.target(vertex.node(), entity);
38922
38923                 } else {
38924                     context.perform(actionNoop());
38925                 }
38926
38927                 _activeEntity = entity;
38928                 _startLoc = entity.loc;
38929
38930                 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
38931
38932                 context.surface().selectAll('.' + _activeEntity.id)
38933                     .classed('active', true);
38934
38935                 context.enter(mode);
38936             }
38937
38938
38939             // related code
38940             // - `behavior/draw.js` `datum()`
38941             function datum() {
38942                 var event$1 = event && event.sourceEvent;
38943                 if (!event$1 || event$1.altKey) {
38944                     return {};
38945                 } else {
38946                     // When dragging, snap only to touch targets..
38947                     // (this excludes area fills and active drawing elements)
38948                     var d = event$1.target.__data__;
38949                     return (d && d.properties && d.properties.target) ? d : {};
38950                 }
38951             }
38952
38953
38954             function doMove(entity, nudge) {
38955                 nudge = nudge || [0, 0];
38956
38957                 var currPoint = (event && event.point) || context.projection(_lastLoc);
38958                 var currMouse = geoVecSubtract(currPoint, nudge);
38959                 var loc = context.projection.invert(currMouse);
38960
38961                 if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
38962                     // related code
38963                     // - `mode/drag_node.js`     `doMode()`
38964                     // - `behavior/draw.js`      `click()`
38965                     // - `behavior/draw_way.js`  `move()`
38966                     var d = datum();
38967                     var target = d && d.properties && d.properties.entity;
38968                     var targetLoc = target && target.loc;
38969                     var targetNodes = d && d.properties && d.properties.nodes;
38970                     var edge;
38971
38972                     if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
38973                         if (shouldSnapToNode(target)) {
38974                             loc = targetLoc;
38975                         }
38976
38977                     } else if (targetNodes) {   // snap to way - a line target with `.nodes`
38978                         edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
38979                         if (edge) {
38980                             loc = edge.loc;
38981                         }
38982                     }
38983                 }
38984
38985                 context.replace(
38986                     actionMoveNode(entity.id, loc)
38987                 );
38988
38989                 // Below here: validations
38990                 var isInvalid = false;
38991
38992                 // Check if this connection to `target` could cause relations to break..
38993                 if (target) {
38994                     isInvalid = hasRelationConflict(entity, target, edge, context.graph());
38995                 }
38996
38997                 // Check if this drag causes the geometry to break..
38998                 if (!isInvalid) {
38999                     isInvalid = hasInvalidGeometry(entity, context.graph());
39000                 }
39001
39002
39003                 var nope = context.surface().classed('nope');
39004                 if (isInvalid === 'relation' || isInvalid === 'restriction') {
39005                     if (!nope) {   // about to nope - show hint
39006                         uiFlash()
39007                             .duration(4000)
39008                             .text(t('operations.connect.' + isInvalid,
39009                                 { relation: context.presets().item('type/restriction').name() }
39010                             ))();
39011                     }
39012                 } else {
39013                     if (nope) {   // about to un-nope, remove hint
39014                         uiFlash()
39015                             .duration(1)
39016                             .text('')();
39017                     }
39018                 }
39019
39020
39021                 var nopeDisabled = context.surface().classed('nope-disabled');
39022                 if (nopeDisabled) {
39023                     context.surface()
39024                         .classed('nope', false)
39025                         .classed('nope-suppressed', isInvalid);
39026                 } else {
39027                     context.surface()
39028                         .classed('nope', isInvalid)
39029                         .classed('nope-suppressed', false);
39030                 }
39031
39032                 _lastLoc = loc;
39033             }
39034
39035
39036             // Uses `actionConnect.disabled()` to know whether this connection is ok..
39037             function hasRelationConflict(entity, target, edge, graph) {
39038                 var testGraph = graph.update();  // copy
39039
39040                 // if snapping to way - add midpoint there and consider that the target..
39041                 if (edge) {
39042                     var midpoint = osmNode();
39043                     var action = actionAddMidpoint({
39044                         loc: edge.loc,
39045                         edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
39046                     }, midpoint);
39047
39048                     testGraph = action(testGraph);
39049                     target = midpoint;
39050                 }
39051
39052                 // can we connect to it?
39053                 var ids = [entity.id, target.id];
39054                 return actionConnect(ids).disabled(testGraph);
39055             }
39056
39057
39058             function hasInvalidGeometry(entity, graph) {
39059                 var parents = graph.parentWays(entity);
39060                 var i, j, k;
39061
39062                 for (i = 0; i < parents.length; i++) {
39063                     var parent = parents[i];
39064                     var nodes = [];
39065                     var activeIndex = null;    // which multipolygon ring contains node being dragged
39066
39067                     // test any parent multipolygons for valid geometry
39068                     var relations = graph.parentRelations(parent);
39069                     for (j = 0; j < relations.length; j++) {
39070                         if (!relations[j].isMultipolygon()) continue;
39071
39072                         var rings = osmJoinWays(relations[j].members, graph);
39073
39074                         // find active ring and test it for self intersections
39075                         for (k = 0; k < rings.length; k++) {
39076                             nodes = rings[k].nodes;
39077                             if (nodes.find(function(n) { return n.id === entity.id; })) {
39078                                 activeIndex = k;
39079                                 if (geoHasSelfIntersections(nodes, entity.id)) {
39080                                     return true;
39081                                 }
39082                             }
39083                             rings[k].coords = nodes.map(function(n) { return n.loc; });
39084                         }
39085
39086                         // test active ring for intersections with other rings in the multipolygon
39087                         for (k = 0; k < rings.length; k++) {
39088                             if (k === activeIndex) continue;
39089
39090                             // make sure active ring doesnt cross passive rings
39091                             if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
39092                                 return true;
39093                             }
39094                         }
39095                     }
39096
39097
39098                     // If we still haven't tested this node's parent way for self-intersections.
39099                     // (because it's not a member of a multipolygon), test it now.
39100                     if (activeIndex === null) {
39101                         nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
39102                         if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
39103                             return true;
39104                         }
39105                     }
39106
39107                 }
39108
39109                 return false;
39110             }
39111
39112
39113             function move(entity) {
39114                 if (_isCancelled) return;
39115                 event.sourceEvent.stopPropagation();
39116
39117                 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
39118
39119                 _lastLoc = context.projection.invert(event.point);
39120
39121                 doMove(entity);
39122                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
39123                 if (nudge) {
39124                     startNudge(entity, nudge);
39125                 } else {
39126                     stopNudge();
39127                 }
39128             }
39129
39130             function end(entity) {
39131                 if (_isCancelled) return;
39132
39133                 var wasPoint = entity.geometry(context.graph()) === 'point';
39134
39135                 var d = datum();
39136                 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
39137                 var target = d && d.properties && d.properties.entity;   // entity to snap to
39138
39139                 if (nope) {   // bounce back
39140                     context.perform(
39141                         _actionBounceBack(entity.id, _startLoc)
39142                     );
39143
39144                 } else if (target && target.type === 'way') {
39145                     var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
39146                     context.replace(
39147                         actionAddMidpoint({
39148                             loc: choice.loc,
39149                             edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
39150                         }, entity),
39151                         connectAnnotation(entity, target)
39152                     );
39153
39154                 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
39155                     context.replace(
39156                         actionConnect([target.id, entity.id]),
39157                         connectAnnotation(entity, target)
39158                     );
39159
39160                 } else if (_wasMidpoint) {
39161                     context.replace(
39162                         actionNoop(),
39163                         t('operations.add.annotation.vertex')
39164                     );
39165
39166                 } else {
39167                     context.replace(
39168                         actionNoop(),
39169                         moveAnnotation(entity)
39170                     );
39171                 }
39172
39173                 if (wasPoint) {
39174                     context.enter(modeSelect(context, [entity.id]));
39175
39176                 } else {
39177                     var reselection = _restoreSelectedIDs.filter(function(id) {
39178                         return context.graph().hasEntity(id);
39179                     });
39180
39181                     if (reselection.length) {
39182                         context.enter(modeSelect(context, reselection));
39183                     } else {
39184                         context.enter(modeBrowse(context));
39185                     }
39186                 }
39187             }
39188
39189
39190             function _actionBounceBack(nodeID, toLoc) {
39191                 var moveNode = actionMoveNode(nodeID, toLoc);
39192                 var action = function(graph, t) {
39193                     // last time through, pop off the bounceback perform.
39194                     // it will then overwrite the initial perform with a moveNode that does nothing
39195                     if (t === 1) context.pop();
39196                     return moveNode(graph, t);
39197                 };
39198                 action.transitionable = true;
39199                 return action;
39200             }
39201
39202
39203             function cancel() {
39204                 drag.cancel();
39205                 context.enter(modeBrowse(context));
39206             }
39207
39208
39209             var drag = behaviorDrag()
39210                 .selector('.layer-touch.points .target')
39211                 .surface(d3_select('#map').node())
39212                 .origin(origin)
39213                 .on('start', start)
39214                 .on('move', move)
39215                 .on('end', end);
39216
39217
39218             mode.enter = function() {
39219                 context.install(hover);
39220                 context.install(edit);
39221
39222                 d3_select(window)
39223                     .on('keydown.drawWay', keydown)
39224                     .on('keyup.drawWay', keyup);
39225
39226                 context.history()
39227                     .on('undone.drag-node', cancel);
39228             };
39229
39230
39231             mode.exit = function() {
39232                 context.ui().sidebar.hover.cancel();
39233                 context.uninstall(hover);
39234                 context.uninstall(edit);
39235
39236                 d3_select(window)
39237                     .on('keydown.hover', null)
39238                     .on('keyup.hover', null);
39239
39240                 context.history()
39241                     .on('undone.drag-node', null);
39242
39243                 _activeEntity = null;
39244
39245                 context.surface()
39246                     .classed('nope', false)
39247                     .classed('nope-suppressed', false)
39248                     .classed('nope-disabled', false)
39249                     .selectAll('.active')
39250                     .classed('active', false);
39251
39252                 stopNudge();
39253             };
39254
39255
39256             mode.selectedIDs = function() {
39257                 if (!arguments.length) return _activeEntity ? [_activeEntity.id] : [];
39258                 // no assign
39259                 return mode;
39260             };
39261
39262
39263             mode.activeID = function() {
39264                 if (!arguments.length) return _activeEntity && _activeEntity.id;
39265                 // no assign
39266                 return mode;
39267             };
39268
39269
39270             mode.restoreSelectedIDs = function(_) {
39271                 if (!arguments.length) return _restoreSelectedIDs;
39272                 _restoreSelectedIDs = _;
39273                 return mode;
39274             };
39275
39276
39277             mode.behavior = drag;
39278
39279
39280             return mode;
39281         }
39282
39283         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"};
39284         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: \\((.+)\\)"}};
39285
39286         var tiler = utilTiler();
39287         var dispatch$1 = dispatch('loaded');
39288
39289         var _krCache;
39290         var _krZoom = 14;
39291         var _krUrlRoot = 'https://www.keepright.at/';
39292
39293         var _krRuleset = [
39294             // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
39295             30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
39296             190, 191, 192, 193, 194, 195, 196, 197, 198,
39297             200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
39298             230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
39299             290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
39300             320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
39301         ];
39302
39303
39304         function abortRequest(controller) {
39305             if (controller) {
39306                 controller.abort();
39307             }
39308         }
39309
39310         function abortUnwantedRequests(cache, tiles) {
39311             Object.keys(cache.inflightTile).forEach(function(k) {
39312                 var wanted = tiles.find(function(tile) { return k === tile.id; });
39313                 if (!wanted) {
39314                     abortRequest(cache.inflightTile[k]);
39315                     delete cache.inflightTile[k];
39316                 }
39317             });
39318         }
39319
39320
39321         function encodeErrorRtree(d) {
39322             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39323         }
39324
39325
39326         // replace or remove error from rtree
39327         function updateRtree(item, replace) {
39328             _krCache.rtree.remove(item, function isEql(a, b) {
39329                 return a.data.id === b.data.id;
39330             });
39331
39332             if (replace) {
39333                 _krCache.rtree.insert(item);
39334             }
39335         }
39336
39337
39338         function tokenReplacements(d) {
39339             if (!(d instanceof qaError)) return;
39340
39341             var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
39342             var replacements = {};
39343
39344             var errorTemplate = errorTypes[d.which_type];
39345             if (!errorTemplate) {
39346                 /* eslint-disable no-console */
39347                 console.log('No Template: ', d.which_type);
39348                 console.log('  ', d.description);
39349                 /* eslint-enable no-console */
39350                 return;
39351             }
39352
39353             // some descriptions are just fixed text
39354             if (!errorTemplate.regex) return;
39355
39356             // regex pattern should match description with variable details captured
39357             var errorRegex = new RegExp(errorTemplate.regex, 'i');
39358             var errorMatch = errorRegex.exec(d.description);
39359             if (!errorMatch) {
39360                 /* eslint-disable no-console */
39361                 console.log('Unmatched: ', d.which_type);
39362                 console.log('  ', d.description);
39363                 console.log('  ', errorRegex);
39364                 /* eslint-enable no-console */
39365                 return;
39366             }
39367
39368             for (var i = 1; i < errorMatch.length; i++) {   // skip first
39369                 var capture = errorMatch[i];
39370                 var idType;
39371
39372                 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
39373                 if (idType && capture) {   // link IDs if present in the capture
39374                     capture = parseError(capture, idType);
39375                 } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
39376                     capture = '\\' +  capture + '\\';
39377                 } else {
39378                     var compare = capture.toLowerCase();
39379                     if (localizeStrings[compare]) {   // some replacement strings can be localized
39380                         capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39381                     }
39382                 }
39383
39384                 replacements['var' + i] = capture;
39385             }
39386
39387             return replacements;
39388         }
39389
39390
39391         function parseError(capture, idType) {
39392             var compare = capture.toLowerCase();
39393             if (localizeStrings[compare]) {   // some replacement strings can be localized
39394                 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
39395             }
39396
39397             switch (idType) {
39398                 // link a string like "this node"
39399                 case 'this':
39400                     capture = linkErrorObject(capture);
39401                     break;
39402
39403                 case 'url':
39404                     capture = linkURL(capture);
39405                     break;
39406
39407                 // link an entity ID
39408                 case 'n':
39409                 case 'w':
39410                 case 'r':
39411                     capture = linkEntity(idType + capture);
39412                     break;
39413
39414                 // some errors have more complex ID lists/variance
39415                 case '20':
39416                     capture = parse20(capture);
39417                     break;
39418                 case '211':
39419                     capture = parse211(capture);
39420                     break;
39421                 case '231':
39422                     capture = parse231(capture);
39423                     break;
39424                 case '294':
39425                     capture = parse294(capture);
39426                     break;
39427                 case '370':
39428                     capture = parse370(capture);
39429                     break;
39430             }
39431
39432             return capture;
39433
39434
39435             function linkErrorObject(d) {
39436                 return '<a class="error_object_link">' + d + '</a>';
39437             }
39438
39439             function linkEntity(d) {
39440                 return '<a class="error_entity_link">' + d + '</a>';
39441             }
39442
39443             function linkURL(d) {
39444                 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
39445             }
39446
39447             // arbitrary node list of form: #ID, #ID, #ID...
39448             function parse211(capture) {
39449                 var newList = [];
39450                 var items = capture.split(', ');
39451
39452                 items.forEach(function(item) {
39453                     // ID has # at the front
39454                     var id = linkEntity('n' + item.slice(1));
39455                     newList.push(id);
39456                 });
39457
39458                 return newList.join(', ');
39459             }
39460
39461             // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
39462             function parse231(capture) {
39463                 var newList = [];
39464                 // unfortunately 'layer' can itself contain commas, so we split on '),'
39465                 var items = capture.split('),');
39466
39467                 items.forEach(function(item) {
39468                     var match = item.match(/\#(\d+)\((.+)\)?/);
39469                     if (match !== null && match.length > 2) {
39470                         newList.push(linkEntity('w' + match[1]) + ' ' +
39471                             t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
39472                         );
39473                     }
39474                 });
39475
39476                 return newList.join(', ');
39477             }
39478
39479             // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
39480             function parse294(capture) {
39481                 var newList = [];
39482                 var items = capture.split(',');
39483
39484                 items.forEach(function(item) {
39485                     var role;
39486                     var idType;
39487                     var id;
39488
39489                     // item of form "from/to node/relation #ID"
39490                     item = item.split(' ');
39491
39492                     // to/from role is more clear in quotes
39493                     role = '"' + item[0] + '"';
39494
39495                     // first letter of node/relation provides the type
39496                     idType = item[1].slice(0,1);
39497
39498                     // ID has # at the front
39499                     id = item[2].slice(1);
39500                     id = linkEntity(idType + id);
39501
39502                     item = [role, item[1], id].join(' ');
39503                     newList.push(item);
39504                 });
39505
39506                 return newList.join(', ');
39507             }
39508
39509             // may or may not include the string "(including the name 'name')"
39510             function parse370(capture) {
39511                 if (!capture) return '';
39512
39513                 var match = capture.match(/\(including the name (\'.+\')\)/);
39514                 if (match !== null && match.length) {
39515                     return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
39516                 }
39517                 return '';
39518             }
39519
39520             // arbitrary node list of form: #ID,#ID,#ID...
39521             function parse20(capture) {
39522                 var newList = [];
39523                 var items = capture.split(',');
39524
39525                 items.forEach(function(item) {
39526                     // ID has # at the front
39527                     var id = linkEntity('n' + item.slice(1));
39528                     newList.push(id);
39529                 });
39530
39531                 return newList.join(', ');
39532             }
39533         }
39534
39535
39536         var serviceKeepRight = {
39537             init: function() {
39538                 if (!_krCache) {
39539                     this.reset();
39540                 }
39541
39542                 this.event = utilRebind(this, dispatch$1, 'on');
39543             },
39544
39545             reset: function() {
39546                 if (_krCache) {
39547                     Object.values(_krCache.inflightTile).forEach(abortRequest);
39548                 }
39549
39550                 _krCache = {
39551                     data: {},
39552                     loadedTile: {},
39553                     inflightTile: {},
39554                     inflightPost: {},
39555                     closed: {},
39556                     rtree: rbush_1()
39557                 };
39558             },
39559
39560
39561             // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
39562             loadErrors: function(projection) {
39563                 var options = { format: 'geojson' };
39564                 var rules = _krRuleset.join();
39565
39566                 // determine the needed tiles to cover the view
39567                 var tiles = tiler
39568                     .zoomExtent([_krZoom, _krZoom])
39569                     .getTiles(projection);
39570
39571                 // abort inflight requests that are no longer needed
39572                 abortUnwantedRequests(_krCache, tiles);
39573
39574                 // issue new requests..
39575                 tiles.forEach(function(tile) {
39576                     if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) return;
39577
39578                     var rect = tile.extent.rectangle();
39579                     var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
39580                     var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
39581
39582                     var controller = new AbortController();
39583                     _krCache.inflightTile[tile.id] = controller;
39584
39585                     d3_json(url, { signal: controller.signal })
39586                         .then(function(data) {
39587                             delete _krCache.inflightTile[tile.id];
39588                             _krCache.loadedTile[tile.id] = true;
39589                             if (!data || !data.features || !data.features.length) {
39590                                 throw new Error('No Data');
39591                             }
39592
39593                             data.features.forEach(function(feature) {
39594                                 var loc = feature.geometry.coordinates;
39595                                 var props = feature.properties;
39596
39597                                 // if there is a parent, save its error type e.g.:
39598                                 //  Error 191 = "highway-highway"
39599                                 //  Error 190 = "intersections without junctions"  (parent)
39600                                 var errorType = props.error_type;
39601                                 var errorTemplate = errorTypes[errorType];
39602                                 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
39603
39604                                 // try to handle error type directly, fallback to parent error type.
39605                                 var whichType = errorTemplate ? errorType : parentErrorType;
39606                                 var whichTemplate = errorTypes[whichType];
39607
39608                                 // Rewrite a few of the errors at this point..
39609                                 // This is done to make them easier to linkify and translate.
39610                                 switch (whichType) {
39611                                     case '170':
39612                                         props.description = 'This feature has a FIXME tag: ' + props.description;
39613                                         break;
39614                                     case '292':
39615                                     case '293':
39616                                         props.description = props.description.replace('A turn-', 'This turn-');
39617                                         break;
39618                                     case '294':
39619                                     case '295':
39620                                     case '296':
39621                                     case '297':
39622                                     case '298':
39623                                         props.description = 'This turn-restriction~' + props.description;
39624                                         break;
39625                                     case '300':
39626                                         props.description = 'This highway is missing a maxspeed tag';
39627                                         break;
39628                                     case '411':
39629                                     case '412':
39630                                     case '413':
39631                                         props.description = 'This feature~' + props.description;
39632                                         break;
39633                                 }
39634
39635                                 // - move markers slightly so it doesn't obscure the geometry,
39636                                 // - then move markers away from other coincident markers
39637                                 var coincident = false;
39638                                 do {
39639                                     // first time, move marker up. after that, move marker right.
39640                                     var delta = coincident ? [0.00001, 0] : [0, 0.00001];
39641                                     loc = geoVecAdd(loc, delta);
39642                                     var bbox = geoExtent(loc).bbox();
39643                                     coincident = _krCache.rtree.search(bbox).length;
39644                                 } while (coincident);
39645
39646                                 var d = new qaError({
39647                                     // Required values
39648                                     loc: loc,
39649                                     service: 'keepRight',
39650                                     error_type: errorType,
39651                                     // Extra values for this service
39652                                     id: props.error_id,
39653                                     comment: props.comment || null,
39654                                     description: props.description || '',
39655                                     error_id: props.error_id,
39656                                     which_type: whichType,
39657                                     parent_error_type: parentErrorType,
39658                                     severity: whichTemplate.severity || 'error',
39659                                     object_id: props.object_id,
39660                                     object_type: props.object_type,
39661                                     schema: props.schema,
39662                                     title: props.title
39663                                 });
39664
39665                                 d.replacements = tokenReplacements(d);
39666
39667                                 _krCache.data[d.id] = d;
39668                                 _krCache.rtree.insert(encodeErrorRtree(d));
39669                             });
39670
39671                             dispatch$1.call('loaded');
39672                         })
39673                         .catch(function() {
39674                             delete _krCache.inflightTile[tile.id];
39675                             _krCache.loadedTile[tile.id] = true;
39676                         });
39677
39678                 });
39679             },
39680
39681
39682             postKeepRightUpdate: function(d, callback) {
39683                 if (_krCache.inflightPost[d.id]) {
39684                     return callback({ message: 'Error update already inflight', status: -2 }, d);
39685                 }
39686
39687                 var that = this;
39688                 var params = { schema: d.schema, id: d.error_id };
39689
39690                 if (d.state) {
39691                     params.st = d.state;
39692                 }
39693                 if (d.newComment !== undefined) {
39694                     params.co = d.newComment;
39695                 }
39696
39697                 // NOTE: This throws a CORS err, but it seems successful.
39698                 // We don't care too much about the response, so this is fine.
39699                 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
39700
39701                 var controller = new AbortController();
39702                 _krCache.inflightPost[d.id] = controller;
39703
39704                 fetch(url, { method: 'POST', signal: controller.signal })
39705                     .then(function(response) {
39706                         delete _krCache.inflightPost[d.id];
39707                         if (!response.ok) {
39708                             throw new Error(response.status + ' ' + response.statusText);
39709                         }
39710
39711                         if (d.state === 'ignore') {   // ignore permanently (false positive)
39712                             that.removeError(d);
39713
39714                         } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
39715                             that.removeError(d);
39716                             _krCache.closed[d.schema + ':' + d.error_id] = true;
39717
39718                         } else {
39719                             d = that.replaceError(d.update({
39720                                 comment: d.newComment,
39721                                 newComment: undefined,
39722                                 state: undefined
39723                             }));
39724                         }
39725
39726                         if (callback) callback(null, d);
39727                     })
39728                     .catch(function(err) {
39729                         delete _krCache.inflightPost[d.id];
39730                         if (callback) callback(err.message);
39731                     });
39732             },
39733
39734
39735             // get all cached errors covering the viewport
39736             getErrors: function(projection) {
39737                 var viewport = projection.clipExtent();
39738                 var min = [viewport[0][0], viewport[1][1]];
39739                 var max = [viewport[1][0], viewport[0][1]];
39740                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
39741
39742                 return _krCache.rtree.search(bbox).map(function(d) {
39743                     return d.data;
39744                 });
39745             },
39746
39747
39748             // get a single error from the cache
39749             getError: function(id) {
39750                 return _krCache.data[id];
39751             },
39752
39753
39754             // replace a single error in the cache
39755             replaceError: function(error) {
39756                 if (!(error instanceof qaError) || !error.id) return;
39757
39758                 _krCache.data[error.id] = error;
39759                 updateRtree(encodeErrorRtree(error), true); // true = replace
39760                 return error;
39761             },
39762
39763
39764             // remove a single error from the cache
39765             removeError: function(error) {
39766                 if (!(error instanceof qaError) || !error.id) return;
39767
39768                 delete _krCache.data[error.id];
39769                 updateRtree(encodeErrorRtree(error), false); // false = remove
39770             },
39771
39772
39773             errorURL: function(error) {
39774                 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
39775             },
39776
39777
39778             // Get an array of errors closed during this session.
39779             // Used to populate `closed:keepright` changeset tag
39780             getClosedIDs: function() {
39781                 return Object.keys(_krCache.closed).sort();
39782             }
39783
39784         };
39785
39786         var tiler$1 = utilTiler();
39787         var dispatch$2 = dispatch('loaded');
39788
39789         var _erCache;
39790         var _erZoom = 14;
39791
39792         var _impOsmUrls = {
39793             ow: 'https://directionofflow.skobbler.net/directionOfFlowService',
39794             mr: 'https://missingroads.skobbler.net/missingGeoService',
39795             tr: 'https://turnrestrictionservice.skobbler.net/turnRestrictionService'
39796         };
39797
39798         function abortRequest$1(i) {
39799             Object.values(i).forEach(function(controller) {
39800                 if (controller) {
39801                     controller.abort();
39802                 }
39803             });
39804         }
39805
39806         function abortUnwantedRequests$1(cache, tiles) {
39807             Object.keys(cache.inflightTile).forEach(function(k) {
39808                 var wanted = tiles.find(function(tile) { return k === tile.id; });
39809                 if (!wanted) {
39810                     abortRequest$1(cache.inflightTile[k]);
39811                     delete cache.inflightTile[k];
39812                 }
39813             });
39814         }
39815
39816
39817         function encodeErrorRtree$1(d) {
39818             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
39819         }
39820
39821
39822         // replace or remove error from rtree
39823         function updateRtree$1(item, replace) {
39824             _erCache.rtree.remove(item, function isEql(a, b) {
39825                 return a.data.id === b.data.id;
39826             });
39827
39828             if (replace) {
39829                 _erCache.rtree.insert(item);
39830             }
39831         }
39832
39833         function linkErrorObject(d) {
39834             return '<a class="error_object_link">' + d + '</a>';
39835         }
39836
39837         function linkEntity(d) {
39838             return '<a class="error_entity_link">' + d + '</a>';
39839         }
39840
39841         function pointAverage(points) {
39842             if (points.length) {
39843                 var sum = points.reduce(function(acc, point) {
39844                     return geoVecAdd(acc, [point.lon, point.lat]);
39845                 }, [0,0]);
39846                 return geoVecScale(sum, 1 / points.length);
39847             } else {
39848                 return [0,0];
39849             }
39850         }
39851
39852         function relativeBearing(p1, p2) {
39853             var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
39854             if (angle < 0) {
39855                 angle += 2 * Math.PI;
39856             }
39857
39858             // Return degrees
39859             return angle * 180 / Math.PI;
39860         }
39861
39862         // Assuming range [0,360)
39863         function cardinalDirection(bearing) {
39864             var dir = 45 * Math.round(bearing / 45);
39865             var compass = {
39866                 0: 'north',
39867                 45: 'northeast',
39868                 90: 'east',
39869                 135: 'southeast',
39870                 180: 'south',
39871                 225: 'southwest',
39872                 270: 'west',
39873                 315: 'northwest',
39874                 360: 'north'
39875             };
39876
39877             return t('QA.improveOSM.directions.' + compass[dir]);
39878         }
39879
39880         // Errors shouldn't obscure eachother
39881         function preventCoincident(loc, bumpUp) {
39882             var coincident = false;
39883             do {
39884                 // first time, move marker up. after that, move marker right.
39885                 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
39886                 loc = geoVecAdd(loc, delta);
39887                 var bbox = geoExtent(loc).bbox();
39888                 coincident = _erCache.rtree.search(bbox).length;
39889             } while (coincident);
39890
39891             return loc;
39892         }
39893
39894         var serviceImproveOSM = {
39895             init: function() {
39896                 if (!_erCache) {
39897                     this.reset();
39898                 }
39899
39900                 this.event = utilRebind(this, dispatch$2, 'on');
39901             },
39902
39903             reset: function() {
39904                 if (_erCache) {
39905                     Object.values(_erCache.inflightTile).forEach(abortRequest$1);
39906                 }
39907                 _erCache = {
39908                     data: {},
39909                     loadedTile: {},
39910                     inflightTile: {},
39911                     inflightPost: {},
39912                     closed: {},
39913                     rtree: rbush_1()
39914                 };
39915             },
39916
39917             loadErrors: function(projection) {
39918                 var options = {
39919                     client: 'iD',
39920                     status: 'OPEN',
39921                     zoom: '19' // Use a high zoom so that clusters aren't returned
39922                 };
39923
39924                 // determine the needed tiles to cover the view
39925                 var tiles = tiler$1
39926                     .zoomExtent([_erZoom, _erZoom])
39927                     .getTiles(projection);
39928
39929                 // abort inflight requests that are no longer needed
39930                 abortUnwantedRequests$1(_erCache, tiles);
39931
39932                 // issue new requests..
39933                 tiles.forEach(function(tile) {
39934                     if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) return;
39935
39936                     var rect = tile.extent.rectangle();
39937                     var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
39938
39939                     // 3 separate requests to store for each tile
39940                     var requests = {};
39941
39942                     Object.keys(_impOsmUrls).forEach(function(k) {
39943                         var v = _impOsmUrls[k];
39944                         // We exclude WATER from missing geometry as it doesn't seem useful
39945                         // We use most confident one-way and turn restrictions only, still have false positives
39946                         var kParams = Object.assign({},
39947                             params,
39948                             (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
39949                         );
39950                         var url = v + '/search?' + utilQsString(kParams);
39951
39952                         var controller = new AbortController();
39953                         requests[k] = controller;
39954
39955                         d3_json(url, { signal: controller.signal })
39956                             .then(function(data) {
39957                                 delete _erCache.inflightTile[tile.id][k];
39958                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
39959                                     delete _erCache.inflightTile[tile.id];
39960                                     _erCache.loadedTile[tile.id] = true;
39961                                 }
39962
39963                                 // Road segments at high zoom == oneways
39964                                 if (data.roadSegments) {
39965                                     data.roadSegments.forEach(function(feature) {
39966                                         // Position error at the approximate middle of the segment
39967                                         var points = feature.points;
39968                                         var mid = points.length / 2;
39969                                         var loc;
39970
39971                                         // Even number of points, find midpoint of the middle two
39972                                         // Odd number of points, use position of very middle point
39973                                         if (mid % 1 === 0) {
39974                                             loc = pointAverage([points[mid - 1], points[mid]]);
39975                                         } else {
39976                                             mid = points[Math.floor(mid)];
39977                                             loc = [mid.lon, mid.lat];
39978                                         }
39979
39980                                         // One-ways can land on same segment in opposite direction
39981                                         loc = preventCoincident(loc, false);
39982
39983                                         var d = new qaError({
39984                                             // Info required for every error
39985                                             loc: loc,
39986                                             service: 'improveOSM',
39987                                             error_type: k,
39988                                             // Extra details needed for this service
39989                                             error_key: k,
39990                                             identifier: { // this is used to post changes to the error
39991                                                 wayId: feature.wayId,
39992                                                 fromNodeId: feature.fromNodeId,
39993                                                 toNodeId: feature.toNodeId
39994                                             },
39995                                             object_id: feature.wayId,
39996                                             object_type: 'way',
39997                                             status: feature.status
39998                                         });
39999
40000                                         // Variables used in the description
40001                                         d.replacements = {
40002                                             percentage: feature.percentOfTrips,
40003                                             num_trips: feature.numberOfTrips,
40004                                             highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
40005                                             from_node: linkEntity('n' + feature.fromNodeId),
40006                                             to_node: linkEntity('n' + feature.toNodeId)
40007                                         };
40008
40009                                         _erCache.data[d.id] = d;
40010                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
40011                                     });
40012                                 }
40013
40014                                 // Tiles at high zoom == missing roads
40015                                 if (data.tiles) {
40016                                     data.tiles.forEach(function(feature) {
40017                                         var geoType = feature.type.toLowerCase();
40018
40019                                         // Average of recorded points should land on the missing geometry
40020                                         // Missing geometry could happen to land on another error
40021                                         var loc = pointAverage(feature.points);
40022                                         loc = preventCoincident(loc, false);
40023
40024                                         var d = new qaError({
40025                                             // Info required for every error
40026                                             loc: loc,
40027                                             service: 'improveOSM',
40028                                             error_type: k + '-' + geoType,
40029                                             // Extra details needed for this service
40030                                             error_key: k,
40031                                             identifier: { x: feature.x, y: feature.y },
40032                                             status: feature.status
40033                                         });
40034
40035                                         d.replacements = {
40036                                             num_trips: feature.numberOfTrips,
40037                                             geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
40038                                         };
40039
40040                                         // -1 trips indicates data came from a 3rd party
40041                                         if (feature.numberOfTrips === -1) {
40042                                             d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
40043                                         }
40044
40045                                         _erCache.data[d.id] = d;
40046                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
40047                                     });
40048                                 }
40049
40050                                 // Entities at high zoom == turn restrictions
40051                                 if (data.entities) {
40052                                     data.entities.forEach(function(feature) {
40053                                         // Turn restrictions could be missing at same junction
40054                                         // We also want to bump the error up so node is accessible
40055                                         var loc = feature.point;
40056                                         loc = preventCoincident([loc.lon, loc.lat], true);
40057
40058                                         // Elements are presented in a strange way
40059                                         var ids = feature.id.split(',');
40060                                         var from_way = ids[0];
40061                                         var via_node = ids[3];
40062                                         var to_way = ids[2].split(':')[1];
40063
40064                                         var d = new qaError({
40065                                             // Info required for every error
40066                                             loc: loc,
40067                                             service: 'improveOSM',
40068                                             error_type: k,
40069                                             // Extra details needed for this service
40070                                             error_key: k,
40071                                             identifier: feature.id,
40072                                             object_id: via_node,
40073                                             object_type: 'node',
40074                                             status: feature.status
40075                                         });
40076
40077                                         // Travel direction along from_way clarifies the turn restriction
40078                                         var p1 = feature.segments[0].points[0];
40079                                         var p2 = feature.segments[0].points[1];
40080
40081                                         var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
40082
40083                                         // Variables used in the description
40084                                         d.replacements = {
40085                                             num_passed: feature.numberOfPasses,
40086                                             num_trips: feature.segments[0].numberOfTrips,
40087                                             turn_restriction: feature.turnType.toLowerCase(),
40088                                             from_way: linkEntity('w' + from_way),
40089                                             to_way: linkEntity('w' + to_way),
40090                                             travel_direction: dir_of_travel,
40091                                             junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
40092                                         };
40093
40094                                         _erCache.data[d.id] = d;
40095                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
40096                                         dispatch$2.call('loaded');
40097                                     });
40098                                 }
40099                             })
40100                             .catch(function() {
40101                                 delete _erCache.inflightTile[tile.id][k];
40102                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
40103                                     delete _erCache.inflightTile[tile.id];
40104                                     _erCache.loadedTile[tile.id] = true;
40105                                 }
40106                             });
40107                     });
40108
40109                     _erCache.inflightTile[tile.id] = requests;
40110                 });
40111             },
40112
40113             getComments: function(d, callback) {
40114                 // If comments already retrieved no need to do so again
40115                 if (d.comments !== undefined) {
40116                     if (callback) callback({}, d);
40117                     return;
40118                 }
40119
40120                 var key = d.error_key;
40121                 var qParams = {};
40122
40123                 if (key === 'ow') {
40124                     qParams = d.identifier;
40125                 } else if (key === 'mr') {
40126                     qParams.tileX = d.identifier.x;
40127                     qParams.tileY = d.identifier.y;
40128                 } else if (key === 'tr') {
40129                     qParams.targetId = d.identifier;
40130                 }
40131
40132                 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
40133
40134                 var that = this;
40135                 d3_json(url)
40136                     .then(function(data) {
40137                         // comments are served newest to oldest
40138                         var comments = data.comments ? data.comments.reverse() : [];
40139                         that.replaceError(d.update({ comments: comments }));
40140                         if (callback) callback(null, d);
40141                     })
40142                     .catch(function(err) {
40143                         if (callback) callback(err.message);
40144                     });
40145             },
40146
40147             postUpdate: function(d, callback) {
40148                 if (!serviceOsm.authenticated()) { // Username required in payload
40149                     return callback({ message: 'Not Authenticated', status: -3}, d);
40150                 }
40151                 if (_erCache.inflightPost[d.id]) {
40152                     return callback({ message: 'Error update already inflight', status: -2 }, d);
40153                 }
40154
40155                 var that = this;
40156
40157                 // Payload can only be sent once username is established
40158                 serviceOsm.userDetails(sendPayload);
40159
40160                 function sendPayload(err, user) {
40161                     if (err) { return callback(err, d); }
40162
40163                     var key = d.error_key;
40164                     var url = _impOsmUrls[key] + '/comment';
40165                     var payload = {
40166                         username: user.display_name
40167                     };
40168
40169                     // Each error type has different data for identification
40170                     if (key === 'ow') {
40171                         payload.roadSegments = [ d.identifier ];
40172                     } else if (key === 'mr') {
40173                         payload.tiles = [ d.identifier ];
40174                     } else if (key === 'tr') {
40175                         payload.targetIds = [ d.identifier ];
40176                     }
40177
40178                     if (d.newStatus !== undefined) {
40179                         payload.status = d.newStatus;
40180                         payload.text = 'status changed';
40181                     }
40182
40183                     // Comment take place of default text
40184                     if (d.newComment !== undefined) {
40185                         payload.text = d.newComment;
40186                     }
40187
40188                     var controller = new AbortController();
40189                     _erCache.inflightPost[d.id] = controller;
40190
40191                     var options = {
40192                         method: 'POST',
40193                         signal: controller.signal,
40194                         body: JSON.stringify(payload)
40195                     };
40196
40197                      d3_json(url, options)
40198                         .then(function() {
40199                             delete _erCache.inflightPost[d.id];
40200
40201                             // Just a comment, update error in cache
40202                             if (d.newStatus === undefined) {
40203                                 var now = new Date();
40204                                 var comments = d.comments ? d.comments : [];
40205
40206                                 comments.push({
40207                                     username: payload.username,
40208                                     text: payload.text,
40209                                     timestamp: now.getTime() / 1000
40210                                 });
40211
40212                                 that.replaceError(d.update({
40213                                     comments: comments,
40214                                     newComment: undefined
40215                                 }));
40216                             } else {
40217                                 that.removeError(d);
40218                                 if (d.newStatus === 'SOLVED') {
40219                                     // No pretty identifier, so we just use coordinates
40220                                     var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
40221                                     _erCache.closed[key + ':' + closedID] = true;
40222                                 }
40223                             }
40224                             if (callback) callback(null, d);
40225                         })
40226                         .catch(function(err) {
40227                             delete _erCache.inflightPost[d.id];
40228                             if (callback) callback(err.message);
40229                         });
40230                 }
40231             },
40232
40233
40234             // get all cached errors covering the viewport
40235             getErrors: function(projection) {
40236                 var viewport = projection.clipExtent();
40237                 var min = [viewport[0][0], viewport[1][1]];
40238                 var max = [viewport[1][0], viewport[0][1]];
40239                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40240
40241                 return _erCache.rtree.search(bbox).map(function(d) {
40242                     return d.data;
40243                 });
40244             },
40245
40246             // get a single error from the cache
40247             getError: function(id) {
40248                 return _erCache.data[id];
40249             },
40250
40251             // replace a single error in the cache
40252             replaceError: function(error) {
40253                 if (!(error instanceof qaError) || !error.id) return;
40254
40255                 _erCache.data[error.id] = error;
40256                 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
40257                 return error;
40258             },
40259
40260             // remove a single error from the cache
40261             removeError: function(error) {
40262                 if (!(error instanceof qaError) || !error.id) return;
40263
40264                 delete _erCache.data[error.id];
40265                 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
40266             },
40267
40268             // Used to populate `closed:improveosm` changeset tag
40269             getClosedIDs: function() {
40270                 return Object.keys(_erCache.closed).sort();
40271             }
40272         };
40273
40274         /*
40275             A standalone SVG element that contains only a `defs` sub-element. To be
40276             used once globally, since defs IDs must be unique within a document.
40277         */
40278         function svgDefs(context) {
40279
40280             function drawDefs(selection) {
40281                 var defs = selection.append('defs');
40282
40283                 // add markers
40284                 defs
40285                     .append('marker')
40286                     .attr('id', 'oneway-marker')
40287                     .attr('viewBox', '0 0 10 5')
40288                     .attr('refX', 2.5)
40289                     .attr('refY', 2.5)
40290                     .attr('markerWidth', 2)
40291                     .attr('markerHeight', 2)
40292                     .attr('markerUnits', 'strokeWidth')
40293                     .attr('orient', 'auto')
40294                     .append('path')
40295                     .attr('class', 'oneway-marker-path')
40296                     .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')
40297                     .attr('stroke', 'none')
40298                     .attr('fill', '#000')
40299                     .attr('opacity', '0.75');
40300
40301                 // SVG markers have to be given a colour where they're defined
40302                 // (they can't inherit it from the line they're attached to),
40303                 // so we need to manually define markers for each color of tag
40304                 // (also, it's slightly nicer if we can control the
40305                 // positioning for different tags)
40306                 function addSidedMarker(name, color, offset) {
40307                     defs
40308                         .append('marker')
40309                         .attr('id', 'sided-marker-' + name)
40310                         .attr('viewBox', '0 0 2 2')
40311                         .attr('refX', 1)
40312                         .attr('refY', -offset)
40313                         .attr('markerWidth', 1.5)
40314                         .attr('markerHeight', 1.5)
40315                         .attr('markerUnits', 'strokeWidth')
40316                         .attr('orient', 'auto')
40317                         .append('path')
40318                         .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
40319                         .attr('d', 'M 0,0 L 1,1 L 2,0 z')
40320                         .attr('stroke', 'none')
40321                         .attr('fill', color);
40322                 }
40323                 addSidedMarker('natural', 'rgb(170, 170, 170)', 0);
40324                 // for a coastline, the arrows are (somewhat unintuitively) on
40325                 // the water side, so let's color them blue (with a gap) to
40326                 // give a stronger indication
40327                 addSidedMarker('coastline', '#77dede', 1);
40328                 addSidedMarker('waterway', '#77dede', 1);
40329                 // barriers have a dashed line, and separating the triangle
40330                 // from the line visually suits that
40331                 addSidedMarker('barrier', '#ddd', 1);
40332                 addSidedMarker('man_made', '#fff', 0);
40333
40334                 defs
40335                     .append('marker')
40336                     .attr('id', 'viewfield-marker')
40337                     .attr('viewBox', '0 0 16 16')
40338                     .attr('refX', 8)
40339                     .attr('refY', 16)
40340                     .attr('markerWidth', 4)
40341                     .attr('markerHeight', 4)
40342                     .attr('markerUnits', 'strokeWidth')
40343                     .attr('orient', 'auto')
40344                     .append('path')
40345                     .attr('class', 'viewfield-marker-path')
40346                     .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')
40347                     .attr('fill', '#333')
40348                     .attr('fill-opacity', '0.75')
40349                     .attr('stroke', '#fff')
40350                     .attr('stroke-width', '0.5px')
40351                     .attr('stroke-opacity', '0.75');
40352
40353                 defs
40354                     .append('marker')
40355                     .attr('id', 'viewfield-marker-wireframe')
40356                     .attr('viewBox', '0 0 16 16')
40357                     .attr('refX', 8)
40358                     .attr('refY', 16)
40359                     .attr('markerWidth', 4)
40360                     .attr('markerHeight', 4)
40361                     .attr('markerUnits', 'strokeWidth')
40362                     .attr('orient', 'auto')
40363                     .append('path')
40364                     .attr('class', 'viewfield-marker-path')
40365                     .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')
40366                     .attr('fill', 'none')
40367                     .attr('stroke', '#fff')
40368                     .attr('stroke-width', '0.5px')
40369                     .attr('stroke-opacity', '0.75');
40370
40371                 // add patterns
40372                 var patterns = defs.selectAll('pattern')
40373                     .data([
40374                         // pattern name, pattern image name
40375                         ['beach', 'dots'],
40376                         ['construction', 'construction'],
40377                         ['cemetery', 'cemetery'],
40378                         ['cemetery_christian', 'cemetery_christian'],
40379                         ['cemetery_buddhist', 'cemetery_buddhist'],
40380                         ['cemetery_muslim', 'cemetery_muslim'],
40381                         ['cemetery_jewish', 'cemetery_jewish'],
40382                         ['farmland', 'farmland'],
40383                         ['farmyard', 'farmyard'],
40384                         ['forest', 'forest'],
40385                         ['forest_broadleaved', 'forest_broadleaved'],
40386                         ['forest_needleleaved', 'forest_needleleaved'],
40387                         ['forest_leafless', 'forest_leafless'],
40388                         ['grass', 'grass'],
40389                         ['landfill', 'landfill'],
40390                         ['meadow', 'grass'],
40391                         ['orchard', 'orchard'],
40392                         ['pond', 'pond'],
40393                         ['quarry', 'quarry'],
40394                         ['scrub', 'bushes'],
40395                         ['vineyard', 'vineyard'],
40396                         ['water_standing', 'lines'],
40397                         ['waves', 'waves'],
40398                         ['wetland', 'wetland'],
40399                         ['wetland_marsh', 'wetland_marsh'],
40400                         ['wetland_swamp', 'wetland_swamp'],
40401                         ['wetland_bog', 'wetland_bog'],
40402                         ['wetland_reedbed', 'wetland_reedbed']
40403                     ])
40404                     .enter()
40405                     .append('pattern')
40406                     .attr('id', function (d) { return 'pattern-' + d[0]; })
40407                     .attr('width', 32)
40408                     .attr('height', 32)
40409                     .attr('patternUnits', 'userSpaceOnUse');
40410
40411                 patterns
40412                     .append('rect')
40413                     .attr('x', 0)
40414                     .attr('y', 0)
40415                     .attr('width', 32)
40416                     .attr('height', 32)
40417                     .attr('class', function (d) { return 'pattern-color-' + d[0]; });
40418
40419                 patterns
40420                     .append('image')
40421                     .attr('x', 0)
40422                     .attr('y', 0)
40423                     .attr('width', 32)
40424                     .attr('height', 32)
40425                     .attr('xlink:href', function (d) {
40426                         return context.imagePath('pattern/' + d[1] + '.png');
40427                     });
40428
40429                 // add clip paths
40430                 defs.selectAll('clipPath')
40431                     .data([12, 18, 20, 32, 45])
40432                     .enter()
40433                     .append('clipPath')
40434                     .attr('id', function (d) { return 'clip-square-' + d; })
40435                     .append('rect')
40436                     .attr('x', 0)
40437                     .attr('y', 0)
40438                     .attr('width', function (d) { return d; })
40439                     .attr('height', function (d) { return d; });
40440
40441                 // add symbol spritesheets
40442                 defs
40443                     .call(drawDefs.addSprites, [
40444                         'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
40445                     ], true);
40446             }
40447
40448
40449             drawDefs.addSprites = function(selection, ids, overrideColors) {
40450                 var spritesheets = selection.selectAll('.spritesheet');
40451                 var currData = spritesheets.data();
40452                 var data = utilArrayUniq(currData.concat(ids));
40453
40454                 spritesheets
40455                     .data(data)
40456                     .enter()
40457                     .append('g')
40458                     .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
40459                     .each(function(d) {
40460                         var url = context.imagePath(d + '.svg');
40461                         var node = d3_select(this).node();
40462
40463                         svg(url)
40464                             .then(function(svg) {
40465                                 node.appendChild(
40466                                     d3_select(svg.documentElement).attr('id', d).node()
40467                                 );
40468                                 if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
40469                                     d3_select(node).selectAll('path')
40470                                         .attr('fill', 'currentColor');
40471                                 }
40472                             })
40473                             .catch(function() {
40474                                 /* ignore */
40475                             });
40476                     });
40477             };
40478
40479
40480             return drawDefs;
40481         }
40482
40483         /* global Mapillary:false */
40484
40485
40486         var apibase = 'https://a.mapillary.com/v3/';
40487         var viewercss = 'mapillary-js/mapillary.min.css';
40488         var viewerjs = 'mapillary-js/mapillary.min.js';
40489         var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
40490         var mapFeatureConfig = {
40491             organizationKey: 'FI3NAFfzQQgdF081TRdgTy',
40492             values: [
40493                 'object--bench',
40494                 'object--bike-rack',
40495                 'object--billboard',
40496                 'object--fire-hydrant',
40497                 'object--mailbox',
40498                 'object--phone-booth',
40499                 'object--street-light',
40500                 'object--support--utility-pole',
40501                 'object--traffic-light--pedestrians',
40502                 'object--trash-can',
40503                 'construction--flat--crosswalk-plain',
40504                 'object--cctv-camera',
40505                 'object--banner',
40506                 'object--catch-basin',
40507                 'object--manhole',
40508                 'object--sign--advertisement',
40509                 'object--sign--information',
40510                 'object--sign--store',
40511                 'object--traffic-light--*',
40512                 'marking--discrete--crosswalk-zebra'
40513             ].join(',')
40514         };
40515         var maxResults = 1000;
40516         var tileZoom = 14;
40517         var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
40518         var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'loadedMapFeatures', 'bearingChanged');
40519         var _mlyFallback = false;
40520         var _mlyCache;
40521         var _mlyClicks;
40522         var _mlySelectedImage;
40523         var _mlyViewer;
40524
40525
40526         function abortRequest$2(controller) {
40527             controller.abort();
40528         }
40529
40530
40531         function maxPageAtZoom(z) {
40532             if (z < 15)   return 2;
40533             if (z === 15) return 5;
40534             if (z === 16) return 10;
40535             if (z === 17) return 20;
40536             if (z === 18) return 40;
40537             if (z > 18)   return 80;
40538         }
40539
40540
40541         function loadTiles(which, url, projection) {
40542             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
40543             var tiles = tiler$2.getTiles(projection);
40544
40545             // abort inflight requests that are no longer needed
40546             var cache = _mlyCache[which];
40547             Object.keys(cache.inflight).forEach(function(k) {
40548                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
40549                 if (!wanted) {
40550                     abortRequest$2(cache.inflight[k]);
40551                     delete cache.inflight[k];
40552                 }
40553             });
40554
40555             tiles.forEach(function(tile) {
40556                 loadNextTilePage(which, currZoom, url, tile);
40557             });
40558         }
40559
40560
40561         function loadNextTilePage(which, currZoom, url, tile) {
40562             var cache = _mlyCache[which];
40563             var rect = tile.extent.rectangle();
40564             var maxPages = maxPageAtZoom(currZoom);
40565             var nextPage = cache.nextPage[tile.id] || 0;
40566             var nextURL = cache.nextURL[tile.id] || url +
40567                 utilQsString({
40568                     per_page: maxResults,
40569                     page: nextPage,
40570                     client_id: clientId,
40571                     bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
40572                 });
40573
40574             if (nextPage > maxPages) return;
40575
40576             var id = tile.id + ',' + String(nextPage);
40577             if (cache.loaded[id] || cache.inflight[id]) return;
40578
40579             var controller = new AbortController();
40580             cache.inflight[id] = controller;
40581
40582             var options = {
40583                 method: 'GET',
40584                 signal: controller.signal,
40585                 headers: { 'Content-Type': 'application/json' }
40586             };
40587
40588             fetch(nextURL, options)
40589                 .then(function(response) {
40590                     if (!response.ok) {
40591                         throw new Error(response.status + ' ' + response.statusText);
40592                     }
40593                     var linkHeader = response.headers.get('Link');
40594                     if (linkHeader) {
40595                         var pagination = parsePagination(linkHeader);
40596                         if (pagination.next) {
40597                             cache.nextURL[tile.id] = pagination.next;
40598                         }
40599                     }
40600                     return response.json();
40601                 })
40602                 .then(function(data) {
40603                     cache.loaded[id] = true;
40604                     delete cache.inflight[id];
40605                     if (!data || !data.features || !data.features.length) {
40606                         throw new Error('No Data');
40607                     }
40608
40609                     var features = data.features.map(function(feature) {
40610                         var loc = feature.geometry.coordinates;
40611                         var d;
40612
40613                         // An image (shown as a green dot on the map) is a single street photo with extra
40614                         // information such as location, camera angle (CA), camera model, and so on.
40615                         // Each image feature is a GeoJSON Point
40616                         if (which === 'images') {
40617                             d = {
40618                                 loc: loc,
40619                                 key: feature.properties.key,
40620                                 ca: feature.properties.ca,
40621                                 captured_at: feature.properties.captured_at,
40622                                 captured_by: feature.properties.username,
40623                                 pano: feature.properties.pano
40624                             };
40625
40626                             cache.forImageKey[d.key] = d;     // cache imageKey -> image
40627
40628                         // Mapillary organizes images as sequences. A sequence of images are continuously captured
40629                         // by a user at a give time. Sequences are shown on the map as green lines.
40630                         // Each sequence feature is a GeoJSON LineString
40631                         } else if (which === 'sequences') {
40632                             var sequenceKey = feature.properties.key;
40633                             cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
40634                             feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
40635                                 cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
40636                             });
40637                             return false;    // because no `d` data worth loading into an rbush
40638
40639                         // An image detection is a semantic pixel area on an image. The area could indicate
40640                         // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
40641                         // Each image_detection feature is a GeoJSON Point (located where the image was taken)
40642                         } else if (which === 'image_detections') {
40643                             d = {
40644                                 key: feature.properties.key,
40645                                 image_key: feature.properties.image_key,
40646                                 value: feature.properties.value,
40647                                 package: feature.properties.package,
40648                                 shape: feature.properties.shape
40649                             };
40650
40651                             // cache imageKey -> image_detections
40652                             if (!cache.forImageKey[d.image_key]) {
40653                                 cache.forImageKey[d.image_key] = [];
40654                             }
40655                             cache.forImageKey[d.image_key].push(d);
40656                             return false;    // because no `d` data worth loading into an rbush
40657
40658
40659                         // A map feature is a real world object that can be shown on a map. It could be any object
40660                         // recognized from images, manually added in images, or added on the map.
40661                         // Each map feature is a GeoJSON Point (located where the feature is)
40662                         } else if (which === 'map_features' || which === 'points') {
40663                             d = {
40664                                 loc: loc,
40665                                 key: feature.properties.key,
40666                                 value: feature.properties.value,
40667                                 package: feature.properties.package,
40668                                 detections: feature.properties.detections
40669                             };
40670                         }
40671
40672                         return {
40673                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
40674                         };
40675
40676                     }).filter(Boolean);
40677
40678                     if (cache.rtree && features) {
40679                         cache.rtree.load(features);
40680                     }
40681
40682                     if (data.features.length === maxResults) {  // more pages to load
40683                         cache.nextPage[tile.id] = nextPage + 1;
40684                         loadNextTilePage(which, currZoom, url, tile);
40685                     } else {
40686                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
40687                     }
40688
40689                     if (which === 'images' || which === 'sequences') {
40690                         dispatch$3.call('loadedImages');
40691                     } else if (which === 'map_features') {
40692                         dispatch$3.call('loadedSigns');
40693                     } else if (which === 'points') {
40694                         dispatch$3.call('loadedMapFeatures');
40695                     }
40696                 })
40697                 .catch(function() {
40698                     cache.loaded[id] = true;
40699                     delete cache.inflight[id];
40700                 });
40701         }
40702
40703         // extract links to pages of API results
40704         function parsePagination(links) {
40705             return links.split(',').map(function(rel) {
40706                 var elements = rel.split(';');
40707                 if (elements.length === 2) {
40708                     return [
40709                         /<(.+)>/.exec(elements[0])[1],
40710                         /rel="(.+)"/.exec(elements[1])[1]
40711                     ];
40712                 } else {
40713                     return ['',''];
40714                 }
40715             }).reduce(function(pagination, val) {
40716                 pagination[val[1]] = val[0];
40717                 return pagination;
40718             }, {});
40719         }
40720
40721
40722         // partition viewport into higher zoom tiles
40723         function partitionViewport(projection) {
40724             var z = geoScaleToZoom(projection.scale());
40725             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
40726             var tiler = utilTiler().zoomExtent([z2, z2]);
40727
40728             return tiler.getTiles(projection)
40729                 .map(function(tile) { return tile.extent; });
40730         }
40731
40732
40733         // no more than `limit` results per partition.
40734         function searchLimited(limit, projection, rtree) {
40735             limit = limit || 5;
40736
40737             return partitionViewport(projection)
40738                 .reduce(function(result, extent) {
40739                     var found = rtree.search(extent.bbox())
40740                         .slice(0, limit)
40741                         .map(function(d) { return d.data; });
40742
40743                     return (found.length ? result.concat(found) : result);
40744                 }, []);
40745         }
40746
40747
40748
40749         var serviceMapillary = {
40750
40751             init: function() {
40752                 if (!_mlyCache) {
40753                     this.reset();
40754                 }
40755
40756                 this.event = utilRebind(this, dispatch$3, 'on');
40757             },
40758
40759             reset: function() {
40760                 if (_mlyCache) {
40761                     Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
40762                     Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
40763                     Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
40764                     Object.values(_mlyCache.points.inflight).forEach(abortRequest$2);
40765                     Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
40766                 }
40767
40768                 _mlyCache = {
40769                     images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {} },
40770                     image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
40771                     map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
40772                     points: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1() },
40773                     sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: rbush_1(), forImageKey: {}, lineString: {} }
40774                 };
40775
40776                 _mlySelectedImage = null;
40777                 _mlyClicks = [];
40778             },
40779
40780
40781             images: function(projection) {
40782                 var limit = 5;
40783                 return searchLimited(limit, projection, _mlyCache.images.rtree);
40784             },
40785
40786
40787             signs: function(projection) {
40788                 var limit = 5;
40789                 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
40790             },
40791
40792
40793             mapFeatures: function(projection) {
40794                 var limit = 5;
40795                 return searchLimited(limit, projection, _mlyCache.points.rtree);
40796             },
40797
40798
40799             cachedImage: function(imageKey) {
40800                 return _mlyCache.images.forImageKey[imageKey];
40801             },
40802
40803
40804             sequences: function(projection) {
40805                 var viewport = projection.clipExtent();
40806                 var min = [viewport[0][0], viewport[1][1]];
40807                 var max = [viewport[1][0], viewport[0][1]];
40808                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
40809                 var sequenceKeys = {};
40810
40811                 // all sequences for images in viewport
40812                 _mlyCache.images.rtree.search(bbox)
40813                     .forEach(function(d) {
40814                         var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
40815                         if (sequenceKey) {
40816                             sequenceKeys[sequenceKey] = true;
40817                         }
40818                     });
40819
40820                 // Return lineStrings for the sequences
40821                 return Object.keys(sequenceKeys).map(function(sequenceKey) {
40822                     return _mlyCache.sequences.lineString[sequenceKey];
40823                 });
40824             },
40825
40826
40827             signsSupported: function() {
40828                 return true;
40829             },
40830
40831
40832             loadImages: function(projection) {
40833                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
40834                 loadTiles('sequences', apibase + 'sequences?sort_by=key&', projection);
40835             },
40836
40837
40838             loadSigns: function(projection) {
40839                 // if we are looking at signs, we'll actually need to fetch images too
40840                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
40841                 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=2&sort_by=key&', projection);
40842                 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&sort_by=key&', projection);
40843             },
40844
40845
40846             loadMapFeatures: function(projection) {
40847                 // if we are looking at signs, we'll actually need to fetch images too
40848                 loadTiles('images', apibase + 'images?sort_by=key', projection);
40849                 loadTiles('points', apibase + 'map_features?layers=points&min_nbr_image_detections=2&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
40850                 loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
40851             },
40852
40853
40854             loadViewer: function(context) {
40855                 // add mly-wrapper
40856                 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
40857                     .data([0]);
40858
40859                 wrap.enter()
40860                     .append('div')
40861                     .attr('id', 'mly')
40862                     .attr('class', 'photo-wrapper mly-wrapper')
40863                     .classed('hide', true);
40864
40865                 // load mapillary-viewercss
40866                 d3_select('head').selectAll('#mapillary-viewercss')
40867                     .data([0])
40868                     .enter()
40869                     .append('link')
40870                     .attr('id', 'mapillary-viewercss')
40871                     .attr('rel', 'stylesheet')
40872                     .attr('href', context.asset(viewercss));
40873
40874                 // load mapillary-viewerjs
40875                 d3_select('head').selectAll('#mapillary-viewerjs')
40876                     .data([0])
40877                     .enter()
40878                     .append('script')
40879                     .attr('id', 'mapillary-viewerjs')
40880                     .attr('src', context.asset(viewerjs));
40881
40882                 // load mapillary signs sprite
40883                 var defs = context.container().select('defs');
40884                 defs.call(svgDefs(context).addSprites, ['mapillary-sprite', 'mapillary-object-sprite'], false /* don't override colors */ );
40885
40886                 // Register viewer resize handler
40887                 context.ui().photoviewer.on('resize.mapillary', function() {
40888                     if (_mlyViewer) {
40889                         _mlyViewer.resize();
40890                     }
40891                 });
40892             },
40893
40894
40895             showViewer: function() {
40896                 var wrap = d3_select('#photoviewer')
40897                     .classed('hide', false);
40898
40899                 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
40900
40901                 if (isHidden && _mlyViewer) {
40902                     wrap
40903                         .selectAll('.photo-wrapper:not(.mly-wrapper)')
40904                         .classed('hide', true);
40905
40906                     wrap
40907                         .selectAll('.photo-wrapper.mly-wrapper')
40908                         .classed('hide', false);
40909
40910                     _mlyViewer.resize();
40911                 }
40912
40913                 return this;
40914             },
40915
40916
40917             hideViewer: function() {
40918                 _mlySelectedImage = null;
40919
40920                 if (!_mlyFallback && _mlyViewer) {
40921                     _mlyViewer.getComponent('sequence').stop();
40922                 }
40923
40924                 var viewer = d3_select('#photoviewer');
40925                 if (!viewer.empty()) viewer.datum(null);
40926
40927                 viewer
40928                     .classed('hide', true)
40929                     .selectAll('.photo-wrapper')
40930                     .classed('hide', true);
40931
40932                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
40933                     .classed('currentView', false);
40934
40935                 return this.setStyles(null, true);
40936             },
40937
40938
40939             parsePagination: parsePagination,
40940
40941
40942             updateViewer: function(imageKey, context) {
40943                 if (!imageKey) return this;
40944
40945                 if (!_mlyViewer) {
40946                     this.initViewer(imageKey, context);
40947                 } else {
40948                     _mlyViewer.moveToKey(imageKey)
40949                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
40950                 }
40951
40952                 return this;
40953             },
40954
40955
40956             initViewer: function(imageKey, context) {
40957                 var that = this;
40958                 if (window.Mapillary && imageKey) {
40959                     var opts = {
40960                         baseImageSize: 320,
40961                         component: {
40962                             cover: false,
40963                             keyboard: false,
40964                             tag: true
40965                         }
40966                     };
40967
40968                     // Disable components requiring WebGL support
40969                     if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
40970                         _mlyFallback = true;
40971                         opts.component = {
40972                             cover: false,
40973                             direction: false,
40974                             imagePlane: false,
40975                             keyboard: false,
40976                             mouse: false,
40977                             sequence: false,
40978                             tag: false,
40979                             image: true,        // fallback
40980                             navigation: true    // fallback
40981                         };
40982                     }
40983
40984                     _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
40985                     _mlyViewer.on('nodechanged', nodeChanged);
40986                     _mlyViewer.on('bearingchanged', bearingChanged);
40987                     _mlyViewer.moveToKey(imageKey)
40988                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
40989                 }
40990
40991                 // nodeChanged: called after the viewer has changed images and is ready.
40992                 //
40993                 // There is some logic here to batch up clicks into a _mlyClicks array
40994                 // because the user might click on a lot of markers quickly and nodechanged
40995                 // may be called out of order asychronously.
40996                 //
40997                 // Clicks are added to the array in `selectedImage` and removed here.
40998                 //
40999                 function nodeChanged(node) {
41000                     if (!_mlyFallback) {
41001                         _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
41002                     }
41003
41004                     var clicks = _mlyClicks;
41005                     var index = clicks.indexOf(node.key);
41006                     var selectedKey = _mlySelectedImage && _mlySelectedImage.key;
41007
41008                     if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
41009                         clicks.splice(index, 1);   // remove the click
41010                         // If `node.key` matches the current _mlySelectedImage, call `selectImage()`
41011                         // one more time to update the detections and attribution..
41012                         if (node.key === selectedKey) {
41013                             that.selectImage(_mlySelectedImage, node.key, true);
41014                         }
41015                     } else {             // `nodechanged` initiated from the Mapillary viewer controls..
41016                         var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
41017                         context.map().centerEase(loc);
41018                         that.selectImage(undefined, node.key, true);
41019                     }
41020                 }
41021
41022                 function bearingChanged(e) {
41023                     dispatch$3.call('bearingChanged', undefined, e);
41024                 }
41025             },
41026
41027
41028             // Pass the image datum itself in `d` or the `imageKey` string.
41029             // This allows images to be selected from places that dont have access
41030             // to the full image datum (like the street signs layer or the js viewer)
41031             selectImage: function(d, imageKey, fromViewer) {
41032                 if (!d && imageKey) {
41033                     // If the user clicked on something that's not an image marker, we
41034                     // might get in here.. Cache lookup can fail, e.g. if the user
41035                     // clicked a streetsign, but images are loading slowly asynchronously.
41036                     // We'll try to carry on anyway if there is no datum.  There just
41037                     // might be a delay before user sees detections, captured_at, etc.
41038                     d = _mlyCache.images.forImageKey[imageKey];
41039                 }
41040
41041                 _mlySelectedImage = d;
41042                 var viewer = d3_select('#photoviewer');
41043                 if (!viewer.empty()) viewer.datum(d);
41044
41045                 imageKey = (d && d.key) || imageKey;
41046                 if (!fromViewer && imageKey) {
41047                     _mlyClicks.push(imageKey);
41048                 }
41049
41050                 this.setStyles(null, true);
41051
41052                 // if signs signs are shown, highlight the ones that appear in this image
41053                 d3_selectAll('.layer-mapillary-signs .icon-sign')
41054                     .classed('currentView', function(d) {
41055                         return d.detections.some(function(detection) {
41056                             return detection.image_key === imageKey;
41057                         });
41058                     });
41059
41060                 if (d) {
41061                     this.updateDetections(d);
41062                 }
41063
41064                 return this;
41065             },
41066
41067
41068             getSelectedImage: function() {
41069                 return _mlySelectedImage;
41070             },
41071
41072
41073             getSequenceKeyForImage: function(d) {
41074                 var imageKey = d && d.key;
41075                 return imageKey && _mlyCache.sequences.forImageKey[imageKey];
41076             },
41077
41078
41079             // Updates the currently highlighted sequence and selected bubble.
41080             // Reset is only necessary when interacting with the viewport because
41081             // this implicitly changes the currently selected bubble/sequence
41082             setStyles: function(hovered, reset) {
41083                 if (reset) {  // reset all layers
41084                     d3_selectAll('.viewfield-group')
41085                         .classed('highlighted', false)
41086                         .classed('hovered', false)
41087                         .classed('currentView', false);
41088
41089                     d3_selectAll('.sequence')
41090                         .classed('highlighted', false)
41091                         .classed('currentView', false);
41092                 }
41093
41094                 var hoveredImageKey = hovered && hovered.key;
41095                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
41096                 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
41097                 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
41098
41099                 var viewer = d3_select('#photoviewer');
41100                 var selected = viewer.empty() ? undefined : viewer.datum();
41101                 var selectedImageKey = selected && selected.key;
41102                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
41103                 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
41104                 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
41105
41106                 // highlight sibling viewfields on either the selected or the hovered sequences
41107                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
41108
41109                 d3_selectAll('.layer-mapillary .viewfield-group')
41110                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
41111                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
41112                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
41113
41114                 d3_selectAll('.layer-mapillary .sequence')
41115                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
41116                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
41117
41118                 // update viewfields if needed
41119                 d3_selectAll('.viewfield-group .viewfield')
41120                     .attr('d', viewfieldPath);
41121
41122                 function viewfieldPath() {
41123                     var d = this.parentNode.__data__;
41124                     if (d.pano && d.key !== selectedImageKey) {
41125                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
41126                     } else {
41127                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
41128                     }
41129                 }
41130
41131                 return this;
41132             },
41133
41134
41135             updateDetections: function(d) {
41136                 if (!_mlyViewer || _mlyFallback) return;
41137
41138                 var imageKey = d && d.key;
41139                 if (!imageKey) return;
41140
41141                 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
41142                 detections.forEach(function(data) {
41143                     var tag = makeTag(data);
41144                     if (tag) {
41145                         var tagComponent = _mlyViewer.getComponent('tag');
41146                         tagComponent.add([tag]);
41147                     }
41148                 });
41149
41150                 function makeTag(data) {
41151                     var valueParts = data.value.split('--');
41152                     if (valueParts.length !== 3) return;
41153
41154                     var text = valueParts[1].replace(/-/g, ' ');
41155                     var tag;
41156
41157                     // Currently only two shapes <Polygon|Point>
41158                     if (data.shape.type === 'Polygon') {
41159                         var polygonGeometry = new Mapillary
41160                             .TagComponent
41161                             .PolygonGeometry(data.shape.coordinates[0]);
41162
41163                         tag = new Mapillary.TagComponent.OutlineTag(
41164                             data.key,
41165                             polygonGeometry,
41166                             {
41167                                 text: text,
41168                                 textColor: 0xffff00,
41169                                 lineColor: 0xffff00,
41170                                 lineWidth: 2,
41171                                 fillColor: 0xffff00,
41172                                 fillOpacity: 0.3,
41173                             }
41174                         );
41175
41176                     } else if (data.shape.type === 'Point') {
41177                         var pointGeometry = new Mapillary
41178                             .TagComponent
41179                             .PointGeometry(data.shape.coordinates[0]);
41180
41181                         tag = new Mapillary.TagComponent.SpotTag(
41182                             data.key,
41183                             pointGeometry,
41184                             {
41185                                 text: text,
41186                                 color: 0xffff00,
41187                                 textColor: 0xffff00
41188                             }
41189                         );
41190                     }
41191
41192                     return tag;
41193                 }
41194             },
41195
41196
41197             cache: function() {
41198                 return _mlyCache;
41199             }
41200
41201         };
41202
41203         function validationIssue(attrs) {
41204             this.type = attrs.type;                // required - name of rule that created the issue (e.g. 'missing_tag')
41205             this.subtype = attrs.subtype;          // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
41206             this.severity = attrs.severity;        // required - 'warning' or 'error'
41207             this.message = attrs.message;          // required - function returning localized string
41208             this.reference = attrs.reference;      // optional - function(selection) to render reference information
41209             this.entityIds = attrs.entityIds;      // optional - array of IDs of entities involved in the issue
41210             this.loc = attrs.loc;                  // optional - [lon, lat] to zoom in on to see the issue
41211             this.data = attrs.data;                // optional - object containing extra data for the fixes
41212             this.fixes = attrs.fixes || [];              // optional - array of validationIssueFix objects
41213             this.hash = attrs.hash;                // optional - string to further differentiate the issue
41214
41215             this.id = generateID.apply(this);      // generated - see below
41216             this.autoFix = null;                   // generated - if autofix exists, will be set below
41217
41218             // A unique, deterministic string hash.
41219             // Issues with identical id values are considered identical.
41220             function generateID() {
41221                 var parts = [this.type];
41222
41223                 if (this.hash) {   // subclasses can pass in their own differentiator
41224                     parts.push(this.hash);
41225                 }
41226
41227                 if (this.subtype) {
41228                     parts.push(this.subtype);
41229                 }
41230
41231                 // include the entities this issue is for
41232                 // (sort them so the id is deterministic)
41233                 if (this.entityIds) {
41234                     var entityKeys = this.entityIds.slice().sort();
41235                     parts.push.apply(parts, entityKeys);
41236                 }
41237
41238                 return parts.join(':');
41239             }
41240
41241             this.extent = function(resolver) {
41242                 if (this.loc) {
41243                     return geoExtent(this.loc);
41244                 }
41245                 if (this.entityIds && this.entityIds.length) {
41246                     return this.entityIds.reduce(function(extent, entityId) {
41247                         return extent.extend(resolver.entity(entityId).extent(resolver));
41248                     }, geoExtent());
41249                 }
41250                 return null;
41251             };
41252
41253
41254             if (this.fixes) {   // add a reference in the fixes to the issue for use in fix actions
41255                 for (var i = 0; i < this.fixes.length; i++) {
41256                     var fix = this.fixes[i];
41257                     fix.issue = this;
41258                     if (fix.autoArgs) {
41259                         this.autoFix = fix;
41260                     }
41261                 }
41262             }
41263         }
41264
41265
41266         function validationIssueFix(attrs) {
41267             this.title = attrs.title;                 // Required
41268             this.onClick = attrs.onClick;             // Required
41269             this.icon = attrs.icon;                   // Optional - shows 'iD-icon-wrench' if not set
41270             this.entityIds = attrs.entityIds || [];   // Optional - Used for hover-higlighting.
41271             this.autoArgs = attrs.autoArgs;           // Optional - pass [actions, annotation] arglist if this fix can automatically run
41272
41273             this.issue = null;    // Generated link - added by ValidationIssue constructor
41274         }
41275
41276         var buildRuleChecks = function() {
41277             return {
41278                 equals: function (equals) {
41279                     return function(tags) {
41280                         return Object.keys(equals).every(function(k) {
41281                             return equals[k] === tags[k];
41282                         });
41283                     };
41284                 },
41285                 notEquals: function (notEquals) {
41286                     return function(tags) {
41287                         return Object.keys(notEquals).some(function(k) {
41288                             return notEquals[k] !== tags[k];
41289                         });
41290                     };
41291                 },
41292                 absence: function(absence) {
41293                     return function(tags) {
41294                         return Object.keys(tags).indexOf(absence) === -1;
41295                     };
41296                 },
41297                 presence: function(presence) {
41298                     return function(tags) {
41299                         return Object.keys(tags).indexOf(presence) > -1;
41300                     };
41301                 },
41302                 greaterThan: function(greaterThan) {
41303                     var key = Object.keys(greaterThan)[0];
41304                     var value = greaterThan[key];
41305
41306                     return function(tags) {
41307                         return tags[key] > value;
41308                     };
41309                 },
41310                 greaterThanEqual: function(greaterThanEqual) {
41311                     var key = Object.keys(greaterThanEqual)[0];
41312                     var value = greaterThanEqual[key];
41313
41314                     return function(tags) {
41315                         return tags[key] >= value;
41316                     };
41317                 },
41318                 lessThan: function(lessThan) {
41319                     var key = Object.keys(lessThan)[0];
41320                     var value = lessThan[key];
41321
41322                     return function(tags) {
41323                         return tags[key] < value;
41324                     };
41325                 },
41326                 lessThanEqual: function(lessThanEqual) {
41327                     var key = Object.keys(lessThanEqual)[0];
41328                     var value = lessThanEqual[key];
41329
41330                     return function(tags) {
41331                         return tags[key] <= value;
41332                     };
41333                 },
41334                 positiveRegex: function(positiveRegex) {
41335                     var tagKey = Object.keys(positiveRegex)[0];
41336                     var expression = positiveRegex[tagKey].join('|');
41337                     var regex = new RegExp(expression);
41338
41339                     return function(tags) {
41340                         return regex.test(tags[tagKey]);
41341                     };
41342                 },
41343                 negativeRegex: function(negativeRegex) {
41344                     var tagKey = Object.keys(negativeRegex)[0];
41345                     var expression = negativeRegex[tagKey].join('|');
41346                     var regex = new RegExp(expression);
41347
41348                     return function(tags) {
41349                         return !regex.test(tags[tagKey]);
41350                     };
41351                 }
41352             };
41353         };
41354
41355         var buildLineKeys = function() {
41356             return {
41357                 highway: {
41358                     rest_area: true,
41359                     services: true
41360                 },
41361                 railway: {
41362                     roundhouse: true,
41363                     station: true,
41364                     traverser: true,
41365                     turntable: true,
41366                     wash: true
41367                 }
41368             };
41369         };
41370
41371         var serviceMapRules = {
41372             init: function() {
41373                 this._ruleChecks  = buildRuleChecks();
41374                 this._validationRules = [];
41375                 this._areaKeys = osmAreaKeys;
41376                 this._lineKeys = buildLineKeys();
41377             },
41378
41379             // list of rules only relevant to tag checks...
41380             filterRuleChecks: function(selector) {
41381                 var _ruleChecks = this._ruleChecks;
41382                 return Object.keys(selector).reduce(function(rules, key) {
41383                     if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
41384                         rules.push(_ruleChecks[key](selector[key]));
41385                     }
41386                     return rules;
41387                 }, []);
41388             },
41389
41390             // builds tagMap from mapcss-parse selector object...
41391             buildTagMap: function(selector) {
41392                 var getRegexValues = function(regexes) {
41393                     return regexes.map(function(regex) {
41394                         return regex.replace(/\$|\^/g, '');
41395                     });
41396                 };
41397
41398                 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
41399                     var values;
41400                     var isRegex = /regex/gi.test(key);
41401                     var isEqual = /equals/gi.test(key);
41402
41403                     if (isRegex || isEqual) {
41404                         Object.keys(selector[key]).forEach(function(selectorKey) {
41405                             values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
41406
41407                             if (expectedTags.hasOwnProperty(selectorKey)) {
41408                                 values = values.concat(expectedTags[selectorKey]);
41409                             }
41410
41411                             expectedTags[selectorKey] = values;
41412                         });
41413
41414                     } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
41415                         var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
41416
41417                         values = [selector[key][tagKey]];
41418
41419                         if (expectedTags.hasOwnProperty(tagKey)) {
41420                             values = values.concat(expectedTags[tagKey]);
41421                         }
41422
41423                         expectedTags[tagKey] = values;
41424                     }
41425
41426                     return expectedTags;
41427                 }, {});
41428
41429                 return tagMap;
41430             },
41431
41432             // inspired by osmWay#isArea()
41433             inferGeometry: function(tagMap) {
41434                 var _lineKeys = this._lineKeys;
41435                 var _areaKeys = this._areaKeys;
41436
41437                 var isAreaKeyBlackList = function(key) {
41438                     return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
41439                 };
41440                 var isLineKeysWhiteList = function(key) {
41441                     return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
41442                 };
41443
41444                 if (tagMap.hasOwnProperty('area')) {
41445                     if (tagMap.area.indexOf('yes') > -1) {
41446                         return 'area';
41447                     }
41448                     if (tagMap.area.indexOf('no') > -1) {
41449                         return 'line';
41450                     }
41451                 }
41452
41453                 for (var key in tagMap) {
41454                     if (key in _areaKeys && !isAreaKeyBlackList(key)) {
41455                         return 'area';
41456                     }
41457                     if (key in _lineKeys && isLineKeysWhiteList(key)) {
41458                         return 'area';
41459                     }
41460                 }
41461
41462                 return 'line';
41463             },
41464
41465             // adds from mapcss-parse selector check...
41466             addRule: function(selector) {
41467                 var rule = {
41468                     // checks relevant to mapcss-selector
41469                     checks: this.filterRuleChecks(selector),
41470                     // true if all conditions for a tag error are true..
41471                     matches: function(entity) {
41472                         return this.checks.every(function(check) {
41473                             return check(entity.tags);
41474                         });
41475                     },
41476                     // borrowed from Way#isArea()
41477                     inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
41478                     geometryMatches: function(entity, graph) {
41479                         if (entity.type === 'node' || entity.type === 'relation') {
41480                             return selector.geometry === entity.type;
41481                         } else if (entity.type === 'way') {
41482                             return this.inferredGeometry === entity.geometry(graph);
41483                         }
41484                     },
41485                     // when geometries match and tag matches are present, return a warning...
41486                     findIssues: function (entity, graph, issues) {
41487                         if (this.geometryMatches(entity, graph) && this.matches(entity)) {
41488                             var severity = Object.keys(selector).indexOf('error') > -1
41489                                     ? 'error'
41490                                     : 'warning';
41491                             var message = selector[severity];
41492                             issues.push(new validationIssue({
41493                                 type: 'maprules',
41494                                 severity: severity,
41495                                 message: function() {
41496                                     return message;
41497                                 },
41498                                 entityIds: [entity.id]
41499                             }));
41500                         }
41501                     }
41502                 };
41503                 this._validationRules.push(rule);
41504             },
41505
41506             clearRules: function() { this._validationRules = []; },
41507
41508             // returns validationRules...
41509             validationRules: function() { return this._validationRules; },
41510
41511             // returns ruleChecks
41512             ruleChecks: function() { return this._ruleChecks; }
41513         };
41514
41515         var apibase$1 = 'https://nominatim.openstreetmap.org/';
41516         var _inflight = {};
41517         var _nominatimCache;
41518
41519
41520         var serviceNominatim = {
41521
41522             init: function() {
41523                 _inflight = {};
41524                 _nominatimCache = rbush_1();
41525             },
41526
41527             reset: function() {
41528                 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
41529                 _inflight = {};
41530                 _nominatimCache = rbush_1();
41531             },
41532
41533
41534             countryCode: function (location, callback) {
41535                 this.reverse(location, function(err, result) {
41536                     if (err) {
41537                         return callback(err);
41538                     } else if (result.address) {
41539                         return callback(null, result.address.country_code);
41540                     } else {
41541                         return callback('Unable to geocode', null);
41542                     }
41543                 });
41544             },
41545
41546
41547             reverse: function (loc, callback) {
41548                 var cached = _nominatimCache.search(
41549                     { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
41550                 );
41551
41552                 if (cached.length > 0) {
41553                     if (callback) callback(null, cached[0].data);
41554                     return;
41555                 }
41556
41557                 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
41558                 var url = apibase$1 + 'reverse?' + utilQsString(params);
41559
41560                 if (_inflight[url]) return;
41561                 var controller = new AbortController();
41562                 _inflight[url] = controller;
41563
41564                 d3_json(url, { signal: controller.signal })
41565                     .then(function(result) {
41566                         delete _inflight[url];
41567                         if (result && result.error) {
41568                             throw new Error(result.error);
41569                         }
41570                         var extent = geoExtent(loc).padByMeters(200);
41571                         _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
41572                         if (callback) callback(null, result);
41573                     })
41574                     .catch(function(err) {
41575                         delete _inflight[url];
41576                         if (err.name === 'AbortError') return;
41577                         if (callback) callback(err.message);
41578                     });
41579             },
41580
41581
41582             search: function (val, callback) {
41583                 var searchVal = encodeURIComponent(val);
41584                 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
41585
41586                 if (_inflight[url]) return;
41587                 var controller = new AbortController();
41588                 _inflight[url] = controller;
41589
41590                 d3_json(url, { signal: controller.signal })
41591                     .then(function(result) {
41592                         delete _inflight[url];
41593                         if (result && result.error) {
41594                             throw new Error(result.error);
41595                         }
41596                         if (callback) callback(null, result);
41597                     })
41598                     .catch(function(err) {
41599                         delete _inflight[url];
41600                         if (err.name === 'AbortError') return;
41601                         if (callback) callback(err.message);
41602                     });
41603             }
41604
41605         };
41606
41607         var apibase$2 = 'https://openstreetcam.org';
41608         var maxResults$1 = 1000;
41609         var tileZoom$1 = 14;
41610         var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
41611         var dispatch$4 = dispatch('loadedImages');
41612         var imgZoom = d3_zoom()
41613             .extent([[0, 0], [320, 240]])
41614             .translateExtent([[0, 0], [320, 240]])
41615             .scaleExtent([1, 15])
41616             .on('zoom', zoomPan);
41617         var _oscCache;
41618         var _oscSelectedImage;
41619
41620
41621         function abortRequest$3(controller) {
41622             controller.abort();
41623         }
41624
41625
41626         function maxPageAtZoom$1(z) {
41627             if (z < 15)   return 2;
41628             if (z === 15) return 5;
41629             if (z === 16) return 10;
41630             if (z === 17) return 20;
41631             if (z === 18) return 40;
41632             if (z > 18)   return 80;
41633         }
41634
41635
41636         function loadTiles$1(which, url, projection) {
41637             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
41638             var tiles = tiler$3.getTiles(projection);
41639
41640             // abort inflight requests that are no longer needed
41641             var cache = _oscCache[which];
41642             Object.keys(cache.inflight).forEach(function(k) {
41643                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
41644                 if (!wanted) {
41645                     abortRequest$3(cache.inflight[k]);
41646                     delete cache.inflight[k];
41647                 }
41648             });
41649
41650             tiles.forEach(function(tile) {
41651                 loadNextTilePage$1(which, currZoom, url, tile);
41652             });
41653         }
41654
41655
41656         function loadNextTilePage$1(which, currZoom, url, tile) {
41657             var cache = _oscCache[which];
41658             var bbox = tile.extent.bbox();
41659             var maxPages = maxPageAtZoom$1(currZoom);
41660             var nextPage = cache.nextPage[tile.id] || 1;
41661             var params = utilQsString({
41662                 ipp: maxResults$1,
41663                 page: nextPage,
41664                 // client_id: clientId,
41665                 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
41666                 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
41667             }, true);
41668
41669             if (nextPage > maxPages) return;
41670
41671             var id = tile.id + ',' + String(nextPage);
41672             if (cache.loaded[id] || cache.inflight[id]) return;
41673
41674             var controller = new AbortController();
41675             cache.inflight[id] = controller;
41676
41677             var options = {
41678                 method: 'POST',
41679                 signal: controller.signal,
41680                 body: params,
41681                 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
41682             };
41683
41684             d3_json(url, options)
41685                 .then(function(data) {
41686                     cache.loaded[id] = true;
41687                     delete cache.inflight[id];
41688                     if (!data || !data.currentPageItems || !data.currentPageItems.length) {
41689                         throw new Error('No Data');
41690                     }
41691
41692                     var features = data.currentPageItems.map(function(item) {
41693                         var loc = [+item.lng, +item.lat];
41694                         var d;
41695
41696                         if (which === 'images') {
41697                             d = {
41698                                 loc: loc,
41699                                 key: item.id,
41700                                 ca: +item.heading,
41701                                 captured_at: (item.shot_date || item.date_added),
41702                                 captured_by: item.username,
41703                                 imagePath: item.lth_name,
41704                                 sequence_id: item.sequence_id,
41705                                 sequence_index: +item.sequence_index
41706                             };
41707
41708                             // cache sequence info
41709                             var seq = _oscCache.sequences[d.sequence_id];
41710                             if (!seq) {
41711                                 seq = { rotation: 0, images: [] };
41712                                 _oscCache.sequences[d.sequence_id] = seq;
41713                             }
41714                             seq.images[d.sequence_index] = d;
41715                         }
41716
41717                         return {
41718                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
41719                         };
41720                     });
41721
41722                     cache.rtree.load(features);
41723
41724                     if (data.currentPageItems.length === maxResults$1) {  // more pages to load
41725                         cache.nextPage[tile.id] = nextPage + 1;
41726                         loadNextTilePage$1(which, currZoom, url, tile);
41727                     } else {
41728                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
41729                     }
41730
41731                     if (which === 'images') {
41732                         dispatch$4.call('loadedImages');
41733                     }
41734                 })
41735                 .catch(function() {
41736                     cache.loaded[id] = true;
41737                     delete cache.inflight[id];
41738                 });
41739         }
41740
41741
41742         // partition viewport into higher zoom tiles
41743         function partitionViewport$1(projection) {
41744             var z = geoScaleToZoom(projection.scale());
41745             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
41746             var tiler = utilTiler().zoomExtent([z2, z2]);
41747
41748             return tiler.getTiles(projection)
41749                 .map(function(tile) { return tile.extent; });
41750         }
41751
41752
41753         // no more than `limit` results per partition.
41754         function searchLimited$1(limit, projection, rtree) {
41755             limit = limit || 5;
41756
41757             return partitionViewport$1(projection)
41758                 .reduce(function(result, extent) {
41759                     var found = rtree.search(extent.bbox())
41760                         .slice(0, limit)
41761                         .map(function(d) { return d.data; });
41762
41763                     return (found.length ? result.concat(found) : result);
41764                 }, []);
41765         }
41766
41767
41768         function zoomPan() {
41769             var t = event.transform;
41770             d3_select('#photoviewer .osc-image-wrap')
41771                 .call(utilSetTransform, t.x, t.y, t.k);
41772         }
41773
41774
41775         var serviceOpenstreetcam = {
41776
41777             init: function() {
41778                 if (!_oscCache) {
41779                     this.reset();
41780                 }
41781
41782                 this.event = utilRebind(this, dispatch$4, 'on');
41783             },
41784
41785             reset: function() {
41786                 if (_oscCache) {
41787                     Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
41788                 }
41789
41790                 _oscCache = {
41791                     images: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1() },
41792                     sequences: {}
41793                 };
41794
41795                 _oscSelectedImage = null;
41796             },
41797
41798
41799             images: function(projection) {
41800                 var limit = 5;
41801                 return searchLimited$1(limit, projection, _oscCache.images.rtree);
41802             },
41803
41804
41805             sequences: function(projection) {
41806                 var viewport = projection.clipExtent();
41807                 var min = [viewport[0][0], viewport[1][1]];
41808                 var max = [viewport[1][0], viewport[0][1]];
41809                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
41810                 var sequenceKeys = {};
41811
41812                 // all sequences for images in viewport
41813                 _oscCache.images.rtree.search(bbox)
41814                     .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
41815
41816                 // make linestrings from those sequences
41817                 var lineStrings = [];
41818                 Object.keys(sequenceKeys)
41819                     .forEach(function(sequenceKey) {
41820                         var seq = _oscCache.sequences[sequenceKey];
41821                         var images = seq && seq.images;
41822                         if (images) {
41823                             lineStrings.push({
41824                                 type: 'LineString',
41825                                 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
41826                                 properties: { key: sequenceKey }
41827                             });
41828                         }
41829                     });
41830                 return lineStrings;
41831             },
41832
41833
41834             loadImages: function(projection) {
41835                 var url = apibase$2 + '/1.0/list/nearby-photos/';
41836                 loadTiles$1('images', url, projection);
41837             },
41838
41839
41840             loadViewer: function(context) {
41841                 var that = this;
41842
41843                 // add osc-wrapper
41844                 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
41845                     .data([0]);
41846
41847                 var wrapEnter = wrap.enter()
41848                     .append('div')
41849                     .attr('class', 'photo-wrapper osc-wrapper')
41850                     .classed('hide', true)
41851                     .call(imgZoom)
41852                     .on('dblclick.zoom', null);
41853
41854                 wrapEnter
41855                     .append('div')
41856                     .attr('class', 'photo-attribution fillD');
41857
41858                 var controlsEnter = wrapEnter
41859                     .append('div')
41860                     .attr('class', 'photo-controls-wrap')
41861                     .append('div')
41862                     .attr('class', 'photo-controls');
41863
41864                 controlsEnter
41865                     .append('button')
41866                     .on('click.back', step(-1))
41867                     .text('◄');
41868
41869                 controlsEnter
41870                     .append('button')
41871                     .on('click.rotate-ccw', rotate(-90))
41872                     .text('⤿');
41873
41874                 controlsEnter
41875                     .append('button')
41876                     .on('click.rotate-cw', rotate(90))
41877                     .text('⤾');
41878
41879                 controlsEnter
41880                     .append('button')
41881                     .on('click.forward', step(1))
41882                     .text('►');
41883
41884                 wrapEnter
41885                     .append('div')
41886                     .attr('class', 'osc-image-wrap');
41887
41888
41889                 // Register viewer resize handler
41890                 context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
41891                     imgZoom = d3_zoom()
41892                         .extent([[0, 0], dimensions])
41893                         .translateExtent([[0, 0], dimensions])
41894                         .scaleExtent([1, 15])
41895                         .on('zoom', zoomPan);
41896                 });
41897
41898
41899                 function rotate(deg) {
41900                     return function() {
41901                         if (!_oscSelectedImage) return;
41902                         var sequenceKey = _oscSelectedImage.sequence_id;
41903                         var sequence = _oscCache.sequences[sequenceKey];
41904                         if (!sequence) return;
41905
41906                         var r = sequence.rotation || 0;
41907                         r += deg;
41908
41909                         if (r > 180) r -= 360;
41910                         if (r < -180) r += 360;
41911                         sequence.rotation = r;
41912
41913                         var wrap = d3_select('#photoviewer .osc-wrapper');
41914
41915                         wrap
41916                             .transition()
41917                             .duration(100)
41918                             .call(imgZoom.transform, identity$8);
41919
41920                         wrap.selectAll('.osc-image')
41921                             .transition()
41922                             .duration(100)
41923                             .style('transform', 'rotate(' + r + 'deg)');
41924                     };
41925                 }
41926
41927                 function step(stepBy) {
41928                     return function() {
41929                         if (!_oscSelectedImage) return;
41930                         var sequenceKey = _oscSelectedImage.sequence_id;
41931                         var sequence = _oscCache.sequences[sequenceKey];
41932                         if (!sequence) return;
41933
41934                         var nextIndex = _oscSelectedImage.sequence_index + stepBy;
41935                         var nextImage = sequence.images[nextIndex];
41936                         if (!nextImage) return;
41937
41938                         context.map().centerEase(nextImage.loc);
41939
41940                         that
41941                             .selectImage(nextImage)
41942                             .updateViewer(nextImage);
41943                     };
41944                 }
41945             },
41946
41947
41948             showViewer: function() {
41949                 var viewer = d3_select('#photoviewer')
41950                     .classed('hide', false);
41951
41952                 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
41953
41954                 if (isHidden) {
41955                     viewer
41956                         .selectAll('.photo-wrapper:not(.osc-wrapper)')
41957                         .classed('hide', true);
41958
41959                     viewer
41960                         .selectAll('.photo-wrapper.osc-wrapper')
41961                         .classed('hide', false);
41962                 }
41963
41964                 return this;
41965             },
41966
41967
41968             hideViewer: function() {
41969                 _oscSelectedImage = null;
41970
41971                 var viewer = d3_select('#photoviewer');
41972                 if (!viewer.empty()) viewer.datum(null);
41973
41974                 viewer
41975                     .classed('hide', true)
41976                     .selectAll('.photo-wrapper')
41977                     .classed('hide', true);
41978
41979                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
41980                     .classed('currentView', false);
41981
41982                 return this.setStyles(null, true);
41983             },
41984
41985
41986             updateViewer: function(d) {
41987                 var wrap = d3_select('#photoviewer .osc-wrapper');
41988                 var imageWrap = wrap.selectAll('.osc-image-wrap');
41989                 var attribution = wrap.selectAll('.photo-attribution').html('');
41990
41991                 wrap
41992                     .transition()
41993                     .duration(100)
41994                     .call(imgZoom.transform, identity$8);
41995
41996                 imageWrap
41997                     .selectAll('.osc-image')
41998                     .remove();
41999
42000                 if (d) {
42001                     var sequence = _oscCache.sequences[d.sequence_id];
42002                     var r = (sequence && sequence.rotation) || 0;
42003
42004                     imageWrap
42005                         .append('img')
42006                         .attr('class', 'osc-image')
42007                         .attr('src', apibase$2 + '/' + d.imagePath)
42008                         .style('transform', 'rotate(' + r + 'deg)');
42009
42010                     if (d.captured_by) {
42011                         attribution
42012                             .append('a')
42013                             .attr('class', 'captured_by')
42014                             .attr('target', '_blank')
42015                             .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
42016                             .text('@' + d.captured_by);
42017
42018                         attribution
42019                             .append('span')
42020                             .text('|');
42021                     }
42022
42023                     if (d.captured_at) {
42024                         attribution
42025                             .append('span')
42026                             .attr('class', 'captured_at')
42027                             .text(localeDateString(d.captured_at));
42028
42029                         attribution
42030                             .append('span')
42031                             .text('|');
42032                     }
42033
42034                     attribution
42035                         .append('a')
42036                         .attr('class', 'image-link')
42037                         .attr('target', '_blank')
42038                         .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
42039                         .text('openstreetcam.org');
42040                 }
42041
42042                 return this;
42043
42044
42045                 function localeDateString(s) {
42046                     if (!s) return null;
42047                     var detected = utilDetect();
42048                     var options = { day: 'numeric', month: 'short', year: 'numeric' };
42049                     var d = new Date(s);
42050                     if (isNaN(d.getTime())) return null;
42051                     return d.toLocaleDateString(detected.locale, options);
42052                 }
42053             },
42054
42055
42056             selectImage: function(d) {
42057                 _oscSelectedImage = d;
42058                 var viewer = d3_select('#photoviewer');
42059                 if (!viewer.empty()) viewer.datum(d);
42060
42061                 this.setStyles(null, true);
42062
42063                 d3_selectAll('.icon-sign')
42064                     .classed('currentView', false);
42065
42066                 return this;
42067             },
42068
42069
42070             getSelectedImage: function() {
42071                 return _oscSelectedImage;
42072             },
42073
42074
42075             getSequenceKeyForImage: function(d) {
42076                 return d && d.sequence_id;
42077             },
42078
42079
42080             // Updates the currently highlighted sequence and selected bubble.
42081             // Reset is only necessary when interacting with the viewport because
42082             // this implicitly changes the currently selected bubble/sequence
42083             setStyles: function(hovered, reset) {
42084                 if (reset) {  // reset all layers
42085                     d3_selectAll('.viewfield-group')
42086                         .classed('highlighted', false)
42087                         .classed('hovered', false)
42088                         .classed('currentView', false);
42089
42090                     d3_selectAll('.sequence')
42091                         .classed('highlighted', false)
42092                         .classed('currentView', false);
42093                 }
42094
42095                 var hoveredImageKey = hovered && hovered.key;
42096                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
42097                 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
42098                 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
42099
42100                 var viewer = d3_select('#photoviewer');
42101                 var selected = viewer.empty() ? undefined : viewer.datum();
42102                 var selectedImageKey = selected && selected.key;
42103                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
42104                 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
42105                 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
42106
42107                 // highlight sibling viewfields on either the selected or the hovered sequences
42108                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
42109
42110                 d3_selectAll('.layer-openstreetcam .viewfield-group')
42111                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
42112                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
42113                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
42114
42115                 d3_selectAll('.layer-openstreetcam .sequence')
42116                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
42117                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
42118
42119                 // update viewfields if needed
42120                 d3_selectAll('.viewfield-group .viewfield')
42121                     .attr('d', viewfieldPath);
42122
42123                 function viewfieldPath() {
42124                     var d = this.parentNode.__data__;
42125                     if (d.pano && d.key !== selectedImageKey) {
42126                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
42127                     } else {
42128                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
42129                     }
42130                 }
42131
42132                 return this;
42133             },
42134
42135
42136             cache: function() {
42137                 return _oscCache;
42138             }
42139
42140         };
42141
42142         /**
42143          * Checks if `value` is the
42144          * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
42145          * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
42146          *
42147          * @static
42148          * @memberOf _
42149          * @since 0.1.0
42150          * @category Lang
42151          * @param {*} value The value to check.
42152          * @returns {boolean} Returns `true` if `value` is an object, else `false`.
42153          * @example
42154          *
42155          * _.isObject({});
42156          * // => true
42157          *
42158          * _.isObject([1, 2, 3]);
42159          * // => true
42160          *
42161          * _.isObject(_.noop);
42162          * // => true
42163          *
42164          * _.isObject(null);
42165          * // => false
42166          */
42167         function isObject$1(value) {
42168           var type = typeof value;
42169           return value != null && (type == 'object' || type == 'function');
42170         }
42171
42172         /** Detect free variable `global` from Node.js. */
42173         var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
42174
42175         /** Detect free variable `self`. */
42176         var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
42177
42178         /** Used as a reference to the global object. */
42179         var root$3 = freeGlobal || freeSelf || Function('return this')();
42180
42181         /**
42182          * Gets the timestamp of the number of milliseconds that have elapsed since
42183          * the Unix epoch (1 January 1970 00:00:00 UTC).
42184          *
42185          * @static
42186          * @memberOf _
42187          * @since 2.4.0
42188          * @category Date
42189          * @returns {number} Returns the timestamp.
42190          * @example
42191          *
42192          * _.defer(function(stamp) {
42193          *   console.log(_.now() - stamp);
42194          * }, _.now());
42195          * // => Logs the number of milliseconds it took for the deferred invocation.
42196          */
42197         var now$1 = function() {
42198           return root$3.Date.now();
42199         };
42200
42201         /** Built-in value references. */
42202         var Symbol$1 = root$3.Symbol;
42203
42204         /** Used for built-in method references. */
42205         var objectProto = Object.prototype;
42206
42207         /** Used to check objects for own properties. */
42208         var hasOwnProperty$1 = objectProto.hasOwnProperty;
42209
42210         /**
42211          * Used to resolve the
42212          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42213          * of values.
42214          */
42215         var nativeObjectToString = objectProto.toString;
42216
42217         /** Built-in value references. */
42218         var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
42219
42220         /**
42221          * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
42222          *
42223          * @private
42224          * @param {*} value The value to query.
42225          * @returns {string} Returns the raw `toStringTag`.
42226          */
42227         function getRawTag(value) {
42228           var isOwn = hasOwnProperty$1.call(value, symToStringTag),
42229               tag = value[symToStringTag];
42230
42231           try {
42232             value[symToStringTag] = undefined;
42233             var unmasked = true;
42234           } catch (e) {}
42235
42236           var result = nativeObjectToString.call(value);
42237           if (unmasked) {
42238             if (isOwn) {
42239               value[symToStringTag] = tag;
42240             } else {
42241               delete value[symToStringTag];
42242             }
42243           }
42244           return result;
42245         }
42246
42247         /** Used for built-in method references. */
42248         var objectProto$1 = Object.prototype;
42249
42250         /**
42251          * Used to resolve the
42252          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
42253          * of values.
42254          */
42255         var nativeObjectToString$1 = objectProto$1.toString;
42256
42257         /**
42258          * Converts `value` to a string using `Object.prototype.toString`.
42259          *
42260          * @private
42261          * @param {*} value The value to convert.
42262          * @returns {string} Returns the converted string.
42263          */
42264         function objectToString(value) {
42265           return nativeObjectToString$1.call(value);
42266         }
42267
42268         /** `Object#toString` result references. */
42269         var nullTag = '[object Null]',
42270             undefinedTag = '[object Undefined]';
42271
42272         /** Built-in value references. */
42273         var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
42274
42275         /**
42276          * The base implementation of `getTag` without fallbacks for buggy environments.
42277          *
42278          * @private
42279          * @param {*} value The value to query.
42280          * @returns {string} Returns the `toStringTag`.
42281          */
42282         function baseGetTag(value) {
42283           if (value == null) {
42284             return value === undefined ? undefinedTag : nullTag;
42285           }
42286           return (symToStringTag$1 && symToStringTag$1 in Object(value))
42287             ? getRawTag(value)
42288             : objectToString(value);
42289         }
42290
42291         /**
42292          * Checks if `value` is object-like. A value is object-like if it's not `null`
42293          * and has a `typeof` result of "object".
42294          *
42295          * @static
42296          * @memberOf _
42297          * @since 4.0.0
42298          * @category Lang
42299          * @param {*} value The value to check.
42300          * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
42301          * @example
42302          *
42303          * _.isObjectLike({});
42304          * // => true
42305          *
42306          * _.isObjectLike([1, 2, 3]);
42307          * // => true
42308          *
42309          * _.isObjectLike(_.noop);
42310          * // => false
42311          *
42312          * _.isObjectLike(null);
42313          * // => false
42314          */
42315         function isObjectLike(value) {
42316           return value != null && typeof value == 'object';
42317         }
42318
42319         /** `Object#toString` result references. */
42320         var symbolTag = '[object Symbol]';
42321
42322         /**
42323          * Checks if `value` is classified as a `Symbol` primitive or object.
42324          *
42325          * @static
42326          * @memberOf _
42327          * @since 4.0.0
42328          * @category Lang
42329          * @param {*} value The value to check.
42330          * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
42331          * @example
42332          *
42333          * _.isSymbol(Symbol.iterator);
42334          * // => true
42335          *
42336          * _.isSymbol('abc');
42337          * // => false
42338          */
42339         function isSymbol$2(value) {
42340           return typeof value == 'symbol' ||
42341             (isObjectLike(value) && baseGetTag(value) == symbolTag);
42342         }
42343
42344         /** Used as references for various `Number` constants. */
42345         var NAN = 0 / 0;
42346
42347         /** Used to match leading and trailing whitespace. */
42348         var reTrim = /^\s+|\s+$/g;
42349
42350         /** Used to detect bad signed hexadecimal string values. */
42351         var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
42352
42353         /** Used to detect binary string values. */
42354         var reIsBinary = /^0b[01]+$/i;
42355
42356         /** Used to detect octal string values. */
42357         var reIsOctal = /^0o[0-7]+$/i;
42358
42359         /** Built-in method references without a dependency on `root`. */
42360         var freeParseInt = parseInt;
42361
42362         /**
42363          * Converts `value` to a number.
42364          *
42365          * @static
42366          * @memberOf _
42367          * @since 4.0.0
42368          * @category Lang
42369          * @param {*} value The value to process.
42370          * @returns {number} Returns the number.
42371          * @example
42372          *
42373          * _.toNumber(3.2);
42374          * // => 3.2
42375          *
42376          * _.toNumber(Number.MIN_VALUE);
42377          * // => 5e-324
42378          *
42379          * _.toNumber(Infinity);
42380          * // => Infinity
42381          *
42382          * _.toNumber('3.2');
42383          * // => 3.2
42384          */
42385         function toNumber(value) {
42386           if (typeof value == 'number') {
42387             return value;
42388           }
42389           if (isSymbol$2(value)) {
42390             return NAN;
42391           }
42392           if (isObject$1(value)) {
42393             var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
42394             value = isObject$1(other) ? (other + '') : other;
42395           }
42396           if (typeof value != 'string') {
42397             return value === 0 ? value : +value;
42398           }
42399           value = value.replace(reTrim, '');
42400           var isBinary = reIsBinary.test(value);
42401           return (isBinary || reIsOctal.test(value))
42402             ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
42403             : (reIsBadHex.test(value) ? NAN : +value);
42404         }
42405
42406         /** Error message constants. */
42407         var FUNC_ERROR_TEXT = 'Expected a function';
42408
42409         /* Built-in method references for those with the same name as other `lodash` methods. */
42410         var nativeMax = Math.max,
42411             nativeMin = Math.min;
42412
42413         /**
42414          * Creates a debounced function that delays invoking `func` until after `wait`
42415          * milliseconds have elapsed since the last time the debounced function was
42416          * invoked. The debounced function comes with a `cancel` method to cancel
42417          * delayed `func` invocations and a `flush` method to immediately invoke them.
42418          * Provide `options` to indicate whether `func` should be invoked on the
42419          * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
42420          * with the last arguments provided to the debounced function. Subsequent
42421          * calls to the debounced function return the result of the last `func`
42422          * invocation.
42423          *
42424          * **Note:** If `leading` and `trailing` options are `true`, `func` is
42425          * invoked on the trailing edge of the timeout only if the debounced function
42426          * is invoked more than once during the `wait` timeout.
42427          *
42428          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42429          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42430          *
42431          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42432          * for details over the differences between `_.debounce` and `_.throttle`.
42433          *
42434          * @static
42435          * @memberOf _
42436          * @since 0.1.0
42437          * @category Function
42438          * @param {Function} func The function to debounce.
42439          * @param {number} [wait=0] The number of milliseconds to delay.
42440          * @param {Object} [options={}] The options object.
42441          * @param {boolean} [options.leading=false]
42442          *  Specify invoking on the leading edge of the timeout.
42443          * @param {number} [options.maxWait]
42444          *  The maximum time `func` is allowed to be delayed before it's invoked.
42445          * @param {boolean} [options.trailing=true]
42446          *  Specify invoking on the trailing edge of the timeout.
42447          * @returns {Function} Returns the new debounced function.
42448          * @example
42449          *
42450          * // Avoid costly calculations while the window size is in flux.
42451          * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
42452          *
42453          * // Invoke `sendMail` when clicked, debouncing subsequent calls.
42454          * jQuery(element).on('click', _.debounce(sendMail, 300, {
42455          *   'leading': true,
42456          *   'trailing': false
42457          * }));
42458          *
42459          * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
42460          * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
42461          * var source = new EventSource('/stream');
42462          * jQuery(source).on('message', debounced);
42463          *
42464          * // Cancel the trailing debounced invocation.
42465          * jQuery(window).on('popstate', debounced.cancel);
42466          */
42467         function debounce(func, wait, options) {
42468           var lastArgs,
42469               lastThis,
42470               maxWait,
42471               result,
42472               timerId,
42473               lastCallTime,
42474               lastInvokeTime = 0,
42475               leading = false,
42476               maxing = false,
42477               trailing = true;
42478
42479           if (typeof func != 'function') {
42480             throw new TypeError(FUNC_ERROR_TEXT);
42481           }
42482           wait = toNumber(wait) || 0;
42483           if (isObject$1(options)) {
42484             leading = !!options.leading;
42485             maxing = 'maxWait' in options;
42486             maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
42487             trailing = 'trailing' in options ? !!options.trailing : trailing;
42488           }
42489
42490           function invokeFunc(time) {
42491             var args = lastArgs,
42492                 thisArg = lastThis;
42493
42494             lastArgs = lastThis = undefined;
42495             lastInvokeTime = time;
42496             result = func.apply(thisArg, args);
42497             return result;
42498           }
42499
42500           function leadingEdge(time) {
42501             // Reset any `maxWait` timer.
42502             lastInvokeTime = time;
42503             // Start the timer for the trailing edge.
42504             timerId = setTimeout(timerExpired, wait);
42505             // Invoke the leading edge.
42506             return leading ? invokeFunc(time) : result;
42507           }
42508
42509           function remainingWait(time) {
42510             var timeSinceLastCall = time - lastCallTime,
42511                 timeSinceLastInvoke = time - lastInvokeTime,
42512                 timeWaiting = wait - timeSinceLastCall;
42513
42514             return maxing
42515               ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
42516               : timeWaiting;
42517           }
42518
42519           function shouldInvoke(time) {
42520             var timeSinceLastCall = time - lastCallTime,
42521                 timeSinceLastInvoke = time - lastInvokeTime;
42522
42523             // Either this is the first call, activity has stopped and we're at the
42524             // trailing edge, the system time has gone backwards and we're treating
42525             // it as the trailing edge, or we've hit the `maxWait` limit.
42526             return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
42527               (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
42528           }
42529
42530           function timerExpired() {
42531             var time = now$1();
42532             if (shouldInvoke(time)) {
42533               return trailingEdge(time);
42534             }
42535             // Restart the timer.
42536             timerId = setTimeout(timerExpired, remainingWait(time));
42537           }
42538
42539           function trailingEdge(time) {
42540             timerId = undefined;
42541
42542             // Only invoke if we have `lastArgs` which means `func` has been
42543             // debounced at least once.
42544             if (trailing && lastArgs) {
42545               return invokeFunc(time);
42546             }
42547             lastArgs = lastThis = undefined;
42548             return result;
42549           }
42550
42551           function cancel() {
42552             if (timerId !== undefined) {
42553               clearTimeout(timerId);
42554             }
42555             lastInvokeTime = 0;
42556             lastArgs = lastCallTime = lastThis = timerId = undefined;
42557           }
42558
42559           function flush() {
42560             return timerId === undefined ? result : trailingEdge(now$1());
42561           }
42562
42563           function debounced() {
42564             var time = now$1(),
42565                 isInvoking = shouldInvoke(time);
42566
42567             lastArgs = arguments;
42568             lastThis = this;
42569             lastCallTime = time;
42570
42571             if (isInvoking) {
42572               if (timerId === undefined) {
42573                 return leadingEdge(lastCallTime);
42574               }
42575               if (maxing) {
42576                 // Handle invocations in a tight loop.
42577                 clearTimeout(timerId);
42578                 timerId = setTimeout(timerExpired, wait);
42579                 return invokeFunc(lastCallTime);
42580               }
42581             }
42582             if (timerId === undefined) {
42583               timerId = setTimeout(timerExpired, wait);
42584             }
42585             return result;
42586           }
42587           debounced.cancel = cancel;
42588           debounced.flush = flush;
42589           return debounced;
42590         }
42591
42592         /** Error message constants. */
42593         var FUNC_ERROR_TEXT$1 = 'Expected a function';
42594
42595         /**
42596          * Creates a throttled function that only invokes `func` at most once per
42597          * every `wait` milliseconds. The throttled function comes with a `cancel`
42598          * method to cancel delayed `func` invocations and a `flush` method to
42599          * immediately invoke them. Provide `options` to indicate whether `func`
42600          * should be invoked on the leading and/or trailing edge of the `wait`
42601          * timeout. The `func` is invoked with the last arguments provided to the
42602          * throttled function. Subsequent calls to the throttled function return the
42603          * result of the last `func` invocation.
42604          *
42605          * **Note:** If `leading` and `trailing` options are `true`, `func` is
42606          * invoked on the trailing edge of the timeout only if the throttled function
42607          * is invoked more than once during the `wait` timeout.
42608          *
42609          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
42610          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
42611          *
42612          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
42613          * for details over the differences between `_.throttle` and `_.debounce`.
42614          *
42615          * @static
42616          * @memberOf _
42617          * @since 0.1.0
42618          * @category Function
42619          * @param {Function} func The function to throttle.
42620          * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
42621          * @param {Object} [options={}] The options object.
42622          * @param {boolean} [options.leading=true]
42623          *  Specify invoking on the leading edge of the timeout.
42624          * @param {boolean} [options.trailing=true]
42625          *  Specify invoking on the trailing edge of the timeout.
42626          * @returns {Function} Returns the new throttled function.
42627          * @example
42628          *
42629          * // Avoid excessively updating the position while scrolling.
42630          * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
42631          *
42632          * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
42633          * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
42634          * jQuery(element).on('click', throttled);
42635          *
42636          * // Cancel the trailing throttled invocation.
42637          * jQuery(window).on('popstate', throttled.cancel);
42638          */
42639         function throttle(func, wait, options) {
42640           var leading = true,
42641               trailing = true;
42642
42643           if (typeof func != 'function') {
42644             throw new TypeError(FUNC_ERROR_TEXT$1);
42645           }
42646           if (isObject$1(options)) {
42647             leading = 'leading' in options ? !!options.leading : leading;
42648             trailing = 'trailing' in options ? !!options.trailing : trailing;
42649           }
42650           return debounce(func, wait, {
42651             'leading': leading,
42652             'maxWait': wait,
42653             'trailing': trailing
42654           });
42655         }
42656
42657         var hashes = createCommonjsModule(function (module, exports) {
42658         /**
42659          * jshashes - https://github.com/h2non/jshashes
42660          * Released under the "New BSD" license
42661          *
42662          * Algorithms specification:
42663          *
42664          * MD5 - http://www.ietf.org/rfc/rfc1321.txt
42665          * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
42666          * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42667          * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42668          * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
42669          * HMAC - http://www.ietf.org/rfc/rfc2104.txt
42670          */
42671         (function() {
42672           var Hashes;
42673
42674           function utf8Encode(str) {
42675             var x, y, output = '',
42676               i = -1,
42677               l;
42678
42679             if (str && str.length) {
42680               l = str.length;
42681               while ((i += 1) < l) {
42682                 /* Decode utf-16 surrogate pairs */
42683                 x = str.charCodeAt(i);
42684                 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
42685                 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
42686                   x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
42687                   i += 1;
42688                 }
42689                 /* Encode output as utf-8 */
42690                 if (x <= 0x7F) {
42691                   output += String.fromCharCode(x);
42692                 } else if (x <= 0x7FF) {
42693                   output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
42694                     0x80 | (x & 0x3F));
42695                 } else if (x <= 0xFFFF) {
42696                   output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
42697                     0x80 | ((x >>> 6) & 0x3F),
42698                     0x80 | (x & 0x3F));
42699                 } else if (x <= 0x1FFFFF) {
42700                   output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
42701                     0x80 | ((x >>> 12) & 0x3F),
42702                     0x80 | ((x >>> 6) & 0x3F),
42703                     0x80 | (x & 0x3F));
42704                 }
42705               }
42706             }
42707             return output;
42708           }
42709
42710           function utf8Decode(str) {
42711             var i, ac, c1, c2, c3, arr = [],
42712               l;
42713             i = ac = c1 = c2 = c3 = 0;
42714
42715             if (str && str.length) {
42716               l = str.length;
42717               str += '';
42718
42719               while (i < l) {
42720                 c1 = str.charCodeAt(i);
42721                 ac += 1;
42722                 if (c1 < 128) {
42723                   arr[ac] = String.fromCharCode(c1);
42724                   i += 1;
42725                 } else if (c1 > 191 && c1 < 224) {
42726                   c2 = str.charCodeAt(i + 1);
42727                   arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
42728                   i += 2;
42729                 } else {
42730                   c2 = str.charCodeAt(i + 1);
42731                   c3 = str.charCodeAt(i + 2);
42732                   arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
42733                   i += 3;
42734                 }
42735               }
42736             }
42737             return arr.join('');
42738           }
42739
42740           /**
42741            * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42742            * to work around bugs in some JS interpreters.
42743            */
42744
42745           function safe_add(x, y) {
42746             var lsw = (x & 0xFFFF) + (y & 0xFFFF),
42747               msw = (x >> 16) + (y >> 16) + (lsw >> 16);
42748             return (msw << 16) | (lsw & 0xFFFF);
42749           }
42750
42751           /**
42752            * Bitwise rotate a 32-bit number to the left.
42753            */
42754
42755           function bit_rol(num, cnt) {
42756             return (num << cnt) | (num >>> (32 - cnt));
42757           }
42758
42759           /**
42760            * Convert a raw string to a hex string
42761            */
42762
42763           function rstr2hex(input, hexcase) {
42764             var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
42765               output = '',
42766               x, i = 0,
42767               l = input.length;
42768             for (; i < l; i += 1) {
42769               x = input.charCodeAt(i);
42770               output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
42771             }
42772             return output;
42773           }
42774
42775           /**
42776            * Convert an array of big-endian words to a string
42777            */
42778
42779           function binb2rstr(input) {
42780             var i, l = input.length * 32,
42781               output = '';
42782             for (i = 0; i < l; i += 8) {
42783               output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
42784             }
42785             return output;
42786           }
42787
42788           /**
42789            * Convert an array of little-endian words to a string
42790            */
42791
42792           function binl2rstr(input) {
42793             var i, l = input.length * 32,
42794               output = '';
42795             for (i = 0; i < l; i += 8) {
42796               output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
42797             }
42798             return output;
42799           }
42800
42801           /**
42802            * Convert a raw string to an array of little-endian words
42803            * Characters >255 have their high-byte silently ignored.
42804            */
42805
42806           function rstr2binl(input) {
42807             var i, l = input.length * 8,
42808               output = Array(input.length >> 2),
42809               lo = output.length;
42810             for (i = 0; i < lo; i += 1) {
42811               output[i] = 0;
42812             }
42813             for (i = 0; i < l; i += 8) {
42814               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
42815             }
42816             return output;
42817           }
42818
42819           /**
42820            * Convert a raw string to an array of big-endian words
42821            * Characters >255 have their high-byte silently ignored.
42822            */
42823
42824           function rstr2binb(input) {
42825             var i, l = input.length * 8,
42826               output = Array(input.length >> 2),
42827               lo = output.length;
42828             for (i = 0; i < lo; i += 1) {
42829               output[i] = 0;
42830             }
42831             for (i = 0; i < l; i += 8) {
42832               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
42833             }
42834             return output;
42835           }
42836
42837           /**
42838            * Convert a raw string to an arbitrary string encoding
42839            */
42840
42841           function rstr2any(input, encoding) {
42842             var divisor = encoding.length,
42843               remainders = Array(),
42844               i, q, x, ld, quotient, dividend, output, full_length;
42845
42846             /* Convert to an array of 16-bit big-endian values, forming the dividend */
42847             dividend = Array(Math.ceil(input.length / 2));
42848             ld = dividend.length;
42849             for (i = 0; i < ld; i += 1) {
42850               dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
42851             }
42852
42853             /**
42854              * Repeatedly perform a long division. The binary array forms the dividend,
42855              * the length of the encoding is the divisor. Once computed, the quotient
42856              * forms the dividend for the next step. We stop when the dividend is zerHashes.
42857              * All remainders are stored for later use.
42858              */
42859             while (dividend.length > 0) {
42860               quotient = Array();
42861               x = 0;
42862               for (i = 0; i < dividend.length; i += 1) {
42863                 x = (x << 16) + dividend[i];
42864                 q = Math.floor(x / divisor);
42865                 x -= q * divisor;
42866                 if (quotient.length > 0 || q > 0) {
42867                   quotient[quotient.length] = q;
42868                 }
42869               }
42870               remainders[remainders.length] = x;
42871               dividend = quotient;
42872             }
42873
42874             /* Convert the remainders to the output string */
42875             output = '';
42876             for (i = remainders.length - 1; i >= 0; i--) {
42877               output += encoding.charAt(remainders[i]);
42878             }
42879
42880             /* Append leading zero equivalents */
42881             full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
42882             for (i = output.length; i < full_length; i += 1) {
42883               output = encoding[0] + output;
42884             }
42885             return output;
42886           }
42887
42888           /**
42889            * Convert a raw string to a base-64 string
42890            */
42891
42892           function rstr2b64(input, b64pad) {
42893             var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42894               output = '',
42895               len = input.length,
42896               i, j, triplet;
42897             b64pad = b64pad || '=';
42898             for (i = 0; i < len; i += 3) {
42899               triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42900               for (j = 0; j < 4; j += 1) {
42901                 if (i * 8 + j * 6 > input.length * 8) {
42902                   output += b64pad;
42903                 } else {
42904                   output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42905                 }
42906               }
42907             }
42908             return output;
42909           }
42910
42911           Hashes = {
42912             /**
42913              * @property {String} version
42914              * @readonly
42915              */
42916             VERSION: '1.0.6',
42917             /**
42918              * @member Hashes
42919              * @class Base64
42920              * @constructor
42921              */
42922             Base64: function() {
42923               // private properties
42924               var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
42925                 pad = '=', // default pad according with the RFC standard
42926                 utf8 = true; // by default enable UTF-8 support encoding
42927
42928               // public method for encoding
42929               this.encode = function(input) {
42930                 var i, j, triplet,
42931                   output = '',
42932                   len = input.length;
42933
42934                 pad = pad || '=';
42935                 input = (utf8) ? utf8Encode(input) : input;
42936
42937                 for (i = 0; i < len; i += 3) {
42938                   triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
42939                   for (j = 0; j < 4; j += 1) {
42940                     if (i * 8 + j * 6 > len * 8) {
42941                       output += pad;
42942                     } else {
42943                       output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
42944                     }
42945                   }
42946                 }
42947                 return output;
42948               };
42949
42950               // public method for decoding
42951               this.decode = function(input) {
42952                 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
42953                 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
42954                   dec = '',
42955                   arr = [];
42956                 if (!input) {
42957                   return input;
42958                 }
42959
42960                 i = ac = 0;
42961                 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
42962                 //input += '';
42963
42964                 do { // unpack four hexets into three octets using index points in b64
42965                   h1 = tab.indexOf(input.charAt(i += 1));
42966                   h2 = tab.indexOf(input.charAt(i += 1));
42967                   h3 = tab.indexOf(input.charAt(i += 1));
42968                   h4 = tab.indexOf(input.charAt(i += 1));
42969
42970                   bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
42971
42972                   o1 = bits >> 16 & 0xff;
42973                   o2 = bits >> 8 & 0xff;
42974                   o3 = bits & 0xff;
42975                   ac += 1;
42976
42977                   if (h3 === 64) {
42978                     arr[ac] = String.fromCharCode(o1);
42979                   } else if (h4 === 64) {
42980                     arr[ac] = String.fromCharCode(o1, o2);
42981                   } else {
42982                     arr[ac] = String.fromCharCode(o1, o2, o3);
42983                   }
42984                 } while (i < input.length);
42985
42986                 dec = arr.join('');
42987                 dec = (utf8) ? utf8Decode(dec) : dec;
42988
42989                 return dec;
42990               };
42991
42992               // set custom pad string
42993               this.setPad = function(str) {
42994                 pad = str || pad;
42995                 return this;
42996               };
42997               // set custom tab string characters
42998               this.setTab = function(str) {
42999                 tab = str || tab;
43000                 return this;
43001               };
43002               this.setUTF8 = function(bool) {
43003                 if (typeof bool === 'boolean') {
43004                   utf8 = bool;
43005                 }
43006                 return this;
43007               };
43008             },
43009
43010             /**
43011              * CRC-32 calculation
43012              * @member Hashes
43013              * @method CRC32
43014              * @static
43015              * @param {String} str Input String
43016              * @return {String}
43017              */
43018             CRC32: function(str) {
43019               var crc = 0,
43020                 x = 0,
43021                 y = 0,
43022                 table, i, iTop;
43023               str = utf8Encode(str);
43024
43025               table = [
43026                 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
43027                 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
43028                 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
43029                 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
43030                 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
43031                 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
43032                 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
43033                 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
43034                 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
43035                 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
43036                 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
43037                 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
43038                 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
43039                 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
43040                 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
43041                 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
43042                 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
43043                 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
43044                 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
43045                 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
43046                 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
43047                 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
43048                 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
43049                 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
43050                 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
43051                 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
43052               ].join('');
43053
43054               crc = crc ^ (-1);
43055               for (i = 0, iTop = str.length; i < iTop; i += 1) {
43056                 y = (crc ^ str.charCodeAt(i)) & 0xFF;
43057                 x = '0x' + table.substr(y * 9, 8);
43058                 crc = (crc >>> 8) ^ x;
43059               }
43060               // always return a positive number (that's what >>> 0 does)
43061               return (crc ^ (-1)) >>> 0;
43062             },
43063             /**
43064              * @member Hashes
43065              * @class MD5
43066              * @constructor
43067              * @param {Object} [config]
43068              *
43069              * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
43070              * Digest Algorithm, as defined in RFC 1321.
43071              * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
43072              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43073              * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
43074              */
43075             MD5: function(options) {
43076               /**
43077                * Private config properties. You may need to tweak these to be compatible with
43078                * the server-side, but the defaults work in most cases.
43079                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
43080                */
43081               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
43082                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
43083                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
43084
43085               // privileged (public) methods
43086               this.hex = function(s) {
43087                 return rstr2hex(rstr(s), hexcase);
43088               };
43089               this.b64 = function(s) {
43090                 return rstr2b64(rstr(s), b64pad);
43091               };
43092               this.any = function(s, e) {
43093                 return rstr2any(rstr(s), e);
43094               };
43095               this.raw = function(s) {
43096                 return rstr(s);
43097               };
43098               this.hex_hmac = function(k, d) {
43099                 return rstr2hex(rstr_hmac(k, d), hexcase);
43100               };
43101               this.b64_hmac = function(k, d) {
43102                 return rstr2b64(rstr_hmac(k, d), b64pad);
43103               };
43104               this.any_hmac = function(k, d, e) {
43105                 return rstr2any(rstr_hmac(k, d), e);
43106               };
43107               /**
43108                * Perform a simple self-test to see if the VM is working
43109                * @return {String} Hexadecimal hash sample
43110                */
43111               this.vm_test = function() {
43112                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43113               };
43114               /**
43115                * Enable/disable uppercase hexadecimal returned string
43116                * @param {Boolean}
43117                * @return {Object} this
43118                */
43119               this.setUpperCase = function(a) {
43120                 if (typeof a === 'boolean') {
43121                   hexcase = a;
43122                 }
43123                 return this;
43124               };
43125               /**
43126                * Defines a base64 pad string
43127                * @param {String} Pad
43128                * @return {Object} this
43129                */
43130               this.setPad = function(a) {
43131                 b64pad = a || b64pad;
43132                 return this;
43133               };
43134               /**
43135                * Defines a base64 pad string
43136                * @param {Boolean}
43137                * @return {Object} [this]
43138                */
43139               this.setUTF8 = function(a) {
43140                 if (typeof a === 'boolean') {
43141                   utf8 = a;
43142                 }
43143                 return this;
43144               };
43145
43146               // private methods
43147
43148               /**
43149                * Calculate the MD5 of a raw string
43150                */
43151
43152               function rstr(s) {
43153                 s = (utf8) ? utf8Encode(s) : s;
43154                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
43155               }
43156
43157               /**
43158                * Calculate the HMAC-MD5, of a key and some data (raw strings)
43159                */
43160
43161               function rstr_hmac(key, data) {
43162                 var bkey, ipad, opad, hash, i;
43163
43164                 key = (utf8) ? utf8Encode(key) : key;
43165                 data = (utf8) ? utf8Encode(data) : data;
43166                 bkey = rstr2binl(key);
43167                 if (bkey.length > 16) {
43168                   bkey = binl(bkey, key.length * 8);
43169                 }
43170
43171                 ipad = Array(16), opad = Array(16);
43172                 for (i = 0; i < 16; i += 1) {
43173                   ipad[i] = bkey[i] ^ 0x36363636;
43174                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43175                 }
43176                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
43177                 return binl2rstr(binl(opad.concat(hash), 512 + 128));
43178               }
43179
43180               /**
43181                * Calculate the MD5 of an array of little-endian words, and a bit length.
43182                */
43183
43184               function binl(x, len) {
43185                 var i, olda, oldb, oldc, oldd,
43186                   a = 1732584193,
43187                   b = -271733879,
43188                   c = -1732584194,
43189                   d = 271733878;
43190
43191                 /* append padding */
43192                 x[len >> 5] |= 0x80 << ((len) % 32);
43193                 x[(((len + 64) >>> 9) << 4) + 14] = len;
43194
43195                 for (i = 0; i < x.length; i += 16) {
43196                   olda = a;
43197                   oldb = b;
43198                   oldc = c;
43199                   oldd = d;
43200
43201                   a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
43202                   d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
43203                   c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
43204                   b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
43205                   a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
43206                   d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
43207                   c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
43208                   b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
43209                   a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
43210                   d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
43211                   c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
43212                   b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
43213                   a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
43214                   d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
43215                   c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
43216                   b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
43217
43218                   a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
43219                   d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
43220                   c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
43221                   b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
43222                   a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
43223                   d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
43224                   c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
43225                   b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
43226                   a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
43227                   d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
43228                   c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
43229                   b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
43230                   a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
43231                   d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
43232                   c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
43233                   b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
43234
43235                   a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
43236                   d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
43237                   c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
43238                   b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
43239                   a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
43240                   d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
43241                   c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
43242                   b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
43243                   a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
43244                   d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
43245                   c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
43246                   b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
43247                   a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
43248                   d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
43249                   c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
43250                   b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
43251
43252                   a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
43253                   d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
43254                   c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
43255                   b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
43256                   a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
43257                   d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
43258                   c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
43259                   b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
43260                   a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
43261                   d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
43262                   c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
43263                   b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
43264                   a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
43265                   d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
43266                   c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
43267                   b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
43268
43269                   a = safe_add(a, olda);
43270                   b = safe_add(b, oldb);
43271                   c = safe_add(c, oldc);
43272                   d = safe_add(d, oldd);
43273                 }
43274                 return Array(a, b, c, d);
43275               }
43276
43277               /**
43278                * These functions implement the four basic operations the algorithm uses.
43279                */
43280
43281               function md5_cmn(q, a, b, x, s, t) {
43282                 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
43283               }
43284
43285               function md5_ff(a, b, c, d, x, s, t) {
43286                 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
43287               }
43288
43289               function md5_gg(a, b, c, d, x, s, t) {
43290                 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
43291               }
43292
43293               function md5_hh(a, b, c, d, x, s, t) {
43294                 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
43295               }
43296
43297               function md5_ii(a, b, c, d, x, s, t) {
43298                 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
43299               }
43300             },
43301             /**
43302              * @member Hashes
43303              * @class Hashes.SHA1
43304              * @param {Object} [config]
43305              * @constructor
43306              *
43307              * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
43308              * Version 2.2 Copyright Paul Johnston 2000 - 2009.
43309              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43310              * See http://pajhome.org.uk/crypt/md5 for details.
43311              */
43312             SHA1: function(options) {
43313               /**
43314                * Private config properties. You may need to tweak these to be compatible with
43315                * the server-side, but the defaults work in most cases.
43316                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
43317                */
43318               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
43319                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
43320                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
43321
43322               // public methods
43323               this.hex = function(s) {
43324                 return rstr2hex(rstr(s), hexcase);
43325               };
43326               this.b64 = function(s) {
43327                 return rstr2b64(rstr(s), b64pad);
43328               };
43329               this.any = function(s, e) {
43330                 return rstr2any(rstr(s), e);
43331               };
43332               this.raw = function(s) {
43333                 return rstr(s);
43334               };
43335               this.hex_hmac = function(k, d) {
43336                 return rstr2hex(rstr_hmac(k, d));
43337               };
43338               this.b64_hmac = function(k, d) {
43339                 return rstr2b64(rstr_hmac(k, d), b64pad);
43340               };
43341               this.any_hmac = function(k, d, e) {
43342                 return rstr2any(rstr_hmac(k, d), e);
43343               };
43344               /**
43345                * Perform a simple self-test to see if the VM is working
43346                * @return {String} Hexadecimal hash sample
43347                * @public
43348                */
43349               this.vm_test = function() {
43350                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43351               };
43352               /**
43353                * @description Enable/disable uppercase hexadecimal returned string
43354                * @param {boolean}
43355                * @return {Object} this
43356                * @public
43357                */
43358               this.setUpperCase = function(a) {
43359                 if (typeof a === 'boolean') {
43360                   hexcase = a;
43361                 }
43362                 return this;
43363               };
43364               /**
43365                * @description Defines a base64 pad string
43366                * @param {string} Pad
43367                * @return {Object} this
43368                * @public
43369                */
43370               this.setPad = function(a) {
43371                 b64pad = a || b64pad;
43372                 return this;
43373               };
43374               /**
43375                * @description Defines a base64 pad string
43376                * @param {boolean}
43377                * @return {Object} this
43378                * @public
43379                */
43380               this.setUTF8 = function(a) {
43381                 if (typeof a === 'boolean') {
43382                   utf8 = a;
43383                 }
43384                 return this;
43385               };
43386
43387               // private methods
43388
43389               /**
43390                * Calculate the SHA-512 of a raw string
43391                */
43392
43393               function rstr(s) {
43394                 s = (utf8) ? utf8Encode(s) : s;
43395                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43396               }
43397
43398               /**
43399                * Calculate the HMAC-SHA1 of a key and some data (raw strings)
43400                */
43401
43402               function rstr_hmac(key, data) {
43403                 var bkey, ipad, opad, i, hash;
43404                 key = (utf8) ? utf8Encode(key) : key;
43405                 data = (utf8) ? utf8Encode(data) : data;
43406                 bkey = rstr2binb(key);
43407
43408                 if (bkey.length > 16) {
43409                   bkey = binb(bkey, key.length * 8);
43410                 }
43411                 ipad = Array(16), opad = Array(16);
43412                 for (i = 0; i < 16; i += 1) {
43413                   ipad[i] = bkey[i] ^ 0x36363636;
43414                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43415                 }
43416                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43417                 return binb2rstr(binb(opad.concat(hash), 512 + 160));
43418               }
43419
43420               /**
43421                * Calculate the SHA-1 of an array of big-endian words, and a bit length
43422                */
43423
43424               function binb(x, len) {
43425                 var i, j, t, olda, oldb, oldc, oldd, olde,
43426                   w = Array(80),
43427                   a = 1732584193,
43428                   b = -271733879,
43429                   c = -1732584194,
43430                   d = 271733878,
43431                   e = -1009589776;
43432
43433                 /* append padding */
43434                 x[len >> 5] |= 0x80 << (24 - len % 32);
43435                 x[((len + 64 >> 9) << 4) + 15] = len;
43436
43437                 for (i = 0; i < x.length; i += 16) {
43438                   olda = a;
43439                   oldb = b;
43440                   oldc = c;
43441                   oldd = d;
43442                   olde = e;
43443
43444                   for (j = 0; j < 80; j += 1) {
43445                     if (j < 16) {
43446                       w[j] = x[i + j];
43447                     } else {
43448                       w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
43449                     }
43450                     t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
43451                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
43452                     e = d;
43453                     d = c;
43454                     c = bit_rol(b, 30);
43455                     b = a;
43456                     a = t;
43457                   }
43458
43459                   a = safe_add(a, olda);
43460                   b = safe_add(b, oldb);
43461                   c = safe_add(c, oldc);
43462                   d = safe_add(d, oldd);
43463                   e = safe_add(e, olde);
43464                 }
43465                 return Array(a, b, c, d, e);
43466               }
43467
43468               /**
43469                * Perform the appropriate triplet combination function for the current
43470                * iteration
43471                */
43472
43473               function sha1_ft(t, b, c, d) {
43474                 if (t < 20) {
43475                   return (b & c) | ((~b) & d);
43476                 }
43477                 if (t < 40) {
43478                   return b ^ c ^ d;
43479                 }
43480                 if (t < 60) {
43481                   return (b & c) | (b & d) | (c & d);
43482                 }
43483                 return b ^ c ^ d;
43484               }
43485
43486               /**
43487                * Determine the appropriate additive constant for the current iteration
43488                */
43489
43490               function sha1_kt(t) {
43491                 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
43492                   (t < 60) ? -1894007588 : -899497514;
43493               }
43494             },
43495             /**
43496              * @class Hashes.SHA256
43497              * @param {config}
43498              *
43499              * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
43500              * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
43501              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43502              * See http://pajhome.org.uk/crypt/md5 for details.
43503              * Also http://anmar.eu.org/projects/jssha2/
43504              */
43505             SHA256: function(options) {
43506               /**
43507                * Private properties configuration variables. You may need to tweak these to be compatible with
43508                * the server-side, but the defaults work in most cases.
43509                * @see this.setUpperCase() method
43510                * @see this.setPad() method
43511                */
43512               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
43513                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43514                 /* base-64 pad character. Default '=' for strict RFC compliance   */
43515                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43516                 /* enable/disable utf8 encoding */
43517                 sha256_K;
43518
43519               /* privileged (public) methods */
43520               this.hex = function(s) {
43521                 return rstr2hex(rstr(s, utf8));
43522               };
43523               this.b64 = function(s) {
43524                 return rstr2b64(rstr(s, utf8), b64pad);
43525               };
43526               this.any = function(s, e) {
43527                 return rstr2any(rstr(s, utf8), e);
43528               };
43529               this.raw = function(s) {
43530                 return rstr(s, utf8);
43531               };
43532               this.hex_hmac = function(k, d) {
43533                 return rstr2hex(rstr_hmac(k, d));
43534               };
43535               this.b64_hmac = function(k, d) {
43536                 return rstr2b64(rstr_hmac(k, d), b64pad);
43537               };
43538               this.any_hmac = function(k, d, e) {
43539                 return rstr2any(rstr_hmac(k, d), e);
43540               };
43541               /**
43542                * Perform a simple self-test to see if the VM is working
43543                * @return {String} Hexadecimal hash sample
43544                * @public
43545                */
43546               this.vm_test = function() {
43547                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43548               };
43549               /**
43550                * Enable/disable uppercase hexadecimal returned string
43551                * @param {boolean}
43552                * @return {Object} this
43553                * @public
43554                */
43555               this.setUpperCase = function(a) {
43556                 if (typeof a === 'boolean') {
43557                   hexcase = a;
43558                 }
43559                 return this;
43560               };
43561               /**
43562                * @description Defines a base64 pad string
43563                * @param {string} Pad
43564                * @return {Object} this
43565                * @public
43566                */
43567               this.setPad = function(a) {
43568                 b64pad = a || b64pad;
43569                 return this;
43570               };
43571               /**
43572                * Defines a base64 pad string
43573                * @param {boolean}
43574                * @return {Object} this
43575                * @public
43576                */
43577               this.setUTF8 = function(a) {
43578                 if (typeof a === 'boolean') {
43579                   utf8 = a;
43580                 }
43581                 return this;
43582               };
43583
43584               // private methods
43585
43586               /**
43587                * Calculate the SHA-512 of a raw string
43588                */
43589
43590               function rstr(s, utf8) {
43591                 s = (utf8) ? utf8Encode(s) : s;
43592                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43593               }
43594
43595               /**
43596                * Calculate the HMAC-sha256 of a key and some data (raw strings)
43597                */
43598
43599               function rstr_hmac(key, data) {
43600                 key = (utf8) ? utf8Encode(key) : key;
43601                 data = (utf8) ? utf8Encode(data) : data;
43602                 var hash, i = 0,
43603                   bkey = rstr2binb(key),
43604                   ipad = Array(16),
43605                   opad = Array(16);
43606
43607                 if (bkey.length > 16) {
43608                   bkey = binb(bkey, key.length * 8);
43609                 }
43610
43611                 for (; i < 16; i += 1) {
43612                   ipad[i] = bkey[i] ^ 0x36363636;
43613                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43614                 }
43615
43616                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
43617                 return binb2rstr(binb(opad.concat(hash), 512 + 256));
43618               }
43619
43620               /*
43621                * Main sha256 function, with its support functions
43622                */
43623
43624               function sha256_S(X, n) {
43625                 return (X >>> n) | (X << (32 - n));
43626               }
43627
43628               function sha256_R(X, n) {
43629                 return (X >>> n);
43630               }
43631
43632               function sha256_Ch(x, y, z) {
43633                 return ((x & y) ^ ((~x) & z));
43634               }
43635
43636               function sha256_Maj(x, y, z) {
43637                 return ((x & y) ^ (x & z) ^ (y & z));
43638               }
43639
43640               function sha256_Sigma0256(x) {
43641                 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
43642               }
43643
43644               function sha256_Sigma1256(x) {
43645                 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
43646               }
43647
43648               function sha256_Gamma0256(x) {
43649                 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
43650               }
43651
43652               function sha256_Gamma1256(x) {
43653                 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
43654               }
43655
43656               sha256_K = [
43657                 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
43658                 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
43659                 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
43660                 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
43661                 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
43662                 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
43663                 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
43664               ];
43665
43666               function binb(m, l) {
43667                 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
43668                   1359893119, -1694144372, 528734635, 1541459225
43669                 ];
43670                 var W = new Array(64);
43671                 var a, b, c, d, e, f, g, h;
43672                 var i, j, T1, T2;
43673
43674                 /* append padding */
43675                 m[l >> 5] |= 0x80 << (24 - l % 32);
43676                 m[((l + 64 >> 9) << 4) + 15] = l;
43677
43678                 for (i = 0; i < m.length; i += 16) {
43679                   a = HASH[0];
43680                   b = HASH[1];
43681                   c = HASH[2];
43682                   d = HASH[3];
43683                   e = HASH[4];
43684                   f = HASH[5];
43685                   g = HASH[6];
43686                   h = HASH[7];
43687
43688                   for (j = 0; j < 64; j += 1) {
43689                     if (j < 16) {
43690                       W[j] = m[j + i];
43691                     } else {
43692                       W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
43693                         sha256_Gamma0256(W[j - 15])), W[j - 16]);
43694                     }
43695
43696                     T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
43697                       sha256_K[j]), W[j]);
43698                     T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
43699                     h = g;
43700                     g = f;
43701                     f = e;
43702                     e = safe_add(d, T1);
43703                     d = c;
43704                     c = b;
43705                     b = a;
43706                     a = safe_add(T1, T2);
43707                   }
43708
43709                   HASH[0] = safe_add(a, HASH[0]);
43710                   HASH[1] = safe_add(b, HASH[1]);
43711                   HASH[2] = safe_add(c, HASH[2]);
43712                   HASH[3] = safe_add(d, HASH[3]);
43713                   HASH[4] = safe_add(e, HASH[4]);
43714                   HASH[5] = safe_add(f, HASH[5]);
43715                   HASH[6] = safe_add(g, HASH[6]);
43716                   HASH[7] = safe_add(h, HASH[7]);
43717                 }
43718                 return HASH;
43719               }
43720
43721             },
43722
43723             /**
43724              * @class Hashes.SHA512
43725              * @param {config}
43726              *
43727              * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
43728              * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
43729              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
43730              * See http://pajhome.org.uk/crypt/md5 for details.
43731              */
43732             SHA512: function(options) {
43733               /**
43734                * Private properties configuration variables. You may need to tweak these to be compatible with
43735                * the server-side, but the defaults work in most cases.
43736                * @see this.setUpperCase() method
43737                * @see this.setPad() method
43738                */
43739               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
43740                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
43741                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
43742                 /* base-64 pad character. Default '=' for strict RFC compliance   */
43743                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
43744                 /* enable/disable utf8 encoding */
43745                 sha512_k;
43746
43747               /* privileged (public) methods */
43748               this.hex = function(s) {
43749                 return rstr2hex(rstr(s));
43750               };
43751               this.b64 = function(s) {
43752                 return rstr2b64(rstr(s), b64pad);
43753               };
43754               this.any = function(s, e) {
43755                 return rstr2any(rstr(s), e);
43756               };
43757               this.raw = function(s) {
43758                 return rstr(s);
43759               };
43760               this.hex_hmac = function(k, d) {
43761                 return rstr2hex(rstr_hmac(k, d));
43762               };
43763               this.b64_hmac = function(k, d) {
43764                 return rstr2b64(rstr_hmac(k, d), b64pad);
43765               };
43766               this.any_hmac = function(k, d, e) {
43767                 return rstr2any(rstr_hmac(k, d), e);
43768               };
43769               /**
43770                * Perform a simple self-test to see if the VM is working
43771                * @return {String} Hexadecimal hash sample
43772                * @public
43773                */
43774               this.vm_test = function() {
43775                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
43776               };
43777               /**
43778                * @description Enable/disable uppercase hexadecimal returned string
43779                * @param {boolean}
43780                * @return {Object} this
43781                * @public
43782                */
43783               this.setUpperCase = function(a) {
43784                 if (typeof a === 'boolean') {
43785                   hexcase = a;
43786                 }
43787                 return this;
43788               };
43789               /**
43790                * @description Defines a base64 pad string
43791                * @param {string} Pad
43792                * @return {Object} this
43793                * @public
43794                */
43795               this.setPad = function(a) {
43796                 b64pad = a || b64pad;
43797                 return this;
43798               };
43799               /**
43800                * @description Defines a base64 pad string
43801                * @param {boolean}
43802                * @return {Object} this
43803                * @public
43804                */
43805               this.setUTF8 = function(a) {
43806                 if (typeof a === 'boolean') {
43807                   utf8 = a;
43808                 }
43809                 return this;
43810               };
43811
43812               /* private methods */
43813
43814               /**
43815                * Calculate the SHA-512 of a raw string
43816                */
43817
43818               function rstr(s) {
43819                 s = (utf8) ? utf8Encode(s) : s;
43820                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
43821               }
43822               /*
43823                * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
43824                */
43825
43826               function rstr_hmac(key, data) {
43827                 key = (utf8) ? utf8Encode(key) : key;
43828                 data = (utf8) ? utf8Encode(data) : data;
43829
43830                 var hash, i = 0,
43831                   bkey = rstr2binb(key),
43832                   ipad = Array(32),
43833                   opad = Array(32);
43834
43835                 if (bkey.length > 32) {
43836                   bkey = binb(bkey, key.length * 8);
43837                 }
43838
43839                 for (; i < 32; i += 1) {
43840                   ipad[i] = bkey[i] ^ 0x36363636;
43841                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
43842                 }
43843
43844                 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
43845                 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
43846               }
43847
43848               /**
43849                * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
43850                */
43851
43852               function binb(x, len) {
43853                 var j, i, l,
43854                   W = new Array(80),
43855                   hash = new Array(16),
43856                   //Initial hash values
43857                   H = [
43858                     new int64(0x6a09e667, -205731576),
43859                     new int64(-1150833019, -2067093701),
43860                     new int64(0x3c6ef372, -23791573),
43861                     new int64(-1521486534, 0x5f1d36f1),
43862                     new int64(0x510e527f, -1377402159),
43863                     new int64(-1694144372, 0x2b3e6c1f),
43864                     new int64(0x1f83d9ab, -79577749),
43865                     new int64(0x5be0cd19, 0x137e2179)
43866                   ],
43867                   T1 = new int64(0, 0),
43868                   T2 = new int64(0, 0),
43869                   a = new int64(0, 0),
43870                   b = new int64(0, 0),
43871                   c = new int64(0, 0),
43872                   d = new int64(0, 0),
43873                   e = new int64(0, 0),
43874                   f = new int64(0, 0),
43875                   g = new int64(0, 0),
43876                   h = new int64(0, 0),
43877                   //Temporary variables not specified by the document
43878                   s0 = new int64(0, 0),
43879                   s1 = new int64(0, 0),
43880                   Ch = new int64(0, 0),
43881                   Maj = new int64(0, 0),
43882                   r1 = new int64(0, 0),
43883                   r2 = new int64(0, 0),
43884                   r3 = new int64(0, 0);
43885
43886                 if (sha512_k === undefined) {
43887                   //SHA512 constants
43888                   sha512_k = [
43889                     new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
43890                     new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
43891                     new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
43892                     new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
43893                     new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
43894                     new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
43895                     new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
43896                     new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
43897                     new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
43898                     new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
43899                     new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
43900                     new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
43901                     new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
43902                     new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
43903                     new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
43904                     new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
43905                     new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
43906                     new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
43907                     new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
43908                     new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
43909                     new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
43910                     new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
43911                     new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
43912                     new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
43913                     new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
43914                     new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
43915                     new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
43916                     new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
43917                     new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
43918                     new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
43919                     new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
43920                     new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
43921                     new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
43922                     new int64(-354779690, -840897762), new int64(-176337025, -294727304),
43923                     new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
43924                     new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
43925                     new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
43926                     new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
43927                     new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
43928                     new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
43929                   ];
43930                 }
43931
43932                 for (i = 0; i < 80; i += 1) {
43933                   W[i] = new int64(0, 0);
43934                 }
43935
43936                 // append padding to the source string. The format is described in the FIPS.
43937                 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
43938                 x[((len + 128 >> 10) << 5) + 31] = len;
43939                 l = x.length;
43940                 for (i = 0; i < l; i += 32) { //32 dwords is the block size
43941                   int64copy(a, H[0]);
43942                   int64copy(b, H[1]);
43943                   int64copy(c, H[2]);
43944                   int64copy(d, H[3]);
43945                   int64copy(e, H[4]);
43946                   int64copy(f, H[5]);
43947                   int64copy(g, H[6]);
43948                   int64copy(h, H[7]);
43949
43950                   for (j = 0; j < 16; j += 1) {
43951                     W[j].h = x[i + 2 * j];
43952                     W[j].l = x[i + 2 * j + 1];
43953                   }
43954
43955                   for (j = 16; j < 80; j += 1) {
43956                     //sigma1
43957                     int64rrot(r1, W[j - 2], 19);
43958                     int64revrrot(r2, W[j - 2], 29);
43959                     int64shr(r3, W[j - 2], 6);
43960                     s1.l = r1.l ^ r2.l ^ r3.l;
43961                     s1.h = r1.h ^ r2.h ^ r3.h;
43962                     //sigma0
43963                     int64rrot(r1, W[j - 15], 1);
43964                     int64rrot(r2, W[j - 15], 8);
43965                     int64shr(r3, W[j - 15], 7);
43966                     s0.l = r1.l ^ r2.l ^ r3.l;
43967                     s0.h = r1.h ^ r2.h ^ r3.h;
43968
43969                     int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
43970                   }
43971
43972                   for (j = 0; j < 80; j += 1) {
43973                     //Ch
43974                     Ch.l = (e.l & f.l) ^ (~e.l & g.l);
43975                     Ch.h = (e.h & f.h) ^ (~e.h & g.h);
43976
43977                     //Sigma1
43978                     int64rrot(r1, e, 14);
43979                     int64rrot(r2, e, 18);
43980                     int64revrrot(r3, e, 9);
43981                     s1.l = r1.l ^ r2.l ^ r3.l;
43982                     s1.h = r1.h ^ r2.h ^ r3.h;
43983
43984                     //Sigma0
43985                     int64rrot(r1, a, 28);
43986                     int64revrrot(r2, a, 2);
43987                     int64revrrot(r3, a, 7);
43988                     s0.l = r1.l ^ r2.l ^ r3.l;
43989                     s0.h = r1.h ^ r2.h ^ r3.h;
43990
43991                     //Maj
43992                     Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
43993                     Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
43994
43995                     int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
43996                     int64add(T2, s0, Maj);
43997
43998                     int64copy(h, g);
43999                     int64copy(g, f);
44000                     int64copy(f, e);
44001                     int64add(e, d, T1);
44002                     int64copy(d, c);
44003                     int64copy(c, b);
44004                     int64copy(b, a);
44005                     int64add(a, T1, T2);
44006                   }
44007                   int64add(H[0], H[0], a);
44008                   int64add(H[1], H[1], b);
44009                   int64add(H[2], H[2], c);
44010                   int64add(H[3], H[3], d);
44011                   int64add(H[4], H[4], e);
44012                   int64add(H[5], H[5], f);
44013                   int64add(H[6], H[6], g);
44014                   int64add(H[7], H[7], h);
44015                 }
44016
44017                 //represent the hash as an array of 32-bit dwords
44018                 for (i = 0; i < 8; i += 1) {
44019                   hash[2 * i] = H[i].h;
44020                   hash[2 * i + 1] = H[i].l;
44021                 }
44022                 return hash;
44023               }
44024
44025               //A constructor for 64-bit numbers
44026
44027               function int64(h, l) {
44028                 this.h = h;
44029                 this.l = l;
44030                 //this.toString = int64toString;
44031               }
44032
44033               //Copies src into dst, assuming both are 64-bit numbers
44034
44035               function int64copy(dst, src) {
44036                 dst.h = src.h;
44037                 dst.l = src.l;
44038               }
44039
44040               //Right-rotates a 64-bit number by shift
44041               //Won't handle cases of shift>=32
44042               //The function revrrot() is for that
44043
44044               function int64rrot(dst, x, shift) {
44045                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
44046                 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
44047               }
44048
44049               //Reverses the dwords of the source and then rotates right by shift.
44050               //This is equivalent to rotation by 32+shift
44051
44052               function int64revrrot(dst, x, shift) {
44053                 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
44054                 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
44055               }
44056
44057               //Bitwise-shifts right a 64-bit number by shift
44058               //Won't handle shift>=32, but it's never needed in SHA512
44059
44060               function int64shr(dst, x, shift) {
44061                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
44062                 dst.h = (x.h >>> shift);
44063               }
44064
44065               //Adds two 64-bit numbers
44066               //Like the original implementation, does not rely on 32-bit operations
44067
44068               function int64add(dst, x, y) {
44069                 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
44070                 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
44071                 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
44072                 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
44073                 dst.l = (w0 & 0xffff) | (w1 << 16);
44074                 dst.h = (w2 & 0xffff) | (w3 << 16);
44075               }
44076
44077               //Same, except with 4 addends. Works faster than adding them one by one.
44078
44079               function int64add4(dst, a, b, c, d) {
44080                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
44081                 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
44082                 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
44083                 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
44084                 dst.l = (w0 & 0xffff) | (w1 << 16);
44085                 dst.h = (w2 & 0xffff) | (w3 << 16);
44086               }
44087
44088               //Same, except with 5 addends
44089
44090               function int64add5(dst, a, b, c, d, e) {
44091                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
44092                   w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
44093                   w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
44094                   w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
44095                 dst.l = (w0 & 0xffff) | (w1 << 16);
44096                 dst.h = (w2 & 0xffff) | (w3 << 16);
44097               }
44098             },
44099             /**
44100              * @class Hashes.RMD160
44101              * @constructor
44102              * @param {Object} [config]
44103              *
44104              * A JavaScript implementation of the RIPEMD-160 Algorithm
44105              * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
44106              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
44107              * See http://pajhome.org.uk/crypt/md5 for details.
44108              * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
44109              */
44110             RMD160: function(options) {
44111               /**
44112                * Private properties configuration variables. You may need to tweak these to be compatible with
44113                * the server-side, but the defaults work in most cases.
44114                * @see this.setUpperCase() method
44115                * @see this.setPad() method
44116                */
44117               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
44118                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
44119                 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
44120                 /* base-64 pad character. Default '=' for strict RFC compliance   */
44121                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
44122                 /* enable/disable utf8 encoding */
44123                 rmd160_r1 = [
44124                   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
44125                   7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
44126                   3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
44127                   1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
44128                   4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
44129                 ],
44130                 rmd160_r2 = [
44131                   5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
44132                   6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
44133                   15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
44134                   8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
44135                   12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
44136                 ],
44137                 rmd160_s1 = [
44138                   11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
44139                   7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
44140                   11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
44141                   11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
44142                   9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
44143                 ],
44144                 rmd160_s2 = [
44145                   8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
44146                   9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
44147                   9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
44148                   15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
44149                   8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
44150                 ];
44151
44152               /* privileged (public) methods */
44153               this.hex = function(s) {
44154                 return rstr2hex(rstr(s));
44155               };
44156               this.b64 = function(s) {
44157                 return rstr2b64(rstr(s), b64pad);
44158               };
44159               this.any = function(s, e) {
44160                 return rstr2any(rstr(s), e);
44161               };
44162               this.raw = function(s) {
44163                 return rstr(s);
44164               };
44165               this.hex_hmac = function(k, d) {
44166                 return rstr2hex(rstr_hmac(k, d));
44167               };
44168               this.b64_hmac = function(k, d) {
44169                 return rstr2b64(rstr_hmac(k, d), b64pad);
44170               };
44171               this.any_hmac = function(k, d, e) {
44172                 return rstr2any(rstr_hmac(k, d), e);
44173               };
44174               /**
44175                * Perform a simple self-test to see if the VM is working
44176                * @return {String} Hexadecimal hash sample
44177                * @public
44178                */
44179               this.vm_test = function() {
44180                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
44181               };
44182               /**
44183                * @description Enable/disable uppercase hexadecimal returned string
44184                * @param {boolean}
44185                * @return {Object} this
44186                * @public
44187                */
44188               this.setUpperCase = function(a) {
44189                 if (typeof a === 'boolean') {
44190                   hexcase = a;
44191                 }
44192                 return this;
44193               };
44194               /**
44195                * @description Defines a base64 pad string
44196                * @param {string} Pad
44197                * @return {Object} this
44198                * @public
44199                */
44200               this.setPad = function(a) {
44201                 if (typeof a !== 'undefined') {
44202                   b64pad = a;
44203                 }
44204                 return this;
44205               };
44206               /**
44207                * @description Defines a base64 pad string
44208                * @param {boolean}
44209                * @return {Object} this
44210                * @public
44211                */
44212               this.setUTF8 = function(a) {
44213                 if (typeof a === 'boolean') {
44214                   utf8 = a;
44215                 }
44216                 return this;
44217               };
44218
44219               /* private methods */
44220
44221               /**
44222                * Calculate the rmd160 of a raw string
44223                */
44224
44225               function rstr(s) {
44226                 s = (utf8) ? utf8Encode(s) : s;
44227                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
44228               }
44229
44230               /**
44231                * Calculate the HMAC-rmd160 of a key and some data (raw strings)
44232                */
44233
44234               function rstr_hmac(key, data) {
44235                 key = (utf8) ? utf8Encode(key) : key;
44236                 data = (utf8) ? utf8Encode(data) : data;
44237                 var i, hash,
44238                   bkey = rstr2binl(key),
44239                   ipad = Array(16),
44240                   opad = Array(16);
44241
44242                 if (bkey.length > 16) {
44243                   bkey = binl(bkey, key.length * 8);
44244                 }
44245
44246                 for (i = 0; i < 16; i += 1) {
44247                   ipad[i] = bkey[i] ^ 0x36363636;
44248                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
44249                 }
44250                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
44251                 return binl2rstr(binl(opad.concat(hash), 512 + 160));
44252               }
44253
44254               /**
44255                * Convert an array of little-endian words to a string
44256                */
44257
44258               function binl2rstr(input) {
44259                 var i, output = '',
44260                   l = input.length * 32;
44261                 for (i = 0; i < l; i += 8) {
44262                   output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
44263                 }
44264                 return output;
44265               }
44266
44267               /**
44268                * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
44269                */
44270
44271               function binl(x, len) {
44272                 var T, j, i, l,
44273                   h0 = 0x67452301,
44274                   h1 = 0xefcdab89,
44275                   h2 = 0x98badcfe,
44276                   h3 = 0x10325476,
44277                   h4 = 0xc3d2e1f0,
44278                   A1, B1, C1, D1, E1,
44279                   A2, B2, C2, D2, E2;
44280
44281                 /* append padding */
44282                 x[len >> 5] |= 0x80 << (len % 32);
44283                 x[(((len + 64) >>> 9) << 4) + 14] = len;
44284                 l = x.length;
44285
44286                 for (i = 0; i < l; i += 16) {
44287                   A1 = A2 = h0;
44288                   B1 = B2 = h1;
44289                   C1 = C2 = h2;
44290                   D1 = D2 = h3;
44291                   E1 = E2 = h4;
44292                   for (j = 0; j <= 79; j += 1) {
44293                     T = safe_add(A1, rmd160_f(j, B1, C1, D1));
44294                     T = safe_add(T, x[i + rmd160_r1[j]]);
44295                     T = safe_add(T, rmd160_K1(j));
44296                     T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
44297                     A1 = E1;
44298                     E1 = D1;
44299                     D1 = bit_rol(C1, 10);
44300                     C1 = B1;
44301                     B1 = T;
44302                     T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
44303                     T = safe_add(T, x[i + rmd160_r2[j]]);
44304                     T = safe_add(T, rmd160_K2(j));
44305                     T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
44306                     A2 = E2;
44307                     E2 = D2;
44308                     D2 = bit_rol(C2, 10);
44309                     C2 = B2;
44310                     B2 = T;
44311                   }
44312
44313                   T = safe_add(h1, safe_add(C1, D2));
44314                   h1 = safe_add(h2, safe_add(D1, E2));
44315                   h2 = safe_add(h3, safe_add(E1, A2));
44316                   h3 = safe_add(h4, safe_add(A1, B2));
44317                   h4 = safe_add(h0, safe_add(B1, C2));
44318                   h0 = T;
44319                 }
44320                 return [h0, h1, h2, h3, h4];
44321               }
44322
44323               // specific algorithm methods
44324
44325               function rmd160_f(j, x, y, z) {
44326                 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
44327                   (16 <= j && j <= 31) ? (x & y) | (~x & z) :
44328                   (32 <= j && j <= 47) ? (x | ~y) ^ z :
44329                   (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
44330                   (64 <= j && j <= 79) ? x ^ (y | ~z) :
44331                   'rmd160_f: j out of range';
44332               }
44333
44334               function rmd160_K1(j) {
44335                 return (0 <= j && j <= 15) ? 0x00000000 :
44336                   (16 <= j && j <= 31) ? 0x5a827999 :
44337                   (32 <= j && j <= 47) ? 0x6ed9eba1 :
44338                   (48 <= j && j <= 63) ? 0x8f1bbcdc :
44339                   (64 <= j && j <= 79) ? 0xa953fd4e :
44340                   'rmd160_K1: j out of range';
44341               }
44342
44343               function rmd160_K2(j) {
44344                 return (0 <= j && j <= 15) ? 0x50a28be6 :
44345                   (16 <= j && j <= 31) ? 0x5c4dd124 :
44346                   (32 <= j && j <= 47) ? 0x6d703ef3 :
44347                   (48 <= j && j <= 63) ? 0x7a6d76e9 :
44348                   (64 <= j && j <= 79) ? 0x00000000 :
44349                   'rmd160_K2: j out of range';
44350               }
44351             }
44352           };
44353
44354           // exposes Hashes
44355           (function(window, undefined$1) {
44356             var freeExports = false;
44357             {
44358               freeExports = exports;
44359               if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
44360                 window = commonjsGlobal;
44361               }
44362             }
44363
44364             if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
44365               // define as an anonymous module, so, through path mapping, it can be aliased
44366               undefined$1(function() {
44367                 return Hashes;
44368               });
44369             } else if (freeExports) {
44370               // in Node.js or RingoJS v0.8.0+
44371               if ( module && module.exports === freeExports) {
44372                 module.exports = Hashes;
44373               }
44374               // in Narwhal or RingoJS v0.7.0-
44375               else {
44376                 freeExports.Hashes = Hashes;
44377               }
44378             } else {
44379               // in a browser or Rhino
44380               window.Hashes = Hashes;
44381             }
44382           }(this));
44383         }()); // IIFE
44384         });
44385
44386         var immutable = extend$2;
44387
44388         var hasOwnProperty$2 = Object.prototype.hasOwnProperty;
44389
44390         function extend$2() {
44391             var target = {};
44392
44393             for (var i = 0; i < arguments.length; i++) {
44394                 var source = arguments[i];
44395
44396                 for (var key in source) {
44397                     if (hasOwnProperty$2.call(source, key)) {
44398                         target[key] = source[key];
44399                     }
44400                 }
44401             }
44402
44403             return target
44404         }
44405
44406         var sha1 = new hashes.SHA1();
44407
44408         var ohauth = {};
44409
44410         ohauth.qsString = function(obj) {
44411             return Object.keys(obj).sort().map(function(key) {
44412                 return ohauth.percentEncode(key) + '=' +
44413                     ohauth.percentEncode(obj[key]);
44414             }).join('&');
44415         };
44416
44417         ohauth.stringQs = function(str) {
44418             return str.split('&').filter(function (pair) {
44419                 return pair !== '';
44420             }).reduce(function(obj, pair){
44421                 var parts = pair.split('=');
44422                 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
44423                     '' : decodeURIComponent(parts[1]);
44424                 return obj;
44425             }, {});
44426         };
44427
44428         ohauth.rawxhr = function(method, url, data, headers, callback) {
44429             var xhr = new XMLHttpRequest(),
44430                 twoHundred = /^20\d$/;
44431             xhr.onreadystatechange = function() {
44432                 if (4 === xhr.readyState && 0 !== xhr.status) {
44433                     if (twoHundred.test(xhr.status)) callback(null, xhr);
44434                     else return callback(xhr, null);
44435                 }
44436             };
44437             xhr.onerror = function(e) { return callback(e, null); };
44438             xhr.open(method, url, true);
44439             for (var h in headers) xhr.setRequestHeader(h, headers[h]);
44440             xhr.send(data);
44441             return xhr;
44442         };
44443
44444         ohauth.xhr = function(method, url, auth, data, options, callback) {
44445             var headers = (options && options.header) || {
44446                 'Content-Type': 'application/x-www-form-urlencoded'
44447             };
44448             headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
44449             return ohauth.rawxhr(method, url, data, headers, callback);
44450         };
44451
44452         ohauth.nonce = function() {
44453             for (var o = ''; o.length < 6;) {
44454                 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
44455             }
44456             return o;
44457         };
44458
44459         ohauth.authHeader = function(obj) {
44460             return Object.keys(obj).sort().map(function(key) {
44461                 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
44462             }).join(', ');
44463         };
44464
44465         ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
44466
44467         ohauth.percentEncode = function(s) {
44468             return encodeURIComponent(s)
44469                 .replace(/\!/g, '%21').replace(/\'/g, '%27')
44470                 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
44471         };
44472
44473         ohauth.baseString = function(method, url, params) {
44474             if (params.oauth_signature) delete params.oauth_signature;
44475             return [
44476                 method,
44477                 ohauth.percentEncode(url),
44478                 ohauth.percentEncode(ohauth.qsString(params))].join('&');
44479         };
44480
44481         ohauth.signature = function(oauth_secret, token_secret, baseString) {
44482             return sha1.b64_hmac(
44483                 ohauth.percentEncode(oauth_secret) + '&' +
44484                 ohauth.percentEncode(token_secret),
44485                 baseString);
44486         };
44487
44488         /**
44489          * Takes an options object for configuration (consumer_key,
44490          * consumer_secret, version, signature_method, token, token_secret)
44491          * and returns a function that generates the Authorization header
44492          * for given data.
44493          *
44494          * The returned function takes these parameters:
44495          * - method: GET/POST/...
44496          * - uri: full URI with protocol, port, path and query string
44497          * - extra_params: any extra parameters (that are passed in the POST data),
44498          *   can be an object or a from-urlencoded string.
44499          *
44500          * Returned function returns full OAuth header with "OAuth" string in it.
44501          */
44502
44503         ohauth.headerGenerator = function(options) {
44504             options = options || {};
44505             var consumer_key = options.consumer_key || '',
44506                 consumer_secret = options.consumer_secret || '',
44507                 signature_method = options.signature_method || 'HMAC-SHA1',
44508                 version = options.version || '1.0',
44509                 token = options.token || '',
44510                 token_secret = options.token_secret || '';
44511
44512             return function(method, uri, extra_params) {
44513                 method = method.toUpperCase();
44514                 if (typeof extra_params === 'string' && extra_params.length > 0) {
44515                     extra_params = ohauth.stringQs(extra_params);
44516                 }
44517
44518                 var uri_parts = uri.split('?', 2),
44519                 base_uri = uri_parts[0];
44520
44521                 var query_params = uri_parts.length === 2 ?
44522                     ohauth.stringQs(uri_parts[1]) : {};
44523
44524                 var oauth_params = {
44525                     oauth_consumer_key: consumer_key,
44526                     oauth_signature_method: signature_method,
44527                     oauth_version: version,
44528                     oauth_timestamp: ohauth.timestamp(),
44529                     oauth_nonce: ohauth.nonce()
44530                 };
44531
44532                 if (token) oauth_params.oauth_token = token;
44533
44534                 var all_params = immutable({}, oauth_params, query_params, extra_params),
44535                     base_str = ohauth.baseString(method, base_uri, all_params);
44536
44537                 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
44538
44539                 return 'OAuth ' + ohauth.authHeader(oauth_params);
44540             };
44541         };
44542
44543         var ohauth_1 = ohauth;
44544
44545         var resolveUrl = createCommonjsModule(function (module, exports) {
44546         // Copyright 2014 Simon Lydell
44547         // X11 (“MIT”) Licensed. (See LICENSE.)
44548
44549         void (function(root, factory) {
44550           {
44551             module.exports = factory();
44552           }
44553         }(commonjsGlobal, function() {
44554
44555           function resolveUrl(/* ...urls */) {
44556             var numUrls = arguments.length;
44557
44558             if (numUrls === 0) {
44559               throw new Error("resolveUrl requires at least one argument; got none.")
44560             }
44561
44562             var base = document.createElement("base");
44563             base.href = arguments[0];
44564
44565             if (numUrls === 1) {
44566               return base.href
44567             }
44568
44569             var head = document.getElementsByTagName("head")[0];
44570             head.insertBefore(base, head.firstChild);
44571
44572             var a = document.createElement("a");
44573             var resolved;
44574
44575             for (var index = 1; index < numUrls; index++) {
44576               a.href = arguments[index];
44577               resolved = a.href;
44578               base.href = resolved;
44579             }
44580
44581             head.removeChild(base);
44582
44583             return resolved
44584           }
44585
44586           return resolveUrl
44587
44588         }));
44589         });
44590
44591         var assign$2 = make_assign();
44592         var create$7 = make_create();
44593         var trim$1 = make_trim();
44594         var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
44595
44596         var util = {
44597                 assign: assign$2,
44598                 create: create$7,
44599                 trim: trim$1,
44600                 bind: bind$3,
44601                 slice: slice$b,
44602                 each: each,
44603                 map: map$5,
44604                 pluck: pluck,
44605                 isList: isList,
44606                 isFunction: isFunction$2,
44607                 isObject: isObject$2,
44608                 Global: Global
44609         };
44610
44611         function make_assign() {
44612                 if (Object.assign) {
44613                         return Object.assign
44614                 } else {
44615                         return function shimAssign(obj, props1, props2, etc) {
44616                                 for (var i = 1; i < arguments.length; i++) {
44617                                         each(Object(arguments[i]), function(val, key) {
44618                                                 obj[key] = val;
44619                                         });
44620                                 }                       
44621                                 return obj
44622                         }
44623                 }
44624         }
44625
44626         function make_create() {
44627                 if (Object.create) {
44628                         return function create(obj, assignProps1, assignProps2, etc) {
44629                                 var assignArgsList = slice$b(arguments, 1);
44630                                 return assign$2.apply(this, [Object.create(obj)].concat(assignArgsList))
44631                         }
44632                 } else {
44633                         function F() {} // eslint-disable-line no-inner-declarations
44634                         return function create(obj, assignProps1, assignProps2, etc) {
44635                                 var assignArgsList = slice$b(arguments, 1);
44636                                 F.prototype = obj;
44637                                 return assign$2.apply(this, [new F()].concat(assignArgsList))
44638                         }
44639                 }
44640         }
44641
44642         function make_trim() {
44643                 if (String.prototype.trim) {
44644                         return function trim(str) {
44645                                 return String.prototype.trim.call(str)
44646                         }
44647                 } else {
44648                         return function trim(str) {
44649                                 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
44650                         }
44651                 }
44652         }
44653
44654         function bind$3(obj, fn) {
44655                 return function() {
44656                         return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
44657                 }
44658         }
44659
44660         function slice$b(arr, index) {
44661                 return Array.prototype.slice.call(arr, index || 0)
44662         }
44663
44664         function each(obj, fn) {
44665                 pluck(obj, function(val, key) {
44666                         fn(val, key);
44667                         return false
44668                 });
44669         }
44670
44671         function map$5(obj, fn) {
44672                 var res = (isList(obj) ? [] : {});
44673                 pluck(obj, function(v, k) {
44674                         res[k] = fn(v, k);
44675                         return false
44676                 });
44677                 return res
44678         }
44679
44680         function pluck(obj, fn) {
44681                 if (isList(obj)) {
44682                         for (var i=0; i<obj.length; i++) {
44683                                 if (fn(obj[i], i)) {
44684                                         return obj[i]
44685                                 }
44686                         }
44687                 } else {
44688                         for (var key in obj) {
44689                                 if (obj.hasOwnProperty(key)) {
44690                                         if (fn(obj[key], key)) {
44691                                                 return obj[key]
44692                                         }
44693                                 }
44694                         }
44695                 }
44696         }
44697
44698         function isList(val) {
44699                 return (val != null && typeof val != 'function' && typeof val.length == 'number')
44700         }
44701
44702         function isFunction$2(val) {
44703                 return val && {}.toString.call(val) === '[object Function]'
44704         }
44705
44706         function isObject$2(val) {
44707                 return val && {}.toString.call(val) === '[object Object]'
44708         }
44709
44710         var slice$c = util.slice;
44711         var pluck$1 = util.pluck;
44712         var each$1 = util.each;
44713         var bind$4 = util.bind;
44714         var create$8 = util.create;
44715         var isList$1 = util.isList;
44716         var isFunction$3 = util.isFunction;
44717         var isObject$3 = util.isObject;
44718
44719         var storeEngine = {
44720                 createStore: createStore
44721         };
44722
44723         var storeAPI = {
44724                 version: '2.0.12',
44725                 enabled: false,
44726                 
44727                 // get returns the value of the given key. If that value
44728                 // is undefined, it returns optionalDefaultValue instead.
44729                 get: function(key, optionalDefaultValue) {
44730                         var data = this.storage.read(this._namespacePrefix + key);
44731                         return this._deserialize(data, optionalDefaultValue)
44732                 },
44733
44734                 // set will store the given value at key and returns value.
44735                 // Calling set with value === undefined is equivalent to calling remove.
44736                 set: function(key, value) {
44737                         if (value === undefined) {
44738                                 return this.remove(key)
44739                         }
44740                         this.storage.write(this._namespacePrefix + key, this._serialize(value));
44741                         return value
44742                 },
44743
44744                 // remove deletes the key and value stored at the given key.
44745                 remove: function(key) {
44746                         this.storage.remove(this._namespacePrefix + key);
44747                 },
44748
44749                 // each will call the given callback once for each key-value pair
44750                 // in this store.
44751                 each: function(callback) {
44752                         var self = this;
44753                         this.storage.each(function(val, namespacedKey) {
44754                                 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
44755                         });
44756                 },
44757
44758                 // clearAll will remove all the stored key-value pairs in this store.
44759                 clearAll: function() {
44760                         this.storage.clearAll();
44761                 },
44762
44763                 // additional functionality that can't live in plugins
44764                 // ---------------------------------------------------
44765
44766                 // hasNamespace returns true if this store instance has the given namespace.
44767                 hasNamespace: function(namespace) {
44768                         return (this._namespacePrefix == '__storejs_'+namespace+'_')
44769                 },
44770
44771                 // createStore creates a store.js instance with the first
44772                 // functioning storage in the list of storage candidates,
44773                 // and applies the the given mixins to the instance.
44774                 createStore: function() {
44775                         return createStore.apply(this, arguments)
44776                 },
44777                 
44778                 addPlugin: function(plugin) {
44779                         this._addPlugin(plugin);
44780                 },
44781                 
44782                 namespace: function(namespace) {
44783                         return createStore(this.storage, this.plugins, namespace)
44784                 }
44785         };
44786
44787         function _warn() {
44788                 var _console = (typeof console == 'undefined' ? null : console);
44789                 if (!_console) { return }
44790                 var fn = (_console.warn ? _console.warn : _console.log);
44791                 fn.apply(_console, arguments);
44792         }
44793
44794         function createStore(storages, plugins, namespace) {
44795                 if (!namespace) {
44796                         namespace = '';
44797                 }
44798                 if (storages && !isList$1(storages)) {
44799                         storages = [storages];
44800                 }
44801                 if (plugins && !isList$1(plugins)) {
44802                         plugins = [plugins];
44803                 }
44804
44805                 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
44806                 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
44807                 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
44808                 if (!legalNamespaces.test(namespace)) {
44809                         throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
44810                 }
44811                 
44812                 var _privateStoreProps = {
44813                         _namespacePrefix: namespacePrefix,
44814                         _namespaceRegexp: namespaceRegexp,
44815
44816                         _testStorage: function(storage) {
44817                                 try {
44818                                         var testStr = '__storejs__test__';
44819                                         storage.write(testStr, testStr);
44820                                         var ok = (storage.read(testStr) === testStr);
44821                                         storage.remove(testStr);
44822                                         return ok
44823                                 } catch(e) {
44824                                         return false
44825                                 }
44826                         },
44827
44828                         _assignPluginFnProp: function(pluginFnProp, propName) {
44829                                 var oldFn = this[propName];
44830                                 this[propName] = function pluginFn() {
44831                                         var args = slice$c(arguments, 0);
44832                                         var self = this;
44833
44834                                         // super_fn calls the old function which was overwritten by
44835                                         // this mixin.
44836                                         function super_fn() {
44837                                                 if (!oldFn) { return }
44838                                                 each$1(arguments, function(arg, i) {
44839                                                         args[i] = arg;
44840                                                 });
44841                                                 return oldFn.apply(self, args)
44842                                         }
44843
44844                                         // Give mixing function access to super_fn by prefixing all mixin function
44845                                         // arguments with super_fn.
44846                                         var newFnArgs = [super_fn].concat(args);
44847
44848                                         return pluginFnProp.apply(self, newFnArgs)
44849                                 };
44850                         },
44851
44852                         _serialize: function(obj) {
44853                                 return JSON.stringify(obj)
44854                         },
44855
44856                         _deserialize: function(strVal, defaultVal) {
44857                                 if (!strVal) { return defaultVal }
44858                                 // It is possible that a raw string value has been previously stored
44859                                 // in a storage without using store.js, meaning it will be a raw
44860                                 // string value instead of a JSON serialized string. By defaulting
44861                                 // to the raw string value in case of a JSON parse error, we allow
44862                                 // for past stored values to be forwards-compatible with store.js
44863                                 var val = '';
44864                                 try { val = JSON.parse(strVal); }
44865                                 catch(e) { val = strVal; }
44866
44867                                 return (val !== undefined ? val : defaultVal)
44868                         },
44869                         
44870                         _addStorage: function(storage) {
44871                                 if (this.enabled) { return }
44872                                 if (this._testStorage(storage)) {
44873                                         this.storage = storage;
44874                                         this.enabled = true;
44875                                 }
44876                         },
44877
44878                         _addPlugin: function(plugin) {
44879                                 var self = this;
44880
44881                                 // If the plugin is an array, then add all plugins in the array.
44882                                 // This allows for a plugin to depend on other plugins.
44883                                 if (isList$1(plugin)) {
44884                                         each$1(plugin, function(plugin) {
44885                                                 self._addPlugin(plugin);
44886                                         });
44887                                         return
44888                                 }
44889
44890                                 // Keep track of all plugins we've seen so far, so that we
44891                                 // don't add any of them twice.
44892                                 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
44893                                         return (plugin === seenPlugin)
44894                                 });
44895                                 if (seenPlugin) {
44896                                         return
44897                                 }
44898                                 this.plugins.push(plugin);
44899
44900                                 // Check that the plugin is properly formed
44901                                 if (!isFunction$3(plugin)) {
44902                                         throw new Error('Plugins must be function values that return objects')
44903                                 }
44904
44905                                 var pluginProperties = plugin.call(this);
44906                                 if (!isObject$3(pluginProperties)) {
44907                                         throw new Error('Plugins must return an object of function properties')
44908                                 }
44909
44910                                 // Add the plugin function properties to this store instance.
44911                                 each$1(pluginProperties, function(pluginFnProp, propName) {
44912                                         if (!isFunction$3(pluginFnProp)) {
44913                                                 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
44914                                         }
44915                                         self._assignPluginFnProp(pluginFnProp, propName);
44916                                 });
44917                         },
44918                         
44919                         // Put deprecated properties in the private API, so as to not expose it to accidential
44920                         // discovery through inspection of the store object.
44921                         
44922                         // Deprecated: addStorage
44923                         addStorage: function(storage) {
44924                                 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
44925                                 this._addStorage(storage);
44926                         }
44927                 };
44928
44929                 var store = create$8(_privateStoreProps, storeAPI, {
44930                         plugins: []
44931                 });
44932                 store.raw = {};
44933                 each$1(store, function(prop, propName) {
44934                         if (isFunction$3(prop)) {
44935                                 store.raw[propName] = bind$4(store, prop);                      
44936                         }
44937                 });
44938                 each$1(storages, function(storage) {
44939                         store._addStorage(storage);
44940                 });
44941                 each$1(plugins, function(plugin) {
44942                         store._addPlugin(plugin);
44943                 });
44944                 return store
44945         }
44946
44947         var Global$1 = util.Global;
44948
44949         var localStorage_1 = {
44950                 name: 'localStorage',
44951                 read: read,
44952                 write: write,
44953                 each: each$2,
44954                 remove: remove$2,
44955                 clearAll: clearAll,
44956         };
44957
44958         function localStorage$1() {
44959                 return Global$1.localStorage
44960         }
44961
44962         function read(key) {
44963                 return localStorage$1().getItem(key)
44964         }
44965
44966         function write(key, data) {
44967                 return localStorage$1().setItem(key, data)
44968         }
44969
44970         function each$2(fn) {
44971                 for (var i = localStorage$1().length - 1; i >= 0; i--) {
44972                         var key = localStorage$1().key(i);
44973                         fn(read(key), key);
44974                 }
44975         }
44976
44977         function remove$2(key) {
44978                 return localStorage$1().removeItem(key)
44979         }
44980
44981         function clearAll() {
44982                 return localStorage$1().clear()
44983         }
44984
44985         // oldFF-globalStorage provides storage for Firefox
44986         // versions 6 and 7, where no localStorage, etc
44987         // is available.
44988
44989
44990         var Global$2 = util.Global;
44991
44992         var oldFFGlobalStorage = {
44993                 name: 'oldFF-globalStorage',
44994                 read: read$1,
44995                 write: write$1,
44996                 each: each$3,
44997                 remove: remove$3,
44998                 clearAll: clearAll$1,
44999         };
45000
45001         var globalStorage = Global$2.globalStorage;
45002
45003         function read$1(key) {
45004                 return globalStorage[key]
45005         }
45006
45007         function write$1(key, data) {
45008                 globalStorage[key] = data;
45009         }
45010
45011         function each$3(fn) {
45012                 for (var i = globalStorage.length - 1; i >= 0; i--) {
45013                         var key = globalStorage.key(i);
45014                         fn(globalStorage[key], key);
45015                 }
45016         }
45017
45018         function remove$3(key) {
45019                 return globalStorage.removeItem(key)
45020         }
45021
45022         function clearAll$1() {
45023                 each$3(function(key, _) {
45024                         delete globalStorage[key];
45025                 });
45026         }
45027
45028         // oldIE-userDataStorage provides storage for Internet Explorer
45029         // versions 6 and 7, where no localStorage, sessionStorage, etc
45030         // is available.
45031
45032
45033         var Global$3 = util.Global;
45034
45035         var oldIEUserDataStorage = {
45036                 name: 'oldIE-userDataStorage',
45037                 write: write$2,
45038                 read: read$2,
45039                 each: each$4,
45040                 remove: remove$4,
45041                 clearAll: clearAll$2,
45042         };
45043
45044         var storageName = 'storejs';
45045         var doc = Global$3.document;
45046         var _withStorageEl = _makeIEStorageElFunction();
45047         var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
45048
45049         function write$2(unfixedKey, data) {
45050                 if (disable) { return }
45051                 var fixedKey = fixKey(unfixedKey);
45052                 _withStorageEl(function(storageEl) {
45053                         storageEl.setAttribute(fixedKey, data);
45054                         storageEl.save(storageName);
45055                 });
45056         }
45057
45058         function read$2(unfixedKey) {
45059                 if (disable) { return }
45060                 var fixedKey = fixKey(unfixedKey);
45061                 var res = null;
45062                 _withStorageEl(function(storageEl) {
45063                         res = storageEl.getAttribute(fixedKey);
45064                 });
45065                 return res
45066         }
45067
45068         function each$4(callback) {
45069                 _withStorageEl(function(storageEl) {
45070                         var attributes = storageEl.XMLDocument.documentElement.attributes;
45071                         for (var i=attributes.length-1; i>=0; i--) {
45072                                 var attr = attributes[i];
45073                                 callback(storageEl.getAttribute(attr.name), attr.name);
45074                         }
45075                 });
45076         }
45077
45078         function remove$4(unfixedKey) {
45079                 var fixedKey = fixKey(unfixedKey);
45080                 _withStorageEl(function(storageEl) {
45081                         storageEl.removeAttribute(fixedKey);
45082                         storageEl.save(storageName);
45083                 });
45084         }
45085
45086         function clearAll$2() {
45087                 _withStorageEl(function(storageEl) {
45088                         var attributes = storageEl.XMLDocument.documentElement.attributes;
45089                         storageEl.load(storageName);
45090                         for (var i=attributes.length-1; i>=0; i--) {
45091                                 storageEl.removeAttribute(attributes[i].name);
45092                         }
45093                         storageEl.save(storageName);
45094                 });
45095         }
45096
45097         // Helpers
45098         //////////
45099
45100         // In IE7, keys cannot start with a digit or contain certain chars.
45101         // See https://github.com/marcuswestin/store.js/issues/40
45102         // See https://github.com/marcuswestin/store.js/issues/83
45103         var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
45104         function fixKey(key) {
45105                 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
45106         }
45107
45108         function _makeIEStorageElFunction() {
45109                 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
45110                         return null
45111                 }
45112                 var scriptTag = 'script',
45113                         storageOwner,
45114                         storageContainer,
45115                         storageEl;
45116
45117                 // Since #userData storage applies only to specific paths, we need to
45118                 // somehow link our data to a specific path.  We choose /favicon.ico
45119                 // as a pretty safe option, since all browsers already make a request to
45120                 // this URL anyway and being a 404 will not hurt us here.  We wrap an
45121                 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
45122                 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
45123                 // since the iframe access rules appear to allow direct access and
45124                 // manipulation of the document element, even for a 404 page.  This
45125                 // document can be used instead of the current document (which would
45126                 // have been limited to the current path) to perform #userData storage.
45127                 try {
45128                         /* global ActiveXObject */
45129                         storageContainer = new ActiveXObject('htmlfile');
45130                         storageContainer.open();
45131                         storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
45132                         storageContainer.close();
45133                         storageOwner = storageContainer.w.frames[0].document;
45134                         storageEl = storageOwner.createElement('div');
45135                 } catch(e) {
45136                         // somehow ActiveXObject instantiation failed (perhaps some special
45137                         // security settings or otherwse), fall back to per-path storage
45138                         storageEl = doc.createElement('div');
45139                         storageOwner = doc.body;
45140                 }
45141
45142                 return function(storeFunction) {
45143                         var args = [].slice.call(arguments, 0);
45144                         args.unshift(storageEl);
45145                         // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
45146                         // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
45147                         storageOwner.appendChild(storageEl);
45148                         storageEl.addBehavior('#default#userData');
45149                         storageEl.load(storageName);
45150                         storeFunction.apply(this, args);
45151                         storageOwner.removeChild(storageEl);
45152                         return
45153                 }
45154         }
45155
45156         // cookieStorage is useful Safari private browser mode, where localStorage
45157         // doesn't work but cookies do. This implementation is adopted from
45158         // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
45159
45160
45161         var Global$4 = util.Global;
45162         var trim$2 = util.trim;
45163
45164         var cookieStorage = {
45165                 name: 'cookieStorage',
45166                 read: read$3,
45167                 write: write$3,
45168                 each: each$5,
45169                 remove: remove$5,
45170                 clearAll: clearAll$3,
45171         };
45172
45173         var doc$1 = Global$4.document;
45174
45175         function read$3(key) {
45176                 if (!key || !_has(key)) { return null }
45177                 var regexpStr = "(?:^|.*;\\s*)" +
45178                         escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
45179                         "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
45180                 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
45181         }
45182
45183         function each$5(callback) {
45184                 var cookies = doc$1.cookie.split(/; ?/g);
45185                 for (var i = cookies.length - 1; i >= 0; i--) {
45186                         if (!trim$2(cookies[i])) {
45187                                 continue
45188                         }
45189                         var kvp = cookies[i].split('=');
45190                         var key = unescape(kvp[0]);
45191                         var val = unescape(kvp[1]);
45192                         callback(val, key);
45193                 }
45194         }
45195
45196         function write$3(key, data) {
45197                 if(!key) { return }
45198                 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
45199         }
45200
45201         function remove$5(key) {
45202                 if (!key || !_has(key)) {
45203                         return
45204                 }
45205                 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
45206         }
45207
45208         function clearAll$3() {
45209                 each$5(function(_, key) {
45210                         remove$5(key);
45211                 });
45212         }
45213
45214         function _has(key) {
45215                 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
45216         }
45217
45218         var Global$5 = util.Global;
45219
45220         var sessionStorage_1 = {
45221                 name: 'sessionStorage',
45222                 read: read$4,
45223                 write: write$4,
45224                 each: each$6,
45225                 remove: remove$6,
45226                 clearAll: clearAll$4
45227         };
45228
45229         function sessionStorage() {
45230                 return Global$5.sessionStorage
45231         }
45232
45233         function read$4(key) {
45234                 return sessionStorage().getItem(key)
45235         }
45236
45237         function write$4(key, data) {
45238                 return sessionStorage().setItem(key, data)
45239         }
45240
45241         function each$6(fn) {
45242                 for (var i = sessionStorage().length - 1; i >= 0; i--) {
45243                         var key = sessionStorage().key(i);
45244                         fn(read$4(key), key);
45245                 }
45246         }
45247
45248         function remove$6(key) {
45249                 return sessionStorage().removeItem(key)
45250         }
45251
45252         function clearAll$4() {
45253                 return sessionStorage().clear()
45254         }
45255
45256         // memoryStorage is a useful last fallback to ensure that the store
45257         // is functions (meaning store.get(), store.set(), etc will all function).
45258         // However, stored values will not persist when the browser navigates to
45259         // a new page or reloads the current page.
45260
45261         var memoryStorage_1 = {
45262                 name: 'memoryStorage',
45263                 read: read$5,
45264                 write: write$5,
45265                 each: each$7,
45266                 remove: remove$7,
45267                 clearAll: clearAll$5,
45268         };
45269
45270         var memoryStorage = {};
45271
45272         function read$5(key) {
45273                 return memoryStorage[key]
45274         }
45275
45276         function write$5(key, data) {
45277                 memoryStorage[key] = data;
45278         }
45279
45280         function each$7(callback) {
45281                 for (var key in memoryStorage) {
45282                         if (memoryStorage.hasOwnProperty(key)) {
45283                                 callback(memoryStorage[key], key);
45284                         }
45285                 }
45286         }
45287
45288         function remove$7(key) {
45289                 delete memoryStorage[key];
45290         }
45291
45292         function clearAll$5(key) {
45293                 memoryStorage = {};
45294         }
45295
45296         var all = [
45297                 // Listed in order of usage preference
45298                 localStorage_1,
45299                 oldFFGlobalStorage,
45300                 oldIEUserDataStorage,
45301                 cookieStorage,
45302                 sessionStorage_1,
45303                 memoryStorage_1
45304         ];
45305
45306         /* eslint-disable */
45307
45308         //  json2.js
45309         //  2016-10-28
45310         //  Public Domain.
45311         //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
45312         //  See http://www.JSON.org/js.html
45313         //  This code should be minified before deployment.
45314         //  See http://javascript.crockford.com/jsmin.html
45315
45316         //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
45317         //  NOT CONTROL.
45318
45319         //  This file creates a global JSON object containing two methods: stringify
45320         //  and parse. This file provides the ES5 JSON capability to ES3 systems.
45321         //  If a project might run on IE8 or earlier, then this file should be included.
45322         //  This file does nothing on ES5 systems.
45323
45324         //      JSON.stringify(value, replacer, space)
45325         //          value       any JavaScript value, usually an object or array.
45326         //          replacer    an optional parameter that determines how object
45327         //                      values are stringified for objects. It can be a
45328         //                      function or an array of strings.
45329         //          space       an optional parameter that specifies the indentation
45330         //                      of nested structures. If it is omitted, the text will
45331         //                      be packed without extra whitespace. If it is a number,
45332         //                      it will specify the number of spaces to indent at each
45333         //                      level. If it is a string (such as "\t" or "&nbsp;"),
45334         //                      it contains the characters used to indent at each level.
45335         //          This method produces a JSON text from a JavaScript value.
45336         //          When an object value is found, if the object contains a toJSON
45337         //          method, its toJSON method will be called and the result will be
45338         //          stringified. A toJSON method does not serialize: it returns the
45339         //          value represented by the name/value pair that should be serialized,
45340         //          or undefined if nothing should be serialized. The toJSON method
45341         //          will be passed the key associated with the value, and this will be
45342         //          bound to the value.
45343
45344         //          For example, this would serialize Dates as ISO strings.
45345
45346         //              Date.prototype.toJSON = function (key) {
45347         //                  function f(n) {
45348         //                      // Format integers to have at least two digits.
45349         //                      return (n < 10)
45350         //                          ? "0" + n
45351         //                          : n;
45352         //                  }
45353         //                  return this.getUTCFullYear()   + "-" +
45354         //                       f(this.getUTCMonth() + 1) + "-" +
45355         //                       f(this.getUTCDate())      + "T" +
45356         //                       f(this.getUTCHours())     + ":" +
45357         //                       f(this.getUTCMinutes())   + ":" +
45358         //                       f(this.getUTCSeconds())   + "Z";
45359         //              };
45360
45361         //          You can provide an optional replacer method. It will be passed the
45362         //          key and value of each member, with this bound to the containing
45363         //          object. The value that is returned from your method will be
45364         //          serialized. If your method returns undefined, then the member will
45365         //          be excluded from the serialization.
45366
45367         //          If the replacer parameter is an array of strings, then it will be
45368         //          used to select the members to be serialized. It filters the results
45369         //          such that only members with keys listed in the replacer array are
45370         //          stringified.
45371
45372         //          Values that do not have JSON representations, such as undefined or
45373         //          functions, will not be serialized. Such values in objects will be
45374         //          dropped; in arrays they will be replaced with null. You can use
45375         //          a replacer function to replace those with JSON values.
45376
45377         //          JSON.stringify(undefined) returns undefined.
45378
45379         //          The optional space parameter produces a stringification of the
45380         //          value that is filled with line breaks and indentation to make it
45381         //          easier to read.
45382
45383         //          If the space parameter is a non-empty string, then that string will
45384         //          be used for indentation. If the space parameter is a number, then
45385         //          the indentation will be that many spaces.
45386
45387         //          Example:
45388
45389         //          text = JSON.stringify(["e", {pluribus: "unum"}]);
45390         //          // text is '["e",{"pluribus":"unum"}]'
45391
45392         //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
45393         //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
45394
45395         //          text = JSON.stringify([new Date()], function (key, value) {
45396         //              return this[key] instanceof Date
45397         //                  ? "Date(" + this[key] + ")"
45398         //                  : value;
45399         //          });
45400         //          // text is '["Date(---current time---)"]'
45401
45402         //      JSON.parse(text, reviver)
45403         //          This method parses a JSON text to produce an object or array.
45404         //          It can throw a SyntaxError exception.
45405
45406         //          The optional reviver parameter is a function that can filter and
45407         //          transform the results. It receives each of the keys and values,
45408         //          and its return value is used instead of the original value.
45409         //          If it returns what it received, then the structure is not modified.
45410         //          If it returns undefined then the member is deleted.
45411
45412         //          Example:
45413
45414         //          // Parse the text. Values that look like ISO date strings will
45415         //          // be converted to Date objects.
45416
45417         //          myData = JSON.parse(text, function (key, value) {
45418         //              var a;
45419         //              if (typeof value === "string") {
45420         //                  a =
45421         //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
45422         //                  if (a) {
45423         //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
45424         //                          +a[5], +a[6]));
45425         //                  }
45426         //              }
45427         //              return value;
45428         //          });
45429
45430         //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
45431         //              var d;
45432         //              if (typeof value === "string" &&
45433         //                      value.slice(0, 5) === "Date(" &&
45434         //                      value.slice(-1) === ")") {
45435         //                  d = new Date(value.slice(5, -1));
45436         //                  if (d) {
45437         //                      return d;
45438         //                  }
45439         //              }
45440         //              return value;
45441         //          });
45442
45443         //  This is a reference implementation. You are free to copy, modify, or
45444         //  redistribute.
45445
45446         /*jslint
45447             eval, for, this
45448         */
45449
45450         /*property
45451             JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
45452             getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
45453             lastIndex, length, parse, prototype, push, replace, slice, stringify,
45454             test, toJSON, toString, valueOf
45455         */
45456
45457
45458         // Create a JSON object only if one does not already exist. We create the
45459         // methods in a closure to avoid creating global variables.
45460
45461         if (typeof JSON !== "object") {
45462             JSON = {};
45463         }
45464
45465         (function () {
45466
45467             var rx_one = /^[\],:{}\s]*$/;
45468             var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
45469             var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
45470             var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
45471             var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45472             var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
45473
45474             function f(n) {
45475                 // Format integers to have at least two digits.
45476                 return n < 10
45477                     ? "0" + n
45478                     : n;
45479             }
45480
45481             function this_value() {
45482                 return this.valueOf();
45483             }
45484
45485             if (typeof Date.prototype.toJSON !== "function") {
45486
45487                 Date.prototype.toJSON = function () {
45488
45489                     return isFinite(this.valueOf())
45490                         ? this.getUTCFullYear() + "-" +
45491                                 f(this.getUTCMonth() + 1) + "-" +
45492                                 f(this.getUTCDate()) + "T" +
45493                                 f(this.getUTCHours()) + ":" +
45494                                 f(this.getUTCMinutes()) + ":" +
45495                                 f(this.getUTCSeconds()) + "Z"
45496                         : null;
45497                 };
45498
45499                 Boolean.prototype.toJSON = this_value;
45500                 Number.prototype.toJSON = this_value;
45501                 String.prototype.toJSON = this_value;
45502             }
45503
45504             var gap;
45505             var indent;
45506             var meta;
45507             var rep;
45508
45509
45510             function quote(string) {
45511
45512         // If the string contains no control characters, no quote characters, and no
45513         // backslash characters, then we can safely slap some quotes around it.
45514         // Otherwise we must also replace the offending characters with safe escape
45515         // sequences.
45516
45517                 rx_escapable.lastIndex = 0;
45518                 return rx_escapable.test(string)
45519                     ? "\"" + string.replace(rx_escapable, function (a) {
45520                         var c = meta[a];
45521                         return typeof c === "string"
45522                             ? c
45523                             : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45524                     }) + "\""
45525                     : "\"" + string + "\"";
45526             }
45527
45528
45529             function str(key, holder) {
45530
45531         // Produce a string from holder[key].
45532
45533                 var i;          // The loop counter.
45534                 var k;          // The member key.
45535                 var v;          // The member value.
45536                 var length;
45537                 var mind = gap;
45538                 var partial;
45539                 var value = holder[key];
45540
45541         // If the value has a toJSON method, call it to obtain a replacement value.
45542
45543                 if (value && typeof value === "object" &&
45544                         typeof value.toJSON === "function") {
45545                     value = value.toJSON(key);
45546                 }
45547
45548         // If we were called with a replacer function, then call the replacer to
45549         // obtain a replacement value.
45550
45551                 if (typeof rep === "function") {
45552                     value = rep.call(holder, key, value);
45553                 }
45554
45555         // What happens next depends on the value's type.
45556
45557                 switch (typeof value) {
45558                 case "string":
45559                     return quote(value);
45560
45561                 case "number":
45562
45563         // JSON numbers must be finite. Encode non-finite numbers as null.
45564
45565                     return isFinite(value)
45566                         ? String(value)
45567                         : "null";
45568
45569                 case "boolean":
45570                 case "null":
45571
45572         // If the value is a boolean or null, convert it to a string. Note:
45573         // typeof null does not produce "null". The case is included here in
45574         // the remote chance that this gets fixed someday.
45575
45576                     return String(value);
45577
45578         // If the type is "object", we might be dealing with an object or an array or
45579         // null.
45580
45581                 case "object":
45582
45583         // Due to a specification blunder in ECMAScript, typeof null is "object",
45584         // so watch out for that case.
45585
45586                     if (!value) {
45587                         return "null";
45588                     }
45589
45590         // Make an array to hold the partial results of stringifying this object value.
45591
45592                     gap += indent;
45593                     partial = [];
45594
45595         // Is the value an array?
45596
45597                     if (Object.prototype.toString.apply(value) === "[object Array]") {
45598
45599         // The value is an array. Stringify every element. Use null as a placeholder
45600         // for non-JSON values.
45601
45602                         length = value.length;
45603                         for (i = 0; i < length; i += 1) {
45604                             partial[i] = str(i, value) || "null";
45605                         }
45606
45607         // Join all of the elements together, separated with commas, and wrap them in
45608         // brackets.
45609
45610                         v = partial.length === 0
45611                             ? "[]"
45612                             : gap
45613                                 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
45614                                 : "[" + partial.join(",") + "]";
45615                         gap = mind;
45616                         return v;
45617                     }
45618
45619         // If the replacer is an array, use it to select the members to be stringified.
45620
45621                     if (rep && typeof rep === "object") {
45622                         length = rep.length;
45623                         for (i = 0; i < length; i += 1) {
45624                             if (typeof rep[i] === "string") {
45625                                 k = rep[i];
45626                                 v = str(k, value);
45627                                 if (v) {
45628                                     partial.push(quote(k) + (
45629                                         gap
45630                                             ? ": "
45631                                             : ":"
45632                                     ) + v);
45633                                 }
45634                             }
45635                         }
45636                     } else {
45637
45638         // Otherwise, iterate through all of the keys in the object.
45639
45640                         for (k in value) {
45641                             if (Object.prototype.hasOwnProperty.call(value, k)) {
45642                                 v = str(k, value);
45643                                 if (v) {
45644                                     partial.push(quote(k) + (
45645                                         gap
45646                                             ? ": "
45647                                             : ":"
45648                                     ) + v);
45649                                 }
45650                             }
45651                         }
45652                     }
45653
45654         // Join all of the member texts together, separated with commas,
45655         // and wrap them in braces.
45656
45657                     v = partial.length === 0
45658                         ? "{}"
45659                         : gap
45660                             ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
45661                             : "{" + partial.join(",") + "}";
45662                     gap = mind;
45663                     return v;
45664                 }
45665             }
45666
45667         // If the JSON object does not yet have a stringify method, give it one.
45668
45669             if (typeof JSON.stringify !== "function") {
45670                 meta = {    // table of character substitutions
45671                     "\b": "\\b",
45672                     "\t": "\\t",
45673                     "\n": "\\n",
45674                     "\f": "\\f",
45675                     "\r": "\\r",
45676                     "\"": "\\\"",
45677                     "\\": "\\\\"
45678                 };
45679                 JSON.stringify = function (value, replacer, space) {
45680
45681         // The stringify method takes a value and an optional replacer, and an optional
45682         // space parameter, and returns a JSON text. The replacer can be a function
45683         // that can replace values, or an array of strings that will select the keys.
45684         // A default replacer method can be provided. Use of the space parameter can
45685         // produce text that is more easily readable.
45686
45687                     var i;
45688                     gap = "";
45689                     indent = "";
45690
45691         // If the space parameter is a number, make an indent string containing that
45692         // many spaces.
45693
45694                     if (typeof space === "number") {
45695                         for (i = 0; i < space; i += 1) {
45696                             indent += " ";
45697                         }
45698
45699         // If the space parameter is a string, it will be used as the indent string.
45700
45701                     } else if (typeof space === "string") {
45702                         indent = space;
45703                     }
45704
45705         // If there is a replacer, it must be a function or an array.
45706         // Otherwise, throw an error.
45707
45708                     rep = replacer;
45709                     if (replacer && typeof replacer !== "function" &&
45710                             (typeof replacer !== "object" ||
45711                             typeof replacer.length !== "number")) {
45712                         throw new Error("JSON.stringify");
45713                     }
45714
45715         // Make a fake root object containing our value under the key of "".
45716         // Return the result of stringifying the value.
45717
45718                     return str("", {"": value});
45719                 };
45720             }
45721
45722
45723         // If the JSON object does not yet have a parse method, give it one.
45724
45725             if (typeof JSON.parse !== "function") {
45726                 JSON.parse = function (text, reviver) {
45727
45728         // The parse method takes a text and an optional reviver function, and returns
45729         // a JavaScript value if the text is a valid JSON text.
45730
45731                     var j;
45732
45733                     function walk(holder, key) {
45734
45735         // The walk method is used to recursively walk the resulting structure so
45736         // that modifications can be made.
45737
45738                         var k;
45739                         var v;
45740                         var value = holder[key];
45741                         if (value && typeof value === "object") {
45742                             for (k in value) {
45743                                 if (Object.prototype.hasOwnProperty.call(value, k)) {
45744                                     v = walk(value, k);
45745                                     if (v !== undefined) {
45746                                         value[k] = v;
45747                                     } else {
45748                                         delete value[k];
45749                                     }
45750                                 }
45751                             }
45752                         }
45753                         return reviver.call(holder, key, value);
45754                     }
45755
45756
45757         // Parsing happens in four stages. In the first stage, we replace certain
45758         // Unicode characters with escape sequences. JavaScript handles many characters
45759         // incorrectly, either silently deleting them, or treating them as line endings.
45760
45761                     text = String(text);
45762                     rx_dangerous.lastIndex = 0;
45763                     if (rx_dangerous.test(text)) {
45764                         text = text.replace(rx_dangerous, function (a) {
45765                             return "\\u" +
45766                                     ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
45767                         });
45768                     }
45769
45770         // In the second stage, we run the text against regular expressions that look
45771         // for non-JSON patterns. We are especially concerned with "()" and "new"
45772         // because they can cause invocation, and "=" because it can cause mutation.
45773         // But just to be safe, we want to reject all unexpected forms.
45774
45775         // We split the second stage into 4 regexp operations in order to work around
45776         // crippling inefficiencies in IE's and Safari's regexp engines. First we
45777         // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
45778         // replace all simple value tokens with "]" characters. Third, we delete all
45779         // open brackets that follow a colon or comma or that begin the text. Finally,
45780         // we look to see that the remaining characters are only whitespace or "]" or
45781         // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
45782
45783                     if (
45784                         rx_one.test(
45785                             text
45786                                 .replace(rx_two, "@")
45787                                 .replace(rx_three, "]")
45788                                 .replace(rx_four, "")
45789                         )
45790                     ) {
45791
45792         // In the third stage we use the eval function to compile the text into a
45793         // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
45794         // in JavaScript: it can begin a block or an object literal. We wrap the text
45795         // in parens to eliminate the ambiguity.
45796
45797                         j = eval("(" + text + ")");
45798
45799         // In the optional fourth stage, we recursively walk the new structure, passing
45800         // each name/value pair to a reviver function for possible transformation.
45801
45802                         return (typeof reviver === "function")
45803                             ? walk({"": j}, "")
45804                             : j;
45805                     }
45806
45807         // If the text is not JSON parseable, then a SyntaxError is thrown.
45808
45809                     throw new SyntaxError("JSON.parse");
45810                 };
45811             }
45812         }());
45813
45814         var json2 = json2Plugin;
45815
45816         function json2Plugin() {
45817                 
45818                 return {}
45819         }
45820
45821         var plugins = [json2];
45822
45823         var store_legacy = storeEngine.createStore(all, plugins);
45824
45825         // # osm-auth
45826         //
45827         // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
45828         // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
45829         // does not support custom headers, which this uses everywhere.
45830         var osmAuth = function(o) {
45831
45832             var oauth = {};
45833
45834             // authenticated users will also have a request token secret, but it's
45835             // not used in transactions with the server
45836             oauth.authenticated = function() {
45837                 return !!(token('oauth_token') && token('oauth_token_secret'));
45838             };
45839
45840             oauth.logout = function() {
45841                 token('oauth_token', '');
45842                 token('oauth_token_secret', '');
45843                 token('oauth_request_token_secret', '');
45844                 return oauth;
45845             };
45846
45847             // TODO: detect lack of click event
45848             oauth.authenticate = function(callback) {
45849                 if (oauth.authenticated()) return callback();
45850
45851                 oauth.logout();
45852
45853                 // ## Getting a request token
45854                 var params = timenonce(getAuth(o)),
45855                     url = o.url + '/oauth/request_token';
45856
45857                 params.oauth_signature = ohauth_1.signature(
45858                     o.oauth_secret, '',
45859                     ohauth_1.baseString('POST', url, params));
45860
45861                 if (!o.singlepage) {
45862                     // Create a 600x550 popup window in the center of the screen
45863                     var w = 600, h = 550,
45864                         settings = [
45865                             ['width', w], ['height', h],
45866                             ['left', screen.width / 2 - w / 2],
45867                             ['top', screen.height / 2 - h / 2]].map(function(x) {
45868                                 return x.join('=');
45869                             }).join(','),
45870                         popup = window.open('about:blank', 'oauth_window', settings);
45871                 }
45872
45873                 // Request a request token. When this is complete, the popup
45874                 // window is redirected to OSM's authorization page.
45875                 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
45876                 o.loading();
45877
45878                 function reqTokenDone(err, xhr) {
45879                     o.done();
45880                     if (err) return callback(err);
45881                     var resp = ohauth_1.stringQs(xhr.response);
45882                     token('oauth_request_token_secret', resp.oauth_token_secret);
45883                     var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
45884                         oauth_token: resp.oauth_token,
45885                         oauth_callback: resolveUrl(o.landing)
45886                     });
45887
45888                     if (o.singlepage) {
45889                         location.href = authorize_url;
45890                     } else {
45891                         popup.location = authorize_url;
45892                     }
45893                 }
45894
45895                 // Called by a function in a landing page, in the popup window. The
45896                 // window closes itself.
45897                 window.authComplete = function(token) {
45898                     var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
45899                     get_access_token(oauth_token.oauth_token);
45900                     delete window.authComplete;
45901                 };
45902
45903                 // ## Getting an request token
45904                 //
45905                 // At this point we have an `oauth_token`, brought in from a function
45906                 // call on a landing page popup.
45907                 function get_access_token(oauth_token) {
45908                     var url = o.url + '/oauth/access_token',
45909                         params = timenonce(getAuth(o)),
45910                         request_token_secret = token('oauth_request_token_secret');
45911                     params.oauth_token = oauth_token;
45912                     params.oauth_signature = ohauth_1.signature(
45913                         o.oauth_secret,
45914                         request_token_secret,
45915                         ohauth_1.baseString('POST', url, params));
45916
45917                     // ## Getting an access token
45918                     //
45919                     // The final token required for authentication. At this point
45920                     // we have a `request token secret`
45921                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45922                     o.loading();
45923                 }
45924
45925                 function accessTokenDone(err, xhr) {
45926                     o.done();
45927                     if (err) return callback(err);
45928                     var access_token = ohauth_1.stringQs(xhr.response);
45929                     token('oauth_token', access_token.oauth_token);
45930                     token('oauth_token_secret', access_token.oauth_token_secret);
45931                     callback(null, oauth);
45932                 }
45933             };
45934
45935             oauth.bootstrapToken = function(oauth_token, callback) {
45936                 // ## Getting an request token
45937                 // At this point we have an `oauth_token`, brought in from a function
45938                 // call on a landing page popup.
45939                 function get_access_token(oauth_token) {
45940                     var url = o.url + '/oauth/access_token',
45941                         params = timenonce(getAuth(o)),
45942                         request_token_secret = token('oauth_request_token_secret');
45943                     params.oauth_token = oauth_token;
45944                     params.oauth_signature = ohauth_1.signature(
45945                         o.oauth_secret,
45946                         request_token_secret,
45947                         ohauth_1.baseString('POST', url, params));
45948
45949                     // ## Getting an access token
45950                     // The final token required for authentication. At this point
45951                     // we have a `request token secret`
45952                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
45953                     o.loading();
45954                 }
45955
45956                 function accessTokenDone(err, xhr) {
45957                     o.done();
45958                     if (err) return callback(err);
45959                     var access_token = ohauth_1.stringQs(xhr.response);
45960                     token('oauth_token', access_token.oauth_token);
45961                     token('oauth_token_secret', access_token.oauth_token_secret);
45962                     callback(null, oauth);
45963                 }
45964
45965                 get_access_token(oauth_token);
45966             };
45967
45968             // # xhr
45969             //
45970             // A single XMLHttpRequest wrapper that does authenticated calls if the
45971             // user has logged in.
45972             oauth.xhr = function(options, callback) {
45973                 if (!oauth.authenticated()) {
45974                     if (o.auto) {
45975                         return oauth.authenticate(run);
45976                     } else {
45977                         callback('not authenticated', null);
45978                         return;
45979                     }
45980                 } else {
45981                     return run();
45982                 }
45983
45984                 function run() {
45985                     var params = timenonce(getAuth(o)),
45986                         oauth_token_secret = token('oauth_token_secret'),
45987                         url = (options.prefix !== false) ? o.url + options.path : options.path,
45988                         url_parts = url.replace(/#.*$/, '').split('?', 2),
45989                         base_url = url_parts[0],
45990                         query = (url_parts.length === 2) ? url_parts[1] : '';
45991
45992                     // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
45993                     if ((!options.options || !options.options.header ||
45994                         options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
45995                         options.content) {
45996                         params = immutable(params, ohauth_1.stringQs(options.content));
45997                     }
45998
45999                     params.oauth_token = token('oauth_token');
46000                     params.oauth_signature = ohauth_1.signature(
46001                         o.oauth_secret,
46002                         oauth_token_secret,
46003                         ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
46004                     );
46005
46006                     return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
46007                 }
46008
46009                 function done(err, xhr) {
46010                     if (err) return callback(err);
46011                     else if (xhr.responseXML) return callback(err, xhr.responseXML);
46012                     else return callback(err, xhr.response);
46013                 }
46014             };
46015
46016             // pre-authorize this object, if we can just get a token and token_secret
46017             // from the start
46018             oauth.preauth = function(c) {
46019                 if (!c) return;
46020                 if (c.oauth_token) token('oauth_token', c.oauth_token);
46021                 if (c.oauth_token_secret) token('oauth_token_secret', c.oauth_token_secret);
46022                 return oauth;
46023             };
46024
46025             oauth.options = function(_) {
46026                 if (!arguments.length) return o;
46027
46028                 o = _;
46029                 o.url = o.url || 'https://www.openstreetmap.org';
46030                 o.landing = o.landing || 'land.html';
46031                 o.singlepage = o.singlepage || false;
46032
46033                 // Optional loading and loading-done functions for nice UI feedback.
46034                 // by default, no-ops
46035                 o.loading = o.loading || function() {};
46036                 o.done = o.done || function() {};
46037
46038                 return oauth.preauth(o);
46039             };
46040
46041             // 'stamp' an authentication object from `getAuth()`
46042             // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
46043             // and timestamp
46044             function timenonce(o) {
46045                 o.oauth_timestamp = ohauth_1.timestamp();
46046                 o.oauth_nonce = ohauth_1.nonce();
46047                 return o;
46048             }
46049
46050             // get/set tokens. These are prefixed with the base URL so that `osm-auth`
46051             // can be used with multiple APIs and the keys in `localStorage`
46052             // will not clash
46053             var token;
46054
46055             if (store_legacy.enabled) {
46056                 token = function (x, y) {
46057                     if (arguments.length === 1) return store_legacy.get(o.url + x);
46058                     else if (arguments.length === 2) return store_legacy.set(o.url + x, y);
46059                 };
46060             } else {
46061                 var storage = {};
46062                 token = function (x, y) {
46063                     if (arguments.length === 1) return storage[o.url + x];
46064                     else if (arguments.length === 2) return storage[o.url + x] = y;
46065                 };
46066             }
46067
46068             // Get an authentication object. If you just add and remove properties
46069             // from a single object, you'll need to use `delete` to make sure that
46070             // it doesn't contain undesired properties for authentication
46071             function getAuth(o) {
46072                 return {
46073                     oauth_consumer_key: o.oauth_consumer_key,
46074                     oauth_signature_method: 'HMAC-SHA1'
46075                 };
46076             }
46077
46078             // potentially pre-authorize
46079             oauth.options(o);
46080
46081             return oauth;
46082         };
46083
46084         var JXON = new (function () {
46085           var
46086             sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
46087             aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
46088
46089           function parseText (sValue) {
46090             if (rIsNull.test(sValue)) { return null; }
46091             if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
46092             if (isFinite(sValue)) { return parseFloat(sValue); }
46093             if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
46094             return sValue;
46095           }
46096
46097           function EmptyTree () { }
46098           EmptyTree.prototype.toString = function () { return 'null'; };
46099           EmptyTree.prototype.valueOf = function () { return null; };
46100
46101           function objectify (vValue) {
46102             return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
46103           }
46104
46105           function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
46106             var
46107               nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
46108               bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
46109
46110             var
46111               sProp, vContent, nLength = 0, sCollectedTxt = '',
46112               vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
46113
46114             if (bChildren) {
46115               for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
46116                 oNode = oParentNode.childNodes.item(nItem);
46117                 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
46118                 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
46119                 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
46120               }
46121             }
46122
46123             var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
46124
46125             if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
46126
46127             for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
46128               sProp = aCache[nElId].nodeName.toLowerCase();
46129               vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
46130               if (vResult.hasOwnProperty(sProp)) {
46131                 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
46132                 vResult[sProp].push(vContent);
46133               } else {
46134                 vResult[sProp] = vContent;
46135                 nLength++;
46136               }
46137             }
46138
46139             if (bAttributes) {
46140               var
46141                 nAttrLen = oParentNode.attributes.length,
46142                 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
46143
46144               for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
46145                 oAttrib = oParentNode.attributes.item(nAttrib);
46146                 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
46147               }
46148
46149               if (bNesteAttr) {
46150                 if (bFreeze) { Object.freeze(oAttrParent); }
46151                 vResult[sAttributesProp] = oAttrParent;
46152                 nLength -= nAttrLen - 1;
46153               }
46154             }
46155
46156             if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
46157               vResult[sValueProp] = vBuiltVal;
46158             } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
46159               vResult = vBuiltVal;
46160             }
46161
46162             if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
46163
46164             aCache.length = nLevelStart;
46165
46166             return vResult;
46167           }
46168
46169           function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
46170             var vValue, oChild;
46171
46172             if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
46173               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
46174             } else if (oParentObj.constructor === Date) {
46175               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
46176             }
46177
46178             for (var sName in oParentObj) {
46179               vValue = oParentObj[sName];
46180               if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
46181               if (sName === sValueProp) {
46182                 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
46183               } else if (sName === sAttributesProp) { /* verbosity level is 3 */
46184                 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
46185               } else if (sName.charAt(0) === sAttrPref) {
46186                 oParentEl.setAttribute(sName.slice(1), vValue);
46187               } else if (vValue.constructor === Array) {
46188                 for (var nItem = 0; nItem < vValue.length; nItem++) {
46189                   oChild = oXMLDoc.createElement(sName);
46190                   loadObjTree(oXMLDoc, oChild, vValue[nItem]);
46191                   oParentEl.appendChild(oChild);
46192                 }
46193               } else {
46194                 oChild = oXMLDoc.createElement(sName);
46195                 if (vValue instanceof Object) {
46196                   loadObjTree(oXMLDoc, oChild, vValue);
46197                 } else if (vValue !== null && vValue !== true) {
46198                   oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
46199                 }
46200                 oParentEl.appendChild(oChild);
46201              }
46202            }
46203           }
46204
46205           this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
46206             var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
46207             return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
46208           };
46209
46210           this.unbuild = function (oObjTree) {    
46211             var oNewDoc = document.implementation.createDocument('', '', null);
46212             loadObjTree(oNewDoc, oNewDoc, oObjTree);
46213             return oNewDoc;
46214           };
46215
46216           this.stringify = function (oObjTree) {
46217             return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
46218           };
46219         })();
46220
46221         // var myObject = JXON.build(doc);
46222         // we got our javascript object! try: alert(JSON.stringify(myObject));
46223
46224         // var newDoc = JXON.unbuild(myObject);
46225         // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
46226
46227         var tiler$4 = utilTiler();
46228         var dispatch$5 = dispatch('authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
46229         var urlroot = 'https://www.openstreetmap.org';
46230         var oauth = osmAuth({
46231             url: urlroot,
46232             oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
46233             oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
46234             loading: authLoading,
46235             done: authDone
46236         });
46237
46238         var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
46239         var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46240         var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46241         var _userCache = { toLoad: {}, user: {} };
46242         var _changeset = {};
46243
46244         var _deferred = new Set();
46245         var _connectionID = 1;
46246         var _tileZoom = 16;
46247         var _noteZoom = 12;
46248         var _rateLimitError;
46249         var _userChangesets;
46250         var _userDetails;
46251         var _off;
46252
46253
46254         function authLoading() {
46255             dispatch$5.call('authLoading');
46256         }
46257
46258
46259         function authDone() {
46260             dispatch$5.call('authDone');
46261         }
46262
46263
46264         function abortRequest$4(controllerOrXHR) {
46265             if (controllerOrXHR) {
46266                 controllerOrXHR.abort();
46267             }
46268         }
46269
46270
46271         function hasInflightRequests(cache) {
46272             return Object.keys(cache.inflight).length;
46273         }
46274
46275
46276         function abortUnwantedRequests$2(cache, visibleTiles) {
46277             Object.keys(cache.inflight).forEach(function(k) {
46278                 if (cache.toLoad[k]) return;
46279                 if (visibleTiles.find(function(tile) { return k === tile.id; })) return;
46280
46281                 abortRequest$4(cache.inflight[k]);
46282                 delete cache.inflight[k];
46283             });
46284         }
46285
46286
46287         function getLoc(attrs) {
46288             var lon = attrs.lon && attrs.lon.value;
46289             var lat = attrs.lat && attrs.lat.value;
46290             return [parseFloat(lon), parseFloat(lat)];
46291         }
46292
46293
46294         function getNodes(obj) {
46295             var elems = obj.getElementsByTagName('nd');
46296             var nodes = new Array(elems.length);
46297             for (var i = 0, l = elems.length; i < l; i++) {
46298                 nodes[i] = 'n' + elems[i].attributes.ref.value;
46299             }
46300             return nodes;
46301         }
46302
46303
46304         function getTags(obj) {
46305             var elems = obj.getElementsByTagName('tag');
46306             var tags = {};
46307             for (var i = 0, l = elems.length; i < l; i++) {
46308                 var attrs = elems[i].attributes;
46309                 tags[attrs.k.value] = attrs.v.value;
46310             }
46311
46312             return tags;
46313         }
46314
46315
46316         function getMembers(obj) {
46317             var elems = obj.getElementsByTagName('member');
46318             var members = new Array(elems.length);
46319             for (var i = 0, l = elems.length; i < l; i++) {
46320                 var attrs = elems[i].attributes;
46321                 members[i] = {
46322                     id: attrs.type.value[0] + attrs.ref.value,
46323                     type: attrs.type.value,
46324                     role: attrs.role.value
46325                 };
46326             }
46327             return members;
46328         }
46329
46330
46331         function getVisible(attrs) {
46332             return (!attrs.visible || attrs.visible.value !== 'false');
46333         }
46334
46335
46336         function parseComments(comments) {
46337             var parsedComments = [];
46338
46339             // for each comment
46340             for (var i = 0; i < comments.length; i++) {
46341                 var comment = comments[i];
46342                 if (comment.nodeName === 'comment') {
46343                     var childNodes = comment.childNodes;
46344                     var parsedComment = {};
46345
46346                     for (var j = 0; j < childNodes.length; j++) {
46347                         var node = childNodes[j];
46348                         var nodeName = node.nodeName;
46349                         if (nodeName === '#text') continue;
46350                         parsedComment[nodeName] = node.textContent;
46351
46352                         if (nodeName === 'uid') {
46353                             var uid = node.textContent;
46354                             if (uid && !_userCache.user[uid]) {
46355                                 _userCache.toLoad[uid] = true;
46356                             }
46357                         }
46358                     }
46359
46360                     if (parsedComment) {
46361                         parsedComments.push(parsedComment);
46362                     }
46363                 }
46364             }
46365             return parsedComments;
46366         }
46367
46368
46369         function encodeNoteRtree(note) {
46370             return {
46371                 minX: note.loc[0],
46372                 minY: note.loc[1],
46373                 maxX: note.loc[0],
46374                 maxY: note.loc[1],
46375                 data: note
46376             };
46377         }
46378
46379
46380         var parsers = {
46381             node: function nodeData(obj, uid) {
46382                 var attrs = obj.attributes;
46383                 return new osmNode({
46384                     id: uid,
46385                     visible: getVisible(attrs),
46386                     version: attrs.version.value,
46387                     changeset: attrs.changeset && attrs.changeset.value,
46388                     timestamp: attrs.timestamp && attrs.timestamp.value,
46389                     user: attrs.user && attrs.user.value,
46390                     uid: attrs.uid && attrs.uid.value,
46391                     loc: getLoc(attrs),
46392                     tags: getTags(obj)
46393                 });
46394             },
46395
46396             way: function wayData(obj, uid) {
46397                 var attrs = obj.attributes;
46398                 return new osmWay({
46399                     id: uid,
46400                     visible: getVisible(attrs),
46401                     version: attrs.version.value,
46402                     changeset: attrs.changeset && attrs.changeset.value,
46403                     timestamp: attrs.timestamp && attrs.timestamp.value,
46404                     user: attrs.user && attrs.user.value,
46405                     uid: attrs.uid && attrs.uid.value,
46406                     tags: getTags(obj),
46407                     nodes: getNodes(obj),
46408                 });
46409             },
46410
46411             relation: function relationData(obj, uid) {
46412                 var attrs = obj.attributes;
46413                 return new osmRelation({
46414                     id: uid,
46415                     visible: getVisible(attrs),
46416                     version: attrs.version.value,
46417                     changeset: attrs.changeset && attrs.changeset.value,
46418                     timestamp: attrs.timestamp && attrs.timestamp.value,
46419                     user: attrs.user && attrs.user.value,
46420                     uid: attrs.uid && attrs.uid.value,
46421                     tags: getTags(obj),
46422                     members: getMembers(obj)
46423                 });
46424             },
46425
46426             note: function parseNote(obj, uid) {
46427                 var attrs = obj.attributes;
46428                 var childNodes = obj.childNodes;
46429                 var props = {};
46430
46431                 props.id = uid;
46432                 props.loc = getLoc(attrs);
46433
46434                 // if notes are coincident, move them apart slightly
46435                 var coincident = false;
46436                 var epsilon = 0.00001;
46437                 do {
46438                     if (coincident) {
46439                         props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
46440                     }
46441                     var bbox = geoExtent(props.loc).bbox();
46442                     coincident = _noteCache.rtree.search(bbox).length;
46443                 } while (coincident);
46444
46445                 // parse note contents
46446                 for (var i = 0; i < childNodes.length; i++) {
46447                     var node = childNodes[i];
46448                     var nodeName = node.nodeName;
46449                     if (nodeName === '#text') continue;
46450
46451                     // if the element is comments, parse the comments
46452                     if (nodeName === 'comments') {
46453                         props[nodeName] = parseComments(node.childNodes);
46454                     } else {
46455                         props[nodeName] = node.textContent;
46456                     }
46457                 }
46458
46459                 var note = new osmNote(props);
46460                 var item = encodeNoteRtree(note);
46461                 _noteCache.note[note.id] = note;
46462                 _noteCache.rtree.insert(item);
46463
46464                 return note;
46465             },
46466
46467             user: function parseUser(obj, uid) {
46468                 var attrs = obj.attributes;
46469                 var user = {
46470                     id: uid,
46471                     display_name: attrs.display_name && attrs.display_name.value,
46472                     account_created: attrs.account_created && attrs.account_created.value,
46473                     changesets_count: 0
46474                 };
46475
46476                 var img = obj.getElementsByTagName('img');
46477                 if (img && img[0] && img[0].getAttribute('href')) {
46478                     user.image_url = img[0].getAttribute('href');
46479                 }
46480
46481                 var changesets = obj.getElementsByTagName('changesets');
46482                 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
46483                     user.changesets_count = changesets[0].getAttribute('count');
46484                 }
46485
46486                 _userCache.user[uid] = user;
46487                 delete _userCache.toLoad[uid];
46488                 return user;
46489             }
46490         };
46491
46492
46493         function parseXML(xml, callback, options) {
46494             options = Object.assign({ skipSeen: true }, options);
46495             if (!xml || !xml.childNodes) {
46496                 return callback({ message: 'No XML', status: -1 });
46497             }
46498
46499             var root = xml.childNodes[0];
46500             var children = root.childNodes;
46501
46502             var handle = window.requestIdleCallback(function() {
46503                 var results = [];
46504                 var result;
46505                 for (var i = 0; i < children.length; i++) {
46506                     result = parseChild(children[i]);
46507                     if (result) results.push(result);
46508                 }
46509                 callback(null, results);
46510             });
46511
46512             _deferred.add(handle);
46513
46514
46515             function parseChild(child) {
46516                 var parser = parsers[child.nodeName];
46517                 if (!parser) return null;
46518
46519                 var uid;
46520                 if (child.nodeName === 'user') {
46521                     uid = child.attributes.id.value;
46522                     if (options.skipSeen && _userCache.user[uid]) {
46523                         delete _userCache.toLoad[uid];
46524                         return null;
46525                     }
46526
46527                 } else if (child.nodeName === 'note') {
46528                     uid = child.getElementsByTagName('id')[0].textContent;
46529
46530                 } else {
46531                     uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
46532                     if (options.skipSeen) {
46533                         if (_tileCache.seen[uid]) return null;  // avoid reparsing a "seen" entity
46534                         _tileCache.seen[uid] = true;
46535                     }
46536                 }
46537
46538                 return parser(child, uid);
46539             }
46540         }
46541
46542
46543         // replace or remove note from rtree
46544         function updateRtree$2(item, replace) {
46545             _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
46546
46547             if (replace) {
46548                 _noteCache.rtree.insert(item);
46549             }
46550         }
46551
46552
46553         function wrapcb(thisArg, callback, cid) {
46554             return function(err, result) {
46555                 if (err) {
46556                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
46557                     if (err.status === 400 || err.status === 401 || err.status === 403) {
46558                         thisArg.logout();
46559                     }
46560                     return callback.call(thisArg, err);
46561
46562                 } else if (thisArg.getConnectionId() !== cid) {
46563                     return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
46564
46565                 } else {
46566                     return callback.call(thisArg, err, result);
46567                 }
46568             };
46569         }
46570
46571
46572         var serviceOsm = {
46573
46574             init: function() {
46575                 utilRebind(this, dispatch$5, 'on');
46576             },
46577
46578
46579             reset: function() {
46580                 Array.from(_deferred).forEach(function(handle) {
46581                     window.cancelIdleCallback(handle);
46582                     _deferred.delete(handle);
46583                 });
46584
46585                 _connectionID++;
46586                 _userChangesets = undefined;
46587                 _userDetails = undefined;
46588                 _rateLimitError = undefined;
46589
46590                 Object.values(_tileCache.inflight).forEach(abortRequest$4);
46591                 Object.values(_noteCache.inflight).forEach(abortRequest$4);
46592                 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
46593                 if (_changeset.inflight) abortRequest$4(_changeset.inflight);
46594
46595                 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: rbush_1() };
46596                 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: rbush_1() };
46597                 _userCache = { toLoad: {}, user: {} };
46598                 _changeset = {};
46599
46600                 return this;
46601             },
46602
46603
46604             getConnectionId: function() {
46605                 return _connectionID;
46606             },
46607
46608
46609             changesetURL: function(changesetID) {
46610                 return urlroot + '/changeset/' + changesetID;
46611             },
46612
46613
46614             changesetsURL: function(center, zoom) {
46615                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
46616                 return urlroot + '/history#map=' +
46617                     Math.floor(zoom) + '/' +
46618                     center[1].toFixed(precision) + '/' +
46619                     center[0].toFixed(precision);
46620             },
46621
46622
46623             entityURL: function(entity) {
46624                 return urlroot + '/' + entity.type + '/' + entity.osmId();
46625             },
46626
46627
46628             historyURL: function(entity) {
46629                 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
46630             },
46631
46632
46633             userURL: function(username) {
46634                 return urlroot + '/user/' + username;
46635             },
46636
46637
46638             noteURL: function(note) {
46639                 return urlroot + '/note/' + note.id;
46640             },
46641
46642
46643             noteReportURL: function(note) {
46644                 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
46645             },
46646
46647
46648             // Generic method to load data from the OSM API
46649             // Can handle either auth or unauth calls.
46650             loadFromAPI: function(path, callback, options) {
46651                 options = Object.assign({ skipSeen: true }, options);
46652                 var that = this;
46653                 var cid = _connectionID;
46654
46655                 function done(err, xml) {
46656                     if (that.getConnectionId() !== cid) {
46657                         if (callback) callback({ message: 'Connection Switched', status: -1 });
46658                         return;
46659                     }
46660
46661                     var isAuthenticated = that.authenticated();
46662
46663                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden
46664                     // Logout and retry the request..
46665                     if (isAuthenticated && err && err.status &&
46666                             (err.status === 400 || err.status === 401 || err.status === 403)) {
46667                         that.logout();
46668                         that.loadFromAPI(path, callback, options);
46669
46670                     // else, no retry..
46671                     } else {
46672                         // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
46673                         // Set the rateLimitError flag and trigger a warning..
46674                         if (!isAuthenticated && !_rateLimitError && err && err.status &&
46675                                 (err.status === 509 || err.status === 429)) {
46676                             _rateLimitError = err;
46677                             dispatch$5.call('change');
46678                         }
46679
46680                         if (callback) {
46681                             if (err) {
46682                                 return callback(err);
46683                             } else {
46684                                 return parseXML(xml, callback, options);
46685                             }
46686                         }
46687                     }
46688                 }
46689
46690                 if (this.authenticated()) {
46691                     return oauth.xhr({ method: 'GET', path: path }, done);
46692                 } else {
46693                     var url = urlroot + path;
46694                     var controller = new AbortController();
46695                     d3_xml(url, { signal: controller.signal })
46696                         .then(function(data) {
46697                             done(null, data);
46698                         })
46699                         .catch(function(err) {
46700                             if (err.name === 'AbortError') return;
46701                             // d3-fetch includes status in the error message,
46702                             // but we can't access the response itself
46703                             // https://github.com/d3/d3-fetch/issues/27
46704                             var match = err.message.match(/^\d{3}/);
46705                             if (match) {
46706                                 done({ status: +match[0], statusText: err.message });
46707                             } else {
46708                                 done(err.message);
46709                             }
46710                         });
46711                     return controller;
46712                 }
46713             },
46714
46715
46716             // Load a single entity by id (ways and relations use the `/full` call)
46717             // GET /api/0.6/node/#id
46718             // GET /api/0.6/[way|relation]/#id/full
46719             loadEntity: function(id, callback) {
46720                 var type = osmEntity.id.type(id);
46721                 var osmID = osmEntity.id.toOSM(id);
46722                 var options = { skipSeen: false };
46723
46724                 this.loadFromAPI(
46725                     '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
46726                     function(err, entities) {
46727                         if (callback) callback(err, { data: entities });
46728                     },
46729                     options
46730                 );
46731             },
46732
46733
46734             // Load a single entity with a specific version
46735             // GET /api/0.6/[node|way|relation]/#id/#version
46736             loadEntityVersion: function(id, version, callback) {
46737                 var type = osmEntity.id.type(id);
46738                 var osmID = osmEntity.id.toOSM(id);
46739                 var options = { skipSeen: false };
46740
46741                 this.loadFromAPI(
46742                     '/api/0.6/' + type + '/' + osmID + '/' + version,
46743                     function(err, entities) {
46744                         if (callback) callback(err, { data: entities });
46745                     },
46746                     options
46747                 );
46748             },
46749
46750
46751             // Load multiple entities in chunks
46752             // (note: callback may be called multiple times)
46753             // GET /api/0.6/[nodes|ways|relations]?#parameters
46754             loadMultiple: function(ids, callback) {
46755                 var that = this;
46756                 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
46757
46758                 Object.keys(groups).forEach(function(k) {
46759                     var type = k + 's';   // nodes, ways, relations
46760                     var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
46761                     var options = { skipSeen: false };
46762
46763                     utilArrayChunk(osmIDs, 150).forEach(function(arr) {
46764                         that.loadFromAPI(
46765                             '/api/0.6/' + type + '?' + type + '=' + arr.join(),
46766                             function(err, entities) {
46767                                 if (callback) callback(err, { data: entities });
46768                             },
46769                             options
46770                         );
46771                     });
46772                 });
46773             },
46774
46775
46776             // Create, upload, and close a changeset
46777             // PUT /api/0.6/changeset/create
46778             // POST /api/0.6/changeset/#id/upload
46779             // PUT /api/0.6/changeset/#id/close
46780             putChangeset: function(changeset, changes, callback) {
46781                 var cid = _connectionID;
46782
46783                 if (_changeset.inflight) {
46784                     return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
46785
46786                 } else if (_changeset.open) {   // reuse existing open changeset..
46787                     return createdChangeset.call(this, null, _changeset.open);
46788
46789                 } else {   // Open a new changeset..
46790                     var options = {
46791                         method: 'PUT',
46792                         path: '/api/0.6/changeset/create',
46793                         options: { header: { 'Content-Type': 'text/xml' } },
46794                         content: JXON.stringify(changeset.asJXON())
46795                     };
46796                     _changeset.inflight = oauth.xhr(
46797                         options,
46798                         wrapcb(this, createdChangeset, cid)
46799                     );
46800                 }
46801
46802
46803                 function createdChangeset(err, changesetID) {
46804                     _changeset.inflight = null;
46805                     if (err) { return callback(err, changeset); }
46806
46807                     _changeset.open = changesetID;
46808                     changeset = changeset.update({ id: changesetID });
46809
46810                     // Upload the changeset..
46811                     var options = {
46812                         method: 'POST',
46813                         path: '/api/0.6/changeset/' + changesetID + '/upload',
46814                         options: { header: { 'Content-Type': 'text/xml' } },
46815                         content: JXON.stringify(changeset.osmChangeJXON(changes))
46816                     };
46817                     _changeset.inflight = oauth.xhr(
46818                         options,
46819                         wrapcb(this, uploadedChangeset, cid)
46820                     );
46821                 }
46822
46823
46824                 function uploadedChangeset(err) {
46825                     _changeset.inflight = null;
46826                     if (err) return callback(err, changeset);
46827
46828                     // Upload was successful, safe to call the callback.
46829                     // Add delay to allow for postgres replication #1646 #2678
46830                     window.setTimeout(function() { callback(null, changeset); }, 2500);
46831                     _changeset.open = null;
46832
46833                     // At this point, we don't really care if the connection was switched..
46834                     // Only try to close the changeset if we're still talking to the same server.
46835                     if (this.getConnectionId() === cid) {
46836                         // Still attempt to close changeset, but ignore response because #2667
46837                         oauth.xhr({
46838                             method: 'PUT',
46839                             path: '/api/0.6/changeset/' + changeset.id + '/close',
46840                             options: { header: { 'Content-Type': 'text/xml' } }
46841                         }, function() { return true; });
46842                     }
46843                 }
46844             },
46845
46846
46847             // Load multiple users in chunks
46848             // (note: callback may be called multiple times)
46849             // GET /api/0.6/users?users=#id1,#id2,...,#idn
46850             loadUsers: function(uids, callback) {
46851                 var toLoad = [];
46852                 var cached = [];
46853
46854                 utilArrayUniq(uids).forEach(function(uid) {
46855                     if (_userCache.user[uid]) {
46856                         delete _userCache.toLoad[uid];
46857                         cached.push(_userCache.user[uid]);
46858                     } else {
46859                         toLoad.push(uid);
46860                     }
46861                 });
46862
46863                 if (cached.length || !this.authenticated()) {
46864                     callback(undefined, cached);
46865                     if (!this.authenticated()) return;  // require auth
46866                 }
46867
46868                 utilArrayChunk(toLoad, 150).forEach(function(arr) {
46869                     oauth.xhr(
46870                         { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
46871                         wrapcb(this, done, _connectionID)
46872                     );
46873                 }.bind(this));
46874
46875                 function done(err, xml) {
46876                     if (err) { return callback(err); }
46877
46878                     var options = { skipSeen: true };
46879                     return parseXML(xml, function(err, results) {
46880                         if (err) {
46881                             return callback(err);
46882                         } else {
46883                             return callback(undefined, results);
46884                         }
46885                     }, options);
46886                 }
46887             },
46888
46889
46890             // Load a given user by id
46891             // GET /api/0.6/user/#id
46892             loadUser: function(uid, callback) {
46893                 if (_userCache.user[uid] || !this.authenticated()) {   // require auth
46894                     delete _userCache.toLoad[uid];
46895                     return callback(undefined, _userCache.user[uid]);
46896                 }
46897
46898                 oauth.xhr(
46899                     { method: 'GET', path: '/api/0.6/user/' + uid },
46900                     wrapcb(this, done, _connectionID)
46901                 );
46902
46903                 function done(err, xml) {
46904                     if (err) { return callback(err); }
46905
46906                     var options = { skipSeen: true };
46907                     return parseXML(xml, function(err, results) {
46908                         if (err) {
46909                             return callback(err);
46910                         } else {
46911                             return callback(undefined, results[0]);
46912                         }
46913                     }, options);
46914                 }
46915             },
46916
46917
46918             // Load the details of the logged-in user
46919             // GET /api/0.6/user/details
46920             userDetails: function(callback) {
46921                 if (_userDetails) {    // retrieve cached
46922                     return callback(undefined, _userDetails);
46923                 }
46924
46925                 oauth.xhr(
46926                     { method: 'GET', path: '/api/0.6/user/details' },
46927                     wrapcb(this, done, _connectionID)
46928                 );
46929
46930                 function done(err, xml) {
46931                     if (err) { return callback(err); }
46932
46933                     var options = { skipSeen: false };
46934                     return parseXML(xml, function(err, results) {
46935                         if (err) {
46936                             return callback(err);
46937                         } else {
46938                             _userDetails = results[0];
46939                             return callback(undefined, _userDetails);
46940                         }
46941                     }, options);
46942                 }
46943             },
46944
46945
46946             // Load previous changesets for the logged in user
46947             // GET /api/0.6/changesets?user=#id
46948             userChangesets: function(callback) {
46949                 if (_userChangesets) {    // retrieve cached
46950                     return callback(undefined, _userChangesets);
46951                 }
46952
46953                 this.userDetails(
46954                     wrapcb(this, gotDetails, _connectionID)
46955                 );
46956
46957
46958                 function gotDetails(err, user) {
46959                     if (err) { return callback(err); }
46960
46961                     oauth.xhr(
46962                         { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
46963                         wrapcb(this, done, _connectionID)
46964                     );
46965                 }
46966
46967                 function done(err, xml) {
46968                     if (err) { return callback(err); }
46969
46970                     _userChangesets = Array.prototype.map.call(
46971                         xml.getElementsByTagName('changeset'),
46972                         function (changeset) { return { tags: getTags(changeset) }; }
46973                     ).filter(function (changeset) {
46974                         var comment = changeset.tags.comment;
46975                         return comment && comment !== '';
46976                     });
46977
46978                     return callback(undefined, _userChangesets);
46979                 }
46980             },
46981
46982
46983             // Fetch the status of the OSM API
46984             // GET /api/capabilities
46985             status: function(callback) {
46986                 var url = urlroot + '/api/capabilities';
46987                 var errback = wrapcb(this, done, _connectionID);
46988                 d3_xml(url)
46989                     .then(function(data) { errback(null, data); })
46990                     .catch(function(err) { errback(err.message); });
46991
46992                 function done(err, xml) {
46993                     if (err) { return callback(err); }
46994
46995                     // update blacklists
46996                     var elements = xml.getElementsByTagName('blacklist');
46997                     var regexes = [];
46998                     for (var i = 0; i < elements.length; i++) {
46999                         var regex = elements[i].getAttribute('regex');  // needs unencode?
47000                         if (regex) {
47001                             regexes.push(regex);
47002                         }
47003                     }
47004                     if (regexes.length) {
47005                         _blacklists = regexes;
47006                     }
47007
47008                     if (_rateLimitError) {
47009                         return callback(_rateLimitError, 'rateLimited');
47010                     } else {
47011                         var apiStatus = xml.getElementsByTagName('status');
47012                         var val = apiStatus[0].getAttribute('api');
47013                         return callback(undefined, val);
47014                     }
47015                 }
47016             },
47017
47018
47019             // Load data (entities) from the API in tiles
47020             // GET /api/0.6/map?bbox=
47021             loadTiles: function(projection, callback) {
47022                 if (_off) return;
47023
47024                 // determine the needed tiles to cover the view
47025                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
47026
47027                 // abort inflight requests that are no longer needed
47028                 var hadRequests = hasInflightRequests(_tileCache);
47029                 abortUnwantedRequests$2(_tileCache, tiles);
47030                 if (hadRequests && !hasInflightRequests(_tileCache)) {
47031                     dispatch$5.call('loaded');    // stop the spinner
47032                 }
47033
47034                 // issue new requests..
47035                 tiles.forEach(function(tile) {
47036                     this.loadTile(tile, callback);
47037                 }, this);
47038             },
47039
47040
47041             // Load a single data tile
47042             // GET /api/0.6/map?bbox=
47043             loadTile: function(tile, callback) {
47044                 if (_off) return;
47045                 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
47046
47047                 if (!hasInflightRequests(_tileCache)) {
47048                     dispatch$5.call('loading');   // start the spinner
47049                 }
47050
47051                 var path = '/api/0.6/map?bbox=';
47052                 var options = { skipSeen: true };
47053
47054                 _tileCache.inflight[tile.id] = this.loadFromAPI(
47055                     path + tile.extent.toParam(),
47056                     function(err, parsed) {
47057                         delete _tileCache.inflight[tile.id];
47058                         if (!err) {
47059                             delete _tileCache.toLoad[tile.id];
47060                             _tileCache.loaded[tile.id] = true;
47061                             var bbox = tile.extent.bbox();
47062                             bbox.id = tile.id;
47063                             _tileCache.rtree.insert(bbox);
47064                         }
47065                         if (callback) {
47066                             callback(err, Object.assign({ data: parsed }, tile));
47067                         }
47068                         if (!hasInflightRequests(_tileCache)) {
47069                             dispatch$5.call('loaded');     // stop the spinner
47070                         }
47071                     },
47072                     options
47073                 );
47074             },
47075
47076
47077             isDataLoaded: function(loc) {
47078                 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
47079                 return _tileCache.rtree.collides(bbox);
47080             },
47081
47082
47083             // load the tile that covers the given `loc`
47084             loadTileAtLoc: function(loc, callback) {
47085                 // Back off if the toLoad queue is filling up.. re #6417
47086                 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
47087                 // let users safely edit geometries which extend to unloaded tiles.  We can drop some.)
47088                 if (Object.keys(_tileCache.toLoad).length > 50) return;
47089
47090                 var k = geoZoomToScale(_tileZoom + 1);
47091                 var offset = geoRawMercator().scale(k)(loc);
47092                 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
47093                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
47094
47095                 tiles.forEach(function(tile) {
47096                     if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
47097
47098                     _tileCache.toLoad[tile.id] = true;
47099                     this.loadTile(tile, callback);
47100                 }, this);
47101             },
47102
47103
47104             // Load notes from the API in tiles
47105             // GET /api/0.6/notes?bbox=
47106             loadNotes: function(projection, noteOptions) {
47107                 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
47108                 if (_off) return;
47109
47110                 var that = this;
47111                 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
47112                 var throttleLoadUsers = throttle(function() {
47113                     var uids = Object.keys(_userCache.toLoad);
47114                     if (!uids.length) return;
47115                     that.loadUsers(uids, function() {});  // eagerly load user details
47116                 }, 750);
47117
47118                 // determine the needed tiles to cover the view
47119                 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
47120
47121                 // abort inflight requests that are no longer needed
47122                 abortUnwantedRequests$2(_noteCache, tiles);
47123
47124                 // issue new requests..
47125                 tiles.forEach(function(tile) {
47126                     if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
47127
47128                     var options = { skipSeen: false };
47129                     _noteCache.inflight[tile.id] = that.loadFromAPI(
47130                         path + tile.extent.toParam(),
47131                         function(err) {
47132                             delete _noteCache.inflight[tile.id];
47133                             if (!err) {
47134                                 _noteCache.loaded[tile.id] = true;
47135                             }
47136                             throttleLoadUsers();
47137                             dispatch$5.call('loadedNotes');
47138                         },
47139                         options
47140                     );
47141                 });
47142             },
47143
47144
47145             // Create a note
47146             // POST /api/0.6/notes?params
47147             postNoteCreate: function(note, callback) {
47148                 if (!this.authenticated()) {
47149                     return callback({ message: 'Not Authenticated', status: -3 }, note);
47150                 }
47151                 if (_noteCache.inflightPost[note.id]) {
47152                     return callback({ message: 'Note update already inflight', status: -2 }, note);
47153                 }
47154
47155                 if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
47156
47157                 var comment = note.newComment;
47158                 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
47159
47160                 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
47161
47162                 _noteCache.inflightPost[note.id] = oauth.xhr(
47163                     { method: 'POST', path: path },
47164                     wrapcb(this, done, _connectionID)
47165                 );
47166
47167
47168                 function done(err, xml) {
47169                     delete _noteCache.inflightPost[note.id];
47170                     if (err) { return callback(err); }
47171
47172                     // we get the updated note back, remove from caches and reparse..
47173                     this.removeNote(note);
47174
47175                     var options = { skipSeen: false };
47176                     return parseXML(xml, function(err, results) {
47177                         if (err) {
47178                             return callback(err);
47179                         } else {
47180                             return callback(undefined, results[0]);
47181                         }
47182                     }, options);
47183                 }
47184             },
47185
47186
47187             // Update a note
47188             // POST /api/0.6/notes/#id/comment?text=comment
47189             // POST /api/0.6/notes/#id/close?text=comment
47190             // POST /api/0.6/notes/#id/reopen?text=comment
47191             postNoteUpdate: function(note, newStatus, callback) {
47192                 if (!this.authenticated()) {
47193                     return callback({ message: 'Not Authenticated', status: -3 }, note);
47194                 }
47195                 if (_noteCache.inflightPost[note.id]) {
47196                     return callback({ message: 'Note update already inflight', status: -2 }, note);
47197                 }
47198
47199                 var action;
47200                 if (note.status !== 'closed' && newStatus === 'closed') {
47201                     action = 'close';
47202                 } else if (note.status !== 'open' && newStatus === 'open') {
47203                     action = 'reopen';
47204                 } else {
47205                     action = 'comment';
47206                     if (!note.newComment) return; // when commenting, comment required
47207                 }
47208
47209                 var path = '/api/0.6/notes/' + note.id + '/' + action;
47210                 if (note.newComment) {
47211                     path += '?' + utilQsString({ text: note.newComment });
47212                 }
47213
47214                 _noteCache.inflightPost[note.id] = oauth.xhr(
47215                     { method: 'POST', path: path },
47216                     wrapcb(this, done, _connectionID)
47217                 );
47218
47219
47220                 function done(err, xml) {
47221                     delete _noteCache.inflightPost[note.id];
47222                     if (err) { return callback(err); }
47223
47224                     // we get the updated note back, remove from caches and reparse..
47225                     this.removeNote(note);
47226
47227                     // update closed note cache - used to populate `closed:note` changeset tag
47228                     if (action === 'close') {
47229                         _noteCache.closed[note.id] = true;
47230                     } else if (action === 'reopen') {
47231                         delete _noteCache.closed[note.id];
47232                     }
47233
47234                     var options = { skipSeen: false };
47235                     return parseXML(xml, function(err, results) {
47236                         if (err) {
47237                             return callback(err);
47238                         } else {
47239                             return callback(undefined, results[0]);
47240                         }
47241                     }, options);
47242                 }
47243             },
47244
47245
47246             switch: function(options) {
47247                 urlroot = options.urlroot;
47248
47249                 oauth.options(Object.assign({
47250                     url: urlroot,
47251                     loading: authLoading,
47252                     done: authDone
47253                 }, options));
47254
47255                 this.reset();
47256                 this.userChangesets(function() {});  // eagerly load user details/changesets
47257                 dispatch$5.call('change');
47258                 return this;
47259             },
47260
47261
47262             toggle: function(val) {
47263                 _off = !val;
47264                 return this;
47265             },
47266
47267
47268             isChangesetInflight: function() {
47269                 return !!_changeset.inflight;
47270             },
47271
47272
47273             // get/set cached data
47274             // This is used to save/restore the state when entering/exiting the walkthrough
47275             // Also used for testing purposes.
47276             caches: function(obj) {
47277                 function cloneCache(source) {
47278                     var target = {};
47279                     Object.keys(source).forEach(function(k) {
47280                         if (k === 'rtree') {
47281                             target.rtree = rbush_1().fromJSON(source.rtree.toJSON());  // clone rbush
47282                         } else if (k === 'note') {
47283                             target.note = {};
47284                             Object.keys(source.note).forEach(function(id) {
47285                                 target.note[id] = osmNote(source.note[id]);   // copy notes
47286                             });
47287                         } else {
47288                             target[k] = JSON.parse(JSON.stringify(source[k]));   // clone deep
47289                         }
47290                     });
47291                     return target;
47292                 }
47293
47294                 if (!arguments.length) {
47295                     return {
47296                         tile: cloneCache(_tileCache),
47297                         note: cloneCache(_noteCache),
47298                         user: cloneCache(_userCache)
47299                     };
47300                 }
47301
47302                 // access caches directly for testing (e.g., loading notes rtree)
47303                 if (obj === 'get') {
47304                     return {
47305                         tile: _tileCache,
47306                         note: _noteCache,
47307                         user: _userCache
47308                     };
47309                 }
47310
47311                 if (obj.tile) {
47312                     _tileCache = obj.tile;
47313                     _tileCache.inflight = {};
47314                 }
47315                 if (obj.note) {
47316                     _noteCache = obj.note;
47317                     _noteCache.inflight = {};
47318                     _noteCache.inflightPost = {};
47319                 }
47320                 if (obj.user) {
47321                     _userCache = obj.user;
47322                 }
47323
47324                 return this;
47325             },
47326
47327
47328             logout: function() {
47329                 _userChangesets = undefined;
47330                 _userDetails = undefined;
47331                 oauth.logout();
47332                 dispatch$5.call('change');
47333                 return this;
47334             },
47335
47336
47337             authenticated: function() {
47338                 return oauth.authenticated();
47339             },
47340
47341
47342             authenticate: function(callback) {
47343                 var that = this;
47344                 var cid = _connectionID;
47345                 _userChangesets = undefined;
47346                 _userDetails = undefined;
47347
47348                 function done(err, res) {
47349                     if (err) {
47350                         if (callback) callback(err);
47351                         return;
47352                     }
47353                     if (that.getConnectionId() !== cid) {
47354                         if (callback) callback({ message: 'Connection Switched', status: -1 });
47355                         return;
47356                     }
47357                     _rateLimitError = undefined;
47358                     dispatch$5.call('change');
47359                     if (callback) callback(err, res);
47360                     that.userChangesets(function() {});  // eagerly load user details/changesets
47361                 }
47362
47363                 return oauth.authenticate(done);
47364             },
47365
47366
47367             imageryBlacklists: function() {
47368                 return _blacklists;
47369             },
47370
47371
47372             tileZoom: function(val) {
47373                 if (!arguments.length) return _tileZoom;
47374                 _tileZoom = val;
47375                 return this;
47376             },
47377
47378
47379             // get all cached notes covering the viewport
47380             notes: function(projection) {
47381                 var viewport = projection.clipExtent();
47382                 var min = [viewport[0][0], viewport[1][1]];
47383                 var max = [viewport[1][0], viewport[0][1]];
47384                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
47385
47386                 return _noteCache.rtree.search(bbox)
47387                     .map(function(d) { return d.data; });
47388             },
47389
47390
47391             // get a single note from the cache
47392             getNote: function(id) {
47393                 return _noteCache.note[id];
47394             },
47395
47396
47397             // remove a single note from the cache
47398             removeNote: function(note) {
47399                 if (!(note instanceof osmNote) || !note.id) return;
47400
47401                 delete _noteCache.note[note.id];
47402                 updateRtree$2(encodeNoteRtree(note), false);  // false = remove
47403             },
47404
47405
47406             // replace a single note in the cache
47407             replaceNote: function(note) {
47408                 if (!(note instanceof osmNote) || !note.id) return;
47409
47410                 _noteCache.note[note.id] = note;
47411                 updateRtree$2(encodeNoteRtree(note), true);  // true = replace
47412                 return note;
47413             },
47414
47415
47416             // Get an array of note IDs closed during this session.
47417             // Used to populate `closed:note` changeset tag
47418             getClosedIDs: function() {
47419                 return Object.keys(_noteCache.closed).sort();
47420             }
47421
47422         };
47423
47424         var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
47425         var _inflight$1 = {};
47426         var _wikibaseCache = {};
47427         var _localeIDs = { en: false };
47428
47429
47430         var debouncedRequest = debounce(request, 500, { leading: false });
47431
47432         function request(url, callback) {
47433             if (_inflight$1[url]) return;
47434             var controller = new AbortController();
47435             _inflight$1[url] = controller;
47436
47437             d3_json(url, { signal: controller.signal })
47438                 .then(function(result) {
47439                     delete _inflight$1[url];
47440                     if (callback) callback(null, result);
47441                 })
47442                 .catch(function(err) {
47443                     delete _inflight$1[url];
47444                     if (err.name === 'AbortError') return;
47445                     if (callback) callback(err.message);
47446                 });
47447         }
47448
47449
47450         /**
47451          * Get the best string value from the descriptions/labels result
47452          * Note that if mediawiki doesn't recognize language code, it will return all values.
47453          * In that case, fallback to use English.
47454          * @param values object - either descriptions or labels
47455          * @param langCode String
47456          * @returns localized string
47457          */
47458         function localizedToString(values, langCode) {
47459             if (values) {
47460                 values = values[langCode] || values.en;
47461             }
47462             return values ? values.value : '';
47463         }
47464
47465
47466         var serviceOsmWikibase = {
47467
47468             init: function() {
47469                 _inflight$1 = {};
47470                 _wikibaseCache = {};
47471                 _localeIDs = {};
47472             },
47473
47474
47475             reset: function() {
47476                 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
47477                 _inflight$1 = {};
47478             },
47479
47480
47481             /**
47482              * Get the best value for the property, or undefined if not found
47483              * @param entity object from wikibase
47484              * @param property string e.g. 'P4' for image
47485              * @param langCode string e.g. 'fr' for French
47486              */
47487             claimToValue: function(entity, property, langCode) {
47488                 if (!entity.claims[property]) return undefined;
47489                 var locale = _localeIDs[langCode];
47490                 var preferredPick, localePick;
47491
47492                 entity.claims[property].forEach(function(stmt) {
47493                     // If exists, use value limited to the needed language (has a qualifier P26 = locale)
47494                     // Or if not found, use the first value with the "preferred" rank
47495                     if (!preferredPick && stmt.rank === 'preferred') {
47496                         preferredPick = stmt;
47497                     }
47498                     if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
47499                         stmt.qualifiers.P26[0].datavalue.value.id === locale
47500                     ) {
47501                         localePick = stmt;
47502                     }
47503                 });
47504
47505                 var result = localePick || preferredPick;
47506                 if (result) {
47507                     var datavalue = result.mainsnak.datavalue;
47508                     return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
47509                 } else {
47510                     return undefined;
47511                 }
47512             },
47513
47514
47515             /**
47516              * Convert monolingual property into a key-value object (language -> value)
47517              * @param entity object from wikibase
47518              * @param property string e.g. 'P31' for monolingual wiki page title
47519              */
47520             monolingualClaimToValueObj: function(entity, property) {
47521                 if (!entity || !entity.claims[property]) return undefined;
47522
47523                 return entity.claims[property].reduce(function(acc, obj) {
47524                     var value = obj.mainsnak.datavalue.value;
47525                     acc[value.language] = value.text;
47526                     return acc;
47527                 }, {});
47528             },
47529
47530
47531             toSitelink: function(key, value) {
47532                 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
47533                 return result.replace(/_/g, ' ').trim();
47534             },
47535
47536
47537             //
47538             // Pass params object of the form:
47539             // {
47540             //   key: 'string',
47541             //   value: 'string',
47542             //   rtype: 'string',
47543             //   langCode: 'string'
47544             // }
47545             //
47546             getEntity: function(params, callback) {
47547                 var doRequest = params.debounce ? debouncedRequest : request;
47548                 var that = this;
47549                 var titles = [];
47550                 var result = {};
47551                 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
47552                 var keySitelink = params.key ? this.toSitelink(params.key) : false;
47553                 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
47554                 var localeSitelink;
47555
47556                 if (params.langCode && _localeIDs[params.langCode] === undefined) {
47557                     // If this is the first time we are asking about this locale,
47558                     // fetch corresponding entity (if it exists), and cache it.
47559                     // If there is no such entry, cache `false` value to avoid re-requesting it.
47560                     localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
47561                     titles.push(localeSitelink);
47562                 }
47563
47564                 if (rtypeSitelink) {
47565                     if (_wikibaseCache[rtypeSitelink]) {
47566                         result.rtype = _wikibaseCache[rtypeSitelink];
47567                     } else {
47568                         titles.push(rtypeSitelink);
47569                     }
47570                 }
47571
47572                 if (keySitelink) {
47573                     if (_wikibaseCache[keySitelink]) {
47574                         result.key = _wikibaseCache[keySitelink];
47575                     } else {
47576                         titles.push(keySitelink);
47577                     }
47578                 }
47579
47580                 if (tagSitelink) {
47581                     if (_wikibaseCache[tagSitelink]) {
47582                         result.tag = _wikibaseCache[tagSitelink];
47583                     } else {
47584                         titles.push(tagSitelink);
47585                     }
47586                 }
47587
47588                 if (!titles.length) {
47589                     // Nothing to do, we already had everything in the cache
47590                     return callback(null, result);
47591                 }
47592
47593                 // Requesting just the user language code
47594                 // If backend recognizes the code, it will perform proper fallbacks,
47595                 // and the result will contain the requested code. If not, all values are returned:
47596                 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
47597                 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
47598                 var obj = {
47599                     action: 'wbgetentities',
47600                     sites: 'wiki',
47601                     titles: titles.join('|'),
47602                     languages: params.langCode,
47603                     languagefallback: 1,
47604                     origin: '*',
47605                     format: 'json',
47606                     // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
47607                     // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
47608                     // formatversion: 2,
47609                 };
47610
47611                 var url = apibase$3 + '?' + utilQsString(obj);
47612                 doRequest(url, function(err, d) {
47613                     if (err) {
47614                         callback(err);
47615                     } else if (!d.success || d.error) {
47616                         callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
47617                     } else {
47618                         var localeID = false;
47619                         Object.values(d.entities).forEach(function(res) {
47620                             if (res.missing !== '') {
47621                                 // Simplify access to the localized values
47622                                 res.description = localizedToString(res.descriptions, params.langCode);
47623                                 res.label = localizedToString(res.labels, params.langCode);
47624
47625                                 var title = res.sitelinks.wiki.title;
47626                                 if (title === rtypeSitelink) {
47627                                     _wikibaseCache[rtypeSitelink] = res;
47628                                     result.rtype = res;
47629                                 } else if (title === keySitelink) {
47630                                     _wikibaseCache[keySitelink] = res;
47631                                     result.key = res;
47632                                 } else if (title === tagSitelink) {
47633                                     _wikibaseCache[tagSitelink] = res;
47634                                     result.tag = res;
47635                                 } else if (title === localeSitelink) {
47636                                     localeID = res.id;
47637                                 } else {
47638                                     console.log('Unexpected title ' + title);  // eslint-disable-line no-console
47639                                 }
47640                             }
47641                         });
47642
47643                         if (localeSitelink) {
47644                             // If locale ID is not found, store false to prevent repeated queries
47645                             that.addLocale(params.langCode, localeID);
47646                         }
47647
47648                         callback(null, result);
47649                     }
47650                 });
47651             },
47652
47653
47654             //
47655             // Pass params object of the form:
47656             // {
47657             //   key: 'string',     // required
47658             //   value: 'string'    // optional
47659             // }
47660             //   -or-
47661             // {
47662             //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
47663             // }
47664             //
47665             // Get an result object used to display tag documentation
47666             // {
47667             //   title:        'string',
47668             //   description:  'string',
47669             //   editURL:      'string',
47670             //   imageURL:     'string',
47671             //   wiki:         { title: 'string', text: 'string', url: 'string' }
47672             // }
47673             //
47674             getDocs: function(params, callback) {
47675                 var that = this;
47676                 var langCode = utilDetect().locale.toLowerCase();
47677                 params.langCode = langCode;
47678
47679                 this.getEntity(params, function(err, data) {
47680                     if (err) {
47681                         callback(err);
47682                         return;
47683                     }
47684
47685                     var entity = data.rtype || data.tag || data.key;
47686                     if (!entity) {
47687                         callback('No entity');
47688                         return;
47689                     }
47690
47691                     // prepare result
47692                     var result = {
47693                         title: entity.title,
47694                         description: entity.description,
47695                         editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
47696                     };
47697
47698                     // add image
47699                     if (entity.claims) {
47700                         var imageroot;
47701                         var image = that.claimToValue(entity, 'P4', langCode);
47702                         if (image) {
47703                             imageroot = 'https://commons.wikimedia.org/w/index.php';
47704                         } else {
47705                             image = that.claimToValue(entity, 'P28', langCode);
47706                             if (image) {
47707                                 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
47708                             }
47709                         }
47710                         if (imageroot && image) {
47711                             result.imageURL = imageroot + '?' + utilQsString({
47712                                 title: 'Special:Redirect/file/' + image,
47713                                 width: 400
47714                             });
47715                         }
47716                     }
47717
47718                     // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
47719                     // If neither tag nor key data item contain a wiki page in the needed language nor English,
47720                     // get the first found wiki page from either the tag or the key item.
47721                     var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
47722                     var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
47723                     var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
47724
47725                     // If exact language code does not exist, try to find the first part before the '-'
47726                     // BUG: in some cases, a more elaborate fallback logic might be needed
47727                     var langPrefix = langCode.split('-', 2)[0];
47728
47729                     // use the first acceptable wiki page
47730                     result.wiki =
47731                         getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
47732                         getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
47733                         getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
47734                         getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
47735                         getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
47736                         getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
47737                         getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
47738                         getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
47739                         getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
47740
47741                     callback(null, result);
47742
47743
47744                     // Helper method to get wiki info if a given language exists
47745                     function getWikiInfo(wiki, langCode, tKey) {
47746                         if (wiki && wiki[langCode]) {
47747                             return {
47748                                 title: wiki[langCode],
47749                                 text: tKey,
47750                                 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
47751                             };
47752                         }
47753                     }
47754                 });
47755             },
47756
47757
47758             addLocale: function(langCode, qid) {
47759                 // Makes it easier to unit test
47760                 _localeIDs[langCode] = qid;
47761             },
47762
47763
47764             apibase: function(val) {
47765                 if (!arguments.length) return apibase$3;
47766                 apibase$3 = val;
47767                 return this;
47768             }
47769
47770         };
47771
47772         var jsonpCache = {};
47773         window.jsonpCache = jsonpCache;
47774
47775         function jsonpRequest(url, callback) {
47776             var request = {
47777                 abort: function() {}
47778             };
47779
47780             if (window.JSONP_FIX) {
47781                 if (window.JSONP_DELAY === 0) {
47782                     callback(window.JSONP_FIX);
47783                 } else {
47784                     var t = window.setTimeout(function() {
47785                         callback(window.JSONP_FIX);
47786                     }, window.JSONP_DELAY || 0);
47787
47788                     request.abort = function() { window.clearTimeout(t); };
47789                 }
47790
47791                 return request;
47792             }
47793
47794             function rand() {
47795                 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
47796                 var c = '';
47797                 var i = -1;
47798                 while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
47799                 return c;
47800             }
47801
47802             function create(url) {
47803                 var e = url.match(/callback=(\w+)/);
47804                 var c = e ? e[1] : rand();
47805
47806                 jsonpCache[c] = function(data) {
47807                     if (jsonpCache[c]) {
47808                         callback(data);
47809                     }
47810                     finalize();
47811                 };
47812
47813                 function finalize() {
47814                     delete jsonpCache[c];
47815                     script.remove();
47816                 }
47817
47818                 request.abort = finalize;
47819                 return 'jsonpCache.' + c;
47820             }
47821
47822             var cb = create(url);
47823
47824             var script = d3_select('head')
47825                 .append('script')
47826                 .attr('type', 'text/javascript')
47827                 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
47828
47829             return request;
47830         }
47831
47832         var q = createCommonjsModule(function (module, exports) {
47833         // vim:ts=4:sts=4:sw=4:
47834         /*!
47835          *
47836          * Copyright 2009-2017 Kris Kowal under the terms of the MIT
47837          * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
47838          *
47839          * With parts by Tyler Close
47840          * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
47841          * at http://www.opensource.org/licenses/mit-license.html
47842          * Forked at ref_send.js version: 2009-05-11
47843          *
47844          * With parts by Mark Miller
47845          * Copyright (C) 2011 Google Inc.
47846          *
47847          * Licensed under the Apache License, Version 2.0 (the "License");
47848          * you may not use this file except in compliance with the License.
47849          * You may obtain a copy of the License at
47850          *
47851          * http://www.apache.org/licenses/LICENSE-2.0
47852          *
47853          * Unless required by applicable law or agreed to in writing, software
47854          * distributed under the License is distributed on an "AS IS" BASIS,
47855          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
47856          * See the License for the specific language governing permissions and
47857          * limitations under the License.
47858          *
47859          */
47860
47861         (function (definition) {
47862
47863             // This file will function properly as a <script> tag, or a module
47864             // using CommonJS and NodeJS or RequireJS module formats.  In
47865             // Common/Node/RequireJS, the module exports the Q API and when
47866             // executed as a simple <script>, it creates a Q global instead.
47867
47868             // Montage Require
47869             if (typeof bootstrap === "function") {
47870                 bootstrap("promise", definition);
47871
47872             // CommonJS
47873             } else {
47874                 module.exports = definition();
47875
47876             // RequireJS
47877             }
47878
47879         })(function () {
47880
47881         var hasStacks = false;
47882         try {
47883             throw new Error();
47884         } catch (e) {
47885             hasStacks = !!e.stack;
47886         }
47887
47888         // All code after this point will be filtered from stack traces reported
47889         // by Q.
47890         var qStartingLine = captureLine();
47891         var qFileName;
47892
47893         // shims
47894
47895         // used for fallback in "allResolved"
47896         var noop = function () {};
47897
47898         // Use the fastest possible means to execute a task in a future turn
47899         // of the event loop.
47900         var nextTick =(function () {
47901             // linked list of tasks (single, with head node)
47902             var head = {task: void 0, next: null};
47903             var tail = head;
47904             var flushing = false;
47905             var requestTick = void 0;
47906             var isNodeJS = false;
47907             // queue for late tasks, used by unhandled rejection tracking
47908             var laterQueue = [];
47909
47910             function flush() {
47911                 /* jshint loopfunc: true */
47912                 var task, domain;
47913
47914                 while (head.next) {
47915                     head = head.next;
47916                     task = head.task;
47917                     head.task = void 0;
47918                     domain = head.domain;
47919
47920                     if (domain) {
47921                         head.domain = void 0;
47922                         domain.enter();
47923                     }
47924                     runSingle(task, domain);
47925
47926                 }
47927                 while (laterQueue.length) {
47928                     task = laterQueue.pop();
47929                     runSingle(task);
47930                 }
47931                 flushing = false;
47932             }
47933             // runs a single function in the async queue
47934             function runSingle(task, domain) {
47935                 try {
47936                     task();
47937
47938                 } catch (e) {
47939                     if (isNodeJS) {
47940                         // In node, uncaught exceptions are considered fatal errors.
47941                         // Re-throw them synchronously to interrupt flushing!
47942
47943                         // Ensure continuation if the uncaught exception is suppressed
47944                         // listening "uncaughtException" events (as domains does).
47945                         // Continue in next event to avoid tick recursion.
47946                         if (domain) {
47947                             domain.exit();
47948                         }
47949                         setTimeout(flush, 0);
47950                         if (domain) {
47951                             domain.enter();
47952                         }
47953
47954                         throw e;
47955
47956                     } else {
47957                         // In browsers, uncaught exceptions are not fatal.
47958                         // Re-throw them asynchronously to avoid slow-downs.
47959                         setTimeout(function () {
47960                             throw e;
47961                         }, 0);
47962                     }
47963                 }
47964
47965                 if (domain) {
47966                     domain.exit();
47967                 }
47968             }
47969
47970             nextTick = function (task) {
47971                 tail = tail.next = {
47972                     task: task,
47973                     domain: isNodeJS && process.domain,
47974                     next: null
47975                 };
47976
47977                 if (!flushing) {
47978                     flushing = true;
47979                     requestTick();
47980                 }
47981             };
47982
47983             if (typeof process === "object" &&
47984                 process.toString() === "[object process]" && process.nextTick) {
47985                 // Ensure Q is in a real Node environment, with a `process.nextTick`.
47986                 // To see through fake Node environments:
47987                 // * Mocha test runner - exposes a `process` global without a `nextTick`
47988                 // * Browserify - exposes a `process.nexTick` function that uses
47989                 //   `setTimeout`. In this case `setImmediate` is preferred because
47990                 //    it is faster. Browserify's `process.toString()` yields
47991                 //   "[object Object]", while in a real Node environment
47992                 //   `process.toString()` yields "[object process]".
47993                 isNodeJS = true;
47994
47995                 requestTick = function () {
47996                     process.nextTick(flush);
47997                 };
47998
47999             } else if (typeof setImmediate === "function") {
48000                 // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate
48001                 if (typeof window !== "undefined") {
48002                     requestTick = setImmediate.bind(window, flush);
48003                 } else {
48004                     requestTick = function () {
48005                         setImmediate(flush);
48006                     };
48007                 }
48008
48009             } else if (typeof MessageChannel !== "undefined") {
48010                 // modern browsers
48011                 // http://www.nonblocking.io/2011/06/windownexttick.html
48012                 var channel = new MessageChannel();
48013                 // At least Safari Version 6.0.5 (8536.30.1) intermittently cannot create
48014                 // working message ports the first time a page loads.
48015                 channel.port1.onmessage = function () {
48016                     requestTick = requestPortTick;
48017                     channel.port1.onmessage = flush;
48018                     flush();
48019                 };
48020                 var requestPortTick = function () {
48021                     // Opera requires us to provide a message payload, regardless of
48022                     // whether we use it.
48023                     channel.port2.postMessage(0);
48024                 };
48025                 requestTick = function () {
48026                     setTimeout(flush, 0);
48027                     requestPortTick();
48028                 };
48029
48030             } else {
48031                 // old browsers
48032                 requestTick = function () {
48033                     setTimeout(flush, 0);
48034                 };
48035             }
48036             // runs a task after all other tasks have been run
48037             // this is useful for unhandled rejection tracking that needs to happen
48038             // after all `then`d tasks have been run.
48039             nextTick.runAfter = function (task) {
48040                 laterQueue.push(task);
48041                 if (!flushing) {
48042                     flushing = true;
48043                     requestTick();
48044                 }
48045             };
48046             return nextTick;
48047         })();
48048
48049         // Attempt to make generics safe in the face of downstream
48050         // modifications.
48051         // There is no situation where this is necessary.
48052         // If you need a security guarantee, these primordials need to be
48053         // deeply frozen anyway, and if you don’t need a security guarantee,
48054         // this is just plain paranoid.
48055         // However, this **might** have the nice side-effect of reducing the size of
48056         // the minified code by reducing x.call() to merely x()
48057         // See Mark Miller’s explanation of what this does.
48058         // http://wiki.ecmascript.org/doku.php?id=conventions:safe_meta_programming
48059         var call = Function.call;
48060         function uncurryThis(f) {
48061             return function () {
48062                 return call.apply(f, arguments);
48063             };
48064         }
48065         // This is equivalent, but slower:
48066         // uncurryThis = Function_bind.bind(Function_bind.call);
48067         // http://jsperf.com/uncurrythis
48068
48069         var array_slice = uncurryThis(Array.prototype.slice);
48070
48071         var array_reduce = uncurryThis(
48072             Array.prototype.reduce || function (callback, basis) {
48073                 var index = 0,
48074                     length = this.length;
48075                 // concerning the initial value, if one is not provided
48076                 if (arguments.length === 1) {
48077                     // seek to the first value in the array, accounting
48078                     // for the possibility that is is a sparse array
48079                     do {
48080                         if (index in this) {
48081                             basis = this[index++];
48082                             break;
48083                         }
48084                         if (++index >= length) {
48085                             throw new TypeError();
48086                         }
48087                     } while (1);
48088                 }
48089                 // reduce
48090                 for (; index < length; index++) {
48091                     // account for the possibility that the array is sparse
48092                     if (index in this) {
48093                         basis = callback(basis, this[index], index);
48094                     }
48095                 }
48096                 return basis;
48097             }
48098         );
48099
48100         var array_indexOf = uncurryThis(
48101             Array.prototype.indexOf || function (value) {
48102                 // not a very good shim, but good enough for our one use of it
48103                 for (var i = 0; i < this.length; i++) {
48104                     if (this[i] === value) {
48105                         return i;
48106                     }
48107                 }
48108                 return -1;
48109             }
48110         );
48111
48112         var array_map = uncurryThis(
48113             Array.prototype.map || function (callback, thisp) {
48114                 var self = this;
48115                 var collect = [];
48116                 array_reduce(self, function (undefined$1, value, index) {
48117                     collect.push(callback.call(thisp, value, index, self));
48118                 }, void 0);
48119                 return collect;
48120             }
48121         );
48122
48123         var object_create = Object.create || function (prototype) {
48124             function Type() { }
48125             Type.prototype = prototype;
48126             return new Type();
48127         };
48128
48129         var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
48130             obj[prop] = descriptor.value;
48131             return obj;
48132         };
48133
48134         var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
48135
48136         var object_keys = Object.keys || function (object) {
48137             var keys = [];
48138             for (var key in object) {
48139                 if (object_hasOwnProperty(object, key)) {
48140                     keys.push(key);
48141                 }
48142             }
48143             return keys;
48144         };
48145
48146         var object_toString = uncurryThis(Object.prototype.toString);
48147
48148         function isObject(value) {
48149             return value === Object(value);
48150         }
48151
48152         // generator related shims
48153
48154         // FIXME: Remove this function once ES6 generators are in SpiderMonkey.
48155         function isStopIteration(exception) {
48156             return (
48157                 object_toString(exception) === "[object StopIteration]" ||
48158                 exception instanceof QReturnValue
48159             );
48160         }
48161
48162         // FIXME: Remove this helper and Q.return once ES6 generators are in
48163         // SpiderMonkey.
48164         var QReturnValue;
48165         if (typeof ReturnValue !== "undefined") {
48166             QReturnValue = ReturnValue;
48167         } else {
48168             QReturnValue = function (value) {
48169                 this.value = value;
48170             };
48171         }
48172
48173         // long stack traces
48174
48175         var STACK_JUMP_SEPARATOR = "From previous event:";
48176
48177         function makeStackTraceLong(error, promise) {
48178             // If possible, transform the error stack trace by removing Node and Q
48179             // cruft, then concatenating with the stack trace of `promise`. See #57.
48180             if (hasStacks &&
48181                 promise.stack &&
48182                 typeof error === "object" &&
48183                 error !== null &&
48184                 error.stack
48185             ) {
48186                 var stacks = [];
48187                 for (var p = promise; !!p; p = p.source) {
48188                     if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
48189                         object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
48190                         stacks.unshift(p.stack);
48191                     }
48192                 }
48193                 stacks.unshift(error.stack);
48194
48195                 var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
48196                 var stack = filterStackString(concatedStacks);
48197                 object_defineProperty(error, "stack", {value: stack, configurable: true});
48198             }
48199         }
48200
48201         function filterStackString(stackString) {
48202             var lines = stackString.split("\n");
48203             var desiredLines = [];
48204             for (var i = 0; i < lines.length; ++i) {
48205                 var line = lines[i];
48206
48207                 if (!isInternalFrame(line) && !isNodeFrame(line) && line) {
48208                     desiredLines.push(line);
48209                 }
48210             }
48211             return desiredLines.join("\n");
48212         }
48213
48214         function isNodeFrame(stackLine) {
48215             return stackLine.indexOf("(module.js:") !== -1 ||
48216                    stackLine.indexOf("(node.js:") !== -1;
48217         }
48218
48219         function getFileNameAndLineNumber(stackLine) {
48220             // Named functions: "at functionName (filename:lineNumber:columnNumber)"
48221             // In IE10 function name can have spaces ("Anonymous function") O_o
48222             var attempt1 = /at .+ \((.+):(\d+):(?:\d+)\)$/.exec(stackLine);
48223             if (attempt1) {
48224                 return [attempt1[1], Number(attempt1[2])];
48225             }
48226
48227             // Anonymous functions: "at filename:lineNumber:columnNumber"
48228             var attempt2 = /at ([^ ]+):(\d+):(?:\d+)$/.exec(stackLine);
48229             if (attempt2) {
48230                 return [attempt2[1], Number(attempt2[2])];
48231             }
48232
48233             // Firefox style: "function@filename:lineNumber or @filename:lineNumber"
48234             var attempt3 = /.*@(.+):(\d+)$/.exec(stackLine);
48235             if (attempt3) {
48236                 return [attempt3[1], Number(attempt3[2])];
48237             }
48238         }
48239
48240         function isInternalFrame(stackLine) {
48241             var fileNameAndLineNumber = getFileNameAndLineNumber(stackLine);
48242
48243             if (!fileNameAndLineNumber) {
48244                 return false;
48245             }
48246
48247             var fileName = fileNameAndLineNumber[0];
48248             var lineNumber = fileNameAndLineNumber[1];
48249
48250             return fileName === qFileName &&
48251                 lineNumber >= qStartingLine &&
48252                 lineNumber <= qEndingLine;
48253         }
48254
48255         // discover own file name and line number range for filtering stack
48256         // traces
48257         function captureLine() {
48258             if (!hasStacks) {
48259                 return;
48260             }
48261
48262             try {
48263                 throw new Error();
48264             } catch (e) {
48265                 var lines = e.stack.split("\n");
48266                 var firstLine = lines[0].indexOf("@") > 0 ? lines[1] : lines[2];
48267                 var fileNameAndLineNumber = getFileNameAndLineNumber(firstLine);
48268                 if (!fileNameAndLineNumber) {
48269                     return;
48270                 }
48271
48272                 qFileName = fileNameAndLineNumber[0];
48273                 return fileNameAndLineNumber[1];
48274             }
48275         }
48276
48277         function deprecate(callback, name, alternative) {
48278             return function () {
48279                 if (typeof console !== "undefined" &&
48280                     typeof console.warn === "function") {
48281                     console.warn(name + " is deprecated, use " + alternative +
48282                                  " instead.", new Error("").stack);
48283                 }
48284                 return callback.apply(callback, arguments);
48285             };
48286         }
48287
48288         // end of shims
48289         // beginning of real work
48290
48291         /**
48292          * Constructs a promise for an immediate reference, passes promises through, or
48293          * coerces promises from different systems.
48294          * @param value immediate reference or promise
48295          */
48296         function Q(value) {
48297             // If the object is already a Promise, return it directly.  This enables
48298             // the resolve function to both be used to created references from objects,
48299             // but to tolerably coerce non-promises to promises.
48300             if (value instanceof Promise) {
48301                 return value;
48302             }
48303
48304             // assimilate thenables
48305             if (isPromiseAlike(value)) {
48306                 return coerce(value);
48307             } else {
48308                 return fulfill(value);
48309             }
48310         }
48311         Q.resolve = Q;
48312
48313         /**
48314          * Performs a task in a future turn of the event loop.
48315          * @param {Function} task
48316          */
48317         Q.nextTick = nextTick;
48318
48319         /**
48320          * Controls whether or not long stack traces will be on
48321          */
48322         Q.longStackSupport = false;
48323
48324         /**
48325          * The counter is used to determine the stopping point for building
48326          * long stack traces. In makeStackTraceLong we walk backwards through
48327          * the linked list of promises, only stacks which were created before
48328          * the rejection are concatenated.
48329          */
48330         var longStackCounter = 1;
48331
48332         // enable long stacks if Q_DEBUG is set
48333         if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
48334             Q.longStackSupport = true;
48335         }
48336
48337         /**
48338          * Constructs a {promise, resolve, reject} object.
48339          *
48340          * `resolve` is a callback to invoke with a more resolved value for the
48341          * promise. To fulfill the promise, invoke `resolve` with any value that is
48342          * not a thenable. To reject the promise, invoke `resolve` with a rejected
48343          * thenable, or invoke `reject` with the reason directly. To resolve the
48344          * promise to another thenable, thus putting it in the same state, invoke
48345          * `resolve` with that other thenable.
48346          */
48347         Q.defer = defer;
48348         function defer() {
48349             // if "messages" is an "Array", that indicates that the promise has not yet
48350             // been resolved.  If it is "undefined", it has been resolved.  Each
48351             // element of the messages array is itself an array of complete arguments to
48352             // forward to the resolved promise.  We coerce the resolution value to a
48353             // promise using the `resolve` function because it handles both fully
48354             // non-thenable values and other thenables gracefully.
48355             var messages = [], progressListeners = [], resolvedPromise;
48356
48357             var deferred = object_create(defer.prototype);
48358             var promise = object_create(Promise.prototype);
48359
48360             promise.promiseDispatch = function (resolve, op, operands) {
48361                 var args = array_slice(arguments);
48362                 if (messages) {
48363                     messages.push(args);
48364                     if (op === "when" && operands[1]) { // progress operand
48365                         progressListeners.push(operands[1]);
48366                     }
48367                 } else {
48368                     Q.nextTick(function () {
48369                         resolvedPromise.promiseDispatch.apply(resolvedPromise, args);
48370                     });
48371                 }
48372             };
48373
48374             // XXX deprecated
48375             promise.valueOf = function () {
48376                 if (messages) {
48377                     return promise;
48378                 }
48379                 var nearerValue = nearer(resolvedPromise);
48380                 if (isPromise(nearerValue)) {
48381                     resolvedPromise = nearerValue; // shorten chain
48382                 }
48383                 return nearerValue;
48384             };
48385
48386             promise.inspect = function () {
48387                 if (!resolvedPromise) {
48388                     return { state: "pending" };
48389                 }
48390                 return resolvedPromise.inspect();
48391             };
48392
48393             if (Q.longStackSupport && hasStacks) {
48394                 try {
48395                     throw new Error();
48396                 } catch (e) {
48397                     // NOTE: don't try to use `Error.captureStackTrace` or transfer the
48398                     // accessor around; that causes memory leaks as per GH-111. Just
48399                     // reify the stack trace as a string ASAP.
48400                     //
48401                     // At the same time, cut off the first line; it's always just
48402                     // "[object Promise]\n", as per the `toString`.
48403                     promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
48404                     promise.stackCounter = longStackCounter++;
48405                 }
48406             }
48407
48408             // NOTE: we do the checks for `resolvedPromise` in each method, instead of
48409             // consolidating them into `become`, since otherwise we'd create new
48410             // promises with the lines `become(whatever(value))`. See e.g. GH-252.
48411
48412             function become(newPromise) {
48413                 resolvedPromise = newPromise;
48414
48415                 if (Q.longStackSupport && hasStacks) {
48416                     // Only hold a reference to the new promise if long stacks
48417                     // are enabled to reduce memory usage
48418                     promise.source = newPromise;
48419                 }
48420
48421                 array_reduce(messages, function (undefined$1, message) {
48422                     Q.nextTick(function () {
48423                         newPromise.promiseDispatch.apply(newPromise, message);
48424                     });
48425                 }, void 0);
48426
48427                 messages = void 0;
48428                 progressListeners = void 0;
48429             }
48430
48431             deferred.promise = promise;
48432             deferred.resolve = function (value) {
48433                 if (resolvedPromise) {
48434                     return;
48435                 }
48436
48437                 become(Q(value));
48438             };
48439
48440             deferred.fulfill = function (value) {
48441                 if (resolvedPromise) {
48442                     return;
48443                 }
48444
48445                 become(fulfill(value));
48446             };
48447             deferred.reject = function (reason) {
48448                 if (resolvedPromise) {
48449                     return;
48450                 }
48451
48452                 become(reject(reason));
48453             };
48454             deferred.notify = function (progress) {
48455                 if (resolvedPromise) {
48456                     return;
48457                 }
48458
48459                 array_reduce(progressListeners, function (undefined$1, progressListener) {
48460                     Q.nextTick(function () {
48461                         progressListener(progress);
48462                     });
48463                 }, void 0);
48464             };
48465
48466             return deferred;
48467         }
48468
48469         /**
48470          * Creates a Node-style callback that will resolve or reject the deferred
48471          * promise.
48472          * @returns a nodeback
48473          */
48474         defer.prototype.makeNodeResolver = function () {
48475             var self = this;
48476             return function (error, value) {
48477                 if (error) {
48478                     self.reject(error);
48479                 } else if (arguments.length > 2) {
48480                     self.resolve(array_slice(arguments, 1));
48481                 } else {
48482                     self.resolve(value);
48483                 }
48484             };
48485         };
48486
48487         /**
48488          * @param resolver {Function} a function that returns nothing and accepts
48489          * the resolve, reject, and notify functions for a deferred.
48490          * @returns a promise that may be resolved with the given resolve and reject
48491          * functions, or rejected by a thrown exception in resolver
48492          */
48493         Q.Promise = promise; // ES6
48494         Q.promise = promise;
48495         function promise(resolver) {
48496             if (typeof resolver !== "function") {
48497                 throw new TypeError("resolver must be a function.");
48498             }
48499             var deferred = defer();
48500             try {
48501                 resolver(deferred.resolve, deferred.reject, deferred.notify);
48502             } catch (reason) {
48503                 deferred.reject(reason);
48504             }
48505             return deferred.promise;
48506         }
48507
48508         promise.race = race; // ES6
48509         promise.all = all; // ES6
48510         promise.reject = reject; // ES6
48511         promise.resolve = Q; // ES6
48512
48513         // XXX experimental.  This method is a way to denote that a local value is
48514         // serializable and should be immediately dispatched to a remote upon request,
48515         // instead of passing a reference.
48516         Q.passByCopy = function (object) {
48517             //freeze(object);
48518             //passByCopies.set(object, true);
48519             return object;
48520         };
48521
48522         Promise.prototype.passByCopy = function () {
48523             //freeze(object);
48524             //passByCopies.set(object, true);
48525             return this;
48526         };
48527
48528         /**
48529          * If two promises eventually fulfill to the same value, promises that value,
48530          * but otherwise rejects.
48531          * @param x {Any*}
48532          * @param y {Any*}
48533          * @returns {Any*} a promise for x and y if they are the same, but a rejection
48534          * otherwise.
48535          *
48536          */
48537         Q.join = function (x, y) {
48538             return Q(x).join(y);
48539         };
48540
48541         Promise.prototype.join = function (that) {
48542             return Q([this, that]).spread(function (x, y) {
48543                 if (x === y) {
48544                     // TODO: "===" should be Object.is or equiv
48545                     return x;
48546                 } else {
48547                     throw new Error("Q can't join: not the same: " + x + " " + y);
48548                 }
48549             });
48550         };
48551
48552         /**
48553          * Returns a promise for the first of an array of promises to become settled.
48554          * @param answers {Array[Any*]} promises to race
48555          * @returns {Any*} the first promise to be settled
48556          */
48557         Q.race = race;
48558         function race(answerPs) {
48559             return promise(function (resolve, reject) {
48560                 // Switch to this once we can assume at least ES5
48561                 // answerPs.forEach(function (answerP) {
48562                 //     Q(answerP).then(resolve, reject);
48563                 // });
48564                 // Use this in the meantime
48565                 for (var i = 0, len = answerPs.length; i < len; i++) {
48566                     Q(answerPs[i]).then(resolve, reject);
48567                 }
48568             });
48569         }
48570
48571         Promise.prototype.race = function () {
48572             return this.then(Q.race);
48573         };
48574
48575         /**
48576          * Constructs a Promise with a promise descriptor object and optional fallback
48577          * function.  The descriptor contains methods like when(rejected), get(name),
48578          * set(name, value), post(name, args), and delete(name), which all
48579          * return either a value, a promise for a value, or a rejection.  The fallback
48580          * accepts the operation name, a resolver, and any further arguments that would
48581          * have been forwarded to the appropriate method above had a method been
48582          * provided with the proper name.  The API makes no guarantees about the nature
48583          * of the returned object, apart from that it is usable whereever promises are
48584          * bought and sold.
48585          */
48586         Q.makePromise = Promise;
48587         function Promise(descriptor, fallback, inspect) {
48588             if (fallback === void 0) {
48589                 fallback = function (op) {
48590                     return reject(new Error(
48591                         "Promise does not support operation: " + op
48592                     ));
48593                 };
48594             }
48595             if (inspect === void 0) {
48596                 inspect = function () {
48597                     return {state: "unknown"};
48598                 };
48599             }
48600
48601             var promise = object_create(Promise.prototype);
48602
48603             promise.promiseDispatch = function (resolve, op, args) {
48604                 var result;
48605                 try {
48606                     if (descriptor[op]) {
48607                         result = descriptor[op].apply(promise, args);
48608                     } else {
48609                         result = fallback.call(promise, op, args);
48610                     }
48611                 } catch (exception) {
48612                     result = reject(exception);
48613                 }
48614                 if (resolve) {
48615                     resolve(result);
48616                 }
48617             };
48618
48619             promise.inspect = inspect;
48620
48621             // XXX deprecated `valueOf` and `exception` support
48622             if (inspect) {
48623                 var inspected = inspect();
48624                 if (inspected.state === "rejected") {
48625                     promise.exception = inspected.reason;
48626                 }
48627
48628                 promise.valueOf = function () {
48629                     var inspected = inspect();
48630                     if (inspected.state === "pending" ||
48631                         inspected.state === "rejected") {
48632                         return promise;
48633                     }
48634                     return inspected.value;
48635                 };
48636             }
48637
48638             return promise;
48639         }
48640
48641         Promise.prototype.toString = function () {
48642             return "[object Promise]";
48643         };
48644
48645         Promise.prototype.then = function (fulfilled, rejected, progressed) {
48646             var self = this;
48647             var deferred = defer();
48648             var done = false;   // ensure the untrusted promise makes at most a
48649                                 // single call to one of the callbacks
48650
48651             function _fulfilled(value) {
48652                 try {
48653                     return typeof fulfilled === "function" ? fulfilled(value) : value;
48654                 } catch (exception) {
48655                     return reject(exception);
48656                 }
48657             }
48658
48659             function _rejected(exception) {
48660                 if (typeof rejected === "function") {
48661                     makeStackTraceLong(exception, self);
48662                     try {
48663                         return rejected(exception);
48664                     } catch (newException) {
48665                         return reject(newException);
48666                     }
48667                 }
48668                 return reject(exception);
48669             }
48670
48671             function _progressed(value) {
48672                 return typeof progressed === "function" ? progressed(value) : value;
48673             }
48674
48675             Q.nextTick(function () {
48676                 self.promiseDispatch(function (value) {
48677                     if (done) {
48678                         return;
48679                     }
48680                     done = true;
48681
48682                     deferred.resolve(_fulfilled(value));
48683                 }, "when", [function (exception) {
48684                     if (done) {
48685                         return;
48686                     }
48687                     done = true;
48688
48689                     deferred.resolve(_rejected(exception));
48690                 }]);
48691             });
48692
48693             // Progress propagator need to be attached in the current tick.
48694             self.promiseDispatch(void 0, "when", [void 0, function (value) {
48695                 var newValue;
48696                 var threw = false;
48697                 try {
48698                     newValue = _progressed(value);
48699                 } catch (e) {
48700                     threw = true;
48701                     if (Q.onerror) {
48702                         Q.onerror(e);
48703                     } else {
48704                         throw e;
48705                     }
48706                 }
48707
48708                 if (!threw) {
48709                     deferred.notify(newValue);
48710                 }
48711             }]);
48712
48713             return deferred.promise;
48714         };
48715
48716         Q.tap = function (promise, callback) {
48717             return Q(promise).tap(callback);
48718         };
48719
48720         /**
48721          * Works almost like "finally", but not called for rejections.
48722          * Original resolution value is passed through callback unaffected.
48723          * Callback may return a promise that will be awaited for.
48724          * @param {Function} callback
48725          * @returns {Q.Promise}
48726          * @example
48727          * doSomething()
48728          *   .then(...)
48729          *   .tap(console.log)
48730          *   .then(...);
48731          */
48732         Promise.prototype.tap = function (callback) {
48733             callback = Q(callback);
48734
48735             return this.then(function (value) {
48736                 return callback.fcall(value).thenResolve(value);
48737             });
48738         };
48739
48740         /**
48741          * Registers an observer on a promise.
48742          *
48743          * Guarantees:
48744          *
48745          * 1. that fulfilled and rejected will be called only once.
48746          * 2. that either the fulfilled callback or the rejected callback will be
48747          *    called, but not both.
48748          * 3. that fulfilled and rejected will not be called in this turn.
48749          *
48750          * @param value      promise or immediate reference to observe
48751          * @param fulfilled  function to be called with the fulfilled value
48752          * @param rejected   function to be called with the rejection exception
48753          * @param progressed function to be called on any progress notifications
48754          * @return promise for the return value from the invoked callback
48755          */
48756         Q.when = when;
48757         function when(value, fulfilled, rejected, progressed) {
48758             return Q(value).then(fulfilled, rejected, progressed);
48759         }
48760
48761         Promise.prototype.thenResolve = function (value) {
48762             return this.then(function () { return value; });
48763         };
48764
48765         Q.thenResolve = function (promise, value) {
48766             return Q(promise).thenResolve(value);
48767         };
48768
48769         Promise.prototype.thenReject = function (reason) {
48770             return this.then(function () { throw reason; });
48771         };
48772
48773         Q.thenReject = function (promise, reason) {
48774             return Q(promise).thenReject(reason);
48775         };
48776
48777         /**
48778          * If an object is not a promise, it is as "near" as possible.
48779          * If a promise is rejected, it is as "near" as possible too.
48780          * If it’s a fulfilled promise, the fulfillment value is nearer.
48781          * If it’s a deferred promise and the deferred has been resolved, the
48782          * resolution is "nearer".
48783          * @param object
48784          * @returns most resolved (nearest) form of the object
48785          */
48786
48787         // XXX should we re-do this?
48788         Q.nearer = nearer;
48789         function nearer(value) {
48790             if (isPromise(value)) {
48791                 var inspected = value.inspect();
48792                 if (inspected.state === "fulfilled") {
48793                     return inspected.value;
48794                 }
48795             }
48796             return value;
48797         }
48798
48799         /**
48800          * @returns whether the given object is a promise.
48801          * Otherwise it is a fulfilled value.
48802          */
48803         Q.isPromise = isPromise;
48804         function isPromise(object) {
48805             return object instanceof Promise;
48806         }
48807
48808         Q.isPromiseAlike = isPromiseAlike;
48809         function isPromiseAlike(object) {
48810             return isObject(object) && typeof object.then === "function";
48811         }
48812
48813         /**
48814          * @returns whether the given object is a pending promise, meaning not
48815          * fulfilled or rejected.
48816          */
48817         Q.isPending = isPending;
48818         function isPending(object) {
48819             return isPromise(object) && object.inspect().state === "pending";
48820         }
48821
48822         Promise.prototype.isPending = function () {
48823             return this.inspect().state === "pending";
48824         };
48825
48826         /**
48827          * @returns whether the given object is a value or fulfilled
48828          * promise.
48829          */
48830         Q.isFulfilled = isFulfilled;
48831         function isFulfilled(object) {
48832             return !isPromise(object) || object.inspect().state === "fulfilled";
48833         }
48834
48835         Promise.prototype.isFulfilled = function () {
48836             return this.inspect().state === "fulfilled";
48837         };
48838
48839         /**
48840          * @returns whether the given object is a rejected promise.
48841          */
48842         Q.isRejected = isRejected;
48843         function isRejected(object) {
48844             return isPromise(object) && object.inspect().state === "rejected";
48845         }
48846
48847         Promise.prototype.isRejected = function () {
48848             return this.inspect().state === "rejected";
48849         };
48850
48851         //// BEGIN UNHANDLED REJECTION TRACKING
48852
48853         // This promise library consumes exceptions thrown in handlers so they can be
48854         // handled by a subsequent promise.  The exceptions get added to this array when
48855         // they are created, and removed when they are handled.  Note that in ES6 or
48856         // shimmed environments, this would naturally be a `Set`.
48857         var unhandledReasons = [];
48858         var unhandledRejections = [];
48859         var reportedUnhandledRejections = [];
48860         var trackUnhandledRejections = true;
48861
48862         function resetUnhandledRejections() {
48863             unhandledReasons.length = 0;
48864             unhandledRejections.length = 0;
48865
48866             if (!trackUnhandledRejections) {
48867                 trackUnhandledRejections = true;
48868             }
48869         }
48870
48871         function trackRejection(promise, reason) {
48872             if (!trackUnhandledRejections) {
48873                 return;
48874             }
48875             if (typeof process === "object" && typeof process.emit === "function") {
48876                 Q.nextTick.runAfter(function () {
48877                     if (array_indexOf(unhandledRejections, promise) !== -1) {
48878                         process.emit("unhandledRejection", reason, promise);
48879                         reportedUnhandledRejections.push(promise);
48880                     }
48881                 });
48882             }
48883
48884             unhandledRejections.push(promise);
48885             if (reason && typeof reason.stack !== "undefined") {
48886                 unhandledReasons.push(reason.stack);
48887             } else {
48888                 unhandledReasons.push("(no stack) " + reason);
48889             }
48890         }
48891
48892         function untrackRejection(promise) {
48893             if (!trackUnhandledRejections) {
48894                 return;
48895             }
48896
48897             var at = array_indexOf(unhandledRejections, promise);
48898             if (at !== -1) {
48899                 if (typeof process === "object" && typeof process.emit === "function") {
48900                     Q.nextTick.runAfter(function () {
48901                         var atReport = array_indexOf(reportedUnhandledRejections, promise);
48902                         if (atReport !== -1) {
48903                             process.emit("rejectionHandled", unhandledReasons[at], promise);
48904                             reportedUnhandledRejections.splice(atReport, 1);
48905                         }
48906                     });
48907                 }
48908                 unhandledRejections.splice(at, 1);
48909                 unhandledReasons.splice(at, 1);
48910             }
48911         }
48912
48913         Q.resetUnhandledRejections = resetUnhandledRejections;
48914
48915         Q.getUnhandledReasons = function () {
48916             // Make a copy so that consumers can't interfere with our internal state.
48917             return unhandledReasons.slice();
48918         };
48919
48920         Q.stopUnhandledRejectionTracking = function () {
48921             resetUnhandledRejections();
48922             trackUnhandledRejections = false;
48923         };
48924
48925         resetUnhandledRejections();
48926
48927         //// END UNHANDLED REJECTION TRACKING
48928
48929         /**
48930          * Constructs a rejected promise.
48931          * @param reason value describing the failure
48932          */
48933         Q.reject = reject;
48934         function reject(reason) {
48935             var rejection = Promise({
48936                 "when": function (rejected) {
48937                     // note that the error has been handled
48938                     if (rejected) {
48939                         untrackRejection(this);
48940                     }
48941                     return rejected ? rejected(reason) : this;
48942                 }
48943             }, function fallback() {
48944                 return this;
48945             }, function inspect() {
48946                 return { state: "rejected", reason: reason };
48947             });
48948
48949             // Note that the reason has not been handled.
48950             trackRejection(rejection, reason);
48951
48952             return rejection;
48953         }
48954
48955         /**
48956          * Constructs a fulfilled promise for an immediate reference.
48957          * @param value immediate reference
48958          */
48959         Q.fulfill = fulfill;
48960         function fulfill(value) {
48961             return Promise({
48962                 "when": function () {
48963                     return value;
48964                 },
48965                 "get": function (name) {
48966                     return value[name];
48967                 },
48968                 "set": function (name, rhs) {
48969                     value[name] = rhs;
48970                 },
48971                 "delete": function (name) {
48972                     delete value[name];
48973                 },
48974                 "post": function (name, args) {
48975                     // Mark Miller proposes that post with no name should apply a
48976                     // promised function.
48977                     if (name === null || name === void 0) {
48978                         return value.apply(void 0, args);
48979                     } else {
48980                         return value[name].apply(value, args);
48981                     }
48982                 },
48983                 "apply": function (thisp, args) {
48984                     return value.apply(thisp, args);
48985                 },
48986                 "keys": function () {
48987                     return object_keys(value);
48988                 }
48989             }, void 0, function inspect() {
48990                 return { state: "fulfilled", value: value };
48991             });
48992         }
48993
48994         /**
48995          * Converts thenables to Q promises.
48996          * @param promise thenable promise
48997          * @returns a Q promise
48998          */
48999         function coerce(promise) {
49000             var deferred = defer();
49001             Q.nextTick(function () {
49002                 try {
49003                     promise.then(deferred.resolve, deferred.reject, deferred.notify);
49004                 } catch (exception) {
49005                     deferred.reject(exception);
49006                 }
49007             });
49008             return deferred.promise;
49009         }
49010
49011         /**
49012          * Annotates an object such that it will never be
49013          * transferred away from this process over any promise
49014          * communication channel.
49015          * @param object
49016          * @returns promise a wrapping of that object that
49017          * additionally responds to the "isDef" message
49018          * without a rejection.
49019          */
49020         Q.master = master;
49021         function master(object) {
49022             return Promise({
49023                 "isDef": function () {}
49024             }, function fallback(op, args) {
49025                 return dispatch(object, op, args);
49026             }, function () {
49027                 return Q(object).inspect();
49028             });
49029         }
49030
49031         /**
49032          * Spreads the values of a promised array of arguments into the
49033          * fulfillment callback.
49034          * @param fulfilled callback that receives variadic arguments from the
49035          * promised array
49036          * @param rejected callback that receives the exception if the promise
49037          * is rejected.
49038          * @returns a promise for the return value or thrown exception of
49039          * either callback.
49040          */
49041         Q.spread = spread;
49042         function spread(value, fulfilled, rejected) {
49043             return Q(value).spread(fulfilled, rejected);
49044         }
49045
49046         Promise.prototype.spread = function (fulfilled, rejected) {
49047             return this.all().then(function (array) {
49048                 return fulfilled.apply(void 0, array);
49049             }, rejected);
49050         };
49051
49052         /**
49053          * The async function is a decorator for generator functions, turning
49054          * them into asynchronous generators.  Although generators are only part
49055          * of the newest ECMAScript 6 drafts, this code does not cause syntax
49056          * errors in older engines.  This code should continue to work and will
49057          * in fact improve over time as the language improves.
49058          *
49059          * ES6 generators are currently part of V8 version 3.19 with the
49060          * --harmony-generators runtime flag enabled.  SpiderMonkey has had them
49061          * for longer, but under an older Python-inspired form.  This function
49062          * works on both kinds of generators.
49063          *
49064          * Decorates a generator function such that:
49065          *  - it may yield promises
49066          *  - execution will continue when that promise is fulfilled
49067          *  - the value of the yield expression will be the fulfilled value
49068          *  - it returns a promise for the return value (when the generator
49069          *    stops iterating)
49070          *  - the decorated function returns a promise for the return value
49071          *    of the generator or the first rejected promise among those
49072          *    yielded.
49073          *  - if an error is thrown in the generator, it propagates through
49074          *    every following yield until it is caught, or until it escapes
49075          *    the generator function altogether, and is translated into a
49076          *    rejection for the promise returned by the decorated generator.
49077          */
49078         Q.async = async;
49079         function async(makeGenerator) {
49080             return function () {
49081                 // when verb is "send", arg is a value
49082                 // when verb is "throw", arg is an exception
49083                 function continuer(verb, arg) {
49084                     var result;
49085
49086                     // Until V8 3.19 / Chromium 29 is released, SpiderMonkey is the only
49087                     // engine that has a deployed base of browsers that support generators.
49088                     // However, SM's generators use the Python-inspired semantics of
49089                     // outdated ES6 drafts.  We would like to support ES6, but we'd also
49090                     // like to make it possible to use generators in deployed browsers, so
49091                     // we also support Python-style generators.  At some point we can remove
49092                     // this block.
49093
49094                     if (typeof StopIteration === "undefined") {
49095                         // ES6 Generators
49096                         try {
49097                             result = generator[verb](arg);
49098                         } catch (exception) {
49099                             return reject(exception);
49100                         }
49101                         if (result.done) {
49102                             return Q(result.value);
49103                         } else {
49104                             return when(result.value, callback, errback);
49105                         }
49106                     } else {
49107                         // SpiderMonkey Generators
49108                         // FIXME: Remove this case when SM does ES6 generators.
49109                         try {
49110                             result = generator[verb](arg);
49111                         } catch (exception) {
49112                             if (isStopIteration(exception)) {
49113                                 return Q(exception.value);
49114                             } else {
49115                                 return reject(exception);
49116                             }
49117                         }
49118                         return when(result, callback, errback);
49119                     }
49120                 }
49121                 var generator = makeGenerator.apply(this, arguments);
49122                 var callback = continuer.bind(continuer, "next");
49123                 var errback = continuer.bind(continuer, "throw");
49124                 return callback();
49125             };
49126         }
49127
49128         /**
49129          * The spawn function is a small wrapper around async that immediately
49130          * calls the generator and also ends the promise chain, so that any
49131          * unhandled errors are thrown instead of forwarded to the error
49132          * handler. This is useful because it's extremely common to run
49133          * generators at the top-level to work with libraries.
49134          */
49135         Q.spawn = spawn;
49136         function spawn(makeGenerator) {
49137             Q.done(Q.async(makeGenerator)());
49138         }
49139
49140         // FIXME: Remove this interface once ES6 generators are in SpiderMonkey.
49141         /**
49142          * Throws a ReturnValue exception to stop an asynchronous generator.
49143          *
49144          * This interface is a stop-gap measure to support generator return
49145          * values in older Firefox/SpiderMonkey.  In browsers that support ES6
49146          * generators like Chromium 29, just use "return" in your generator
49147          * functions.
49148          *
49149          * @param value the return value for the surrounding generator
49150          * @throws ReturnValue exception with the value.
49151          * @example
49152          * // ES6 style
49153          * Q.async(function* () {
49154          *      var foo = yield getFooPromise();
49155          *      var bar = yield getBarPromise();
49156          *      return foo + bar;
49157          * })
49158          * // Older SpiderMonkey style
49159          * Q.async(function () {
49160          *      var foo = yield getFooPromise();
49161          *      var bar = yield getBarPromise();
49162          *      Q.return(foo + bar);
49163          * })
49164          */
49165         Q["return"] = _return;
49166         function _return(value) {
49167             throw new QReturnValue(value);
49168         }
49169
49170         /**
49171          * The promised function decorator ensures that any promise arguments
49172          * are settled and passed as values (`this` is also settled and passed
49173          * as a value).  It will also ensure that the result of a function is
49174          * always a promise.
49175          *
49176          * @example
49177          * var add = Q.promised(function (a, b) {
49178          *     return a + b;
49179          * });
49180          * add(Q(a), Q(B));
49181          *
49182          * @param {function} callback The function to decorate
49183          * @returns {function} a function that has been decorated.
49184          */
49185         Q.promised = promised;
49186         function promised(callback) {
49187             return function () {
49188                 return spread([this, all(arguments)], function (self, args) {
49189                     return callback.apply(self, args);
49190                 });
49191             };
49192         }
49193
49194         /**
49195          * sends a message to a value in a future turn
49196          * @param object* the recipient
49197          * @param op the name of the message operation, e.g., "when",
49198          * @param args further arguments to be forwarded to the operation
49199          * @returns result {Promise} a promise for the result of the operation
49200          */
49201         Q.dispatch = dispatch;
49202         function dispatch(object, op, args) {
49203             return Q(object).dispatch(op, args);
49204         }
49205
49206         Promise.prototype.dispatch = function (op, args) {
49207             var self = this;
49208             var deferred = defer();
49209             Q.nextTick(function () {
49210                 self.promiseDispatch(deferred.resolve, op, args);
49211             });
49212             return deferred.promise;
49213         };
49214
49215         /**
49216          * Gets the value of a property in a future turn.
49217          * @param object    promise or immediate reference for target object
49218          * @param name      name of property to get
49219          * @return promise for the property value
49220          */
49221         Q.get = function (object, key) {
49222             return Q(object).dispatch("get", [key]);
49223         };
49224
49225         Promise.prototype.get = function (key) {
49226             return this.dispatch("get", [key]);
49227         };
49228
49229         /**
49230          * Sets the value of a property in a future turn.
49231          * @param object    promise or immediate reference for object object
49232          * @param name      name of property to set
49233          * @param value     new value of property
49234          * @return promise for the return value
49235          */
49236         Q.set = function (object, key, value) {
49237             return Q(object).dispatch("set", [key, value]);
49238         };
49239
49240         Promise.prototype.set = function (key, value) {
49241             return this.dispatch("set", [key, value]);
49242         };
49243
49244         /**
49245          * Deletes a property in a future turn.
49246          * @param object    promise or immediate reference for target object
49247          * @param name      name of property to delete
49248          * @return promise for the return value
49249          */
49250         Q.del = // XXX legacy
49251         Q["delete"] = function (object, key) {
49252             return Q(object).dispatch("delete", [key]);
49253         };
49254
49255         Promise.prototype.del = // XXX legacy
49256         Promise.prototype["delete"] = function (key) {
49257             return this.dispatch("delete", [key]);
49258         };
49259
49260         /**
49261          * Invokes a method in a future turn.
49262          * @param object    promise or immediate reference for target object
49263          * @param name      name of method to invoke
49264          * @param value     a value to post, typically an array of
49265          *                  invocation arguments for promises that
49266          *                  are ultimately backed with `resolve` values,
49267          *                  as opposed to those backed with URLs
49268          *                  wherein the posted value can be any
49269          *                  JSON serializable object.
49270          * @return promise for the return value
49271          */
49272         // bound locally because it is used by other methods
49273         Q.mapply = // XXX As proposed by "Redsandro"
49274         Q.post = function (object, name, args) {
49275             return Q(object).dispatch("post", [name, args]);
49276         };
49277
49278         Promise.prototype.mapply = // XXX As proposed by "Redsandro"
49279         Promise.prototype.post = function (name, args) {
49280             return this.dispatch("post", [name, args]);
49281         };
49282
49283         /**
49284          * Invokes a method in a future turn.
49285          * @param object    promise or immediate reference for target object
49286          * @param name      name of method to invoke
49287          * @param ...args   array of invocation arguments
49288          * @return promise for the return value
49289          */
49290         Q.send = // XXX Mark Miller's proposed parlance
49291         Q.mcall = // XXX As proposed by "Redsandro"
49292         Q.invoke = function (object, name /*...args*/) {
49293             return Q(object).dispatch("post", [name, array_slice(arguments, 2)]);
49294         };
49295
49296         Promise.prototype.send = // XXX Mark Miller's proposed parlance
49297         Promise.prototype.mcall = // XXX As proposed by "Redsandro"
49298         Promise.prototype.invoke = function (name /*...args*/) {
49299             return this.dispatch("post", [name, array_slice(arguments, 1)]);
49300         };
49301
49302         /**
49303          * Applies the promised function in a future turn.
49304          * @param object    promise or immediate reference for target function
49305          * @param args      array of application arguments
49306          */
49307         Q.fapply = function (object, args) {
49308             return Q(object).dispatch("apply", [void 0, args]);
49309         };
49310
49311         Promise.prototype.fapply = function (args) {
49312             return this.dispatch("apply", [void 0, args]);
49313         };
49314
49315         /**
49316          * Calls the promised function in a future turn.
49317          * @param object    promise or immediate reference for target function
49318          * @param ...args   array of application arguments
49319          */
49320         Q["try"] =
49321         Q.fcall = function (object /* ...args*/) {
49322             return Q(object).dispatch("apply", [void 0, array_slice(arguments, 1)]);
49323         };
49324
49325         Promise.prototype.fcall = function (/*...args*/) {
49326             return this.dispatch("apply", [void 0, array_slice(arguments)]);
49327         };
49328
49329         /**
49330          * Binds the promised function, transforming return values into a fulfilled
49331          * promise and thrown errors into a rejected one.
49332          * @param object    promise or immediate reference for target function
49333          * @param ...args   array of application arguments
49334          */
49335         Q.fbind = function (object /*...args*/) {
49336             var promise = Q(object);
49337             var args = array_slice(arguments, 1);
49338             return function fbound() {
49339                 return promise.dispatch("apply", [
49340                     this,
49341                     args.concat(array_slice(arguments))
49342                 ]);
49343             };
49344         };
49345         Promise.prototype.fbind = function (/*...args*/) {
49346             var promise = this;
49347             var args = array_slice(arguments);
49348             return function fbound() {
49349                 return promise.dispatch("apply", [
49350                     this,
49351                     args.concat(array_slice(arguments))
49352                 ]);
49353             };
49354         };
49355
49356         /**
49357          * Requests the names of the owned properties of a promised
49358          * object in a future turn.
49359          * @param object    promise or immediate reference for target object
49360          * @return promise for the keys of the eventually settled object
49361          */
49362         Q.keys = function (object) {
49363             return Q(object).dispatch("keys", []);
49364         };
49365
49366         Promise.prototype.keys = function () {
49367             return this.dispatch("keys", []);
49368         };
49369
49370         /**
49371          * Turns an array of promises into a promise for an array.  If any of
49372          * the promises gets rejected, the whole array is rejected immediately.
49373          * @param {Array*} an array (or promise for an array) of values (or
49374          * promises for values)
49375          * @returns a promise for an array of the corresponding values
49376          */
49377         // By Mark Miller
49378         // http://wiki.ecmascript.org/doku.php?id=strawman:concurrency&rev=1308776521#allfulfilled
49379         Q.all = all;
49380         function all(promises) {
49381             return when(promises, function (promises) {
49382                 var pendingCount = 0;
49383                 var deferred = defer();
49384                 array_reduce(promises, function (undefined$1, promise, index) {
49385                     var snapshot;
49386                     if (
49387                         isPromise(promise) &&
49388                         (snapshot = promise.inspect()).state === "fulfilled"
49389                     ) {
49390                         promises[index] = snapshot.value;
49391                     } else {
49392                         ++pendingCount;
49393                         when(
49394                             promise,
49395                             function (value) {
49396                                 promises[index] = value;
49397                                 if (--pendingCount === 0) {
49398                                     deferred.resolve(promises);
49399                                 }
49400                             },
49401                             deferred.reject,
49402                             function (progress) {
49403                                 deferred.notify({ index: index, value: progress });
49404                             }
49405                         );
49406                     }
49407                 }, void 0);
49408                 if (pendingCount === 0) {
49409                     deferred.resolve(promises);
49410                 }
49411                 return deferred.promise;
49412             });
49413         }
49414
49415         Promise.prototype.all = function () {
49416             return all(this);
49417         };
49418
49419         /**
49420          * Returns the first resolved promise of an array. Prior rejected promises are
49421          * ignored.  Rejects only if all promises are rejected.
49422          * @param {Array*} an array containing values or promises for values
49423          * @returns a promise fulfilled with the value of the first resolved promise,
49424          * or a rejected promise if all promises are rejected.
49425          */
49426         Q.any = any;
49427
49428         function any(promises) {
49429             if (promises.length === 0) {
49430                 return Q.resolve();
49431             }
49432
49433             var deferred = Q.defer();
49434             var pendingCount = 0;
49435             array_reduce(promises, function (prev, current, index) {
49436                 var promise = promises[index];
49437
49438                 pendingCount++;
49439
49440                 when(promise, onFulfilled, onRejected, onProgress);
49441                 function onFulfilled(result) {
49442                     deferred.resolve(result);
49443                 }
49444                 function onRejected(err) {
49445                     pendingCount--;
49446                     if (pendingCount === 0) {
49447                         var rejection = err || new Error("" + err);
49448
49449                         rejection.message = ("Q can't get fulfillment value from any promise, all " +
49450                             "promises were rejected. Last error message: " + rejection.message);
49451
49452                         deferred.reject(rejection);
49453                     }
49454                 }
49455                 function onProgress(progress) {
49456                     deferred.notify({
49457                         index: index,
49458                         value: progress
49459                     });
49460                 }
49461             }, undefined);
49462
49463             return deferred.promise;
49464         }
49465
49466         Promise.prototype.any = function () {
49467             return any(this);
49468         };
49469
49470         /**
49471          * Waits for all promises to be settled, either fulfilled or
49472          * rejected.  This is distinct from `all` since that would stop
49473          * waiting at the first rejection.  The promise returned by
49474          * `allResolved` will never be rejected.
49475          * @param promises a promise for an array (or an array) of promises
49476          * (or values)
49477          * @return a promise for an array of promises
49478          */
49479         Q.allResolved = deprecate(allResolved, "allResolved", "allSettled");
49480         function allResolved(promises) {
49481             return when(promises, function (promises) {
49482                 promises = array_map(promises, Q);
49483                 return when(all(array_map(promises, function (promise) {
49484                     return when(promise, noop, noop);
49485                 })), function () {
49486                     return promises;
49487                 });
49488             });
49489         }
49490
49491         Promise.prototype.allResolved = function () {
49492             return allResolved(this);
49493         };
49494
49495         /**
49496          * @see Promise#allSettled
49497          */
49498         Q.allSettled = allSettled;
49499         function allSettled(promises) {
49500             return Q(promises).allSettled();
49501         }
49502
49503         /**
49504          * Turns an array of promises into a promise for an array of their states (as
49505          * returned by `inspect`) when they have all settled.
49506          * @param {Array[Any*]} values an array (or promise for an array) of values (or
49507          * promises for values)
49508          * @returns {Array[State]} an array of states for the respective values.
49509          */
49510         Promise.prototype.allSettled = function () {
49511             return this.then(function (promises) {
49512                 return all(array_map(promises, function (promise) {
49513                     promise = Q(promise);
49514                     function regardless() {
49515                         return promise.inspect();
49516                     }
49517                     return promise.then(regardless, regardless);
49518                 }));
49519             });
49520         };
49521
49522         /**
49523          * Captures the failure of a promise, giving an oportunity to recover
49524          * with a callback.  If the given promise is fulfilled, the returned
49525          * promise is fulfilled.
49526          * @param {Any*} promise for something
49527          * @param {Function} callback to fulfill the returned promise if the
49528          * given promise is rejected
49529          * @returns a promise for the return value of the callback
49530          */
49531         Q.fail = // XXX legacy
49532         Q["catch"] = function (object, rejected) {
49533             return Q(object).then(void 0, rejected);
49534         };
49535
49536         Promise.prototype.fail = // XXX legacy
49537         Promise.prototype["catch"] = function (rejected) {
49538             return this.then(void 0, rejected);
49539         };
49540
49541         /**
49542          * Attaches a listener that can respond to progress notifications from a
49543          * promise's originating deferred. This listener receives the exact arguments
49544          * passed to ``deferred.notify``.
49545          * @param {Any*} promise for something
49546          * @param {Function} callback to receive any progress notifications
49547          * @returns the given promise, unchanged
49548          */
49549         Q.progress = progress;
49550         function progress(object, progressed) {
49551             return Q(object).then(void 0, void 0, progressed);
49552         }
49553
49554         Promise.prototype.progress = function (progressed) {
49555             return this.then(void 0, void 0, progressed);
49556         };
49557
49558         /**
49559          * Provides an opportunity to observe the settling of a promise,
49560          * regardless of whether the promise is fulfilled or rejected.  Forwards
49561          * the resolution to the returned promise when the callback is done.
49562          * The callback can return a promise to defer completion.
49563          * @param {Any*} promise
49564          * @param {Function} callback to observe the resolution of the given
49565          * promise, takes no arguments.
49566          * @returns a promise for the resolution of the given promise when
49567          * ``fin`` is done.
49568          */
49569         Q.fin = // XXX legacy
49570         Q["finally"] = function (object, callback) {
49571             return Q(object)["finally"](callback);
49572         };
49573
49574         Promise.prototype.fin = // XXX legacy
49575         Promise.prototype["finally"] = function (callback) {
49576             if (!callback || typeof callback.apply !== "function") {
49577                 throw new Error("Q can't apply finally callback");
49578             }
49579             callback = Q(callback);
49580             return this.then(function (value) {
49581                 return callback.fcall().then(function () {
49582                     return value;
49583                 });
49584             }, function (reason) {
49585                 // TODO attempt to recycle the rejection with "this".
49586                 return callback.fcall().then(function () {
49587                     throw reason;
49588                 });
49589             });
49590         };
49591
49592         /**
49593          * Terminates a chain of promises, forcing rejections to be
49594          * thrown as exceptions.
49595          * @param {Any*} promise at the end of a chain of promises
49596          * @returns nothing
49597          */
49598         Q.done = function (object, fulfilled, rejected, progress) {
49599             return Q(object).done(fulfilled, rejected, progress);
49600         };
49601
49602         Promise.prototype.done = function (fulfilled, rejected, progress) {
49603             var onUnhandledError = function (error) {
49604                 // forward to a future turn so that ``when``
49605                 // does not catch it and turn it into a rejection.
49606                 Q.nextTick(function () {
49607                     makeStackTraceLong(error, promise);
49608                     if (Q.onerror) {
49609                         Q.onerror(error);
49610                     } else {
49611                         throw error;
49612                     }
49613                 });
49614             };
49615
49616             // Avoid unnecessary `nextTick`ing via an unnecessary `when`.
49617             var promise = fulfilled || rejected || progress ?
49618                 this.then(fulfilled, rejected, progress) :
49619                 this;
49620
49621             if (typeof process === "object" && process && process.domain) {
49622                 onUnhandledError = process.domain.bind(onUnhandledError);
49623             }
49624
49625             promise.then(void 0, onUnhandledError);
49626         };
49627
49628         /**
49629          * Causes a promise to be rejected if it does not get fulfilled before
49630          * some milliseconds time out.
49631          * @param {Any*} promise
49632          * @param {Number} milliseconds timeout
49633          * @param {Any*} custom error message or Error object (optional)
49634          * @returns a promise for the resolution of the given promise if it is
49635          * fulfilled before the timeout, otherwise rejected.
49636          */
49637         Q.timeout = function (object, ms, error) {
49638             return Q(object).timeout(ms, error);
49639         };
49640
49641         Promise.prototype.timeout = function (ms, error) {
49642             var deferred = defer();
49643             var timeoutId = setTimeout(function () {
49644                 if (!error || "string" === typeof error) {
49645                     error = new Error(error || "Timed out after " + ms + " ms");
49646                     error.code = "ETIMEDOUT";
49647                 }
49648                 deferred.reject(error);
49649             }, ms);
49650
49651             this.then(function (value) {
49652                 clearTimeout(timeoutId);
49653                 deferred.resolve(value);
49654             }, function (exception) {
49655                 clearTimeout(timeoutId);
49656                 deferred.reject(exception);
49657             }, deferred.notify);
49658
49659             return deferred.promise;
49660         };
49661
49662         /**
49663          * Returns a promise for the given value (or promised value), some
49664          * milliseconds after it resolved. Passes rejections immediately.
49665          * @param {Any*} promise
49666          * @param {Number} milliseconds
49667          * @returns a promise for the resolution of the given promise after milliseconds
49668          * time has elapsed since the resolution of the given promise.
49669          * If the given promise rejects, that is passed immediately.
49670          */
49671         Q.delay = function (object, timeout) {
49672             if (timeout === void 0) {
49673                 timeout = object;
49674                 object = void 0;
49675             }
49676             return Q(object).delay(timeout);
49677         };
49678
49679         Promise.prototype.delay = function (timeout) {
49680             return this.then(function (value) {
49681                 var deferred = defer();
49682                 setTimeout(function () {
49683                     deferred.resolve(value);
49684                 }, timeout);
49685                 return deferred.promise;
49686             });
49687         };
49688
49689         /**
49690          * Passes a continuation to a Node function, which is called with the given
49691          * arguments provided as an array, and returns a promise.
49692          *
49693          *      Q.nfapply(FS.readFile, [__filename])
49694          *      .then(function (content) {
49695          *      })
49696          *
49697          */
49698         Q.nfapply = function (callback, args) {
49699             return Q(callback).nfapply(args);
49700         };
49701
49702         Promise.prototype.nfapply = function (args) {
49703             var deferred = defer();
49704             var nodeArgs = array_slice(args);
49705             nodeArgs.push(deferred.makeNodeResolver());
49706             this.fapply(nodeArgs).fail(deferred.reject);
49707             return deferred.promise;
49708         };
49709
49710         /**
49711          * Passes a continuation to a Node function, which is called with the given
49712          * arguments provided individually, and returns a promise.
49713          * @example
49714          * Q.nfcall(FS.readFile, __filename)
49715          * .then(function (content) {
49716          * })
49717          *
49718          */
49719         Q.nfcall = function (callback /*...args*/) {
49720             var args = array_slice(arguments, 1);
49721             return Q(callback).nfapply(args);
49722         };
49723
49724         Promise.prototype.nfcall = function (/*...args*/) {
49725             var nodeArgs = array_slice(arguments);
49726             var deferred = defer();
49727             nodeArgs.push(deferred.makeNodeResolver());
49728             this.fapply(nodeArgs).fail(deferred.reject);
49729             return deferred.promise;
49730         };
49731
49732         /**
49733          * Wraps a NodeJS continuation passing function and returns an equivalent
49734          * version that returns a promise.
49735          * @example
49736          * Q.nfbind(FS.readFile, __filename)("utf-8")
49737          * .then(console.log)
49738          * .done()
49739          */
49740         Q.nfbind =
49741         Q.denodeify = function (callback /*...args*/) {
49742             if (callback === undefined) {
49743                 throw new Error("Q can't wrap an undefined function");
49744             }
49745             var baseArgs = array_slice(arguments, 1);
49746             return function () {
49747                 var nodeArgs = baseArgs.concat(array_slice(arguments));
49748                 var deferred = defer();
49749                 nodeArgs.push(deferred.makeNodeResolver());
49750                 Q(callback).fapply(nodeArgs).fail(deferred.reject);
49751                 return deferred.promise;
49752             };
49753         };
49754
49755         Promise.prototype.nfbind =
49756         Promise.prototype.denodeify = function (/*...args*/) {
49757             var args = array_slice(arguments);
49758             args.unshift(this);
49759             return Q.denodeify.apply(void 0, args);
49760         };
49761
49762         Q.nbind = function (callback, thisp /*...args*/) {
49763             var baseArgs = array_slice(arguments, 2);
49764             return function () {
49765                 var nodeArgs = baseArgs.concat(array_slice(arguments));
49766                 var deferred = defer();
49767                 nodeArgs.push(deferred.makeNodeResolver());
49768                 function bound() {
49769                     return callback.apply(thisp, arguments);
49770                 }
49771                 Q(bound).fapply(nodeArgs).fail(deferred.reject);
49772                 return deferred.promise;
49773             };
49774         };
49775
49776         Promise.prototype.nbind = function (/*thisp, ...args*/) {
49777             var args = array_slice(arguments, 0);
49778             args.unshift(this);
49779             return Q.nbind.apply(void 0, args);
49780         };
49781
49782         /**
49783          * Calls a method of a Node-style object that accepts a Node-style
49784          * callback with a given array of arguments, plus a provided callback.
49785          * @param object an object that has the named method
49786          * @param {String} name name of the method of object
49787          * @param {Array} args arguments to pass to the method; the callback
49788          * will be provided by Q and appended to these arguments.
49789          * @returns a promise for the value or error
49790          */
49791         Q.nmapply = // XXX As proposed by "Redsandro"
49792         Q.npost = function (object, name, args) {
49793             return Q(object).npost(name, args);
49794         };
49795
49796         Promise.prototype.nmapply = // XXX As proposed by "Redsandro"
49797         Promise.prototype.npost = function (name, args) {
49798             var nodeArgs = array_slice(args || []);
49799             var deferred = defer();
49800             nodeArgs.push(deferred.makeNodeResolver());
49801             this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49802             return deferred.promise;
49803         };
49804
49805         /**
49806          * Calls a method of a Node-style object that accepts a Node-style
49807          * callback, forwarding the given variadic arguments, plus a provided
49808          * callback argument.
49809          * @param object an object that has the named method
49810          * @param {String} name name of the method of object
49811          * @param ...args arguments to pass to the method; the callback will
49812          * be provided by Q and appended to these arguments.
49813          * @returns a promise for the value or error
49814          */
49815         Q.nsend = // XXX Based on Mark Miller's proposed "send"
49816         Q.nmcall = // XXX Based on "Redsandro's" proposal
49817         Q.ninvoke = function (object, name /*...args*/) {
49818             var nodeArgs = array_slice(arguments, 2);
49819             var deferred = defer();
49820             nodeArgs.push(deferred.makeNodeResolver());
49821             Q(object).dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49822             return deferred.promise;
49823         };
49824
49825         Promise.prototype.nsend = // XXX Based on Mark Miller's proposed "send"
49826         Promise.prototype.nmcall = // XXX Based on "Redsandro's" proposal
49827         Promise.prototype.ninvoke = function (name /*...args*/) {
49828             var nodeArgs = array_slice(arguments, 1);
49829             var deferred = defer();
49830             nodeArgs.push(deferred.makeNodeResolver());
49831             this.dispatch("post", [name, nodeArgs]).fail(deferred.reject);
49832             return deferred.promise;
49833         };
49834
49835         /**
49836          * If a function would like to support both Node continuation-passing-style and
49837          * promise-returning-style, it can end its internal promise chain with
49838          * `nodeify(nodeback)`, forwarding the optional nodeback argument.  If the user
49839          * elects to use a nodeback, the result will be sent there.  If they do not
49840          * pass a nodeback, they will receive the result promise.
49841          * @param object a result (or a promise for a result)
49842          * @param {Function} nodeback a Node.js-style callback
49843          * @returns either the promise or nothing
49844          */
49845         Q.nodeify = nodeify;
49846         function nodeify(object, nodeback) {
49847             return Q(object).nodeify(nodeback);
49848         }
49849
49850         Promise.prototype.nodeify = function (nodeback) {
49851             if (nodeback) {
49852                 this.then(function (value) {
49853                     Q.nextTick(function () {
49854                         nodeback(null, value);
49855                     });
49856                 }, function (error) {
49857                     Q.nextTick(function () {
49858                         nodeback(error);
49859                     });
49860                 });
49861             } else {
49862                 return this;
49863             }
49864         };
49865
49866         Q.noConflict = function() {
49867             throw new Error("Q.noConflict only works when Q is used as a global");
49868         };
49869
49870         // All code before this point will be filtered from stack traces.
49871         var qEndingLine = captureLine();
49872
49873         return Q;
49874
49875         });
49876         });
49877
49878         var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
49879         var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
49880         var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
49881         var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
49882         var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
49883         var maxResults$2 = 2000;
49884         var tileZoom$2 = 16.5;
49885         var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
49886         var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
49887         var minHfov = 10;         // zoom in degrees:  20, 10, 5
49888         var maxHfov = 90;         // zoom out degrees
49889         var defaultHfov = 45;
49890
49891         var _hires = false;
49892         var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
49893         var _currScene = 0;
49894         var _ssCache;
49895         var _pannellumViewer;
49896         var _sceneOptions;
49897         var _dataUrlArray = [];
49898
49899
49900         /**
49901          * abortRequest().
49902          */
49903         function abortRequest$5(i) {
49904             i.abort();
49905         }
49906
49907
49908         /**
49909          * localeTimeStamp().
49910          */
49911         function localeTimestamp(s) {
49912             if (!s) return null;
49913             var detected = utilDetect();
49914             var options = { day: 'numeric', month: 'short', year: 'numeric' };
49915             var d = new Date(s);
49916             if (isNaN(d.getTime())) return null;
49917             return d.toLocaleString(detected.locale, options);
49918         }
49919
49920
49921         /**
49922          * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
49923          */
49924         function loadTiles$2(which, url, projection, margin) {
49925             var tiles = tiler$5.margin(margin).getTiles(projection);
49926
49927             // abort inflight requests that are no longer needed
49928             var cache = _ssCache[which];
49929             Object.keys(cache.inflight).forEach(function(k) {
49930                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
49931                 if (!wanted) {
49932                     abortRequest$5(cache.inflight[k]);
49933                     delete cache.inflight[k];
49934                 }
49935             });
49936
49937             tiles.forEach(function (tile) {
49938                loadNextTilePage$2(which, url, tile);
49939             });
49940         }
49941
49942         /**
49943          * loadNextTilePage() load data for the next tile page in line.
49944          */
49945         function loadNextTilePage$2(which, url, tile) {
49946             var cache = _ssCache[which];
49947             var nextPage = cache.nextPage[tile.id] || 0;
49948             var id = tile.id + ',' + String(nextPage);
49949             if (cache.loaded[id] || cache.inflight[id]) return;
49950
49951             cache.inflight[id] = getBubbles(url, tile, function(bubbles) {
49952                 cache.loaded[id] = true;
49953                 delete cache.inflight[id];
49954                 if (!bubbles) return;
49955
49956                 // [].shift() removes the first element, some statistics info, not a bubble point
49957                 bubbles.shift();
49958
49959                 var features = bubbles.map(function(bubble) {
49960                     if (cache.points[bubble.id]) return null;  // skip duplicates
49961
49962                     var loc = [bubble.lo, bubble.la];
49963                     var d = {
49964                         loc: loc,
49965                         key: bubble.id,
49966                         ca: bubble.he,
49967                         captured_at: bubble.cd,
49968                         captured_by: 'microsoft',
49969                         // nbn: bubble.nbn,
49970                         // pbn: bubble.pbn,
49971                         // ad: bubble.ad,
49972                         // rn: bubble.rn,
49973                         pr: bubble.pr,  // previous
49974                         ne: bubble.ne,  // next
49975                         pano: true,
49976                         sequenceKey: null
49977                     };
49978
49979                     cache.points[bubble.id] = d;
49980
49981                     // a sequence starts here
49982                     if (bubble.pr === undefined) {
49983                         cache.leaders.push(bubble.id);
49984                     }
49985
49986                     return {
49987                         minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
49988                     };
49989
49990                 }).filter(Boolean);
49991
49992                 cache.rtree.load(features);
49993
49994                 connectSequences();
49995
49996                 if (which === 'bubbles') {
49997                     dispatch$6.call('loadedBubbles');
49998                 }
49999             });
50000         }
50001
50002
50003         // call this sometimes to connect the bubbles into sequences
50004         function connectSequences() {
50005             var cache = _ssCache.bubbles;
50006             var keepLeaders = [];
50007
50008             for (var i = 0; i < cache.leaders.length; i++) {
50009                 var bubble = cache.points[cache.leaders[i]];
50010                 var seen = {};
50011
50012                 // try to make a sequence.. use the key of the leader bubble.
50013                 var sequence = { key: bubble.key, bubbles: [] };
50014                 var complete = false;
50015
50016                 do {
50017                     sequence.bubbles.push(bubble);
50018                     seen[bubble.key] = true;
50019
50020                     if (bubble.ne === undefined) {
50021                         complete = true;
50022                     } else {
50023                         bubble = cache.points[bubble.ne];  // advance to next
50024                     }
50025                 } while (bubble && !seen[bubble.key] && !complete);
50026
50027
50028                 if (complete) {
50029                     _ssCache.sequences[sequence.key] = sequence;
50030
50031                     // assign bubbles to the sequence
50032                     for (var j = 0; j < sequence.bubbles.length; j++) {
50033                         sequence.bubbles[j].sequenceKey = sequence.key;
50034                     }
50035
50036                     // create a GeoJSON LineString
50037                     sequence.geojson = {
50038                         type: 'LineString',
50039                         properties: { key: sequence.key },
50040                         coordinates: sequence.bubbles.map(function (d) { return d.loc; })
50041                     };
50042
50043                 } else {
50044                     keepLeaders.push(cache.leaders[i]);
50045                 }
50046             }
50047
50048             // couldn't complete these, save for later
50049             cache.leaders = keepLeaders;
50050         }
50051
50052         /**
50053          * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
50054          */
50055         function getBubbles(url, tile, callback) {
50056             var rect = tile.extent.rectangle();
50057             var urlForRequest = url + utilQsString({
50058                 n: rect[3],
50059                 s: rect[1],
50060                 e: rect[2],
50061                 w: rect[0],
50062                 c: maxResults$2,
50063                 appkey: bubbleAppKey,
50064                 jsCallback: '{callback}'
50065             });
50066
50067             return jsonpRequest(urlForRequest, function (data) {
50068                 if (!data || data.error) {
50069                     callback(null);
50070                 } else {
50071                     callback(data);
50072                 }
50073             });
50074         }
50075
50076
50077         // partition viewport into higher zoom tiles
50078         function partitionViewport$2(projection) {
50079             var z = geoScaleToZoom(projection.scale());
50080             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
50081             var tiler = utilTiler().zoomExtent([z2, z2]);
50082
50083             return tiler.getTiles(projection)
50084                 .map(function(tile) { return tile.extent; });
50085         }
50086
50087
50088         // no more than `limit` results per partition.
50089         function searchLimited$2(limit, projection, rtree) {
50090             limit = limit || 5;
50091
50092             return partitionViewport$2(projection)
50093                 .reduce(function(result, extent) {
50094                     var found = rtree.search(extent.bbox())
50095                         .slice(0, limit)
50096                         .map(function(d) { return d.data; });
50097
50098                     return (found.length ? result.concat(found) : result);
50099                 }, []);
50100         }
50101
50102
50103         /**
50104          * getImage()
50105          */
50106         function getImage(imgInfo) {
50107             var response = q.defer();
50108             var img = new Image();
50109
50110             img.onload = function() {
50111                 var canvas = document.getElementById('canvas' + imgInfo.face);
50112                 var ctx = canvas.getContext('2d');
50113                 ctx.drawImage(img, imgInfo.x, imgInfo.y);
50114                 response.resolve({imgInfo:imgInfo, status: 'ok'});
50115             };
50116             img.onerror = function() {
50117                 response.resolve({data: imgInfo, status: 'error'});
50118             };
50119             img.setAttribute('crossorigin', '');
50120             img.src = imgInfo.url;
50121
50122             return response.promise;
50123         }
50124
50125
50126         /**
50127          * loadCanvas()
50128          */
50129         function loadCanvas(imgInfoGroup) {
50130             var response = q.defer();
50131             var getImagePromises = imgInfoGroup.map(function(imgInfo) {
50132                 return getImage(imgInfo);
50133             });
50134
50135             q.all(getImagePromises).then(function(data) {
50136                 var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
50137                 switch (data[0].imgInfo.face) {
50138                     case '01':
50139                         _dataUrlArray[0] = canvas.toDataURL('image/jpeg', 1.0);
50140                         break;
50141                     case '02':
50142                         _dataUrlArray[1] = canvas.toDataURL('image/jpeg', 1.0);
50143                         break;
50144                     case '03':
50145                         _dataUrlArray[2] = canvas.toDataURL('image/jpeg', 1.0);
50146                         break;
50147                     case '10':
50148                         _dataUrlArray[3] = canvas.toDataURL('image/jpeg', 1.0);
50149                         break;
50150                     case '11':
50151                         _dataUrlArray[4] = canvas.toDataURL('image/jpeg', 1.0);
50152                         break;
50153                     case '12':
50154                         _dataUrlArray[5] = canvas.toDataURL('image/jpeg', 1.0);
50155                         break;
50156                 }
50157                 response.resolve({status:'loadCanvas for face ' + data[0].imgInfo.face + 'ok'});
50158             });
50159
50160             return response.promise;
50161         }
50162
50163
50164         function setupCanvas(selection, reset) {
50165             if (reset) {
50166                 selection.selectAll('#divForCanvasWork')
50167                     .remove();
50168             }
50169
50170             // Add the Streetside working canvases. These are used for 'stitching', or combining,
50171             // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
50172             selection.selectAll('#divForCanvasWork')
50173                 .data([0])
50174                 .enter()
50175                 .append('div')
50176                 .attr('id', 'divForCanvasWork')
50177                 .attr('display', 'none')
50178                 .selectAll('canvas')
50179                 .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
50180                 .enter()
50181                 .append('canvas')
50182                 .attr('id', function(d) { return d; })
50183                 .attr('width', _resolution)
50184                 .attr('height', _resolution);
50185         }
50186
50187
50188         /**
50189          * processFaces()
50190          */
50191         function processFaces(imgFaceInfoGroups) {
50192             var response = q.defer();
50193             var loadCanvasPromises = imgFaceInfoGroups.map(function(faceImgGroup) {
50194                 return loadCanvas(faceImgGroup);
50195             });
50196
50197             q.all(loadCanvasPromises).then(function() {
50198                 response.resolve({status: 'processFaces done'});
50199             });
50200
50201             return response.promise;
50202         }
50203
50204
50205
50206         function qkToXY(qk) {
50207             var x = 0;
50208             var y = 0;
50209             var scale = 256;
50210             for (var i = qk.length; i > 0; i--) {
50211                 var key = qk[i-1];
50212                 x += (+(key === '1' || key === '3')) * scale;
50213                 y += (+(key === '2' || key === '3')) * scale;
50214                 scale *= 2;
50215             }
50216             return [x, y];
50217         }
50218
50219
50220         function getQuadKeys() {
50221             var dim = _resolution / 256;
50222             var quadKeys;
50223
50224             if (dim === 16) {
50225                 quadKeys = [
50226                     '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
50227                     '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
50228                     '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
50229                     '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
50230                     '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
50231                     '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
50232                     '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
50233                     '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
50234
50235                     '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
50236                     '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
50237                     '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
50238                     '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
50239                     '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
50240                     '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
50241                     '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
50242                     '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
50243                 ];
50244
50245             } else if (dim === 8) {
50246                 quadKeys = [
50247                     '000','001','010','011',  '100','101','110','111',
50248                     '002','003','012','013',  '102','103','112','113',
50249                     '020','021','030','031',  '120','121','130','131',
50250                     '022','023','032','033',  '122','123','132','133',
50251
50252                     '200','201','210','211',  '300','301','310','311',
50253                     '202','203','212','213',  '302','303','312','313',
50254                     '220','221','230','231',  '320','321','330','331',
50255                     '222','223','232','233',  '322','323','332','333'
50256                 ];
50257
50258             } else if (dim === 4) {
50259                 quadKeys = [
50260                     '00','01',  '10','11',
50261                     '02','03',  '12','13',
50262
50263                     '20','21',  '30','31',
50264                     '22','23',  '32','33'
50265                 ];
50266
50267             } else {  // dim === 2
50268                 quadKeys = [
50269                     '0', '1',
50270                     '2', '3'
50271                 ];
50272             }
50273
50274             return quadKeys;
50275         }
50276
50277
50278
50279         var serviceStreetside = {
50280             /**
50281              * init() initialize streetside.
50282              */
50283             init: function () {
50284                 if (!_ssCache) {
50285                     this.reset();
50286                 }
50287
50288                 this.event = utilRebind(this, dispatch$6, 'on');
50289             },
50290
50291             /**
50292              * reset() reset the cache.
50293              */
50294             reset: function () {
50295                 if (_ssCache) {
50296                     Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
50297                 }
50298
50299                 _ssCache = {
50300                     bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: rbush_1(), points: {}, leaders: [] },
50301                     sequences: {}
50302                 };
50303             },
50304
50305             /**
50306              * bubbles()
50307              */
50308             bubbles: function (projection) {
50309                 var limit = 5;
50310                 return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
50311             },
50312
50313
50314             sequences: function(projection) {
50315                 var viewport = projection.clipExtent();
50316                 var min = [viewport[0][0], viewport[1][1]];
50317                 var max = [viewport[1][0], viewport[0][1]];
50318                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
50319                 var seen = {};
50320                 var results = [];
50321
50322                 // all sequences for bubbles in viewport
50323                 _ssCache.bubbles.rtree.search(bbox)
50324                     .forEach(function(d) {
50325                         var key = d.data.sequenceKey;
50326                         if (key && !seen[key]) {
50327                             seen[key] = true;
50328                             results.push(_ssCache.sequences[key].geojson);
50329                         }
50330                     });
50331
50332                 return results;
50333             },
50334
50335
50336             /**
50337              * loadBubbles()
50338              */
50339             loadBubbles: function (projection, margin) {
50340                 // by default: request 2 nearby tiles so we can connect sequences.
50341                 if (margin === undefined) margin = 2;
50342
50343                 loadTiles$2('bubbles', bubbleApi, projection, margin);
50344             },
50345
50346
50347             viewer: function() {
50348                 return _pannellumViewer;
50349             },
50350
50351
50352             initViewer: function () {
50353                 if (!window.pannellum) return;
50354                 if (_pannellumViewer) return;
50355
50356                 var sceneID = ++_currScene + '';
50357                 var options = {
50358                     'default': { firstScene: sceneID },
50359                     scenes: {}
50360                 };
50361                 options.scenes[sceneID] = _sceneOptions;
50362
50363                 _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
50364
50365                 _pannellumViewer
50366                     .on('mousedown', function() {
50367                         d3_select(window).on('mousemove.pannellum', function() {
50368                             dispatch$6.call('viewerChanged');
50369                         });
50370                     })
50371                     .on('mouseup', function() {
50372                         d3_select(window).on('mousemove.pannellum', null);
50373                         // continue dispatching events for a few seconds, in case viewer has inertia.
50374                         var t = timer(function(elapsed) {
50375                             dispatch$6.call('viewerChanged');
50376                             if (elapsed > 2000) {
50377                                 t.stop();
50378                             }
50379                         });
50380                     });
50381             },
50382
50383
50384             /**
50385              * loadViewer() create the streeside viewer.
50386              */
50387             loadViewer: function (context) {
50388                 var that = this;
50389
50390                 // create ms-wrapper, a photo wrapper class
50391                 var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
50392                     .data([0]);
50393
50394                 // inject ms-wrapper into the photoviewer div
50395                 // (used by all to house each custom photo viewer)
50396                 var wrapEnter = wrap.enter()
50397                     .append('div')
50398                     .attr('id', 'ms')
50399                     .attr('class', 'photo-wrapper ms-wrapper')
50400                     .classed('hide', true);
50401
50402                 // inject div to support streetside viewer (pannellum) and attribution line
50403                 wrapEnter
50404                     .append('div')
50405                     .attr('id', 'viewer-streetside')
50406                     .append('div')
50407                     .attr('class', 'photo-attribution fillD');
50408
50409                 var controlsEnter = wrapEnter
50410                     .append('div')
50411                     .attr('class', 'photo-controls-wrap')
50412                     .append('div')
50413                     .attr('class', 'photo-controls');
50414
50415                 controlsEnter
50416                     .append('button')
50417                     .on('click.back', step(-1))
50418                     .text('◄');
50419
50420                 controlsEnter
50421                     .append('button')
50422                     .on('click.forward', step(1))
50423                     .text('►');
50424
50425
50426                 // create working canvas for stitching together images
50427                 wrap = wrap
50428                     .merge(wrapEnter)
50429                     .call(setupCanvas, true);
50430
50431                 // load streetside pannellum viewer css
50432                 d3_select('head').selectAll('#streetside-viewercss')
50433                     .data([0])
50434                     .enter()
50435                     .append('link')
50436                     .attr('id', 'streetside-viewercss')
50437                     .attr('rel', 'stylesheet')
50438                     .attr('href', context.asset(pannellumViewerCSS));
50439
50440                 // load streetside pannellum viewer js
50441                 d3_select('head').selectAll('#streetside-viewerjs')
50442                     .data([0])
50443                     .enter()
50444                     .append('script')
50445                     .attr('id', 'streetside-viewerjs')
50446                     .attr('src', context.asset(pannellumViewerJS));
50447
50448
50449                 // Register viewer resize handler
50450                 context.ui().photoviewer.on('resize.streetside', function() {
50451                     if (_pannellumViewer) {
50452                         _pannellumViewer.resize();
50453                     }
50454                 });
50455
50456
50457                 function step(stepBy) {
50458                     return function() {
50459                         var viewer = d3_select('#photoviewer');
50460                         var selected = viewer.empty() ? undefined : viewer.datum();
50461                         if (!selected) return;
50462
50463                         var nextID = (stepBy === 1 ? selected.ne : selected.pr);
50464                         var yaw = _pannellumViewer.getYaw();
50465                         var ca = selected.ca + yaw;
50466                         var origin = selected.loc;
50467
50468                         // construct a search trapezoid pointing out from current bubble
50469                         var meters = 35;
50470                         var p1 = [
50471                             origin[0] + geoMetersToLon(meters / 5, origin[1]),
50472                             origin[1]
50473                         ];
50474                         var p2 = [
50475                             origin[0] + geoMetersToLon(meters / 2, origin[1]),
50476                             origin[1] + geoMetersToLat(meters)
50477                         ];
50478                         var p3 = [
50479                             origin[0] - geoMetersToLon(meters / 2, origin[1]),
50480                             origin[1] + geoMetersToLat(meters)
50481                         ];
50482                         var p4 = [
50483                             origin[0] - geoMetersToLon(meters / 5, origin[1]),
50484                             origin[1]
50485                         ];
50486
50487                         var poly = [p1, p2, p3, p4, p1];
50488
50489                         // rotate it to face forward/backward
50490                         var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
50491                         poly = geoRotate(poly, -angle, origin);
50492
50493                         var extent = poly.reduce(function(extent, point) {
50494                             return extent.extend(geoExtent(point));
50495                         }, geoExtent());
50496
50497                         // find nearest other bubble in the search polygon
50498                         var minDist = Infinity;
50499                         _ssCache.bubbles.rtree.search(extent.bbox())
50500                             .forEach(function(d) {
50501                                 if (d.data.key === selected.key) return;
50502                                 if (!geoPointInPolygon(d.data.loc, poly)) return;
50503
50504                                 var dist = geoVecLength(d.data.loc, selected.loc);
50505                                 var theta = selected.ca - d.data.ca;
50506                                 var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
50507                                 if (minTheta > 20) {
50508                                     dist += 5;  // penalize distance if camera angles don't match
50509                                 }
50510
50511                                 if (dist < minDist) {
50512                                     nextID = d.data.key;
50513                                     minDist = dist;
50514                                 }
50515                             });
50516
50517                         var nextBubble = nextID && _ssCache.bubbles.points[nextID];
50518                         if (!nextBubble) return;
50519
50520                         context.map().centerEase(nextBubble.loc);
50521
50522                         that.selectImage(nextBubble)
50523                             .then(function(r) {
50524                                 if (r.status === 'ok') {
50525                                     _sceneOptions.yaw = yaw;
50526                                     that.showViewer();
50527                                 }
50528                             });
50529                     };
50530                 }
50531             },
50532
50533             /**
50534              * showViewer()
50535              */
50536             showViewer: function (yaw) {
50537                 if (!_sceneOptions) return;
50538
50539                 if (yaw !== undefined) {
50540                     _sceneOptions.yaw = yaw;
50541                 }
50542
50543                 if (!_pannellumViewer) {
50544                     this.initViewer();
50545                 } else {
50546                     // make a new scene
50547                     var sceneID = ++_currScene + '';
50548                     _pannellumViewer
50549                         .addScene(sceneID, _sceneOptions)
50550                         .loadScene(sceneID);
50551
50552                     // remove previous scene
50553                     if (_currScene > 2) {
50554                         sceneID = (_currScene - 1) + '';
50555                         _pannellumViewer
50556                             .removeScene(sceneID);
50557                     }
50558                 }
50559
50560                 var wrap = d3_select('#photoviewer')
50561                     .classed('hide', false);
50562
50563                 var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
50564
50565                 if (isHidden) {
50566                     wrap
50567                         .selectAll('.photo-wrapper:not(.ms-wrapper)')
50568                         .classed('hide', true);
50569
50570                     wrap
50571                         .selectAll('.photo-wrapper.ms-wrapper')
50572                         .classed('hide', false);
50573                 }
50574
50575                 return this;
50576             },
50577
50578             /**
50579              * hideViewer()
50580              */
50581             hideViewer: function () {
50582                 var viewer = d3_select('#photoviewer');
50583                 if (!viewer.empty()) viewer.datum(null);
50584
50585                 viewer
50586                     .classed('hide', true)
50587                     .selectAll('.photo-wrapper')
50588                     .classed('hide', true);
50589
50590                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
50591                     .classed('currentView', false);
50592
50593                 return this.setStyles(null, true);
50594             },
50595
50596             /**
50597              * selectImage().
50598              */
50599             selectImage: function (d) {
50600                 var response = q.defer();
50601                 var that = this;
50602
50603                 var viewer = d3_select('#photoviewer');
50604                 if (!viewer.empty()) viewer.datum(d);
50605
50606                 this.setStyles(null, true);
50607
50608                 var wrap = d3_select('#photoviewer .ms-wrapper');
50609                 var attribution = wrap.selectAll('.photo-attribution').html('');
50610
50611                 wrap.selectAll('.pnlm-load-box')   // display "loading.."
50612                     .style('display', 'block');
50613
50614                 if (!d) {
50615                     response.resolve({status: 'ok'});
50616                     return response.promise;
50617                 }
50618
50619                 var line1 = attribution
50620                     .append('div')
50621                     .attr('class', 'attribution-row');
50622
50623                 // Add hires checkbox
50624                 var label = line1
50625                     .append('label')
50626                     .attr('class', 'streetside-hires');
50627
50628                 label
50629                     .append('input')
50630                     .attr('type', 'checkbox')
50631                     .attr('id', 'streetside-hires-input')
50632                     .property('checked', _hires)
50633                     .on('click', function() {
50634                         event.stopPropagation();
50635
50636                         _hires = !_hires;
50637                         _resolution = _hires ? 1024 : 512;
50638                         wrap.call(setupCanvas, true);
50639
50640                         var viewstate = {
50641                             yaw: _pannellumViewer.getYaw(),
50642                             pitch: _pannellumViewer.getPitch(),
50643                             hfov: _pannellumViewer.getHfov()
50644                         };
50645
50646                         that.selectImage(d)
50647                             .then(function(r) {
50648                                 if (r.status === 'ok') {
50649                                     _sceneOptions = Object.assign(_sceneOptions, viewstate);
50650                                     that.showViewer();
50651                                 }
50652                             });
50653                     });
50654
50655                 label
50656                     .append('span')
50657                     .text(t('streetside.hires'));
50658
50659
50660                 var captureInfo = line1
50661                     .append('div')
50662                     .attr('class', 'attribution-capture-info');
50663
50664                 // Add capture date
50665                 if (d.captured_by) {
50666                     var yyyy = (new Date()).getFullYear();
50667
50668                     captureInfo
50669                         .append('a')
50670                         .attr('class', 'captured_by')
50671                         .attr('target', '_blank')
50672                         .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
50673                         .text('©' + yyyy + ' Microsoft');
50674
50675                     captureInfo
50676                         .append('span')
50677                         .text('|');
50678                 }
50679
50680                 if (d.captured_at) {
50681                     captureInfo
50682                         .append('span')
50683                         .attr('class', 'captured_at')
50684                         .text(localeTimestamp(d.captured_at));
50685                 }
50686
50687                 // Add image links
50688                 var line2 = attribution
50689                     .append('div')
50690                     .attr('class', 'attribution-row');
50691
50692                 line2
50693                     .append('a')
50694                     .attr('class', 'image-view-link')
50695                     .attr('target', '_blank')
50696                     .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
50697                         '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
50698                     .text(t('streetside.view_on_bing'));
50699
50700                 line2
50701                     .append('a')
50702                     .attr('class', 'image-report-link')
50703                     .attr('target', '_blank')
50704                     .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) +
50705                         '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
50706                     .text(t('streetside.report'));
50707
50708
50709                 var bubbleIdQuadKey = d.key.toString(4);
50710                 var paddingNeeded = 16 - bubbleIdQuadKey.length;
50711                 for (var i = 0; i < paddingNeeded; i++) {
50712                     bubbleIdQuadKey = '0' + bubbleIdQuadKey;
50713                 }
50714                 var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
50715                 var imgUrlSuffix = '.jpg?g=6338&n=z';
50716
50717                 // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
50718                 var faceKeys = ['01','02','03','10','11','12'];
50719
50720                 // Map images to cube faces
50721                 var quadKeys = getQuadKeys();
50722                 var faces = faceKeys.map(function(faceKey) {
50723                     return quadKeys.map(function(quadKey) {
50724                         var xy = qkToXY(quadKey);
50725                         return {
50726                             face: faceKey,
50727                             url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
50728                             x: xy[0],
50729                             y: xy[1]
50730                         };
50731                     });
50732                 });
50733
50734                 processFaces(faces).then(function() {
50735                     _sceneOptions = {
50736                         showFullscreenCtrl: false,
50737                         autoLoad: true,
50738                         compass: true,
50739                         northOffset: d.ca,
50740                         yaw: 0,
50741                         minHfov: minHfov,
50742                         maxHfov: maxHfov,
50743                         hfov: defaultHfov,
50744                         type: 'cubemap',
50745                         cubeMap: [
50746                             _dataUrlArray[0],
50747                             _dataUrlArray[1],
50748                             _dataUrlArray[2],
50749                             _dataUrlArray[3],
50750                             _dataUrlArray[4],
50751                             _dataUrlArray[5]
50752                         ]
50753                     };
50754                     response.resolve({status: 'ok'});
50755                 });
50756
50757                 return response.promise;
50758             },
50759
50760
50761             getSequenceKeyForBubble: function(d) {
50762                 return d && d.sequenceKey;
50763             },
50764
50765
50766             // Updates the currently highlighted sequence and selected bubble.
50767             // Reset is only necessary when interacting with the viewport because
50768             // this implicitly changes the currently selected bubble/sequence
50769             setStyles: function (hovered, reset) {
50770                 if (reset) {  // reset all layers
50771                     d3_selectAll('.viewfield-group')
50772                         .classed('highlighted', false)
50773                         .classed('hovered', false)
50774                         .classed('currentView', false);
50775
50776                     d3_selectAll('.sequence')
50777                         .classed('highlighted', false)
50778                         .classed('currentView', false);
50779                 }
50780
50781                 var hoveredBubbleKey = hovered && hovered.key;
50782                 var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
50783                 var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
50784                 var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
50785
50786                 var viewer = d3_select('#photoviewer');
50787                 var selected = viewer.empty() ? undefined : viewer.datum();
50788                 var selectedBubbleKey = selected && selected.key;
50789                 var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
50790                 var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
50791                 var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
50792
50793                 // highlight sibling viewfields on either the selected or the hovered sequences
50794                 var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
50795
50796                 d3_selectAll('.layer-streetside-images .viewfield-group')
50797                     .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
50798                     .classed('hovered', function (d) { return d.key === hoveredBubbleKey; })
50799                     .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
50800
50801                 d3_selectAll('.layer-streetside-images .sequence')
50802                     .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
50803                     .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
50804
50805                 // update viewfields if needed
50806                 d3_selectAll('.viewfield-group .viewfield')
50807                     .attr('d', viewfieldPath);
50808
50809                 function viewfieldPath() {
50810                     var d = this.parentNode.__data__;
50811                     if (d.pano && d.key !== selectedBubbleKey) {
50812                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
50813                     } else {
50814                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
50815                     }
50816                 }
50817
50818                 return this;
50819             },
50820
50821             /**
50822              * cache().
50823              */
50824             cache: function () {
50825                 return _ssCache;
50826             }
50827         };
50828
50829         var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
50830         var _inflight$2 = {};
50831         var _popularKeys = {};
50832         var _taginfoCache = {};
50833
50834         var tag_sorts = {
50835             point: 'count_nodes',
50836             vertex: 'count_nodes',
50837             area: 'count_ways',
50838             line: 'count_ways'
50839         };
50840         var tag_sort_members = {
50841             point: 'count_node_members',
50842             vertex: 'count_node_members',
50843             area: 'count_way_members',
50844             line: 'count_way_members',
50845             relation: 'count_relation_members'
50846         };
50847         var tag_filters = {
50848             point: 'nodes',
50849             vertex: 'nodes',
50850             area: 'ways',
50851             line: 'ways'
50852         };
50853         var tag_members_fractions = {
50854             point: 'count_node_members_fraction',
50855             vertex: 'count_node_members_fraction',
50856             area: 'count_way_members_fraction',
50857             line: 'count_way_members_fraction',
50858             relation: 'count_relation_members_fraction'
50859         };
50860
50861
50862         function sets(params, n, o) {
50863             if (params.geometry && o[params.geometry]) {
50864                 params[n] = o[params.geometry];
50865             }
50866             return params;
50867         }
50868
50869
50870         function setFilter(params) {
50871             return sets(params, 'filter', tag_filters);
50872         }
50873
50874
50875         function setSort(params) {
50876             return sets(params, 'sortname', tag_sorts);
50877         }
50878
50879
50880         function setSortMembers(params) {
50881             return sets(params, 'sortname', tag_sort_members);
50882         }
50883
50884
50885         function clean(params) {
50886             return utilObjectOmit(params, ['geometry', 'debounce']);
50887         }
50888
50889
50890         function filterKeys(type) {
50891             var count_type = type ? 'count_' + type : 'count_all';
50892             return function(d) {
50893                 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
50894             };
50895         }
50896
50897
50898         function filterMultikeys(prefix) {
50899             return function(d) {
50900                 // d.key begins with prefix, and d.key contains no additional ':'s
50901                 var re = new RegExp('^' + prefix + '(.*)$');
50902                 var matches = d.key.match(re) || [];
50903                 return (matches.length === 2 && matches[1].indexOf(':') === -1);
50904             };
50905         }
50906
50907
50908         function filterValues(allowUpperCase) {
50909             return function(d) {
50910                 if (d.value.match(/[;,]/) !== null) return false;  // exclude some punctuation
50911                 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false;  // exclude uppercase letters
50912                 return parseFloat(d.fraction) > 0.0;
50913             };
50914         }
50915
50916
50917         function filterRoles(geometry) {
50918             return function(d) {
50919                 if (d.role === '') return false; // exclude empty role
50920                 if (d.role.match(/[A-Z*;,]/) !== null) return false;  // exclude uppercase letters and some punctuation
50921                 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
50922             };
50923         }
50924
50925
50926         function valKey(d) {
50927             return {
50928                 value: d.key,
50929                 title: d.key
50930             };
50931         }
50932
50933
50934         function valKeyDescription(d) {
50935             return {
50936                 value: d.value,
50937                 title: d.description || d.value
50938             };
50939         }
50940
50941
50942         function roleKey(d) {
50943             return {
50944                 value: d.role,
50945                 title: d.role
50946             };
50947         }
50948
50949
50950         // sort keys with ':' lower than keys without ':'
50951         function sortKeys(a, b) {
50952             return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
50953                 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
50954                 : 0;
50955         }
50956
50957
50958         var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
50959
50960         function request$1(url, params, exactMatch, callback, loaded) {
50961             if (_inflight$2[url]) return;
50962
50963             if (checkCache(url, params, exactMatch, callback)) return;
50964
50965             var controller = new AbortController();
50966             _inflight$2[url] = controller;
50967
50968             d3_json(url, { signal: controller.signal })
50969                 .then(function(result) {
50970                     delete _inflight$2[url];
50971                     if (loaded) loaded(null, result);
50972                 })
50973                 .catch(function(err) {
50974                     delete _inflight$2[url];
50975                     if (err.name === 'AbortError') return;
50976                     if (loaded) loaded(err.message);
50977                 });
50978         }
50979
50980
50981         function checkCache(url, params, exactMatch, callback) {
50982             var rp = params.rp || 25;
50983             var testQuery = params.query || '';
50984             var testUrl = url;
50985
50986             do {
50987                 var hit = _taginfoCache[testUrl];
50988
50989                 // exact match, or shorter match yielding fewer than max results (rp)
50990                 if (hit && (url === testUrl || hit.length < rp)) {
50991                     callback(null, hit);
50992                     return true;
50993                 }
50994
50995                 // don't try to shorten the query
50996                 if (exactMatch || !testQuery.length) return false;
50997
50998                 // do shorten the query to see if we already have a cached result
50999                 // that has returned fewer than max results (rp)
51000                 testQuery = testQuery.slice(0, -1);
51001                 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
51002             } while (testQuery.length >= 0);
51003
51004             return false;
51005         }
51006
51007
51008         var serviceTaginfo = {
51009
51010             init: function() {
51011                 _inflight$2 = {};
51012                 _taginfoCache = {};
51013                 _popularKeys = {
51014                     postal_code: true   // #5377
51015                 };
51016
51017                 // Fetch popular keys.  We'll exclude these from `values`
51018                 // lookups because they stress taginfo, and they aren't likely
51019                 // to yield meaningful autocomplete results.. see #3955
51020                 var params = {
51021                     rp: 100,
51022                     sortname: 'values_all',
51023                     sortorder: 'desc',
51024                     page: 1,
51025                     debounce: false,
51026                     lang: currentLocale
51027                 };
51028                 this.keys(params, function(err, data) {
51029                     if (err) return;
51030                     data.forEach(function(d) {
51031                         if (d.value === 'opening_hours') return;  // exception
51032                         _popularKeys[d.value] = true;
51033                     });
51034                 });
51035             },
51036
51037
51038             reset: function() {
51039                 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
51040                 _inflight$2 = {};
51041             },
51042
51043
51044             keys: function(params, callback) {
51045                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51046                 params = clean(setSort(params));
51047                 params = Object.assign({
51048                     rp: 10,
51049                     sortname: 'count_all',
51050                     sortorder: 'desc',
51051                     page: 1,
51052                     lang: currentLocale
51053                 }, params);
51054
51055                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
51056                 doRequest(url, params, false, callback, function(err, d) {
51057                     if (err) {
51058                         callback(err);
51059                     } else {
51060                         var f = filterKeys(params.filter);
51061                         var result = d.data.filter(f).sort(sortKeys).map(valKey);
51062                         _taginfoCache[url] = result;
51063                         callback(null, result);
51064                     }
51065                 });
51066             },
51067
51068
51069             multikeys: function(params, callback) {
51070                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51071                 params = clean(setSort(params));
51072                 params = Object.assign({
51073                     rp: 25,
51074                     sortname: 'count_all',
51075                     sortorder: 'desc',
51076                     page: 1,
51077                     lang: currentLocale
51078                 }, params);
51079
51080                 var prefix = params.query;
51081                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
51082                 doRequest(url, params, true, callback, function(err, d) {
51083                     if (err) {
51084                         callback(err);
51085                     } else {
51086                         var f = filterMultikeys(prefix);
51087                         var result = d.data.filter(f).map(valKey);
51088                         _taginfoCache[url] = result;
51089                         callback(null, result);
51090                     }
51091                 });
51092             },
51093
51094
51095             values: function(params, callback) {
51096                 // Exclude popular keys from values lookups.. see #3955
51097                 var key = params.key;
51098                 if (key && _popularKeys[key]) {
51099                     callback(null, []);
51100                     return;
51101                 }
51102
51103                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51104                 params = clean(setSort(setFilter(params)));
51105                 params = Object.assign({
51106                     rp: 25,
51107                     sortname: 'count_all',
51108                     sortorder: 'desc',
51109                     page: 1,
51110                     lang: currentLocale
51111                 }, params);
51112
51113                 var url = apibase$4 + 'key/values?' + utilQsString(params);
51114                 doRequest(url, params, false, callback, function(err, d) {
51115                     if (err) {
51116                         callback(err);
51117                     } else {
51118                         // In most cases we prefer taginfo value results with lowercase letters.
51119                         // A few OSM keys expect values to contain uppercase values (see #3377).
51120                         // This is not an exhaustive list (e.g. `name` also has uppercase values)
51121                         // but these are the fields where taginfo value lookup is most useful.
51122                         var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
51123                         var allowUpperCase = re.test(params.key);
51124                         var f = filterValues(allowUpperCase);
51125
51126                         var result = d.data.filter(f).map(valKeyDescription);
51127                         _taginfoCache[url] = result;
51128                         callback(null, result);
51129                     }
51130                 });
51131             },
51132
51133
51134             roles: function(params, callback) {
51135                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51136                 var geometry = params.geometry;
51137                 params = clean(setSortMembers(params));
51138                 params = Object.assign({
51139                     rp: 25,
51140                     sortname: 'count_all_members',
51141                     sortorder: 'desc',
51142                     page: 1,
51143                     lang: currentLocale
51144                 }, params);
51145
51146                 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
51147                 doRequest(url, params, true, callback, function(err, d) {
51148                     if (err) {
51149                         callback(err);
51150                     } else {
51151                         var f = filterRoles(geometry);
51152                         var result = d.data.filter(f).map(roleKey);
51153                         _taginfoCache[url] = result;
51154                         callback(null, result);
51155                     }
51156                 });
51157             },
51158
51159
51160             docs: function(params, callback) {
51161                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
51162                 params = clean(setSort(params));
51163
51164                 var path = 'key/wiki_pages?';
51165                 if (params.value) {
51166                     path = 'tag/wiki_pages?';
51167                 } else if (params.rtype) {
51168                     path = 'relation/wiki_pages?';
51169                 }
51170
51171                 var url = apibase$4 + path + utilQsString(params);
51172                 doRequest(url, params, true, callback, function(err, d) {
51173                     if (err) {
51174                         callback(err);
51175                     } else {
51176                         _taginfoCache[url] = d.data;
51177                         callback(null, d.data);
51178                     }
51179                 });
51180             },
51181
51182
51183             apibase: function(_) {
51184                 if (!arguments.length) return apibase$4;
51185                 apibase$4 = _;
51186                 return this;
51187             }
51188
51189         };
51190
51191         var helpers = createCommonjsModule(function (module, exports) {
51192         Object.defineProperty(exports, "__esModule", { value: true });
51193         /**
51194          * @module helpers
51195          */
51196         /**
51197          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
51198          *
51199          * @memberof helpers
51200          * @type {number}
51201          */
51202         exports.earthRadius = 6371008.8;
51203         /**
51204          * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
51205          *
51206          * @memberof helpers
51207          * @type {Object}
51208          */
51209         exports.factors = {
51210             centimeters: exports.earthRadius * 100,
51211             centimetres: exports.earthRadius * 100,
51212             degrees: exports.earthRadius / 111325,
51213             feet: exports.earthRadius * 3.28084,
51214             inches: exports.earthRadius * 39.370,
51215             kilometers: exports.earthRadius / 1000,
51216             kilometres: exports.earthRadius / 1000,
51217             meters: exports.earthRadius,
51218             metres: exports.earthRadius,
51219             miles: exports.earthRadius / 1609.344,
51220             millimeters: exports.earthRadius * 1000,
51221             millimetres: exports.earthRadius * 1000,
51222             nauticalmiles: exports.earthRadius / 1852,
51223             radians: 1,
51224             yards: exports.earthRadius / 1.0936,
51225         };
51226         /**
51227          * Units of measurement factors based on 1 meter.
51228          *
51229          * @memberof helpers
51230          * @type {Object}
51231          */
51232         exports.unitsFactors = {
51233             centimeters: 100,
51234             centimetres: 100,
51235             degrees: 1 / 111325,
51236             feet: 3.28084,
51237             inches: 39.370,
51238             kilometers: 1 / 1000,
51239             kilometres: 1 / 1000,
51240             meters: 1,
51241             metres: 1,
51242             miles: 1 / 1609.344,
51243             millimeters: 1000,
51244             millimetres: 1000,
51245             nauticalmiles: 1 / 1852,
51246             radians: 1 / exports.earthRadius,
51247             yards: 1 / 1.0936,
51248         };
51249         /**
51250          * Area of measurement factors based on 1 square meter.
51251          *
51252          * @memberof helpers
51253          * @type {Object}
51254          */
51255         exports.areaFactors = {
51256             acres: 0.000247105,
51257             centimeters: 10000,
51258             centimetres: 10000,
51259             feet: 10.763910417,
51260             inches: 1550.003100006,
51261             kilometers: 0.000001,
51262             kilometres: 0.000001,
51263             meters: 1,
51264             metres: 1,
51265             miles: 3.86e-7,
51266             millimeters: 1000000,
51267             millimetres: 1000000,
51268             yards: 1.195990046,
51269         };
51270         /**
51271          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
51272          *
51273          * @name feature
51274          * @param {Geometry} geometry input geometry
51275          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51276          * @param {Object} [options={}] Optional Parameters
51277          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51278          * @param {string|number} [options.id] Identifier associated with the Feature
51279          * @returns {Feature} a GeoJSON Feature
51280          * @example
51281          * var geometry = {
51282          *   "type": "Point",
51283          *   "coordinates": [110, 50]
51284          * };
51285          *
51286          * var feature = turf.feature(geometry);
51287          *
51288          * //=feature
51289          */
51290         function feature(geom, properties, options) {
51291             if (options === void 0) { options = {}; }
51292             var feat = { type: "Feature" };
51293             if (options.id === 0 || options.id) {
51294                 feat.id = options.id;
51295             }
51296             if (options.bbox) {
51297                 feat.bbox = options.bbox;
51298             }
51299             feat.properties = properties || {};
51300             feat.geometry = geom;
51301             return feat;
51302         }
51303         exports.feature = feature;
51304         /**
51305          * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
51306          * For GeometryCollection type use `helpers.geometryCollection`
51307          *
51308          * @name geometry
51309          * @param {string} type Geometry Type
51310          * @param {Array<any>} coordinates Coordinates
51311          * @param {Object} [options={}] Optional Parameters
51312          * @returns {Geometry} a GeoJSON Geometry
51313          * @example
51314          * var type = "Point";
51315          * var coordinates = [110, 50];
51316          * var geometry = turf.geometry(type, coordinates);
51317          * // => geometry
51318          */
51319         function geometry(type, coordinates, options) {
51320             switch (type) {
51321                 case "Point": return point(coordinates).geometry;
51322                 case "LineString": return lineString(coordinates).geometry;
51323                 case "Polygon": return polygon(coordinates).geometry;
51324                 case "MultiPoint": return multiPoint(coordinates).geometry;
51325                 case "MultiLineString": return multiLineString(coordinates).geometry;
51326                 case "MultiPolygon": return multiPolygon(coordinates).geometry;
51327                 default: throw new Error(type + " is invalid");
51328             }
51329         }
51330         exports.geometry = geometry;
51331         /**
51332          * Creates a {@link Point} {@link Feature} from a Position.
51333          *
51334          * @name point
51335          * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
51336          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51337          * @param {Object} [options={}] Optional Parameters
51338          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51339          * @param {string|number} [options.id] Identifier associated with the Feature
51340          * @returns {Feature<Point>} a Point feature
51341          * @example
51342          * var point = turf.point([-75.343, 39.984]);
51343          *
51344          * //=point
51345          */
51346         function point(coordinates, properties, options) {
51347             if (options === void 0) { options = {}; }
51348             var geom = {
51349                 type: "Point",
51350                 coordinates: coordinates,
51351             };
51352             return feature(geom, properties, options);
51353         }
51354         exports.point = point;
51355         /**
51356          * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
51357          *
51358          * @name points
51359          * @param {Array<Array<number>>} coordinates an array of Points
51360          * @param {Object} [properties={}] Translate these properties to each Feature
51361          * @param {Object} [options={}] Optional Parameters
51362          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
51363          * associated with the FeatureCollection
51364          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51365          * @returns {FeatureCollection<Point>} Point Feature
51366          * @example
51367          * var points = turf.points([
51368          *   [-75, 39],
51369          *   [-80, 45],
51370          *   [-78, 50]
51371          * ]);
51372          *
51373          * //=points
51374          */
51375         function points(coordinates, properties, options) {
51376             if (options === void 0) { options = {}; }
51377             return featureCollection(coordinates.map(function (coords) {
51378                 return point(coords, properties);
51379             }), options);
51380         }
51381         exports.points = points;
51382         /**
51383          * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
51384          *
51385          * @name polygon
51386          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
51387          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51388          * @param {Object} [options={}] Optional Parameters
51389          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51390          * @param {string|number} [options.id] Identifier associated with the Feature
51391          * @returns {Feature<Polygon>} Polygon Feature
51392          * @example
51393          * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
51394          *
51395          * //=polygon
51396          */
51397         function polygon(coordinates, properties, options) {
51398             if (options === void 0) { options = {}; }
51399             for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
51400                 var ring = coordinates_1[_i];
51401                 if (ring.length < 4) {
51402                     throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
51403                 }
51404                 for (var j = 0; j < ring[ring.length - 1].length; j++) {
51405                     // Check if first point of Polygon contains two numbers
51406                     if (ring[ring.length - 1][j] !== ring[0][j]) {
51407                         throw new Error("First and last Position are not equivalent.");
51408                     }
51409                 }
51410             }
51411             var geom = {
51412                 type: "Polygon",
51413                 coordinates: coordinates,
51414             };
51415             return feature(geom, properties, options);
51416         }
51417         exports.polygon = polygon;
51418         /**
51419          * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
51420          *
51421          * @name polygons
51422          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
51423          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51424          * @param {Object} [options={}] Optional Parameters
51425          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51426          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51427          * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
51428          * @example
51429          * var polygons = turf.polygons([
51430          *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
51431          *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
51432          * ]);
51433          *
51434          * //=polygons
51435          */
51436         function polygons(coordinates, properties, options) {
51437             if (options === void 0) { options = {}; }
51438             return featureCollection(coordinates.map(function (coords) {
51439                 return polygon(coords, properties);
51440             }), options);
51441         }
51442         exports.polygons = polygons;
51443         /**
51444          * Creates a {@link LineString} {@link Feature} from an Array of Positions.
51445          *
51446          * @name lineString
51447          * @param {Array<Array<number>>} coordinates an array of Positions
51448          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51449          * @param {Object} [options={}] Optional Parameters
51450          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51451          * @param {string|number} [options.id] Identifier associated with the Feature
51452          * @returns {Feature<LineString>} LineString Feature
51453          * @example
51454          * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
51455          * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
51456          *
51457          * //=linestring1
51458          * //=linestring2
51459          */
51460         function lineString(coordinates, properties, options) {
51461             if (options === void 0) { options = {}; }
51462             if (coordinates.length < 2) {
51463                 throw new Error("coordinates must be an array of two or more positions");
51464             }
51465             var geom = {
51466                 type: "LineString",
51467                 coordinates: coordinates,
51468             };
51469             return feature(geom, properties, options);
51470         }
51471         exports.lineString = lineString;
51472         /**
51473          * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
51474          *
51475          * @name lineStrings
51476          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
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]
51480          * associated with the FeatureCollection
51481          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
51482          * @returns {FeatureCollection<LineString>} LineString FeatureCollection
51483          * @example
51484          * var linestrings = turf.lineStrings([
51485          *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
51486          *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
51487          * ]);
51488          *
51489          * //=linestrings
51490          */
51491         function lineStrings(coordinates, properties, options) {
51492             if (options === void 0) { options = {}; }
51493             return featureCollection(coordinates.map(function (coords) {
51494                 return lineString(coords, properties);
51495             }), options);
51496         }
51497         exports.lineStrings = lineStrings;
51498         /**
51499          * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
51500          *
51501          * @name featureCollection
51502          * @param {Feature[]} features input features
51503          * @param {Object} [options={}] Optional Parameters
51504          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51505          * @param {string|number} [options.id] Identifier associated with the Feature
51506          * @returns {FeatureCollection} FeatureCollection of Features
51507          * @example
51508          * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
51509          * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
51510          * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
51511          *
51512          * var collection = turf.featureCollection([
51513          *   locationA,
51514          *   locationB,
51515          *   locationC
51516          * ]);
51517          *
51518          * //=collection
51519          */
51520         function featureCollection(features, options) {
51521             if (options === void 0) { options = {}; }
51522             var fc = { type: "FeatureCollection" };
51523             if (options.id) {
51524                 fc.id = options.id;
51525             }
51526             if (options.bbox) {
51527                 fc.bbox = options.bbox;
51528             }
51529             fc.features = features;
51530             return fc;
51531         }
51532         exports.featureCollection = featureCollection;
51533         /**
51534          * Creates a {@link Feature<MultiLineString>} based on a
51535          * coordinate array. Properties can be added optionally.
51536          *
51537          * @name multiLineString
51538          * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
51539          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51540          * @param {Object} [options={}] Optional Parameters
51541          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51542          * @param {string|number} [options.id] Identifier associated with the Feature
51543          * @returns {Feature<MultiLineString>} a MultiLineString feature
51544          * @throws {Error} if no coordinates are passed
51545          * @example
51546          * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
51547          *
51548          * //=multiLine
51549          */
51550         function multiLineString(coordinates, properties, options) {
51551             if (options === void 0) { options = {}; }
51552             var geom = {
51553                 type: "MultiLineString",
51554                 coordinates: coordinates,
51555             };
51556             return feature(geom, properties, options);
51557         }
51558         exports.multiLineString = multiLineString;
51559         /**
51560          * Creates a {@link Feature<MultiPoint>} based on a
51561          * coordinate array. Properties can be added optionally.
51562          *
51563          * @name multiPoint
51564          * @param {Array<Array<number>>} coordinates an array of Positions
51565          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51566          * @param {Object} [options={}] Optional Parameters
51567          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51568          * @param {string|number} [options.id] Identifier associated with the Feature
51569          * @returns {Feature<MultiPoint>} a MultiPoint feature
51570          * @throws {Error} if no coordinates are passed
51571          * @example
51572          * var multiPt = turf.multiPoint([[0,0],[10,10]]);
51573          *
51574          * //=multiPt
51575          */
51576         function multiPoint(coordinates, properties, options) {
51577             if (options === void 0) { options = {}; }
51578             var geom = {
51579                 type: "MultiPoint",
51580                 coordinates: coordinates,
51581             };
51582             return feature(geom, properties, options);
51583         }
51584         exports.multiPoint = multiPoint;
51585         /**
51586          * Creates a {@link Feature<MultiPolygon>} based on a
51587          * coordinate array. Properties can be added optionally.
51588          *
51589          * @name multiPolygon
51590          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
51591          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51592          * @param {Object} [options={}] Optional Parameters
51593          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51594          * @param {string|number} [options.id] Identifier associated with the Feature
51595          * @returns {Feature<MultiPolygon>} a multipolygon feature
51596          * @throws {Error} if no coordinates are passed
51597          * @example
51598          * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
51599          *
51600          * //=multiPoly
51601          *
51602          */
51603         function multiPolygon(coordinates, properties, options) {
51604             if (options === void 0) { options = {}; }
51605             var geom = {
51606                 type: "MultiPolygon",
51607                 coordinates: coordinates,
51608             };
51609             return feature(geom, properties, options);
51610         }
51611         exports.multiPolygon = multiPolygon;
51612         /**
51613          * Creates a {@link Feature<GeometryCollection>} based on a
51614          * coordinate array. Properties can be added optionally.
51615          *
51616          * @name geometryCollection
51617          * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
51618          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
51619          * @param {Object} [options={}] Optional Parameters
51620          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
51621          * @param {string|number} [options.id] Identifier associated with the Feature
51622          * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
51623          * @example
51624          * var pt = turf.geometry("Point", [100, 0]);
51625          * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
51626          * var collection = turf.geometryCollection([pt, line]);
51627          *
51628          * // => collection
51629          */
51630         function geometryCollection(geometries, properties, options) {
51631             if (options === void 0) { options = {}; }
51632             var geom = {
51633                 type: "GeometryCollection",
51634                 geometries: geometries,
51635             };
51636             return feature(geom, properties, options);
51637         }
51638         exports.geometryCollection = geometryCollection;
51639         /**
51640          * Round number to precision
51641          *
51642          * @param {number} num Number
51643          * @param {number} [precision=0] Precision
51644          * @returns {number} rounded number
51645          * @example
51646          * turf.round(120.4321)
51647          * //=120
51648          *
51649          * turf.round(120.4321, 2)
51650          * //=120.43
51651          */
51652         function round(num, precision) {
51653             if (precision === void 0) { precision = 0; }
51654             if (precision && !(precision >= 0)) {
51655                 throw new Error("precision must be a positive number");
51656             }
51657             var multiplier = Math.pow(10, precision || 0);
51658             return Math.round(num * multiplier) / multiplier;
51659         }
51660         exports.round = round;
51661         /**
51662          * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
51663          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51664          *
51665          * @name radiansToLength
51666          * @param {number} radians in radians across the sphere
51667          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51668          * meters, kilometres, kilometers.
51669          * @returns {number} distance
51670          */
51671         function radiansToLength(radians, units) {
51672             if (units === void 0) { units = "kilometers"; }
51673             var factor = exports.factors[units];
51674             if (!factor) {
51675                 throw new Error(units + " units is invalid");
51676             }
51677             return radians * factor;
51678         }
51679         exports.radiansToLength = radiansToLength;
51680         /**
51681          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
51682          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51683          *
51684          * @name lengthToRadians
51685          * @param {number} distance in real units
51686          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51687          * meters, kilometres, kilometers.
51688          * @returns {number} radians
51689          */
51690         function lengthToRadians(distance, units) {
51691             if (units === void 0) { units = "kilometers"; }
51692             var factor = exports.factors[units];
51693             if (!factor) {
51694                 throw new Error(units + " units is invalid");
51695             }
51696             return distance / factor;
51697         }
51698         exports.lengthToRadians = lengthToRadians;
51699         /**
51700          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
51701          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
51702          *
51703          * @name lengthToDegrees
51704          * @param {number} distance in real units
51705          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
51706          * meters, kilometres, kilometers.
51707          * @returns {number} degrees
51708          */
51709         function lengthToDegrees(distance, units) {
51710             return radiansToDegrees(lengthToRadians(distance, units));
51711         }
51712         exports.lengthToDegrees = lengthToDegrees;
51713         /**
51714          * Converts any bearing angle from the north line direction (positive clockwise)
51715          * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
51716          *
51717          * @name bearingToAzimuth
51718          * @param {number} bearing angle, between -180 and +180 degrees
51719          * @returns {number} angle between 0 and 360 degrees
51720          */
51721         function bearingToAzimuth(bearing) {
51722             var angle = bearing % 360;
51723             if (angle < 0) {
51724                 angle += 360;
51725             }
51726             return angle;
51727         }
51728         exports.bearingToAzimuth = bearingToAzimuth;
51729         /**
51730          * Converts an angle in radians to degrees
51731          *
51732          * @name radiansToDegrees
51733          * @param {number} radians angle in radians
51734          * @returns {number} degrees between 0 and 360 degrees
51735          */
51736         function radiansToDegrees(radians) {
51737             var degrees = radians % (2 * Math.PI);
51738             return degrees * 180 / Math.PI;
51739         }
51740         exports.radiansToDegrees = radiansToDegrees;
51741         /**
51742          * Converts an angle in degrees to radians
51743          *
51744          * @name degreesToRadians
51745          * @param {number} degrees angle between 0 and 360 degrees
51746          * @returns {number} angle in radians
51747          */
51748         function degreesToRadians(degrees) {
51749             var radians = degrees % 360;
51750             return radians * Math.PI / 180;
51751         }
51752         exports.degreesToRadians = degreesToRadians;
51753         /**
51754          * Converts a length to the requested unit.
51755          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
51756          *
51757          * @param {number} length to be converted
51758          * @param {Units} [originalUnit="kilometers"] of the length
51759          * @param {Units} [finalUnit="kilometers"] returned unit
51760          * @returns {number} the converted length
51761          */
51762         function convertLength(length, originalUnit, finalUnit) {
51763             if (originalUnit === void 0) { originalUnit = "kilometers"; }
51764             if (finalUnit === void 0) { finalUnit = "kilometers"; }
51765             if (!(length >= 0)) {
51766                 throw new Error("length must be a positive number");
51767             }
51768             return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
51769         }
51770         exports.convertLength = convertLength;
51771         /**
51772          * Converts a area to the requested unit.
51773          * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
51774          * @param {number} area to be converted
51775          * @param {Units} [originalUnit="meters"] of the distance
51776          * @param {Units} [finalUnit="kilometers"] returned unit
51777          * @returns {number} the converted distance
51778          */
51779         function convertArea(area, originalUnit, finalUnit) {
51780             if (originalUnit === void 0) { originalUnit = "meters"; }
51781             if (finalUnit === void 0) { finalUnit = "kilometers"; }
51782             if (!(area >= 0)) {
51783                 throw new Error("area must be a positive number");
51784             }
51785             var startFactor = exports.areaFactors[originalUnit];
51786             if (!startFactor) {
51787                 throw new Error("invalid original units");
51788             }
51789             var finalFactor = exports.areaFactors[finalUnit];
51790             if (!finalFactor) {
51791                 throw new Error("invalid final units");
51792             }
51793             return (area / startFactor) * finalFactor;
51794         }
51795         exports.convertArea = convertArea;
51796         /**
51797          * isNumber
51798          *
51799          * @param {*} num Number to validate
51800          * @returns {boolean} true/false
51801          * @example
51802          * turf.isNumber(123)
51803          * //=true
51804          * turf.isNumber('foo')
51805          * //=false
51806          */
51807         function isNumber(num) {
51808             return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
51809         }
51810         exports.isNumber = isNumber;
51811         /**
51812          * isObject
51813          *
51814          * @param {*} input variable to validate
51815          * @returns {boolean} true/false
51816          * @example
51817          * turf.isObject({elevation: 10})
51818          * //=true
51819          * turf.isObject('foo')
51820          * //=false
51821          */
51822         function isObject(input) {
51823             return (!!input) && (input.constructor === Object);
51824         }
51825         exports.isObject = isObject;
51826         /**
51827          * Validate BBox
51828          *
51829          * @private
51830          * @param {Array<number>} bbox BBox to validate
51831          * @returns {void}
51832          * @throws Error if BBox is not valid
51833          * @example
51834          * validateBBox([-180, -40, 110, 50])
51835          * //=OK
51836          * validateBBox([-180, -40])
51837          * //=Error
51838          * validateBBox('Foo')
51839          * //=Error
51840          * validateBBox(5)
51841          * //=Error
51842          * validateBBox(null)
51843          * //=Error
51844          * validateBBox(undefined)
51845          * //=Error
51846          */
51847         function validateBBox(bbox) {
51848             if (!bbox) {
51849                 throw new Error("bbox is required");
51850             }
51851             if (!Array.isArray(bbox)) {
51852                 throw new Error("bbox must be an Array");
51853             }
51854             if (bbox.length !== 4 && bbox.length !== 6) {
51855                 throw new Error("bbox must be an Array of 4 or 6 numbers");
51856             }
51857             bbox.forEach(function (num) {
51858                 if (!isNumber(num)) {
51859                     throw new Error("bbox must only contain numbers");
51860                 }
51861             });
51862         }
51863         exports.validateBBox = validateBBox;
51864         /**
51865          * Validate Id
51866          *
51867          * @private
51868          * @param {string|number} id Id to validate
51869          * @returns {void}
51870          * @throws Error if Id is not valid
51871          * @example
51872          * validateId([-180, -40, 110, 50])
51873          * //=Error
51874          * validateId([-180, -40])
51875          * //=Error
51876          * validateId('Foo')
51877          * //=OK
51878          * validateId(5)
51879          * //=OK
51880          * validateId(null)
51881          * //=Error
51882          * validateId(undefined)
51883          * //=Error
51884          */
51885         function validateId(id) {
51886             if (!id) {
51887                 throw new Error("id is required");
51888             }
51889             if (["string", "number"].indexOf(typeof id) === -1) {
51890                 throw new Error("id must be a number or a string");
51891             }
51892         }
51893         exports.validateId = validateId;
51894         // Deprecated methods
51895         function radians2degrees() {
51896             throw new Error("method has been renamed to `radiansToDegrees`");
51897         }
51898         exports.radians2degrees = radians2degrees;
51899         function degrees2radians() {
51900             throw new Error("method has been renamed to `degreesToRadians`");
51901         }
51902         exports.degrees2radians = degrees2radians;
51903         function distanceToDegrees() {
51904             throw new Error("method has been renamed to `lengthToDegrees`");
51905         }
51906         exports.distanceToDegrees = distanceToDegrees;
51907         function distanceToRadians() {
51908             throw new Error("method has been renamed to `lengthToRadians`");
51909         }
51910         exports.distanceToRadians = distanceToRadians;
51911         function radiansToDistance() {
51912             throw new Error("method has been renamed to `radiansToLength`");
51913         }
51914         exports.radiansToDistance = radiansToDistance;
51915         function bearingToAngle() {
51916             throw new Error("method has been renamed to `bearingToAzimuth`");
51917         }
51918         exports.bearingToAngle = bearingToAngle;
51919         function convertDistance() {
51920             throw new Error("method has been renamed to `convertLength`");
51921         }
51922         exports.convertDistance = convertDistance;
51923         });
51924
51925         unwrapExports(helpers);
51926         var helpers_1 = helpers.earthRadius;
51927         var helpers_2 = helpers.factors;
51928         var helpers_3 = helpers.unitsFactors;
51929         var helpers_4 = helpers.areaFactors;
51930         var helpers_5 = helpers.feature;
51931         var helpers_6 = helpers.geometry;
51932         var helpers_7 = helpers.point;
51933         var helpers_8 = helpers.points;
51934         var helpers_9 = helpers.polygon;
51935         var helpers_10 = helpers.polygons;
51936         var helpers_11 = helpers.lineString;
51937         var helpers_12 = helpers.lineStrings;
51938         var helpers_13 = helpers.featureCollection;
51939         var helpers_14 = helpers.multiLineString;
51940         var helpers_15 = helpers.multiPoint;
51941         var helpers_16 = helpers.multiPolygon;
51942         var helpers_17 = helpers.geometryCollection;
51943         var helpers_18 = helpers.round;
51944         var helpers_19 = helpers.radiansToLength;
51945         var helpers_20 = helpers.lengthToRadians;
51946         var helpers_21 = helpers.lengthToDegrees;
51947         var helpers_22 = helpers.bearingToAzimuth;
51948         var helpers_23 = helpers.radiansToDegrees;
51949         var helpers_24 = helpers.degreesToRadians;
51950         var helpers_25 = helpers.convertLength;
51951         var helpers_26 = helpers.convertArea;
51952         var helpers_27 = helpers.isNumber;
51953         var helpers_28 = helpers.isObject;
51954         var helpers_29 = helpers.validateBBox;
51955         var helpers_30 = helpers.validateId;
51956         var helpers_31 = helpers.radians2degrees;
51957         var helpers_32 = helpers.degrees2radians;
51958         var helpers_33 = helpers.distanceToDegrees;
51959         var helpers_34 = helpers.distanceToRadians;
51960         var helpers_35 = helpers.radiansToDistance;
51961         var helpers_36 = helpers.bearingToAngle;
51962         var helpers_37 = helpers.convertDistance;
51963
51964         var invariant = createCommonjsModule(function (module, exports) {
51965         Object.defineProperty(exports, "__esModule", { value: true });
51966
51967         /**
51968          * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
51969          *
51970          * @name getCoord
51971          * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
51972          * @returns {Array<number>} coordinates
51973          * @example
51974          * var pt = turf.point([10, 10]);
51975          *
51976          * var coord = turf.getCoord(pt);
51977          * //= [10, 10]
51978          */
51979         function getCoord(coord) {
51980             if (!coord) {
51981                 throw new Error("coord is required");
51982             }
51983             if (!Array.isArray(coord)) {
51984                 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
51985                     return coord.geometry.coordinates;
51986                 }
51987                 if (coord.type === "Point") {
51988                     return coord.coordinates;
51989                 }
51990             }
51991             if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
51992                 return coord;
51993             }
51994             throw new Error("coord must be GeoJSON Point or an Array of numbers");
51995         }
51996         exports.getCoord = getCoord;
51997         /**
51998          * Unwrap coordinates from a Feature, Geometry Object or an Array
51999          *
52000          * @name getCoords
52001          * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
52002          * @returns {Array<any>} coordinates
52003          * @example
52004          * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
52005          *
52006          * var coords = turf.getCoords(poly);
52007          * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
52008          */
52009         function getCoords(coords) {
52010             if (Array.isArray(coords)) {
52011                 return coords;
52012             }
52013             // Feature
52014             if (coords.type === "Feature") {
52015                 if (coords.geometry !== null) {
52016                     return coords.geometry.coordinates;
52017                 }
52018             }
52019             else {
52020                 // Geometry
52021                 if (coords.coordinates) {
52022                     return coords.coordinates;
52023                 }
52024             }
52025             throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
52026         }
52027         exports.getCoords = getCoords;
52028         /**
52029          * Checks if coordinates contains a number
52030          *
52031          * @name containsNumber
52032          * @param {Array<any>} coordinates GeoJSON Coordinates
52033          * @returns {boolean} true if Array contains a number
52034          */
52035         function containsNumber(coordinates) {
52036             if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
52037                 return true;
52038             }
52039             if (Array.isArray(coordinates[0]) && coordinates[0].length) {
52040                 return containsNumber(coordinates[0]);
52041             }
52042             throw new Error("coordinates must only contain numbers");
52043         }
52044         exports.containsNumber = containsNumber;
52045         /**
52046          * Enforce expectations about types of GeoJSON objects for Turf.
52047          *
52048          * @name geojsonType
52049          * @param {GeoJSON} value any GeoJSON object
52050          * @param {string} type expected GeoJSON type
52051          * @param {string} name name of calling function
52052          * @throws {Error} if value is not the expected type.
52053          */
52054         function geojsonType(value, type, name) {
52055             if (!type || !name) {
52056                 throw new Error("type and name required");
52057             }
52058             if (!value || value.type !== type) {
52059                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
52060             }
52061         }
52062         exports.geojsonType = geojsonType;
52063         /**
52064          * Enforce expectations about types of {@link Feature} inputs for Turf.
52065          * Internally this uses {@link geojsonType} to judge geometry types.
52066          *
52067          * @name featureOf
52068          * @param {Feature} feature a feature with an expected geometry type
52069          * @param {string} type expected GeoJSON type
52070          * @param {string} name name of calling function
52071          * @throws {Error} error if value is not the expected type.
52072          */
52073         function featureOf(feature, type, name) {
52074             if (!feature) {
52075                 throw new Error("No feature passed");
52076             }
52077             if (!name) {
52078                 throw new Error(".featureOf() requires a name");
52079             }
52080             if (!feature || feature.type !== "Feature" || !feature.geometry) {
52081                 throw new Error("Invalid input to " + name + ", Feature with geometry required");
52082             }
52083             if (!feature.geometry || feature.geometry.type !== type) {
52084                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
52085             }
52086         }
52087         exports.featureOf = featureOf;
52088         /**
52089          * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
52090          * Internally this uses {@link geojsonType} to judge geometry types.
52091          *
52092          * @name collectionOf
52093          * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
52094          * @param {string} type expected GeoJSON type
52095          * @param {string} name name of calling function
52096          * @throws {Error} if value is not the expected type.
52097          */
52098         function collectionOf(featureCollection, type, name) {
52099             if (!featureCollection) {
52100                 throw new Error("No featureCollection passed");
52101             }
52102             if (!name) {
52103                 throw new Error(".collectionOf() requires a name");
52104             }
52105             if (!featureCollection || featureCollection.type !== "FeatureCollection") {
52106                 throw new Error("Invalid input to " + name + ", FeatureCollection required");
52107             }
52108             for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
52109                 var feature = _a[_i];
52110                 if (!feature || feature.type !== "Feature" || !feature.geometry) {
52111                     throw new Error("Invalid input to " + name + ", Feature with geometry required");
52112                 }
52113                 if (!feature.geometry || feature.geometry.type !== type) {
52114                     throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
52115                 }
52116             }
52117         }
52118         exports.collectionOf = collectionOf;
52119         /**
52120          * Get Geometry from Feature or Geometry Object
52121          *
52122          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
52123          * @returns {Geometry|null} GeoJSON Geometry Object
52124          * @throws {Error} if geojson is not a Feature or Geometry Object
52125          * @example
52126          * var point = {
52127          *   "type": "Feature",
52128          *   "properties": {},
52129          *   "geometry": {
52130          *     "type": "Point",
52131          *     "coordinates": [110, 40]
52132          *   }
52133          * }
52134          * var geom = turf.getGeom(point)
52135          * //={"type": "Point", "coordinates": [110, 40]}
52136          */
52137         function getGeom(geojson) {
52138             if (geojson.type === "Feature") {
52139                 return geojson.geometry;
52140             }
52141             return geojson;
52142         }
52143         exports.getGeom = getGeom;
52144         /**
52145          * Get GeoJSON object's type, Geometry type is prioritize.
52146          *
52147          * @param {GeoJSON} geojson GeoJSON object
52148          * @param {string} [name="geojson"] name of the variable to display in error message
52149          * @returns {string} GeoJSON type
52150          * @example
52151          * var point = {
52152          *   "type": "Feature",
52153          *   "properties": {},
52154          *   "geometry": {
52155          *     "type": "Point",
52156          *     "coordinates": [110, 40]
52157          *   }
52158          * }
52159          * var geom = turf.getType(point)
52160          * //="Point"
52161          */
52162         function getType(geojson, name) {
52163             if (geojson.type === "FeatureCollection") {
52164                 return "FeatureCollection";
52165             }
52166             if (geojson.type === "GeometryCollection") {
52167                 return "GeometryCollection";
52168             }
52169             if (geojson.type === "Feature" && geojson.geometry !== null) {
52170                 return geojson.geometry.type;
52171             }
52172             return geojson.type;
52173         }
52174         exports.getType = getType;
52175         });
52176
52177         unwrapExports(invariant);
52178         var invariant_1 = invariant.getCoord;
52179         var invariant_2 = invariant.getCoords;
52180         var invariant_3 = invariant.containsNumber;
52181         var invariant_4 = invariant.geojsonType;
52182         var invariant_5 = invariant.featureOf;
52183         var invariant_6 = invariant.collectionOf;
52184         var invariant_7 = invariant.getGeom;
52185         var invariant_8 = invariant.getType;
52186
52187         var lineclip_1$1 = lineclip$1;
52188         var default_1$1 = lineclip$1;
52189
52190         lineclip$1.polyline = lineclip$1;
52191         lineclip$1.polygon = polygonclip$1;
52192
52193
52194         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
52195         // handle polylines rather than just segments
52196
52197         function lineclip$1(points, bbox, result) {
52198
52199             var len = points.length,
52200                 codeA = bitCode$1(points[0], bbox),
52201                 part = [],
52202                 i, a, b, codeB, lastCode;
52203
52204             if (!result) result = [];
52205
52206             for (i = 1; i < len; i++) {
52207                 a = points[i - 1];
52208                 b = points[i];
52209                 codeB = lastCode = bitCode$1(b, bbox);
52210
52211                 while (true) {
52212
52213                     if (!(codeA | codeB)) { // accept
52214                         part.push(a);
52215
52216                         if (codeB !== lastCode) { // segment went outside
52217                             part.push(b);
52218
52219                             if (i < len - 1) { // start a new line
52220                                 result.push(part);
52221                                 part = [];
52222                             }
52223                         } else if (i === len - 1) {
52224                             part.push(b);
52225                         }
52226                         break;
52227
52228                     } else if (codeA & codeB) { // trivial reject
52229                         break;
52230
52231                     } else if (codeA) { // a outside, intersect with clip edge
52232                         a = intersect$2(a, b, codeA, bbox);
52233                         codeA = bitCode$1(a, bbox);
52234
52235                     } else { // b outside
52236                         b = intersect$2(a, b, codeB, bbox);
52237                         codeB = bitCode$1(b, bbox);
52238                     }
52239                 }
52240
52241                 codeA = lastCode;
52242             }
52243
52244             if (part.length) result.push(part);
52245
52246             return result;
52247         }
52248
52249         // Sutherland-Hodgeman polygon clipping algorithm
52250
52251         function polygonclip$1(points, bbox) {
52252
52253             var result, edge, prev, prevInside, i, p, inside;
52254
52255             // clip against each side of the clip rectangle
52256             for (edge = 1; edge <= 8; edge *= 2) {
52257                 result = [];
52258                 prev = points[points.length - 1];
52259                 prevInside = !(bitCode$1(prev, bbox) & edge);
52260
52261                 for (i = 0; i < points.length; i++) {
52262                     p = points[i];
52263                     inside = !(bitCode$1(p, bbox) & edge);
52264
52265                     // if segment goes through the clip window, add an intersection
52266                     if (inside !== prevInside) result.push(intersect$2(prev, p, edge, bbox));
52267
52268                     if (inside) result.push(p); // add a point if it's inside
52269
52270                     prev = p;
52271                     prevInside = inside;
52272                 }
52273
52274                 points = result;
52275
52276                 if (!points.length) break;
52277             }
52278
52279             return result;
52280         }
52281
52282         // intersect a segment against one of the 4 lines that make up the bbox
52283
52284         function intersect$2(a, b, edge, bbox) {
52285             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
52286                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
52287                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
52288                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
52289                    null;
52290         }
52291
52292         // bit code reflects the point position relative to the bbox:
52293
52294         //         left  mid  right
52295         //    top  1001  1000  1010
52296         //    mid  0001  0000  0010
52297         // bottom  0101  0100  0110
52298
52299         function bitCode$1(p, bbox) {
52300             var code = 0;
52301
52302             if (p[0] < bbox[0]) code |= 1; // left
52303             else if (p[0] > bbox[2]) code |= 2; // right
52304
52305             if (p[1] < bbox[1]) code |= 4; // bottom
52306             else if (p[1] > bbox[3]) code |= 8; // top
52307
52308             return code;
52309         }
52310         lineclip_1$1.default = default_1$1;
52311
52312         var bboxClip_1 = createCommonjsModule(function (module, exports) {
52313         var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
52314             if (mod && mod.__esModule) return mod;
52315             var result = {};
52316             if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
52317             result["default"] = mod;
52318             return result;
52319         };
52320         Object.defineProperty(exports, "__esModule", { value: true });
52321
52322
52323         var lineclip = __importStar(lineclip_1$1);
52324         /**
52325          * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
52326          * [lineclip](https://github.com/mapbox/lineclip).
52327          * May result in degenerate edges when clipping Polygons.
52328          *
52329          * @name bboxClip
52330          * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
52331          * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
52332          * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
52333          * @example
52334          * var bbox = [0, 0, 10, 10];
52335          * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
52336          *
52337          * var clipped = turf.bboxClip(poly, bbox);
52338          *
52339          * //addToMap
52340          * var addToMap = [bbox, poly, clipped]
52341          */
52342         function bboxClip(feature, bbox) {
52343             var geom = invariant.getGeom(feature);
52344             var type = geom.type;
52345             var properties = feature.type === "Feature" ? feature.properties : {};
52346             var coords = geom.coordinates;
52347             switch (type) {
52348                 case "LineString":
52349                 case "MultiLineString":
52350                     var lines_1 = [];
52351                     if (type === "LineString") {
52352                         coords = [coords];
52353                     }
52354                     coords.forEach(function (line) {
52355                         lineclip.polyline(line, bbox, lines_1);
52356                     });
52357                     if (lines_1.length === 1) {
52358                         return helpers.lineString(lines_1[0], properties);
52359                     }
52360                     return helpers.multiLineString(lines_1, properties);
52361                 case "Polygon":
52362                     return helpers.polygon(clipPolygon(coords, bbox), properties);
52363                 case "MultiPolygon":
52364                     return helpers.multiPolygon(coords.map(function (poly) {
52365                         return clipPolygon(poly, bbox);
52366                     }), properties);
52367                 default:
52368                     throw new Error("geometry " + type + " not supported");
52369             }
52370         }
52371         exports.default = bboxClip;
52372         function clipPolygon(rings, bbox) {
52373             var outRings = [];
52374             for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
52375                 var ring = rings_1[_i];
52376                 var clipped = lineclip.polygon(ring, bbox);
52377                 if (clipped.length > 0) {
52378                     if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
52379                         clipped.push(clipped[0]);
52380                     }
52381                     if (clipped.length >= 4) {
52382                         outRings.push(clipped);
52383                     }
52384                 }
52385             }
52386             return outRings;
52387         }
52388         });
52389
52390         var turf_bboxClip = unwrapExports(bboxClip_1);
52391
52392         var fastJsonStableStringify = function (data, opts) {
52393             if (!opts) opts = {};
52394             if (typeof opts === 'function') opts = { cmp: opts };
52395             var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
52396
52397             var cmp = opts.cmp && (function (f) {
52398                 return function (node) {
52399                     return function (a, b) {
52400                         var aobj = { key: a, value: node[a] };
52401                         var bobj = { key: b, value: node[b] };
52402                         return f(aobj, bobj);
52403                     };
52404                 };
52405             })(opts.cmp);
52406
52407             var seen = [];
52408             return (function stringify (node) {
52409                 if (node && node.toJSON && typeof node.toJSON === 'function') {
52410                     node = node.toJSON();
52411                 }
52412
52413                 if (node === undefined) return;
52414                 if (typeof node == 'number') return isFinite(node) ? '' + node : 'null';
52415                 if (typeof node !== 'object') return JSON.stringify(node);
52416
52417                 var i, out;
52418                 if (Array.isArray(node)) {
52419                     out = '[';
52420                     for (i = 0; i < node.length; i++) {
52421                         if (i) out += ',';
52422                         out += stringify(node[i]) || 'null';
52423                     }
52424                     return out + ']';
52425                 }
52426
52427                 if (node === null) return 'null';
52428
52429                 if (seen.indexOf(node) !== -1) {
52430                     if (cycles) return JSON.stringify('__cycle__');
52431                     throw new TypeError('Converting circular structure to JSON');
52432                 }
52433
52434                 var seenIndex = seen.push(node) - 1;
52435                 var keys = Object.keys(node).sort(cmp && cmp(node));
52436                 out = '';
52437                 for (i = 0; i < keys.length; i++) {
52438                     var key = keys[i];
52439                     var value = stringify(node[key]);
52440
52441                     if (!value) continue;
52442                     if (out) out += ',';
52443                     out += JSON.stringify(key) + ':' + value;
52444                 }
52445                 seen.splice(seenIndex, 1);
52446                 return '{' + out + '}';
52447             })(data);
52448         };
52449
52450         var martinez_umd = createCommonjsModule(function (module, exports) {
52451         /**
52452          * martinez v0.5.0
52453          * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
52454          *
52455          * @author Alex Milevski <info@w8r.name>
52456          * @license MIT
52457          * @preserve
52458          */
52459
52460         (function (global, factory) {
52461            factory(exports) ;
52462         }(commonjsGlobal, (function (exports) {
52463           function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
52464
52465           var SplayTree = function SplayTree(compare, noDuplicates) {
52466             if ( compare === void 0 ) compare = DEFAULT_COMPARE;
52467             if ( noDuplicates === void 0 ) noDuplicates = false;
52468
52469             this._compare = compare;
52470             this._root = null;
52471             this._size = 0;
52472             this._noDuplicates = !!noDuplicates;
52473           };
52474
52475           var prototypeAccessors = { size: { configurable: true } };
52476
52477
52478           SplayTree.prototype.rotateLeft = function rotateLeft (x) {
52479             var y = x.right;
52480             if (y) {
52481               x.right = y.left;
52482               if (y.left) { y.left.parent = x; }
52483               y.parent = x.parent;
52484             }
52485
52486             if (!x.parent)              { this._root = y; }
52487             else if (x === x.parent.left) { x.parent.left = y; }
52488             else                        { x.parent.right = y; }
52489             if (y) { y.left = x; }
52490             x.parent = y;
52491           };
52492
52493
52494           SplayTree.prototype.rotateRight = function rotateRight (x) {
52495             var y = x.left;
52496             if (y) {
52497               x.left = y.right;
52498               if (y.right) { y.right.parent = x; }
52499               y.parent = x.parent;
52500             }
52501
52502             if (!x.parent)             { this._root = y; }
52503             else if(x === x.parent.left) { x.parent.left = y; }
52504             else                       { x.parent.right = y; }
52505             if (y) { y.right = x; }
52506             x.parent = y;
52507           };
52508
52509
52510           SplayTree.prototype._splay = function _splay (x) {
52511               var this$1 = this;
52512
52513             while (x.parent) {
52514               var p = x.parent;
52515               if (!p.parent) {
52516                 if (p.left === x) { this$1.rotateRight(p); }
52517                 else            { this$1.rotateLeft(p); }
52518               } else if (p.left === x && p.parent.left === p) {
52519                 this$1.rotateRight(p.parent);
52520                 this$1.rotateRight(p);
52521               } else if (p.right === x && p.parent.right === p) {
52522                 this$1.rotateLeft(p.parent);
52523                 this$1.rotateLeft(p);
52524               } else if (p.left === x && p.parent.right === p) {
52525                 this$1.rotateRight(p);
52526                 this$1.rotateLeft(p);
52527               } else {
52528                 this$1.rotateLeft(p);
52529                 this$1.rotateRight(p);
52530               }
52531             }
52532           };
52533
52534
52535           SplayTree.prototype.splay = function splay (x) {
52536               var this$1 = this;
52537
52538             var p, gp, ggp, l, r;
52539
52540             while (x.parent) {
52541               p = x.parent;
52542               gp = p.parent;
52543
52544               if (gp && gp.parent) {
52545                 ggp = gp.parent;
52546                 if (ggp.left === gp) { ggp.left= x; }
52547                 else               { ggp.right = x; }
52548                 x.parent = ggp;
52549               } else {
52550                 x.parent = null;
52551                 this$1._root = x;
52552               }
52553
52554               l = x.left; r = x.right;
52555
52556               if (x === p.left) { // left
52557                 if (gp) {
52558                   if (gp.left === p) {
52559                     /* zig-zig */
52560                     if (p.right) {
52561                       gp.left = p.right;
52562                       gp.left.parent = gp;
52563                     } else { gp.left = null; }
52564
52565                     p.right = gp;
52566                     gp.parent = p;
52567                   } else {
52568                     /* zig-zag */
52569                     if (l) {
52570                       gp.right = l;
52571                       l.parent = gp;
52572                     } else { gp.right = null; }
52573
52574                     x.left  = gp;
52575                     gp.parent = x;
52576                   }
52577                 }
52578                 if (r) {
52579                   p.left = r;
52580                   r.parent = p;
52581                 } else { p.left = null; }
52582
52583                 x.right= p;
52584                 p.parent = x;
52585               } else { // right
52586                 if (gp) {
52587                   if (gp.right === p) {
52588                     /* zig-zig */
52589                     if (p.left) {
52590                       gp.right = p.left;
52591                       gp.right.parent = gp;
52592                     } else { gp.right = null; }
52593
52594                     p.left = gp;
52595                     gp.parent = p;
52596                   } else {
52597                     /* zig-zag */
52598                     if (r) {
52599                       gp.left = r;
52600                       r.parent = gp;
52601                     } else { gp.left = null; }
52602
52603                     x.right = gp;
52604                     gp.parent = x;
52605                   }
52606                 }
52607                 if (l) {
52608                   p.right = l;
52609                   l.parent = p;
52610                 } else { p.right = null; }
52611
52612                 x.left = p;
52613                 p.parent = x;
52614               }
52615             }
52616           };
52617
52618
52619           SplayTree.prototype.replace = function replace (u, v) {
52620             if (!u.parent) { this._root = v; }
52621             else if (u === u.parent.left) { u.parent.left = v; }
52622             else { u.parent.right = v; }
52623             if (v) { v.parent = u.parent; }
52624           };
52625
52626
52627           SplayTree.prototype.minNode = function minNode (u) {
52628               if ( u === void 0 ) u = this._root;
52629
52630             if (u) { while (u.left) { u = u.left; } }
52631             return u;
52632           };
52633
52634
52635           SplayTree.prototype.maxNode = function maxNode (u) {
52636               if ( u === void 0 ) u = this._root;
52637
52638             if (u) { while (u.right) { u = u.right; } }
52639             return u;
52640           };
52641
52642
52643           SplayTree.prototype.insert = function insert (key, data) {
52644             var z = this._root;
52645             var p = null;
52646             var comp = this._compare;
52647             var cmp;
52648
52649             if (this._noDuplicates) {
52650               while (z) {
52651                 p = z;
52652                 cmp = comp(z.key, key);
52653                 if (cmp === 0) { return; }
52654                 else if (comp(z.key, key) < 0) { z = z.right; }
52655                 else { z = z.left; }
52656               }
52657             } else {
52658               while (z) {
52659                 p = z;
52660                 if (comp(z.key, key) < 0) { z = z.right; }
52661                 else { z = z.left; }
52662               }
52663             }
52664
52665             z = { key: key, data: data, left: null, right: null, parent: p };
52666
52667             if (!p)                        { this._root = z; }
52668             else if (comp(p.key, z.key) < 0) { p.right = z; }
52669             else                           { p.left= z; }
52670
52671             this.splay(z);
52672             this._size++;
52673             return z;
52674           };
52675
52676
52677           SplayTree.prototype.find = function find (key) {
52678             var z  = this._root;
52679             var comp = this._compare;
52680             while (z) {
52681               var cmp = comp(z.key, key);
52682               if    (cmp < 0) { z = z.right; }
52683               else if (cmp > 0) { z = z.left; }
52684               else            { return z; }
52685             }
52686             return null;
52687           };
52688
52689           /**
52690            * Whether the tree contains a node with the given key
52691            * @param{Key} key
52692            * @return {boolean} true/false
52693            */
52694           SplayTree.prototype.contains = function contains (key) {
52695             var node     = this._root;
52696             var comparator = this._compare;
52697             while (node){
52698               var cmp = comparator(key, node.key);
52699               if    (cmp === 0) { return true; }
52700               else if (cmp < 0) { node = node.left; }
52701               else              { node = node.right; }
52702             }
52703
52704             return false;
52705           };
52706
52707
52708           SplayTree.prototype.remove = function remove (key) {
52709             var z = this.find(key);
52710
52711             if (!z) { return false; }
52712
52713             this.splay(z);
52714
52715             if (!z.left) { this.replace(z, z.right); }
52716             else if (!z.right) { this.replace(z, z.left); }
52717             else {
52718               var y = this.minNode(z.right);
52719               if (y.parent !== z) {
52720                 this.replace(y, y.right);
52721                 y.right = z.right;
52722                 y.right.parent = y;
52723               }
52724               this.replace(z, y);
52725               y.left = z.left;
52726               y.left.parent = y;
52727             }
52728
52729             this._size--;
52730             return true;
52731           };
52732
52733
52734           SplayTree.prototype.removeNode = function removeNode (z) {
52735             if (!z) { return false; }
52736
52737             this.splay(z);
52738
52739             if (!z.left) { this.replace(z, z.right); }
52740             else if (!z.right) { this.replace(z, z.left); }
52741             else {
52742               var y = this.minNode(z.right);
52743               if (y.parent !== z) {
52744                 this.replace(y, y.right);
52745                 y.right = z.right;
52746                 y.right.parent = y;
52747               }
52748               this.replace(z, y);
52749               y.left = z.left;
52750               y.left.parent = y;
52751             }
52752
52753             this._size--;
52754             return true;
52755           };
52756
52757
52758           SplayTree.prototype.erase = function erase (key) {
52759             var z = this.find(key);
52760             if (!z) { return; }
52761
52762             this.splay(z);
52763
52764             var s = z.left;
52765             var t = z.right;
52766
52767             var sMax = null;
52768             if (s) {
52769               s.parent = null;
52770               sMax = this.maxNode(s);
52771               this.splay(sMax);
52772               this._root = sMax;
52773             }
52774             if (t) {
52775               if (s) { sMax.right = t; }
52776               else { this._root = t; }
52777               t.parent = sMax;
52778             }
52779
52780             this._size--;
52781           };
52782
52783           /**
52784            * Removes and returns the node with smallest key
52785            * @return {?Node}
52786            */
52787           SplayTree.prototype.pop = function pop () {
52788             var node = this._root, returnValue = null;
52789             if (node) {
52790               while (node.left) { node = node.left; }
52791               returnValue = { key: node.key, data: node.data };
52792               this.remove(node.key);
52793             }
52794             return returnValue;
52795           };
52796
52797
52798           /* eslint-disable class-methods-use-this */
52799
52800           /**
52801            * Successor node
52802            * @param{Node} node
52803            * @return {?Node}
52804            */
52805           SplayTree.prototype.next = function next (node) {
52806             var successor = node;
52807             if (successor) {
52808               if (successor.right) {
52809                 successor = successor.right;
52810                 while (successor && successor.left) { successor = successor.left; }
52811               } else {
52812                 successor = node.parent;
52813                 while (successor && successor.right === node) {
52814                   node = successor; successor = successor.parent;
52815                 }
52816               }
52817             }
52818             return successor;
52819           };
52820
52821
52822           /**
52823            * Predecessor node
52824            * @param{Node} node
52825            * @return {?Node}
52826            */
52827           SplayTree.prototype.prev = function prev (node) {
52828             var predecessor = node;
52829             if (predecessor) {
52830               if (predecessor.left) {
52831                 predecessor = predecessor.left;
52832                 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
52833               } else {
52834                 predecessor = node.parent;
52835                 while (predecessor && predecessor.left === node) {
52836                   node = predecessor;
52837                   predecessor = predecessor.parent;
52838                 }
52839               }
52840             }
52841             return predecessor;
52842           };
52843           /* eslint-enable class-methods-use-this */
52844
52845
52846           /**
52847            * @param{forEachCallback} callback
52848            * @return {SplayTree}
52849            */
52850           SplayTree.prototype.forEach = function forEach (callback) {
52851             var current = this._root;
52852             var s = [], done = false, i = 0;
52853
52854             while (!done) {
52855               // Reach the left most Node of the current Node
52856               if (current) {
52857                 // Place pointer to a tree node on the stack
52858                 // before traversing the node's left subtree
52859                 s.push(current);
52860                 current = current.left;
52861               } else {
52862                 // BackTrack from the empty subtree and visit the Node
52863                 // at the top of the stack; however, if the stack is
52864                 // empty you are done
52865                 if (s.length > 0) {
52866                   current = s.pop();
52867                   callback(current, i++);
52868
52869                   // We have visited the node and its left
52870                   // subtree. Now, it's right subtree's turn
52871                   current = current.right;
52872                 } else { done = true; }
52873               }
52874             }
52875             return this;
52876           };
52877
52878
52879           /**
52880            * Walk key range from `low` to `high`. Stops if `fn` returns a value.
52881            * @param{Key}    low
52882            * @param{Key}    high
52883            * @param{Function} fn
52884            * @param{*?}     ctx
52885            * @return {SplayTree}
52886            */
52887           SplayTree.prototype.range = function range (low, high, fn, ctx) {
52888               var this$1 = this;
52889
52890             var Q = [];
52891             var compare = this._compare;
52892             var node = this._root, cmp;
52893
52894             while (Q.length !== 0 || node) {
52895               if (node) {
52896                 Q.push(node);
52897                 node = node.left;
52898               } else {
52899                 node = Q.pop();
52900                 cmp = compare(node.key, high);
52901                 if (cmp > 0) {
52902                   break;
52903                 } else if (compare(node.key, low) >= 0) {
52904                   if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
52905                 }
52906                 node = node.right;
52907               }
52908             }
52909             return this;
52910           };
52911
52912           /**
52913            * Returns all keys in order
52914            * @return {Array<Key>}
52915            */
52916           SplayTree.prototype.keys = function keys () {
52917             var current = this._root;
52918             var s = [], r = [], done = false;
52919
52920             while (!done) {
52921               if (current) {
52922                 s.push(current);
52923                 current = current.left;
52924               } else {
52925                 if (s.length > 0) {
52926                   current = s.pop();
52927                   r.push(current.key);
52928                   current = current.right;
52929                 } else { done = true; }
52930               }
52931             }
52932             return r;
52933           };
52934
52935
52936           /**
52937            * Returns `data` fields of all nodes in order.
52938            * @return {Array<Value>}
52939            */
52940           SplayTree.prototype.values = function values () {
52941             var current = this._root;
52942             var s = [], r = [], done = false;
52943
52944             while (!done) {
52945               if (current) {
52946                 s.push(current);
52947                 current = current.left;
52948               } else {
52949                 if (s.length > 0) {
52950                   current = s.pop();
52951                   r.push(current.data);
52952                   current = current.right;
52953                 } else { done = true; }
52954               }
52955             }
52956             return r;
52957           };
52958
52959
52960           /**
52961            * Returns node at given index
52962            * @param{number} index
52963            * @return {?Node}
52964            */
52965           SplayTree.prototype.at = function at (index) {
52966             // removed after a consideration, more misleading than useful
52967             // index = index % this.size;
52968             // if (index < 0) index = this.size - index;
52969
52970             var current = this._root;
52971             var s = [], done = false, i = 0;
52972
52973             while (!done) {
52974               if (current) {
52975                 s.push(current);
52976                 current = current.left;
52977               } else {
52978                 if (s.length > 0) {
52979                   current = s.pop();
52980                   if (i === index) { return current; }
52981                   i++;
52982                   current = current.right;
52983                 } else { done = true; }
52984               }
52985             }
52986             return null;
52987           };
52988
52989           /**
52990            * Bulk-load items. Both array have to be same size
52991            * @param{Array<Key>}  keys
52992            * @param{Array<Value>}[values]
52993            * @param{Boolean}     [presort=false] Pre-sort keys and values, using
52994            *                                       tree's comparator. Sorting is done
52995            *                                       in-place
52996            * @return {AVLTree}
52997            */
52998           SplayTree.prototype.load = function load (keys, values, presort) {
52999               if ( keys === void 0 ) keys = [];
53000               if ( values === void 0 ) values = [];
53001               if ( presort === void 0 ) presort = false;
53002
53003             if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
53004             var size = keys.length;
53005             if (presort) { sort(keys, values, 0, size - 1, this._compare); }
53006             this._root = loadRecursive(null, keys, values, 0, size);
53007             this._size = size;
53008             return this;
53009           };
53010
53011
53012           SplayTree.prototype.min = function min () {
53013             var node = this.minNode(this._root);
53014             if (node) { return node.key; }
53015             else    { return null; }
53016           };
53017
53018
53019           SplayTree.prototype.max = function max () {
53020             var node = this.maxNode(this._root);
53021             if (node) { return node.key; }
53022             else    { return null; }
53023           };
53024
53025           SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
53026           prototypeAccessors.size.get = function () { return this._size; };
53027
53028
53029           /**
53030            * Create a tree and load it with items
53031            * @param{Array<Key>}        keys
53032            * @param{Array<Value>?}      [values]
53033
53034            * @param{Function?}          [comparator]
53035            * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
53036            *                                             tree's comparator. Sorting is done
53037            *                                             in-place
53038            * @param{Boolean?}           [noDuplicates=false] Allow duplicates
53039            * @return {SplayTree}
53040            */
53041           SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
53042             return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
53043           };
53044
53045           Object.defineProperties( SplayTree.prototype, prototypeAccessors );
53046
53047
53048           function loadRecursive (parent, keys, values, start, end) {
53049             var size = end - start;
53050             if (size > 0) {
53051               var middle = start + Math.floor(size / 2);
53052               var key    = keys[middle];
53053               var data   = values[middle];
53054               var node   = { key: key, data: data, parent: parent };
53055               node.left    = loadRecursive(node, keys, values, start, middle);
53056               node.right   = loadRecursive(node, keys, values, middle + 1, end);
53057               return node;
53058             }
53059             return null;
53060           }
53061
53062
53063           function sort(keys, values, left, right, compare) {
53064             if (left >= right) { return; }
53065
53066             var pivot = keys[(left + right) >> 1];
53067             var i = left - 1;
53068             var j = right + 1;
53069
53070             while (true) {
53071               do { i++; } while (compare(keys[i], pivot) < 0);
53072               do { j--; } while (compare(keys[j], pivot) > 0);
53073               if (i >= j) { break; }
53074
53075               var tmp = keys[i];
53076               keys[i] = keys[j];
53077               keys[j] = tmp;
53078
53079               tmp = values[i];
53080               values[i] = values[j];
53081               values[j] = tmp;
53082             }
53083
53084             sort(keys, values,  left,     j, compare);
53085             sort(keys, values, j + 1, right, compare);
53086           }
53087
53088           var NORMAL               = 0;
53089           var NON_CONTRIBUTING     = 1;
53090           var SAME_TRANSITION      = 2;
53091           var DIFFERENT_TRANSITION = 3;
53092
53093           var INTERSECTION = 0;
53094           var UNION        = 1;
53095           var DIFFERENCE   = 2;
53096           var XOR          = 3;
53097
53098           /**
53099            * @param  {SweepEvent} event
53100            * @param  {SweepEvent} prev
53101            * @param  {Operation} operation
53102            */
53103           function computeFields (event, prev, operation) {
53104             // compute inOut and otherInOut fields
53105             if (prev === null) {
53106               event.inOut      = false;
53107               event.otherInOut = true;
53108
53109             // previous line segment in sweepline belongs to the same polygon
53110             } else {
53111               if (event.isSubject === prev.isSubject) {
53112                 event.inOut      = !prev.inOut;
53113                 event.otherInOut = prev.otherInOut;
53114
53115               // previous line segment in sweepline belongs to the clipping polygon
53116               } else {
53117                 event.inOut      = !prev.otherInOut;
53118                 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
53119               }
53120
53121               // compute prevInResult field
53122               if (prev) {
53123                 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
53124                   ? prev.prevInResult : prev;
53125               }
53126             }
53127
53128             // check if the line segment belongs to the Boolean operation
53129             event.inResult = inResult(event, operation);
53130           }
53131
53132
53133           /* eslint-disable indent */
53134           function inResult(event, operation) {
53135             switch (event.type) {
53136               case NORMAL:
53137                 switch (operation) {
53138                   case INTERSECTION:
53139                     return !event.otherInOut;
53140                   case UNION:
53141                     return event.otherInOut;
53142                   case DIFFERENCE:
53143                     // return (event.isSubject && !event.otherInOut) ||
53144                     //         (!event.isSubject && event.otherInOut);
53145                     return (event.isSubject && event.otherInOut) ||
53146                             (!event.isSubject && !event.otherInOut);
53147                   case XOR:
53148                     return true;
53149                 }
53150                 break;
53151               case SAME_TRANSITION:
53152                 return operation === INTERSECTION || operation === UNION;
53153               case DIFFERENT_TRANSITION:
53154                 return operation === DIFFERENCE;
53155               case NON_CONTRIBUTING:
53156                 return false;
53157             }
53158             return false;
53159           }
53160           /* eslint-enable indent */
53161
53162           var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
53163
53164             /**
53165              * Is left endpoint?
53166              * @type {Boolean}
53167              */
53168             this.left = left;
53169
53170             /**
53171              * @type {Array.<Number>}
53172              */
53173             this.point = point;
53174
53175             /**
53176              * Other edge reference
53177              * @type {SweepEvent}
53178              */
53179             this.otherEvent = otherEvent;
53180
53181             /**
53182              * Belongs to source or clipping polygon
53183              * @type {Boolean}
53184              */
53185             this.isSubject = isSubject;
53186
53187             /**
53188              * Edge contribution type
53189              * @type {Number}
53190              */
53191             this.type = edgeType || NORMAL;
53192
53193
53194             /**
53195              * In-out transition for the sweepline crossing polygon
53196              * @type {Boolean}
53197              */
53198             this.inOut = false;
53199
53200
53201             /**
53202              * @type {Boolean}
53203              */
53204             this.otherInOut = false;
53205
53206             /**
53207              * Previous event in result?
53208              * @type {SweepEvent}
53209              */
53210             this.prevInResult = null;
53211
53212             /**
53213              * Does event belong to result?
53214              * @type {Boolean}
53215              */
53216             this.inResult = false;
53217
53218
53219             // connection step
53220
53221             /**
53222              * @type {Boolean}
53223              */
53224             this.resultInOut = false;
53225
53226             this.isExteriorRing = true;
53227           };
53228
53229
53230           /**
53231            * @param{Array.<Number>}p
53232            * @return {Boolean}
53233            */
53234           SweepEvent.prototype.isBelow = function isBelow (p) {
53235             var p0 = this.point, p1 = this.otherEvent.point;
53236             return this.left
53237               ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
53238               // signedArea(this.point, this.otherEvent.point, p) > 0 :
53239               : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
53240               //signedArea(this.otherEvent.point, this.point, p) > 0;
53241           };
53242
53243
53244           /**
53245            * @param{Array.<Number>}p
53246            * @return {Boolean}
53247            */
53248           SweepEvent.prototype.isAbove = function isAbove (p) {
53249             return !this.isBelow(p);
53250           };
53251
53252
53253           /**
53254            * @return {Boolean}
53255            */
53256           SweepEvent.prototype.isVertical = function isVertical () {
53257             return this.point[0] === this.otherEvent.point[0];
53258           };
53259
53260
53261           SweepEvent.prototype.clone = function clone () {
53262             var copy = new SweepEvent(
53263               this.point, this.left, this.otherEvent, this.isSubject, this.type);
53264
53265             copy.inResult     = this.inResult;
53266             copy.prevInResult = this.prevInResult;
53267             copy.isExteriorRing = this.isExteriorRing;
53268             copy.inOut        = this.inOut;
53269             copy.otherInOut   = this.otherInOut;
53270
53271             return copy;
53272           };
53273
53274           function equals(p1, p2) {
53275             if (p1[0] === p2[0]) {
53276               if (p1[1] === p2[1]) {
53277                 return true;
53278               } else {
53279                 return false;
53280               }
53281             }
53282             return false;
53283           }
53284
53285           // const EPSILON = 1e-9;
53286           // const abs = Math.abs;
53287           // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
53288           // Precision problem.
53289           //
53290           // module.exports = function equals(p1, p2) {
53291           //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
53292           // };
53293
53294           /**
53295            * Signed area of the triangle (p0, p1, p2)
53296            * @param  {Array.<Number>} p0
53297            * @param  {Array.<Number>} p1
53298            * @param  {Array.<Number>} p2
53299            * @return {Number}
53300            */
53301           function signedArea(p0, p1, p2) {
53302             return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
53303           }
53304
53305           /**
53306            * @param  {SweepEvent} e1
53307            * @param  {SweepEvent} e2
53308            * @return {Number}
53309            */
53310           function compareEvents(e1, e2) {
53311             var p1 = e1.point;
53312             var p2 = e2.point;
53313
53314             // Different x-coordinate
53315             if (p1[0] > p2[0]) { return 1; }
53316             if (p1[0] < p2[0]) { return -1; }
53317
53318             // Different points, but same x-coordinate
53319             // Event with lower y-coordinate is processed first
53320             if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
53321
53322             return specialCases(e1, e2, p1);
53323           }
53324
53325
53326           /* eslint-disable no-unused-vars */
53327           function specialCases(e1, e2, p1, p2) {
53328             // Same coordinates, but one is a left endpoint and the other is
53329             // a right endpoint. The right endpoint is processed first
53330             if (e1.left !== e2.left)
53331               { return e1.left ? 1 : -1; }
53332
53333             // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
53334             // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
53335             // Same coordinates, both events
53336             // are left endpoints or right endpoints.
53337             // not collinear
53338             if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
53339               // the event associate to the bottom segment is processed first
53340               return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
53341             }
53342
53343             return (!e1.isSubject && e2.isSubject) ? 1 : -1;
53344           }
53345           /* eslint-enable no-unused-vars */
53346
53347           /**
53348            * @param  {SweepEvent} se
53349            * @param  {Array.<Number>} p
53350            * @param  {Queue} queue
53351            * @return {Queue}
53352            */
53353           function divideSegment(se, p, queue)  {
53354             var r = new SweepEvent(p, false, se,            se.isSubject);
53355             var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
53356
53357             /* eslint-disable no-console */
53358             if (equals(se.point, se.otherEvent.point)) {
53359
53360               console.warn('what is that, a collapsed segment?', se);
53361             }
53362             /* eslint-enable no-console */
53363
53364             r.contourId = l.contourId = se.contourId;
53365
53366             // avoid a rounding error. The left event would be processed after the right event
53367             if (compareEvents(l, se.otherEvent) > 0) {
53368               se.otherEvent.left = true;
53369               l.left = false;
53370             }
53371
53372             // avoid a rounding error. The left event would be processed after the right event
53373             // if (compareEvents(se, r) > 0) {}
53374
53375             se.otherEvent.otherEvent = l;
53376             se.otherEvent = r;
53377
53378             queue.push(l);
53379             queue.push(r);
53380
53381             return queue;
53382           }
53383
53384           //const EPS = 1e-9;
53385
53386           /**
53387            * Finds the magnitude of the cross product of two vectors (if we pretend
53388            * they're in three dimensions)
53389            *
53390            * @param {Object} a First vector
53391            * @param {Object} b Second vector
53392            * @private
53393            * @returns {Number} The magnitude of the cross product
53394            */
53395           function crossProduct(a, b) {
53396             return (a[0] * b[1]) - (a[1] * b[0]);
53397           }
53398
53399           /**
53400            * Finds the dot product of two vectors.
53401            *
53402            * @param {Object} a First vector
53403            * @param {Object} b Second vector
53404            * @private
53405            * @returns {Number} The dot product
53406            */
53407           function dotProduct(a, b) {
53408             return (a[0] * b[0]) + (a[1] * b[1]);
53409           }
53410
53411           /**
53412            * Finds the intersection (if any) between two line segments a and b, given the
53413            * line segments' end points a1, a2 and b1, b2.
53414            *
53415            * This algorithm is based on Schneider and Eberly.
53416            * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
53417            * Page 244.
53418            *
53419            * @param {Array.<Number>} a1 point of first line
53420            * @param {Array.<Number>} a2 point of first line
53421            * @param {Array.<Number>} b1 point of second line
53422            * @param {Array.<Number>} b2 point of second line
53423            * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
53424            *                                         (meaning connected segments) as
53425            *                                         intersections
53426            * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
53427            * intersection. If they overlap, the two end points of the overlapping segment.
53428            * Otherwise, null.
53429            */
53430           function intersection (a1, a2, b1, b2, noEndpointTouch) {
53431             // The algorithm expects our lines in the form P + sd, where P is a point,
53432             // s is on the interval [0, 1], and d is a vector.
53433             // We are passed two points. P can be the first point of each pair. The
53434             // vector, then, could be thought of as the distance (in x and y components)
53435             // from the first point to the second point.
53436             // So first, let's make our vectors:
53437             var va = [a2[0] - a1[0], a2[1] - a1[1]];
53438             var vb = [b2[0] - b1[0], b2[1] - b1[1]];
53439             // We also define a function to convert back to regular point form:
53440
53441             /* eslint-disable arrow-body-style */
53442
53443             function toPoint(p, s, d) {
53444               return [
53445                 p[0] + s * d[0],
53446                 p[1] + s * d[1]
53447               ];
53448             }
53449
53450             /* eslint-enable arrow-body-style */
53451
53452             // The rest is pretty much a straight port of the algorithm.
53453             var e = [b1[0] - a1[0], b1[1] - a1[1]];
53454             var kross    = crossProduct(va, vb);
53455             var sqrKross = kross * kross;
53456             var sqrLenA  = dotProduct(va, va);
53457             //const sqrLenB  = dotProduct(vb, vb);
53458
53459             // Check for line intersection. This works because of the properties of the
53460             // cross product -- specifically, two vectors are parallel if and only if the
53461             // cross product is the 0 vector. The full calculation involves relative error
53462             // to account for possible very small line segments. See Schneider & Eberly
53463             // for details.
53464             if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
53465               // If they're not parallel, then (because these are line segments) they
53466               // still might not actually intersect. This code checks that the
53467               // intersection point of the lines is actually on both line segments.
53468               var s = crossProduct(e, vb) / kross;
53469               if (s < 0 || s > 1) {
53470                 // not on line segment a
53471                 return null;
53472               }
53473               var t = crossProduct(e, va) / kross;
53474               if (t < 0 || t > 1) {
53475                 // not on line segment b
53476                 return null;
53477               }
53478               if (s === 0 || s === 1) {
53479                 // on an endpoint of line segment a
53480                 return noEndpointTouch ? null : [toPoint(a1, s, va)];
53481               }
53482               if (t === 0 || t === 1) {
53483                 // on an endpoint of line segment b
53484                 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
53485               }
53486               return [toPoint(a1, s, va)];
53487             }
53488
53489             // If we've reached this point, then the lines are either parallel or the
53490             // same, but the segments could overlap partially or fully, or not at all.
53491             // So we need to find the overlap, if any. To do that, we can use e, which is
53492             // the (vector) difference between the two initial points. If this is parallel
53493             // with the line itself, then the two lines are the same line, and there will
53494             // be overlap.
53495             //const sqrLenE = dotProduct(e, e);
53496             kross = crossProduct(e, va);
53497             sqrKross = kross * kross;
53498
53499             if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
53500             // Lines are just parallel, not the same. No overlap.
53501               return null;
53502             }
53503
53504             var sa = dotProduct(va, e) / sqrLenA;
53505             var sb = sa + dotProduct(va, vb) / sqrLenA;
53506             var smin = Math.min(sa, sb);
53507             var smax = Math.max(sa, sb);
53508
53509             // this is, essentially, the FindIntersection acting on floats from
53510             // Schneider & Eberly, just inlined into this function.
53511             if (smin <= 1 && smax >= 0) {
53512
53513               // overlap on an end point
53514               if (smin === 1) {
53515                 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
53516               }
53517
53518               if (smax === 0) {
53519                 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
53520               }
53521
53522               if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
53523
53524               // There's overlap on a segment -- two points of intersection. Return both.
53525               return [
53526                 toPoint(a1, smin > 0 ? smin : 0, va),
53527                 toPoint(a1, smax < 1 ? smax : 1, va)
53528               ];
53529             }
53530
53531             return null;
53532           }
53533
53534           /**
53535            * @param  {SweepEvent} se1
53536            * @param  {SweepEvent} se2
53537            * @param  {Queue}      queue
53538            * @return {Number}
53539            */
53540           function possibleIntersection (se1, se2, queue) {
53541             // that disallows self-intersecting polygons,
53542             // did cost us half a day, so I'll leave it
53543             // out of respect
53544             // if (se1.isSubject === se2.isSubject) return;
53545             var inter = intersection(
53546               se1.point, se1.otherEvent.point,
53547               se2.point, se2.otherEvent.point
53548             );
53549
53550             var nintersections = inter ? inter.length : 0;
53551             if (nintersections === 0) { return 0; } // no intersection
53552
53553             // the line segments intersect at an endpoint of both line segments
53554             if ((nintersections === 1) &&
53555                 (equals(se1.point, se2.point) ||
53556                  equals(se1.otherEvent.point, se2.otherEvent.point))) {
53557               return 0;
53558             }
53559
53560             if (nintersections === 2 && se1.isSubject === se2.isSubject) {
53561               // if(se1.contourId === se2.contourId){
53562               // console.warn('Edges of the same polygon overlap',
53563               //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
53564               // }
53565               //throw new Error('Edges of the same polygon overlap');
53566               return 0;
53567             }
53568
53569             // The line segments associated to se1 and se2 intersect
53570             if (nintersections === 1) {
53571
53572               // if the intersection point is not an endpoint of se1
53573               if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
53574                 divideSegment(se1, inter[0], queue);
53575               }
53576
53577               // if the intersection point is not an endpoint of se2
53578               if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
53579                 divideSegment(se2, inter[0], queue);
53580               }
53581               return 1;
53582             }
53583
53584             // The line segments associated to se1 and se2 overlap
53585             var events        = [];
53586             var leftCoincide  = false;
53587             var rightCoincide = false;
53588
53589             if (equals(se1.point, se2.point)) {
53590               leftCoincide = true; // linked
53591             } else if (compareEvents(se1, se2) === 1) {
53592               events.push(se2, se1);
53593             } else {
53594               events.push(se1, se2);
53595             }
53596
53597             if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
53598               rightCoincide = true;
53599             } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
53600               events.push(se2.otherEvent, se1.otherEvent);
53601             } else {
53602               events.push(se1.otherEvent, se2.otherEvent);
53603             }
53604
53605             if ((leftCoincide && rightCoincide) || leftCoincide) {
53606               // both line segments are equal or share the left endpoint
53607               se2.type = NON_CONTRIBUTING;
53608               se1.type = (se2.inOut === se1.inOut)
53609                 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
53610
53611               if (leftCoincide && !rightCoincide) {
53612                 // honestly no idea, but changing events selection from [2, 1]
53613                 // to [0, 1] fixes the overlapping self-intersecting polygons issue
53614                 divideSegment(events[1].otherEvent, events[0].point, queue);
53615               }
53616               return 2;
53617             }
53618
53619             // the line segments share the right endpoint
53620             if (rightCoincide) {
53621               divideSegment(events[0], events[1].point, queue);
53622               return 3;
53623             }
53624
53625             // no line segment includes totally the other one
53626             if (events[0] !== events[3].otherEvent) {
53627               divideSegment(events[0], events[1].point, queue);
53628               divideSegment(events[1], events[2].point, queue);
53629               return 3;
53630             }
53631
53632             // one line segment includes the other one
53633             divideSegment(events[0], events[1].point, queue);
53634             divideSegment(events[3].otherEvent, events[2].point, queue);
53635
53636             return 3;
53637           }
53638
53639           /**
53640            * @param  {SweepEvent} le1
53641            * @param  {SweepEvent} le2
53642            * @return {Number}
53643            */
53644           function compareSegments(le1, le2) {
53645             if (le1 === le2) { return 0; }
53646
53647             // Segments are not collinear
53648             if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
53649               signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
53650
53651               // If they share their left endpoint use the right endpoint to sort
53652               if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
53653
53654               // Different left endpoint: use the left endpoint to sort
53655               if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
53656
53657               // has the line segment associated to e1 been inserted
53658               // into S after the line segment associated to e2 ?
53659               if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
53660
53661               // The line segment associated to e2 has been inserted
53662               // into S after the line segment associated to e1
53663               return le1.isBelow(le2.point) ? -1 : 1;
53664             }
53665
53666             if (le1.isSubject === le2.isSubject) { // same polygon
53667               var p1 = le1.point, p2 = le2.point;
53668               if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
53669                 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
53670                 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
53671                 else { return le1.contourId > le2.contourId ? 1 : -1; }
53672               }
53673             } else { // Segments are collinear, but belong to separate polygons
53674               return le1.isSubject ? -1 : 1;
53675             }
53676
53677             return compareEvents(le1, le2) === 1 ? 1 : -1;
53678           }
53679
53680           function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
53681             var sweepLine = new SplayTree(compareSegments);
53682             var sortedEvents = [];
53683
53684             var rightbound = Math.min(sbbox[2], cbbox[2]);
53685
53686             var prev, next, begin;
53687
53688             while (eventQueue.length !== 0) {
53689               var event = eventQueue.pop();
53690               sortedEvents.push(event);
53691
53692               // optimization by bboxes for intersection and difference goes here
53693               if ((operation === INTERSECTION && event.point[0] > rightbound) ||
53694                   (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
53695                 break;
53696               }
53697
53698               if (event.left) {
53699                 next  = prev = sweepLine.insert(event);
53700                 begin = sweepLine.minNode();
53701
53702                 if (prev !== begin) { prev = sweepLine.prev(prev); }
53703                 else                { prev = null; }
53704
53705                 next = sweepLine.next(next);
53706
53707                 var prevEvent = prev ? prev.key : null;
53708                 var prevprevEvent = (void 0);
53709                 computeFields(event, prevEvent, operation);
53710                 if (next) {
53711                   if (possibleIntersection(event, next.key, eventQueue) === 2) {
53712                     computeFields(event, prevEvent, operation);
53713                     computeFields(event, next.key, operation);
53714                   }
53715                 }
53716
53717                 if (prev) {
53718                   if (possibleIntersection(prev.key, event, eventQueue) === 2) {
53719                     var prevprev = prev;
53720                     if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
53721                     else                    { prevprev = null; }
53722
53723                     prevprevEvent = prevprev ? prevprev.key : null;
53724                     computeFields(prevEvent, prevprevEvent, operation);
53725                     computeFields(event,     prevEvent,     operation);
53726                   }
53727                 }
53728               } else {
53729                 event = event.otherEvent;
53730                 next = prev = sweepLine.find(event);
53731
53732                 if (prev && next) {
53733
53734                   if (prev !== begin) { prev = sweepLine.prev(prev); }
53735                   else                { prev = null; }
53736
53737                   next = sweepLine.next(next);
53738                   sweepLine.remove(event);
53739
53740                   if (next && prev) {
53741                     possibleIntersection(prev.key, next.key, eventQueue);
53742                   }
53743                 }
53744               }
53745             }
53746             return sortedEvents;
53747           }
53748
53749           /**
53750            * @param  {Array.<SweepEvent>} sortedEvents
53751            * @return {Array.<SweepEvent>}
53752            */
53753           function orderEvents(sortedEvents) {
53754             var event, i, len, tmp;
53755             var resultEvents = [];
53756             for (i = 0, len = sortedEvents.length; i < len; i++) {
53757               event = sortedEvents[i];
53758               if ((event.left && event.inResult) ||
53759                 (!event.left && event.otherEvent.inResult)) {
53760                 resultEvents.push(event);
53761               }
53762             }
53763             // Due to overlapping edges the resultEvents array can be not wholly sorted
53764             var sorted = false;
53765             while (!sorted) {
53766               sorted = true;
53767               for (i = 0, len = resultEvents.length; i < len; i++) {
53768                 if ((i + 1) < len &&
53769                   compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
53770                   tmp = resultEvents[i];
53771                   resultEvents[i] = resultEvents[i + 1];
53772                   resultEvents[i + 1] = tmp;
53773                   sorted = false;
53774                 }
53775               }
53776             }
53777
53778
53779             for (i = 0, len = resultEvents.length; i < len; i++) {
53780               event = resultEvents[i];
53781               event.pos = i;
53782             }
53783
53784             // imagine, the right event is found in the beginning of the queue,
53785             // when his left counterpart is not marked yet
53786             for (i = 0, len = resultEvents.length; i < len; i++) {
53787               event = resultEvents[i];
53788               if (!event.left) {
53789                 tmp = event.pos;
53790                 event.pos = event.otherEvent.pos;
53791                 event.otherEvent.pos = tmp;
53792               }
53793             }
53794
53795             return resultEvents;
53796           }
53797
53798
53799           /**
53800            * @param  {Number} pos
53801            * @param  {Array.<SweepEvent>} resultEvents
53802            * @param  {Object>}    processed
53803            * @return {Number}
53804            */
53805           function nextPos(pos, resultEvents, processed, origIndex) {
53806             var p, p1;
53807             var newPos = pos + 1;
53808             var length = resultEvents.length;
53809
53810             p  = resultEvents[pos].point;
53811
53812             if (newPos < length)
53813               { p1 = resultEvents[newPos].point; }
53814
53815
53816             // while in range and not the current one by value
53817             while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
53818               if (!processed[newPos]) {
53819                 return newPos;
53820               } else   {
53821                 newPos++;
53822               }
53823               p1 = resultEvents[newPos].point;
53824             }
53825
53826             newPos = pos - 1;
53827
53828             while (processed[newPos] && newPos >= origIndex) {
53829               newPos--;
53830             }
53831             return newPos;
53832           }
53833
53834
53835           /**
53836            * @param  {Array.<SweepEvent>} sortedEvents
53837            * @return {Array.<*>} polygons
53838            */
53839           function connectEdges(sortedEvents, operation) {
53840             var i, len;
53841             var resultEvents = orderEvents(sortedEvents);
53842
53843             // "false"-filled array
53844             var processed = {};
53845             var result = [];
53846             var event;
53847
53848             for (i = 0, len = resultEvents.length; i < len; i++) {
53849               if (processed[i]) { continue; }
53850               var contour = [[]];
53851
53852               if (!resultEvents[i].isExteriorRing) {
53853                 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
53854                   result.push(contour);
53855                 } else if (result.length === 0) {
53856                   result.push([[contour]]);
53857                 } else {
53858                   result[result.length - 1].push(contour[0]);
53859                 }
53860               } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
53861                 result[result.length - 1].push(contour[0]);
53862               } else {
53863                 result.push(contour);
53864               }
53865
53866               var ringId = result.length - 1;
53867               var pos = i;
53868
53869               var initial = resultEvents[i].point;
53870               contour[0].push(initial);
53871
53872               while (pos >= i) {
53873                 event = resultEvents[pos];
53874                 processed[pos] = true;
53875
53876                 if (event.left) {
53877                   event.resultInOut = false;
53878                   event.contourId   = ringId;
53879                 } else {
53880                   event.otherEvent.resultInOut = true;
53881                   event.otherEvent.contourId   = ringId;
53882                 }
53883
53884                 pos = event.pos;
53885                 processed[pos] = true;
53886                 contour[0].push(resultEvents[pos].point);
53887                 pos = nextPos(pos, resultEvents, processed, i);
53888               }
53889
53890               pos = pos === -1 ? i : pos;
53891
53892               event = resultEvents[pos];
53893               processed[pos] = processed[event.pos] = true;
53894               event.otherEvent.resultInOut = true;
53895               event.otherEvent.contourId   = ringId;
53896             }
53897
53898             // Handle if the result is a polygon (eg not multipoly)
53899             // Commented it again, let's see what do we mean by that
53900             // if (result.length === 1) result = result[0];
53901             return result;
53902           }
53903
53904           var tinyqueue = TinyQueue;
53905           var default_1 = TinyQueue;
53906
53907           function TinyQueue(data, compare) {
53908               var this$1 = this;
53909
53910               if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
53911
53912               this.data = data || [];
53913               this.length = this.data.length;
53914               this.compare = compare || defaultCompare;
53915
53916               if (this.length > 0) {
53917                   for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
53918               }
53919           }
53920
53921           function defaultCompare(a, b) {
53922               return a < b ? -1 : a > b ? 1 : 0;
53923           }
53924
53925           TinyQueue.prototype = {
53926
53927               push: function (item) {
53928                   this.data.push(item);
53929                   this.length++;
53930                   this._up(this.length - 1);
53931               },
53932
53933               pop: function () {
53934                   if (this.length === 0) { return undefined; }
53935
53936                   var top = this.data[0];
53937                   this.length--;
53938
53939                   if (this.length > 0) {
53940                       this.data[0] = this.data[this.length];
53941                       this._down(0);
53942                   }
53943                   this.data.pop();
53944
53945                   return top;
53946               },
53947
53948               peek: function () {
53949                   return this.data[0];
53950               },
53951
53952               _up: function (pos) {
53953                   var data = this.data;
53954                   var compare = this.compare;
53955                   var item = data[pos];
53956
53957                   while (pos > 0) {
53958                       var parent = (pos - 1) >> 1;
53959                       var current = data[parent];
53960                       if (compare(item, current) >= 0) { break; }
53961                       data[pos] = current;
53962                       pos = parent;
53963                   }
53964
53965                   data[pos] = item;
53966               },
53967
53968               _down: function (pos) {
53969                   var this$1 = this;
53970
53971                   var data = this.data;
53972                   var compare = this.compare;
53973                   var halfLength = this.length >> 1;
53974                   var item = data[pos];
53975
53976                   while (pos < halfLength) {
53977                       var left = (pos << 1) + 1;
53978                       var right = left + 1;
53979                       var best = data[left];
53980
53981                       if (right < this$1.length && compare(data[right], best) < 0) {
53982                           left = right;
53983                           best = data[right];
53984                       }
53985                       if (compare(best, item) >= 0) { break; }
53986
53987                       data[pos] = best;
53988                       pos = left;
53989                   }
53990
53991                   data[pos] = item;
53992               }
53993           };
53994           tinyqueue.default = default_1;
53995
53996           var max = Math.max;
53997           var min = Math.min;
53998
53999           var contourId = 0;
54000
54001
54002           function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
54003             var i, len, s1, s2, e1, e2;
54004             for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
54005               s1 = contourOrHole[i];
54006               s2 = contourOrHole[i + 1];
54007               e1 = new SweepEvent(s1, false, undefined, isSubject);
54008               e2 = new SweepEvent(s2, false, e1,        isSubject);
54009               e1.otherEvent = e2;
54010
54011               if (s1[0] === s2[0] && s1[1] === s2[1]) {
54012                 continue; // skip collapsed edges, or it breaks
54013               }
54014
54015               e1.contourId = e2.contourId = depth;
54016               if (!isExteriorRing) {
54017                 e1.isExteriorRing = false;
54018                 e2.isExteriorRing = false;
54019               }
54020               if (compareEvents(e1, e2) > 0) {
54021                 e2.left = true;
54022               } else {
54023                 e1.left = true;
54024               }
54025
54026               var x = s1[0], y = s1[1];
54027               bbox[0] = min(bbox[0], x);
54028               bbox[1] = min(bbox[1], y);
54029               bbox[2] = max(bbox[2], x);
54030               bbox[3] = max(bbox[3], y);
54031
54032               // Pushing it so the queue is sorted from left to right,
54033               // with object on the left having the highest priority.
54034               Q.push(e1);
54035               Q.push(e2);
54036             }
54037           }
54038
54039
54040           function fillQueue(subject, clipping, sbbox, cbbox, operation) {
54041             var eventQueue = new tinyqueue(null, compareEvents);
54042             var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
54043
54044             for (i = 0, ii = subject.length; i < ii; i++) {
54045               polygonSet = subject[i];
54046               for (j = 0, jj = polygonSet.length; j < jj; j++) {
54047                 isExteriorRing = j === 0;
54048                 if (isExteriorRing) { contourId++; }
54049                 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
54050               }
54051             }
54052
54053             for (i = 0, ii = clipping.length; i < ii; i++) {
54054               polygonSet = clipping[i];
54055               for (j = 0, jj = polygonSet.length; j < jj; j++) {
54056                 isExteriorRing = j === 0;
54057                 if (operation === DIFFERENCE) { isExteriorRing = false; }
54058                 if (isExteriorRing) { contourId++; }
54059                 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
54060               }
54061             }
54062
54063             return eventQueue;
54064           }
54065
54066           var EMPTY = [];
54067
54068
54069           function trivialOperation(subject, clipping, operation) {
54070             var result = null;
54071             if (subject.length * clipping.length === 0) {
54072               if        (operation === INTERSECTION) {
54073                 result = EMPTY;
54074               } else if (operation === DIFFERENCE) {
54075                 result = subject;
54076               } else if (operation === UNION ||
54077                          operation === XOR) {
54078                 result = (subject.length === 0) ? clipping : subject;
54079               }
54080             }
54081             return result;
54082           }
54083
54084
54085           function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
54086             var result = null;
54087             if (sbbox[0] > cbbox[2] ||
54088                 cbbox[0] > sbbox[2] ||
54089                 sbbox[1] > cbbox[3] ||
54090                 cbbox[1] > sbbox[3]) {
54091               if        (operation === INTERSECTION) {
54092                 result = EMPTY;
54093               } else if (operation === DIFFERENCE) {
54094                 result = subject;
54095               } else if (operation === UNION ||
54096                          operation === XOR) {
54097                 result = subject.concat(clipping);
54098               }
54099             }
54100             return result;
54101           }
54102
54103
54104           function boolean(subject, clipping, operation) {
54105             if (typeof subject[0][0][0] === 'number') {
54106               subject = [subject];
54107             }
54108             if (typeof clipping[0][0][0] === 'number') {
54109               clipping = [clipping];
54110             }
54111             var trivial = trivialOperation(subject, clipping, operation);
54112             if (trivial) {
54113               return trivial === EMPTY ? null : trivial;
54114             }
54115             var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
54116             var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
54117
54118             //console.time('fill queue');
54119             var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
54120             //console.timeEnd('fill queue');
54121
54122             trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
54123             if (trivial) {
54124               return trivial === EMPTY ? null : trivial;
54125             }
54126             //console.time('subdivide edges');
54127             var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
54128             //console.timeEnd('subdivide edges');
54129
54130             //console.time('connect vertices');
54131             var result = connectEdges(sortedEvents, operation);
54132             //console.timeEnd('connect vertices');
54133             return result;
54134           }
54135
54136           function union (subject, clipping) {
54137             return boolean(subject, clipping, UNION);
54138           }
54139
54140           function diff (subject, clipping) {
54141             return boolean(subject, clipping, DIFFERENCE);
54142           }
54143
54144           function xor (subject, clipping){
54145             return boolean(subject, clipping, XOR);
54146           }
54147
54148           function intersection$1 (subject, clipping) {
54149             return boolean(subject, clipping, INTERSECTION);
54150           }
54151
54152           /**
54153            * @enum {Number}
54154            */
54155           var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
54156
54157           exports.union = union;
54158           exports.diff = diff;
54159           exports.xor = xor;
54160           exports.intersection = intersection$1;
54161           exports.operations = operations;
54162
54163           Object.defineProperty(exports, '__esModule', { value: true });
54164
54165         })));
54166
54167         });
54168
54169         var martinez = unwrapExports(martinez_umd);
54170
54171         var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
54172           var e, m;
54173           var eLen = (nBytes * 8) - mLen - 1;
54174           var eMax = (1 << eLen) - 1;
54175           var eBias = eMax >> 1;
54176           var nBits = -7;
54177           var i = isLE ? (nBytes - 1) : 0;
54178           var d = isLE ? -1 : 1;
54179           var s = buffer[offset + i];
54180
54181           i += d;
54182
54183           e = s & ((1 << (-nBits)) - 1);
54184           s >>= (-nBits);
54185           nBits += eLen;
54186           for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
54187
54188           m = e & ((1 << (-nBits)) - 1);
54189           e >>= (-nBits);
54190           nBits += mLen;
54191           for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
54192
54193           if (e === 0) {
54194             e = 1 - eBias;
54195           } else if (e === eMax) {
54196             return m ? NaN : ((s ? -1 : 1) * Infinity)
54197           } else {
54198             m = m + Math.pow(2, mLen);
54199             e = e - eBias;
54200           }
54201           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
54202         };
54203
54204         var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
54205           var e, m, c;
54206           var eLen = (nBytes * 8) - mLen - 1;
54207           var eMax = (1 << eLen) - 1;
54208           var eBias = eMax >> 1;
54209           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
54210           var i = isLE ? 0 : (nBytes - 1);
54211           var d = isLE ? 1 : -1;
54212           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
54213
54214           value = Math.abs(value);
54215
54216           if (isNaN(value) || value === Infinity) {
54217             m = isNaN(value) ? 1 : 0;
54218             e = eMax;
54219           } else {
54220             e = Math.floor(Math.log(value) / Math.LN2);
54221             if (value * (c = Math.pow(2, -e)) < 1) {
54222               e--;
54223               c *= 2;
54224             }
54225             if (e + eBias >= 1) {
54226               value += rt / c;
54227             } else {
54228               value += rt * Math.pow(2, 1 - eBias);
54229             }
54230             if (value * c >= 2) {
54231               e++;
54232               c /= 2;
54233             }
54234
54235             if (e + eBias >= eMax) {
54236               m = 0;
54237               e = eMax;
54238             } else if (e + eBias >= 1) {
54239               m = ((value * c) - 1) * Math.pow(2, mLen);
54240               e = e + eBias;
54241             } else {
54242               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
54243               e = 0;
54244             }
54245           }
54246
54247           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
54248
54249           e = (e << mLen) | m;
54250           eLen += mLen;
54251           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
54252
54253           buffer[offset + i - d] |= s * 128;
54254         };
54255
54256         var ieee754 = {
54257                 read: read$6,
54258                 write: write$6
54259         };
54260
54261         var pbf = Pbf;
54262
54263
54264
54265         function Pbf(buf) {
54266             this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
54267             this.pos = 0;
54268             this.type = 0;
54269             this.length = this.buf.length;
54270         }
54271
54272         Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
54273         Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
54274         Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
54275         Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
54276
54277         var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
54278             SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
54279
54280         // Threshold chosen based on both benchmarking and knowledge about browser string
54281         // data structures (which currently switch structure types at 12 bytes or more)
54282         var TEXT_DECODER_MIN_LENGTH = 12;
54283         var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');
54284
54285         Pbf.prototype = {
54286
54287             destroy: function() {
54288                 this.buf = null;
54289             },
54290
54291             // === READING =================================================================
54292
54293             readFields: function(readField, result, end) {
54294                 end = end || this.length;
54295
54296                 while (this.pos < end) {
54297                     var val = this.readVarint(),
54298                         tag = val >> 3,
54299                         startPos = this.pos;
54300
54301                     this.type = val & 0x7;
54302                     readField(tag, result, this);
54303
54304                     if (this.pos === startPos) this.skip(val);
54305                 }
54306                 return result;
54307             },
54308
54309             readMessage: function(readField, result) {
54310                 return this.readFields(readField, result, this.readVarint() + this.pos);
54311             },
54312
54313             readFixed32: function() {
54314                 var val = readUInt32(this.buf, this.pos);
54315                 this.pos += 4;
54316                 return val;
54317             },
54318
54319             readSFixed32: function() {
54320                 var val = readInt32(this.buf, this.pos);
54321                 this.pos += 4;
54322                 return val;
54323             },
54324
54325             // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
54326
54327             readFixed64: function() {
54328                 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54329                 this.pos += 8;
54330                 return val;
54331             },
54332
54333             readSFixed64: function() {
54334                 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
54335                 this.pos += 8;
54336                 return val;
54337             },
54338
54339             readFloat: function() {
54340                 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
54341                 this.pos += 4;
54342                 return val;
54343             },
54344
54345             readDouble: function() {
54346                 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
54347                 this.pos += 8;
54348                 return val;
54349             },
54350
54351             readVarint: function(isSigned) {
54352                 var buf = this.buf,
54353                     val, b;
54354
54355                 b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;
54356                 b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;
54357                 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
54358                 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
54359                 b = buf[this.pos];   val |= (b & 0x0f) << 28;
54360
54361                 return readVarintRemainder(val, isSigned, this);
54362             },
54363
54364             readVarint64: function() { // for compatibility with v2.0.1
54365                 return this.readVarint(true);
54366             },
54367
54368             readSVarint: function() {
54369                 var num = this.readVarint();
54370                 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
54371             },
54372
54373             readBoolean: function() {
54374                 return Boolean(this.readVarint());
54375             },
54376
54377             readString: function() {
54378                 var end = this.readVarint() + this.pos;
54379                 var pos = this.pos;
54380                 this.pos = end;
54381
54382                 if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {
54383                     // longer strings are fast with the built-in browser TextDecoder API
54384                     return readUtf8TextDecoder(this.buf, pos, end);
54385                 }
54386                 // short strings are fast with our custom implementation
54387                 return readUtf8(this.buf, pos, end);
54388             },
54389
54390             readBytes: function() {
54391                 var end = this.readVarint() + this.pos,
54392                     buffer = this.buf.subarray(this.pos, end);
54393                 this.pos = end;
54394                 return buffer;
54395             },
54396
54397             // verbose for performance reasons; doesn't affect gzipped size
54398
54399             readPackedVarint: function(arr, isSigned) {
54400                 if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned));
54401                 var end = readPackedEnd(this);
54402                 arr = arr || [];
54403                 while (this.pos < end) arr.push(this.readVarint(isSigned));
54404                 return arr;
54405             },
54406             readPackedSVarint: function(arr) {
54407                 if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint());
54408                 var end = readPackedEnd(this);
54409                 arr = arr || [];
54410                 while (this.pos < end) arr.push(this.readSVarint());
54411                 return arr;
54412             },
54413             readPackedBoolean: function(arr) {
54414                 if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean());
54415                 var end = readPackedEnd(this);
54416                 arr = arr || [];
54417                 while (this.pos < end) arr.push(this.readBoolean());
54418                 return arr;
54419             },
54420             readPackedFloat: function(arr) {
54421                 if (this.type !== Pbf.Bytes) return arr.push(this.readFloat());
54422                 var end = readPackedEnd(this);
54423                 arr = arr || [];
54424                 while (this.pos < end) arr.push(this.readFloat());
54425                 return arr;
54426             },
54427             readPackedDouble: function(arr) {
54428                 if (this.type !== Pbf.Bytes) return arr.push(this.readDouble());
54429                 var end = readPackedEnd(this);
54430                 arr = arr || [];
54431                 while (this.pos < end) arr.push(this.readDouble());
54432                 return arr;
54433             },
54434             readPackedFixed32: function(arr) {
54435                 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32());
54436                 var end = readPackedEnd(this);
54437                 arr = arr || [];
54438                 while (this.pos < end) arr.push(this.readFixed32());
54439                 return arr;
54440             },
54441             readPackedSFixed32: function(arr) {
54442                 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32());
54443                 var end = readPackedEnd(this);
54444                 arr = arr || [];
54445                 while (this.pos < end) arr.push(this.readSFixed32());
54446                 return arr;
54447             },
54448             readPackedFixed64: function(arr) {
54449                 if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64());
54450                 var end = readPackedEnd(this);
54451                 arr = arr || [];
54452                 while (this.pos < end) arr.push(this.readFixed64());
54453                 return arr;
54454             },
54455             readPackedSFixed64: function(arr) {
54456                 if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64());
54457                 var end = readPackedEnd(this);
54458                 arr = arr || [];
54459                 while (this.pos < end) arr.push(this.readSFixed64());
54460                 return arr;
54461             },
54462
54463             skip: function(val) {
54464                 var type = val & 0x7;
54465                 if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
54466                 else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
54467                 else if (type === Pbf.Fixed32) this.pos += 4;
54468                 else if (type === Pbf.Fixed64) this.pos += 8;
54469                 else throw new Error('Unimplemented type: ' + type);
54470             },
54471
54472             // === WRITING =================================================================
54473
54474             writeTag: function(tag, type) {
54475                 this.writeVarint((tag << 3) | type);
54476             },
54477
54478             realloc: function(min) {
54479                 var length = this.length || 16;
54480
54481                 while (length < this.pos + min) length *= 2;
54482
54483                 if (length !== this.length) {
54484                     var buf = new Uint8Array(length);
54485                     buf.set(this.buf);
54486                     this.buf = buf;
54487                     this.length = length;
54488                 }
54489             },
54490
54491             finish: function() {
54492                 this.length = this.pos;
54493                 this.pos = 0;
54494                 return this.buf.subarray(0, this.length);
54495             },
54496
54497             writeFixed32: function(val) {
54498                 this.realloc(4);
54499                 writeInt32(this.buf, val, this.pos);
54500                 this.pos += 4;
54501             },
54502
54503             writeSFixed32: function(val) {
54504                 this.realloc(4);
54505                 writeInt32(this.buf, val, this.pos);
54506                 this.pos += 4;
54507             },
54508
54509             writeFixed64: function(val) {
54510                 this.realloc(8);
54511                 writeInt32(this.buf, val & -1, this.pos);
54512                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54513                 this.pos += 8;
54514             },
54515
54516             writeSFixed64: function(val) {
54517                 this.realloc(8);
54518                 writeInt32(this.buf, val & -1, this.pos);
54519                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
54520                 this.pos += 8;
54521             },
54522
54523             writeVarint: function(val) {
54524                 val = +val || 0;
54525
54526                 if (val > 0xfffffff || val < 0) {
54527                     writeBigVarint(val, this);
54528                     return;
54529                 }
54530
54531                 this.realloc(4);
54532
54533                 this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54534                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54535                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
54536                 this.buf[this.pos++] =   (val >>> 7) & 0x7f;
54537             },
54538
54539             writeSVarint: function(val) {
54540                 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
54541             },
54542
54543             writeBoolean: function(val) {
54544                 this.writeVarint(Boolean(val));
54545             },
54546
54547             writeString: function(str) {
54548                 str = String(str);
54549                 this.realloc(str.length * 4);
54550
54551                 this.pos++; // reserve 1 byte for short string length
54552
54553                 var startPos = this.pos;
54554                 // write the string directly to the buffer and see how much was written
54555                 this.pos = writeUtf8(this.buf, str, this.pos);
54556                 var len = this.pos - startPos;
54557
54558                 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54559
54560                 // finally, write the message length in the reserved place and restore the position
54561                 this.pos = startPos - 1;
54562                 this.writeVarint(len);
54563                 this.pos += len;
54564             },
54565
54566             writeFloat: function(val) {
54567                 this.realloc(4);
54568                 ieee754.write(this.buf, val, this.pos, true, 23, 4);
54569                 this.pos += 4;
54570             },
54571
54572             writeDouble: function(val) {
54573                 this.realloc(8);
54574                 ieee754.write(this.buf, val, this.pos, true, 52, 8);
54575                 this.pos += 8;
54576             },
54577
54578             writeBytes: function(buffer) {
54579                 var len = buffer.length;
54580                 this.writeVarint(len);
54581                 this.realloc(len);
54582                 for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
54583             },
54584
54585             writeRawMessage: function(fn, obj) {
54586                 this.pos++; // reserve 1 byte for short message length
54587
54588                 // write the message directly to the buffer and see how much was written
54589                 var startPos = this.pos;
54590                 fn(obj, this);
54591                 var len = this.pos - startPos;
54592
54593                 if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
54594
54595                 // finally, write the message length in the reserved place and restore the position
54596                 this.pos = startPos - 1;
54597                 this.writeVarint(len);
54598                 this.pos += len;
54599             },
54600
54601             writeMessage: function(tag, fn, obj) {
54602                 this.writeTag(tag, Pbf.Bytes);
54603                 this.writeRawMessage(fn, obj);
54604             },
54605
54606             writePackedVarint:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr);   },
54607             writePackedSVarint:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr);  },
54608             writePackedBoolean:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr);  },
54609             writePackedFloat:    function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr);    },
54610             writePackedDouble:   function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr);   },
54611             writePackedFixed32:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr);  },
54612             writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); },
54613             writePackedFixed64:  function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr);  },
54614             writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); },
54615
54616             writeBytesField: function(tag, buffer) {
54617                 this.writeTag(tag, Pbf.Bytes);
54618                 this.writeBytes(buffer);
54619             },
54620             writeFixed32Field: function(tag, val) {
54621                 this.writeTag(tag, Pbf.Fixed32);
54622                 this.writeFixed32(val);
54623             },
54624             writeSFixed32Field: function(tag, val) {
54625                 this.writeTag(tag, Pbf.Fixed32);
54626                 this.writeSFixed32(val);
54627             },
54628             writeFixed64Field: function(tag, val) {
54629                 this.writeTag(tag, Pbf.Fixed64);
54630                 this.writeFixed64(val);
54631             },
54632             writeSFixed64Field: function(tag, val) {
54633                 this.writeTag(tag, Pbf.Fixed64);
54634                 this.writeSFixed64(val);
54635             },
54636             writeVarintField: function(tag, val) {
54637                 this.writeTag(tag, Pbf.Varint);
54638                 this.writeVarint(val);
54639             },
54640             writeSVarintField: function(tag, val) {
54641                 this.writeTag(tag, Pbf.Varint);
54642                 this.writeSVarint(val);
54643             },
54644             writeStringField: function(tag, str) {
54645                 this.writeTag(tag, Pbf.Bytes);
54646                 this.writeString(str);
54647             },
54648             writeFloatField: function(tag, val) {
54649                 this.writeTag(tag, Pbf.Fixed32);
54650                 this.writeFloat(val);
54651             },
54652             writeDoubleField: function(tag, val) {
54653                 this.writeTag(tag, Pbf.Fixed64);
54654                 this.writeDouble(val);
54655             },
54656             writeBooleanField: function(tag, val) {
54657                 this.writeVarintField(tag, Boolean(val));
54658             }
54659         };
54660
54661         function readVarintRemainder(l, s, p) {
54662             var buf = p.buf,
54663                 h, b;
54664
54665             b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);
54666             b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);
54667             b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
54668             b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
54669             b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
54670             b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
54671
54672             throw new Error('Expected varint not more than 10 bytes');
54673         }
54674
54675         function readPackedEnd(pbf) {
54676             return pbf.type === Pbf.Bytes ?
54677                 pbf.readVarint() + pbf.pos : pbf.pos + 1;
54678         }
54679
54680         function toNum(low, high, isSigned) {
54681             if (isSigned) {
54682                 return high * 0x100000000 + (low >>> 0);
54683             }
54684
54685             return ((high >>> 0) * 0x100000000) + (low >>> 0);
54686         }
54687
54688         function writeBigVarint(val, pbf) {
54689             var low, high;
54690
54691             if (val >= 0) {
54692                 low  = (val % 0x100000000) | 0;
54693                 high = (val / 0x100000000) | 0;
54694             } else {
54695                 low  = ~(-val % 0x100000000);
54696                 high = ~(-val / 0x100000000);
54697
54698                 if (low ^ 0xffffffff) {
54699                     low = (low + 1) | 0;
54700                 } else {
54701                     low = 0;
54702                     high = (high + 1) | 0;
54703                 }
54704             }
54705
54706             if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
54707                 throw new Error('Given varint doesn\'t fit into 10 bytes');
54708             }
54709
54710             pbf.realloc(10);
54711
54712             writeBigVarintLow(low, high, pbf);
54713             writeBigVarintHigh(high, pbf);
54714         }
54715
54716         function writeBigVarintLow(low, high, pbf) {
54717             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54718             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54719             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54720             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
54721             pbf.buf[pbf.pos]   = low & 0x7f;
54722         }
54723
54724         function writeBigVarintHigh(high, pbf) {
54725             var lsb = (high & 0x07) << 4;
54726
54727             pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
54728             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54729             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54730             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54731             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
54732             pbf.buf[pbf.pos++]  = high & 0x7f;
54733         }
54734
54735         function makeRoomForExtraLength(startPos, len, pbf) {
54736             var extraLen =
54737                 len <= 0x3fff ? 1 :
54738                 len <= 0x1fffff ? 2 :
54739                 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
54740
54741             // if 1 byte isn't enough for encoding message length, shift the data to the right
54742             pbf.realloc(extraLen);
54743             for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
54744         }
54745
54746         function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }
54747         function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }
54748         function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }
54749         function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }
54750         function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }
54751         function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }
54752         function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
54753         function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }
54754         function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
54755
54756         // Buffer code below from https://github.com/feross/buffer, MIT-licensed
54757
54758         function readUInt32(buf, pos) {
54759             return ((buf[pos]) |
54760                 (buf[pos + 1] << 8) |
54761                 (buf[pos + 2] << 16)) +
54762                 (buf[pos + 3] * 0x1000000);
54763         }
54764
54765         function writeInt32(buf, val, pos) {
54766             buf[pos] = val;
54767             buf[pos + 1] = (val >>> 8);
54768             buf[pos + 2] = (val >>> 16);
54769             buf[pos + 3] = (val >>> 24);
54770         }
54771
54772         function readInt32(buf, pos) {
54773             return ((buf[pos]) |
54774                 (buf[pos + 1] << 8) |
54775                 (buf[pos + 2] << 16)) +
54776                 (buf[pos + 3] << 24);
54777         }
54778
54779         function readUtf8(buf, pos, end) {
54780             var str = '';
54781             var i = pos;
54782
54783             while (i < end) {
54784                 var b0 = buf[i];
54785                 var c = null; // codepoint
54786                 var bytesPerSequence =
54787                     b0 > 0xEF ? 4 :
54788                     b0 > 0xDF ? 3 :
54789                     b0 > 0xBF ? 2 : 1;
54790
54791                 if (i + bytesPerSequence > end) break;
54792
54793                 var b1, b2, b3;
54794
54795                 if (bytesPerSequence === 1) {
54796                     if (b0 < 0x80) {
54797                         c = b0;
54798                     }
54799                 } else if (bytesPerSequence === 2) {
54800                     b1 = buf[i + 1];
54801                     if ((b1 & 0xC0) === 0x80) {
54802                         c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
54803                         if (c <= 0x7F) {
54804                             c = null;
54805                         }
54806                     }
54807                 } else if (bytesPerSequence === 3) {
54808                     b1 = buf[i + 1];
54809                     b2 = buf[i + 2];
54810                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
54811                         c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
54812                         if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
54813                             c = null;
54814                         }
54815                     }
54816                 } else if (bytesPerSequence === 4) {
54817                     b1 = buf[i + 1];
54818                     b2 = buf[i + 2];
54819                     b3 = buf[i + 3];
54820                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
54821                         c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
54822                         if (c <= 0xFFFF || c >= 0x110000) {
54823                             c = null;
54824                         }
54825                     }
54826                 }
54827
54828                 if (c === null) {
54829                     c = 0xFFFD;
54830                     bytesPerSequence = 1;
54831
54832                 } else if (c > 0xFFFF) {
54833                     c -= 0x10000;
54834                     str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
54835                     c = 0xDC00 | c & 0x3FF;
54836                 }
54837
54838                 str += String.fromCharCode(c);
54839                 i += bytesPerSequence;
54840             }
54841
54842             return str;
54843         }
54844
54845         function readUtf8TextDecoder(buf, pos, end) {
54846             return utf8TextDecoder.decode(buf.subarray(pos, end));
54847         }
54848
54849         function writeUtf8(buf, str, pos) {
54850             for (var i = 0, c, lead; i < str.length; i++) {
54851                 c = str.charCodeAt(i); // code point
54852
54853                 if (c > 0xD7FF && c < 0xE000) {
54854                     if (lead) {
54855                         if (c < 0xDC00) {
54856                             buf[pos++] = 0xEF;
54857                             buf[pos++] = 0xBF;
54858                             buf[pos++] = 0xBD;
54859                             lead = c;
54860                             continue;
54861                         } else {
54862                             c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
54863                             lead = null;
54864                         }
54865                     } else {
54866                         if (c > 0xDBFF || (i + 1 === str.length)) {
54867                             buf[pos++] = 0xEF;
54868                             buf[pos++] = 0xBF;
54869                             buf[pos++] = 0xBD;
54870                         } else {
54871                             lead = c;
54872                         }
54873                         continue;
54874                     }
54875                 } else if (lead) {
54876                     buf[pos++] = 0xEF;
54877                     buf[pos++] = 0xBF;
54878                     buf[pos++] = 0xBD;
54879                     lead = null;
54880                 }
54881
54882                 if (c < 0x80) {
54883                     buf[pos++] = c;
54884                 } else {
54885                     if (c < 0x800) {
54886                         buf[pos++] = c >> 0x6 | 0xC0;
54887                     } else {
54888                         if (c < 0x10000) {
54889                             buf[pos++] = c >> 0xC | 0xE0;
54890                         } else {
54891                             buf[pos++] = c >> 0x12 | 0xF0;
54892                             buf[pos++] = c >> 0xC & 0x3F | 0x80;
54893                         }
54894                         buf[pos++] = c >> 0x6 & 0x3F | 0x80;
54895                     }
54896                     buf[pos++] = c & 0x3F | 0x80;
54897                 }
54898             }
54899             return pos;
54900         }
54901
54902         var pointGeometry = Point;
54903
54904         /**
54905          * A standalone point geometry with useful accessor, comparison, and
54906          * modification methods.
54907          *
54908          * @class Point
54909          * @param {Number} x the x-coordinate. this could be longitude or screen
54910          * pixels, or any other sort of unit.
54911          * @param {Number} y the y-coordinate. this could be latitude or screen
54912          * pixels, or any other sort of unit.
54913          * @example
54914          * var point = new Point(-77, 38);
54915          */
54916         function Point(x, y) {
54917             this.x = x;
54918             this.y = y;
54919         }
54920
54921         Point.prototype = {
54922
54923             /**
54924              * Clone this point, returning a new point that can be modified
54925              * without affecting the old one.
54926              * @return {Point} the clone
54927              */
54928             clone: function() { return new Point(this.x, this.y); },
54929
54930             /**
54931              * Add this point's x & y coordinates to another point,
54932              * yielding a new point.
54933              * @param {Point} p the other point
54934              * @return {Point} output point
54935              */
54936             add:     function(p) { return this.clone()._add(p); },
54937
54938             /**
54939              * Subtract this point's x & y coordinates to from point,
54940              * yielding a new point.
54941              * @param {Point} p the other point
54942              * @return {Point} output point
54943              */
54944             sub:     function(p) { return this.clone()._sub(p); },
54945
54946             /**
54947              * Multiply this point's x & y coordinates by point,
54948              * yielding a new point.
54949              * @param {Point} p the other point
54950              * @return {Point} output point
54951              */
54952             multByPoint:    function(p) { return this.clone()._multByPoint(p); },
54953
54954             /**
54955              * Divide this point's x & y coordinates by point,
54956              * yielding a new point.
54957              * @param {Point} p the other point
54958              * @return {Point} output point
54959              */
54960             divByPoint:     function(p) { return this.clone()._divByPoint(p); },
54961
54962             /**
54963              * Multiply this point's x & y coordinates by a factor,
54964              * yielding a new point.
54965              * @param {Point} k factor
54966              * @return {Point} output point
54967              */
54968             mult:    function(k) { return this.clone()._mult(k); },
54969
54970             /**
54971              * Divide this point's x & y coordinates by a factor,
54972              * yielding a new point.
54973              * @param {Point} k factor
54974              * @return {Point} output point
54975              */
54976             div:     function(k) { return this.clone()._div(k); },
54977
54978             /**
54979              * Rotate this point around the 0, 0 origin by an angle a,
54980              * given in radians
54981              * @param {Number} a angle to rotate around, in radians
54982              * @return {Point} output point
54983              */
54984             rotate:  function(a) { return this.clone()._rotate(a); },
54985
54986             /**
54987              * Rotate this point around p point by an angle a,
54988              * given in radians
54989              * @param {Number} a angle to rotate around, in radians
54990              * @param {Point} p Point to rotate around
54991              * @return {Point} output point
54992              */
54993             rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
54994
54995             /**
54996              * Multiply this point by a 4x1 transformation matrix
54997              * @param {Array<Number>} m transformation matrix
54998              * @return {Point} output point
54999              */
55000             matMult: function(m) { return this.clone()._matMult(m); },
55001
55002             /**
55003              * Calculate this point but as a unit vector from 0, 0, meaning
55004              * that the distance from the resulting point to the 0, 0
55005              * coordinate will be equal to 1 and the angle from the resulting
55006              * point to the 0, 0 coordinate will be the same as before.
55007              * @return {Point} unit vector point
55008              */
55009             unit:    function() { return this.clone()._unit(); },
55010
55011             /**
55012              * Compute a perpendicular point, where the new y coordinate
55013              * is the old x coordinate and the new x coordinate is the old y
55014              * coordinate multiplied by -1
55015              * @return {Point} perpendicular point
55016              */
55017             perp:    function() { return this.clone()._perp(); },
55018
55019             /**
55020              * Return a version of this point with the x & y coordinates
55021              * rounded to integers.
55022              * @return {Point} rounded point
55023              */
55024             round:   function() { return this.clone()._round(); },
55025
55026             /**
55027              * Return the magitude of this point: this is the Euclidean
55028              * distance from the 0, 0 coordinate to this point's x and y
55029              * coordinates.
55030              * @return {Number} magnitude
55031              */
55032             mag: function() {
55033                 return Math.sqrt(this.x * this.x + this.y * this.y);
55034             },
55035
55036             /**
55037              * Judge whether this point is equal to another point, returning
55038              * true or false.
55039              * @param {Point} other the other point
55040              * @return {boolean} whether the points are equal
55041              */
55042             equals: function(other) {
55043                 return this.x === other.x &&
55044                        this.y === other.y;
55045             },
55046
55047             /**
55048              * Calculate the distance from this point to another point
55049              * @param {Point} p the other point
55050              * @return {Number} distance
55051              */
55052             dist: function(p) {
55053                 return Math.sqrt(this.distSqr(p));
55054             },
55055
55056             /**
55057              * Calculate the distance from this point to another point,
55058              * without the square root step. Useful if you're comparing
55059              * relative distances.
55060              * @param {Point} p the other point
55061              * @return {Number} distance
55062              */
55063             distSqr: function(p) {
55064                 var dx = p.x - this.x,
55065                     dy = p.y - this.y;
55066                 return dx * dx + dy * dy;
55067             },
55068
55069             /**
55070              * Get the angle from the 0, 0 coordinate to this point, in radians
55071              * coordinates.
55072              * @return {Number} angle
55073              */
55074             angle: function() {
55075                 return Math.atan2(this.y, this.x);
55076             },
55077
55078             /**
55079              * Get the angle from this point to another point, in radians
55080              * @param {Point} b the other point
55081              * @return {Number} angle
55082              */
55083             angleTo: function(b) {
55084                 return Math.atan2(this.y - b.y, this.x - b.x);
55085             },
55086
55087             /**
55088              * Get the angle between this point and another point, in radians
55089              * @param {Point} b the other point
55090              * @return {Number} angle
55091              */
55092             angleWith: function(b) {
55093                 return this.angleWithSep(b.x, b.y);
55094             },
55095
55096             /*
55097              * Find the angle of the two vectors, solving the formula for
55098              * the cross product a x b = |a||b|sin(θ) for θ.
55099              * @param {Number} x the x-coordinate
55100              * @param {Number} y the y-coordinate
55101              * @return {Number} the angle in radians
55102              */
55103             angleWithSep: function(x, y) {
55104                 return Math.atan2(
55105                     this.x * y - this.y * x,
55106                     this.x * x + this.y * y);
55107             },
55108
55109             _matMult: function(m) {
55110                 var x = m[0] * this.x + m[1] * this.y,
55111                     y = m[2] * this.x + m[3] * this.y;
55112                 this.x = x;
55113                 this.y = y;
55114                 return this;
55115             },
55116
55117             _add: function(p) {
55118                 this.x += p.x;
55119                 this.y += p.y;
55120                 return this;
55121             },
55122
55123             _sub: function(p) {
55124                 this.x -= p.x;
55125                 this.y -= p.y;
55126                 return this;
55127             },
55128
55129             _mult: function(k) {
55130                 this.x *= k;
55131                 this.y *= k;
55132                 return this;
55133             },
55134
55135             _div: function(k) {
55136                 this.x /= k;
55137                 this.y /= k;
55138                 return this;
55139             },
55140
55141             _multByPoint: function(p) {
55142                 this.x *= p.x;
55143                 this.y *= p.y;
55144                 return this;
55145             },
55146
55147             _divByPoint: function(p) {
55148                 this.x /= p.x;
55149                 this.y /= p.y;
55150                 return this;
55151             },
55152
55153             _unit: function() {
55154                 this._div(this.mag());
55155                 return this;
55156             },
55157
55158             _perp: function() {
55159                 var y = this.y;
55160                 this.y = this.x;
55161                 this.x = -y;
55162                 return this;
55163             },
55164
55165             _rotate: function(angle) {
55166                 var cos = Math.cos(angle),
55167                     sin = Math.sin(angle),
55168                     x = cos * this.x - sin * this.y,
55169                     y = sin * this.x + cos * this.y;
55170                 this.x = x;
55171                 this.y = y;
55172                 return this;
55173             },
55174
55175             _rotateAround: function(angle, p) {
55176                 var cos = Math.cos(angle),
55177                     sin = Math.sin(angle),
55178                     x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
55179                     y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
55180                 this.x = x;
55181                 this.y = y;
55182                 return this;
55183             },
55184
55185             _round: function() {
55186                 this.x = Math.round(this.x);
55187                 this.y = Math.round(this.y);
55188                 return this;
55189             }
55190         };
55191
55192         /**
55193          * Construct a point from an array if necessary, otherwise if the input
55194          * is already a Point, or an unknown type, return it unchanged
55195          * @param {Array<Number>|Point|*} a any kind of input value
55196          * @return {Point} constructed point, or passed-through value.
55197          * @example
55198          * // this
55199          * var point = Point.convert([0, 1]);
55200          * // is equivalent to
55201          * var point = new Point(0, 1);
55202          */
55203         Point.convert = function (a) {
55204             if (a instanceof Point) {
55205                 return a;
55206             }
55207             if (Array.isArray(a)) {
55208                 return new Point(a[0], a[1]);
55209             }
55210             return a;
55211         };
55212
55213         var vectortilefeature = VectorTileFeature;
55214
55215         function VectorTileFeature(pbf, end, extent, keys, values) {
55216             // Public
55217             this.properties = {};
55218             this.extent = extent;
55219             this.type = 0;
55220
55221             // Private
55222             this._pbf = pbf;
55223             this._geometry = -1;
55224             this._keys = keys;
55225             this._values = values;
55226
55227             pbf.readFields(readFeature, this, end);
55228         }
55229
55230         function readFeature(tag, feature, pbf) {
55231             if (tag == 1) feature.id = pbf.readVarint();
55232             else if (tag == 2) readTag(pbf, feature);
55233             else if (tag == 3) feature.type = pbf.readVarint();
55234             else if (tag == 4) feature._geometry = pbf.pos;
55235         }
55236
55237         function readTag(pbf, feature) {
55238             var end = pbf.readVarint() + pbf.pos;
55239
55240             while (pbf.pos < end) {
55241                 var key = feature._keys[pbf.readVarint()],
55242                     value = feature._values[pbf.readVarint()];
55243                 feature.properties[key] = value;
55244             }
55245         }
55246
55247         VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
55248
55249         VectorTileFeature.prototype.loadGeometry = function() {
55250             var pbf = this._pbf;
55251             pbf.pos = this._geometry;
55252
55253             var end = pbf.readVarint() + pbf.pos,
55254                 cmd = 1,
55255                 length = 0,
55256                 x = 0,
55257                 y = 0,
55258                 lines = [],
55259                 line;
55260
55261             while (pbf.pos < end) {
55262                 if (length <= 0) {
55263                     var cmdLen = pbf.readVarint();
55264                     cmd = cmdLen & 0x7;
55265                     length = cmdLen >> 3;
55266                 }
55267
55268                 length--;
55269
55270                 if (cmd === 1 || cmd === 2) {
55271                     x += pbf.readSVarint();
55272                     y += pbf.readSVarint();
55273
55274                     if (cmd === 1) { // moveTo
55275                         if (line) lines.push(line);
55276                         line = [];
55277                     }
55278
55279                     line.push(new pointGeometry(x, y));
55280
55281                 } else if (cmd === 7) {
55282
55283                     // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
55284                     if (line) {
55285                         line.push(line[0].clone()); // closePolygon
55286                     }
55287
55288                 } else {
55289                     throw new Error('unknown command ' + cmd);
55290                 }
55291             }
55292
55293             if (line) lines.push(line);
55294
55295             return lines;
55296         };
55297
55298         VectorTileFeature.prototype.bbox = function() {
55299             var pbf = this._pbf;
55300             pbf.pos = this._geometry;
55301
55302             var end = pbf.readVarint() + pbf.pos,
55303                 cmd = 1,
55304                 length = 0,
55305                 x = 0,
55306                 y = 0,
55307                 x1 = Infinity,
55308                 x2 = -Infinity,
55309                 y1 = Infinity,
55310                 y2 = -Infinity;
55311
55312             while (pbf.pos < end) {
55313                 if (length <= 0) {
55314                     var cmdLen = pbf.readVarint();
55315                     cmd = cmdLen & 0x7;
55316                     length = cmdLen >> 3;
55317                 }
55318
55319                 length--;
55320
55321                 if (cmd === 1 || cmd === 2) {
55322                     x += pbf.readSVarint();
55323                     y += pbf.readSVarint();
55324                     if (x < x1) x1 = x;
55325                     if (x > x2) x2 = x;
55326                     if (y < y1) y1 = y;
55327                     if (y > y2) y2 = y;
55328
55329                 } else if (cmd !== 7) {
55330                     throw new Error('unknown command ' + cmd);
55331                 }
55332             }
55333
55334             return [x1, y1, x2, y2];
55335         };
55336
55337         VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
55338             var size = this.extent * Math.pow(2, z),
55339                 x0 = this.extent * x,
55340                 y0 = this.extent * y,
55341                 coords = this.loadGeometry(),
55342                 type = VectorTileFeature.types[this.type],
55343                 i, j;
55344
55345             function project(line) {
55346                 for (var j = 0; j < line.length; j++) {
55347                     var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
55348                     line[j] = [
55349                         (p.x + x0) * 360 / size - 180,
55350                         360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
55351                     ];
55352                 }
55353             }
55354
55355             switch (this.type) {
55356             case 1:
55357                 var points = [];
55358                 for (i = 0; i < coords.length; i++) {
55359                     points[i] = coords[i][0];
55360                 }
55361                 coords = points;
55362                 project(coords);
55363                 break;
55364
55365             case 2:
55366                 for (i = 0; i < coords.length; i++) {
55367                     project(coords[i]);
55368                 }
55369                 break;
55370
55371             case 3:
55372                 coords = classifyRings(coords);
55373                 for (i = 0; i < coords.length; i++) {
55374                     for (j = 0; j < coords[i].length; j++) {
55375                         project(coords[i][j]);
55376                     }
55377                 }
55378                 break;
55379             }
55380
55381             if (coords.length === 1) {
55382                 coords = coords[0];
55383             } else {
55384                 type = 'Multi' + type;
55385             }
55386
55387             var result = {
55388                 type: "Feature",
55389                 geometry: {
55390                     type: type,
55391                     coordinates: coords
55392                 },
55393                 properties: this.properties
55394             };
55395
55396             if ('id' in this) {
55397                 result.id = this.id;
55398             }
55399
55400             return result;
55401         };
55402
55403         // classifies an array of rings into polygons with outer rings and holes
55404
55405         function classifyRings(rings) {
55406             var len = rings.length;
55407
55408             if (len <= 1) return [rings];
55409
55410             var polygons = [],
55411                 polygon,
55412                 ccw;
55413
55414             for (var i = 0; i < len; i++) {
55415                 var area = signedArea(rings[i]);
55416                 if (area === 0) continue;
55417
55418                 if (ccw === undefined) ccw = area < 0;
55419
55420                 if (ccw === area < 0) {
55421                     if (polygon) polygons.push(polygon);
55422                     polygon = [rings[i]];
55423
55424                 } else {
55425                     polygon.push(rings[i]);
55426                 }
55427             }
55428             if (polygon) polygons.push(polygon);
55429
55430             return polygons;
55431         }
55432
55433         function signedArea(ring) {
55434             var sum = 0;
55435             for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
55436                 p1 = ring[i];
55437                 p2 = ring[j];
55438                 sum += (p2.x - p1.x) * (p1.y + p2.y);
55439             }
55440             return sum;
55441         }
55442
55443         var vectortilelayer = VectorTileLayer;
55444
55445         function VectorTileLayer(pbf, end) {
55446             // Public
55447             this.version = 1;
55448             this.name = null;
55449             this.extent = 4096;
55450             this.length = 0;
55451
55452             // Private
55453             this._pbf = pbf;
55454             this._keys = [];
55455             this._values = [];
55456             this._features = [];
55457
55458             pbf.readFields(readLayer, this, end);
55459
55460             this.length = this._features.length;
55461         }
55462
55463         function readLayer(tag, layer, pbf) {
55464             if (tag === 15) layer.version = pbf.readVarint();
55465             else if (tag === 1) layer.name = pbf.readString();
55466             else if (tag === 5) layer.extent = pbf.readVarint();
55467             else if (tag === 2) layer._features.push(pbf.pos);
55468             else if (tag === 3) layer._keys.push(pbf.readString());
55469             else if (tag === 4) layer._values.push(readValueMessage(pbf));
55470         }
55471
55472         function readValueMessage(pbf) {
55473             var value = null,
55474                 end = pbf.readVarint() + pbf.pos;
55475
55476             while (pbf.pos < end) {
55477                 var tag = pbf.readVarint() >> 3;
55478
55479                 value = tag === 1 ? pbf.readString() :
55480                     tag === 2 ? pbf.readFloat() :
55481                     tag === 3 ? pbf.readDouble() :
55482                     tag === 4 ? pbf.readVarint64() :
55483                     tag === 5 ? pbf.readVarint() :
55484                     tag === 6 ? pbf.readSVarint() :
55485                     tag === 7 ? pbf.readBoolean() : null;
55486             }
55487
55488             return value;
55489         }
55490
55491         // return feature `i` from this layer as a `VectorTileFeature`
55492         VectorTileLayer.prototype.feature = function(i) {
55493             if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
55494
55495             this._pbf.pos = this._features[i];
55496
55497             var end = this._pbf.readVarint() + this._pbf.pos;
55498             return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
55499         };
55500
55501         var vectortile = VectorTile;
55502
55503         function VectorTile(pbf, end) {
55504             this.layers = pbf.readFields(readTile, {}, end);
55505         }
55506
55507         function readTile(tag, layers, pbf) {
55508             if (tag === 3) {
55509                 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
55510                 if (layer.length) layers[layer.name] = layer;
55511             }
55512         }
55513
55514         var VectorTile$1 = vectortile;
55515         var VectorTileFeature$1 = vectortilefeature;
55516         var VectorTileLayer$1 = vectortilelayer;
55517
55518         var vectorTile = {
55519                 VectorTile: VectorTile$1,
55520                 VectorTileFeature: VectorTileFeature$1,
55521                 VectorTileLayer: VectorTileLayer$1
55522         };
55523
55524         var tiler$6 = utilTiler().tileSize(512).margin(1);
55525         var dispatch$7 = dispatch('loadedData');
55526         var _vtCache;
55527
55528
55529         function abortRequest$6(controller) {
55530             controller.abort();
55531         }
55532
55533
55534         function vtToGeoJSON(data, tile, mergeCache) {
55535             var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
55536             var layers = Object.keys(vectorTile$1.layers);
55537             if (!Array.isArray(layers)) { layers = [layers]; }
55538
55539             var features = [];
55540             layers.forEach(function(layerID) {
55541                 var layer = vectorTile$1.layers[layerID];
55542                 if (layer) {
55543                     for (var i = 0; i < layer.length; i++) {
55544                         var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
55545                         var geometry = feature.geometry;
55546
55547                         // Treat all Polygons as MultiPolygons
55548                         if (geometry.type === 'Polygon') {
55549                             geometry.type = 'MultiPolygon';
55550                             geometry.coordinates = [geometry.coordinates];
55551                         }
55552
55553                         // Clip to tile bounds
55554                         if (geometry.type === 'MultiPolygon') {
55555                             var isClipped = false;
55556                             var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
55557                             if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
55558                                 // feature = featureClip;
55559                                 isClipped = true;
55560                             }
55561                             if (!feature.geometry.coordinates.length) continue;   // not actually on this tile
55562                             if (!feature.geometry.coordinates[0].length) continue;   // not actually on this tile
55563                         }
55564
55565                         // Generate some unique IDs and add some metadata
55566                         var featurehash = utilHashcode(fastJsonStableStringify(feature));
55567                         var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
55568                         feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
55569                         feature.__featurehash__ = featurehash;
55570                         feature.__propertyhash__ = propertyhash;
55571                         features.push(feature);
55572
55573                         // Clipped Polygons at same zoom with identical properties can get merged
55574                         if (isClipped && geometry.type === 'MultiPolygon') {
55575                             var merged = mergeCache[propertyhash];
55576                             if (merged && merged.length) {
55577                                 var other = merged[0];
55578                                 var coords = martinez.union(
55579                                     feature.geometry.coordinates, other.geometry.coordinates
55580                                 );
55581
55582                                 if (!coords || !coords.length) {
55583                                     continue;  // something failed in martinez union
55584                                 }
55585
55586                                 merged.push(feature);
55587                                 for (var j = 0; j < merged.length; j++) {      // all these features get...
55588                                     merged[j].geometry.coordinates = coords;   // same coords
55589                                     merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
55590                                 }
55591                             } else {
55592                                 mergeCache[propertyhash] = [feature];
55593                             }
55594                         }
55595                     }
55596                 }
55597             });
55598
55599             return features;
55600         }
55601
55602
55603         function loadTile(source, tile) {
55604             if (source.loaded[tile.id] || source.inflight[tile.id]) return;
55605
55606             var url = source.template
55607                 .replace('{x}', tile.xyz[0])
55608                 .replace('{y}', tile.xyz[1])
55609                 // TMS-flipped y coordinate
55610                 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
55611                 .replace(/\{z(oom)?\}/, tile.xyz[2])
55612                 .replace(/\{switch:([^}]+)\}/, function(s, r) {
55613                     var subdomains = r.split(',');
55614                     return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
55615                 });
55616
55617
55618             var controller = new AbortController();
55619             source.inflight[tile.id] = controller;
55620
55621             fetch(url, { signal: controller.signal })
55622                 .then(function(response) {
55623                     if (!response.ok) {
55624                         throw new Error(response.status + ' ' + response.statusText);
55625                     }
55626                     source.loaded[tile.id] = [];
55627                     delete source.inflight[tile.id];
55628                     return response.arrayBuffer();
55629                 })
55630                 .then(function(data) {
55631                     if (!data) {
55632                         throw new Error('No Data');
55633                     }
55634
55635                     var z = tile.xyz[2];
55636                     if (!source.canMerge[z]) {
55637                         source.canMerge[z] = {};  // initialize mergeCache
55638                     }
55639
55640                     source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
55641                     dispatch$7.call('loadedData');
55642                 })
55643                 .catch(function() {
55644                     source.loaded[tile.id] = [];
55645                     delete source.inflight[tile.id];
55646                 });
55647         }
55648
55649
55650         var serviceVectorTile = {
55651
55652             init: function() {
55653                 if (!_vtCache) {
55654                     this.reset();
55655                 }
55656
55657                 this.event = utilRebind(this, dispatch$7, 'on');
55658             },
55659
55660
55661             reset: function() {
55662                 for (var sourceID in _vtCache) {
55663                     var source = _vtCache[sourceID];
55664                     if (source && source.inflight) {
55665                         Object.values(source.inflight).forEach(abortRequest$6);
55666                     }
55667                 }
55668
55669                 _vtCache = {};
55670             },
55671
55672
55673             addSource: function(sourceID, template) {
55674                 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
55675                 return _vtCache[sourceID];
55676             },
55677
55678
55679             data: function(sourceID, projection) {
55680                 var source = _vtCache[sourceID];
55681                 if (!source) return [];
55682
55683                 var tiles = tiler$6.getTiles(projection);
55684                 var seen = {};
55685                 var results = [];
55686
55687                 for (var i = 0; i < tiles.length; i++) {
55688                     var features = source.loaded[tiles[i].id];
55689                     if (!features || !features.length) continue;
55690
55691                     for (var j = 0; j < features.length; j++) {
55692                         var feature = features[j];
55693                         var hash = feature.__featurehash__;
55694                         if (seen[hash]) continue;
55695                         seen[hash] = true;
55696
55697                         // return a shallow copy, because the hash may change
55698                         // later if this feature gets merged with another
55699                         results.push(Object.assign({}, feature));  // shallow copy
55700                     }
55701                 }
55702
55703                 return results;
55704             },
55705
55706
55707             loadTiles: function(sourceID, template, projection) {
55708                 var source = _vtCache[sourceID];
55709                 if (!source) {
55710                     source = this.addSource(sourceID, template);
55711                 }
55712
55713                 var tiles = tiler$6.getTiles(projection);
55714
55715                 // abort inflight requests that are no longer needed
55716                 Object.keys(source.inflight).forEach(function(k) {
55717                     var wanted = tiles.find(function(tile) { return k === tile.id; });
55718                     if (!wanted) {
55719                         abortRequest$6(source.inflight[k]);
55720                         delete source.inflight[k];
55721                     }
55722                 });
55723
55724                 tiles.forEach(function(tile) {
55725                     loadTile(source, tile);
55726                 });
55727             },
55728
55729
55730             cache: function() {
55731                 return _vtCache;
55732             }
55733
55734         };
55735
55736         var apibase$5 = 'https://www.wikidata.org/w/api.php?';
55737         var _wikidataCache = {};
55738
55739
55740         var serviceWikidata = {
55741
55742             init: function() {},
55743
55744             reset: function() {
55745                 _wikidataCache = {};
55746             },
55747
55748
55749             // Search for Wikidata items matching the query
55750             itemsForSearchQuery: function(query, callback) {
55751                 if (!query) {
55752                     if (callback) callback('No query', {});
55753                     return;
55754                 }
55755
55756                 var url = apibase$5 + utilQsString({
55757                     action: 'wbsearchentities',
55758                     format: 'json',
55759                     formatversion: 2,
55760                     search: query,
55761                     type: 'item',
55762                     language: this.languagesToQuery()[0],
55763                     limit: 10,
55764                     origin: '*'
55765                 });
55766
55767                 d3_json(url)
55768                     .then(function(result) {
55769                         if (result && result.error) {
55770                             throw new Error(result.error);
55771                         }
55772                         if (callback) callback(null, result.search || {});
55773                     })
55774                     .catch(function(err) {
55775                         if (callback) callback(err.message, {});
55776                     });
55777             },
55778
55779
55780             // Given a Wikipedia language and article title,
55781             // return an array of corresponding Wikidata entities.
55782             itemsByTitle: function(lang, title, callback) {
55783                 if (!title) {
55784                     if (callback) callback('No title', {});
55785                     return;
55786                 }
55787
55788                 lang = lang || 'en';
55789                 var url = apibase$5 + utilQsString({
55790                     action: 'wbgetentities',
55791                     format: 'json',
55792                     formatversion: 2,
55793                     sites: lang.replace(/-/g, '_') + 'wiki',
55794                     titles: title,
55795                     languages: 'en', // shrink response by filtering to one language
55796                     origin: '*'
55797                 });
55798
55799                 d3_json(url)
55800                     .then(function(result) {
55801                         if (result && result.error) {
55802                             throw new Error(result.error);
55803                         }
55804                         if (callback) callback(null, result.entities || {});
55805                     })
55806                     .catch(function(err) {
55807                         if (callback) callback(err.message, {});
55808                     });
55809             },
55810
55811
55812             languagesToQuery: function() {
55813                 return utilArrayUniq([
55814                     currentLocale.toLowerCase(),
55815                     currentLocale.split('-', 2)[0].toLowerCase(),
55816                     'en'
55817                 ]);
55818             },
55819
55820
55821             entityByQID: function(qid, callback) {
55822                 if (!qid) {
55823                     callback('No qid', {});
55824                     return;
55825                 }
55826                 if (_wikidataCache[qid]) {
55827                     if (callback) callback(null, _wikidataCache[qid]);
55828                     return;
55829                 }
55830
55831                 var langs = this.languagesToQuery();
55832                 var url = apibase$5 + utilQsString({
55833                     action: 'wbgetentities',
55834                     format: 'json',
55835                     formatversion: 2,
55836                     ids: qid,
55837                     props: 'labels|descriptions|claims|sitelinks',
55838                     sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
55839                     languages: langs.join('|'),
55840                     languagefallback: 1,
55841                     origin: '*'
55842                 });
55843
55844                 d3_json(url)
55845                     .then(function(result) {
55846                         if (result && result.error) {
55847                             throw new Error(result.error);
55848                         }
55849                         if (callback) callback(null, result.entities[qid] || {});
55850                     })
55851                     .catch(function(err) {
55852                         if (callback) callback(err.message, {});
55853                     });
55854             },
55855
55856
55857             // Pass `params` object of the form:
55858             // {
55859             //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
55860             // }
55861             //
55862             // Get an result object used to display tag documentation
55863             // {
55864             //   title:        'string',
55865             //   description:  'string',
55866             //   editURL:      'string',
55867             //   imageURL:     'string',
55868             //   wiki:         { title: 'string', text: 'string', url: 'string' }
55869             // }
55870             //
55871             getDocs: function(params, callback) {
55872                 var langs = this.languagesToQuery();
55873                 this.entityByQID(params.qid, function(err, entity) {
55874                     if (err || !entity) {
55875                         callback(err || 'No entity');
55876                         return;
55877                     }
55878
55879                     var i;
55880                     var description;
55881                     if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
55882                         description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
55883                     }
55884
55885                     // prepare result
55886                     var result = {
55887                         title: entity.id,
55888                         description: description,
55889                         editURL: 'https://www.wikidata.org/wiki/' + entity.id
55890                     };
55891
55892                     // add image
55893                     if (entity.claims) {
55894                         var imageroot = 'https://commons.wikimedia.org/w/index.php';
55895                         var props = ['P154','P18'];  // logo image, image
55896                         var prop, image;
55897                         for (i = 0; i < props.length; i++) {
55898                             prop = entity.claims[props[i]];
55899                             if (prop && Object.keys(prop).length > 0) {
55900                                 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
55901                                 if (image) {
55902                                     result.imageURL = imageroot + '?' + utilQsString({
55903                                         title: 'Special:Redirect/file/' + image,
55904                                         width: 400
55905                                     });
55906                                     break;
55907                                 }
55908                             }
55909                         }
55910                     }
55911
55912                     if (entity.sitelinks) {
55913                         var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
55914
55915                         // must be one of these that we requested..
55916                         for (i = 0; i < langs.length; i++) {   // check each, in order of preference
55917                             var w = langs[i] + 'wiki';
55918                             if (entity.sitelinks[w]) {
55919                                 var title = entity.sitelinks[w].title;
55920                                 var tKey = 'inspector.wiki_reference';
55921                                 if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
55922                                     tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
55923                                 }
55924
55925                                 result.wiki = {
55926                                     title: title,
55927                                     text: tKey,
55928                                     url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
55929                                 };
55930                                 break;
55931                             }
55932                         }
55933                     }
55934
55935                     callback(null, result);
55936                 });
55937             }
55938
55939         };
55940
55941         var endpoint = 'https://en.wikipedia.org/w/api.php?';
55942
55943         var serviceWikipedia = {
55944
55945             init: function() {},
55946             reset: function() {},
55947
55948
55949             search: function(lang, query, callback) {
55950                 if (!query) {
55951                     if (callback) callback('No Query', []);
55952                     return;
55953                 }
55954
55955                 lang = lang || 'en';
55956                 var url = endpoint.replace('en', lang) +
55957                     utilQsString({
55958                         action: 'query',
55959                         list: 'search',
55960                         srlimit: '10',
55961                         srinfo: 'suggestion',
55962                         format: 'json',
55963                         origin: '*',
55964                         srsearch: query
55965                     });
55966
55967                 d3_json(url)
55968                     .then(function(result) {
55969                         if (result && result.error) {
55970                             throw new Error(result.error);
55971                         } else if (!result || !result.query || !result.query.search) {
55972                             throw new Error('No Results');
55973                         }
55974                         if (callback) {
55975                             var titles = result.query.search.map(function(d) { return d.title; });
55976                             callback(null, titles);
55977                         }
55978                     })
55979                     .catch(function(err) {
55980                         if (callback) callback(err, []);
55981                     });
55982             },
55983
55984
55985             suggestions: function(lang, query, callback) {
55986                 if (!query) {
55987                     if (callback) callback('', []);
55988                     return;
55989                 }
55990
55991                 lang = lang || 'en';
55992                 var url = endpoint.replace('en', lang) +
55993                     utilQsString({
55994                         action: 'opensearch',
55995                         namespace: 0,
55996                         suggest: '',
55997                         format: 'json',
55998                         origin: '*',
55999                         search: query
56000                     });
56001
56002                 d3_json(url)
56003                     .then(function(result) {
56004                         if (result && result.error) {
56005                             throw new Error(result.error);
56006                         } else if (!result || result.length < 2) {
56007                             throw new Error('No Results');
56008                         }
56009                         if (callback) callback(null, result[1] || []);
56010                     })
56011                     .catch(function(err) {
56012                         if (callback) callback(err.message, []);
56013                     });
56014             },
56015
56016
56017             translations: function(lang, title, callback) {
56018                 if (!title) {
56019                     if (callback) callback('No Title');
56020                     return;
56021                 }
56022
56023                 var url = endpoint.replace('en', lang) +
56024                     utilQsString({
56025                         action: 'query',
56026                         prop: 'langlinks',
56027                         format: 'json',
56028                         origin: '*',
56029                         lllimit: 500,
56030                         titles: title
56031                     });
56032
56033                 d3_json(url)
56034                     .then(function(result) {
56035                         if (result && result.error) {
56036                             throw new Error(result.error);
56037                         } else if (!result || !result.query || !result.query.pages) {
56038                             throw new Error('No Results');
56039                         }
56040                         if (callback) {
56041                             var list = result.query.pages[Object.keys(result.query.pages)[0]];
56042                             var translations = {};
56043                             if (list && list.langlinks) {
56044                                 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
56045                             }
56046                             callback(null, translations);
56047                         }
56048                     })
56049                     .catch(function(err) {
56050                         if (callback) callback(err.message);
56051                     });
56052             }
56053
56054         };
56055
56056         var services$1 = {
56057             geocoder: serviceNominatim,
56058             keepRight: serviceKeepRight,
56059             improveOSM: serviceImproveOSM,
56060             mapillary: serviceMapillary,
56061             openstreetcam: serviceOpenstreetcam,
56062             osm: serviceOsm,
56063             osmWikibase: serviceOsmWikibase,
56064             maprules: serviceMapRules,
56065             streetside: serviceStreetside,
56066             taginfo: serviceTaginfo,
56067             vectorTile: serviceVectorTile,
56068             wikidata: serviceWikidata,
56069             wikipedia: serviceWikipedia
56070         };
56071
56072         function svgIcon(name, svgklass, useklass) {
56073             return function drawIcon(selection) {
56074                 selection.selectAll('svg.icon')
56075                     .data([0])
56076                     .enter()
56077                     .append('svg')
56078                     .attr('class', 'icon ' + (svgklass || ''))
56079                     .append('use')
56080                     .attr('xlink:href', name)
56081                     .attr('class', useklass);
56082             };
56083         }
56084
56085         function uiNoteComments() {
56086             var _note;
56087
56088
56089             function noteComments(selection) {
56090                 if (_note.isNew()) return; // don't draw .comments-container
56091
56092                 var comments = selection.selectAll('.comments-container')
56093                     .data([0]);
56094
56095                 comments = comments.enter()
56096                     .append('div')
56097                     .attr('class', 'comments-container')
56098                     .merge(comments);
56099
56100                 var commentEnter = comments.selectAll('.comment')
56101                     .data(_note.comments)
56102                     .enter()
56103                     .append('div')
56104                     .attr('class', 'comment');
56105
56106                 commentEnter
56107                     .append('div')
56108                     .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
56109                     .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
56110
56111                 var mainEnter = commentEnter
56112                     .append('div')
56113                     .attr('class', 'comment-main');
56114
56115                 var metadataEnter = mainEnter
56116                     .append('div')
56117                     .attr('class', 'comment-metadata');
56118
56119                 metadataEnter
56120                     .append('div')
56121                     .attr('class', 'comment-author')
56122                     .each(function(d) {
56123                         var selection = d3_select(this);
56124                         var osm = services$1.osm;
56125                         if (osm && d.user) {
56126                             selection = selection
56127                                 .append('a')
56128                                 .attr('class', 'comment-author-link')
56129                                 .attr('href', osm.userURL(d.user))
56130                                 .attr('tabindex', -1)
56131                                 .attr('target', '_blank');
56132                         }
56133                         selection
56134                             .text(function(d) { return d.user || t('note.anonymous'); });
56135                     });
56136
56137                 metadataEnter
56138                     .append('div')
56139                     .attr('class', 'comment-date')
56140                     .text(function(d) {
56141                         return t('note.status.' + d.action, { when: localeDateString(d.date) });
56142                     });
56143
56144                 mainEnter
56145                     .append('div')
56146                     .attr('class', 'comment-text')
56147                     .html(function(d) { return d.html; });
56148
56149                 comments
56150                     .call(replaceAvatars);
56151             }
56152
56153
56154             function replaceAvatars(selection) {
56155                 var osm = services$1.osm;
56156                 if (!osm) return;
56157
56158                 var uids = {};  // gather uids in the comment thread
56159                 _note.comments.forEach(function(d) {
56160                     if (d.uid) uids[d.uid] = true;
56161                 });
56162
56163                 Object.keys(uids).forEach(function(uid) {
56164                     osm.loadUser(uid, function(err, user) {
56165                         if (!user || !user.image_url) return;
56166
56167                         selection.selectAll('.comment-avatar.user-' + uid)
56168                             .html('')
56169                             .append('img')
56170                             .attr('class', 'icon comment-avatar-icon')
56171                             .attr('src', user.image_url)
56172                             .attr('alt', user.display_name);
56173                     });
56174                 });
56175             }
56176
56177
56178             function localeDateString(s) {
56179                 if (!s) return null;
56180                 var detected = utilDetect();
56181                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
56182                 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
56183                 var d = new Date(s);
56184                 if (isNaN(d.getTime())) return null;
56185                 return d.toLocaleDateString(detected.locale, options);
56186             }
56187
56188
56189             noteComments.note = function(val) {
56190                 if (!arguments.length) return _note;
56191                 _note = val;
56192                 return noteComments;
56193             };
56194
56195
56196             return noteComments;
56197         }
56198
56199         function uiNoteHeader() {
56200             var _note;
56201
56202
56203             function noteHeader(selection) {
56204                 var header = selection.selectAll('.note-header')
56205                     .data(
56206                         (_note ? [_note] : []),
56207                         function(d) { return d.status + d.id; }
56208                     );
56209
56210                 header.exit()
56211                     .remove();
56212
56213                 var headerEnter = header.enter()
56214                     .append('div')
56215                     .attr('class', 'note-header');
56216
56217                 var iconEnter = headerEnter
56218                     .append('div')
56219                     .attr('class', function(d) { return 'note-header-icon ' + d.status; })
56220                     .classed('new', function(d) { return d.id < 0; });
56221
56222                 iconEnter
56223                     .append('div')
56224                     .attr('class', 'preset-icon-28')
56225                     .call(svgIcon('#iD-icon-note', 'note-fill'));
56226
56227                 iconEnter.each(function(d) {
56228                     var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
56229                     iconEnter
56230                         .append('div')
56231                         .attr('class', 'note-icon-annotation')
56232                         .call(svgIcon(statusIcon, 'icon-annotation'));
56233                 });
56234
56235                 headerEnter
56236                     .append('div')
56237                     .attr('class', 'note-header-label')
56238                     .text(function(d) {
56239                         if (_note.isNew()) { return t('note.new'); }
56240                         return t('note.note') + ' ' + d.id + ' ' +
56241                             (d.status === 'closed' ? t('note.closed') : '');
56242                     });
56243             }
56244
56245
56246             noteHeader.note = function(val) {
56247                 if (!arguments.length) return _note;
56248                 _note = val;
56249                 return noteHeader;
56250             };
56251
56252
56253             return noteHeader;
56254         }
56255
56256         function uiNoteReport() {
56257             var _note;
56258
56259             function noteReport(selection) {
56260                 var url;
56261                 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
56262                     url = services$1.osm.noteReportURL(_note);
56263                 }
56264
56265                 var link = selection.selectAll('.note-report')
56266                     .data(url ? [url] : []);
56267
56268                 // exit
56269                 link.exit()
56270                     .remove();
56271
56272                 // enter
56273                 var linkEnter = link.enter()
56274                     .append('a')
56275                     .attr('class', 'note-report')
56276                     .attr('target', '_blank')
56277                     .attr('href', function(d) { return d; })
56278                     .call(svgIcon('#iD-icon-out-link', 'inline'));
56279
56280                 linkEnter
56281                     .append('span')
56282                     .text(t('note.report'));
56283             }
56284
56285
56286             noteReport.note = function(val) {
56287                 if (!arguments.length) return _note;
56288                 _note = val;
56289                 return noteReport;
56290             };
56291
56292             return noteReport;
56293         }
56294
56295         var _tooltipID = 0;
56296
56297         function tooltip(klass) {
56298             var _id = _tooltipID++;
56299             var tooltip = function(selection) {
56300                 selection.each(setup);
56301             };
56302             var _animation = utilFunctor(false);
56303             var _title = function() {
56304                 var title = this.getAttribute('data-original-title');
56305                 if (title) {
56306                     return title;
56307                 } else {
56308                     title = this.getAttribute('title');
56309                     this.removeAttribute('title');
56310                     this.setAttribute('data-original-title', title);
56311                 }
56312                 return title;
56313             };
56314             var _html = utilFunctor(false);
56315             var _placement = utilFunctor('top');
56316
56317
56318             tooltip.title = function(val) {
56319                 if (arguments.length) {
56320                     _title = utilFunctor(val);
56321                     return tooltip;
56322                 } else {
56323                     return _title;
56324                 }
56325             };
56326
56327
56328             tooltip.html = function(val) {
56329                 if (arguments.length) {
56330                     _html = utilFunctor(val);
56331                     return tooltip;
56332                 } else {
56333                     return _html;
56334                 }
56335             };
56336
56337
56338             tooltip.placement = function(val) {
56339                 if (arguments.length) {
56340                     _placement = utilFunctor(val);
56341                     return tooltip;
56342                 } else {
56343                     return _placement;
56344                 }
56345             };
56346
56347
56348             tooltip.show = function(selection) {
56349                 selection.each(show);
56350             };
56351
56352
56353             tooltip.hide = function(selection) {
56354                 selection.each(hide);
56355             };
56356
56357
56358             tooltip.toggle = function(selection) {
56359                 selection.each(toggle);
56360             };
56361
56362
56363             tooltip.destroy = function(selection, selector) {
56364                 // by default, just destroy the current tooltip
56365                 selector = selector || '.tooltip-' + _id;
56366
56367                 selection
56368                     .on('mouseenter.tooltip', null)
56369                     .on('mouseleave.tooltip', null)
56370                     .attr('title', function() {
56371                         return this.getAttribute('data-original-title') || this.getAttribute('title');
56372                     })
56373                     .attr('data-original-title', null)
56374                     .selectAll(selector)
56375                     .remove();
56376             };
56377
56378
56379             tooltip.destroyAny = function(selection) {
56380                 selection.call(tooltip.destroy, '.tooltip');
56381             };
56382
56383             var isTouchEvent = false;
56384
56385             function setup() {
56386                 var root = d3_select(this);
56387                 var animate = _animation.apply(this, arguments);
56388                 var tip = root.selectAll('.tooltip-' + _id)
56389                     .data([0]);
56390
56391                 var enter = tip.enter()
56392                     .append('div')
56393                     .attr('class', 'tooltip tooltip-' + _id + ' ' + (klass ? klass : ''));
56394
56395                 enter
56396                     .append('div')
56397                     .attr('class', 'tooltip-arrow');
56398
56399                 enter
56400                     .append('div')
56401                     .attr('class', 'tooltip-inner');
56402
56403                 tip = enter
56404                     .merge(tip);
56405
56406                 if (animate) {
56407                     tip.classed('fade', true);
56408                 }
56409
56410                 var place = _placement.apply(this, arguments);
56411                 tip.classed(place, true);
56412
56413                 root.on('touchstart.tooltip', function() {
56414                     // hack to avoid showing tooltips upon touch input
56415                     isTouchEvent = true;
56416                 });
56417                 root.on('mouseenter.tooltip', show);
56418                 root.on('mouseleave.tooltip', hide);
56419             }
56420
56421
56422             function show() {
56423                 if (isTouchEvent) {
56424                     isTouchEvent = false;
56425                     return;
56426                 }
56427                 var root = d3_select(this);
56428                 var content = _title.apply(this, arguments);
56429                 var tip = root.selectAll('.tooltip-' + _id);
56430
56431                 if (tip.empty()) {   // tooltip was removed somehow, put it back
56432                     root.call(tooltip.destroy);
56433                     root.each(setup);
56434                     tip = root.selectAll('.tooltip-' + _id);
56435                 }
56436
56437                 tip.classed('in', true);
56438                 var markup = _html.apply(this, arguments);
56439
56440                 tip.selectAll('.tooltip-inner')[markup ? 'html' : 'text'](content);
56441                 var place = _placement.apply(this, arguments);
56442                 var outer = getPosition(root.node());
56443                 var inner = getPosition(tip.node());
56444                 var pos;
56445
56446                 switch (place) {
56447                     case 'top':
56448                     pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y - inner.h };
56449                     break;
56450                     case 'right':
56451                     pos = { x: outer.x + outer.w, y: outer.y + (outer.h - inner.h) / 2 };
56452                     break;
56453                     case 'left':
56454                     pos = { x: outer.x - inner.w, y: outer.y + (outer.h - inner.h) / 2 };
56455                     break;
56456                     case 'bottom':
56457                     pos = { x: outer.x + (outer.w - inner.w) / 2, y: outer.y + outer.h };
56458                     break;
56459                 }
56460
56461                 if (pos) {
56462                     tip.style('left', ~~pos.x + 'px').style('top', ~~pos.y + 'px');
56463                 } else {
56464                     tip.style('left', null).style('top', null);
56465                 }
56466
56467                 this.tooltipVisible = true;
56468
56469
56470                 function getPosition(node) {
56471                     var mode = d3_select(node).style('position');
56472                     if (mode === 'absolute' || mode === 'static') {
56473                         return {
56474                             x: node.offsetLeft,
56475                             y: node.offsetTop,
56476                             w: node.offsetWidth,
56477                             h: node.offsetHeight
56478                         };
56479                     } else {
56480                         return {
56481                             x: 0,
56482                             y: 0,
56483                             w: node.offsetWidth,
56484                             h: node.offsetHeight
56485                         };
56486                     }
56487                 }
56488             }
56489
56490
56491             function hide() {
56492                 d3_select(this).selectAll('.tooltip-' + _id).classed('in', false);
56493                 this.tooltipVisible = false;
56494             }
56495
56496
56497             function toggle() {
56498                 if (this.tooltipVisible) {
56499                     hide.apply(this, arguments);
56500                 } else {
56501                     show.apply(this, arguments);
56502                 }
56503             }
56504
56505
56506             return tooltip;
56507         }
56508
56509         function uiQuickLinks() {
56510             var _choices = [];
56511
56512
56513             function quickLinks(selection) {
56514                 var container = selection.selectAll('.quick-links')
56515                     .data([0]);
56516
56517                 container = container.enter()
56518                     .append('div')
56519                     .attr('class', 'quick-links')
56520                     .merge(container);
56521
56522                 var items = container.selectAll('.quick-link')
56523                     .data(_choices, function(d) { return d.id; });
56524
56525                 items.exit()
56526                     .remove();
56527
56528                 items.enter()
56529                     .append('a')
56530                     .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
56531                     .attr('href', '#')
56532                     .text(function(d) { return t(d.label); })
56533                     .each(function(d) {
56534                         if (typeof d.tooltip !== 'function') return;
56535                         d3_select(this)
56536                             .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
56537                     })
56538                     .on('click', function(d) {
56539                         if (typeof d.click !== 'function') return;
56540                         event.preventDefault();
56541                         d.click(d);
56542                     });
56543             }
56544
56545
56546             //  val should be an array of choices like:
56547             //    [{
56548             //       id: 'link-id',
56549             //       label: 'translation.key',
56550             //       tooltip: function(d),
56551             //       click: function(d)
56552             //    }, ..]
56553             quickLinks.choices = function(val) {
56554                 if (!arguments.length) return _choices;
56555                 _choices = val;
56556                 return quickLinks;
56557             };
56558
56559
56560             return quickLinks;
56561         }
56562
56563         function uiTooltipHtml(text, key, heading) {
56564             var s = '';
56565
56566             if (heading) {
56567                 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
56568             }
56569             if (text) {
56570                 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
56571             }
56572             if (key) {
56573                 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>' +
56574                     '<span class="keyhint">' + key + '</span></div>';
56575             }
56576
56577             return s;
56578         }
56579
56580         function uiViewOnOSM(context) {
56581             var _what;   // an osmEntity or osmNote
56582
56583
56584             function viewOnOSM(selection) {
56585                 var url;
56586                 if (_what instanceof osmEntity) {
56587                     url = context.connection().entityURL(_what);
56588                 } else if (_what instanceof osmNote) {
56589                     url = context.connection().noteURL(_what);
56590                 }
56591
56592                 var data = ((!_what || _what.isNew()) ? [] : [_what]);
56593                 var link = selection.selectAll('.view-on-osm')
56594                     .data(data, function(d) { return d.id; });
56595
56596                 // exit
56597                 link.exit()
56598                     .remove();
56599
56600                 // enter
56601                 var linkEnter = link.enter()
56602                     .append('a')
56603                     .attr('class', 'view-on-osm')
56604                     .attr('target', '_blank')
56605                     .attr('href', url)
56606                     .call(svgIcon('#iD-icon-out-link', 'inline'));
56607
56608                 linkEnter
56609                     .append('span')
56610                     .text(t('inspector.view_on_osm'));
56611             }
56612
56613
56614             viewOnOSM.what = function(_) {
56615                 if (!arguments.length) return _what;
56616                 _what = _;
56617                 return viewOnOSM;
56618             };
56619
56620             return viewOnOSM;
56621         }
56622
56623         function uiNoteEditor(context) {
56624             var dispatch$1 = dispatch('change');
56625             var quickLinks = uiQuickLinks();
56626             var noteComments = uiNoteComments();
56627             var noteHeader = uiNoteHeader();
56628
56629             // var formFields = uiFormFields(context);
56630
56631             var _note;
56632             // var _fieldsArr;
56633
56634
56635             function noteEditor(selection) {
56636                 // quick links
56637                 var choices = [{
56638                     id: 'zoom_to',
56639                     label: 'inspector.zoom_to.title',
56640                     tooltip: function() {
56641                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
56642                     },
56643                     click: function zoomTo() {
56644                         context.mode().zoomToSelected();
56645                     }
56646                 }];
56647
56648
56649                 var header = selection.selectAll('.header')
56650                     .data([0]);
56651
56652                 var headerEnter = header.enter()
56653                     .append('div')
56654                     .attr('class', 'header fillL');
56655
56656                 headerEnter
56657                     .append('button')
56658                     .attr('class', 'fr note-editor-close')
56659                     .on('click', function() {
56660                         context.enter(modeBrowse(context));
56661                     })
56662                     .call(svgIcon('#iD-icon-close'));
56663
56664                 headerEnter
56665                     .append('h3')
56666                     .text(t('note.title'));
56667
56668
56669                 var body = selection.selectAll('.body')
56670                     .data([0]);
56671
56672                 body = body.enter()
56673                     .append('div')
56674                     .attr('class', 'body')
56675                     .merge(body);
56676
56677                 var editor = body.selectAll('.note-editor')
56678                     .data([0]);
56679
56680                 editor.enter()
56681                     .append('div')
56682                     .attr('class', 'modal-section note-editor')
56683                     .merge(editor)
56684                     .call(noteHeader.note(_note))
56685                     .call(quickLinks.choices(choices))
56686                     .call(noteComments.note(_note))
56687                     .call(noteSaveSection);
56688
56689
56690                 var footer = selection.selectAll('.footer')
56691                     .data([0]);
56692
56693                 footer.enter()
56694                     .append('div')
56695                     .attr('class', 'footer')
56696                     .merge(footer)
56697                     .call(uiViewOnOSM(context).what(_note))
56698                     .call(uiNoteReport().note(_note));
56699
56700
56701                 // rerender the note editor on any auth change
56702                 var osm = services$1.osm;
56703                 if (osm) {
56704                     osm.on('change.note-save', function() {
56705                         selection.call(noteEditor);
56706                     });
56707                 }
56708             }
56709
56710
56711             function noteSaveSection(selection) {
56712                 var isSelected = (_note && _note.id === context.selectedNoteID());
56713                 var noteSave = selection.selectAll('.note-save')
56714                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56715
56716                 // exit
56717                 noteSave.exit()
56718                     .remove();
56719
56720                 // enter
56721                 var noteSaveEnter = noteSave.enter()
56722                     .append('div')
56723                     .attr('class', 'note-save save-section cf');
56724
56725                 // // if new note, show categories to pick from
56726                 // if (_note.isNew()) {
56727                 //     var presets = context.presets();
56728
56729                 //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
56730                 //     _fieldsArr = [
56731                 //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
56732                 //     ];
56733
56734                 //     _fieldsArr.forEach(function(field) {
56735                 //         field
56736                 //             .on('change', changeCategory);
56737                 //     });
56738
56739                 //     noteSaveEnter
56740                 //         .append('div')
56741                 //         .attr('class', 'note-category')
56742                 //         .call(formFields.fieldsArr(_fieldsArr));
56743                 // }
56744
56745                 // function changeCategory() {
56746                 //     // NOTE: perhaps there is a better way to get value
56747                 //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
56748
56749                 //     // store the unsaved category with the note itself
56750                 //     _note = _note.update({ newCategory: val });
56751                 //     var osm = services.osm;
56752                 //     if (osm) {
56753                 //         osm.replaceNote(_note);  // update note cache
56754                 //     }
56755                 //     noteSave
56756                 //         .call(noteSaveButtons);
56757                 // }
56758
56759                 noteSaveEnter
56760                     .append('h4')
56761                     .attr('class', '.note-save-header')
56762                     .text(function() {
56763                         return _note.isNew() ? t('note.newDescription') : t('note.newComment');
56764                     });
56765
56766                 noteSaveEnter
56767                     .append('textarea')
56768                     .attr('class', 'new-comment-input')
56769                     .attr('placeholder', t('note.inputPlaceholder'))
56770                     .attr('maxlength', 1000)
56771                     .property('value', function(d) { return d.newComment; })
56772                     .call(utilNoAuto)
56773                     .on('keydown.note-input', keydown)
56774                     .on('input.note-input', changeInput)
56775                     .on('blur.note-input', changeInput);
56776
56777                 // update
56778                 noteSave = noteSaveEnter
56779                     .merge(noteSave)
56780                     .call(userDetails)
56781                     .call(noteSaveButtons);
56782
56783
56784                 // fast submit if user presses cmd+enter
56785                 function keydown() {
56786                     if (!(event.keyCode === 13 && event.metaKey)) return;
56787
56788                     var osm = services$1.osm;
56789                     if (!osm) return;
56790
56791                     var hasAuth = osm.authenticated();
56792                     if (!hasAuth) return;
56793
56794                     if (!_note.newComment) return;
56795
56796                     event.preventDefault();
56797
56798                     d3_select(this)
56799                         .on('keydown.note-input', null);
56800
56801                     // focus on button and submit
56802                     window.setTimeout(function() {
56803                         if (_note.isNew()) {
56804                             noteSave.selectAll('.save-button').node().focus();
56805                             clickSave(_note);
56806                         } else  {
56807                             noteSave.selectAll('.comment-button').node().focus();
56808                             clickComment(_note);
56809                         }
56810                     }, 10);
56811                 }
56812
56813
56814                 function changeInput() {
56815                     var input = d3_select(this);
56816                     var val = input.property('value').trim() || undefined;
56817
56818                     // store the unsaved comment with the note itself
56819                     _note = _note.update({ newComment: val });
56820
56821                     var osm = services$1.osm;
56822                     if (osm) {
56823                         osm.replaceNote(_note);  // update note cache
56824                     }
56825
56826                     noteSave
56827                         .call(noteSaveButtons);
56828                 }
56829             }
56830
56831
56832             function userDetails(selection) {
56833                 var detailSection = selection.selectAll('.detail-section')
56834                     .data([0]);
56835
56836                 detailSection = detailSection.enter()
56837                     .append('div')
56838                     .attr('class', 'detail-section')
56839                     .merge(detailSection);
56840
56841                 var osm = services$1.osm;
56842                 if (!osm) return;
56843
56844                 // Add warning if user is not logged in
56845                 var hasAuth = osm.authenticated();
56846                 var authWarning = detailSection.selectAll('.auth-warning')
56847                     .data(hasAuth ? [] : [0]);
56848
56849                 authWarning.exit()
56850                     .transition()
56851                     .duration(200)
56852                     .style('opacity', 0)
56853                     .remove();
56854
56855                 var authEnter = authWarning.enter()
56856                     .insert('div', '.tag-reference-body')
56857                     .attr('class', 'field-warning auth-warning')
56858                     .style('opacity', 0);
56859
56860                 authEnter
56861                     .call(svgIcon('#iD-icon-alert', 'inline'));
56862
56863                 authEnter
56864                     .append('span')
56865                     .text(t('note.login'));
56866
56867                 authEnter
56868                     .append('a')
56869                     .attr('target', '_blank')
56870                     .call(svgIcon('#iD-icon-out-link', 'inline'))
56871                     .append('span')
56872                     .text(t('login'))
56873                     .on('click.note-login', function() {
56874                         event.preventDefault();
56875                         osm.authenticate();
56876                     });
56877
56878                 authEnter
56879                     .transition()
56880                     .duration(200)
56881                     .style('opacity', 1);
56882
56883
56884                 var prose = detailSection.selectAll('.note-save-prose')
56885                     .data(hasAuth ? [0] : []);
56886
56887                 prose.exit()
56888                     .remove();
56889
56890                 prose = prose.enter()
56891                     .append('p')
56892                     .attr('class', 'note-save-prose')
56893                     .text(t('note.upload_explanation'))
56894                     .merge(prose);
56895
56896                 osm.userDetails(function(err, user) {
56897                     if (err) return;
56898
56899                     var userLink = d3_select(document.createElement('div'));
56900
56901                     if (user.image_url) {
56902                         userLink
56903                             .append('img')
56904                             .attr('src', user.image_url)
56905                             .attr('class', 'icon pre-text user-icon');
56906                     }
56907
56908                     userLink
56909                         .append('a')
56910                         .attr('class', 'user-info')
56911                         .text(user.display_name)
56912                         .attr('href', osm.userURL(user.display_name))
56913                         .attr('tabindex', -1)
56914                         .attr('target', '_blank');
56915
56916                     prose
56917                         .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
56918                 });
56919             }
56920
56921
56922             function noteSaveButtons(selection) {
56923                 var osm = services$1.osm;
56924                 var hasAuth = osm && osm.authenticated();
56925
56926                 var isSelected = (_note && _note.id === context.selectedNoteID());
56927                 var buttonSection = selection.selectAll('.buttons')
56928                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
56929
56930                 // exit
56931                 buttonSection.exit()
56932                     .remove();
56933
56934                 // enter
56935                 var buttonEnter = buttonSection.enter()
56936                     .append('div')
56937                     .attr('class', 'buttons');
56938
56939                 if (_note.isNew()) {
56940                     buttonEnter
56941                         .append('button')
56942                         .attr('class', 'button cancel-button secondary-action')
56943                         .text(t('confirm.cancel'));
56944
56945                     buttonEnter
56946                         .append('button')
56947                         .attr('class', 'button save-button action')
56948                         .text(t('note.save'));
56949
56950                 } else {
56951                     buttonEnter
56952                         .append('button')
56953                         .attr('class', 'button status-button action');
56954
56955                     buttonEnter
56956                         .append('button')
56957                         .attr('class', 'button comment-button action')
56958                         .text(t('note.comment'));
56959                 }
56960
56961
56962                 // update
56963                 buttonSection = buttonSection
56964                     .merge(buttonEnter);
56965
56966                 buttonSection.select('.cancel-button')   // select and propagate data
56967                     .on('click.cancel', clickCancel);
56968
56969                 buttonSection.select('.save-button')     // select and propagate data
56970                     .attr('disabled', isSaveDisabled)
56971                     .on('click.save', clickSave);
56972
56973                 buttonSection.select('.status-button')   // select and propagate data
56974                     .attr('disabled', (hasAuth ? null : true))
56975                     .text(function(d) {
56976                         var action = (d.status === 'open' ? 'close' : 'open');
56977                         var andComment = (d.newComment ? '_comment' : '');
56978                         return t('note.' + action + andComment);
56979                     })
56980                     .on('click.status', clickStatus);
56981
56982                 buttonSection.select('.comment-button')   // select and propagate data
56983                     .attr('disabled', isSaveDisabled)
56984                     .on('click.comment', clickComment);
56985
56986
56987                 function isSaveDisabled(d) {
56988                     return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
56989                 }
56990             }
56991
56992
56993
56994             function clickCancel(d) {
56995                 this.blur();    // avoid keeping focus on the button - #4641
56996                 var osm = services$1.osm;
56997                 if (osm) {
56998                     osm.removeNote(d);
56999                 }
57000                 context.enter(modeBrowse(context));
57001                 dispatch$1.call('change');
57002             }
57003
57004
57005             function clickSave(d) {
57006                 this.blur();    // avoid keeping focus on the button - #4641
57007                 var osm = services$1.osm;
57008                 if (osm) {
57009                     osm.postNoteCreate(d, function(err, note) {
57010                         dispatch$1.call('change', note);
57011                     });
57012                 }
57013             }
57014
57015
57016             function clickStatus(d) {
57017                 this.blur();    // avoid keeping focus on the button - #4641
57018                 var osm = services$1.osm;
57019                 if (osm) {
57020                     var setStatus = (d.status === 'open' ? 'closed' : 'open');
57021                     osm.postNoteUpdate(d, setStatus, function(err, note) {
57022                         dispatch$1.call('change', note);
57023                     });
57024                 }
57025             }
57026
57027             function clickComment(d) {
57028                 this.blur();    // avoid keeping focus on the button - #4641
57029                 var osm = services$1.osm;
57030                 if (osm) {
57031                     osm.postNoteUpdate(d, d.status, function(err, note) {
57032                         dispatch$1.call('change', note);
57033                     });
57034                 }
57035             }
57036
57037
57038             noteEditor.note = function(val) {
57039                 if (!arguments.length) return _note;
57040                 _note = val;
57041                 return noteEditor;
57042             };
57043
57044
57045             return utilRebind(noteEditor, dispatch$1, 'on');
57046         }
57047
57048         function modeSelectNote(context, selectedNoteID) {
57049             var mode = {
57050                 id: 'select-note',
57051                 button: 'browse'
57052             };
57053
57054             var osm = services$1.osm;
57055             var keybinding = utilKeybinding('select-note');
57056             var noteEditor = uiNoteEditor(context)
57057                 .on('change', function() {
57058                     context.map().pan([0,0]);  // trigger a redraw
57059                     var note = checkSelectedID();
57060                     if (!note) return;
57061                     context.ui().sidebar
57062                         .show(noteEditor.note(note));
57063                 });
57064
57065             var behaviors = [
57066                 behaviorBreathe(),
57067                 behaviorHover(context),
57068                 behaviorSelect(context),
57069                 behaviorLasso(context),
57070                 modeDragNode(context).behavior,
57071                 modeDragNote(context).behavior
57072             ];
57073
57074             var newFeature = false;
57075
57076
57077             function checkSelectedID() {
57078                 if (!osm) return;
57079                 var note = osm.getNote(selectedNoteID);
57080                 if (!note) {
57081                     context.enter(modeBrowse(context));
57082                 }
57083                 return note;
57084             }
57085
57086
57087             // class the note as selected, or return to browse mode if the note is gone
57088             function selectNote(drawn) {
57089                 if (!checkSelectedID()) return;
57090
57091                 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
57092
57093                 if (selection.empty()) {
57094                     // Return to browse mode if selected DOM elements have
57095                     // disappeared because the user moved them out of view..
57096                     var source = event && event.type === 'zoom' && event.sourceEvent;
57097                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
57098                         context.enter(modeBrowse(context));
57099                     }
57100
57101                 } else {
57102                     selection
57103                         .classed('selected', true);
57104
57105                     context.selectedNoteID(selectedNoteID);
57106                 }
57107             }
57108
57109
57110             function esc() {
57111                 if (d3_select('.combobox').size()) return;
57112                 context.enter(modeBrowse(context));
57113             }
57114
57115
57116             mode.zoomToSelected = function() {
57117                 if (!osm) return;
57118                 var note = osm.getNote(selectedNoteID);
57119                 if (note) {
57120                     context.map().centerZoomEase(note.loc, 20);
57121                 }
57122             };
57123
57124
57125             mode.newFeature = function(val) {
57126                 if (!arguments.length) return newFeature;
57127                 newFeature = val;
57128                 return mode;
57129             };
57130
57131
57132             mode.enter = function() {
57133                 var note = checkSelectedID();
57134                 if (!note) return;
57135
57136                 behaviors.forEach(context.install);
57137
57138                 keybinding
57139                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
57140                     .on('⎋', esc, true);
57141
57142                 d3_select(document)
57143                     .call(keybinding);
57144
57145                 selectNote();
57146
57147                 var sidebar = context.ui().sidebar;
57148                 sidebar.show(noteEditor.note(note));
57149
57150                 // expand the sidebar, avoid obscuring the note if needed
57151                 sidebar.expand(sidebar.intersects(note.extent()));
57152
57153                 context.map()
57154                     .on('drawn.select', selectNote);
57155             };
57156
57157
57158             mode.exit = function() {
57159                 behaviors.forEach(context.uninstall);
57160
57161                 d3_select(document)
57162                     .call(keybinding.unbind);
57163
57164                 context.surface()
57165                     .selectAll('.layer-notes .selected')
57166                     .classed('selected hover', false);
57167
57168                 context.map()
57169                     .on('drawn.select', null);
57170
57171                 context.ui().sidebar
57172                     .hide();
57173
57174                 context.selectedNoteID(null);
57175             };
57176
57177
57178             return mode;
57179         }
57180
57181         function modeDragNote(context) {
57182             var mode = {
57183                 id: 'drag-note',
57184                 button: 'browse'
57185             };
57186
57187             var edit = behaviorEdit(context);
57188
57189             var _nudgeInterval;
57190             var _lastLoc;
57191             var _note;    // most current note.. dragged note may have stale datum.
57192
57193
57194             function startNudge(nudge) {
57195                 if (_nudgeInterval) window.clearInterval(_nudgeInterval);
57196                 _nudgeInterval = window.setInterval(function() {
57197                     context.pan(nudge);
57198                     doMove(nudge);
57199                 }, 50);
57200             }
57201
57202
57203             function stopNudge() {
57204                 if (_nudgeInterval) {
57205                     window.clearInterval(_nudgeInterval);
57206                     _nudgeInterval = null;
57207                 }
57208             }
57209
57210
57211             function origin(note) {
57212                 return context.projection(note.loc);
57213             }
57214
57215
57216             function start(note) {
57217                 _note = note;
57218                 var osm = services$1.osm;
57219                 if (osm) {
57220                     // Get latest note from cache.. The marker may have a stale datum bound to it
57221                     // and dragging it around can sometimes delete the users note comment.
57222                     _note = osm.getNote(_note.id);
57223                 }
57224
57225                 context.surface().selectAll('.note-' + _note.id)
57226                     .classed('active', true);
57227
57228                 context.perform(actionNoop());
57229                 context.enter(mode);
57230                 context.selectedNoteID(_note.id);
57231             }
57232
57233
57234             function move() {
57235                 event.sourceEvent.stopPropagation();
57236                 _lastLoc = context.projection.invert(event.point);
57237
57238                 doMove();
57239                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
57240                 if (nudge) {
57241                     startNudge(nudge);
57242                 } else {
57243                     stopNudge();
57244                 }
57245             }
57246
57247
57248             function doMove(nudge) {
57249                 nudge = nudge || [0, 0];
57250
57251                 var currPoint = (event && event.point) || context.projection(_lastLoc);
57252                 var currMouse = geoVecSubtract(currPoint, nudge);
57253                 var loc = context.projection.invert(currMouse);
57254
57255                 _note = _note.move(loc);
57256
57257                 var osm = services$1.osm;
57258                 if (osm) {
57259                     osm.replaceNote(_note);  // update note cache
57260                 }
57261
57262                 context.replace(actionNoop());   // trigger redraw
57263             }
57264
57265
57266             function end() {
57267                 context.replace(actionNoop());   // trigger redraw
57268
57269                 context
57270                     .selectedNoteID(_note.id)
57271                     .enter(modeSelectNote(context, _note.id));
57272             }
57273
57274
57275             var drag = behaviorDrag()
57276                 .selector('.layer-touch.markers .target.note.new')
57277                 .surface(d3_select('#map').node())
57278                 .origin(origin)
57279                 .on('start', start)
57280                 .on('move', move)
57281                 .on('end', end);
57282
57283
57284             mode.enter = function() {
57285                 context.install(edit);
57286             };
57287
57288
57289             mode.exit = function() {
57290                 context.ui().sidebar.hover.cancel();
57291                 context.uninstall(edit);
57292
57293                 context.surface()
57294                     .selectAll('.active')
57295                     .classed('active', false);
57296
57297                 stopNudge();
57298             };
57299
57300             mode.behavior = drag;
57301
57302             return mode;
57303         }
57304
57305         function uiDataHeader() {
57306             var _datum;
57307
57308
57309             function dataHeader(selection) {
57310                 var header = selection.selectAll('.data-header')
57311                     .data(
57312                         (_datum ? [_datum] : []),
57313                         function(d) { return d.__featurehash__; }
57314                     );
57315
57316                 header.exit()
57317                     .remove();
57318
57319                 var headerEnter = header.enter()
57320                     .append('div')
57321                     .attr('class', 'data-header');
57322
57323                 var iconEnter = headerEnter
57324                     .append('div')
57325                     .attr('class', 'data-header-icon');
57326
57327                 iconEnter
57328                     .append('div')
57329                     .attr('class', 'preset-icon-28')
57330                     .call(svgIcon('#iD-icon-data', 'note-fill'));
57331
57332                 headerEnter
57333                     .append('div')
57334                     .attr('class', 'data-header-label')
57335                     .text(t('map_data.layers.custom.title'));
57336             }
57337
57338
57339             dataHeader.datum = function(val) {
57340                 if (!arguments.length) return _datum;
57341                 _datum = val;
57342                 return this;
57343             };
57344
57345
57346             return dataHeader;
57347         }
57348
57349         // This code assumes that the combobox values will not have duplicate entries.
57350         // It is keyed on the `value` of the entry. Data should be an array of objects like:
57351         //   [{
57352         //       value:  'display text',  // required
57353         //       title:  'hover text'     // optional
57354         //   }, ...]
57355
57356         var _comboHideTimerID;
57357
57358         function uiCombobox(context, klass) {
57359             var dispatch$1 = dispatch('accept', 'cancel');
57360             var container = context.container();
57361
57362             var _suggestions = [];
57363             var _data = [];
57364             var _fetched = {};
57365             var _selected = null;
57366             var _canAutocomplete = true;
57367             var _caseSensitive = false;
57368             var _cancelFetch = false;
57369             var _minItems = 2;
57370             var _tDown = 0;
57371             var _mouseEnterHandler, _mouseLeaveHandler;
57372
57373             var _fetcher = function(val, cb) {
57374                 cb(_data.filter(function(d) {
57375                     var terms = d.terms || [];
57376                     terms.push(d.value);
57377                     return terms.some(function(term) {
57378                         return term
57379                             .toString()
57380                             .toLowerCase()
57381                             .indexOf(val.toLowerCase()) !== -1;
57382                     });
57383                 }));
57384             };
57385
57386             var combobox = function(input, attachTo) {
57387                 if (!input || input.empty()) return;
57388
57389                 input
57390                     .classed('combobox-input', true)
57391                     .on('focus.combo-input', focus)
57392                     .on('blur.combo-input', blur)
57393                     .on('keydown.combo-input', keydown)
57394                     .on('keyup.combo-input', keyup)
57395                     .on('input.combo-input', change)
57396                     .on('mousedown.combo-input', mousedown)
57397                     .each(function() {
57398                         var parent = this.parentNode;
57399                         var sibling = this.nextSibling;
57400
57401                         d3_select(parent).selectAll('.combobox-caret')
57402                             .filter(function(d) { return d === input.node(); })
57403                             .data([input.node()])
57404                             .enter()
57405                             .insert('div', function() { return sibling; })
57406                             .attr('class', 'combobox-caret')
57407                             .on('mousedown.combo-caret', function() {
57408                                 event.preventDefault(); // don't steal focus from input
57409                                 input.node().focus(); // focus the input as if it was clicked
57410                                 mousedown();
57411                             })
57412                             .on('mouseup.combo-caret', function() {
57413                                 event.preventDefault(); // don't steal focus from input
57414                                 mouseup();
57415                             });
57416                     });
57417
57418
57419                 function mousedown() {
57420                     if (event.button !== 0) return;    // left click only
57421                     _tDown = +new Date();
57422
57423                     // clear selection
57424                     var start = input.property('selectionStart');
57425                     var end = input.property('selectionEnd');
57426                     if (start !== end) {
57427                         var val = utilGetSetValue(input);
57428                         input.node().setSelectionRange(val.length, val.length);
57429                         return;
57430                     }
57431
57432                     input.on('mouseup.combo-input', mouseup);
57433                 }
57434
57435
57436                 function mouseup() {
57437                     input.on('mouseup.combo-input', null);
57438                     if (event.button !== 0) return;    // left click only
57439                     if (input.node() !== document.activeElement) return;   // exit if this input is not focused
57440
57441                     var start = input.property('selectionStart');
57442                     var end = input.property('selectionEnd');
57443                     if (start !== end) return;  // exit if user is selecting
57444
57445                     // not showing or showing for a different field - try to show it.
57446                     var combo = container.selectAll('.combobox');
57447                     if (combo.empty() || combo.datum() !== input.node()) {
57448                         var tOrig = _tDown;
57449                         window.setTimeout(function() {
57450                             if (tOrig !== _tDown) return;   // exit if user double clicked
57451                             fetchComboData('', function() {
57452                                 show();
57453                                 render();
57454                             });
57455                         }, 250);
57456
57457                     } else {
57458                         hide();
57459                     }
57460                 }
57461
57462
57463                 function focus() {
57464                     fetchComboData('');   // prefetch values (may warm taginfo cache)
57465                 }
57466
57467
57468                 function blur() {
57469                     _comboHideTimerID = window.setTimeout(hide, 75);
57470                 }
57471
57472
57473                 function show() {
57474                     hide();   // remove any existing
57475
57476                     container
57477                         .insert('div', ':first-child')
57478                         .datum(input.node())
57479                         .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
57480                         .style('position', 'absolute')
57481                         .style('display', 'block')
57482                         .style('left', '0px')
57483                         .on('mousedown.combo-container', function () {
57484                             // prevent moving focus out of the input field
57485                             event.preventDefault();
57486                         });
57487
57488                     d3_select('body')
57489                         .on('scroll.combo-scroll', render, true);
57490                 }
57491
57492
57493                 function hide() {
57494                     if (_comboHideTimerID) {
57495                         window.clearTimeout(_comboHideTimerID);
57496                         _comboHideTimerID = undefined;
57497                     }
57498
57499                     container.selectAll('.combobox')
57500                         .remove();
57501
57502                     d3_select('body')
57503                         .on('scroll.combo-scroll', null);
57504                 }
57505
57506
57507                 function keydown() {
57508                     var shown = !container.selectAll('.combobox').empty();
57509                     var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
57510
57511                     switch (event.keyCode) {
57512                         case 8:   // ⌫ Backspace
57513                         case 46:  // ⌦ Delete
57514                             event.stopPropagation();
57515                             _selected = null;
57516                             render();
57517                             input.on('input.combo-input', function() {
57518                                 var start = input.property('selectionStart');
57519                                 input.node().setSelectionRange(start, start);
57520                                 input.on('input.combo-input', change);
57521                             });
57522                             break;
57523
57524                         case 9:   // ⇥ Tab
57525                             accept();
57526                             break;
57527
57528                         case 13:  // ↩ Return
57529                             event.preventDefault();
57530                             event.stopPropagation();
57531                             break;
57532
57533                         case 38:  // ↑ Up arrow
57534                             if (tagName === 'textarea' && !shown) return;
57535                             event.preventDefault();
57536                             if (tagName === 'input' && !shown) {
57537                                 show();
57538                             }
57539                             nav(-1);
57540                             break;
57541
57542                         case 40:  // ↓ Down arrow
57543                             if (tagName === 'textarea' && !shown) return;
57544                             event.preventDefault();
57545                             if (tagName === 'input' && !shown) {
57546                                 show();
57547                             }
57548                             nav(+1);
57549                             break;
57550                     }
57551                 }
57552
57553
57554                 function keyup() {
57555                     switch (event.keyCode) {
57556                         case 27:  // ⎋ Escape
57557                             cancel();
57558                             break;
57559
57560                         case 13:  // ↩ Return
57561                             accept();
57562                             break;
57563                     }
57564                 }
57565
57566
57567                 // Called whenever the input value is changed (e.g. on typing)
57568                 function change() {
57569                     fetchComboData(value(), function() {
57570                         _selected = null;
57571                         var val = input.property('value');
57572
57573                         if (_suggestions.length) {
57574                             if (input.property('selectionEnd') === val.length) {
57575                                 _selected = tryAutocomplete();
57576                             }
57577
57578                             if (!_selected) {
57579                                 _selected = val;
57580                             }
57581                         }
57582
57583                         if (val.length) {
57584                             var combo = container.selectAll('.combobox');
57585                             if (combo.empty()) {
57586                                 show();
57587                             }
57588                         } else {
57589                             hide();
57590                         }
57591
57592                         render();
57593                     });
57594                 }
57595
57596
57597                 // Called when the user presses up/down arrows to navigate the list
57598                 function nav(dir) {
57599                     if (_suggestions.length) {
57600                         // try to determine previously selected index..
57601                         var index = -1;
57602                         for (var i = 0; i < _suggestions.length; i++) {
57603                             if (_selected && _suggestions[i].value === _selected) {
57604                                 index = i;
57605                                 break;
57606                             }
57607                         }
57608
57609                         // pick new _selected
57610                         index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
57611                         _selected = _suggestions[index].value;
57612                         input.property('value', _selected);
57613                     }
57614
57615                     render();
57616                     ensureVisible();
57617                 }
57618
57619
57620                 function ensureVisible() {
57621                     var combo = container.selectAll('.combobox');
57622                     if (combo.empty()) return;
57623
57624                     var containerRect = container.node().getBoundingClientRect();
57625                     var comboRect = combo.node().getBoundingClientRect();
57626
57627                     if (comboRect.bottom > containerRect.bottom) {
57628                         var node = attachTo ? attachTo.node() : input.node();
57629                         node.scrollIntoView({ behavior: 'instant', block: 'center' });
57630                         render();
57631                     }
57632
57633                     // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
57634                     var selected = combo.selectAll('.combobox-option.selected').node();
57635                     if (selected) {
57636                         selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
57637                     }
57638                 }
57639
57640
57641                 function value() {
57642                     var value = input.property('value');
57643                     var start = input.property('selectionStart');
57644                     var end = input.property('selectionEnd');
57645
57646                     if (start && end) {
57647                         value = value.substring(0, start);
57648                     }
57649
57650                     return value;
57651                 }
57652
57653
57654                 function fetchComboData(v, cb) {
57655                     _cancelFetch = false;
57656
57657                     _fetcher.call(input, v, function(results) {
57658                         // already chose a value, don't overwrite or autocomplete it
57659                         if (_cancelFetch) return;
57660
57661                         _suggestions = results;
57662                         results.forEach(function(d) { _fetched[d.value] = d; });
57663
57664                         if (cb) {
57665                             cb();
57666                         }
57667                     });
57668                 }
57669
57670
57671                 function tryAutocomplete() {
57672                     if (!_canAutocomplete) return;
57673
57674                     var val = _caseSensitive ? value() : value().toLowerCase();
57675                     if (!val) return;
57676
57677                     // Don't autocomplete if user is typing a number - #4935
57678                     if (!isNaN(parseFloat(val)) && isFinite(val)) return;
57679
57680                     var bestIndex = -1;
57681                     for (var i = 0; i < _suggestions.length; i++) {
57682                         var suggestion = _suggestions[i].value;
57683                         var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
57684
57685                         // if search string matches suggestion exactly, pick it..
57686                         if (compare === val) {
57687                             bestIndex = i;
57688                             break;
57689
57690                         // otherwise lock in the first result that starts with the search string..
57691                         } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
57692                             bestIndex = i;
57693                         }
57694                     }
57695
57696                     if (bestIndex !== -1) {
57697                         var bestVal = _suggestions[bestIndex].value;
57698                         input.property('value', bestVal);
57699                         input.node().setSelectionRange(val.length, bestVal.length);
57700                         return bestVal;
57701                     }
57702                 }
57703
57704
57705                 function render() {
57706                     if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
57707                         hide();
57708                         return;
57709                     }
57710
57711                     var shown = !container.selectAll('.combobox').empty();
57712                     if (!shown) return;
57713
57714                     var combo = container.selectAll('.combobox');
57715                     var options = combo.selectAll('.combobox-option')
57716                         .data(_suggestions, function(d) { return d.value; });
57717
57718                     options.exit()
57719                         .remove();
57720
57721                     // enter/update
57722                     options.enter()
57723                         .append('a')
57724                         .attr('class', 'combobox-option')
57725                         .attr('title', function(d) { return d.title; })
57726                         .text(function(d) { return d.display || d.value; })
57727                         .on('mouseenter', _mouseEnterHandler)
57728                         .on('mouseleave', _mouseLeaveHandler)
57729                         .merge(options)
57730                         .classed('selected', function(d) { return d.value === _selected; })
57731                         .on('click.combo-option', accept)
57732                         .order();
57733
57734                     var node = attachTo ? attachTo.node() : input.node();
57735                     var rect = node.getBoundingClientRect();
57736
57737                     combo
57738                         .style('left', (rect.left + 5) + 'px')
57739                         .style('width', (rect.width - 10) + 'px')
57740                         .style('top', rect.height + rect.top + 'px');
57741                 }
57742
57743
57744                 // Dispatches an 'accept' event
57745                 // Then hides the combobox.
57746                 function accept(d) {
57747                     _cancelFetch = true;
57748                     var thiz = input.node();
57749
57750                     if (d) {   // user clicked on a suggestion
57751                         utilGetSetValue(input, d.value);    // replace field contents
57752                         utilTriggerEvent(input, 'change');
57753                     }
57754
57755                     // clear (and keep) selection
57756                     var val = utilGetSetValue(input);
57757                     thiz.setSelectionRange(val.length, val.length);
57758
57759                     d = _fetched[val];
57760                     dispatch$1.call('accept', thiz, d, val);
57761                     hide();
57762                 }
57763
57764
57765                 // Dispatches an 'cancel' event
57766                 // Then hides the combobox.
57767                 function cancel() {
57768                     _cancelFetch = true;
57769                     var thiz = input.node();
57770
57771                     // clear (and remove) selection, and replace field contents
57772                     var val = utilGetSetValue(input);
57773                     var start = input.property('selectionStart');
57774                     var end = input.property('selectionEnd');
57775                     val = val.slice(0, start) + val.slice(end);
57776                     utilGetSetValue(input, val);
57777                     thiz.setSelectionRange(val.length, val.length);
57778
57779                     dispatch$1.call('cancel', thiz);
57780                     hide();
57781                 }
57782
57783             };
57784
57785
57786             combobox.canAutocomplete = function(val) {
57787                 if (!arguments.length) return _canAutocomplete;
57788                 _canAutocomplete = val;
57789                 return combobox;
57790             };
57791
57792             combobox.caseSensitive = function(val) {
57793                 if (!arguments.length) return _caseSensitive;
57794                 _caseSensitive = val;
57795                 return combobox;
57796             };
57797
57798             combobox.data = function(val) {
57799                 if (!arguments.length) return _data;
57800                 _data = val;
57801                 return combobox;
57802             };
57803
57804             combobox.fetcher = function(val) {
57805                 if (!arguments.length) return _fetcher;
57806                 _fetcher = val;
57807                 return combobox;
57808             };
57809
57810             combobox.minItems = function(val) {
57811                 if (!arguments.length) return _minItems;
57812                 _minItems = val;
57813                 return combobox;
57814             };
57815
57816             combobox.itemsMouseEnter = function(val) {
57817                 if (!arguments.length) return _mouseEnterHandler;
57818                 _mouseEnterHandler = val;
57819                 return combobox;
57820             };
57821
57822             combobox.itemsMouseLeave = function(val) {
57823                 if (!arguments.length) return _mouseLeaveHandler;
57824                 _mouseLeaveHandler = val;
57825                 return combobox;
57826             };
57827
57828             return utilRebind(combobox, dispatch$1, 'on');
57829         }
57830
57831
57832         uiCombobox.off = function(input) {
57833             input
57834                 .on('focus.combo-input', null)
57835                 .on('blur.combo-input', null)
57836                 .on('keydown.combo-input', null)
57837                 .on('keyup.combo-input', null)
57838                 .on('input.combo-input', null)
57839                 .on('mousedown.combo-input', null)
57840                 .on('mouseup.combo-input', null);
57841
57842
57843             d3_select('body')
57844                 .on('scroll.combo-scroll', null);
57845         };
57846
57847         // toggles the visibility of ui elements, using a combination of the
57848         // hide class, which sets display=none, and a d3 transition for opacity.
57849         // this will cause blinking when called repeatedly, so check that the
57850         // value actually changes between calls.
57851         function uiToggle(show, callback) {
57852             return function(selection) {
57853                 selection
57854                     .style('opacity', show ? 0 : 1)
57855                     .classed('hide', false)
57856                     .transition()
57857                     .style('opacity', show ? 1 : 0)
57858                     .on('end', function() {
57859                         d3_select(this)
57860                             .classed('hide', !show)
57861                             .style('opacity', null);
57862                         if (callback) callback.apply(this);
57863                     });
57864             };
57865         }
57866
57867         function uiDisclosure(context, key, expandedDefault) {
57868             var dispatch$1 = dispatch('toggled');
57869             var _preference = (context.storage('disclosure.' + key + '.expanded'));
57870             var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
57871             var _title;
57872             var _updatePreference = true;
57873             var _content = function () {};
57874
57875
57876             var disclosure = function(selection) {
57877                 var hideToggle = selection.selectAll('.hide-toggle-' + key)
57878                     .data([0]);
57879
57880                 // enter
57881                 var hideToggleEnter = hideToggle.enter()
57882                     .append('a')
57883                     .attr('href', '#')
57884                     .attr('class', 'hide-toggle hide-toggle-' + key)
57885                     .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
57886
57887                 hideToggleEnter
57888                     .append('span')
57889                     .attr('class', 'hide-toggle-text');
57890
57891                 // update
57892                 hideToggle = hideToggleEnter
57893                     .merge(hideToggle);
57894
57895                 hideToggle
57896                     .on('click', toggle)
57897                     .classed('expanded', _expanded);
57898
57899                 hideToggle.selectAll('.hide-toggle-text')
57900                     .text(_title);
57901
57902                 hideToggle.selectAll('.hide-toggle-icon')
57903                     .attr('xlink:href', _expanded ? '#iD-icon-down'
57904                         : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57905                     );
57906
57907
57908                 var wrap = selection.selectAll('.disclosure-wrap')
57909                     .data([0]);
57910
57911                 // enter/update
57912                 wrap = wrap.enter()
57913                     .append('div')
57914                     .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
57915                     .merge(wrap)
57916                     .classed('hide', !_expanded);
57917
57918                 if (_expanded) {
57919                     wrap
57920                         .call(_content);
57921                 }
57922
57923
57924                 function toggle() {
57925                     event.preventDefault();
57926
57927                     _expanded = !_expanded;
57928
57929                     if (_updatePreference) {
57930                         context.storage('disclosure.' + key + '.expanded', _expanded);
57931                     }
57932
57933                     hideToggle
57934                         .classed('expanded', _expanded);
57935
57936                     hideToggle.selectAll('.hide-toggle-icon')
57937                         .attr('xlink:href', _expanded ? '#iD-icon-down'
57938                             : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
57939                         );
57940
57941                     wrap
57942                         .call(uiToggle(_expanded));
57943
57944                     if (_expanded) {
57945                         wrap
57946                             .call(_content);
57947                     }
57948
57949                     dispatch$1.call('toggled', this, _expanded);
57950                 }
57951             };
57952
57953
57954             disclosure.title = function(val) {
57955                 if (!arguments.length) return _title;
57956                 _title = val;
57957                 return disclosure;
57958             };
57959
57960
57961             disclosure.expanded = function(val) {
57962                 if (!arguments.length) return _expanded;
57963                 _expanded = val;
57964                 return disclosure;
57965             };
57966
57967
57968             disclosure.updatePreference = function(val) {
57969                 if (!arguments.length) return _updatePreference;
57970                 _updatePreference = val;
57971                 return disclosure;
57972             };
57973
57974
57975             disclosure.content = function(val) {
57976                 if (!arguments.length) return _content;
57977                 _content = val;
57978                 return disclosure;
57979             };
57980
57981
57982             return utilRebind(disclosure, dispatch$1, 'on');
57983         }
57984
57985         // Pass `which` object of the form:
57986         // {
57987         //   key: 'string',     // required
57988         //   value: 'string'    // optional
57989         // }
57990         //   -or-
57991         // {
57992         //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
57993         // }
57994         //   -or-
57995         // {
57996         //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
57997         // }
57998         //
57999         function uiTagReference(what) {
58000             var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
58001             var tagReference = {};
58002
58003             var _button = d3_select(null);
58004             var _body = d3_select(null);
58005             var _loaded;
58006             var _showing;
58007
58008
58009             function load() {
58010                 if (!wikibase) return;
58011
58012                 _button
58013                     .classed('tag-reference-loading', true);
58014
58015                 wikibase.getDocs(what, gotDocs);
58016             }
58017
58018
58019             function gotDocs(err, docs) {
58020                 _body.html('');
58021
58022                 if (!docs || !docs.title) {
58023                     _body
58024                         .append('p')
58025                         .attr('class', 'tag-reference-description')
58026                         .text(t('inspector.no_documentation_key'));
58027                     done();
58028                     return;
58029                 }
58030
58031                 if (docs.imageURL) {
58032                     _body
58033                         .append('img')
58034                         .attr('class', 'tag-reference-wiki-image')
58035                         .attr('src', docs.imageURL)
58036                         .on('load', function() { done(); })
58037                         .on('error', function() { d3_select(this).remove(); done(); });
58038                 } else {
58039                     done();
58040                 }
58041
58042                 _body
58043                     .append('p')
58044                     .attr('class', 'tag-reference-description')
58045                     .text(docs.description || t('inspector.no_documentation_key'))
58046                     .append('a')
58047                     .attr('class', 'tag-reference-edit')
58048                     .attr('target', '_blank')
58049                     .attr('tabindex', -1)
58050                     .attr('title', t('inspector.edit_reference'))
58051                     .attr('href', docs.editURL)
58052                     .call(svgIcon('#iD-icon-edit', 'inline'));
58053
58054                 if (docs.wiki) {
58055                     _body
58056                       .append('a')
58057                       .attr('class', 'tag-reference-link')
58058                       .attr('target', '_blank')
58059                       .attr('tabindex', -1)
58060                       .attr('href', docs.wiki.url)
58061                       .call(svgIcon('#iD-icon-out-link', 'inline'))
58062                       .append('span')
58063                       .text(t(docs.wiki.text));
58064                 }
58065
58066                 // Add link to info about "good changeset comments" - #2923
58067                 if (what.key === 'comment') {
58068                     _body
58069                         .append('a')
58070                         .attr('class', 'tag-reference-comment-link')
58071                         .attr('target', '_blank')
58072                         .attr('tabindex', -1)
58073                         .call(svgIcon('#iD-icon-out-link', 'inline'))
58074                         .attr('href', t('commit.about_changeset_comments_link'))
58075                         .append('span')
58076                         .text(t('commit.about_changeset_comments'));
58077                 }
58078             }
58079
58080
58081             function done() {
58082                 _loaded = true;
58083
58084                 _button
58085                     .classed('tag-reference-loading', false);
58086
58087                 _body
58088                     .classed('expanded', true)
58089                     .transition()
58090                     .duration(200)
58091                     .style('max-height', '200px')
58092                     .style('opacity', '1');
58093
58094                 _showing = true;
58095
58096                 _button.selectAll('svg.icon use').each(function() {
58097                     var iconUse = d3_select(this);
58098                     if (iconUse.attr('href') === '#iD-icon-info') {
58099                         iconUse.attr('href', '#iD-icon-info-filled');
58100                     }
58101                 });
58102             }
58103
58104
58105             function hide() {
58106                 _body
58107                     .transition()
58108                     .duration(200)
58109                     .style('max-height', '0px')
58110                     .style('opacity', '0')
58111                     .on('end', function () {
58112                         _body.classed('expanded', false);
58113                     });
58114
58115                 _showing = false;
58116
58117                 _button.selectAll('svg.icon use').each(function() {
58118                     var iconUse = d3_select(this);
58119                     if (iconUse.attr('href') === '#iD-icon-info-filled') {
58120                         iconUse.attr('href', '#iD-icon-info');
58121                     }
58122                 });
58123
58124             }
58125
58126
58127             tagReference.button = function(selection, klass, iconName) {
58128                 _button = selection.selectAll('.tag-reference-button')
58129                     .data([0]);
58130
58131                 _button = _button.enter()
58132                     .append('button')
58133                     .attr('class', 'tag-reference-button ' + klass)
58134                     .attr('title', t('icons.information'))
58135                     .attr('tabindex', -1)
58136                     .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
58137                     .merge(_button);
58138
58139                 _button
58140                     .on('click', function () {
58141                         event.stopPropagation();
58142                         event.preventDefault();
58143                         this.blur();    // avoid keeping focus on the button - #4641
58144                         if (_showing) {
58145                             hide();
58146                         } else if (_loaded) {
58147                             done();
58148                         } else {
58149                             load();
58150                         }
58151                     });
58152             };
58153
58154
58155             tagReference.body = function(selection) {
58156                 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
58157                 _body = selection.selectAll('.tag-reference-body')
58158                     .data([itemID], function(d) { return d; });
58159
58160                 _body.exit()
58161                     .remove();
58162
58163                 _body = _body.enter()
58164                     .append('div')
58165                     .attr('class', 'tag-reference-body')
58166                     .style('max-height', '0')
58167                     .style('opacity', '0')
58168                     .merge(_body);
58169
58170                 if (_showing === false) {
58171                     hide();
58172                 }
58173             };
58174
58175
58176             tagReference.showing = function(val) {
58177                 if (!arguments.length) return _showing;
58178                 _showing = val;
58179                 return tagReference;
58180             };
58181
58182
58183             return tagReference;
58184         }
58185
58186         function uiRawTagEditor(context) {
58187             var taginfo = services$1.taginfo;
58188             var dispatch$1 = dispatch('change');
58189             var availableViews = [
58190                 { id: 'text', icon: '#fas-i-cursor' },
58191                 { id: 'list', icon: '#fas-th-list' }
58192             ];
58193
58194             var _tagView = (context.storage('raw-tag-editor-view') || 'list');   // 'list, 'text'
58195             var _readOnlyTags = [];
58196             var _indexedKeys = [];
58197             var _showBlank = false;
58198             var _updatePreference = true;
58199             var _expanded = false;
58200             var _pendingChange = null;
58201             var _state;
58202             var _preset;
58203             var _tags;
58204             var _entityID;
58205
58206
58207             function rawTagEditor(selection) {
58208                 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
58209
58210                 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
58211                     .title(t('inspector.all_tags') + ' (' + count + ')')
58212                     .on('toggled', toggled)
58213                     .updatePreference(_updatePreference)
58214                     .content(content);
58215
58216                 // Sometimes we want to force the raw_tag_editor to be opened/closed..
58217                 // When undefined, uiDisclosure will use the user's stored preference.
58218                 if (_expanded !== undefined) {
58219                     disclosure.expanded(_expanded);
58220                 }
58221
58222                 selection.call(disclosure);
58223
58224                 function toggled(expanded) {
58225                     _expanded = expanded;
58226                     if (expanded) {
58227                         selection.node().parentNode.scrollTop += 200;
58228                     }
58229                 }
58230             }
58231
58232
58233             function content(wrap) {
58234                 // When switching to a different entity or changing the state (hover/select)
58235                 // reorder the keys alphabetically.
58236                 // We trigger this by emptying the `_indexedKeys` array, then it will be rebuilt here.
58237                 // Otherwise leave their order alone - #5857, #5927
58238                 var all = Object.keys(_tags).sort();
58239                 var known = _indexedKeys.map(function(t) { return t.key; });
58240                 var missing = utilArrayDifference(all, known);
58241                 for (var i = 0; i < missing.length; i++) {
58242                     _indexedKeys.push({ index: _indexedKeys.length, key: missing[i] });
58243                 }
58244
58245                 // assemble row data, excluding any deleted tags
58246                 var rowData = _indexedKeys.map(function(row) {
58247                     var v = _tags[row.key];
58248                     return (v === undefined) ? null : Object.assign(row, { value: v });
58249                 }).filter(Boolean);
58250
58251                 // append blank row last, if necessary
58252                 if (!_indexedKeys.length || _showBlank) {
58253                     _showBlank = false;
58254                     rowData.push({ index: _indexedKeys.length, key: '', value: '' });
58255                 }
58256
58257
58258                 // View Options
58259                 var options = wrap.selectAll('.raw-tag-options')
58260                     .data([0]);
58261
58262                 var optionsEnter = options.enter()
58263                     .append('div')
58264                     .attr('class', 'raw-tag-options');
58265
58266                 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
58267                     .data(availableViews, function(d) { return d.id; })
58268                     .enter();
58269
58270                 optionEnter
58271                     .append('button')
58272                     .attr('class', function(d) {
58273                         return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
58274                     })
58275                     .attr('title', function(d) { return d.id; })
58276                     .on('click', function(d) {
58277                         _tagView = d.id;
58278                         context.storage('raw-tag-editor-view', d.id);
58279
58280                         wrap.selectAll('.raw-tag-option')
58281                             .classed('selected', function(datum) { return datum === d; });
58282
58283                         wrap.selectAll('.tag-text')
58284                             .classed('hide', (d.id !== 'text'))
58285                             .each(setTextareaHeight);
58286
58287                         wrap.selectAll('.tag-list, .add-row')
58288                             .classed('hide', (d.id !== 'list'));
58289                     })
58290                     .each(function(d) {
58291                         d3_select(this)
58292                             .call(svgIcon(d.icon));
58293                     });
58294
58295
58296                 // View as Text
58297                 var textData = rowsToText(rowData);
58298                 var textarea = wrap.selectAll('.tag-text')
58299                     .data([0]);
58300
58301                 textarea = textarea.enter()
58302                     .append('textarea')
58303                     .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
58304                     .call(utilNoAuto)
58305                     .attr('spellcheck', 'false')
58306                     .merge(textarea);
58307
58308                 textarea
58309                     .call(utilGetSetValue, textData)
58310                     .each(setTextareaHeight)
58311                     .on('input', setTextareaHeight)
58312                     .on('blur', textChanged)
58313                     .on('change', textChanged);
58314
58315                 // If All Fields section is hidden, focus textarea and put cursor at end..
58316                 var fieldsExpanded = d3_select('.hide-toggle-preset_fields.expanded').size();
58317                 if (_state !== 'hover' && _tagView === 'text' && !fieldsExpanded) {
58318                     var element = textarea.node();
58319                     element.focus();
58320                     element.setSelectionRange(textData.length, textData.length);
58321                 }
58322
58323
58324                 // View as List
58325                 var list = wrap.selectAll('.tag-list')
58326                     .data([0]);
58327
58328                 list = list.enter()
58329                     .append('ul')
58330                     .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
58331                     .merge(list);
58332
58333
58334                 // Container for the Add button
58335                 var addRowEnter = wrap.selectAll('.add-row')
58336                     .data([0])
58337                     .enter()
58338                     .append('div')
58339                     .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
58340
58341                 addRowEnter
58342                     .append('button')
58343                     .attr('class', 'add-tag')
58344                     .call(svgIcon('#iD-icon-plus', 'light'))
58345                     .on('click', addTag);
58346
58347                 addRowEnter
58348                     .append('div')
58349                     .attr('class', 'space-value');   // preserve space
58350
58351                 addRowEnter
58352                     .append('div')
58353                     .attr('class', 'space-buttons');  // preserve space
58354
58355
58356                 // Tag list items
58357                 var items = list.selectAll('.tag-row')
58358                     .data(rowData, function(d) { return d.key; });
58359
58360                 items.exit()
58361                     .each(unbind)
58362                     .remove();
58363
58364
58365                 // Enter
58366                 var itemsEnter = items.enter()
58367                     .append('li')
58368                     .attr('class', 'tag-row')
58369                     .classed('readonly', isReadOnly);
58370
58371                 var innerWrap = itemsEnter.append('div')
58372                     .attr('class', 'inner-wrap');
58373
58374                 innerWrap
58375                     .append('div')
58376                     .attr('class', 'key-wrap')
58377                     .append('input')
58378                     .property('type', 'text')
58379                     .attr('class', 'key')
58380                     .attr('maxlength', 255)
58381                     .call(utilNoAuto)
58382                     .on('blur', keyChange)
58383                     .on('change', keyChange);
58384
58385                 innerWrap
58386                     .append('div')
58387                     .attr('class', 'value-wrap')
58388                     .append('input')
58389                     .property('type', 'text')
58390                     .attr('class', 'value')
58391                     .attr('maxlength', 255)
58392                     .call(utilNoAuto)
58393                     .on('blur', valueChange)
58394                     .on('change', valueChange)
58395                     .on('keydown.push-more', pushMore);
58396
58397                 innerWrap
58398                     .append('button')
58399                     .attr('tabindex', -1)
58400                     .attr('class', 'form-field-button remove')
58401                     .attr('title', t('icons.remove'))
58402                     .call(svgIcon('#iD-operation-delete'));
58403
58404
58405                 // Update
58406                 items = items
58407                     .merge(itemsEnter)
58408                     .sort(function(a, b) { return a.index - b.index; });
58409
58410                 items
58411                     .each(function(d) {
58412                         var row = d3_select(this);
58413                         var key = row.select('input.key');      // propagate bound data
58414                         var value = row.select('input.value');  // propagate bound data
58415
58416                         if (_entityID && taginfo && _state !== 'hover') {
58417                             bindTypeahead(key, value);
58418                         }
58419
58420                         var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
58421                         var reference;
58422
58423                         if (isRelation && d.key === 'type') {
58424                             reference = uiTagReference({ rtype: d.value });
58425                         } else {
58426                             reference = uiTagReference({ key: d.key, value: d.value });
58427                         }
58428
58429                         if (_state === 'hover') {
58430                             reference.showing(false);
58431                         }
58432
58433                         row.select('.inner-wrap')      // propagate bound data
58434                             .call(reference.button);
58435
58436                         row.call(reference.body);
58437
58438                         row.select('button.remove');   // propagate bound data
58439                     });
58440
58441                 items.selectAll('input.key')
58442                     .attr('title', function(d) { return d.key; })
58443                     .call(utilGetSetValue, function(d) { return d.key; })
58444                     .attr('readonly', function(d) {
58445                         return isReadOnly(d) || null;
58446                     });
58447
58448                 items.selectAll('input.value')
58449                     .attr('title', function(d) { return d.value; })
58450                     .call(utilGetSetValue, function(d) { return d.value; })
58451                     .attr('readonly', function(d) {
58452                         return isReadOnly(d) || null;
58453                     });
58454
58455                 items.selectAll('button.remove')
58456                     .on('mousedown', removeTag);  // 'click' fires too late - #5878
58457
58458
58459
58460                 function isReadOnly(d) {
58461                     for (var i = 0; i < _readOnlyTags.length; i++) {
58462                         if (d.key.match(_readOnlyTags[i]) !== null) {
58463                             return true;
58464                         }
58465                     }
58466                     return false;
58467                 }
58468
58469
58470                 function setTextareaHeight() {
58471                     if (_tagView !== 'text') return;
58472
58473                     var selection = d3_select(this);
58474                     selection.style('height', null);
58475                     selection.style('height', selection.node().scrollHeight + 5 + 'px');
58476                 }
58477
58478
58479                 function stringify(s) {
58480                     return JSON.stringify(s).slice(1, -1);   // without leading/trailing "
58481                 }
58482
58483                 function unstringify(s) {
58484                     var leading = '';
58485                     var trailing = '';
58486                     if (s.length < 1 || s.charAt(0) !== '"') {
58487                         leading = '"';
58488                     }
58489                     if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
58490                         (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
58491                     ) {
58492                         trailing = '"';
58493                     }
58494                     return JSON.parse(leading + s + trailing);
58495                 }
58496
58497
58498                 function rowsToText(rows) {
58499                     var str = rows
58500                         .filter(function(row) { return row.key && row.key.trim() !== ''; })
58501                         .map(function(row) { return stringify(row.key) + '=' + stringify(row.value); })
58502                         .join('\n');
58503
58504                     return _state === 'hover' ? str : str + '\n';
58505                 }
58506
58507
58508                 function textChanged() {
58509                     var newText = this.value.trim();
58510                     var newTags = {};
58511                     newText.split('\n').forEach(function(row) {
58512                         var m = row.match(/^\s*([^=]+)=(.*)$/);
58513                         if (m !== null) {
58514                             var k = unstringify(m[1].trim());
58515                             var v = unstringify(m[2].trim());
58516                             newTags[k] = v;
58517                         }
58518                     });
58519
58520                     var tagDiff = utilTagDiff(_tags, newTags);
58521                     if (!tagDiff.length) return;
58522
58523                     _pendingChange  = _pendingChange || {};
58524
58525                     tagDiff.forEach(function(change) {
58526                         if (isReadOnly({ key: change.key })) return;
58527
58528                         if (change.type === '-') {
58529                             _pendingChange[change.key] = undefined;
58530                         } else if (change.type === '+') {
58531                             _pendingChange[change.key] = change.newVal || '';
58532                         }
58533                     });
58534
58535                     scheduleChange();
58536                 }
58537
58538
58539                 function pushMore() {
58540                     // if pressing Tab on the last value field with content, add a blank row
58541                     if (event.keyCode === 9 && !event.shiftKey &&
58542                         list.selectAll('li:last-child input.value').node() === this &&
58543                         utilGetSetValue(d3_select(this))) {
58544                         addTag();
58545                     }
58546                 }
58547
58548
58549                 function bindTypeahead(key, value) {
58550                     if (isReadOnly(key.datum())) return;
58551
58552                     var geometry = context.geometry(_entityID);
58553
58554                     key.call(uiCombobox(context, 'tag-key')
58555                         .fetcher(function(value, callback) {
58556                             taginfo.keys({
58557                                 debounce: true,
58558                                 geometry: geometry,
58559                                 query: value
58560                             }, function(err, data) {
58561                                 if (!err) {
58562                                     var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
58563                                     callback(sort(value, filtered));
58564                                 }
58565                             });
58566                         }));
58567
58568                     value.call(uiCombobox(context, 'tag-value')
58569                         .fetcher(function(value, callback) {
58570                             taginfo.values({
58571                                 debounce: true,
58572                                 key: utilGetSetValue(key),
58573                                 geometry: geometry,
58574                                 query: value
58575                             }, function(err, data) {
58576                                 if (!err) callback(sort(value, data));
58577                             });
58578                         }));
58579
58580
58581                     function sort(value, data) {
58582                         var sameletter = [];
58583                         var other = [];
58584                         for (var i = 0; i < data.length; i++) {
58585                             if (data[i].value.substring(0, value.length) === value) {
58586                                 sameletter.push(data[i]);
58587                             } else {
58588                                 other.push(data[i]);
58589                             }
58590                         }
58591                         return sameletter.concat(other);
58592                     }
58593                 }
58594
58595
58596                 function unbind() {
58597                     var row = d3_select(this);
58598
58599                     row.selectAll('input.key')
58600                         .call(uiCombobox.off);
58601
58602                     row.selectAll('input.value')
58603                         .call(uiCombobox.off);
58604                 }
58605
58606
58607                 function keyChange(d) {
58608                     var kOld = d.key;
58609                     var kNew = this.value.trim();
58610                     var row = this.parentNode.parentNode;
58611                     var inputVal = d3_select(row).selectAll('input.value');
58612                     var vNew = utilGetSetValue(inputVal);
58613
58614                     // allow no change if the key should be readonly
58615                     if (isReadOnly({ key: kNew })) {
58616                         this.value = kOld;
58617                         return;
58618                     }
58619
58620                     // switch focus if key is already in use
58621                     if (kNew && kNew !== kOld) {
58622                         if (_tags[kNew] !== undefined) {      // new key is already in use
58623                             this.value = kOld;                // reset the key
58624                             list.selectAll('input.value')
58625                                 .each(function(d) {
58626                                     if (d.key === kNew) {     // send focus to that other value combo instead
58627                                         var input = d3_select(this).node();
58628                                         input.focus();
58629                                         input.select();
58630                                     }
58631                                 });
58632                             return;
58633                         }
58634                     }
58635
58636                     _pendingChange  = _pendingChange || {};
58637
58638                     // exit if we are currently about to delete this row anyway - #6366
58639                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58640
58641                     if (kOld) {
58642                         _pendingChange[kOld] = undefined;
58643                     }
58644
58645                     _pendingChange[kNew] = vNew;
58646
58647                     d.key = kNew;    // update datum to avoid exit/enter on tag update
58648                     d.value = vNew;
58649
58650                     this.value = kNew;
58651                     utilGetSetValue(inputVal, vNew);
58652                     scheduleChange();
58653                 }
58654
58655
58656                 function valueChange(d) {
58657                     if (isReadOnly(d)) return;
58658
58659                     _pendingChange  = _pendingChange || {};
58660
58661                     // exit if we are currently about to delete this row anyway - #6366
58662                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) return;
58663
58664                     _pendingChange[d.key] = this.value;
58665                     scheduleChange();
58666                 }
58667
58668
58669                 function removeTag(d) {
58670                     if (isReadOnly(d)) return;
58671
58672                     if (d.key === '') {    // removing the blank row
58673                         _showBlank = false;
58674                         content(wrap);
58675
58676                     } else {
58677                         // remove from indexedKeys too, so that if the user puts it back,
58678                         // it will be sorted to the end and not back to its original position
58679                         _indexedKeys = _indexedKeys.filter(function(row) { return row.key !== d.key; });
58680
58681                         _pendingChange  = _pendingChange || {};
58682                         _pendingChange[d.key] = undefined;
58683                         scheduleChange();
58684                     }
58685                 }
58686
58687
58688                 function addTag() {
58689                     // Delay render in case this click is blurring an edited combo.
58690                     // Without the setTimeout, the `content` render would wipe out the pending tag change.
58691                     window.setTimeout(function() {
58692                         _showBlank = true;
58693                         content(wrap);
58694                         list.selectAll('li:last-child input.key').node().focus();
58695                     }, 20);
58696                 }
58697
58698
58699                 function scheduleChange() {
58700                     // Delay change in case this change is blurring an edited combo. - #5878
58701                     window.setTimeout(function() {
58702                         dispatch$1.call('change', this, _pendingChange);
58703                         _pendingChange = null;
58704                     }, 10);
58705                 }
58706
58707             }
58708
58709
58710             rawTagEditor.state = function(val) {
58711                 if (!arguments.length) return _state;
58712                 if (_state !== val) {
58713                     _indexedKeys = [];
58714                     _state = val;
58715                 }
58716                 return rawTagEditor;
58717             };
58718
58719
58720             rawTagEditor.preset = function(val) {
58721                 if (!arguments.length) return _preset;
58722                 _preset = val;
58723                 if (_preset.isFallback()) {
58724                     _expanded = true;
58725                     _updatePreference = false;
58726                 } else {
58727                     _expanded = undefined;
58728                     _updatePreference = true;
58729                 }
58730                 return rawTagEditor;
58731             };
58732
58733
58734             rawTagEditor.tags = function(val) {
58735                 if (!arguments.length) return _tags;
58736                 _tags = val;
58737                 return rawTagEditor;
58738             };
58739
58740
58741             rawTagEditor.entityID = function(val) {
58742                 if (!arguments.length) return _entityID;
58743                 if (_entityID !== val) {
58744                     _indexedKeys = [];
58745                     _entityID = val;
58746                 }
58747                 return rawTagEditor;
58748             };
58749
58750
58751             rawTagEditor.expanded = function(val) {
58752                 if (!arguments.length) return _expanded;
58753                 _expanded = val;
58754                 _updatePreference = false;
58755                 return rawTagEditor;
58756             };
58757
58758
58759             // pass an array of regular expressions to test against the tag key
58760             rawTagEditor.readOnlyTags = function(val) {
58761                 if (!arguments.length) return _readOnlyTags;
58762                 _readOnlyTags = val;
58763                 return rawTagEditor;
58764             };
58765
58766
58767             return utilRebind(rawTagEditor, dispatch$1, 'on');
58768         }
58769
58770         function uiDataEditor(context) {
58771             var dataHeader = uiDataHeader();
58772             var quickLinks = uiQuickLinks();
58773             var rawTagEditor = uiRawTagEditor(context);
58774             var _datum;
58775
58776
58777             function dataEditor(selection) {
58778                 // quick links
58779                 var choices = [{
58780                     id: 'zoom_to',
58781                     label: 'inspector.zoom_to.title',
58782                     tooltip: function() {
58783                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
58784                     },
58785                     click: function zoomTo() {
58786                         context.mode().zoomToSelected();
58787                     }
58788                 }];
58789
58790
58791                 var header = selection.selectAll('.header')
58792                     .data([0]);
58793
58794                 var headerEnter = header.enter()
58795                     .append('div')
58796                     .attr('class', 'header fillL');
58797
58798                 headerEnter
58799                     .append('button')
58800                     .attr('class', 'fr data-editor-close')
58801                     .on('click', function() {
58802                         context.enter(modeBrowse(context));
58803                     })
58804                     .call(svgIcon('#iD-icon-close'));
58805
58806                 headerEnter
58807                     .append('h3')
58808                     .text(t('map_data.title'));
58809
58810
58811                 var body = selection.selectAll('.body')
58812                     .data([0]);
58813
58814                 body = body.enter()
58815                     .append('div')
58816                     .attr('class', 'body')
58817                     .merge(body);
58818
58819                 var editor = body.selectAll('.data-editor')
58820                     .data([0]);
58821
58822                 // enter/update
58823                 editor.enter()
58824                     .append('div')
58825                     .attr('class', 'modal-section data-editor')
58826                     .merge(editor)
58827                     .call(dataHeader.datum(_datum))
58828                     .call(quickLinks.choices(choices));
58829
58830                 var rte = body.selectAll('.raw-tag-editor')
58831                     .data([0]);
58832
58833                 // enter/update
58834                 rte.enter()
58835                     .append('div')
58836                     .attr('class', 'raw-tag-editor inspector-inner data-editor')
58837                     .merge(rte)
58838                     .call(rawTagEditor
58839                         .expanded(true)
58840                         .readOnlyTags([/./])
58841                         .tags((_datum && _datum.properties) || {})
58842                         .state('hover')
58843                     )
58844                     .selectAll('textarea.tag-text')
58845                     .attr('readonly', true)
58846                     .classed('readonly', true);
58847             }
58848
58849
58850             dataEditor.datum = function(val) {
58851                 if (!arguments.length) return _datum;
58852                 _datum = val;
58853                 return this;
58854             };
58855
58856
58857             return dataEditor;
58858         }
58859
58860         function modeSelectData(context, selectedDatum) {
58861             var mode = {
58862                 id: 'select-data',
58863                 button: 'browse'
58864             };
58865
58866             var keybinding = utilKeybinding('select-data');
58867             var dataEditor = uiDataEditor(context);
58868
58869             var behaviors = [
58870                 behaviorBreathe(),
58871                 behaviorHover(context),
58872                 behaviorSelect(context),
58873                 behaviorLasso(context),
58874                 modeDragNode(context).behavior,
58875                 modeDragNote(context).behavior
58876             ];
58877
58878
58879             // class the data as selected, or return to browse mode if the data is gone
58880             function selectData(drawn) {
58881                 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
58882
58883                 if (selection.empty()) {
58884                     // Return to browse mode if selected DOM elements have
58885                     // disappeared because the user moved them out of view..
58886                     var source = event && event.type === 'zoom' && event.sourceEvent;
58887                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
58888                         context.enter(modeBrowse(context));
58889                     }
58890                 } else {
58891                     selection.classed('selected', true);
58892                 }
58893             }
58894
58895
58896             function esc() {
58897                 if (d3_select('.combobox').size()) return;
58898                 context.enter(modeBrowse(context));
58899             }
58900
58901
58902             mode.zoomToSelected = function() {
58903                 var extent = geoExtent(d3_geoBounds(selectedDatum));
58904                 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
58905             };
58906
58907
58908             mode.enter = function() {
58909                 behaviors.forEach(context.install);
58910
58911                 keybinding
58912                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
58913                     .on('⎋', esc, true);
58914
58915                 d3_select(document)
58916                     .call(keybinding);
58917
58918                 selectData();
58919
58920                 var sidebar = context.ui().sidebar;
58921                 sidebar.show(dataEditor.datum(selectedDatum));
58922
58923                 // expand the sidebar, avoid obscuring the data if needed
58924                 var extent = geoExtent(d3_geoBounds(selectedDatum));
58925                 sidebar.expand(sidebar.intersects(extent));
58926
58927                 context.map()
58928                     .on('drawn.select-data', selectData);
58929             };
58930
58931
58932             mode.exit = function() {
58933                 behaviors.forEach(context.uninstall);
58934
58935                 d3_select(document)
58936                     .call(keybinding.unbind);
58937
58938                 context.surface()
58939                     .selectAll('.layer-mapdata .selected')
58940                     .classed('selected hover', false);
58941
58942                 context.map()
58943                     .on('drawn.select-data', null);
58944
58945                 context.ui().sidebar
58946                     .hide();
58947             };
58948
58949
58950             return mode;
58951         }
58952
58953         function uiImproveOsmComments() {
58954             var _error;
58955
58956
58957             function errorComments(selection) {
58958                 // make the div immediately so it appears above the buttons
58959                 var comments = selection.selectAll('.comments-container')
58960                     .data([0]);
58961
58962                 comments = comments.enter()
58963                     .append('div')
58964                     .attr('class', 'comments-container')
58965                     .merge(comments);
58966
58967                 // must retrieve comments from API before they can be displayed
58968                 services$1.improveOSM.getComments(_error, function(err, d) {
58969                     if (!d.comments) { return; } // nothing to do here
58970
58971                     var commentEnter = comments.selectAll('.comment')
58972                         .data(d.comments)
58973                         .enter()
58974                         .append('div')
58975                         .attr('class', 'comment');
58976
58977                     commentEnter
58978                         .append('div')
58979                         .attr('class', 'comment-avatar')
58980                         .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
58981
58982                     var mainEnter = commentEnter
58983                         .append('div')
58984                         .attr('class', 'comment-main');
58985
58986                     var metadataEnter = mainEnter
58987                         .append('div')
58988                         .attr('class', 'comment-metadata');
58989
58990                     metadataEnter
58991                         .append('div')
58992                         .attr('class', 'comment-author')
58993                         .each(function(d) {
58994                             var selection = d3_select(this);
58995                             var osm = services$1.osm;
58996                             if (osm && d.username) {
58997                                 selection = selection
58998                                     .append('a')
58999                                     .attr('class', 'comment-author-link')
59000                                     .attr('href', osm.userURL(d.username))
59001                                     .attr('tabindex', -1)
59002                                     .attr('target', '_blank');
59003                             }
59004                             selection
59005                                 .text(function(d) { return d.username; });
59006                         });
59007
59008                     metadataEnter
59009                         .append('div')
59010                         .attr('class', 'comment-date')
59011                         .text(function(d) {
59012                             return t('note.status.commented', { when: localeDateString(d.timestamp) });
59013                         });
59014
59015                     mainEnter
59016                         .append('div')
59017                         .attr('class', 'comment-text')
59018                         .append('p')
59019                         .text(function(d) { return d.text; });
59020                 });
59021             }
59022
59023             function localeDateString(s) {
59024                 if (!s) return null;
59025                 var detected = utilDetect();
59026                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
59027                 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
59028                 if (isNaN(d.getTime())) return null;
59029                 return d.toLocaleDateString(detected.locale, options);
59030             }
59031
59032             errorComments.error = function(val) {
59033                 if (!arguments.length) return _error;
59034                 _error = val;
59035                 return errorComments;
59036             };
59037
59038             return errorComments;
59039         }
59040
59041         function uiImproveOsmDetails(context) {
59042             var _error;
59043
59044
59045             function errorDetail(d) {
59046                 var unknown = t('inspector.unknown');
59047
59048                 if (!d) return unknown;
59049
59050                 if (d.desc) return d.desc;
59051
59052                 var errorType = d.error_key;
59053                 var et = en.QA.improveOSM.error_types[errorType];
59054
59055                 var detail;
59056                 if (et && et.description) {
59057                     detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
59058                 } else {
59059                     detail = unknown;
59060                 }
59061
59062                 return detail;
59063             }
59064
59065
59066             function improveOsmDetails(selection) {
59067                 var details = selection.selectAll('.error-details')
59068                     .data(
59069                         (_error ? [_error] : []),
59070                         function(d) { return d.id + '-' + (d.status || 0); }
59071                     );
59072
59073                 details.exit()
59074                     .remove();
59075
59076                 var detailsEnter = details.enter()
59077                     .append('div')
59078                     .attr('class', 'error-details error-details-container');
59079
59080
59081                 // description
59082                 var descriptionEnter = detailsEnter
59083                     .append('div')
59084                     .attr('class', 'error-details-description');
59085
59086                 descriptionEnter
59087                     .append('h4')
59088                     .text(function() { return t('QA.keepRight.detail_description'); });
59089
59090                 descriptionEnter
59091                     .append('div')
59092                     .attr('class', 'error-details-description-text')
59093                     .html(errorDetail);
59094
59095                 // If there are entity links in the error message..
59096                 var relatedEntities = [];
59097                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
59098                     .each(function() {
59099                         var link = d3_select(this);
59100                         var isObjectLink = link.classed('error_object_link');
59101                         var entityID = isObjectLink ?
59102                             (utilEntityRoot(_error.object_type) + _error.object_id)
59103                             : this.textContent;
59104                         var entity = context.hasEntity(entityID);
59105
59106                         relatedEntities.push(entityID);
59107
59108                         // Add click handler
59109                         link
59110                             .on('mouseover', function() {
59111                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
59112                                     .classed('hover', true);
59113                             })
59114                             .on('mouseout', function() {
59115                                 context.surface().selectAll('.hover')
59116                                     .classed('hover', false);
59117                             })
59118                             .on('click', function() {
59119                                 event.preventDefault();
59120                                 var osmlayer = context.layers().layer('osm');
59121                                 if (!osmlayer.enabled()) {
59122                                     osmlayer.enabled(true);
59123                                 }
59124
59125                                 context.map().centerZoom(_error.loc, 20);
59126
59127                                 if (entity) {
59128                                     context.enter(modeSelect(context, [entityID]));
59129                                 } else {
59130                                     context.loadEntity(entityID, function() {
59131                                         context.enter(modeSelect(context, [entityID]));
59132                                     });
59133                                 }
59134                             });
59135
59136                         // Replace with friendly name if possible
59137                         // (The entity may not yet be loaded into the graph)
59138                         if (entity) {
59139                             var name = utilDisplayName(entity);  // try to use common name
59140
59141                             if (!name && !isObjectLink) {
59142                                 var preset = context.presets().match(entity, context.graph());
59143                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
59144                             }
59145
59146                             if (name) {
59147                                 this.innerText = name;
59148                             }
59149                         }
59150                     });
59151
59152                 // Don't hide entities related to this error - #5880
59153                 context.features().forceVisible(relatedEntities);
59154             }
59155
59156
59157             improveOsmDetails.error = function(val) {
59158                 if (!arguments.length) return _error;
59159                 _error = val;
59160                 return improveOsmDetails;
59161             };
59162
59163
59164             return improveOsmDetails;
59165         }
59166
59167         function uiImproveOsmHeader() {
59168             var _error;
59169
59170
59171             function errorTitle(d) {
59172                 var unknown = t('inspector.unknown');
59173
59174                 if (!d) return unknown;
59175                 var errorType = d.error_key;
59176                 var et = en.QA.improveOSM.error_types[errorType];
59177
59178                 if (et && et.title) {
59179                     return t('QA.improveOSM.error_types.' + errorType + '.title');
59180                 } else {
59181                     return unknown;
59182                 }
59183             }
59184
59185
59186             function improveOsmHeader(selection) {
59187                 var header = selection.selectAll('.error-header')
59188                     .data(
59189                         (_error ? [_error] : []),
59190                         function(d) { return d.id + '-' + (d.status || 0); }
59191                     );
59192
59193                 header.exit()
59194                     .remove();
59195
59196                 var headerEnter = header.enter()
59197                     .append('div')
59198                     .attr('class', 'error-header');
59199
59200                 var iconEnter = headerEnter
59201                     .append('div')
59202                     .attr('class', 'error-header-icon')
59203                     .classed('new', function(d) { return d.id < 0; });
59204
59205                 var svgEnter = iconEnter
59206                     .append('svg')
59207                     .attr('width', '20px')
59208                     .attr('height', '30px')
59209                     .attr('viewbox', '0 0 20 30')
59210                     .attr('class', function(d) {
59211                         return [
59212                             'preset-icon-28',
59213                             'qa_error',
59214                             d.service,
59215                             'error_id-' + d.id,
59216                             'error_type-' + d.error_type,
59217                             'category-' + d.category
59218                         ].join(' ');
59219                     });
59220
59221                 svgEnter
59222                     .append('polygon')
59223                     .attr('fill', 'currentColor')
59224                     .attr('class', 'qa_error-fill')
59225                     .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');
59226
59227                 svgEnter
59228                     .append('use')
59229                     .attr('class', 'icon-annotation')
59230                     .attr('width', '11px')
59231                     .attr('height', '11px')
59232                     .attr('transform', 'translate(4.5, 7)')
59233                     .attr('xlink:href', function(d) {
59234                         var picon = d.icon;
59235
59236                         if (!picon) {
59237                             return '';
59238                         } else {
59239                             var isMaki = /^maki-/.test(picon);
59240                             return '#' + picon + (isMaki ? '-11' : '');
59241                         }
59242                     });
59243
59244                 headerEnter
59245                     .append('div')
59246                     .attr('class', 'error-header-label')
59247                     .text(errorTitle);
59248             }
59249
59250
59251             improveOsmHeader.error = function(val) {
59252                 if (!arguments.length) return _error;
59253                 _error = val;
59254                 return improveOsmHeader;
59255             };
59256
59257
59258             return improveOsmHeader;
59259         }
59260
59261         function uiImproveOsmEditor(context) {
59262             var dispatch$1 = dispatch('change');
59263             var errorDetails = uiImproveOsmDetails(context);
59264             var errorComments = uiImproveOsmComments();
59265             var errorHeader = uiImproveOsmHeader();
59266             var quickLinks = uiQuickLinks();
59267
59268             var _error;
59269
59270
59271             function improveOsmEditor(selection) {
59272                 // quick links
59273                 var choices = [{
59274                     id: 'zoom_to',
59275                     label: 'inspector.zoom_to.title',
59276                     tooltip: function() {
59277                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59278                     },
59279                     click: function zoomTo() {
59280                         context.mode().zoomToSelected();
59281                     }
59282                 }];
59283
59284
59285                 var header = selection.selectAll('.header')
59286                     .data([0]);
59287
59288                 var headerEnter = header.enter()
59289                     .append('div')
59290                     .attr('class', 'header fillL');
59291
59292                 headerEnter
59293                     .append('button')
59294                     .attr('class', 'fr error-editor-close')
59295                     .on('click', function() {
59296                         context.enter(modeBrowse(context));
59297                     })
59298                     .call(svgIcon('#iD-icon-close'));
59299
59300                 headerEnter
59301                     .append('h3')
59302                     .text(t('QA.improveOSM.title'));
59303
59304
59305                 var body = selection.selectAll('.body')
59306                     .data([0]);
59307
59308                 body = body.enter()
59309                     .append('div')
59310                     .attr('class', 'body')
59311                     .merge(body);
59312
59313                 var editor = body.selectAll('.error-editor')
59314                     .data([0]);
59315
59316                 editor.enter()
59317                     .append('div')
59318                     .attr('class', 'modal-section error-editor')
59319                     .merge(editor)
59320                     .call(errorHeader.error(_error))
59321                     .call(quickLinks.choices(choices))
59322                     .call(errorDetails.error(_error))
59323                     .call(errorComments.error(_error))
59324                     .call(improveOsmSaveSection);
59325             }
59326
59327             function improveOsmSaveSection(selection) {
59328                 var isSelected = (_error && _error.id === context.selectedErrorID());
59329                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59330                 var saveSection = selection.selectAll('.error-save')
59331                     .data(
59332                         (isShown ? [_error] : []),
59333                         function(d) { return d.id + '-' + (d.status || 0); }
59334                     );
59335
59336                 // exit
59337                 saveSection.exit()
59338                     .remove();
59339
59340                 // enter
59341                 var saveSectionEnter = saveSection.enter()
59342                     .append('div')
59343                     .attr('class', 'error-save save-section cf');
59344
59345                 saveSectionEnter
59346                     .append('h4')
59347                     .attr('class', '.error-save-header')
59348                     .text(t('note.newComment'));
59349
59350                 saveSectionEnter
59351                     .append('textarea')
59352                     .attr('class', 'new-comment-input')
59353                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59354                     .attr('maxlength', 1000)
59355                     .property('value', function(d) { return d.newComment; })
59356                     .call(utilNoAuto)
59357                     .on('input', changeInput)
59358                     .on('blur', changeInput);
59359
59360                 // update
59361                 saveSection = saveSectionEnter
59362                     .merge(saveSection)
59363                     .call(errorSaveButtons);
59364
59365                 function changeInput() {
59366                     var input = d3_select(this);
59367                     var val = input.property('value').trim();
59368
59369                     if (val === '') {
59370                         val = undefined;
59371                     }
59372
59373                     // store the unsaved comment with the error itself
59374                     _error = _error.update({ newComment: val });
59375
59376                     var errorService = services$1.improveOSM;
59377                     if (errorService) {
59378                         errorService.replaceError(_error);
59379                     }
59380
59381                     saveSection
59382                         .call(errorSaveButtons);
59383                 }
59384             }
59385
59386             function errorSaveButtons(selection) {
59387                 var isSelected = (_error && _error.id === context.selectedErrorID());
59388                 var buttonSection = selection.selectAll('.buttons')
59389                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59390
59391                 // exit
59392                 buttonSection.exit()
59393                     .remove();
59394
59395                 // enter
59396                 var buttonEnter = buttonSection.enter()
59397                     .append('div')
59398                     .attr('class', 'buttons');
59399
59400                 buttonEnter
59401                     .append('button')
59402                     .attr('class', 'button comment-button action')
59403                     .text(t('QA.keepRight.save_comment'));
59404
59405                 buttonEnter
59406                     .append('button')
59407                     .attr('class', 'button close-button action');
59408
59409                 buttonEnter
59410                     .append('button')
59411                     .attr('class', 'button ignore-button action');
59412
59413
59414                 // update
59415                 buttonSection = buttonSection
59416                     .merge(buttonEnter);
59417
59418                 buttonSection.select('.comment-button')
59419                     .attr('disabled', function(d) {
59420                         return d.newComment === undefined ? true : null;
59421                     })
59422                     .on('click.comment', function(d) {
59423                         this.blur();    // avoid keeping focus on the button - #4641
59424                         var errorService = services$1.improveOSM;
59425                         if (errorService) {
59426                             errorService.postUpdate(d, function(err, error) {
59427                                 dispatch$1.call('change', error);
59428                             });
59429                         }
59430                     });
59431
59432                 buttonSection.select('.close-button')
59433                     .text(function(d) {
59434                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59435                         return t('QA.keepRight.close' + andComment);
59436                     })
59437                     .on('click.close', function(d) {
59438                         this.blur();    // avoid keeping focus on the button - #4641
59439                         var errorService = services$1.improveOSM;
59440                         if (errorService) {
59441                             d.newStatus = 'SOLVED';
59442                             errorService.postUpdate(d, function(err, error) {
59443                                 dispatch$1.call('change', error);
59444                             });
59445                         }
59446                     });
59447
59448                 buttonSection.select('.ignore-button')
59449                     .text(function(d) {
59450                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59451                         return t('QA.keepRight.ignore' + andComment);
59452                     })
59453                     .on('click.ignore', function(d) {
59454                         this.blur();    // avoid keeping focus on the button - #4641
59455                         var errorService = services$1.improveOSM;
59456                         if (errorService) {
59457                             d.newStatus = 'INVALID';
59458                             errorService.postUpdate(d, function(err, error) {
59459                                 dispatch$1.call('change', error);
59460                             });
59461                         }
59462                     });
59463             }
59464
59465             improveOsmEditor.error = function(val) {
59466                 if (!arguments.length) return _error;
59467                 _error = val;
59468                 return improveOsmEditor;
59469             };
59470
59471
59472             return utilRebind(improveOsmEditor, dispatch$1, 'on');
59473         }
59474
59475         function uiKeepRightDetails(context) {
59476             var _error;
59477
59478
59479             function errorDetail(d) {
59480                 var unknown = t('inspector.unknown');
59481
59482                 if (!d) return unknown;
59483                 var errorType = d.error_type;
59484                 var parentErrorType = d.parent_error_type;
59485
59486                 var et = en.QA.keepRight.errorTypes[errorType];
59487                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59488
59489                 var detail;
59490                 if (et && et.description) {
59491                     detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
59492                 } else if (pt && pt.description) {
59493                     detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
59494                 } else {
59495                     detail = unknown;
59496                 }
59497
59498                 return detail;
59499             }
59500
59501
59502             function keepRightDetails(selection) {
59503                 var details = selection.selectAll('.error-details')
59504                     .data(
59505                         (_error ? [_error] : []),
59506                         function(d) { return d.id + '-' + (d.status || 0); }
59507                     );
59508
59509                 details.exit()
59510                     .remove();
59511
59512                 var detailsEnter = details.enter()
59513                     .append('div')
59514                     .attr('class', 'error-details error-details-container');
59515
59516
59517                 // description
59518                 var descriptionEnter = detailsEnter
59519                     .append('div')
59520                     .attr('class', 'error-details-description');
59521
59522                 descriptionEnter
59523                     .append('h4')
59524                     .text(function() { return t('QA.keepRight.detail_description'); });
59525
59526                 descriptionEnter
59527                     .append('div')
59528                     .attr('class', 'error-details-description-text')
59529                     .html(errorDetail);
59530
59531                 // If there are entity links in the error message..
59532                 var relatedEntities = [];
59533                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
59534                     .each(function() {
59535                         var link = d3_select(this);
59536                         var isObjectLink = link.classed('error_object_link');
59537                         var entityID = isObjectLink ?
59538                             (utilEntityRoot(_error.object_type) + _error.object_id)
59539                             : this.textContent;
59540                         var entity = context.hasEntity(entityID);
59541
59542                         relatedEntities.push(entityID);
59543
59544                         // Add click handler
59545                         link
59546                             .on('mouseover', function() {
59547                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
59548                                     .classed('hover', true);
59549                             })
59550                             .on('mouseout', function() {
59551                                 context.surface().selectAll('.hover')
59552                                     .classed('hover', false);
59553                             })
59554                             .on('click', function() {
59555                                 event.preventDefault();
59556                                 var osmlayer = context.layers().layer('osm');
59557                                 if (!osmlayer.enabled()) {
59558                                     osmlayer.enabled(true);
59559                                 }
59560
59561                                 context.map().centerZoomEase(_error.loc, 20);
59562
59563                                 if (entity) {
59564                                     context.enter(modeSelect(context, [entityID]));
59565                                 } else {
59566                                     context.loadEntity(entityID, function() {
59567                                         context.enter(modeSelect(context, [entityID]));
59568                                     });
59569                                 }
59570                             });
59571
59572                         // Replace with friendly name if possible
59573                         // (The entity may not yet be loaded into the graph)
59574                         if (entity) {
59575                             var name = utilDisplayName(entity);  // try to use common name
59576
59577                             if (!name && !isObjectLink) {
59578                                 var preset = context.presets().match(entity, context.graph());
59579                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
59580                             }
59581
59582                             if (name) {
59583                                 this.innerText = name;
59584                             }
59585                         }
59586                     });
59587
59588                 // Don't hide entities related to this error - #5880
59589                 context.features().forceVisible(relatedEntities);
59590             }
59591
59592
59593             keepRightDetails.error = function(val) {
59594                 if (!arguments.length) return _error;
59595                 _error = val;
59596                 return keepRightDetails;
59597             };
59598
59599
59600             return keepRightDetails;
59601         }
59602
59603         function uiKeepRightHeader() {
59604             var _error;
59605
59606
59607             function errorTitle(d) {
59608                 var unknown = t('inspector.unknown');
59609
59610                 if (!d) return unknown;
59611                 var errorType = d.error_type;
59612                 var parentErrorType = d.parent_error_type;
59613
59614                 var et = en.QA.keepRight.errorTypes[errorType];
59615                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
59616
59617                 if (et && et.title) {
59618                     return t('QA.keepRight.errorTypes.' + errorType + '.title');
59619                 } else if (pt && pt.title) {
59620                     return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
59621                 } else {
59622                     return unknown;
59623                 }
59624             }
59625
59626
59627             function keepRightHeader(selection) {
59628                 var header = selection.selectAll('.error-header')
59629                     .data(
59630                         (_error ? [_error] : []),
59631                         function(d) { return d.id + '-' + (d.status || 0); }
59632                     );
59633
59634                 header.exit()
59635                     .remove();
59636
59637                 var headerEnter = header.enter()
59638                     .append('div')
59639                     .attr('class', 'error-header');
59640
59641                 var iconEnter = headerEnter
59642                     .append('div')
59643                     .attr('class', 'error-header-icon')
59644                     .classed('new', function(d) { return d.id < 0; });
59645
59646                 iconEnter
59647                     .append('div')
59648                     .attr('class', function(d) {
59649                         return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
59650                     })
59651                     .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
59652
59653                 headerEnter
59654                     .append('div')
59655                     .attr('class', 'error-header-label')
59656                     .text(errorTitle);
59657             }
59658
59659
59660             keepRightHeader.error = function(val) {
59661                 if (!arguments.length) return _error;
59662                 _error = val;
59663                 return keepRightHeader;
59664             };
59665
59666
59667             return keepRightHeader;
59668         }
59669
59670         function uiViewOnKeepRight() {
59671             var _error;   // a keepright error
59672
59673
59674             function viewOnKeepRight(selection) {
59675                 var url;
59676                 if (services$1.keepRight && (_error instanceof qaError)) {
59677                     url = services$1.keepRight.errorURL(_error);
59678                 }
59679
59680                 var link = selection.selectAll('.view-on-keepRight')
59681                     .data(url ? [url] : []);
59682
59683                 // exit
59684                 link.exit()
59685                     .remove();
59686
59687                 // enter
59688                 var linkEnter = link.enter()
59689                     .append('a')
59690                     .attr('class', 'view-on-keepRight')
59691                     .attr('target', '_blank')
59692                     .attr('href', function(d) { return d; })
59693                     .call(svgIcon('#iD-icon-out-link', 'inline'));
59694
59695                 linkEnter
59696                     .append('span')
59697                     .text(t('inspector.view_on_keepRight'));
59698             }
59699
59700
59701             viewOnKeepRight.what = function(val) {
59702                 if (!arguments.length) return _error;
59703                 _error = val;
59704                 return viewOnKeepRight;
59705             };
59706
59707             return viewOnKeepRight;
59708         }
59709
59710         function uiKeepRightEditor(context) {
59711             var dispatch$1 = dispatch('change');
59712             var keepRightDetails = uiKeepRightDetails(context);
59713             var keepRightHeader = uiKeepRightHeader();
59714             var quickLinks = uiQuickLinks();
59715
59716             var _error;
59717
59718
59719             function keepRightEditor(selection) {
59720                 // quick links
59721                 var choices = [{
59722                     id: 'zoom_to',
59723                     label: 'inspector.zoom_to.title',
59724                     tooltip: function() {
59725                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
59726                     },
59727                     click: function zoomTo() {
59728                         context.mode().zoomToSelected();
59729                     }
59730                 }];
59731
59732
59733                 var header = selection.selectAll('.header')
59734                     .data([0]);
59735
59736                 var headerEnter = header.enter()
59737                     .append('div')
59738                     .attr('class', 'header fillL');
59739
59740                 headerEnter
59741                     .append('button')
59742                     .attr('class', 'fr error-editor-close')
59743                     .on('click', function() {
59744                         context.enter(modeBrowse(context));
59745                     })
59746                     .call(svgIcon('#iD-icon-close'));
59747
59748                 headerEnter
59749                     .append('h3')
59750                     .text(t('QA.keepRight.title'));
59751
59752
59753                 var body = selection.selectAll('.body')
59754                     .data([0]);
59755
59756                 body = body.enter()
59757                     .append('div')
59758                     .attr('class', 'body')
59759                     .merge(body);
59760
59761                 var editor = body.selectAll('.error-editor')
59762                     .data([0]);
59763
59764                 editor.enter()
59765                     .append('div')
59766                     .attr('class', 'modal-section error-editor')
59767                     .merge(editor)
59768                     .call(keepRightHeader.error(_error))
59769                     .call(quickLinks.choices(choices))
59770                     .call(keepRightDetails.error(_error))
59771                     .call(keepRightSaveSection);
59772
59773
59774                 var footer = selection.selectAll('.footer')
59775                     .data([0]);
59776
59777                 footer.enter()
59778                     .append('div')
59779                     .attr('class', 'footer')
59780                     .merge(footer)
59781                     .call(uiViewOnKeepRight().what(_error));
59782             }
59783
59784
59785             function keepRightSaveSection(selection) {
59786                 var isSelected = (_error && _error.id === context.selectedErrorID());
59787                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
59788                 var saveSection = selection.selectAll('.error-save')
59789                     .data(
59790                         (isShown ? [_error] : []),
59791                         function(d) { return d.id + '-' + (d.status || 0); }
59792                     );
59793
59794                 // exit
59795                 saveSection.exit()
59796                     .remove();
59797
59798                 // enter
59799                 var saveSectionEnter = saveSection.enter()
59800                     .append('div')
59801                     .attr('class', 'error-save save-section cf');
59802
59803                 saveSectionEnter
59804                     .append('h4')
59805                     .attr('class', '.error-save-header')
59806                     .text(t('QA.keepRight.comment'));
59807
59808                 saveSectionEnter
59809                     .append('textarea')
59810                     .attr('class', 'new-comment-input')
59811                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
59812                     .attr('maxlength', 1000)
59813                     .property('value', function(d) { return d.newComment || d.comment; })
59814                     .call(utilNoAuto)
59815                     .on('input', changeInput)
59816                     .on('blur', changeInput);
59817
59818                 // update
59819                 saveSection = saveSectionEnter
59820                     .merge(saveSection)
59821                     .call(keepRightSaveButtons);
59822
59823
59824                 function changeInput() {
59825                     var input = d3_select(this);
59826                     var val = input.property('value').trim();
59827
59828                     if (val === _error.comment) {
59829                         val = undefined;
59830                     }
59831
59832                     // store the unsaved comment with the error itself
59833                     _error = _error.update({ newComment: val });
59834
59835                     var keepRight = services$1.keepRight;
59836                     if (keepRight) {
59837                         keepRight.replaceError(_error);  // update keepright cache
59838                     }
59839
59840                     saveSection
59841                         .call(keepRightSaveButtons);
59842                 }
59843             }
59844
59845
59846             function keepRightSaveButtons(selection) {
59847                 var isSelected = (_error && _error.id === context.selectedErrorID());
59848                 var buttonSection = selection.selectAll('.buttons')
59849                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
59850
59851                 // exit
59852                 buttonSection.exit()
59853                     .remove();
59854
59855                 // enter
59856                 var buttonEnter = buttonSection.enter()
59857                     .append('div')
59858                     .attr('class', 'buttons');
59859
59860                 buttonEnter
59861                     .append('button')
59862                     .attr('class', 'button comment-button action')
59863                     .text(t('QA.keepRight.save_comment'));
59864
59865                 buttonEnter
59866                     .append('button')
59867                     .attr('class', 'button close-button action');
59868
59869                 buttonEnter
59870                     .append('button')
59871                     .attr('class', 'button ignore-button action');
59872
59873
59874                 // update
59875                 buttonSection = buttonSection
59876                     .merge(buttonEnter);
59877
59878                 buttonSection.select('.comment-button')   // select and propagate data
59879                     .attr('disabled', function(d) {
59880                         return d.newComment === undefined ? true : null;
59881                     })
59882                     .on('click.comment', function(d) {
59883                         this.blur();    // avoid keeping focus on the button - #4641
59884                         var keepRight = services$1.keepRight;
59885                         if (keepRight) {
59886                             keepRight.postKeepRightUpdate(d, function(err, error) {
59887                                 dispatch$1.call('change', error);
59888                             });
59889                         }
59890                     });
59891
59892                 buttonSection.select('.close-button')   // select and propagate data
59893                     .text(function(d) {
59894                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59895                         return t('QA.keepRight.close' + andComment);
59896                     })
59897                     .on('click.close', function(d) {
59898                         this.blur();    // avoid keeping focus on the button - #4641
59899                         var keepRight = services$1.keepRight;
59900                         if (keepRight) {
59901                             d.state = 'ignore_t';   // ignore temporarily (error fixed)
59902                             keepRight.postKeepRightUpdate(d, function(err, error) {
59903                                 dispatch$1.call('change', error);
59904                             });
59905                         }
59906                     });
59907
59908                 buttonSection.select('.ignore-button')   // select and propagate data
59909                     .text(function(d) {
59910                         var andComment = (d.newComment !== undefined ? '_comment' : '');
59911                         return t('QA.keepRight.ignore' + andComment);
59912                     })
59913                     .on('click.ignore', function(d) {
59914                         this.blur();    // avoid keeping focus on the button - #4641
59915                         var keepRight = services$1.keepRight;
59916                         if (keepRight) {
59917                             d.state = 'ignore';   // ignore permanently (false positive)
59918                             keepRight.postKeepRightUpdate(d, function(err, error) {
59919                                 dispatch$1.call('change', error);
59920                             });
59921                         }
59922                     });
59923             }
59924
59925
59926             keepRightEditor.error = function(val) {
59927                 if (!arguments.length) return _error;
59928                 _error = val;
59929                 return keepRightEditor;
59930             };
59931
59932
59933             return utilRebind(keepRightEditor, dispatch$1, 'on');
59934         }
59935
59936         function modeSelectError(context, selectedErrorID, selectedErrorService) {
59937             var mode = {
59938                 id: 'select-error',
59939                 button: 'browse'
59940             };
59941
59942             var keybinding = utilKeybinding('select-error');
59943
59944             var errorService = services$1[selectedErrorService];
59945             var errorEditor;
59946             switch (selectedErrorService) {
59947                 case 'improveOSM':
59948                     errorEditor = uiImproveOsmEditor(context)
59949                     .on('change', function() {
59950                         context.map().pan([0,0]);  // trigger a redraw
59951                         var error = checkSelectedID();
59952                         if (!error) return;
59953                         context.ui().sidebar
59954                             .show(errorEditor.error(error));
59955                     });
59956                     break;
59957                 case 'keepRight':
59958                     errorEditor = uiKeepRightEditor(context)
59959                     .on('change', function() {
59960                         context.map().pan([0,0]);  // trigger a redraw
59961                         var error = checkSelectedID();
59962                         if (!error) return;
59963                         context.ui().sidebar
59964                             .show(errorEditor.error(error));
59965                     });
59966                     break;
59967             }
59968
59969
59970             var behaviors = [
59971                 behaviorBreathe(),
59972                 behaviorHover(context),
59973                 behaviorSelect(context),
59974                 behaviorLasso(context),
59975                 modeDragNode(context).behavior,
59976                 modeDragNote(context).behavior
59977             ];
59978
59979
59980             function checkSelectedID() {
59981                 if (!errorService) return;
59982                 var error = errorService.getError(selectedErrorID);
59983                 if (!error) {
59984                     context.enter(modeBrowse(context));
59985                 }
59986                 return error;
59987             }
59988
59989
59990             mode.zoomToSelected = function() {
59991                 if (!errorService) return;
59992                 var error = errorService.getError(selectedErrorID);
59993                 if (error) {
59994                     context.map().centerZoomEase(error.loc, 20);
59995                 }
59996             };
59997
59998
59999             mode.enter = function() {
60000                 var error = checkSelectedID();
60001                 if (!error) return;
60002
60003                 behaviors.forEach(context.install);
60004                 keybinding
60005                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
60006                     .on('⎋', esc, true);
60007
60008                 d3_select(document)
60009                     .call(keybinding);
60010
60011                 selectError();
60012
60013                 var sidebar = context.ui().sidebar;
60014                 sidebar.show(errorEditor.error(error));
60015
60016                 context.map()
60017                     .on('drawn.select-error', selectError);
60018
60019
60020                 // class the error as selected, or return to browse mode if the error is gone
60021                 function selectError(drawn) {
60022                     if (!checkSelectedID()) return;
60023
60024                     var selection = context.surface()
60025                         .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
60026
60027                     if (selection.empty()) {
60028                         // Return to browse mode if selected DOM elements have
60029                         // disappeared because the user moved them out of view..
60030                         var source = event && event.type === 'zoom' && event.sourceEvent;
60031                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
60032                             context.enter(modeBrowse(context));
60033                         }
60034
60035                     } else {
60036                         selection
60037                             .classed('selected', true);
60038
60039                         context.selectedErrorID(selectedErrorID);
60040                     }
60041                 }
60042
60043                 function esc() {
60044                     if (d3_select('.combobox').size()) return;
60045                     context.enter(modeBrowse(context));
60046                 }
60047             };
60048
60049
60050             mode.exit = function() {
60051                 behaviors.forEach(context.uninstall);
60052
60053                 d3_select(document)
60054                     .call(keybinding.unbind);
60055
60056                 context.surface()
60057                     .selectAll('.qa_error.selected')
60058                     .classed('selected hover', false);
60059
60060                 context.map()
60061                     .on('drawn.select-error', null);
60062
60063                 context.ui().sidebar
60064                     .hide();
60065
60066                 context.selectedErrorID(null);
60067                 context.features().forceVisible([]);
60068             };
60069
60070
60071             return mode;
60072         }
60073
60074         function behaviorSelect(context) {
60075             // legacy option to show menu on every click
60076             var isShowAlways = +context.storage('edit-menu-show-always') === 1;
60077             var tolerance = 4;
60078             var _lastMouse = null;
60079             var _suppressMenu = true;
60080             var _p1 = null;
60081
60082
60083             function point() {
60084                 return d3_mouse(context.container().node());
60085             }
60086
60087
60088             function keydown() {
60089                 var e = event;
60090                 if (e && e.shiftKey) {
60091                     context.surface()
60092                         .classed('behavior-multiselect', true);
60093                 }
60094
60095                 if (e && e.keyCode === 93) {  // context menu
60096                     e.preventDefault();
60097                     e.stopPropagation();
60098                 }
60099             }
60100
60101
60102             function keyup() {
60103                 var e = event;
60104                 if (!e || !e.shiftKey) {
60105                     context.surface()
60106                         .classed('behavior-multiselect', false);
60107                 }
60108
60109
60110                 if (e && e.keyCode === 93) {  // context menu
60111                     e.preventDefault();
60112                     e.stopPropagation();
60113                     contextmenu();
60114                 }
60115             }
60116
60117
60118             function mousedown() {
60119                 if (!_p1) {
60120                     _p1 = point();
60121                 }
60122                 d3_select(window)
60123                     .on('mouseup.select', mouseup, true);
60124
60125                 _suppressMenu = !isShowAlways;
60126             }
60127
60128
60129             function mousemove() {
60130                 if (event) {
60131                     _lastMouse = event;
60132                 }
60133             }
60134
60135
60136             function mouseup() {
60137                 click();
60138             }
60139
60140
60141             function contextmenu() {
60142                 var e = event;
60143                 e.preventDefault();
60144                 e.stopPropagation();
60145
60146                 if (!+e.clientX && !+e.clientY) {
60147                     if (_lastMouse) {
60148                         e.sourceEvent = _lastMouse;
60149                     } else {
60150                         return;
60151                     }
60152                 }
60153
60154                 if (!_p1) {
60155                     _p1 = point();
60156                 }
60157                 _suppressMenu = false;
60158                 click();
60159             }
60160
60161
60162             function click() {
60163                 d3_select(window)
60164                     .on('mouseup.select', null, true);
60165
60166                 if (!_p1) return;
60167                 var p2 = point();
60168                 var dist = geoVecLength(_p1, p2);
60169                 _p1 = null;
60170                 if (dist > tolerance) return;
60171
60172                 // Defer processing the click,
60173                 // because this click may trigger a blur event,
60174                 // and the blur event may trigger a tag change,
60175                 // and we really want that tag change to go to the already selected entity
60176                 // and not the one that we are about to select with the click  #6028, #5878
60177                 // (Be very careful entering modeSelect anywhere that might also blur a field!)
60178                 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
60179                 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
60180                 window.setTimeout(function() {
60181                     processClick(datum, isMultiselect);
60182                 }, 20);  // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
60183             }
60184
60185
60186             function processClick(datum, isMultiselect) {
60187                 var mode = context.mode();
60188
60189                 var entity = datum && datum.properties && datum.properties.entity;
60190                 if (entity) datum = entity;
60191
60192                 if (datum && datum.type === 'midpoint') {
60193                     datum = datum.parents[0];
60194                 }
60195
60196                 if (datum instanceof osmEntity) {    // clicked an entity..
60197                     var selectedIDs = context.selectedIDs();
60198                     context.selectedNoteID(null);
60199                     context.selectedErrorID(null);
60200
60201                     if (!isMultiselect) {
60202                         if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
60203                             // multiple things already selected, just show the menu...
60204                             mode.suppressMenu(false).reselect();
60205                         } else {
60206                             // select a single thing..
60207                             context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
60208                         }
60209
60210                     } else {
60211                         if (selectedIDs.indexOf(datum.id) !== -1) {
60212                             // clicked entity is already in the selectedIDs list..
60213                             if (!_suppressMenu && !isShowAlways) {
60214                                 // don't deselect clicked entity, just show the menu.
60215                                 mode.suppressMenu(false).reselect();
60216                             } else {
60217                                 // deselect clicked entity, then reenter select mode or return to browse mode..
60218                                 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
60219                                 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
60220                             }
60221                         } else {
60222                             // clicked entity is not in the selected list, add it..
60223                             selectedIDs = selectedIDs.concat([datum.id]);
60224                             context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
60225                         }
60226                     }
60227
60228                 } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
60229                     context
60230                         .selectedNoteID(null)
60231                         .enter(modeSelectData(context, datum));
60232
60233                 } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
60234                     context
60235                         .selectedNoteID(datum.id)
60236                         .enter(modeSelectNote(context, datum.id));
60237
60238                 } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
60239                     context
60240                         .selectedErrorID(datum.id)
60241                         .enter(modeSelectError(context, datum.id, datum.service));
60242
60243                 } else {    // clicked nothing..
60244                     context.selectedNoteID(null);
60245                     context.selectedErrorID(null);
60246                     if (!isMultiselect && mode.id !== 'browse') {
60247                         context.enter(modeBrowse(context));
60248                     }
60249                 }
60250
60251                 // reset for next time..
60252                 _suppressMenu = true;
60253             }
60254
60255
60256             function behavior(selection) {
60257                 _lastMouse = null;
60258                 _suppressMenu = true;
60259                 _p1 = null;
60260
60261                 d3_select(window)
60262                     .on('keydown.select', keydown)
60263                     .on('keyup.select', keyup)
60264                     .on('contextmenu.select-window', function() {
60265                         // Edge and IE really like to show the contextmenu on the
60266                         // menubar when user presses a keyboard menu button
60267                         // even after we've already preventdefaulted the key event.
60268                         var e = event;
60269                         if (+e.clientX === 0 && +e.clientY === 0) {
60270                             event.preventDefault();
60271                             event.stopPropagation();
60272                         }
60273                     });
60274
60275                 selection
60276                     .on('mousedown.select', mousedown)
60277                     .on('mousemove.select', mousemove)
60278                     .on('contextmenu.select', contextmenu);
60279
60280                 if (event && event.shiftKey) {
60281                     context.surface()
60282                         .classed('behavior-multiselect', true);
60283                 }
60284             }
60285
60286
60287             behavior.off = function(selection) {
60288                 d3_select(window)
60289                     .on('keydown.select', null)
60290                     .on('keyup.select', null)
60291                     .on('contextmenu.select-window', null)
60292                     .on('mouseup.select', null, true);
60293
60294                 selection
60295                     .on('mousedown.select', null)
60296                     .on('mousemove.select', null)
60297                     .on('contextmenu.select', null);
60298
60299                 context.surface()
60300                     .classed('behavior-multiselect', false);
60301             };
60302
60303
60304             return behavior;
60305         }
60306
60307         function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
60308
60309             var origWay = context.entity(wayID);
60310
60311             var annotation = t((origWay.isDegenerate() ?
60312                 'operations.start.annotation.' :
60313                 'operations.continue.annotation.') + context.geometry(wayID)
60314             );
60315
60316             var behavior = behaviorDraw(context);
60317             behavior.hover().initialNodeID(index ? origWay.nodes[index] :
60318                 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
60319
60320             var _tempEdits = 0;
60321
60322             var end = osmNode({ loc: context.map().mouseCoordinates() });
60323
60324             // Push an annotated state for undo to return back to.
60325             // We must make sure to remove this edit later.
60326             context.pauseChangeDispatch();
60327             context.perform(actionNoop(), annotation);
60328             _tempEdits++;
60329
60330             // Add the drawing node to the graph.
60331             // We must make sure to remove this edit later.
60332             context.perform(_actionAddDrawNode());
60333             _tempEdits++;
60334             context.resumeChangeDispatch();
60335
60336
60337             function keydown() {
60338                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60339                     if (context.surface().classed('nope')) {
60340                         context.surface()
60341                             .classed('nope-suppressed', true);
60342                     }
60343                     context.surface()
60344                         .classed('nope', false)
60345                         .classed('nope-disabled', true);
60346                 }
60347             }
60348
60349
60350             function keyup() {
60351                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
60352                     if (context.surface().classed('nope-suppressed')) {
60353                         context.surface()
60354                             .classed('nope', true);
60355                     }
60356                     context.surface()
60357                         .classed('nope-suppressed', false)
60358                         .classed('nope-disabled', false);
60359                 }
60360             }
60361
60362
60363             function allowsVertex(d) {
60364                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
60365             }
60366
60367
60368             // related code
60369             // - `mode/drag_node.js`     `doMode()`
60370             // - `behavior/draw.js`      `click()`
60371             // - `behavior/draw_way.js`  `move()`
60372             function move(datum) {
60373                 context.surface().classed('nope-disabled', event.altKey);
60374
60375                 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
60376                 var targetNodes = datum && datum.properties && datum.properties.nodes;
60377                 var loc = context.map().mouseCoordinates();
60378
60379                 if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
60380                     loc = targetLoc;
60381
60382                 } else if (targetNodes) {   // snap to way - a line target with `.nodes`
60383                     var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
60384                     if (choice) {
60385                         loc = choice.loc;
60386                     }
60387                 }
60388
60389                 context.replace(actionMoveNode(end.id, loc));
60390                 end = context.entity(end.id);
60391                 checkGeometry(false);
60392             }
60393
60394
60395             // Check whether this edit causes the geometry to break.
60396             // If so, class the surface with a nope cursor.
60397             // `finishDraw` - Only checks the relevant line segments if finishing drawing
60398             function checkGeometry(finishDraw) {
60399                 var nopeDisabled = context.surface().classed('nope-disabled');
60400                 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
60401
60402                 if (nopeDisabled) {
60403                     context.surface()
60404                         .classed('nope', false)
60405                         .classed('nope-suppressed', isInvalid);
60406                 } else {
60407                     context.surface()
60408                         .classed('nope', isInvalid)
60409                         .classed('nope-suppressed', false);
60410                 }
60411             }
60412
60413
60414             function isInvalidGeometry(entity, graph, finishDraw) {
60415                 var parents = graph.parentWays(entity);
60416
60417                 for (var i = 0; i < parents.length; i++) {
60418                     var parent = parents[i];
60419                     var nodes = graph.childNodes(parent).slice();  // shallow copy
60420
60421                     if (origWay.isClosed()) { // Check if Area
60422                         if (finishDraw) {
60423                             if (nodes.length < 3) return false;
60424                             nodes.splice(-2, 1);
60425                             entity = nodes[nodes.length-2];
60426                         } else {
60427                             nodes.pop();
60428                         }
60429                     } else { // Line
60430                         if (finishDraw) {
60431                             nodes.pop();
60432                         }
60433                     }
60434
60435                     if (geoHasSelfIntersections(nodes, entity.id)) {
60436                         return true;
60437                     }
60438                 }
60439
60440                 return false;
60441             }
60442
60443
60444             function undone() {
60445                 context.pauseChangeDispatch();
60446                 // Undo popped the history back to the initial annotated no-op edit.
60447                 _tempEdits = 0;     // We will deal with the temp edits here
60448                 context.pop(1);     // Remove initial no-op edit
60449
60450                 if (context.graph() === baselineGraph) {    // We've undone back to the beginning
60451                     // baselineGraph may be behind startGraph if this way was added rather than continued
60452                     resetToStartGraph();
60453                     context.resumeChangeDispatch();
60454                     context.enter(modeSelect(context, [wayID]));
60455                 } else {
60456                     // Remove whatever segment was drawn previously and continue drawing
60457                     context.pop(1);
60458                     context.resumeChangeDispatch();
60459                     context.enter(mode);
60460                 }
60461             }
60462
60463
60464             function setActiveElements() {
60465                 context.surface().selectAll('.' + end.id)
60466                     .classed('active', true);
60467             }
60468
60469
60470             function resetToStartGraph() {
60471                 while (context.graph() !== startGraph) {
60472                     context.pop();
60473                 }
60474             }
60475
60476
60477             var drawWay = function(surface) {
60478                 behavior
60479                     .on('move', move)
60480                     .on('click', drawWay.add)
60481                     .on('clickWay', drawWay.addWay)
60482                     .on('clickNode', drawWay.addNode)
60483                     .on('undo', context.undo)
60484                     .on('cancel', drawWay.cancel)
60485                     .on('finish', drawWay.finish);
60486
60487                 d3_select(window)
60488                     .on('keydown.drawWay', keydown)
60489                     .on('keyup.drawWay', keyup);
60490
60491                 context.map()
60492                     .dblclickEnable(false)
60493                     .on('drawn.draw', setActiveElements);
60494
60495                 setActiveElements();
60496
60497                 surface.call(behavior);
60498
60499                 context.history()
60500                     .on('undone.draw', undone);
60501             };
60502
60503
60504             drawWay.off = function(surface) {
60505                 // Drawing was interrupted unexpectedly.
60506                 // This can happen if the user changes modes,
60507                 // clicks geolocate button, a hashchange event occurs, etc.
60508                 if (_tempEdits) {
60509                     context.pauseChangeDispatch();
60510                     context.pop(_tempEdits);
60511                     resetToStartGraph();
60512                     context.resumeChangeDispatch();
60513                 }
60514
60515                 context.map()
60516                     .on('drawn.draw', null);
60517
60518                 surface.call(behavior.off)
60519                     .selectAll('.active')
60520                     .classed('active', false);
60521
60522                 surface
60523                     .classed('nope', false)
60524                     .classed('nope-suppressed', false)
60525                     .classed('nope-disabled', false);
60526
60527                 d3_select(window)
60528                     .on('keydown.hover', null)
60529                     .on('keyup.hover', null);
60530
60531                 context.history()
60532                     .on('undone.draw', null);
60533             };
60534
60535
60536             function _actionAddDrawNode() {
60537                 return function(graph) {
60538                     return graph
60539                         .replace(end)
60540                         .replace(origWay.addNode(end.id, index));
60541                 };
60542             }
60543
60544
60545             function _actionReplaceDrawNode(newNode) {
60546                 return function(graph) {
60547                     return graph
60548                         .replace(origWay.addNode(newNode.id, index))
60549                         .remove(end);
60550                 };
60551             }
60552
60553
60554             // Accept the current position of the drawing node and continue drawing.
60555             drawWay.add = function(loc, d) {
60556                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60557                     return;   // can't click here
60558                 }
60559
60560                 context.pauseChangeDispatch();
60561                 context.pop(_tempEdits);
60562                 _tempEdits = 0;
60563
60564                 context.perform(
60565                     _actionAddDrawNode(),
60566                     annotation
60567                 );
60568
60569                 context.resumeChangeDispatch();
60570                 checkGeometry(false);   // finishDraw = false
60571                 context.enter(mode);
60572             };
60573
60574
60575             // Connect the way to an existing way.
60576             drawWay.addWay = function(loc, edge, d) {
60577                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60578                     return;   // can't click here
60579                 }
60580
60581                 context.pauseChangeDispatch();
60582                 context.pop(_tempEdits);
60583                 _tempEdits = 0;
60584
60585                 context.perform(
60586                     _actionAddDrawNode(),
60587                     actionAddMidpoint({ loc: loc, edge: edge }, end),
60588                     annotation
60589                 );
60590
60591                 context.resumeChangeDispatch();
60592                 checkGeometry(false);   // finishDraw = false
60593                 context.enter(mode);
60594             };
60595
60596
60597             // Connect the way to an existing node and continue drawing.
60598             drawWay.addNode = function(node, d) {
60599                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
60600                     return;   // can't click here
60601                 }
60602
60603                 context.pauseChangeDispatch();
60604                 context.pop(_tempEdits);
60605                 _tempEdits = 0;
60606
60607                 context.perform(
60608                     _actionReplaceDrawNode(node),
60609                     annotation
60610                 );
60611
60612                 context.resumeChangeDispatch();
60613                 checkGeometry(false);   // finishDraw = false
60614                 context.enter(mode);
60615             };
60616
60617
60618             // Finish the draw operation, removing the temporary edits.
60619             // If the way has enough nodes to be valid, it's selected.
60620             // Otherwise, delete everything and return to browse mode.
60621             drawWay.finish = function() {
60622                 checkGeometry(true);   // finishDraw = true
60623                 if (context.surface().classed('nope')) {
60624                     return;   // can't click here
60625                 }
60626
60627                 context.pauseChangeDispatch();
60628                 context.pop(_tempEdits);
60629                 _tempEdits = 0;
60630
60631                 var way = context.hasEntity(wayID);
60632                 if (!way || way.isDegenerate()) {
60633                     drawWay.cancel();
60634                     return;
60635                 }
60636
60637                 context.resumeChangeDispatch();
60638
60639                 window.setTimeout(function() {
60640                     context.map().dblclickEnable(true);
60641                 }, 1000);
60642
60643                 var isNewFeature = !mode.isContinuing;
60644                 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
60645             };
60646
60647
60648             // Cancel the draw operation, delete everything, and return to browse mode.
60649             drawWay.cancel = function() {
60650                 context.pauseChangeDispatch();
60651                 context.pop(_tempEdits);
60652                 _tempEdits = 0;
60653
60654                 resetToStartGraph();
60655                 context.resumeChangeDispatch();
60656
60657                 window.setTimeout(function() {
60658                     context.map().dblclickEnable(true);
60659                 }, 1000);
60660
60661                 context.surface()
60662                     .classed('nope', false)
60663                     .classed('nope-disabled', false)
60664                     .classed('nope-suppressed', false);
60665
60666                 context.enter(modeBrowse(context));
60667             };
60668
60669
60670             drawWay.activeID = function() {
60671                 if (!arguments.length) return end.id;
60672                 // no assign
60673                 return drawWay;
60674             };
60675
60676
60677             drawWay.tail = function(text) {
60678                 behavior.tail(text);
60679                 return drawWay;
60680             };
60681
60682
60683             return drawWay;
60684         }
60685
60686         function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
60687             var mode = {
60688                 button: button,
60689                 id: 'draw-line'
60690             };
60691
60692             var behavior;
60693
60694             mode.wayID = wayID;
60695
60696             mode.isContinuing = continuing;
60697
60698             mode.enter = function() {
60699                 var way = context.entity(wayID);
60700                 var index = (affix === 'prefix') ? 0 : undefined;
60701                 var headID = (affix === 'prefix') ? way.first() : way.last();
60702
60703                 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
60704                     .tail(t('modes.draw_line.tail'));
60705
60706                 var addNode = behavior.addNode;
60707                 behavior.addNode = function(node, d) {
60708                     if (node.id === headID) {
60709                         behavior.finish();
60710                     } else {
60711                         addNode(node, d);
60712                     }
60713                 };
60714
60715                 context.install(behavior);
60716             };
60717
60718
60719             mode.exit = function() {
60720                 context.uninstall(behavior);
60721             };
60722
60723
60724             mode.selectedIDs = function() {
60725                 return [wayID];
60726             };
60727
60728
60729             mode.activeID = function() {
60730                 return (behavior && behavior.activeID()) || [];
60731             };
60732
60733             return mode;
60734         }
60735
60736         function operationContinue(selectedIDs, context) {
60737             var graph = context.graph();
60738             var entities = selectedIDs.map(function(id) { return graph.entity(id); });
60739             var geometries = Object.assign(
60740                 { line: [], vertex: [] },
60741                 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
60742             );
60743             var vertex = geometries.vertex[0];
60744
60745
60746             function candidateWays() {
60747                 return graph.parentWays(vertex).filter(function(parent) {
60748                     return parent.geometry(graph) === 'line' &&
60749                         !parent.isClosed() &&
60750                         parent.affix(vertex.id) &&
60751                         (geometries.line.length === 0 || geometries.line[0] === parent);
60752                 });
60753             }
60754
60755
60756             var operation = function() {
60757                 var candidate = candidateWays()[0];
60758                 context.enter(
60759                     modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
60760                 );
60761             };
60762
60763
60764             operation.available = function() {
60765                 return geometries.vertex.length === 1 &&
60766                     geometries.line.length <= 1 &&
60767                     !context.features().hasHiddenConnections(vertex, context.graph());
60768             };
60769
60770
60771             operation.disabled = function() {
60772                 var candidates = candidateWays();
60773                 if (candidates.length === 0) {
60774                     return 'not_eligible';
60775                 } else if (candidates.length > 1) {
60776                     return 'multiple';
60777                 }
60778
60779                 return false;
60780             };
60781
60782
60783             operation.tooltip = function() {
60784                 var disable = operation.disabled();
60785                 return disable ?
60786                     t('operations.continue.' + disable) :
60787                     t('operations.continue.description');
60788             };
60789
60790
60791             operation.annotation = function() {
60792                 return t('operations.continue.annotation.line');
60793             };
60794
60795
60796             operation.id = 'continue';
60797             operation.keys = [t('operations.continue.key')];
60798             operation.title = t('operations.continue.title');
60799             operation.behavior = behaviorOperation(context).which(operation);
60800
60801             return operation;
60802         }
60803
60804         function operationDisconnect(selectedIDs, context) {
60805             var vertexIDs = [];
60806             var wayIDs = [];
60807             var otherIDs = [];
60808             var actions = [];
60809
60810             selectedIDs.forEach(function(id) {
60811                 if (context.geometry(id) === 'vertex') {
60812                     vertexIDs.push(id);
60813                 } else if (context.entity(id).type === 'way'){
60814                     wayIDs.push(id);
60815                 } else {
60816                     otherIDs.push(id);
60817                 }
60818             });
60819
60820             var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
60821             var extent, nodes, coords;
60822
60823             if (disconnectingWayID) {   // disconnecting a way
60824                 var way = context.entity(disconnectingWayID);
60825                 extent = way.extent(context.graph());
60826                 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
60827                 coords = nodes.map(function(n) { return n.loc; });
60828
60829                 way.nodes.forEach(function(vertexID) {
60830                     var action = actionDisconnect(vertexID).limitWays(wayIDs);
60831                     if (action.disabled(context.graph()) !== 'not_connected') {
60832                         actions.push(action);
60833                     }
60834                 });
60835
60836             } else {    // disconnecting a vertex
60837                 vertexIDs.forEach(function(vertexID) {
60838                     var action = actionDisconnect(vertexID);
60839
60840                     if (wayIDs.length > 0) {
60841                         var waysIDsForVertex = wayIDs.filter(function(wayID) {
60842                             var way = context.entity(wayID);
60843                             return way.nodes.indexOf(vertexID) !== -1;
60844                         });
60845                         action.limitWays(waysIDsForVertex);
60846                     }
60847                     actions.push(action);
60848                 });
60849             }
60850
60851
60852             var operation = function() {
60853                 context.perform(function(graph) {
60854                     return actions.reduce(function(graph, action) { return action(graph); }, graph);
60855                 }, operation.annotation());
60856
60857                 context.validator().validate();
60858             };
60859
60860
60861             operation.available = function() {
60862                 if (actions.length === 0) return false;
60863                 if (otherIDs.length !== 0) return false;
60864
60865                 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
60866                     return vertexIDs.some(function(vertexID) {
60867                         var way = context.entity(wayID);
60868                         return way.nodes.indexOf(vertexID) !== -1;
60869                     });
60870                 })) return false;
60871
60872                 return true;
60873             };
60874
60875
60876             operation.disabled = function() {
60877                 var reason;
60878                 for (var actionIndex in actions) {
60879                     reason = actions[actionIndex].disabled(context.graph());
60880                     if (reason) return reason;
60881                 }
60882
60883                 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
60884                     return 'too_large.single';
60885                 } else if (disconnectingWayID && someMissing()) {
60886                     return 'not_downloaded';
60887                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
60888                     return 'connected_to_hidden';
60889                 }
60890
60891                 return false;
60892
60893
60894                 function someMissing() {
60895                     if (context.inIntro()) return false;
60896                     var osm = context.connection();
60897                     if (osm) {
60898                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
60899                         if (missing.length) {
60900                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
60901                             return true;
60902                         }
60903                     }
60904                     return false;
60905                 }
60906             };
60907
60908
60909             operation.tooltip = function() {
60910                 var disable = operation.disabled();
60911                 if (disable) {
60912                     return t('operations.disconnect.' + disable);
60913                 }
60914                 if (disconnectingWayID) {
60915                     return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
60916                 }
60917                 return t('operations.disconnect.description');
60918             };
60919
60920
60921             operation.annotation = function() {
60922                 return t('operations.disconnect.annotation');
60923             };
60924
60925
60926             operation.id = 'disconnect';
60927             operation.keys = [t('operations.disconnect.key')];
60928             operation.title = t('operations.disconnect.title');
60929             operation.behavior = behaviorOperation(context).which(operation);
60930
60931             return operation;
60932         }
60933
60934         function operationDowngrade(selectedIDs, context) {
60935             var affectedFeatureCount = 0;
60936             var downgradeType;
60937
60938             setDowngradeTypeForEntityIDs();
60939
60940             var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
60941
60942             function setDowngradeTypeForEntityIDs() {
60943                 for (var i in selectedIDs) {
60944                     var entityID = selectedIDs[i];
60945                     var type = downgradeTypeForEntityID(entityID);
60946                     if (type) {
60947                         affectedFeatureCount += 1;
60948                         if (downgradeType && type !== downgradeType) {
60949                             downgradeType = 'building_address';
60950                         } else {
60951                             downgradeType = type;
60952                         }
60953                     }
60954                 }
60955             }
60956
60957             function downgradeTypeForEntityID(entityID) {
60958                 var graph = context.graph();
60959                 var entity = graph.entity(entityID);
60960                 var preset = context.presets().match(entity, graph);
60961
60962                 if (preset.isFallback()) return null;
60963
60964                 if (entity.type === 'node' &&
60965                     preset.id !== 'address' &&
60966                     Object.keys(entity.tags).some(function(key) {
60967                         return key.match(/^addr:.{1,}/);
60968                     })) {
60969
60970                     return 'address';
60971                 }
60972                 if (entity.geometry(graph) === 'area' &&
60973                     entity.tags.building &&
60974                     !preset.tags.building) {
60975
60976                     return 'building';
60977                 }
60978
60979                 return null;
60980             }
60981
60982             var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
60983             var addressKeysToKeep = ['source'];
60984
60985             var operation = function () {
60986                 context.perform(function(graph) {
60987
60988                     for (var i in selectedIDs) {
60989                         var entityID = selectedIDs[i];
60990                         var type = downgradeTypeForEntityID(entityID);
60991                         if (!type) continue;
60992
60993                         var tags = Object.assign({}, graph.entity(entityID).tags);  // shallow copy
60994                         for (var key in tags) {
60995                             if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) continue;
60996                             if (type === 'building') {
60997                                 if (buildingKeysToKeep.indexOf(key) !== -1 ||
60998                                     key.match(/^building:.{1,}/) ||
60999                                     key.match(/^roof:.{1,}/)) continue;
61000                             }
61001                             // keep address tags for buildings too
61002                             if (key.match(/^addr:.{1,}/)) continue;
61003
61004                             delete tags[key];
61005                         }
61006                         graph = actionChangeTags(entityID, tags)(graph);
61007                     }
61008                     return graph;
61009                 }, operation.annotation());
61010
61011                 context.validator().validate();
61012
61013                 // refresh the select mode to enable the delete operation
61014                 context.enter(modeSelect(context, selectedIDs));
61015             };
61016
61017
61018             operation.available = function () {
61019                 return downgradeType;
61020             };
61021
61022
61023             operation.disabled = function () {
61024                 if (selectedIDs.some(hasWikidataTag)) {
61025                     return 'has_wikidata_tag';
61026                 }
61027                 return false;
61028
61029                 function hasWikidataTag(id) {
61030                     var entity = context.entity(id);
61031                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
61032                 }
61033             };
61034
61035
61036             operation.tooltip = function () {
61037                 var disable = operation.disabled();
61038                 return disable ?
61039                     t('operations.downgrade.' + disable + '.' + multi) :
61040                     t('operations.downgrade.description.' + downgradeType);
61041             };
61042
61043
61044             operation.annotation = function () {
61045                 var suffix;
61046                 if (downgradeType === 'building_address') {
61047                     suffix = 'multiple';
61048                 } else {
61049                     suffix = downgradeType + '.' + multi;
61050                 }
61051                 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
61052             };
61053
61054
61055             operation.id = 'downgrade';
61056             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
61057             operation.title = t('operations.downgrade.title');
61058             operation.behavior = behaviorOperation(context).which(operation);
61059
61060
61061             return operation;
61062         }
61063
61064         function operationExtract(selectedIDs, context) {
61065             var entityID = selectedIDs.length && selectedIDs[0];
61066             var action = actionExtract(entityID, context.projection);
61067
61068             var geometry = entityID && context.geometry(entityID);
61069             var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
61070
61071
61072             var operation = function () {
61073                 context.perform(action);  // do the extract
61074                 context.validator().validate();
61075
61076                 var extractedNodeID = action.getExtractedNodeID();
61077
61078                 var mouse = context.map().mouseCoordinates();
61079                 if (mouse.some(isNaN)) {
61080                     enterMoveMode();
61081
61082                 } else {
61083                     // move detached node to the mouse location (transitioned)
61084                     context.perform(actionMoveNode(extractedNodeID, mouse));
61085
61086                     // after transition completes, put at final mouse location and enter move mode.
61087                     window.setTimeout(function() {
61088                         mouse = context.map().mouseCoordinates();
61089                         context.replace(actionMoveNode(extractedNodeID, mouse));
61090                         enterMoveMode();
61091                     }, 150);
61092                 }
61093
61094                 function enterMoveMode() {
61095                     var baseGraph = context.graph();
61096                     context.enter(modeMove(context, [extractedNodeID], baseGraph));
61097                 }
61098             };
61099
61100
61101             operation.available = function () {
61102                 if (selectedIDs.length !== 1) return false;
61103
61104                 var graph = context.graph();
61105                 var entity = graph.hasEntity(entityID);
61106                 if (!entity) return false;
61107
61108                 if (!entity.hasInterestingTags()) return false;
61109
61110                 if (geometry === 'area') {
61111                     var preset = context.presets().match(entity, graph);
61112                     return preset.geometry.indexOf('point') !== -1;
61113                 }
61114
61115                 return entity.type === 'node' && graph.parentWays(entity).length > 0;
61116             };
61117
61118
61119             operation.disabled = function () {
61120                 var reason = action.disabled(context.graph());
61121                 if (reason) {
61122                     return reason;
61123                 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
61124                     return 'connected_to_hidden';
61125                 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
61126                     return 'too_large';
61127                 }
61128
61129                 return false;
61130             };
61131
61132
61133             operation.tooltip = function () {
61134                 var disableReason = operation.disabled();
61135                 if (disableReason) {
61136                     return t('operations.extract.' + disableReason + '.' + geometry + '.single',
61137                         { relation: context.presets().item('type/restriction').name() });
61138                 } else {
61139                     return t('operations.extract.description.' + geometry + '.single');
61140                 }
61141             };
61142
61143
61144             operation.annotation = function () {
61145                 return t('operations.extract.annotation.single');
61146             };
61147
61148
61149             operation.id = 'extract';
61150             operation.keys = [t('operations.extract.key')];
61151             operation.title = t('operations.extract.title');
61152             operation.behavior = behaviorOperation(context).which(operation);
61153
61154
61155             return operation;
61156         }
61157
61158         function operationMerge(selectedIDs, context) {
61159
61160             function updatePresetTags(newGraph, ids) {
61161                 var id = ids[0];
61162                 var newEntity = newGraph.hasEntity(id);
61163
61164                 if (!newEntity) return;
61165                 var newPreset = context.presets().match(newEntity, newGraph);
61166                 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
61167             }
61168
61169
61170             var join = actionJoin(selectedIDs);
61171             var merge = actionMerge(selectedIDs);
61172             var mergePolygon = actionMergePolygon(selectedIDs);
61173             var mergeNodes = actionMergeNodes(selectedIDs);
61174
61175
61176             var operation = function() {
61177                 var doUpdateTags;
61178                 var action;
61179
61180                 if (!join.disabled(context.graph())) {
61181                     doUpdateTags = false;
61182                     action = join;
61183                 } else if (!merge.disabled(context.graph())) {
61184                     doUpdateTags = true;
61185                     action = merge;
61186                 } else if (!mergePolygon.disabled(context.graph())) {
61187                     doUpdateTags = false;
61188                     action = mergePolygon;
61189                 } else {
61190                     doUpdateTags = true;
61191                     action = mergeNodes;
61192                 }
61193
61194                 context.perform(action, operation.annotation());
61195
61196                 var ids = selectedIDs.filter(function(id) {
61197                     var entity = context.hasEntity(id);
61198                     return entity && entity.type !== 'node';
61199                 });
61200
61201                 // if we merged tags, rematch preset to update tags if necessary (#3851)
61202                 if (doUpdateTags) {
61203                     updatePresetTags(context.graph(), ids);
61204                 }
61205
61206                 context.validator().validate();
61207                 context.enter(modeSelect(context, ids));
61208             };
61209
61210
61211             operation.available = function() {
61212                 return selectedIDs.length >= 2;
61213             };
61214
61215
61216             operation.disabled = function() {
61217                 return join.disabled(context.graph()) &&
61218                     merge.disabled(context.graph()) &&
61219                     mergePolygon.disabled(context.graph()) &&
61220                     mergeNodes.disabled(context.graph());
61221             };
61222
61223
61224             operation.tooltip = function() {
61225                 var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
61226                 var m = merge.disabled(context.graph());         // 'not_eligible'
61227                 var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
61228                 var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
61229
61230                 // disabled for one of various reasons
61231                 if (j && m && p && n) {
61232                     if (j === 'restriction' || n === 'restriction') {
61233                         return t('operations.merge.restriction',
61234                             { relation: context.presets().item('type/restriction').name() });
61235
61236                     } else if (p === 'incomplete_relation') {
61237                         return t('operations.merge.incomplete_relation');
61238
61239                     } else if (n === 'relation') {
61240                         return t('operations.merge.relation');
61241
61242                     } else {
61243                         return t('operations.merge.' + j);
61244                     }
61245
61246                 } else {
61247                     return t('operations.merge.description');
61248                 }
61249             };
61250
61251
61252             operation.annotation = function() {
61253                 return t('operations.merge.annotation', { n: selectedIDs.length });
61254             };
61255
61256
61257             operation.id = 'merge';
61258             operation.keys = [t('operations.merge.key')];
61259             operation.title = t('operations.merge.title');
61260             operation.behavior = behaviorOperation(context).which(operation);
61261
61262             return operation;
61263         }
61264
61265         function operationReverse(selectedIDs, context) {
61266
61267             var operation = function() {
61268                 context.perform(function combinedReverseAction(graph) {
61269                     actions().forEach(function(action) {
61270                         graph = action(graph);
61271                     });
61272                     return graph;
61273                 }, operation.annotation());
61274                 context.validator().validate();
61275             };
61276
61277             function actions(situation) {
61278                 return selectedIDs.map(function(entityID) {
61279                     var entity = context.hasEntity(entityID);
61280                     if (!entity) return;
61281
61282                     if (situation === 'toolbar') {
61283                         if (entity.type === 'way' &&
61284                             (!entity.isOneWay() && !entity.isSided())) return;
61285                     }
61286
61287                     var geometry = entity.geometry(context.graph());
61288                     if (entity.type !== 'node' && geometry !== 'line') return;
61289
61290                     var action = actionReverse(entityID);
61291                     if (action.disabled(context.graph())) return;
61292
61293                     return action;
61294                 }).filter(Boolean);
61295             }
61296
61297             function reverseTypeID() {
61298                 var acts = actions();
61299                 var nodeActionCount = acts.filter(function(act) {
61300                     var entity = context.hasEntity(act.entityID());
61301                     return entity && entity.type === 'node';
61302                 }).length;
61303                 var typeID = nodeActionCount === 0 ? 'line' : (nodeActionCount === acts.length ? 'point' : 'features');
61304                 if (typeID !== 'features' && acts.length > 1) typeID += 's';
61305                 return typeID;
61306             }
61307
61308
61309             operation.available = function(situation) {
61310                 return actions(situation).length > 0;
61311             };
61312
61313
61314             operation.disabled = function() {
61315                 return false;
61316             };
61317
61318
61319             operation.tooltip = function() {
61320                 return t('operations.reverse.description.' + reverseTypeID());
61321             };
61322
61323
61324             operation.annotation = function() {
61325                 return t('operations.reverse.annotation.' + reverseTypeID());
61326             };
61327
61328
61329             operation.id = 'reverse';
61330             operation.keys = [t('operations.reverse.key')];
61331             operation.title = t('operations.reverse.title');
61332             operation.behavior = behaviorOperation(context).which(operation);
61333
61334             return operation;
61335         }
61336
61337         function operationSplit(selectedIDs, context) {
61338             var vertices = selectedIDs
61339                 .filter(function(id) { return context.geometry(id) === 'vertex'; });
61340             var entityID = vertices[0];
61341             var action = actionSplit(entityID);
61342             var ways = [];
61343
61344             if (vertices.length === 1) {
61345                 if (entityID && selectedIDs.length > 1) {
61346                     var ids = selectedIDs.filter(function(id) { return id !== entityID; });
61347                     action.limitWays(ids);
61348                 }
61349                 ways = action.ways(context.graph());
61350             }
61351
61352
61353             var operation = function() {
61354                 var difference = context.perform(action, operation.annotation());
61355                 context.enter(modeSelect(context, difference.extantIDs()));
61356             };
61357
61358
61359             operation.available = function() {
61360                 return vertices.length === 1;
61361             };
61362
61363
61364             operation.disabled = function() {
61365                 var reason = action.disabled(context.graph());
61366                 if (reason) {
61367                     return reason;
61368                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61369                     return 'connected_to_hidden';
61370                 }
61371
61372                 return false;
61373             };
61374
61375
61376             operation.tooltip = function() {
61377                 var disable = operation.disabled();
61378                 if (disable) {
61379                     return t('operations.split.' + disable);
61380                 } else if (ways.length === 1) {
61381                     return t('operations.split.description.' + context.geometry(ways[0].id));
61382                 } else {
61383                     return t('operations.split.description.multiple');
61384                 }
61385             };
61386
61387
61388             operation.annotation = function() {
61389                 return ways.length === 1 ?
61390                     t('operations.split.annotation.' + context.geometry(ways[0].id)) :
61391                     t('operations.split.annotation.multiple', { n: ways.length });
61392             };
61393
61394
61395             operation.id = 'split';
61396             operation.keys = [t('operations.split.key')];
61397             operation.title = t('operations.split.title');
61398             operation.behavior = behaviorOperation(context).which(operation);
61399
61400             return operation;
61401         }
61402
61403         function operationStraighten(selectedIDs, context) {
61404             var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
61405             var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
61406
61407             var nodes = utilGetAllNodes(selectedIDs, context.graph());
61408             var coords = nodes.map(function(n) { return n.loc; });
61409             var action = chooseAction();
61410             var geometry;
61411
61412
61413             function chooseAction() {
61414                 // straighten selected nodes
61415                 if (wayIDs.length === 0 && nodeIDs.length > 2) {
61416                     geometry = 'points';
61417                     return actionStraightenNodes(nodeIDs, context.projection);
61418
61419                 // straighten selected ways (possibly between range of 2 selected nodes)
61420                 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
61421                     var startNodeIDs = [];
61422                     var endNodeIDs = [];
61423
61424                     for (var i = 0; i < selectedIDs.length; i++) {
61425                         var entity = context.entity(selectedIDs[i]);
61426                         if (entity.type === 'node') {
61427                             continue;
61428                         } else if (entity.type !== 'way' || entity.isClosed()) {
61429                             return false;  // exit early, can't straighten these
61430                         }
61431
61432                         startNodeIDs.push(entity.first());
61433                         endNodeIDs.push(entity.last());
61434                     }
61435
61436                     // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
61437                     startNodeIDs = startNodeIDs.filter(function(n) {
61438                         return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
61439                     });
61440                     endNodeIDs = endNodeIDs.filter(function(n) {
61441                         return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
61442                     });
61443
61444                     // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
61445                     if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
61446                         utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) return false;
61447
61448                     // Ensure path contains at least 3 unique nodes
61449                     var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
61450                         .map(function(node) { return node.id; });
61451                     if (wayNodeIDs.length <= 2) return false;
61452
61453                     // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
61454                     if (nodeIDs.length === 2 && (
61455                         wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
61456                     )) return false;
61457
61458                     geometry = 'line';
61459                     return actionStraightenWay(selectedIDs, context.projection);
61460                 }
61461
61462                 return false;
61463             }
61464
61465
61466             function operation() {
61467                 if (!action) return;
61468
61469                 context.perform(action, operation.annotation());
61470
61471                 window.setTimeout(function() {
61472                     context.validator().validate();
61473                 }, 300);  // after any transition
61474             }
61475
61476
61477             operation.available = function() {
61478                 return Boolean(action);
61479             };
61480
61481
61482             operation.disabled = function() {
61483                 var reason = action.disabled(context.graph());
61484                 if (reason) {
61485                     return reason;
61486                 } else if (someMissing()) {
61487                     return 'not_downloaded';
61488                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
61489                     return 'connected_to_hidden';
61490                 }
61491
61492                 return false;
61493
61494
61495                 function someMissing() {
61496                     if (context.inIntro()) return false;
61497                     var osm = context.connection();
61498                     if (osm) {
61499                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
61500                         if (missing.length) {
61501                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
61502                             return true;
61503                         }
61504                     }
61505                     return false;
61506                 }
61507             };
61508
61509
61510             operation.tooltip = function() {
61511                 var disable = operation.disabled();
61512                 return disable ?
61513                     t('operations.straighten.' + disable) :
61514                     t('operations.straighten.description.' + geometry);
61515             };
61516
61517
61518             operation.annotation = function() {
61519                 return t('operations.straighten.annotation.' + geometry);
61520             };
61521
61522
61523             operation.id = 'straighten';
61524             operation.keys = [t('operations.straighten.key')];
61525             operation.title = t('operations.straighten.title');
61526             operation.behavior = behaviorOperation(context).which(operation);
61527
61528             return operation;
61529         }
61530
61531
61532
61533         var Operations = /*#__PURE__*/Object.freeze({
61534                 __proto__: null,
61535                 operationCircularize: operationCircularize,
61536                 operationContinue: operationContinue,
61537                 operationDelete: operationDelete,
61538                 operationDisconnect: operationDisconnect,
61539                 operationDowngrade: operationDowngrade,
61540                 operationExtract: operationExtract,
61541                 operationMerge: operationMerge,
61542                 operationMove: operationMove,
61543                 operationOrthogonalize: operationOrthogonalize,
61544                 operationReflectShort: operationReflectShort,
61545                 operationReflectLong: operationReflectLong,
61546                 operationReverse: operationReverse,
61547                 operationRotate: operationRotate,
61548                 operationSplit: operationSplit,
61549                 operationStraighten: operationStraighten
61550         });
61551
61552         function uiEditMenu(context, operations) {
61553             var menu;
61554             var center = [0, 0];
61555             var offset = [0, 0];
61556             var tooltip;
61557
61558             var p = 8;               // top padding
61559             var m = 4;               // top margin
61560             var h = 15;              // height of icon
61561             var vpBottomMargin = 45; // viewport bottom margin
61562             var vpSideMargin = 35;   // viewport side margin
61563             var buttonWidth = 44;
61564             var buttonHeight = (2 * p + h);
61565             var menuWidth = buttonWidth;
61566             var menuHeight = (2 * m) + operations.length * buttonHeight;
61567             var menuSideMargin = 10;
61568             var tooltipWidth = 200;
61569             var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
61570
61571
61572             var editMenu = function (selection) {
61573                 if (!operations.length) return;
61574
61575                 selection.node().parentNode.focus();
61576
61577                 var isRTL = textDirection === 'rtl';
61578                 var viewport = context.surfaceRect();
61579
61580                 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
61581                     // menu is going left-to-right and near right viewport edge, go left instead
61582                     isRTL = true;
61583                 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
61584                     // menu is going right-to-left and near left viewport edge, go right instead
61585                     isRTL = false;
61586                 }
61587
61588                 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
61589
61590                 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
61591                     // menu is near bottom viewport edge, shift upwards
61592                     offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
61593                 }
61594
61595                 var origin = geoVecAdd(center, offset);
61596
61597                 menu = selection
61598                     .append('g')
61599                     .attr('class', 'edit-menu')
61600                     .attr('transform', 'translate(' + origin + ')')
61601                     .attr('opacity', 0);
61602
61603                 menu
61604                     .transition()
61605                     .attr('opacity', 1);
61606
61607                 menu
61608                     .append('rect')
61609                     .attr('class', 'edit-menu-background')
61610                     .attr('x', 4)
61611                     .attr('rx', 4)
61612                     .attr('ry', 4)
61613                     .attr('width', menuWidth)
61614                     .attr('height', menuHeight)
61615                     .attr('stroke-linecap', 'round');
61616
61617
61618                 var buttons = menu.selectAll('.edit-menu-item')
61619                     .data(operations);
61620
61621                 // enter
61622                 var buttonsEnter = buttons.enter()
61623                     .append('g')
61624                     .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
61625                     .attr('transform', function(d, i) {
61626                         return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
61627                     });
61628
61629                 buttonsEnter
61630                     .append('rect')
61631                     .attr('x', 4)
61632                     .attr('width', buttonWidth)
61633                     .attr('height', buttonHeight)
61634                     .on('click', click)
61635                     .on('mousedown', mousedown)
61636                     .on('mouseover', mouseover)
61637                     .on('mouseout', mouseout);
61638
61639                 buttonsEnter
61640                     .append('use')
61641                     .attr('width', '20')
61642                     .attr('height', '20')
61643                     .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
61644                     .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
61645
61646                 // update
61647                 buttons = buttonsEnter
61648                     .merge(buttons)
61649                     .classed('disabled', function(d) { return d.disabled(); });
61650
61651
61652                 tooltip = d3_select('#id-container')
61653                     .append('div')
61654                     .attr('class', 'tooltip-inner edit-menu-tooltip');
61655
61656
61657                 function click(operation) {
61658                     event.stopPropagation();
61659                     if (operation.disabled()) return;
61660                     operation();
61661                     editMenu.close();
61662                 }
61663
61664                 function mousedown() {
61665                     event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
61666                 }
61667
61668                 function mouseover(d, i) {
61669                     var tipX, tipY;
61670
61671                     if (!isRTL) {
61672                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61673                     } else {
61674                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61675                     }
61676
61677                     if (tipX + tooltipWidth > viewport.right) {
61678                         // tip is going left-to-right and near right viewport edge, go left instead
61679                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
61680                     } else if (tipX < viewport.left) {
61681                         // tip is going right-to-left and near left viewport edge, go right instead
61682                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
61683                     }
61684
61685                     tipY = viewport.top + origin[1] + (i * buttonHeight);
61686                     if (tipY + tooltipHeight > viewport.bottom) {
61687                         // tip is near bottom viewport edge, shift upwards
61688                         tipY -= tipY + tooltipHeight - viewport.bottom;
61689                     }
61690
61691                     tooltip
61692                         .style('left', tipX + 'px')
61693                         .style('top', tipY + 'px')
61694                         .style('display', 'block')
61695                         .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
61696
61697                     // update disabled again, just in case tooltip and disabled state disagree
61698                     // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
61699                     d3_select(this.parentNode)
61700                         .classed('disabled', d.disabled());
61701
61702                 }
61703
61704                 function mouseout() {
61705                     tooltip.style('display', 'none');
61706                 }
61707             };
61708
61709
61710             editMenu.close = function () {
61711                 if (menu) {
61712                     menu
61713                         .style('pointer-events', 'none')
61714                         .transition()
61715                         .attr('opacity', 0)
61716                         .remove();
61717                 }
61718
61719                 if (tooltip) {
61720                     tooltip.remove();
61721                 }
61722             };
61723
61724
61725             editMenu.center = function(val) {
61726                 if (!arguments.length) return center;
61727                 center = val;
61728                 return editMenu;
61729             };
61730
61731
61732             return editMenu;
61733         }
61734
61735         function uiSelectionList(context, selectedIDs) {
61736
61737             function selectEntity(entity) {
61738                 context.enter(modeSelect(context, [entity.id]));
61739             }
61740
61741
61742             function deselectEntity(entity) {
61743                 event.stopPropagation();
61744                 var index = selectedIDs.indexOf(entity.id);
61745                 if (index > -1) {
61746                     selectedIDs.splice(index, 1);
61747                 }
61748                 context.enter(modeSelect(context, selectedIDs));
61749             }
61750
61751
61752             function selectionList(selection) {
61753                 selection.classed('selection-list-pane', true);
61754
61755                 var header = selection
61756                     .append('div')
61757                     .attr('class', 'header fillL cf');
61758
61759                 header
61760                     .append('h3')
61761                     .text(t('inspector.multiselect'));
61762
61763                 var listWrap = selection
61764                     .append('div')
61765                     .attr('class', 'inspector-body');
61766
61767                 var list = listWrap
61768                     .append('div')
61769                     .attr('class', 'feature-list cf');
61770
61771
61772                 context.history()
61773                     .on('change.selectionList', function(difference) {
61774                         if (difference) drawList();
61775                     });
61776
61777                 drawList();
61778
61779
61780                 function drawList() {
61781                     var entities = selectedIDs
61782                         .map(function(id) { return context.hasEntity(id); })
61783                         .filter(function(entity) { return entity; });
61784
61785                     var items = list.selectAll('.feature-list-item')
61786                         .data(entities, osmEntity.key);
61787
61788                     items.exit()
61789                         .remove();
61790
61791                     // Enter
61792                     var enter = items.enter()
61793                         .append('div')
61794                         .attr('class', 'feature-list-item')
61795                         .on('click', selectEntity);
61796
61797                     enter
61798                         .each(function(d) {
61799                             d3_select(this).on('mouseover', function() {
61800                                 utilHighlightEntities([d.id], true, context);
61801                             });
61802                             d3_select(this).on('mouseout', function() {
61803                                 utilHighlightEntities([d.id], false, context);
61804                             });
61805                         });
61806
61807                     var label = enter
61808                         .append('button')
61809                         .attr('class', 'label');
61810
61811                     enter
61812                         .append('button')
61813                         .attr('class', 'close')
61814                         .on('click', deselectEntity)
61815                         .call(svgIcon('#iD-icon-close'));
61816
61817                     label
61818                         .append('span')
61819                         .attr('class', 'entity-geom-icon')
61820                         .call(svgIcon('', 'pre-text'));
61821
61822                     label
61823                         .append('span')
61824                         .attr('class', 'entity-type');
61825
61826                     label
61827                         .append('span')
61828                         .attr('class', 'entity-name');
61829
61830                     // Update
61831                     items = items.merge(enter);
61832
61833                     items.selectAll('.entity-geom-icon use')
61834                         .attr('href', function() {
61835                             var entity = this.parentNode.parentNode.__data__;
61836                             return '#iD-icon-' + context.geometry(entity.id);
61837                         });
61838
61839                     items.selectAll('.entity-type')
61840                         .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
61841
61842                     items.selectAll('.entity-name')
61843                         .text(function(entity) { return utilDisplayName(entity); });
61844                 }
61845             }
61846
61847             return selectionList;
61848         }
61849
61850         function uiRadialMenu(context, operations) {
61851             var menu;
61852             var center = [0, 0];
61853             var tooltip;
61854
61855
61856             var radialMenu = function(selection) {
61857                 if (!operations.length) return;
61858
61859                 selection.node().parentNode.focus();
61860
61861                 function click(operation) {
61862                     event.stopPropagation();
61863                     if (operation.disabled()) return;
61864                     operation();
61865                     radialMenu.close();
61866                 }
61867
61868                 menu = selection
61869                     .append('g')
61870                     .attr('class', 'radial-menu')
61871                     .attr('transform', 'translate(' + center + ')')
61872                     .attr('opacity', 0);
61873
61874                 menu
61875                     .transition()
61876                     .attr('opacity', 1);
61877
61878                 var r = 50;
61879                 var a = Math.PI / 4;
61880                 var a0 = -Math.PI / 4;
61881                 var a1 = a0 + (operations.length - 1) * a;
61882
61883                 menu
61884                     .append('path')
61885                     .attr('class', 'radial-menu-background')
61886                     .attr('d', 'M' + r * Math.sin(a0) + ',' +
61887                                      r * Math.cos(a0) +
61888                               ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
61889                                      (r * Math.sin(a1) + 1e-3) + ',' +
61890                                      (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
61891                     .attr('stroke-width', 50)
61892                     .attr('stroke-linecap', 'round');
61893
61894                 var button = menu.selectAll()
61895                     .data(operations)
61896                     .enter()
61897                     .append('g')
61898                     .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
61899                     .classed('disabled', function(d) { return d.disabled(); })
61900                     .attr('transform', function(d, i) {
61901                         return 'translate(' + geoVecFloor([
61902                                 r * Math.sin(a0 + i * a),
61903                                 r * Math.cos(a0 + i * a)]).join(',') + ')';
61904                     });
61905
61906                 button
61907                     .append('circle')
61908                     .attr('r', 15)
61909                     .on('click', click)
61910                     .on('mousedown', mousedown)
61911                     .on('mouseover', mouseover)
61912                     .on('mouseout', mouseout);
61913
61914                 button
61915                     .append('use')
61916                     .attr('transform', 'translate(-10,-10)')
61917                     .attr('width', '20')
61918                     .attr('height', '20')
61919                     .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
61920
61921                 tooltip = d3_select(document.body)
61922                     .append('div')
61923                     .attr('class', 'tooltip-inner radial-menu-tooltip');
61924
61925                 function mousedown() {
61926                     event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
61927                 }
61928
61929                 function mouseover(d, i) {
61930                     var rect = context.surfaceRect();
61931                     var angle = a0 + i * a;
61932                     var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
61933                     var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
61934                     var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
61935                     var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
61936
61937                     tooltip
61938                         .style('top', null)
61939                         .style('left', null)
61940                         .style('bottom', null)
61941                         .style('right', null)
61942                         .style('display', 'block')
61943                         .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
61944
61945                     if (i === 0) {
61946                         tooltip
61947                             .style('right', right)
61948                             .style('top', top);
61949                     } else if (i >= 4) {
61950                         tooltip
61951                             .style('left', left)
61952                             .style('bottom', bottom);
61953                     } else {
61954                         tooltip
61955                             .style('left', left)
61956                             .style('top', top);
61957                     }
61958                 }
61959
61960                 function mouseout() {
61961                     tooltip.style('display', 'none');
61962                 }
61963             };
61964
61965
61966             radialMenu.close = function() {
61967                 if (menu) {
61968                     menu
61969                         .style('pointer-events', 'none')
61970                         .transition()
61971                         .attr('opacity', 0)
61972                         .remove();
61973                 }
61974
61975                 if (tooltip) {
61976                     tooltip.remove();
61977                 }
61978             };
61979
61980
61981             radialMenu.center = function(_) {
61982                 if (!arguments.length) return center;
61983                 center = _;
61984                 return radialMenu;
61985             };
61986
61987
61988             return radialMenu;
61989         }
61990
61991         var _relatedParent;
61992
61993
61994         function modeSelect(context, selectedIDs) {
61995             var mode = {
61996                 id: 'select',
61997                 button: 'browse'
61998             };
61999
62000             var keybinding = utilKeybinding('select');
62001             var behaviors = [
62002                 behaviorCopy(context),
62003                 behaviorPaste(context),
62004                 behaviorBreathe(),
62005                 behaviorHover(context),
62006                 behaviorSelect(context),
62007                 behaviorLasso(context),
62008                 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
62009                 modeDragNote(context).behavior
62010             ];
62011             var editMenu;
62012             var _timeout = null;
62013             var _newFeature = false;
62014             var _suppressMenu = true;
62015             var _follow = false;
62016
62017
62018             var wrap = context.container()
62019                 .select('.inspector-wrap');
62020
62021
62022             function singular() {
62023                 if (selectedIDs && selectedIDs.length === 1) {
62024                     return context.hasEntity(selectedIDs[0]);
62025                 }
62026             }
62027
62028
62029             function checkSelectedIDs() {
62030                 var ids = [];
62031                 if (Array.isArray(selectedIDs)) {
62032                     ids = selectedIDs.filter(function(id) {
62033                         return context.hasEntity(id);
62034                     });
62035                 }
62036
62037                 if (ids.length) {
62038                     selectedIDs = ids;
62039                 } else {
62040                     context.enter(modeBrowse(context));
62041                 }
62042                 return !!ids.length;
62043             }
62044
62045
62046             // find the common parent ways for nextVertex, previousVertex
62047             function commonParents() {
62048                 var graph = context.graph();
62049                 var commonParents = [];
62050
62051                 for (var i = 0; i < selectedIDs.length; i++) {
62052                     var entity = context.hasEntity(selectedIDs[i]);
62053                     if (!entity || entity.geometry(graph) !== 'vertex') {
62054                         return [];  // selection includes some not vertexes
62055                     }
62056
62057                     var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
62058                     if (!commonParents.length) {
62059                         commonParents = currParents;
62060                         continue;
62061                     }
62062
62063                     commonParents = utilArrayIntersection(commonParents, currParents);
62064                     if (!commonParents.length) {
62065                         return [];
62066                     }
62067                 }
62068
62069                 return commonParents;
62070             }
62071
62072
62073             function singularParent() {
62074                 var parents = commonParents();
62075                 if (!parents || parents.length === 0) {
62076                     _relatedParent = null;
62077                     return null;
62078                 }
62079
62080                 // relatedParent is used when we visit a vertex with multiple
62081                 // parents, and we want to remember which parent line we started on.
62082
62083                 if (parents.length === 1) {
62084                     _relatedParent = parents[0];  // remember this parent for later
62085                     return _relatedParent;
62086                 }
62087
62088                 if (parents.indexOf(_relatedParent) !== -1) {
62089                     return _relatedParent;   // prefer the previously seen parent
62090                 }
62091
62092                 return parents[0];
62093             }
62094
62095
62096             function closeMenu() {
62097                 if (editMenu) {
62098                     context.surface().call(editMenu.close);
62099                 }
62100             }
62101
62102
62103             function positionMenu() {
62104                 if (!editMenu) return;
62105
62106                 var entity = singular();
62107                 if (entity && context.geometry(entity.id) === 'relation') {
62108                     _suppressMenu = true;
62109                 } else {
62110                     var point = context.mouse();
62111                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
62112
62113                     if (point && geoPointInPolygon(point, viewport)) {
62114                         editMenu.center(point);
62115                     } else {
62116                         _suppressMenu = true;
62117                     }
62118                 }
62119             }
62120
62121
62122             function showMenu() {
62123                 closeMenu();
62124                 if (editMenu) {
62125                     context.surface().call(editMenu);
62126                 }
62127             }
62128
62129
62130             function toggleMenu() {
62131                 // deprecation warning - Radial Menu to be removed in iD v3
62132                 if (d3_select('.edit-menu, .radial-menu').empty()) {
62133                     positionMenu();
62134                     showMenu();
62135                 } else {
62136                     closeMenu();
62137                 }
62138             }
62139
62140
62141             mode.selectedIDs = function() {
62142                 return selectedIDs;
62143             };
62144
62145
62146             mode.zoomToSelected = function() {
62147                 var entity = singular();
62148                 if (entity) {
62149                     context.map().zoomToEase(entity);
62150                 }
62151             };
62152
62153
62154             mode.reselect = function() {
62155                 if (!checkSelectedIDs()) return;
62156
62157                 var surfaceNode = context.surface().node();
62158                 if (surfaceNode.focus) {   // FF doesn't support it
62159                     surfaceNode.focus();
62160                 }
62161
62162                 positionMenu();
62163                 if (!_suppressMenu) {
62164                     showMenu();
62165                 }
62166             };
62167
62168
62169             mode.newFeature = function(val) {
62170                 if (!arguments.length) return _newFeature;
62171                 _newFeature = val;
62172                 return mode;
62173             };
62174
62175
62176             mode.suppressMenu = function(val) {
62177                 if (!arguments.length) return _suppressMenu;
62178                 _suppressMenu = val;
62179                 return mode;
62180             };
62181
62182
62183             mode.follow = function(val) {
62184                 if (!arguments.length) return _follow;
62185                 _follow = val;
62186                 return mode;
62187             };
62188
62189             var operations = [];
62190
62191             function loadOperations() {
62192
62193                 operations.forEach(function(operation) {
62194                     if (operation.behavior) {
62195                         context.uninstall(operation.behavior);
62196                     }
62197                 });
62198
62199                 operations = Object.values(Operations)
62200                     .map(function(o) { return o(selectedIDs, context); })
62201                     .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
62202
62203                 var downgradeOperation = operationDowngrade(selectedIDs, context);
62204                 // don't allow delete if downgrade is available
62205                 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
62206
62207                 // deprecation warning - Radial Menu to be removed in iD v3
62208                 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
62209                 if (isRadialMenu) {
62210                     operations = operations.slice(0,7);
62211                     operations.unshift(lastOperation);
62212                 } else {
62213                     operations.push(lastOperation);
62214                 }
62215
62216                 operations.forEach(function(operation) {
62217                     if (operation.behavior) {
62218                         context.install(operation.behavior);
62219                     }
62220                 });
62221
62222                 // deprecation warning - Radial Menu to be removed in iD v3
62223                 editMenu = isRadialMenu
62224                     ? uiRadialMenu(context, operations)
62225                     : uiEditMenu(context, operations);
62226
62227             }
62228
62229
62230             mode.enter = function() {
62231                 if (!checkSelectedIDs()) return;
62232
62233                 context.features().forceVisible(selectedIDs);
62234
62235                 loadOperations();
62236
62237                 behaviors.forEach(context.install);
62238
62239                 keybinding
62240                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
62241                     .on(['[', 'pgup'], previousVertex)
62242                     .on([']', 'pgdown'], nextVertex)
62243                     .on(['{', uiCmd('⌘['), 'home'], firstVertex)
62244                     .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
62245                     .on(['\\', 'pause'], nextParent)
62246                     .on('⎋', esc, true)
62247                     .on('space', toggleMenu);
62248
62249                 d3_select(document)
62250                     .call(keybinding);
62251
62252                 context.ui().sidebar
62253                     .select(singular() ? singular().id : null, _newFeature);
62254
62255                 context.history()
62256                     .on('change.select', loadOperations)
62257                     .on('undone.select', update)
62258                     .on('redone.select', update);
62259
62260                 context.map()
62261                     .on('move.select', closeMenu)
62262                     .on('drawn.select', selectElements);
62263
62264                 context.surface()
62265                     .on('dblclick.select', dblclick);
62266
62267
62268                 selectElements();
62269
62270                 if (selectedIDs.length > 1) {
62271                     var entities = uiSelectionList(context, selectedIDs);
62272                     context.ui().sidebar.show(entities);
62273                 }
62274
62275                 if (_follow) {
62276                     var extent = geoExtent();
62277                     var graph = context.graph();
62278                     selectedIDs.forEach(function(id) {
62279                         var entity = context.entity(id);
62280                         extent._extend(entity.extent(graph));
62281                     });
62282
62283                     var loc = extent.center();
62284                     context.map().centerEase(loc);
62285                 } else if (singular() && singular().type === 'way') {
62286                     context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
62287                 }
62288
62289                 _timeout = window.setTimeout(function() {
62290                     positionMenu();
62291                     if (!_suppressMenu) {
62292                         showMenu();
62293                     }
62294                 }, 270);  /* after any centerEase completes */
62295
62296
62297                 function update() {
62298                     closeMenu();
62299                     checkSelectedIDs();
62300                 }
62301
62302
62303                 function dblclick() {
62304                     var target = d3_select(event.target);
62305
62306                     var datum = target.datum();
62307                     var entity = datum && datum.properties && datum.properties.entity;
62308                     if (!entity) return;
62309
62310                     if (entity instanceof osmWay && target.classed('target')) {
62311                         var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
62312                         var prev = entity.nodes[choice.index - 1];
62313                         var next = entity.nodes[choice.index];
62314
62315                         context.perform(
62316                             actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
62317                             t('operations.add.annotation.vertex')
62318                         );
62319
62320                         event.preventDefault();
62321                         event.stopPropagation();
62322
62323                     } else if (entity.type === 'midpoint') {
62324                         context.perform(
62325                             actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
62326                             t('operations.add.annotation.vertex'));
62327
62328                         event.preventDefault();
62329                         event.stopPropagation();
62330                     }
62331                 }
62332
62333
62334                 function selectElements(drawn) {
62335                     if (!checkSelectedIDs()) return;
62336
62337                     var surface = context.surface();
62338                     var entity = singular();
62339
62340                     if (entity && context.geometry(entity.id) === 'relation') {
62341                         _suppressMenu = true;
62342                         return;
62343                     }
62344
62345                     surface.selectAll('.related')
62346                         .classed('related', false);
62347
62348                     singularParent();
62349                     if (_relatedParent) {
62350                         surface.selectAll(utilEntitySelector([_relatedParent]))
62351                             .classed('related', true);
62352                     }
62353
62354                     var selection = context.surface()
62355                         .selectAll(utilEntityOrMemberSelector(selectedIDs, context.graph()));
62356
62357                     if (selection.empty()) {
62358                         // Return to browse mode if selected DOM elements have
62359                         // disappeared because the user moved them out of view..
62360                         var source = event && event.type === 'zoom' && event.sourceEvent;
62361                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
62362                             context.enter(modeBrowse(context));
62363                         }
62364                     } else {
62365                         selection
62366                             .classed('selected', true);
62367                     }
62368                 }
62369
62370
62371                 function esc() {
62372                     if (d3_select('.combobox').size()) return;
62373                     context.enter(modeBrowse(context));
62374                 }
62375
62376
62377                 function firstVertex() {
62378                     event.preventDefault();
62379                     var entity = singular();
62380                     var parent = singularParent();
62381                     var way;
62382
62383                     if (entity && entity.type === 'way') {
62384                         way = entity;
62385                     } else if (parent) {
62386                         way = context.entity(parent);
62387                     }
62388
62389                     if (way) {
62390                         context.enter(
62391                             modeSelect(context, [way.first()]).follow(true)
62392                         );
62393                     }
62394                 }
62395
62396
62397                 function lastVertex() {
62398                     event.preventDefault();
62399                     var entity = singular();
62400                     var parent = singularParent();
62401                     var way;
62402
62403                     if (entity && entity.type === 'way') {
62404                         way = entity;
62405                     } else if (parent) {
62406                         way = context.entity(parent);
62407                     }
62408
62409                     if (way) {
62410                         context.enter(
62411                             modeSelect(context, [way.last()]).follow(true)
62412                         );
62413                     }
62414                 }
62415
62416
62417                 function previousVertex() {
62418                     event.preventDefault();
62419                     var parent = singularParent();
62420                     if (!parent) return;
62421
62422                     var way = context.entity(parent);
62423                     var length = way.nodes.length;
62424                     var curr = way.nodes.indexOf(selectedIDs[0]);
62425                     var index = -1;
62426
62427                     if (curr > 0) {
62428                         index = curr - 1;
62429                     } else if (way.isClosed()) {
62430                         index = length - 2;
62431                     }
62432
62433                     if (index !== -1) {
62434                         context.enter(
62435                             modeSelect(context, [way.nodes[index]]).follow(true)
62436                         );
62437                     }
62438                 }
62439
62440
62441                 function nextVertex() {
62442                     event.preventDefault();
62443                     var parent = singularParent();
62444                     if (!parent) return;
62445
62446                     var way = context.entity(parent);
62447                     var length = way.nodes.length;
62448                     var curr = way.nodes.indexOf(selectedIDs[0]);
62449                     var index = -1;
62450
62451                     if (curr < length - 1) {
62452                         index = curr + 1;
62453                     } else if (way.isClosed()) {
62454                         index = 0;
62455                     }
62456
62457                     if (index !== -1) {
62458                         context.enter(
62459                             modeSelect(context, [way.nodes[index]]).follow(true)
62460                         );
62461                     }
62462                 }
62463
62464
62465                 function nextParent() {
62466                     event.preventDefault();
62467                     var parents = commonParents();
62468                     if (!parents || parents.length < 2) return;
62469
62470                     var index = parents.indexOf(_relatedParent);
62471                     if (index < 0 || index > parents.length - 2) {
62472                         _relatedParent = parents[0];
62473                     } else {
62474                         _relatedParent = parents[index + 1];
62475                     }
62476
62477                     var surface = context.surface();
62478                     surface.selectAll('.related')
62479                         .classed('related', false);
62480
62481                     if (_relatedParent) {
62482                         surface.selectAll(utilEntitySelector([_relatedParent]))
62483                             .classed('related', true);
62484                     }
62485                 }
62486             };
62487
62488
62489             mode.exit = function() {
62490                 if (_timeout) window.clearTimeout(_timeout);
62491
62492                 operations.forEach(function(operation) {
62493                     if (operation.behavior) {
62494                         context.uninstall(operation.behavior);
62495                     }
62496                 });
62497
62498                 behaviors.forEach(context.uninstall);
62499
62500                 d3_select(document)
62501                     .call(keybinding.unbind);
62502
62503                 closeMenu();
62504                 editMenu = undefined;
62505
62506                 context.history()
62507                     .on('change.select', null)
62508                     .on('undone.select', null)
62509                     .on('redone.select', null);
62510
62511                 var surface = context.surface();
62512
62513                 surface
62514                     .on('dblclick.select', null);
62515
62516                 surface
62517                     .selectAll('.selected')
62518                     .classed('selected', false);
62519
62520                 surface
62521                     .selectAll('.highlighted')
62522                     .classed('highlighted', false);
62523
62524                 surface
62525                     .selectAll('.related')
62526                     .classed('related', false);
62527
62528                 context.map().on('drawn.select', null);
62529                 context.ui().sidebar.hide();
62530                 context.features().forceVisible([]);
62531
62532                 var entity = singular();
62533                 if (_newFeature && entity && entity.type === 'relation' &&
62534                     // no tags
62535                     Object.keys(entity.tags).length === 0 &&
62536                     // no parent relations
62537                     context.graph().parentRelations(entity).length === 0 &&
62538                     // no members or one member with no role
62539                     (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
62540                 ) {
62541                     // the user added this relation but didn't edit it at all, so just delete it
62542                     var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
62543                     context.perform(deleteAction, t('operations.delete.annotation.relation'));
62544                 }
62545             };
62546
62547
62548             return mode;
62549         }
62550
62551         function uiLasso(context) {
62552             var group, polygon;
62553
62554             lasso.coordinates = [];
62555
62556             function lasso(selection) {
62557                 context.container()
62558                     .classed('lasso', true);
62559
62560                 group = selection
62561                     .append('g')
62562                     .attr('class', 'lasso hide');
62563
62564                 polygon = group
62565                     .append('path')
62566                     .attr('class', 'lasso-path');
62567
62568                 group
62569                     .call(uiToggle(true));
62570             }
62571
62572
62573             function draw() {
62574                 if (polygon) {
62575                     polygon.data([lasso.coordinates])
62576                         .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
62577                 }
62578             }
62579
62580
62581             lasso.extent = function () {
62582                 return lasso.coordinates.reduce(function(extent, point) {
62583                     return extent.extend(geoExtent(point));
62584                 }, geoExtent());
62585             };
62586
62587
62588             lasso.p = function(_) {
62589                 if (!arguments.length) return lasso;
62590                 lasso.coordinates.push(_);
62591                 draw();
62592                 return lasso;
62593             };
62594
62595
62596             lasso.close = function() {
62597                 if (group) {
62598                     group.call(uiToggle(false, function() {
62599                         d3_select(this).remove();
62600                     }));
62601                 }
62602                 context.container().classed('lasso', false);
62603             };
62604
62605
62606             return lasso;
62607         }
62608
62609         function behaviorLasso(context) {
62610
62611             var behavior = function(selection) {
62612                 var lasso;
62613
62614
62615                 function mousedown() {
62616                     var button = 0;  // left
62617                     if (event.button === button && event.shiftKey === true) {
62618                         lasso = null;
62619
62620                         d3_select(window)
62621                             .on('mousemove.lasso', mousemove)
62622                             .on('mouseup.lasso', mouseup);
62623
62624                         event.stopPropagation();
62625                     }
62626                 }
62627
62628
62629                 function mousemove() {
62630                     if (!lasso) {
62631                         lasso = uiLasso(context);
62632                         context.surface().call(lasso);
62633                     }
62634
62635                     lasso.p(context.mouse());
62636                 }
62637
62638
62639                 function normalize(a, b) {
62640                     return [
62641                         [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
62642                         [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
62643                     ];
62644                 }
62645
62646
62647                 function lassoed() {
62648                     if (!lasso) return [];
62649
62650                     var graph = context.graph();
62651                     var bounds = lasso.extent().map(context.projection.invert);
62652                     var extent = geoExtent(normalize(bounds[0], bounds[1]));
62653
62654                     var intersects = context.intersects(extent).filter(function(entity) {
62655                         return entity.type === 'node' &&
62656                             geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
62657                             !context.features().isHidden(entity, graph, entity.geometry(graph));
62658                     });
62659
62660                     return intersects.map(function(entity) { return entity.id; });
62661                 }
62662
62663
62664                 function mouseup() {
62665                     d3_select(window)
62666                         .on('mousemove.lasso', null)
62667                         .on('mouseup.lasso', null);
62668
62669                     if (!lasso) return;
62670
62671                     var ids = lassoed();
62672                     lasso.close();
62673
62674                     if (ids.length) {
62675                         context.enter(modeSelect(context, ids));
62676                     }
62677                 }
62678
62679                 selection
62680                     .on('mousedown.lasso', mousedown);
62681             };
62682
62683
62684             behavior.off = function(selection) {
62685                 selection.on('mousedown.lasso', null);
62686             };
62687
62688
62689             return behavior;
62690         }
62691
62692         function modeBrowse(context) {
62693             var mode = {
62694                 button: 'browse',
62695                 id: 'browse',
62696                 title: t('modes.browse.title'),
62697                 description: t('modes.browse.description')
62698             }, sidebar;
62699
62700             var behaviors = [
62701                 behaviorPaste(context),
62702                 behaviorHover(context).on('hover', context.ui().sidebar.hover),
62703                 behaviorSelect(context),
62704                 behaviorLasso(context),
62705                 modeDragNode(context).behavior,
62706                 modeDragNote(context).behavior
62707             ];
62708
62709
62710             mode.enter = function() {
62711                 behaviors.forEach(context.install);
62712
62713                 // Get focus on the body.
62714                 if (document.activeElement && document.activeElement.blur) {
62715                     document.activeElement.blur();
62716                 }
62717
62718                 if (sidebar) {
62719                     context.ui().sidebar.show(sidebar);
62720                 } else {
62721                     context.ui().sidebar.select(null);
62722                 }
62723             };
62724
62725
62726             mode.exit = function() {
62727                 context.ui().sidebar.hover.cancel();
62728                 behaviors.forEach(context.uninstall);
62729
62730                 if (sidebar) {
62731                     context.ui().sidebar.hide();
62732                 }
62733             };
62734
62735
62736             mode.sidebar = function(_) {
62737                 if (!arguments.length) return sidebar;
62738                 sidebar = _;
62739                 return mode;
62740             };
62741
62742
62743             return mode;
62744         }
62745
62746         function behaviorAddWay(context) {
62747             var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
62748             var draw = behaviorDraw(context);
62749
62750             function behavior(surface) {
62751                 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
62752                     .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
62753                     .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
62754                     .on('cancel', behavior.cancel)
62755                     .on('finish', behavior.cancel);
62756
62757                 context.map()
62758                     .dblclickEnable(false);
62759
62760                 surface.call(draw);
62761             }
62762
62763
62764             behavior.off = function(surface) {
62765                 surface.call(draw.off);
62766             };
62767
62768
62769             behavior.cancel = function() {
62770                 window.setTimeout(function() {
62771                     context.map().dblclickEnable(true);
62772                 }, 1000);
62773
62774                 context.enter(modeBrowse(context));
62775             };
62776
62777
62778             behavior.tail = function(text) {
62779                 draw.tail(text);
62780                 return behavior;
62781             };
62782
62783
62784             return utilRebind(behavior, dispatch$1, 'on');
62785         }
62786
62787         function behaviorHash(context) {
62788             var s0 = null; // cached window.location.hash
62789             var lat = 90 - 1e-8; // allowable latitude range
62790
62791
62792             var parser = function(map, s) {
62793                 var q = utilStringQs(s);
62794                 var args = (q.map || '').split('/').map(Number);
62795
62796                 if (args.length < 3 || args.some(isNaN)) {
62797                     return true; // replace bogus hash
62798
62799                 } else if (s !== formatter(map).slice(1)) {   // hash has changed
62800                     var mode = context.mode();
62801                     var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
62802                     var maxdist = 500;
62803
62804                     // Don't allow the hash location to change too much while drawing
62805                     // This can happen if the user accidently hit the back button.  #3996
62806                     if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
62807                         context.enter(modeBrowse(context));
62808                     }
62809
62810                     map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
62811                 }
62812             };
62813
62814
62815             var formatter = function(map) {
62816                 var center = map.center();
62817                 var zoom = map.zoom();
62818                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
62819                 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
62820                     ['comment', 'source', 'hashtags', 'walkthrough']
62821                 );
62822                 var newParams = {};
62823
62824                 delete q.id;
62825                 var selected = context.selectedIDs().filter(function(id) {
62826                     return !context.entity(id).isNew();
62827                 });
62828                 if (selected.length) {
62829                     newParams.id = selected.join(',');
62830                 }
62831
62832                 newParams.map = zoom.toFixed(2) +
62833                     '/' + center[1].toFixed(precision) +
62834                     '/' + center[0].toFixed(precision);
62835
62836                 return '#' + utilQsString(Object.assign(q, newParams), true);
62837             };
62838
62839
62840             function update() {
62841                 if (context.inIntro()) return;
62842                 var s1 = formatter(context.map());
62843                 if (s0 !== s1) {
62844                     window.location.replace(s0 = s1);  // don't recenter the map!
62845                 }
62846             }
62847
62848
62849             var throttledUpdate = throttle(update, 500);
62850
62851
62852             function hashchange() {
62853                 if (window.location.hash === s0) return;  // ignore spurious hashchange events
62854                 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
62855                     update(); // replace bogus hash
62856                 }
62857             }
62858
62859
62860             function behavior() {
62861                 context.map()
62862                     .on('move.hash', throttledUpdate);
62863
62864                 context
62865                     .on('enter.hash', throttledUpdate);
62866
62867                 d3_select(window)
62868                     .on('hashchange.hash', hashchange);
62869
62870                 if (window.location.hash) {
62871                     var q = utilStringQs(window.location.hash.substring(1));
62872
62873                     if (q.id) {
62874                         context.zoomToEntity(q.id.split(',')[0], !q.map);
62875                     }
62876
62877                     // Store these here instead of updating local storage since local
62878                     // storage could be flushed if the user discards pending changes
62879                     if (q.comment)  behavior.comment = q.comment;
62880                     if (q.source)   behavior.source = q.source;
62881                     if (q.hashtags) behavior.hashtags = q.hashtags;
62882
62883                     if (q.walkthrough === 'true') {
62884                         behavior.startWalkthrough = true;
62885                     }
62886
62887                     hashchange();
62888
62889                     if (q.map) {
62890                         behavior.hadHash = true;
62891                     }
62892                 }
62893             }
62894
62895
62896             behavior.off = function() {
62897                 throttledUpdate.cancel();
62898
62899                 context.map()
62900                     .on('move.hash', null);
62901
62902                 context
62903                     .on('enter.hash', null);
62904
62905                 d3_select(window)
62906                     .on('hashchange.hash', null);
62907
62908                 window.location.hash = '';
62909             };
62910
62911
62912             return behavior;
62913         }
62914
62915         /*
62916             iD.coreDifference represents the difference between two graphs.
62917             It knows how to calculate the set of entities that were
62918             created, modified, or deleted, and also contains the logic
62919             for recursively extending a difference to the complete set
62920             of entities that will require a redraw, taking into account
62921             child and parent relationships.
62922          */
62923         function coreDifference(base, head) {
62924             var _changes = {};
62925             var _didChange = {};  // 'addition', 'deletion', 'geometry', 'properties'
62926             var _diff = {};
62927
62928             function checkEntityID(id) {
62929                 var h = head.entities[id];
62930                 var b = base.entities[id];
62931
62932                 if (h === b) return;
62933                 if (_changes[id]) return;
62934
62935                 if (!h && b) {
62936                     _changes[id] = { base: b, head: h };
62937                     _didChange.deletion = true;
62938                     return;
62939                 }
62940                 if (h && !b) {
62941                     _changes[id] = { base: b, head: h };
62942                     _didChange.addition = true;
62943                     return;
62944                 }
62945
62946                 if (h && b) {
62947                     if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
62948                         _changes[id] = { base: b, head: h };
62949                         _didChange.geometry = true;
62950                         _didChange.properties = true;
62951                         return;
62952                     }
62953                     if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
62954                         _changes[id] = { base: b, head: h };
62955                         _didChange.geometry = true;
62956                     }
62957                     if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
62958                         _changes[id] = { base: b, head: h };
62959                         _didChange.geometry = true;
62960                     }
62961                     if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
62962                         _changes[id] = { base: b, head: h };
62963                         _didChange.properties = true;
62964                     }
62965                 }
62966             }
62967
62968             Object.keys(head.entities).forEach(checkEntityID);
62969             Object.keys(base.entities).forEach(checkEntityID);
62970
62971
62972             _diff.length = function length() {
62973                 return Object.keys(_changes).length;
62974             };
62975
62976
62977             _diff.changes = function changes() {
62978                 return _changes;
62979             };
62980
62981             _diff.didChange = _didChange;
62982
62983
62984             // pass true to include affected relation members
62985             _diff.extantIDs = function extantIDs(includeRelMembers) {
62986                 var result = new Set();
62987                 Object.keys(_changes).forEach(function(id) {
62988                     if (_changes[id].head) {
62989                         result.add(id);
62990                     }
62991
62992                     var h = _changes[id].head;
62993                     var b = _changes[id].base;
62994                     var entity = h || b;
62995
62996                     if (includeRelMembers && entity.type === 'relation') {
62997                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
62998                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
62999                         utilArrayUnion(mh, mb).forEach(function(memberID) {
63000                             if (head.hasEntity(memberID)) {
63001                                 result.add(memberID);
63002                             }
63003                         });
63004                     }
63005                 });
63006
63007                 return Array.from(result);
63008             };
63009
63010
63011             _diff.modified = function modified() {
63012                 var result = [];
63013                 Object.values(_changes).forEach(function(change) {
63014                     if (change.base && change.head) {
63015                         result.push(change.head);
63016                     }
63017                 });
63018                 return result;
63019             };
63020
63021
63022             _diff.created = function created() {
63023                 var result = [];
63024                 Object.values(_changes).forEach(function(change) {
63025                     if (!change.base && change.head) {
63026                         result.push(change.head);
63027                     }
63028                 });
63029                 return result;
63030             };
63031
63032
63033             _diff.deleted = function deleted() {
63034                 var result = [];
63035                 Object.values(_changes).forEach(function(change) {
63036                     if (change.base && !change.head) {
63037                         result.push(change.base);
63038                     }
63039                 });
63040                 return result;
63041             };
63042
63043
63044             _diff.summary = function summary() {
63045                 var relevant = {};
63046
63047                 var keys = Object.keys(_changes);
63048                 for (var i = 0; i < keys.length; i++) {
63049                     var change = _changes[keys[i]];
63050
63051                     if (change.head && change.head.geometry(head) !== 'vertex') {
63052                         addEntity(change.head, head, change.base ? 'modified' : 'created');
63053
63054                     } else if (change.base && change.base.geometry(base) !== 'vertex') {
63055                         addEntity(change.base, base, 'deleted');
63056
63057                     } else if (change.base && change.head) { // modified vertex
63058                         var moved    = !fastDeepEqual(change.base.loc,  change.head.loc);
63059                         var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
63060
63061                         if (moved) {
63062                             addParents(change.head);
63063                         }
63064
63065                         if (retagged || (moved && change.head.hasInterestingTags())) {
63066                             addEntity(change.head, head, 'modified');
63067                         }
63068
63069                     } else if (change.head && change.head.hasInterestingTags()) { // created vertex
63070                         addEntity(change.head, head, 'created');
63071
63072                     } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
63073                         addEntity(change.base, base, 'deleted');
63074                     }
63075                 }
63076
63077                 return Object.values(relevant);
63078
63079
63080                 function addEntity(entity, graph, changeType) {
63081                     relevant[entity.id] = {
63082                         entity: entity,
63083                         graph: graph,
63084                         changeType: changeType
63085                     };
63086                 }
63087
63088                 function addParents(entity) {
63089                     var parents = head.parentWays(entity);
63090                     for (var j = parents.length - 1; j >= 0; j--) {
63091                         var parent = parents[j];
63092                         if (!(parent.id in relevant)) {
63093                             addEntity(parent, head, 'modified');
63094                         }
63095                     }
63096                 }
63097             };
63098
63099
63100             // returns complete set of entities that require a redraw
63101             //  (optionally within given `extent`)
63102             _diff.complete = function complete(extent) {
63103                 var result = {};
63104                 var id, change;
63105
63106                 for (id in _changes) {
63107                     change = _changes[id];
63108
63109                     var h = change.head;
63110                     var b = change.base;
63111                     var entity = h || b;
63112                     var i;
63113
63114                     if (extent &&
63115                         (!h || !h.intersects(extent, head)) &&
63116                         (!b || !b.intersects(extent, base)))
63117                         continue;
63118
63119                     result[id] = h;
63120
63121                     if (entity.type === 'way') {
63122                         var nh = h ? h.nodes : [];
63123                         var nb = b ? b.nodes : [];
63124                         var diff;
63125
63126                         diff = utilArrayDifference(nh, nb);
63127                         for (i = 0; i < diff.length; i++) {
63128                             result[diff[i]] = head.hasEntity(diff[i]);
63129                         }
63130
63131                         diff = utilArrayDifference(nb, nh);
63132                         for (i = 0; i < diff.length; i++) {
63133                             result[diff[i]] = head.hasEntity(diff[i]);
63134                         }
63135                     }
63136
63137                     if (entity.type === 'relation' && entity.isMultipolygon()) {
63138                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
63139                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
63140                         var ids = utilArrayUnion(mh, mb);
63141                         for (i = 0; i < ids.length; i++) {
63142                             var member = head.hasEntity(ids[i]);
63143                             if (!member) continue;   // not downloaded
63144                             if (extent && !member.intersects(extent, head)) continue;   // not visible
63145                             result[ids[i]] = member;
63146                         }
63147                     }
63148
63149                     addParents(head.parentWays(entity), result);
63150                     addParents(head.parentRelations(entity), result);
63151                 }
63152
63153                 return result;
63154
63155
63156                 function addParents(parents, result) {
63157                     for (var i = 0; i < parents.length; i++) {
63158                         var parent = parents[i];
63159                         if (parent.id in result) continue;
63160
63161                         result[parent.id] = parent;
63162                         addParents(head.parentRelations(parent), result);
63163                     }
63164                 }
63165             };
63166
63167
63168             return _diff;
63169         }
63170
63171         function coreTree(head) {
63172             var rtree = rbush_1();
63173             var bboxes = {};
63174             var tree = {};
63175
63176
63177             function entityBBox(entity) {
63178                 var bbox = entity.extent(head).bbox();
63179                 bbox.id = entity.id;
63180                 bboxes[entity.id] = bbox;
63181                 return bbox;
63182             }
63183
63184
63185             function updateParents(entity, insertions, memo) {
63186                 head.parentWays(entity).forEach(function(way) {
63187                     if (bboxes[way.id]) {
63188                         rtree.remove(bboxes[way.id]);
63189                         insertions[way.id] = way;
63190                     }
63191                     updateParents(way, insertions, memo);
63192                 });
63193
63194                 head.parentRelations(entity).forEach(function(relation) {
63195                     if (memo[entity.id]) return;
63196                     memo[entity.id] = true;
63197                     if (bboxes[relation.id]) {
63198                         rtree.remove(bboxes[relation.id]);
63199                         insertions[relation.id] = relation;
63200                     }
63201                     updateParents(relation, insertions, memo);
63202                 });
63203             }
63204
63205
63206             tree.rebase = function(entities, force) {
63207                 var insertions = {};
63208
63209                 for (var i = 0; i < entities.length; i++) {
63210                     var entity = entities[i];
63211                     if (!entity.visible) continue;
63212
63213                     if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
63214                         if (!force) {
63215                             continue;
63216                         } else if (bboxes[entity.id]) {
63217                             rtree.remove(bboxes[entity.id]);
63218                         }
63219                     }
63220
63221                     insertions[entity.id] = entity;
63222                     updateParents(entity, insertions, {});
63223                 }
63224
63225                 rtree.load(Object.values(insertions).map(entityBBox));
63226
63227                 return tree;
63228             };
63229
63230
63231             tree.intersects = function(extent, graph) {
63232                 if (graph !== head) {
63233                     var diff = coreDifference(head, graph);
63234                     var changed = diff.didChange;
63235
63236                     if (changed.addition || changed.deletion || changed.geometry) {
63237                         var insertions = {};
63238                         head = graph;
63239
63240                         if (changed.deletion) {
63241                             diff.deleted().forEach(function(entity) {
63242                                 rtree.remove(bboxes[entity.id]);
63243                                 delete bboxes[entity.id];
63244                             });
63245                         }
63246
63247                         if (changed.geometry) {
63248                             diff.modified().forEach(function(entity) {
63249                                 rtree.remove(bboxes[entity.id]);
63250                                 insertions[entity.id] = entity;
63251                                 updateParents(entity, insertions, {});
63252                             });
63253                         }
63254
63255                         if (changed.addition) {
63256                             diff.created().forEach(function(entity) {
63257                                 insertions[entity.id] = entity;
63258                             });
63259                         }
63260
63261                         rtree.load(Object.values(insertions).map(entityBBox));
63262                     }
63263                 }
63264
63265                 return rtree.search(extent.bbox())
63266                     .map(function(bbox) { return graph.entity(bbox.id); });
63267             };
63268
63269
63270             return tree;
63271         }
63272
63273         function uiModal(selection, blocking) {
63274             var keybinding = utilKeybinding('modal');
63275             var previous = selection.select('div.modal');
63276             var animate = previous.empty();
63277
63278             previous.transition()
63279                 .duration(200)
63280                 .style('opacity', 0)
63281                 .remove();
63282
63283             var shaded = selection
63284                 .append('div')
63285                 .attr('class', 'shaded')
63286                 .style('opacity', 0);
63287
63288             shaded.close = function() {
63289                 shaded
63290                     .transition()
63291                     .duration(200)
63292                     .style('opacity',0)
63293                     .remove();
63294
63295                 modal
63296                     .transition()
63297                     .duration(200)
63298                     .style('top','0px');
63299
63300                 d3_select(document)
63301                     .call(keybinding.unbind);
63302             };
63303
63304
63305             var modal = shaded
63306                 .append('div')
63307                 .attr('class', 'modal fillL');
63308
63309             if (!blocking) {
63310                 shaded.on('click.remove-modal', function() {
63311                     if (event.target === this) {
63312                         shaded.close();
63313                     }
63314                 });
63315
63316                 modal.append('button')
63317                     .attr('class', 'close')
63318                     .on('click', shaded.close)
63319                     .call(svgIcon('#iD-icon-close'));
63320
63321                 keybinding
63322                     .on('⌫', shaded.close)
63323                     .on('⎋', shaded.close);
63324
63325                 d3_select(document)
63326                     .call(keybinding);
63327             }
63328
63329             modal
63330                 .append('div')
63331                 .attr('class', 'content');
63332
63333             if (animate) {
63334                 shaded.transition().style('opacity', 1);
63335             } else {
63336                 shaded.style('opacity', 1);
63337             }
63338
63339
63340             return shaded;
63341         }
63342
63343         function uiLoading(context) {
63344             var _modalSelection = d3_select(null);
63345             var _message = '';
63346             var _blocking = false;
63347
63348
63349             var loading = function(selection) {
63350                 _modalSelection = uiModal(selection, _blocking);
63351
63352                 var loadertext = _modalSelection.select('.content')
63353                     .classed('loading-modal', true)
63354                     .append('div')
63355                     .attr('class', 'modal-section fillL');
63356
63357                 loadertext
63358                     .append('img')
63359                     .attr('class', 'loader')
63360                     .attr('src', context.imagePath('loader-white.gif'));
63361
63362                 loadertext
63363                     .append('h3')
63364                     .text(_message);
63365
63366                 _modalSelection.select('button.close')
63367                     .attr('class', 'hide');
63368
63369                 return loading;
63370             };
63371
63372
63373             loading.message = function(_) {
63374                 if (!arguments.length) return _message;
63375                 _message = _;
63376                 return loading;
63377             };
63378
63379
63380             loading.blocking = function(_) {
63381                 if (!arguments.length) return _blocking;
63382                 _blocking = _;
63383                 return loading;
63384             };
63385
63386
63387             loading.close = function() {
63388                 _modalSelection.remove();
63389             };
63390
63391
63392             return loading;
63393         }
63394
63395         function coreHistory(context) {
63396             var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
63397             var lock = utilSessionMutex('lock');
63398             var duration = 150;
63399             var _imageryUsed = [];
63400             var _photoOverlaysUsed = [];
63401             var _checkpoints = {};
63402             var _pausedGraph;
63403             var _stack;
63404             var _index;
63405             var _tree;
63406
63407
63408             // internal _act, accepts list of actions and eased time
63409             function _act(actions, t) {
63410                 actions = Array.prototype.slice.call(actions);
63411
63412                 var annotation;
63413                 if (typeof actions[actions.length - 1] !== 'function') {
63414                     annotation = actions.pop();
63415                 }
63416
63417                 var graph = _stack[_index].graph;
63418                 for (var i = 0; i < actions.length; i++) {
63419                     graph = actions[i](graph, t);
63420                 }
63421
63422                 return {
63423                     graph: graph,
63424                     annotation: annotation,
63425                     imageryUsed: _imageryUsed,
63426                     photoOverlaysUsed: _photoOverlaysUsed,
63427                     transform: context.projection.transform(),
63428                     selectedIDs: context.selectedIDs()
63429                 };
63430             }
63431
63432
63433             // internal _perform with eased time
63434             function _perform(args, t) {
63435                 var previous = _stack[_index].graph;
63436                 _stack = _stack.slice(0, _index + 1);
63437                 var actionResult = _act(args, t);
63438                 _stack.push(actionResult);
63439                 _index++;
63440                 return change(previous);
63441             }
63442
63443
63444             // internal _replace with eased time
63445             function _replace(args, t) {
63446                 var previous = _stack[_index].graph;
63447                 // assert(_index == _stack.length - 1)
63448                 var actionResult = _act(args, t);
63449                 _stack[_index] = actionResult;
63450                 return change(previous);
63451             }
63452
63453
63454             // internal _overwrite with eased time
63455             function _overwrite(args, t) {
63456                 var previous = _stack[_index].graph;
63457                 if (_index > 0) {
63458                     _index--;
63459                     _stack.pop();
63460                 }
63461                 _stack = _stack.slice(0, _index + 1);
63462                 var actionResult = _act(args, t);
63463                 _stack.push(actionResult);
63464                 _index++;
63465                 return change(previous);
63466             }
63467
63468
63469             // determine difference and dispatch a change event
63470             function change(previous) {
63471                 var difference = coreDifference(previous, history.graph());
63472                 if (!_pausedGraph) {
63473                     dispatch$1.call('change', this, difference);
63474                 }
63475                 return difference;
63476             }
63477
63478
63479             // iD uses namespaced keys so multiple installations do not conflict
63480             function getKey(n) {
63481                 return 'iD_' + window.location.origin + '_' + n;
63482             }
63483
63484
63485             var history = {
63486
63487                 graph: function() {
63488                     return _stack[_index].graph;
63489                 },
63490
63491
63492                 tree: function() {
63493                     return _tree;
63494                 },
63495
63496
63497                 base: function() {
63498                     return _stack[0].graph;
63499                 },
63500
63501
63502                 merge: function(entities, extent) {
63503                     var stack = _stack.map(function(state) { return state.graph; });
63504                     _stack[0].graph.rebase(entities, stack, false);
63505                     _tree.rebase(entities, false);
63506
63507                     dispatch$1.call('merge', this, entities);
63508                 },
63509
63510
63511                 perform: function() {
63512                     // complete any transition already in progress
63513                     d3_select(document).interrupt('history.perform');
63514
63515                     var transitionable = false;
63516                     var action0 = arguments[0];
63517
63518                     if (arguments.length === 1 ||
63519                         (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
63520                         transitionable = !!action0.transitionable;
63521                     }
63522
63523                     if (transitionable) {
63524                         var origArguments = arguments;
63525                         d3_select(document)
63526                             .transition('history.perform')
63527                             .duration(duration)
63528                             .ease(linear$1)
63529                             .tween('history.tween', function() {
63530                                 return function(t) {
63531                                     if (t < 1) _overwrite([action0], t);
63532                                 };
63533                             })
63534                             .on('start', function() {
63535                                 _perform([action0], 0);
63536                             })
63537                             .on('end interrupt', function() {
63538                                 _overwrite(origArguments, 1);
63539                             });
63540
63541                     } else {
63542                         return _perform(arguments);
63543                     }
63544                 },
63545
63546
63547                 replace: function() {
63548                     d3_select(document).interrupt('history.perform');
63549                     return _replace(arguments, 1);
63550                 },
63551
63552
63553                 // Same as calling pop and then perform
63554                 overwrite: function() {
63555                     d3_select(document).interrupt('history.perform');
63556                     return _overwrite(arguments, 1);
63557                 },
63558
63559
63560                 pop: function(n) {
63561                     d3_select(document).interrupt('history.perform');
63562
63563                     var previous = _stack[_index].graph;
63564                     if (isNaN(+n) || +n < 0) {
63565                         n = 1;
63566                     }
63567                     while (n-- > 0 && _index > 0) {
63568                         _index--;
63569                         _stack.pop();
63570                     }
63571                     return change(previous);
63572                 },
63573
63574
63575                 // Back to the previous annotated state or _index = 0.
63576                 undo: function() {
63577                     d3_select(document).interrupt('history.perform');
63578
63579                     var previousStack = _stack[_index];
63580                     var previous = previousStack.graph;
63581                     while (_index > 0) {
63582                         _index--;
63583                         if (_stack[_index].annotation) break;
63584                     }
63585
63586                     dispatch$1.call('undone', this, _stack[_index], previousStack);
63587                     return change(previous);
63588                 },
63589
63590
63591                 // Forward to the next annotated state.
63592                 redo: function() {
63593                     d3_select(document).interrupt('history.perform');
63594
63595                     var previousStack = _stack[_index];
63596                     var previous = previousStack.graph;
63597                     var tryIndex = _index;
63598                     while (tryIndex < _stack.length - 1) {
63599                         tryIndex++;
63600                         if (_stack[tryIndex].annotation) {
63601                             _index = tryIndex;
63602                             dispatch$1.call('redone', this, _stack[_index], previousStack);
63603                             break;
63604                         }
63605                     }
63606
63607                     return change(previous);
63608                 },
63609
63610
63611                 pauseChangeDispatch: function() {
63612                     if (!_pausedGraph) {
63613                         _pausedGraph = _stack[_index].graph;
63614                     }
63615                 },
63616
63617
63618                 resumeChangeDispatch: function() {
63619                     if (_pausedGraph) {
63620                         var previous = _pausedGraph;
63621                         _pausedGraph = null;
63622                         return change(previous);
63623                     }
63624                 },
63625
63626
63627                 undoAnnotation: function() {
63628                     var i = _index;
63629                     while (i >= 0) {
63630                         if (_stack[i].annotation) return _stack[i].annotation;
63631                         i--;
63632                     }
63633                 },
63634
63635
63636                 redoAnnotation: function() {
63637                     var i = _index + 1;
63638                     while (i <= _stack.length - 1) {
63639                         if (_stack[i].annotation) return _stack[i].annotation;
63640                         i++;
63641                     }
63642                 },
63643
63644
63645                 intersects: function(extent) {
63646                     return _tree.intersects(extent, _stack[_index].graph);
63647                 },
63648
63649
63650                 difference: function() {
63651                     var base = _stack[0].graph;
63652                     var head = _stack[_index].graph;
63653                     return coreDifference(base, head);
63654                 },
63655
63656
63657                 changes: function(action) {
63658                     var base = _stack[0].graph;
63659                     var head = _stack[_index].graph;
63660
63661                     if (action) {
63662                         head = action(head);
63663                     }
63664
63665                     var difference = coreDifference(base, head);
63666
63667                     return {
63668                         modified: difference.modified(),
63669                         created: difference.created(),
63670                         deleted: difference.deleted()
63671                     };
63672                 },
63673
63674
63675                 hasChanges: function() {
63676                     return this.difference().length() > 0;
63677                 },
63678
63679
63680                 imageryUsed: function(sources) {
63681                     if (sources) {
63682                         _imageryUsed = sources;
63683                         return history;
63684                     } else {
63685                         var s = new Set();
63686                         _stack.slice(1, _index + 1).forEach(function(state) {
63687                             state.imageryUsed.forEach(function(source) {
63688                                 if (source !== 'Custom') {
63689                                     s.add(source);
63690                                 }
63691                             });
63692                         });
63693                         return Array.from(s);
63694                     }
63695                 },
63696
63697
63698                 photoOverlaysUsed: function(sources) {
63699                     if (sources) {
63700                         _photoOverlaysUsed = sources;
63701                         return history;
63702                     } else {
63703                         var s = new Set();
63704                         _stack.slice(1, _index + 1).forEach(function(state) {
63705                             if (state.photoOverlaysUsed && Array.isArray(state.photoOverlaysUsed)) {
63706                                 state.photoOverlaysUsed.forEach(function(photoOverlay) {
63707                                     s.add(photoOverlay);
63708                                 });
63709                             }
63710                         });
63711                         return Array.from(s);
63712                     }
63713                 },
63714
63715
63716                 // save the current history state
63717                 checkpoint: function(key) {
63718                     _checkpoints[key] = {
63719                         stack: _stack,
63720                         index: _index
63721                     };
63722                     return history;
63723                 },
63724
63725
63726                 // restore history state to a given checkpoint or reset completely
63727                 reset: function(key) {
63728                     if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
63729                         _stack = _checkpoints[key].stack;
63730                         _index = _checkpoints[key].index;
63731                     } else {
63732                         _stack = [{graph: coreGraph()}];
63733                         _index = 0;
63734                         _tree = coreTree(_stack[0].graph);
63735                         _checkpoints = {};
63736                     }
63737                     dispatch$1.call('change');
63738                     return history;
63739                 },
63740
63741
63742                 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
63743                 //
63744                 // To use it:
63745                 //  1. Start the walkthrough.
63746                 //  2. Get to a "free editing" tutorial step
63747                 //  3. Make your edits to the walkthrough map
63748                 //  4. In your browser dev console run:
63749                 //        `id.history().toIntroGraph()`
63750                 //  5. This outputs stringified JSON to the browser console
63751                 //  6. Copy it to `data/intro_graph.json` and prettify it in your code editor
63752                 toIntroGraph: function() {
63753                     var nextID = { n: 0, r: 0, w: 0 };
63754                     var permIDs = {};
63755                     var graph = this.graph();
63756                     var baseEntities = {};
63757
63758                     // clone base entities..
63759                     Object.values(graph.base().entities).forEach(function(entity) {
63760                         var copy = copyIntroEntity(entity);
63761                         baseEntities[copy.id] = copy;
63762                     });
63763
63764                     // replace base entities with head entities..
63765                     Object.keys(graph.entities).forEach(function(id) {
63766                         var entity = graph.entities[id];
63767                         if (entity) {
63768                             var copy = copyIntroEntity(entity);
63769                             baseEntities[copy.id] = copy;
63770                         } else {
63771                             delete baseEntities[id];
63772                         }
63773                     });
63774
63775                     // swap temporary for permanent ids..
63776                     Object.values(baseEntities).forEach(function(entity) {
63777                         if (Array.isArray(entity.nodes)) {
63778                             entity.nodes = entity.nodes.map(function(node) {
63779                                 return permIDs[node] || node;
63780                             });
63781                         }
63782                         if (Array.isArray(entity.members)) {
63783                             entity.members = entity.members.map(function(member) {
63784                                 member.id = permIDs[member.id] || member.id;
63785                                 return member;
63786                             });
63787                         }
63788                     });
63789
63790                     return JSON.stringify({ dataIntroGraph: baseEntities });
63791
63792
63793                     function copyIntroEntity(source) {
63794                         var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
63795
63796                         // Note: the copy is no longer an osmEntity, so it might not have `tags`
63797                         if (copy.tags && !Object.keys(copy.tags)) {
63798                             delete copy.tags;
63799                         }
63800
63801                         if (Array.isArray(copy.loc)) {
63802                             copy.loc[0] = +copy.loc[0].toFixed(6);
63803                             copy.loc[1] = +copy.loc[1].toFixed(6);
63804                         }
63805
63806                         var match = source.id.match(/([nrw])-\d*/);  // temporary id
63807                         if (match !== null) {
63808                             var nrw = match[1];
63809                             var permID;
63810                             do { permID = nrw + (++nextID[nrw]); }
63811                             while (baseEntities.hasOwnProperty(permID));
63812
63813                             copy.id = permIDs[source.id] = permID;
63814                         }
63815                         return copy;
63816                     }
63817                 },
63818
63819
63820                 toJSON: function() {
63821                     if (!this.hasChanges()) return;
63822
63823                     var allEntities = {};
63824                     var baseEntities = {};
63825                     var base = _stack[0];
63826
63827                     var s = _stack.map(function(i) {
63828                         var modified = [];
63829                         var deleted = [];
63830
63831                         Object.keys(i.graph.entities).forEach(function(id) {
63832                             var entity = i.graph.entities[id];
63833                             if (entity) {
63834                                 var key = osmEntity.key(entity);
63835                                 allEntities[key] = entity;
63836                                 modified.push(key);
63837                             } else {
63838                                 deleted.push(id);
63839                             }
63840
63841                             // make sure that the originals of changed or deleted entities get merged
63842                             // into the base of the _stack after restoring the data from JSON.
63843                             if (id in base.graph.entities) {
63844                                 baseEntities[id] = base.graph.entities[id];
63845                             }
63846                             if (entity && entity.nodes) {
63847                                 // get originals of pre-existing child nodes
63848                                 entity.nodes.forEach(function(nodeID) {
63849                                     if (nodeID in base.graph.entities) {
63850                                         baseEntities[nodeID] = base.graph.entities[nodeID];
63851                                     }
63852                                 });
63853                             }
63854                             // get originals of parent entities too
63855                             var baseParents = base.graph._parentWays[id];
63856                             if (baseParents) {
63857                                 baseParents.forEach(function(parentID) {
63858                                     if (parentID in base.graph.entities) {
63859                                         baseEntities[parentID] = base.graph.entities[parentID];
63860                                     }
63861                                 });
63862                             }
63863                         });
63864
63865                         var x = {};
63866
63867                         if (modified.length) x.modified = modified;
63868                         if (deleted.length) x.deleted = deleted;
63869                         if (i.imageryUsed) x.imageryUsed = i.imageryUsed;
63870                         if (i.photoOverlaysUsed) x.photoOverlaysUsed = i.photoOverlaysUsed;
63871                         if (i.annotation) x.annotation = i.annotation;
63872                         if (i.transform) x.transform = i.transform;
63873                         if (i.selectedIDs) x.selectedIDs = i.selectedIDs;
63874
63875                         return x;
63876                     });
63877
63878                     return JSON.stringify({
63879                         version: 3,
63880                         entities: Object.values(allEntities),
63881                         baseEntities: Object.values(baseEntities),
63882                         stack: s,
63883                         nextIDs: osmEntity.id.next,
63884                         index: _index
63885                     });
63886                 },
63887
63888
63889                 fromJSON: function(json, loadChildNodes) {
63890                     var h = JSON.parse(json);
63891                     var loadComplete = true;
63892
63893                     osmEntity.id.next = h.nextIDs;
63894                     _index = h.index;
63895
63896                     if (h.version === 2 || h.version === 3) {
63897                         var allEntities = {};
63898
63899                         h.entities.forEach(function(entity) {
63900                             allEntities[osmEntity.key(entity)] = osmEntity(entity);
63901                         });
63902
63903                         if (h.version === 3) {
63904                             // This merges originals for changed entities into the base of
63905                             // the _stack even if the current _stack doesn't have them (for
63906                             // example when iD has been restarted in a different region)
63907                             var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
63908                             var stack = _stack.map(function(state) { return state.graph; });
63909                             _stack[0].graph.rebase(baseEntities, stack, true);
63910                             _tree.rebase(baseEntities, true);
63911
63912                             // When we restore a modified way, we also need to fetch any missing
63913                             // childnodes that would normally have been downloaded with it.. #2142
63914                             if (loadChildNodes) {
63915                                 var osm = context.connection();
63916                                 var baseWays = baseEntities
63917                                     .filter(function(e) { return e.type === 'way'; });
63918                                 var nodeIDs = baseWays
63919                                     .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
63920                                 var missing = nodeIDs
63921                                     .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
63922
63923                                 if (missing.length && osm) {
63924                                     loadComplete = false;
63925                                     context.redrawEnable(false);
63926
63927                                     var loading = uiLoading(context).blocking(true);
63928                                     context.container().call(loading);
63929
63930                                     var childNodesLoaded = function(err, result) {
63931                                         if (!err) {
63932                                             var visibleGroups = utilArrayGroupBy(result.data, 'visible');
63933                                             var visibles = visibleGroups.true || [];      // alive nodes
63934                                             var invisibles = visibleGroups.false || [];   // deleted nodes
63935
63936                                             if (visibles.length) {
63937                                                 var visibleIDs = visibles.map(function(entity) { return entity.id; });
63938                                                 var stack = _stack.map(function(state) { return state.graph; });
63939                                                 missing = utilArrayDifference(missing, visibleIDs);
63940                                                 _stack[0].graph.rebase(visibles, stack, true);
63941                                                 _tree.rebase(visibles, true);
63942                                             }
63943
63944                                             // fetch older versions of nodes that were deleted..
63945                                             invisibles.forEach(function(entity) {
63946                                                 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
63947                                             });
63948                                         }
63949
63950                                         if (err || !missing.length) {
63951                                             loading.close();
63952                                             context.redrawEnable(true);
63953                                             dispatch$1.call('change');
63954                                             dispatch$1.call('restore', this);
63955                                         }
63956                                     };
63957
63958                                     osm.loadMultiple(missing, childNodesLoaded);
63959                                 }
63960                             }
63961                         }
63962
63963                         _stack = h.stack.map(function(d) {
63964                             var entities = {}, entity;
63965
63966                             if (d.modified) {
63967                                 d.modified.forEach(function(key) {
63968                                     entity = allEntities[key];
63969                                     entities[entity.id] = entity;
63970                                 });
63971                             }
63972
63973                             if (d.deleted) {
63974                                 d.deleted.forEach(function(id) {
63975                                     entities[id] = undefined;
63976                                 });
63977                             }
63978
63979                             return {
63980                                 graph: coreGraph(_stack[0].graph).load(entities),
63981                                 annotation: d.annotation,
63982                                 imageryUsed: d.imageryUsed,
63983                                 photoOverlaysUsed: d.photoOverlaysUsed,
63984                                 transform: d.transform,
63985                                 selectedIDs: d.selectedIDs
63986                             };
63987                         });
63988
63989                     } else { // original version
63990                         _stack = h.stack.map(function(d) {
63991                             var entities = {};
63992
63993                             for (var i in d.entities) {
63994                                 var entity = d.entities[i];
63995                                 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
63996                             }
63997
63998                             d.graph = coreGraph(_stack[0].graph).load(entities);
63999                             return d;
64000                         });
64001                     }
64002
64003                     var transform = _stack[_index].transform;
64004                     if (transform) {
64005                         context.map().transformEase(transform, 0);   // 0 = immediate, no easing
64006                     }
64007
64008                     if (loadComplete) {
64009                         dispatch$1.call('change');
64010                         dispatch$1.call('restore', this);
64011                     }
64012
64013                     return history;
64014                 },
64015
64016
64017                 save: function() {
64018                     if (lock.locked()) context.storage(getKey('saved_history'), history.toJSON() || null);
64019                     return history;
64020                 },
64021
64022
64023                 clearSaved: function() {
64024                     context.debouncedSave.cancel();
64025                     if (lock.locked()) {
64026                         context.storage(getKey('saved_history'), null);
64027
64028                         // clear the changeset metadata associated with the saved history
64029                         context.storage('comment', null);
64030                         context.storage('hashtags', null);
64031                         context.storage('source', null);
64032                     }
64033                     return history;
64034                 },
64035
64036
64037                 lock: function() {
64038                     return lock.lock();
64039                 },
64040
64041
64042                 unlock: function() {
64043                     lock.unlock();
64044                 },
64045
64046
64047                 // is iD not open in another window and it detects that
64048                 // there's a history stored in localStorage that's recoverable?
64049                 restorableChanges: function() {
64050                     return lock.locked() && !!context.storage(getKey('saved_history'));
64051                 },
64052
64053
64054                 // load history from a version stored in localStorage
64055                 restore: function() {
64056                     if (!lock.locked()) return;
64057
64058                     var json = context.storage(getKey('saved_history'));
64059                     if (json) history.fromJSON(json, true);
64060                 },
64061
64062
64063                 _getKey: getKey
64064
64065             };
64066
64067
64068             history.reset();
64069
64070             return utilRebind(history, dispatch$1, 'on');
64071         }
64072
64073         /**
64074          * Look for roads that can be connected to other roads with a short extension
64075          */
64076         function validationAlmostJunction(context) {
64077             var type = 'almost_junction';
64078
64079
64080             function isHighway(entity) {
64081                 return entity.type === 'way' &&
64082                     osmRoutableHighwayTagValues[entity.tags.highway];
64083             }
64084
64085             function isTaggedAsNotContinuing(node) {
64086                 return node.tags.noexit === 'yes' ||
64087                     node.tags.amenity === 'parking_entrance' ||
64088                     (node.tags.entrance && node.tags.entrance !== 'no');
64089             }
64090
64091
64092             var validation = function checkAlmostJunction(entity, graph) {
64093                 if (!isHighway(entity)) return [];
64094                 if (entity.isDegenerate()) return [];
64095
64096                 var tree = context.history().tree();
64097                 var issues = [];
64098
64099                 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
64100                 extendableNodeInfos.forEach(function(extendableNodeInfo) {
64101                     var node = extendableNodeInfo.node;
64102                     var edgeHighway = graph.entity(extendableNodeInfo.wid);
64103
64104                     var fixes = [new validationIssueFix({
64105                         icon: 'iD-icon-abutment',
64106                         title: t('issues.fix.connect_features.title'),
64107                         onClick: function(context) {
64108                             var endNodeId = this.issue.entityIds[1];
64109                             var endNode = context.entity(endNodeId);
64110                             var targetEdge = this.issue.data.edge;
64111                             var crossLoc = this.issue.data.cross_loc;
64112                             var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
64113                             var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
64114
64115                             var annotation = t('issues.fix.connect_almost_junction.annotation');
64116                             // already a point nearby, just connect to that
64117                             if (closestNodeInfo.distance < 0.75) {
64118                                 context.perform(
64119                                     actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
64120                                     annotation
64121                                 );
64122                             // else add the end node to the edge way
64123                             } else {
64124                                 context.perform(
64125                                     actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
64126                                     annotation
64127                                 );
64128                             }
64129                         }
64130                     })];
64131
64132                     if (Object.keys(node.tags).length === 0) {
64133                         // node has no tags, suggest noexit fix
64134                         fixes.push(new validationIssueFix({
64135                             icon: 'maki-barrier',
64136                             title: t('issues.fix.tag_as_disconnected.title'),
64137                             onClick: function(context) {
64138                                 var nodeID = this.issue.entityIds[1];
64139                                 context.perform(
64140                                     actionChangeTags(nodeID, { noexit: 'yes' }),
64141                                     t('issues.fix.tag_as_disconnected.annotation')
64142                                 );
64143                             }
64144                         }));
64145                     }
64146
64147                     issues.push(new validationIssue({
64148                         type: type,
64149                         subtype: 'highway-highway',
64150                         severity: 'warning',
64151                         message: function(context) {
64152                             var entity1 = context.hasEntity(this.entityIds[0]);
64153                             if (this.entityIds[0] === this.entityIds[2]) {
64154                                 return entity1 ? t('issues.almost_junction.self.message', {
64155                                     feature: utilDisplayLabel(entity1, context)
64156                                 }) : '';
64157                             } else {
64158                                 var entity2 = context.hasEntity(this.entityIds[2]);
64159                                 return (entity1 && entity2) ? t('issues.almost_junction.message', {
64160                                     feature: utilDisplayLabel(entity1, context),
64161                                     feature2: utilDisplayLabel(entity2, context)
64162                                 }) : '';
64163                             }
64164                         },
64165                         reference: showReference,
64166                         entityIds: [entity.id, node.id, edgeHighway.id],
64167                         loc: extendableNodeInfo.node.loc,
64168                         hash: JSON.stringify(extendableNodeInfo.node.loc),
64169                         data: {
64170                             edge: extendableNodeInfo.edge,
64171                             cross_loc: extendableNodeInfo.cross_loc
64172                         },
64173                         fixes: fixes
64174                     }));
64175                 });
64176
64177                 return issues;
64178
64179
64180                 function showReference(selection) {
64181                     selection.selectAll('.issue-reference')
64182                         .data([0])
64183                         .enter()
64184                         .append('div')
64185                         .attr('class', 'issue-reference')
64186                         .text(t('issues.almost_junction.highway-highway.reference'));
64187                 }
64188
64189
64190                 function isExtendableCandidate(node, way) {
64191                     // can not accurately test vertices on tiles not downloaded from osm - #5938
64192                     var osm = services$1.osm;
64193                     if (osm && !osm.isDataLoaded(node.loc)) {
64194                         return false;
64195                     }
64196                     if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
64197                         return false;
64198                     }
64199
64200                     var occurences = 0;
64201                     for (var index in way.nodes) {
64202                         if (way.nodes[index] === node.id) {
64203                             occurences += 1;
64204                             if (occurences > 1) {
64205                                 return false;
64206                             }
64207                         }
64208                     }
64209                     return true;
64210                 }
64211
64212
64213                 function findConnectableEndNodesByExtension(way) {
64214                     var results = [];
64215                     if (way.isClosed()) return results;
64216
64217                     var testNodes;
64218                     var indices = [0, way.nodes.length - 1];
64219                     indices.forEach(function(nodeIndex) {
64220                         var nodeID = way.nodes[nodeIndex];
64221                         var node = graph.entity(nodeID);
64222
64223                         if (!isExtendableCandidate(node, way)) return;
64224
64225                         var connectionInfo = canConnectByExtend(way, nodeIndex);
64226                         if (!connectionInfo) return;
64227
64228                         testNodes = graph.childNodes(way).slice();   // shallow copy
64229                         testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
64230
64231                         // don't flag issue if connecting the ways would cause self-intersection
64232                         if (geoHasSelfIntersections(testNodes, nodeID)) return;
64233
64234                         results.push(connectionInfo);
64235                     });
64236
64237                     return results;
64238                 }
64239
64240                 function hasTag(tags, key) {
64241                     return tags[key] !== undefined && tags[key] !== 'no';
64242                 }
64243
64244                 function canConnectWays(way, way2) {
64245
64246                     // allow self-connections
64247                     if (way.id === way2.id) return true;
64248
64249                     // if one is bridge or tunnel, both must be bridge or tunnel
64250                     if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
64251                         !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) return false;
64252                     if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
64253                         !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) return false;
64254
64255                     // must have equivalent layers and levels
64256                     var layer1 = way.tags.layer || '0',
64257                         layer2 = way2.tags.layer || '0';
64258                     if (layer1 !== layer2) return false;
64259
64260                     var level1 = way.tags.level || '0',
64261                         level2 = way2.tags.level || '0';
64262                     if (level1 !== level2) return false;
64263
64264                     return true;
64265                 }
64266
64267
64268                 function canConnectByExtend(way, endNodeIdx) {
64269                     var EXTEND_TH_METERS = 5;
64270                     var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
64271                     var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
64272                     var tipNode = graph.entity(tipNid);
64273                     var midNode = graph.entity(midNid);
64274                     var lon = tipNode.loc[0];
64275                     var lat = tipNode.loc[1];
64276                     var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
64277                     var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
64278                     var queryExtent = geoExtent([
64279                         [lon - lon_range, lat - lat_range],
64280                         [lon + lon_range, lat + lat_range]
64281                     ]);
64282
64283                     // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
64284                     var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
64285                     var t = EXTEND_TH_METERS / edgeLen + 1.0;
64286                     var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
64287
64288                     // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
64289                     var intersected = tree.intersects(queryExtent, graph);
64290                     for (var i = 0; i < intersected.length; i++) {
64291                         var way2 = intersected[i];
64292
64293                         if (!isHighway(way2)) continue;
64294
64295                         if (!canConnectWays(way, way2)) continue;
64296
64297                         for (var j = 0; j < way2.nodes.length - 1; j++) {
64298                             var nAid = way2.nodes[j],
64299                                 nBid = way2.nodes[j + 1];
64300
64301                             if (nAid === tipNid || nBid === tipNid) continue;
64302
64303                             var nA = graph.entity(nAid),
64304                                 nB = graph.entity(nBid);
64305                             var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
64306                             if (crossLoc) {
64307                                 return {
64308                                     node: tipNode,
64309                                     wid: way2.id,
64310                                     edge: [nA.id, nB.id],
64311                                     cross_loc: crossLoc
64312                                 };
64313                             }
64314                         }
64315                     }
64316                     return null;
64317                 }
64318             };
64319
64320             validation.type = type;
64321
64322             return validation;
64323         }
64324
64325         function validationCloseNodes(context) {
64326             var type = 'close_nodes';
64327
64328             var pointThresholdMeters = 0.2;
64329
64330             var defaultWayThresholdMeters = 0.2;
64331             // expect some features to be mapped with higher levels of detail
64332             var indoorThresholdMeters = 0.01;
64333             var buildingThresholdMeters = 0.05;
64334             var pathThresholdMeters = 0.1;
64335
64336             var validation = function(entity, graph) {
64337                 if (entity.type === 'node') {
64338                     return getIssuesForNode(entity);
64339                 } else if (entity.type === 'way') {
64340                     return getIssuesForWay(entity);
64341                 }
64342                 return [];
64343
64344                 function featureTypeForWay(way) {
64345
64346                     if (way.tags.boundary && way.tags.boundary !== 'no') return 'boundary';
64347                     if (way.tags.indoor && way.tags.indoor !== 'no') return 'indoor';
64348                     if ((way.tags.building && way.tags.building !== 'no') ||
64349                         (way.tags['building:part'] && way.tags['building:part'] !== 'no')) return 'building';
64350                     if (osmPathHighwayTagValues[way.tags.highway]) return 'path';
64351
64352                     var parentRelations = graph.parentRelations(way);
64353                     for (var i in parentRelations) {
64354                         var relation = parentRelations[i];
64355
64356                         if (relation.tags.type === 'boundary') return 'boundary';
64357
64358                         if (relation.isMultipolygon()) {
64359                             if (relation.tags.indoor && relation.tags.indoor !== 'no') return 'indoor';
64360                             if ((relation.tags.building && relation.tags.building !== 'no') ||
64361                                 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) return 'building';
64362                         }
64363                     }
64364
64365                     return 'other';
64366                 }
64367
64368                 function shouldCheckWay(way) {
64369
64370                     // don't flag issues where merging would create degenerate ways
64371                     if (way.nodes.length <= 2 ||
64372                         (way.isClosed() && way.nodes.length <= 4)) return false;
64373
64374                     var featureType = featureTypeForWay(way);
64375                     if (featureType === 'boundary') return false;
64376
64377                     var bbox = way.extent(graph).bbox();
64378                     var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
64379                     // don't flag close nodes in very small ways
64380                     if (hypotenuseMeters < 1.5) return false;
64381
64382                     return true;
64383                 }
64384
64385                 function getIssuesForWay(way) {
64386                     if (!shouldCheckWay(way)) return [];
64387
64388                     var issues = [],
64389                         nodes = graph.childNodes(way);
64390                     for (var i = 0; i < nodes.length - 1; i++) {
64391                         var node1 = nodes[i];
64392                         var node2 = nodes[i+1];
64393
64394                         var issue = getWayIssueIfAny(node1, node2, way);
64395                         if (issue) issues.push(issue);
64396                     }
64397                     return issues;
64398                 }
64399
64400                 function getIssuesForVertex(node, parentWays) {
64401                     var issues = [];
64402
64403                     function checkForCloseness(node1, node2, way) {
64404                         var issue = getWayIssueIfAny(node1, node2, way);
64405                         if (issue) issues.push(issue);
64406                     }
64407
64408                     for (var i = 0; i < parentWays.length; i++) {
64409                         var parentWay = parentWays[i];
64410
64411                         if (!shouldCheckWay(parentWay)) continue;
64412
64413                         var lastIndex = parentWay.nodes.length - 1;
64414                         for (var j = 0; j < parentWay.nodes.length; j++) {
64415                             if (j !== 0) {
64416                                 if (parentWay.nodes[j-1] === node.id) {
64417                                     checkForCloseness(node, graph.entity(parentWay.nodes[j]), parentWay);
64418                                 }
64419                             }
64420                             if (j !== lastIndex) {
64421                                 if (parentWay.nodes[j+1] === node.id) {
64422                                     checkForCloseness(graph.entity(parentWay.nodes[j]), node, parentWay);
64423                                 }
64424                             }
64425                         }
64426                     }
64427                     return issues;
64428                 }
64429
64430                 function getIssuesForDetachedPoint(node) {
64431
64432                     var issues = [];
64433
64434                     var lon = node.loc[0];
64435                     var lat = node.loc[1];
64436                     var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
64437                     var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
64438                     var queryExtent = geoExtent([
64439                         [lon - lon_range, lat - lat_range],
64440                         [lon + lon_range, lat + lat_range]
64441                     ]);
64442
64443                     var intersected = context.history().tree().intersects(queryExtent, graph);
64444                     for (var j = 0; j < intersected.length; j++) {
64445                         var nearby = intersected[j];
64446
64447                         if (nearby.id === node.id) continue;
64448                         if (nearby.type !== 'node' || nearby.geometry(graph) !== 'point') continue;
64449
64450                         if (nearby.loc === node.loc ||
64451                             geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
64452
64453                             // allow very close points if the z-axis varies
64454                             var zAxisKeys = { layer: true, level: true };
64455                             var zAxisDifferentiates = false;
64456                             for (var key in zAxisKeys) {
64457                                 var nodeValue = node.tags[key] || '0';
64458                                 var nearbyValue = nearby.tags[key] || '0';
64459                                 if (nodeValue !== nearbyValue) {
64460                                     zAxisDifferentiates = true;
64461                                     break;
64462                                 }
64463                             }
64464                             if (zAxisDifferentiates) continue;
64465
64466                             issues.push(new validationIssue({
64467                                 type: type,
64468                                 subtype: 'detached',
64469                                 severity: 'warning',
64470                                 message: function(context) {
64471                                     var entity = context.hasEntity(this.entityIds[0]),
64472                                         entity2 = context.hasEntity(this.entityIds[1]);
64473                                     return (entity && entity2) ? t('issues.close_nodes.detached.message', {
64474                                         feature: utilDisplayLabel(entity, context),
64475                                         feature2: utilDisplayLabel(entity2, context)
64476                                     }) : '';
64477                                 },
64478                                 reference: showReference,
64479                                 entityIds: [node.id, nearby.id],
64480                                 fixes: [
64481                                     new validationIssueFix({
64482                                         icon: 'iD-operation-disconnect',
64483                                         title: t('issues.fix.move_points_apart.title')
64484                                     }),
64485                                     new validationIssueFix({
64486                                         icon: 'iD-icon-layers',
64487                                         title: t('issues.fix.use_different_layers_or_levels.title')
64488                                     })
64489                                 ]
64490                             }));
64491                         }
64492                     }
64493
64494                     return issues;
64495
64496                     function showReference(selection) {
64497                         var referenceText = t('issues.close_nodes.detached.reference');
64498                         selection.selectAll('.issue-reference')
64499                             .data([0])
64500                             .enter()
64501                             .append('div')
64502                             .attr('class', 'issue-reference')
64503                             .text(referenceText);
64504                     }
64505                 }
64506
64507                 function getIssuesForNode(node) {
64508                     var parentWays = graph.parentWays(node);
64509                     if (parentWays.length) {
64510                         return getIssuesForVertex(node, parentWays);
64511                     } else {
64512                         return getIssuesForDetachedPoint(node);
64513                     }
64514                 }
64515
64516                 function getWayIssueIfAny(node1, node2, way) {
64517                     if (node1.id === node2.id ||
64518                         (node1.hasInterestingTags() && node2.hasInterestingTags())) {
64519                         return null;
64520                     }
64521
64522                     if (node1.loc !== node2.loc) {
64523
64524                         var featureType = featureTypeForWay(way);
64525                         var threshold = defaultWayThresholdMeters;
64526                         if (featureType === 'indoor') threshold = indoorThresholdMeters;
64527                         else if (featureType === 'building') threshold = buildingThresholdMeters;
64528                         else if (featureType === 'path') threshold = pathThresholdMeters;
64529
64530                         var distance = geoSphericalDistance(node1.loc, node2.loc);
64531                         if (distance > threshold) return null;
64532                     }
64533
64534                     return new validationIssue({
64535                         type: type,
64536                         subtype: 'vertices',
64537                         severity: 'warning',
64538                         message: function(context) {
64539                             var entity = context.hasEntity(this.entityIds[0]);
64540                             return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
64541                         },
64542                         reference: showReference,
64543                         entityIds: [way.id, node1.id, node2.id],
64544                         loc: node1.loc,
64545                         fixes: [
64546                             new validationIssueFix({
64547                                 icon: 'iD-icon-plus',
64548                                 title: t('issues.fix.merge_points.title'),
64549                                 onClick: function(context) {
64550                                     var entityIds = this.issue.entityIds;
64551                                     var action = actionMergeNodes([entityIds[1], entityIds[2]]);
64552                                     context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
64553                                 }
64554                             }),
64555                             new validationIssueFix({
64556                                 icon: 'iD-operation-disconnect',
64557                                 title: t('issues.fix.move_points_apart.title')
64558                             })
64559                         ]
64560                     });
64561
64562                     function showReference(selection) {
64563                         var referenceText = t('issues.close_nodes.reference');
64564                         selection.selectAll('.issue-reference')
64565                             .data([0])
64566                             .enter()
64567                             .append('div')
64568                             .attr('class', 'issue-reference')
64569                             .text(referenceText);
64570                     }
64571                 }
64572
64573             };
64574
64575
64576             validation.type = type;
64577
64578             return validation;
64579         }
64580
64581         function validationCrossingWays(context) {
64582             var type = 'crossing_ways';
64583
64584             // returns the way or its parent relation, whichever has a useful feature type
64585             function getFeatureWithFeatureTypeTagsForWay(way, graph) {
64586                 if (getFeatureTypeForTags(way.tags) === null) {
64587                     // if the way doesn't match a feature type, check its parent relations
64588                     var parentRels = graph.parentRelations(way);
64589                     for (var i = 0; i < parentRels.length; i++) {
64590                         var rel = parentRels[i];
64591                         if (getFeatureTypeForTags(rel.tags) !== null) {
64592                             return rel;
64593                         }
64594                     }
64595                 }
64596                 return way;
64597             }
64598
64599
64600             function hasTag(tags, key) {
64601                 return tags[key] !== undefined && tags[key] !== 'no';
64602             }
64603
64604             function taggedAsIndoor(tags) {
64605                 return hasTag(tags, 'indoor') ||
64606                     hasTag(tags, 'level') ||
64607                     tags.highway === 'corridor';
64608             }
64609
64610             function allowsStructures(featureType) {
64611                 return allowsBridge(featureType) || allowsTunnel(featureType);
64612             }
64613             function allowsBridge(featureType) {
64614                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64615             }
64616             function allowsTunnel(featureType) {
64617                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
64618             }
64619             function canCover(featureType) {
64620                 return featureType === 'building';
64621             }
64622
64623
64624             function getFeatureTypeForCrossingCheck(way, graph) {
64625                 var tags = getFeatureWithFeatureTypeTagsForWay(way, graph).tags;
64626                 return getFeatureTypeForTags(tags);
64627             }
64628
64629             // blacklist
64630             var ignoredBuildings = {
64631                 demolished: true, dismantled: true, proposed: true, razed: true
64632             };
64633
64634
64635             function getFeatureTypeForTags(tags) {
64636                 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) return 'building';
64637
64638                 // don't check non-building areas
64639                 if (hasTag(tags, 'area')) return null;
64640
64641                 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) return 'highway';
64642                 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) return 'railway';
64643                 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) return 'waterway';
64644
64645                 return null;
64646             }
64647
64648
64649             function isLegitCrossing(way1, featureType1, way2, featureType2) {
64650                 var tags1 = way1.tags;
64651                 var tags2 = way2.tags;
64652
64653                 // assume 0 by default
64654                 var level1 = tags1.level || '0';
64655                 var level2 = tags2.level || '0';
64656
64657                 if (taggedAsIndoor(tags1) && taggedAsIndoor(tags2) && level1 !== level2) {
64658                     // assume features don't interact if they're indoor on different levels
64659                     return true;
64660                 }
64661
64662                 // assume 0 by default; don't use way.layer() since we account for structures here
64663                 var layer1 = tags1.layer || '0';
64664                 var layer2 = tags2.layer || '0';
64665
64666                 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
64667                     if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) return true;
64668                     if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) return true;
64669                     // crossing bridges must use different layers
64670                     if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) return true;
64671                 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) return true;
64672                 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) return true;
64673
64674                 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
64675                     if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) return true;
64676                     if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) return true;
64677                     // crossing tunnels must use different layers
64678                     if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) return true;
64679                 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) return true;
64680                 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) return true;
64681
64682                 if (canCover(featureType1) && canCover(featureType2)) {
64683                     if (hasTag(tags1, 'covered') && !hasTag(tags2, 'covered')) return true;
64684                     if (!hasTag(tags1, 'covered') && hasTag(tags2, 'covered')) return true;
64685                     // crossing covered features that can themselves cover must use different layers
64686                     if (hasTag(tags1, 'covered') && hasTag(tags2, 'covered') && layer1 !== layer2) return true;
64687                 } else if (canCover(featureType1) && hasTag(tags2, 'covered')) return true;
64688                 else if (canCover(featureType2) && hasTag(tags1, 'covered')) return true;
64689
64690                 // don't flag crossing waterways and pier/highways
64691                 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') return true;
64692                 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') return true;
64693
64694                 if (!allowsStructures(featureType1) && !allowsStructures(featureType2)) {
64695                     // if no structures are applicable, the layers must be different
64696                     if (layer1 !== layer2) return true;
64697                 }
64698                 return false;
64699             }
64700
64701
64702             // highway values for which we shouldn't recommend connecting to waterways
64703             var highwaysDisallowingFords = {
64704                 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
64705                 primary: true, primary_link: true, secondary: true, secondary_link: true
64706             };
64707             var nonCrossingHighways = { track: true };
64708
64709             function tagsForConnectionNodeIfAllowed(entity1, entity2) {
64710                 var featureType1 = getFeatureTypeForTags(entity1.tags);
64711                 var featureType2 = getFeatureTypeForTags(entity2.tags);
64712                 if (featureType1 === featureType2) {
64713                     if (featureType1 === 'highway') {
64714                         var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
64715                         var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
64716                         if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
64717                             // one feature is a path but not both
64718
64719                             var roadFeature = entity1IsPath ? entity2 : entity1;
64720                             if (nonCrossingHighways[roadFeature.tags.highway]) {
64721                                 // don't mark path connections with certain roads as crossings
64722                                 return {};
64723                             }
64724                             var pathFeature = entity1IsPath ? entity1 : entity2;
64725                             if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
64726                                 // if the path is a crossing, match the crossing type
64727                                 return { highway: 'crossing', crossing: pathFeature.tags.crossing };
64728                             }
64729                             // don't add a `crossing` subtag to ambiguous crossings
64730                             return { highway: 'crossing' };
64731                         }
64732                         return {};
64733                     }
64734                     if (featureType1 === 'waterway') return {};
64735                     if (featureType1 === 'railway') return {};
64736
64737                 } else {
64738                     var featureTypes = [featureType1, featureType2];
64739                     if (featureTypes.indexOf('highway') !== -1) {
64740                         if (featureTypes.indexOf('railway') !== -1) {
64741                             if (osmPathHighwayTagValues[entity1.tags.highway] ||
64742                                 osmPathHighwayTagValues[entity2.tags.highway]) {
64743                                 // path-rail connections use this tag
64744                                 return { railway: 'crossing' };
64745                             } else {
64746                                 // road-rail connections use this tag
64747                                 return { railway: 'level_crossing' };
64748                             }
64749                         }
64750
64751                         if (featureTypes.indexOf('waterway') !== -1) {
64752                             // do not allow fords on structures
64753                             if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) return null;
64754                             if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) return null;
64755
64756                             if (highwaysDisallowingFords[entity1.tags.highway] ||
64757                                 highwaysDisallowingFords[entity2.tags.highway]) {
64758                                 // do not allow fords on major highways
64759                                 return null;
64760                             }
64761                             return { ford: 'yes' };
64762                         }
64763                     }
64764                 }
64765                 return null;
64766             }
64767
64768
64769             function findCrossingsByWay(way1, graph, tree) {
64770                 var edgeCrossInfos = [];
64771                 if (way1.type !== 'way') return edgeCrossInfos;
64772
64773                 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
64774                 if (way1FeatureType === null) return edgeCrossInfos;
64775
64776                 var checkedSingleCrossingWays = {};
64777
64778                 // declare vars ahead of time to reduce garbage collection
64779                 var i, j, nodeIndex;
64780                 var extent;
64781                 var n1, n2, nA, nB;
64782                 var segment1, segment2;
64783                 var oneOnly;
64784                 var intersected, way2, way2FeatureType, way2Nodes;
64785                 var way1Nodes = graph.childNodes(way1);
64786                 var comparedWays = {};
64787                 for (i = 0; i < way1Nodes.length - 1; i++) {
64788                     n1 = way1Nodes[i];
64789                     n2 = way1Nodes[i + 1];
64790                     extent = geoExtent([
64791                         [
64792                             Math.min(n1.loc[0], n2.loc[0]),
64793                             Math.min(n1.loc[1], n2.loc[1])
64794                         ],
64795                         [
64796                             Math.max(n1.loc[0], n2.loc[0]),
64797                             Math.max(n1.loc[1], n2.loc[1])
64798                         ]
64799                     ]);
64800
64801                     intersected = tree.intersects(extent, graph);
64802                     for (j = 0; j < intersected.length; j++) {
64803                         way2 = intersected[j];
64804
64805                         if (way2.type !== 'way') continue;
64806
64807                         // don't check for self-intersection in this validation
64808                         if (way2.id === way1.id) continue;
64809
64810                         // skip if this way was already checked and only one issue is needed
64811                         if (checkedSingleCrossingWays[way2.id]) continue;
64812
64813                         // mark this way as checked even if there are no crossings
64814                         comparedWays[way2.id] = true;
64815
64816                         // only check crossing highway, waterway, building, and railway
64817                         way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
64818                         if (way2FeatureType === null ||
64819                             isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
64820                             continue;
64821                         }
64822
64823                         // create only one issue for building crossings
64824                         oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
64825                         segment1 = [n1.loc, n2.loc];
64826
64827                         way2Nodes = graph.childNodes(way2);
64828                         for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
64829                             nA = way2Nodes[nodeIndex];
64830                             nB = way2Nodes[nodeIndex + 1];
64831                             if (nA.id === n1.id || nA.id === n2.id ||
64832                                 nB.id === n1.id || nB.id === n2.id) {
64833                                 // n1 or n2 is a connection node; skip
64834                                 continue;
64835                             }
64836                             segment2 = [nA.loc, nB.loc];
64837                             var point = geoLineIntersection(segment1, segment2);
64838                             if (point) {
64839                                 edgeCrossInfos.push({
64840                                     ways: [way1, way2],
64841                                     featureTypes: [way1FeatureType, way2FeatureType],
64842                                     edges: [[n1.id, n2.id], [nA.id, nB.id]],
64843                                     crossPoint: point
64844                                 });
64845                                 if (oneOnly) {
64846                                     checkedSingleCrossingWays[way2.id] = true;
64847                                     break;
64848                                 }
64849                             }
64850                         }
64851                     }
64852                 }
64853                 return edgeCrossInfos;
64854             }
64855
64856
64857             function waysToCheck(entity, graph) {
64858                 if (!getFeatureTypeForTags(entity.tags)) {
64859                     return [];
64860                 }
64861                 if (entity.type === 'way') {
64862                     return [entity];
64863                 } else if (entity.type === 'relation' &&
64864                     entity.isMultipolygon() &&
64865                     // only check multipolygons if they are buildings
64866                     hasTag(entity.tags, 'building')) {
64867                     return entity.members.reduce(function(array, member) {
64868                         if (member.type === 'way' &&
64869                             //(member.role === 'outer' || member.role === 'inner') &&
64870                             graph.hasEntity(member.id)) {
64871                             var entity = graph.entity(member.id);
64872                             array.push(entity);
64873                         }
64874                         return array;
64875                     }, []);
64876                 }
64877                 return [];
64878             }
64879
64880
64881             var validation = function checkCrossingWays(entity, graph) {
64882
64883                 var tree = context.history().tree();
64884
64885                 var ways = waysToCheck(entity, graph);
64886
64887                 var issues = [];
64888                 // declare these here to reduce garbage collection
64889                 var wayIndex, crossingIndex, crossings;
64890                 for (wayIndex in ways) {
64891                     crossings = findCrossingsByWay(ways[wayIndex], graph, tree);
64892                     for (crossingIndex in crossings) {
64893                         issues.push(createIssue(crossings[crossingIndex], graph));
64894                     }
64895                 }
64896                 return issues;
64897             };
64898
64899
64900             function createIssue(crossing, graph) {
64901
64902                 // use the entities with the tags that define the feature type
64903                 var entities = crossing.ways.sort(function(entity1, entity2) {
64904                     var type1 = getFeatureTypeForCrossingCheck(entity1, graph);
64905                     var type2 = getFeatureTypeForCrossingCheck(entity2, graph);
64906                     if (type1 === type2) {
64907                         return utilDisplayLabel(entity1, context) > utilDisplayLabel(entity2, context);
64908                     } else if (type1 === 'waterway') {
64909                         return true;
64910                     } else if (type2 === 'waterway') {
64911                         return false;
64912                     }
64913                     return type1 < type2;
64914                 });
64915                 entities = entities.map(function(way) {
64916                     return getFeatureWithFeatureTypeTagsForWay(way, graph);
64917                 });
64918
64919                 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1]);
64920
64921                 var featureType1 = crossing.featureTypes[0];
64922                 var featureType2 = crossing.featureTypes[1];
64923
64924                 var isCrossingIndoors = taggedAsIndoor(entities[0].tags) && taggedAsIndoor(entities[1].tags);
64925                 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
64926                                         allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
64927                 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
64928                                         allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
64929
64930                 var subtype = crossing.featureTypes.sort().join('-');
64931
64932                 var crossingTypeID = subtype;
64933
64934                 if (isCrossingIndoors) {
64935                     crossingTypeID = 'indoor-indoor';
64936                 } else if (isCrossingTunnels) {
64937                     crossingTypeID = 'tunnel-tunnel';
64938                 } else if (isCrossingBridges) {
64939                     crossingTypeID = 'bridge-bridge';
64940                 }
64941                 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
64942                     crossingTypeID += '_connectable';
64943                 }
64944
64945                 var fixes = [];
64946                 if (connectionTags) {
64947                     fixes.push(makeConnectWaysFix(connectionTags));
64948                 }
64949
64950                 var useFixIcon = 'iD-icon-layers';
64951                 var useFixID;
64952                 if (isCrossingIndoors) {
64953                     useFixID = 'use_different_levels';
64954                 } else if (isCrossingTunnels || isCrossingBridges) {
64955                     useFixID = 'use_different_layers';
64956                 // don't recommend bridges for waterways even though they're okay
64957                 } else if ((allowsBridge(featureType1) && featureType1 !== 'waterway') ||
64958                         (allowsBridge(featureType2) && featureType2 !== 'waterway')) {
64959                     useFixID = 'use_bridge_or_tunnel';
64960                     useFixIcon = 'maki-bridge';
64961                 } else if (allowsTunnel(featureType1) || allowsTunnel(featureType2)) {
64962                     useFixID = 'use_tunnel';
64963                 } else {
64964                     useFixID = 'use_different_layers';
64965                 }
64966                 if (useFixID === 'use_different_layers') {
64967                     fixes.push(makeChangeLayerFix('higher'));
64968                     fixes.push(makeChangeLayerFix('lower'));
64969                 } else {
64970                     fixes.push(new validationIssueFix({
64971                         icon: useFixIcon,
64972                         title: t('issues.fix.' + useFixID + '.title')
64973                     }));
64974                 }
64975                 fixes.push(new validationIssueFix({
64976                     icon: 'iD-operation-move',
64977                     title: t('issues.fix.reposition_features.title')
64978                 }));
64979
64980                 return new validationIssue({
64981                     type: type,
64982                     subtype: subtype,
64983                     severity: 'warning',
64984                     message: function(context) {
64985                         var entity1 = context.hasEntity(this.entityIds[0]),
64986                             entity2 = context.hasEntity(this.entityIds[1]);
64987                         return (entity1 && entity2) ? t('issues.crossing_ways.message', {
64988                             feature: utilDisplayLabel(entity1, context),
64989                             feature2: utilDisplayLabel(entity2, context)
64990                         }) : '';
64991                     },
64992                     reference: showReference,
64993                     entityIds: entities.map(function(entity) {
64994                         return entity.id;
64995                     }),
64996                     data: {
64997                         edges: crossing.edges,
64998                         connectionTags: connectionTags
64999                     },
65000                     // differentiate based on the loc since two ways can cross multiple times
65001                     hash: crossing.crossPoint.toString() +
65002                         // if the edges change then so does the fix
65003                         crossing.edges.slice().sort(function(edge1, edge2) {
65004                             // order to assure hash is deterministic
65005                             return edge1[0] < edge2[0] ? -1 : 1;
65006                         }).toString() +
65007                         // ensure the correct connection tags are added in the fix
65008                         JSON.stringify(connectionTags),
65009                     loc: crossing.crossPoint,
65010                     fixes: fixes
65011                 });
65012
65013                 function showReference(selection) {
65014                     selection.selectAll('.issue-reference')
65015                         .data([0])
65016                         .enter()
65017                         .append('div')
65018                         .attr('class', 'issue-reference')
65019                         .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
65020                 }
65021             }
65022
65023             function makeConnectWaysFix(connectionTags) {
65024
65025                 var fixTitleID = 'connect_features';
65026                 if (connectionTags.ford) {
65027                     fixTitleID = 'connect_using_ford';
65028                 }
65029
65030                 return new validationIssueFix({
65031                     icon: 'iD-icon-crossing',
65032                     title: t('issues.fix.' + fixTitleID + '.title'),
65033                     onClick: function(context) {
65034                         var loc = this.issue.loc;
65035                         var connectionTags = this.issue.data.connectionTags;
65036                         var edges = this.issue.data.edges;
65037
65038                         context.perform(
65039                             function actionConnectCrossingWays(graph) {
65040                                 // create the new node for the points
65041                                 var node = osmNode({ loc: loc, tags: connectionTags });
65042                                 graph = graph.replace(node);
65043
65044                                 var nodesToMerge = [node.id];
65045                                 var mergeThresholdInMeters = 0.75;
65046
65047                                 edges.forEach(function(edge) {
65048                                     var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
65049                                     var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
65050                                     // if there is already a point nearby, use that
65051                                     if (closestNodeInfo.distance < mergeThresholdInMeters) {
65052                                         nodesToMerge.push(closestNodeInfo.node.id);
65053                                     // else add the new node to the way
65054                                     } else {
65055                                         graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
65056                                     }
65057                                 });
65058
65059                                 if (nodesToMerge.length > 1) {
65060                                     // if we're using nearby nodes, merge them with the new node
65061                                     graph = actionMergeNodes(nodesToMerge, loc)(graph);
65062                                 }
65063
65064                                 return graph;
65065                             },
65066                             t('issues.fix.connect_crossing_features.annotation')
65067                         );
65068                     }
65069                 });
65070             }
65071
65072             function makeChangeLayerFix(higherOrLower) {
65073                 return new validationIssueFix({
65074                     icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
65075                     title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
65076                     onClick: function(context) {
65077
65078                         var mode = context.mode();
65079                         if (!mode || mode.id !== 'select') return;
65080
65081                         var selectedIDs = mode.selectedIDs();
65082                         if (selectedIDs.length !== 1) return;
65083
65084                         var selectedID = selectedIDs[0];
65085                         if (!this.issue.entityIds.some(function(entityId) {
65086                             return entityId === selectedID;
65087                         })) return;
65088
65089                         var entity = context.hasEntity(selectedID);
65090                         if (!entity) return;
65091
65092                         var tags = Object.assign({}, entity.tags);   // shallow copy
65093                         var layer = tags.layer && Number(tags.layer);
65094                         if (layer && !isNaN(layer)) {
65095                             if (higherOrLower === 'higher') {
65096                                 layer += 1;
65097                             } else {
65098                                 layer -= 1;
65099                             }
65100                         } else {
65101                             if (higherOrLower === 'higher') {
65102                                 layer = 1;
65103                             } else {
65104                                 layer = -1;
65105                             }
65106                         }
65107                         tags.layer = layer;
65108                         context.perform(
65109                             actionChangeTags(entity.id, tags),
65110                             t('operations.change_tags.annotation')
65111                         );
65112                     }
65113                 });
65114             }
65115
65116             validation.type = type;
65117
65118             return validation;
65119         }
65120
65121         function validationDisconnectedWay() {
65122             var type = 'disconnected_way';
65123
65124             function isTaggedAsHighway(entity) {
65125                 return osmRoutableHighwayTagValues[entity.tags.highway];
65126             }
65127
65128             var validation = function checkDisconnectedWay(entity, graph) {
65129
65130                 var routingIslandWays = routingIslandForEntity(entity);
65131                 if (!routingIslandWays) return [];
65132
65133                 var fixes = [];
65134
65135                 var isSingle = routingIslandWays.size === 1;
65136
65137                 if (isSingle) {
65138
65139                     if (entity.type === 'way' && !entity.isClosed()) {
65140
65141                         var startFix = makeContinueDrawingFixIfAllowed(entity.first(), 'start');
65142                         if (startFix) fixes.push(startFix);
65143
65144                         var endFix = makeContinueDrawingFixIfAllowed(entity.last(), 'end');
65145                         if (endFix) fixes.push(endFix);
65146                     }
65147                     if (!fixes.length) {
65148                         fixes.push(new validationIssueFix({
65149                             title: t('issues.fix.connect_feature.title')
65150                         }));
65151                     }
65152
65153                     fixes.push(new validationIssueFix({
65154                         icon: 'iD-operation-delete',
65155                         title: t('issues.fix.delete_feature.title'),
65156                         entityIds: [entity.id],
65157                         onClick: function(context) {
65158                             var id = this.issue.entityIds[0];
65159                             var operation = operationDelete([id], context);
65160                             if (!operation.disabled()) {
65161                                 operation();
65162                             }
65163                         }
65164                     }));
65165                 } else {
65166                     fixes.push(new validationIssueFix({
65167                         title: t('issues.fix.connect_features.title')
65168                     }));
65169                 }
65170
65171                 return [new validationIssue({
65172                     type: type,
65173                     subtype: 'highway',
65174                     severity: 'warning',
65175                     message: function(context) {
65176                         if (this.entityIds.length === 1) {
65177                             var entity = context.hasEntity(this.entityIds[0]);
65178                             return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
65179                         }
65180                         return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
65181                     },
65182                     reference: showReference,
65183                     entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
65184                     fixes: fixes
65185                 })];
65186
65187
65188                 function showReference(selection) {
65189                     selection.selectAll('.issue-reference')
65190                         .data([0])
65191                         .enter()
65192                         .append('div')
65193                         .attr('class', 'issue-reference')
65194                         .text(t('issues.disconnected_way.routable.reference'));
65195                 }
65196
65197                 function routingIslandForEntity(entity) {
65198
65199                     var routingIsland = new Set();  // the interconnected routable features
65200                     var waysToCheck = [];           // the queue of remaining routable ways to traverse
65201
65202                     function queueParentWays(node) {
65203                         graph.parentWays(node).forEach(function(parentWay) {
65204                             if (!routingIsland.has(parentWay) &&    // only check each feature once
65205                                 isRoutableWay(parentWay, false)) {  // only check routable features
65206                                 routingIsland.add(parentWay);
65207                                 waysToCheck.push(parentWay);
65208                             }
65209                         });
65210                     }
65211
65212                     if (entity.type === 'way' && isRoutableWay(entity, true)) {
65213
65214                         routingIsland.add(entity);
65215                         waysToCheck.push(entity);
65216
65217                     } else if (entity.type === 'node' && isRoutableNode(entity)) {
65218
65219                         routingIsland.add(entity);
65220                         queueParentWays(entity);
65221
65222                     } else {
65223                         // this feature isn't routable, cannot be a routing island
65224                         return null;
65225                     }
65226
65227                     while (waysToCheck.length) {
65228                         var wayToCheck = waysToCheck.pop();
65229                         var childNodes = graph.childNodes(wayToCheck);
65230                         for (var i in childNodes) {
65231                             var vertex = childNodes[i];
65232
65233                             if (isConnectedVertex(vertex)) {
65234                                 // found a link to the wider network, not a routing island
65235                                 return null;
65236                             }
65237
65238                             if (isRoutableNode(vertex)) {
65239                                 routingIsland.add(vertex);
65240                             }
65241
65242                             queueParentWays(vertex);
65243                         }
65244                     }
65245
65246                     // no network link found, this is a routing island, return its members
65247                     return routingIsland;
65248                 }
65249
65250                 function isConnectedVertex(vertex) {
65251                     // assume ways overlapping unloaded tiles are connected to the wider road network  - #5938
65252                     var osm = services$1.osm;
65253                     if (osm && !osm.isDataLoaded(vertex.loc)) return true;
65254
65255                     // entrances are considered connected
65256                     if (vertex.tags.entrance &&
65257                         vertex.tags.entrance !== 'no') return true;
65258                     if (vertex.tags.amenity === 'parking_entrance') return true;
65259
65260                     return false;
65261                 }
65262
65263                 function isRoutableNode(node) {
65264                     // treat elevators as distinct features in the highway network
65265                     if (node.tags.highway === 'elevator') return true;
65266                     return false;
65267                 }
65268
65269                 function isRoutableWay(way, ignoreInnerWays) {
65270                     if (isTaggedAsHighway(way) || way.tags.route === 'ferry') return true;
65271
65272                     return graph.parentRelations(way).some(function(parentRelation) {
65273                         if (parentRelation.tags.type === 'route' &&
65274                             parentRelation.tags.route === 'ferry') return true;
65275
65276                         if (parentRelation.isMultipolygon() &&
65277                             isTaggedAsHighway(parentRelation) &&
65278                             (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) return true;
65279                     });
65280                 }
65281
65282                 function makeContinueDrawingFixIfAllowed(vertexID, whichEnd) {
65283                     var vertex = graph.entity(vertexID);
65284                     if (vertex.tags.noexit === 'yes') return null;
65285
65286                     var useLeftContinue = (whichEnd === 'start' && textDirection === 'ltr') ||
65287                         (whichEnd === 'end' && textDirection === 'rtl');
65288
65289                     return new validationIssueFix({
65290                         icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
65291                         title: t('issues.fix.continue_from_' + whichEnd + '.title'),
65292                         entityIds: [vertexID],
65293                         onClick: function(context) {
65294                             var wayId = this.issue.entityIds[0];
65295                             var way = context.hasEntity(wayId);
65296                             var vertexId = this.entityIds[0];
65297                             var vertex = context.hasEntity(vertexId);
65298
65299                             if (!way || !vertex) return;
65300
65301                             // make sure the vertex is actually visible and editable
65302                             var map = context.map();
65303                             if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65304                                 map.zoomToEase(vertex);
65305                             }
65306
65307                             context.enter(
65308                                 modeDrawLine(context, wayId, context.graph(), context.graph(), 'line', way.affix(vertexId), true)
65309                             );
65310                         }
65311                     });
65312                 }
65313
65314             };
65315
65316             validation.type = type;
65317
65318             return validation;
65319         }
65320
65321         function validationFormatting() {
65322             var type = 'invalid_format';
65323
65324             var validation = function(entity) {
65325                 var issues = [];
65326
65327                 function isValidEmail(email) {
65328                     // Emails in OSM are going to be official so they should be pretty simple
65329                     // Using negated lists to better support all possible unicode characters (#6494)
65330                     var valid_email = /^[^\(\)\\,":;<>@\[\]]+@[^\(\)\\,":;<>@\[\]\.]+(?:\.[a-z0-9-]+)*$/i;
65331
65332                     // An empty value is also acceptable
65333                     return (!email || valid_email.test(email));
65334                 }
65335                 /*
65336                 function isSchemePresent(url) {
65337                     var valid_scheme = /^https?:\/\//i;
65338                     return (!url || valid_scheme.test(url));
65339                 }
65340                 */
65341                 function showReferenceEmail(selection) {
65342                     selection.selectAll('.issue-reference')
65343                         .data([0])
65344                         .enter()
65345                         .append('div')
65346                         .attr('class', 'issue-reference')
65347                         .text(t('issues.invalid_format.email.reference'));
65348                 }
65349                 /*
65350                 function showReferenceWebsite(selection) {
65351                     selection.selectAll('.issue-reference')
65352                         .data([0])
65353                         .enter()
65354                         .append('div')
65355                         .attr('class', 'issue-reference')
65356                         .text(t('issues.invalid_format.website.reference'));
65357                 }
65358
65359                 if (entity.tags.website) {
65360                     // Multiple websites are possible
65361                     // If ever we support ES6, arrow functions make this nicer
65362                     var websites = entity.tags.website
65363                         .split(';')
65364                         .map(function(s) { return s.trim(); })
65365                         .filter(function(x) { return !isSchemePresent(x); });
65366
65367                     if (websites.length) {
65368                         issues.push(new validationIssue({
65369                             type: type,
65370                             subtype: 'website',
65371                             severity: 'warning',
65372                             message: function(context) {
65373                                 var entity = context.hasEntity(this.entityIds[0]);
65374                                 return entity ? t('issues.invalid_format.website.message' + this.data,
65375                                     { feature: utilDisplayLabel(entity, context), site: websites.join(', ') }) : '';
65376                             },
65377                             reference: showReferenceWebsite,
65378                             entityIds: [entity.id],
65379                             hash: websites.join(),
65380                             data: (websites.length > 1) ? '_multi' : ''
65381                         }));
65382                     }
65383                 }
65384                 */
65385                 if (entity.tags.email) {
65386                     // Multiple emails are possible
65387                     var emails = entity.tags.email
65388                         .split(';')
65389                         .map(function(s) { return s.trim(); })
65390                         .filter(function(x) { return !isValidEmail(x); });
65391
65392                     if (emails.length) {
65393                         issues.push(new validationIssue({
65394                             type: type,
65395                             subtype: 'email',
65396                             severity: 'warning',
65397                             message: function(context) {
65398                                 var entity = context.hasEntity(this.entityIds[0]);
65399                                 return entity ? t('issues.invalid_format.email.message' + this.data,
65400                                     { feature: utilDisplayLabel(entity, context), email: emails.join(', ') }) : '';
65401                             },
65402                             reference: showReferenceEmail,
65403                             entityIds: [entity.id],
65404                             hash: emails.join(),
65405                             data: (emails.length > 1) ? '_multi' : ''
65406                         }));
65407                     }
65408                 }
65409
65410                 return issues;
65411             };
65412
65413             validation.type = type;
65414
65415             return validation;
65416         }
65417
65418         function validationHelpRequest(context) {
65419             var type = 'help_request';
65420
65421             var validation = function checkFixmeTag(entity) {
65422
65423                 if (!entity.tags.fixme) return [];
65424
65425                 // don't flag fixmes on features added by the user
65426                 if (entity.version === undefined) return [];
65427
65428                 if (entity.v !== undefined) {
65429                     var baseEntity = context.history().base().hasEntity(entity.id);
65430                     // don't flag fixmes added by the user on existing features
65431                     if (!baseEntity || !baseEntity.tags.fixme) return [];
65432                 }
65433
65434                 return [new validationIssue({
65435                     type: type,
65436                     subtype: 'fixme_tag',
65437                     severity: 'warning',
65438                     message: function(context) {
65439                         var entity = context.hasEntity(this.entityIds[0]);
65440                         return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
65441                     },
65442                     fixes: [
65443                         new validationIssueFix({
65444                             title: t('issues.fix.address_the_concern.title')
65445                         })
65446                     ],
65447                     reference: showReference,
65448                     entityIds: [entity.id]
65449                 })];
65450
65451                 function showReference(selection) {
65452                     selection.selectAll('.issue-reference')
65453                         .data([0])
65454                         .enter()
65455                         .append('div')
65456                         .attr('class', 'issue-reference')
65457                         .text(t('issues.fixme_tag.reference'));
65458                 }
65459             };
65460
65461             validation.type = type;
65462
65463             return validation;
65464         }
65465
65466         function validationImpossibleOneway() {
65467             var type = 'impossible_oneway';
65468
65469             var validation = function checkImpossibleOneway(entity, graph) {
65470
65471                 if (entity.type !== 'way' || entity.geometry(graph) !== 'line') return [];
65472
65473                 if (entity.isClosed()) return [];
65474
65475                 if (!typeForWay(entity)) return [];
65476
65477                 if (!isOneway(entity)) return [];
65478
65479                 var firstIssues = issuesForNode(entity, entity.first());
65480                 var lastIssues = issuesForNode(entity, entity.last());
65481
65482                 return firstIssues.concat(lastIssues);
65483
65484                 function typeForWay(way) {
65485                     if (way.geometry(graph) !== 'line') return null;
65486
65487                     if (osmRoutableHighwayTagValues[way.tags.highway]) return 'highway';
65488                     if (osmFlowingWaterwayTagValues[way.tags.waterway]) return 'waterway';
65489                     return null;
65490                 }
65491
65492                 function isOneway(way) {
65493                     if (way.tags.oneway === 'yes') return true;
65494                     if (way.tags.oneway) return false;
65495
65496                     for (var key in way.tags) {
65497                         if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
65498                             return true;
65499                         }
65500                     }
65501                     return false;
65502                 }
65503
65504                 function nodeOccursMoreThanOnce(way, nodeID) {
65505                     var occurences = 0;
65506                     for (var index in way.nodes) {
65507                         if (way.nodes[index] === nodeID) {
65508                             occurences += 1;
65509                             if (occurences > 1) return true;
65510                         }
65511                     }
65512                     return false;
65513                 }
65514
65515                 function isConnectedViaOtherTypes(way, node) {
65516
65517                     var wayType = typeForWay(way);
65518
65519                     if (wayType === 'highway') {
65520                         // entrances are considered connected
65521                         if (node.tags.entrance && node.tags.entrance !== 'no') return true;
65522                         if (node.tags.amenity === 'parking_entrance') return true;
65523                     } else if (wayType === 'waterway') {
65524                         if (node.id === way.first()) {
65525                             // multiple waterways may start at the same spring
65526                             if (node.tags.natural === 'spring') return true;
65527                         } else {
65528                             // multiple waterways may end at the same drain
65529                             if (node.tags.manhole === 'drain') return true;
65530                         }
65531                     }
65532
65533                     return graph.parentWays(node).some(function(parentWay) {
65534                         if (parentWay.id === way.id) return false;
65535
65536                         if (wayType === 'highway') {
65537
65538                             // allow connections to highway areas
65539                             if (parentWay.geometry(graph) === 'area' &&
65540                                 osmRoutableHighwayTagValues[parentWay.tags.highway]) return true;
65541
65542                             // count connections to ferry routes as connected
65543                             if (parentWay.tags.route === 'ferry') return true;
65544
65545                             return graph.parentRelations(parentWay).some(function(parentRelation) {
65546                                 if (parentRelation.tags.type === 'route' &&
65547                                     parentRelation.tags.route === 'ferry') return true;
65548
65549                                 // allow connections to highway multipolygons
65550                                 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
65551                             });
65552                         } else if (wayType === 'waterway') {
65553                             // multiple waterways may start or end at a water body at the same node
65554                             if (parentWay.tags.natural === 'water' ||
65555                                 parentWay.tags.natural === 'coastline') return true;
65556                         }
65557                         return false;
65558                     });
65559                 }
65560
65561                 function issuesForNode(way, nodeID) {
65562
65563                     var isFirst = nodeID === way.first();
65564
65565                     var wayType = typeForWay(way);
65566
65567                     // ignore if this way is self-connected at this node
65568                     if (nodeOccursMoreThanOnce(way, nodeID)) return [];
65569
65570                     var osm = services$1.osm;
65571                     if (!osm) return [];
65572
65573                     var node = graph.hasEntity(nodeID);
65574
65575                     // ignore if this node or its tile are unloaded
65576                     if (!node || !osm.isDataLoaded(node.loc)) return [];
65577
65578                     if (isConnectedViaOtherTypes(way, node)) return [];
65579
65580                     var attachedWaysOfSameType = graph.parentWays(node).filter(function(parentWay) {
65581                         if (parentWay.id === way.id) return false;
65582                         return typeForWay(parentWay) === wayType;
65583                     });
65584
65585                     // assume it's okay for waterways to start or end disconnected for now
65586                     if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) return [];
65587
65588                     var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
65589                         return isOneway(attachedWay);
65590                     });
65591
65592                     // ignore if the way is connected to some non-oneway features
65593                     if (attachedOneways.length < attachedWaysOfSameType.length) return [];
65594
65595                     if (attachedOneways.length) {
65596                         var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
65597                             if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) return true;
65598                             if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) return true;
65599                             return false;
65600                         });
65601                         if (connectedEndpointsOkay) return [];
65602                     }
65603
65604                     var fixes = [];
65605
65606                     if (attachedOneways.length) {
65607                         fixes.push(new validationIssueFix({
65608                             icon: 'iD-operation-reverse',
65609                             title: t('issues.fix.reverse_feature.title'),
65610                             entityIds: [way.id],
65611                             onClick: function(context) {
65612                                 var id = this.issue.entityIds[0];
65613                                 context.perform(actionReverse(id), t('operations.reverse.annotation'));
65614                             }
65615                         }));
65616                     }
65617                     if (node.tags.noexit !== 'yes') {
65618                         var useLeftContinue = (isFirst && textDirection === 'ltr') ||
65619                             (!isFirst && textDirection === 'rtl');
65620                         fixes.push(new validationIssueFix({
65621                             icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
65622                             title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
65623                             onClick: function(context) {
65624                                 var entityID = this.issue.entityIds[0];
65625                                 var vertexID = this.issue.entityIds[1];
65626                                 var way = context.entity(entityID);
65627                                 var vertex = context.entity(vertexID);
65628                                 continueDrawing(way, vertex, context);
65629                             }
65630                         }));
65631                     }
65632
65633                     var placement = isFirst ? 'start' : 'end',
65634                         messageID = wayType + '.',
65635                         referenceID = wayType + '.';
65636
65637                     if (wayType === 'waterway') {
65638                         messageID += 'connected.' + placement;
65639                         referenceID += 'connected';
65640                     } else {
65641                         messageID += placement;
65642                         referenceID += placement;
65643                     }
65644
65645                     return [new validationIssue({
65646                         type: type,
65647                         subtype: wayType,
65648                         severity: 'warning',
65649                         message: function(context) {
65650                             var entity = context.hasEntity(this.entityIds[0]);
65651                             return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
65652                                 feature: utilDisplayLabel(entity, context)
65653                             }) : '';
65654                         },
65655                         reference: getReference(referenceID),
65656                         entityIds: [way.id, node.id],
65657                         fixes: fixes,
65658                         loc: node.loc
65659                     })];
65660
65661                     function getReference(referenceID) {
65662                         return function showReference(selection) {
65663                             selection.selectAll('.issue-reference')
65664                                 .data([0])
65665                                 .enter()
65666                                 .append('div')
65667                                 .attr('class', 'issue-reference')
65668                                 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
65669                         };
65670                     }
65671                 }
65672             };
65673
65674             function continueDrawing(way, vertex, context) {
65675                 // make sure the vertex is actually visible and editable
65676                 var map = context.map();
65677                 if (!map.editable() || !map.trimmedExtent().contains(vertex.loc)) {
65678                     map.zoomToEase(vertex);
65679                 }
65680
65681                 context.enter(
65682                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
65683                 );
65684             }
65685
65686             validation.type = type;
65687
65688             return validation;
65689         }
65690
65691         function validationIncompatibleSource() {
65692             var type = 'incompatible_source';
65693             var invalidSources = [
65694                 {
65695                     id:'google', regex:'google', exceptRegex: 'books.google|Google Books'
65696                 }
65697             ];
65698
65699             var validation = function checkIncompatibleSource(entity) {
65700
65701                 var entitySources = entity.tags && entity.tags.source && entity.tags.source.split(';');
65702
65703                 if (!entitySources) return [];
65704
65705                 var issues = [];
65706
65707                 invalidSources.forEach(function(invalidSource) {
65708
65709                     var hasInvalidSource = entitySources.some(function(source) {
65710                         if (!source.match(new RegExp(invalidSource.regex, 'i'))) return false;
65711                         if (invalidSource.exceptRegex && source.match(new RegExp(invalidSource.exceptRegex, 'i'))) return false;
65712                         return true;
65713                     });
65714
65715                     if (!hasInvalidSource) return;
65716
65717                     issues.push(new validationIssue({
65718                         type: type,
65719                         severity: 'warning',
65720                         message: function(context) {
65721                             var entity = context.hasEntity(this.entityIds[0]);
65722                             return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
65723                                 feature: utilDisplayLabel(entity, context)
65724                             }) : '';
65725                         },
65726                         reference: getReference(invalidSource.id),
65727                         entityIds: [entity.id],
65728                         fixes: [
65729                             new validationIssueFix({
65730                                 title: t('issues.fix.remove_proprietary_data.title')
65731                             })
65732                         ]
65733                     }));
65734                 });
65735
65736                 return issues;
65737
65738
65739                 function getReference(id) {
65740                     return function showReference(selection) {
65741                         selection.selectAll('.issue-reference')
65742                             .data([0])
65743                             .enter()
65744                             .append('div')
65745                             .attr('class', 'issue-reference')
65746                             .text(t('issues.incompatible_source.' + id + '.reference'));
65747                     };
65748                 }
65749             };
65750
65751             validation.type = type;
65752
65753             return validation;
65754         }
65755
65756         function validationMaprules() {
65757             var type = 'maprules';
65758
65759             var validation = function checkMaprules(entity, graph) {
65760                 if (!services$1.maprules) return [];
65761
65762                 var rules = services$1.maprules.validationRules();
65763                 var issues = [];
65764
65765                 for (var i = 0; i < rules.length; i++) {
65766                     var rule = rules[i];
65767                     rule.findIssues(entity, graph, issues);
65768                 }
65769
65770                 return issues;
65771             };
65772
65773
65774             validation.type = type;
65775
65776             return validation;
65777         }
65778
65779         function validationMismatchedGeometry(context) {
65780             var type = 'mismatched_geometry';
65781
65782             function tagSuggestingLineIsArea(entity) {
65783                 if (entity.type !== 'way' || entity.isClosed()) return null;
65784
65785                 var tagSuggestingArea = entity.tagSuggestingArea();
65786                 if (!tagSuggestingArea) {
65787                     return null;
65788                 }
65789
65790                 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
65791                     context.presets().matchTags(tagSuggestingArea, 'area')) {
65792                     // these tags also allow lines and making this an area wouldn't matter
65793                     return null;
65794                 }
65795
65796                 return tagSuggestingArea;
65797             }
65798
65799             function makeConnectEndpointsFixOnClick(way, graph) {
65800                 // must have at least three nodes to close this automatically
65801                 if (way.nodes.length < 3) return null;
65802
65803                 var nodes = graph.childNodes(way), testNodes;
65804                 var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
65805
65806                 // if the distance is very small, attempt to merge the endpoints
65807                 if (firstToLastDistanceMeters < 0.75) {
65808                     testNodes = nodes.slice();   // shallow copy
65809                     testNodes.pop();
65810                     testNodes.push(testNodes[0]);
65811                     // make sure this will not create a self-intersection
65812                     if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
65813                         return function(context) {
65814                             var way = context.entity(this.issue.entityIds[0]);
65815                             context.perform(
65816                                 actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
65817                                 t('issues.fix.connect_endpoints.annotation')
65818                             );
65819                         };
65820                     }
65821                 }
65822
65823                 // if the points were not merged, attempt to close the way
65824                 testNodes = nodes.slice();   // shallow copy
65825                 testNodes.push(testNodes[0]);
65826                 // make sure this will not create a self-intersection
65827                 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
65828                     return function(context) {
65829                         var wayId = this.issue.entityIds[0];
65830                         var way = context.entity(wayId);
65831                         var nodeId = way.nodes[0];
65832                         var index = way.nodes.length;
65833                         context.perform(
65834                             actionAddVertex(wayId, nodeId, index),
65835                             t('issues.fix.connect_endpoints.annotation')
65836                         );
65837                     };
65838                 }
65839             }
65840
65841             function lineTaggedAsAreaIssue(entity, graph) {
65842
65843                 var tagSuggestingArea = tagSuggestingLineIsArea(entity);
65844                 if (!tagSuggestingArea) return null;
65845
65846                 var fixes = [];
65847
65848                 var connectEndsOnClick = makeConnectEndpointsFixOnClick(entity, graph);
65849
65850                 fixes.push(new validationIssueFix({
65851                     title: t('issues.fix.connect_endpoints.title'),
65852                     onClick: connectEndsOnClick
65853                 }));
65854
65855                 fixes.push(new validationIssueFix({
65856                     icon: 'iD-operation-delete',
65857                     title: t('issues.fix.remove_tag.title'),
65858                     onClick: function(context) {
65859                         var entityId = this.issue.entityIds[0];
65860                         var entity = context.entity(entityId);
65861                         var tags = Object.assign({}, entity.tags);  // shallow copy
65862                         for (var key in tagSuggestingArea) {
65863                             delete tags[key];
65864                         }
65865                         context.perform(
65866                             actionChangeTags(entityId, tags),
65867                             t('issues.fix.remove_tag.annotation')
65868                         );
65869                     }
65870                 }));
65871
65872                 return new validationIssue({
65873                     type: type,
65874                     subtype: 'area_as_line',
65875                     severity: 'warning',
65876                     message: function(context) {
65877                         var entity = context.hasEntity(this.entityIds[0]);
65878                         return entity ? t('issues.tag_suggests_area.message', {
65879                             feature: utilDisplayLabel(entity, context),
65880                             tag: utilTagText({ tags: tagSuggestingArea })
65881                         }) : '';
65882                     },
65883                     reference: showReference,
65884                     entityIds: [entity.id],
65885                     hash: JSON.stringify(tagSuggestingArea) +
65886                         // avoid stale "connect endpoints" fix
65887                         (typeof connectEndsOnClick),
65888                     fixes: fixes
65889                 });
65890
65891
65892                 function showReference(selection) {
65893                     selection.selectAll('.issue-reference')
65894                         .data([0])
65895                         .enter()
65896                         .append('div')
65897                         .attr('class', 'issue-reference')
65898                         .text(t('issues.tag_suggests_area.reference'));
65899                 }
65900             }
65901
65902             function vertexTaggedAsPointIssue(entity, graph) {
65903                 // we only care about nodes
65904                 if (entity.type !== 'node') return null;
65905
65906                 // ignore tagless points
65907                 if (Object.keys(entity.tags).length === 0) return null;
65908
65909                 // address lines are special so just ignore them
65910                 if (entity.isOnAddressLine(graph)) return null;
65911
65912                 var geometry = entity.geometry(graph);
65913                 var allowedGeometries = osmNodeGeometriesForTags(entity.tags);
65914
65915                 if (geometry === 'point' && !allowedGeometries.point && allowedGeometries.vertex) {
65916
65917                     return new validationIssue({
65918                         type: type,
65919                         subtype: 'vertex_as_point',
65920                         severity: 'warning',
65921                         message: function(context) {
65922                             var entity = context.hasEntity(this.entityIds[0]);
65923                             return entity ? t('issues.vertex_as_point.message', {
65924                                 feature: utilDisplayLabel(entity, context)
65925                             }) : '';
65926                         },
65927                         reference: function showReference(selection) {
65928                             selection.selectAll('.issue-reference')
65929                                 .data([0])
65930                                 .enter()
65931                                 .append('div')
65932                                 .attr('class', 'issue-reference')
65933                                 .text(t('issues.vertex_as_point.reference'));
65934                         },
65935                         entityIds: [entity.id]
65936                     });
65937
65938                 } else if (geometry === 'vertex' && !allowedGeometries.vertex && allowedGeometries.point) {
65939
65940                     var extractOnClick = null;
65941                     if (!context.hasHiddenConnections(entity.id) &&
65942                         !actionExtract(entity.id, context.projection).disabled(context.graph())) {
65943
65944                         extractOnClick = function(context) {
65945                             var entityId = this.issue.entityIds[0];
65946                             var action = actionExtract(entityId, context.projection);
65947                             context.perform(
65948                                 action,
65949                                 t('operations.extract.annotation.single')
65950                             );
65951                             // re-enter mode to trigger updates
65952                             context.enter(modeSelect(context, [action.getExtractedNodeID()]));
65953                         };
65954                     }
65955
65956                     return new validationIssue({
65957                         type: type,
65958                         subtype: 'point_as_vertex',
65959                         severity: 'warning',
65960                         message: function(context) {
65961                             var entity = context.hasEntity(this.entityIds[0]);
65962                             return entity ? t('issues.point_as_vertex.message', {
65963                                 feature: utilDisplayLabel(entity, context)
65964                             }) : '';
65965                         },
65966                         reference: function showReference(selection) {
65967                             selection.selectAll('.issue-reference')
65968                                 .data([0])
65969                                 .enter()
65970                                 .append('div')
65971                                 .attr('class', 'issue-reference')
65972                                 .text(t('issues.point_as_vertex.reference'));
65973                         },
65974                         entityIds: [entity.id],
65975                         fixes: [
65976                             new validationIssueFix({
65977                                 icon: 'iD-operation-extract',
65978                                 title: t('issues.fix.extract_point.title'),
65979                                 onClick: extractOnClick
65980                             })
65981                         ],
65982                         hash: typeof extractOnClick, // avoid stale extraction fix
65983                     });
65984                 }
65985
65986                 return null;
65987             }
65988
65989             var validation = function checkMismatchedGeometry(entity, graph) {
65990                 var issues = [
65991                     vertexTaggedAsPointIssue(entity, graph),
65992                     lineTaggedAsAreaIssue(entity, graph)
65993                 ];
65994                 return issues.filter(Boolean);
65995             };
65996
65997             validation.type = type;
65998
65999             return validation;
66000         }
66001
66002         function validationMissingRole() {
66003             var type = 'missing_role';
66004
66005             var validation = function checkMissingRole(entity, graph) {
66006                 var issues = [];
66007                 if (entity.type === 'way') {
66008                     graph.parentRelations(entity).forEach(function(relation) {
66009                         if (!relation.isMultipolygon()) return;
66010
66011                         var member = relation.memberById(entity.id);
66012                         if (member && isMissingRole(member)) {
66013                             issues.push(makeIssue(entity, relation, member));
66014                         }
66015                     });
66016                 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
66017                     entity.indexedMembers().forEach(function(member) {
66018                         var way = graph.hasEntity(member.id);
66019                         if (way && isMissingRole(member)) {
66020                             issues.push(makeIssue(way, entity, member));
66021                         }
66022                     });
66023                 }
66024
66025                 return issues;
66026             };
66027
66028
66029             function isMissingRole(member) {
66030                 return !member.role || !member.role.trim().length;
66031             }
66032
66033
66034             function makeIssue(way, relation, member) {
66035                 return new validationIssue({
66036                     type: type,
66037                     severity: 'warning',
66038                     message: function(context) {
66039                         var member = context.hasEntity(this.entityIds[1]),
66040                             relation = context.hasEntity(this.entityIds[0]);
66041                         return (member && relation) ? t('issues.missing_role.message', {
66042                             member: utilDisplayLabel(member, context),
66043                             relation: utilDisplayLabel(relation, context)
66044                         }) : '';
66045                     },
66046                     reference: showReference,
66047                     entityIds: [relation.id, way.id],
66048                     data: {
66049                         member: member
66050                     },
66051                     hash: member.index.toString(),
66052                     fixes: [
66053                         makeAddRoleFix('inner'),
66054                         makeAddRoleFix('outer'),
66055                         new validationIssueFix({
66056                             icon: 'iD-operation-delete',
66057                             title: t('issues.fix.remove_from_relation.title'),
66058                             onClick: function(context) {
66059                                 context.perform(
66060                                     actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
66061                                     t('operations.delete_member.annotation')
66062                                 );
66063                             }
66064                         })
66065                     ]
66066                 });
66067
66068
66069                 function showReference(selection) {
66070                     selection.selectAll('.issue-reference')
66071                         .data([0])
66072                         .enter()
66073                         .append('div')
66074                         .attr('class', 'issue-reference')
66075                         .text(t('issues.missing_role.multipolygon.reference'));
66076                 }
66077             }
66078
66079
66080             function makeAddRoleFix(role) {
66081                 return new validationIssueFix({
66082                     title: t('issues.fix.set_as_' + role + '.title'),
66083                     onClick: function(context) {
66084                         var oldMember = this.issue.data.member;
66085                         var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
66086                         context.perform(
66087                             actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
66088                             t('operations.change_role.annotation')
66089                         );
66090                     }
66091                 });
66092             }
66093
66094             validation.type = type;
66095
66096             return validation;
66097         }
66098
66099         function validationMissingTag() {
66100             var type = 'missing_tag';
66101
66102             function hasDescriptiveTags(entity, graph) {
66103                 var keys = Object.keys(entity.tags)
66104                     .filter(function(k) {
66105                         if (k === 'area' || k === 'name') {
66106                             return false;
66107                         } else {
66108                             return osmIsInterestingTag(k);
66109                         }
66110                     });
66111
66112                 if (entity.type === 'relation' &&
66113                     keys.length === 1 &&
66114                     entity.tags.type === 'multipolygon') {
66115                     // this relation's only interesting tag just says its a multipolygon,
66116                     // which is not descriptive enough
66117
66118                     // It's okay for a simple multipolygon to have no descriptive tags
66119                     // if its outer way has them (old model, see `outdated_tags.js`)
66120                     return osmOldMultipolygonOuterMemberOfRelation(entity, graph);
66121                 }
66122
66123                 return keys.length > 0;
66124             }
66125
66126             function isUnknownRoad(entity) {
66127                 return entity.type === 'way' && entity.tags.highway === 'road';
66128             }
66129
66130             function isUntypedRelation(entity) {
66131                 return entity.type === 'relation' && !entity.tags.type;
66132             }
66133
66134             var validation = function checkMissingTag(entity, graph) {
66135
66136                 // ignore vertex features and relation members
66137                 if (entity.geometry(graph) === 'vertex' || entity.hasParentRelations(graph)) {
66138                     return [];
66139                 }
66140
66141                 var subtype;
66142
66143                 if (Object.keys(entity.tags).length === 0) {
66144                     subtype = 'any';
66145                 } else if (!hasDescriptiveTags(entity, graph)) {
66146                     subtype = 'descriptive';
66147                 } else if (isUntypedRelation(entity)) {
66148                     subtype = 'relation_type';
66149                 } else if (isUnknownRoad(entity)) {
66150                     subtype = 'highway_classification';
66151                 }
66152
66153                 if (!subtype) return [];
66154
66155                 var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
66156
66157                 var fixes = [
66158                     new validationIssueFix({
66159                         icon: 'iD-icon-search',
66160                         title: t('issues.fix.' + selectFixType + '.title'),
66161                         onClick: function(context) {
66162                             context.ui().sidebar.showPresetList();
66163                         }
66164                     })
66165                 ];
66166
66167                 // can always delete if the user created it in the first place..
66168                 var canDelete = (entity.version === undefined || entity.v !== undefined);
66169                 fixes.push(
66170                     new validationIssueFix({
66171                         icon: 'iD-operation-delete',
66172                         title: t('issues.fix.delete_feature.title'),
66173                         onClick: function(context) {
66174                             var id = this.issue.entityIds[0];
66175                             var operation = operationDelete([id], context);
66176                             if (!operation.disabled()) {
66177                                 operation();
66178                             }
66179                         }
66180                     })
66181                 );
66182
66183                 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
66184                 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
66185
66186                 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
66187
66188                 return [new validationIssue({
66189                     type: type,
66190                     subtype: subtype,
66191                     severity: severity,
66192                     message: function(context) {
66193                         var entity = context.hasEntity(this.entityIds[0]);
66194                         return entity ? t('issues.' + messageID + '.message', {
66195                             feature: utilDisplayLabel(entity, context)
66196                         }) : '';
66197                     },
66198                     reference: showReference,
66199                     entityIds: [entity.id],
66200                     fixes: fixes
66201                 })];
66202
66203
66204                 function showReference(selection) {
66205                     selection.selectAll('.issue-reference')
66206                         .data([0])
66207                         .enter()
66208                         .append('div')
66209                         .attr('class', 'issue-reference')
66210                         .text(t('issues.' + referenceID + '.reference'));
66211                 }
66212             };
66213
66214             validation.type = type;
66215
66216             return validation;
66217         }
66218
66219         var brands = {"amenity/animal_boarding|PetsHotel":{countryCodes:["ca","us"],tags:{amenity:"animal_boarding",animal_boarding:"dog;cat",brand:"PetsHotel","brand:wikidata":"Q67141961",name:"PetsHotel"}},"amenity/bank|ABANCA":{countryCodes:["es"],tags:{amenity:"bank",brand:"ABANCA","brand:wikidata":"Q9598744","brand:wikipedia":"es:Abanca",name:"ABANCA",official_name:"ABANCA Corporación Bancaria"}},"amenity/bank|ABN AMRO":{countryCodes:["nl"],tags:{amenity:"bank",brand:"ABN AMRO","brand:wikidata":"Q287471","brand:wikipedia":"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|AMP":{countryCodes:["au","nz"],matchNames:["amp bank"],tags:{amenity:"bank",brand:"AMP","brand:wikidata":"Q295261","brand:wikipedia":"en:AMP Limited",name:"AMP",official_name:"AMP Limited"}},"amenity/bank|ANZ":{countryCodes:["au","nz"],matchNames:["anz bank"],tags:{amenity:"bank",brand:"ANZ","brand:wikidata":"Q714641","brand:wikipedia":"en:Australia and New Zealand Banking Group",name:"ANZ",official_name:"Australia and New Zealand Banking Group Limited"}},"amenity/bank|ASB Bank":{countryCodes:["nz"],tags:{amenity:"bank",brand:"ASB Bank","brand:wikidata":"Q297214","brand:wikipedia":"en:ASB Bank",name:"ASB Bank"}},"amenity/bank|ATB Financial":{countryCodes:["ca"],tags:{amenity:"bank",brand:"ATB Financial","brand:wikidata":"Q298762","brand:wikipedia":"en:ATB Financial",name:"ATB Financial",official_name:"Alberta Treasury Branches"}},"amenity/bank|AXA":{nomatch:["office/insurance|AXA"],tags:{amenity:"bank",brand:"AXA","brand:wikidata":"Q160054","brand:wikipedia":"en:AXA",name:"AXA"}},"amenity/bank|Access Bank":{tags:{amenity:"bank",brand:"Access Bank","brand:wikidata":"Q4672418","brand:wikipedia":"en:Access Bank plc",name:"Access Bank"}},"amenity/bank|ActivoBank":{countryCodes:["pt"],tags:{amenity:"bank",brand:"ActivoBank","brand:wikidata":"Q9581725","brand:wikipedia":"pt:ActivoBank",name:"ActivoBank"}},"amenity/bank|Addiko Bank":{countryCodes:["ba","hr","me","rs","si"],tags:{amenity:"bank",brand:"Addiko Bank","brand:wikidata":"Q27926559","brand:wikipedia":"en:Addiko Bank",name:"Addiko Bank"}},"amenity/bank|Affinity Credit Union":{countryCodes:["ca"],matchNames:["affinity"],tags:{amenity:"bank",brand:"Affinity Credit Union","brand:wikidata":"Q4688969","brand:wikipedia":"en:Affinity Credit Union",name:"Affinity Credit Union"}},"amenity/bank|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|BCEE":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BCEE","brand:wikidata":"Q668996","brand:wikipedia":"en:Banque et Caisse d'Épargne de l'État",name:"BCEE",official_name:"Banque et Caisse d'Épargne de l'État"}},"amenity/bank|BCI":{matchNames:["banco bci"],tags:{amenity:"bank",brand:"BCI","brand:wikidata":"Q2882083","brand:wikipedia":"es:Banco de Crédito e Inversiones",name:"BCI",official_name:"Banco de Crédito e Inversiones","official_name:en":"Bank of Credit and Investments","official_name:es":"Banco de Crédito e Inversiones"}},"amenity/bank|BCP~(Bolivia)":{countryCodes:["bo"],nomatch:["amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q16826675","brand:wikipedia":"es:Banco de Crédito de Bolivia",name:"BCP",official_name:"Banco de Crédito de Bolivia","official_name:en":"Credit Bank of Bolivia","official_name:es":"Banco de Crédito de Bolivia"}},"amenity/bank|BCP~(France)":{countryCodes:["fr"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(Luxembourg)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Luxembourg)":{countryCodes:["lu"],matchNames:["banque bcp","bcp"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Peru)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q118581","brand:wikipedia":"pt:Banco Comercial Português",name:"BCP"}},"amenity/bank|BCP~(Peru)":{countryCodes:["pe"],matchNames:["banco de crédito del perú"],nomatch:["amenity/bank|BCP~(Bolivia)","amenity/bank|BCP~(France)","amenity/bank|BCP~(Luxembourg)"],tags:{amenity:"bank",brand:"BCP","brand:wikidata":"Q4854124","brand:wikipedia":"es:Banco de Crédito del Perú",name:"BCP"}},"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|BDM":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BDM","brand:wikidata":"Q2883022","brand:wikipedia":"fr:Banque de développement du Mali",name:"BDM",official_name:"Banque du Développement du Mali"}},"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|BECU":{countryCodes:["us"],tags:{amenity:"bank",brand:"BECU","brand:wikidata":"Q4835409","brand:wikipedia":"en:BECU",name:"BECU"}},"amenity/bank|BGL BNP Paribas":{countryCodes:["lu"],nomatch:["amenity/bank|BGŻ BNP Paribas"],tags:{amenity:"bank",brand:"BGL BNP Paribas","brand:wikidata":"Q795898","brand:wikipedia":"en:BGL BNP Paribas",name:"BGL BNP Paribas"}},"amenity/bank|BGŻ BNP Paribas":{countryCodes:["pl"],tags:{amenity:"bank",brand:"BGŻ BNP Paribas","brand:wikidata":"Q20744004","brand:wikipedia":"pl:BNP Paribas Bank Polska",name:"BGŻ BNP Paribas"}},"amenity/bank|BIAT":{countryCodes:["tn"],tags:{amenity:"bank",brand:"BIAT","brand:wikidata":"Q690739","brand:wikipedia":"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|BIL":{countryCodes:["lu"],tags:{amenity:"bank",brand:"BIL","brand:wikidata":"Q2883404","brand:wikipedia":"en:Banque Internationale à Luxembourg",name:"BIL",official_name:"Banque Internationale à Luxembourg"}},"amenity/bank|BMCE Bank":{countryCodes:["ma"],matchNames:["bmce"],tags:{amenity:"bank",brand:"BMCE Bank","brand:wikidata":"Q2300433","brand:wikipedia":"ar:البنك المغربي للتجارة الخارجية",name:"BMCE Bank"}},"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|BNDA":{countryCodes:["ml"],tags:{amenity:"bank",brand:"BNDA","brand:wikidata":"Q30594734","brand:wikipedia":"en:Banque Nationale de Développement Agricole",name:"BNDA",official_name:"Banque Nationale de Développement Agricole"}},"amenity/bank|BNI":{matchNames:["bank bni"],tags:{amenity:"bank",brand:"BNI","brand:wikidata":"Q2882611","brand:wikipedia":"id:Bank Negara Indonesia",name:"BNI",official_name:"Bank Negara Indonesia","official_name:en":"State Bank of Indonesia","official_name:id":"Bank Negara Indonesia"}},"amenity/bank|BNL":{countryCodes:["it"],tags:{amenity:"bank",brand:"BNL","brand:wikidata":"Q2201225","brand:wikipedia":"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|BOM":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOM","brand:wikidata":"Q4856151","brand:wikipedia":"en:Bank of Melbourne (2011)",name:"BOM",official_name:"Bank of Melbourne"}},"amenity/bank|BOQ":{countryCodes:["au"],tags:{amenity:"bank",brand:"BOQ","brand:wikidata":"Q4856173","brand:wikipedia":"en:Bank of Queensland",name:"BOQ",official_name:"Bank of Queensland"}},"amenity/bank|BPER Banca":{countryCodes:["it"],tags:{amenity:"bank",brand:"BPER Banca","brand:wikidata":"Q806167","brand:wikipedia":"it:BPER Banca",name:"BPER Banca",official_name:"Banca Popolare dell'Emilia Romagna"}},"amenity/bank|BPI~(Global)":{matchNames:["bpi family savings bank"],nomatch:["amenity/bank|Banco BPI~(Portugal)"],tags:{amenity:"bank",brand:"BPI","brand:wikidata":"Q2501256","brand:wikipedia":"en:Bank of the Philippine Islands",name:"BPI",official_name:"Bank of the Philippine Islands"}},"amenity/bank|BRD":{countryCodes:["ro"],tags:{amenity:"bank",brand:"BRD","brand:wikidata":"Q796927","brand:wikipedia":"ro:BRD - Groupe Société Générale",name:"BRD"}},"amenity/bank|BRED":{countryCodes:["fr"],tags:{amenity:"bank",brand:"BRED","brand:wikidata":"Q2877455","brand:wikipedia":"fr:BRED Banque populaire",name:"BRED",official_name:"Banque régionale d'escompte et de dépôts","official_name:en":"Regional Discount and Deposit Bank","official_name:fr":"Banque régionale d'escompte et de dépôts"}},"amenity/bank|BRI":{countryCodes:["id"],matchNames:["bank bri"],tags:{amenity:"bank",brand:"BRI","brand:wikidata":"Q623042","brand:wikipedia":"id:Bank Rakyat Indonesia",name:"BRI",official_name:"Bank Rakyat Indonesia","official_name:en":"People's Bank of Indonesia","official_name:id":"Bank Rakyat Indonesia"}},"amenity/bank|BTN":{countryCodes:["id"],tags:{amenity:"bank",brand:"BTN","brand:en":"BTN","brand:id":"BTN","brand:wikidata":"Q12474534","brand:wikipedia":"id:Bank Tabungan Negara",name:"BTN","name:en":"BTN","name:id":"BTN",official_name:"Bank Tabungan Negara","official_name:en":"State Savings Bank","official_name:id":"Bank Tabungan Negara"}},"amenity/bank|BW-Bank":{countryCodes:["de"],matchNames:["baden-württembergische bank"],tags:{amenity:"bank",brand:"BW-Bank","brand:de":"BW-Bank","brand:en":"BW-Bank","brand:wikidata":"Q798891","brand:wikipedia":"de:Baden-Württembergische Bank",name:"BW-Bank","name:de":"BW-Bank","name:en":"BW-Bank"}},"amenity/bank|Banamex":{countryCodes:["mx"],tags:{amenity:"bank",brand:"Banamex","brand:wikidata":"Q749474","brand:wikipedia":"en:Grupo Financiero Banamex",name:"Banamex",official_name:"Grupo Financiero Banamex","official_name:en":"Banamex Financial Group","official_name:es":"Grupo Financiero Banamex"}},"amenity/bank|Banca Intesa":{countryCodes:["it","rs"],tags:{amenity:"bank",brand:"Banca Intesa","brand:wikidata":"Q647092","brand:wikipedia":"en:Banca Intesa",name:"Banca Intesa","name:en":"Intesa Bank","name:it":"Banca Intesa"}},"amenity/bank|Banca March":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banca March","brand:wikidata":"Q578252","brand:wikipedia":"en:Banca March",name:"Banca March"}},"amenity/bank|Banca Mediolanum":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Mediolanum","brand:wikidata":"Q3633712","brand:wikipedia":"en:Banca Mediolanum",name:"Banca Mediolanum"}},"amenity/bank|Banca Popolare di Bari":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Bari","brand:wikidata":"Q3633730","brand:wikipedia":"en:Banca Popolare di Bari",name:"Banca Popolare di Bari"}},"amenity/bank|Banca Popolare di Milano":{countryCodes:["it"],matchNames:["bpm"],tags:{amenity:"bank",brand:"Banca Popolare di Milano","brand:en":"Popular Bank of Milan","brand:it":"Banca Popolare di Milano","brand:wikidata":"Q806154","brand:wikipedia":"en:Banca Popolare di Milano",name:"Banca Popolare di Milano","name:en":"Popular Bank of Milan","name:it":"Banca Popolare di Milano"}},"amenity/bank|Banca Popolare di Novara":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Novara","brand:en":"Popular Bank of Novara","brand:it":"Banca Popolare di Novara","brand:wikidata":"Q3633742","brand:wikipedia":"en:Banca Popolare di Novara",name:"Banca Popolare di Novara","name:en":"Popular Bank of Novara","name:it":"Banca Popolare di Novara"}},"amenity/bank|Banca Popolare di Sondrio":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Sondrio","brand:en":"Popular Bank of Sandrio","brand:it":"Banca Popolare di Sondrio","brand:wikidata":"Q686176","brand:wikipedia":"en:Banca Popolare di Sondrio",name:"Banca Popolare di Sondrio","name:en":"Popular Bank of Sandrio","name:it":"Banca Popolare di Sondrio"}},"amenity/bank|Banca Popolare di Verona":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Verona","brand:en":"Popular Bank of Verona","brand:it":"Banca Popolare di Verona","brand:wikidata":"Q3167468","brand:wikipedia":"en:Banca Popolare di Verona",name:"Banca Popolare di Verona","name:en":"Popular Bank of Verona","name:it":"Banca Popolare di Verona"}},"amenity/bank|Banca Popolare di Vicenza":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Popolare di Vicenza","brand:en":"Popular Bank of Vicenza","brand:it":"Banca Popolare di Vicenza","brand:wikidata":"Q3127200","brand:wikipedia":"en:Banca Popolare di Vicenza",name:"Banca Popolare di Vicenza","name:en":"Popular Bank of Vicena","name:it":"Banca Popolare di Vicenza"}},"amenity/bank|Banca Românească":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Românească","brand:en":"Romanian Bank","brand:ro":"Banca Românească","brand:wikidata":"Q4854052","brand:wikipedia":"ro:Banca Românească",name:"Banca Românească","name:en":"Popular Bank of Vicena","name:ro":"Banca Românească"}},"amenity/bank|Banca Sella":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banca Sella","brand:en":"Sella Bank","brand:it":"Banca Sella","brand:wikidata":"Q3633749","brand:wikipedia":"en:Banca Sella Group",name:"Banca Sella","name:en":"Sella Bank","name:it":"Banca Sella"}},"amenity/bank|Banca Transilvania":{countryCodes:["ro"],tags:{amenity:"bank",brand:"Banca Transilvania","brand:en":"Transilvania Bank","brand:ro":"Banca Transilvania","brand:wikidata":"Q806161","brand:wikipedia":"en:Banca Transilvania",name:"Banca Transilvania","name:en":"Transilvania Bank","name:ro":"Banca Transilvania"}},"amenity/bank|Bancaribe":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bancaribe","brand:wikidata":"Q5717827","brand:wikipedia":"en:Bancaribe",name:"Bancaribe"}},"amenity/bank|Banco AV Villas":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco AV Villas","brand:en":"Bank of Villas","brand:es":"Banco AV Villas","brand:wikidata":"Q4854068","brand:wikipedia":"en:Banco AV Villas",name:"Banco AV Villas","name:en":"Bank of Villas","name:es":"Banco AV Villas"}},"amenity/bank|Banco Agrario":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Agrario","brand:en":"Agrarian Bank","brand:wikidata":"Q20013358","brand:wikipedia":"es:Banco Agrario de Colombia",name:"Banco Agrario","name:en":"Agrarian Bank","name:es":"Banco Agrario",official_name:"Banco Agrario de Colombia","official_name:en":"Agrarian Bank of Colombia","official_name:es":"Banco Agrario de Colombia"}},"amenity/bank|Banco Azteca":{tags:{amenity:"bank",brand:"Banco Azteca","brand:en":"Aztec Bank","brand:es":"Banco Azteca","brand:wikidata":"Q4854076","brand:wikipedia":"en:Banco Azteca",name:"Banco Azteca","name:en":"Aztec Bank","name:es":"Banco Azteca"}},"amenity/bank|Banco BPI~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/bank|BPI~(Global)"],tags:{amenity:"bank",brand:"Branco BPI","brand:wikidata":"Q537886","brand:wikipedia":"en:Banco Português de Investimento",name:"Banco BPI",official_name:"Banco Português de Investimento",short_name:"BPI"}},"amenity/bank|Banco BPM":{countryCodes:["it"],tags:{amenity:"bank",brand:"Banco BPM","brand:en":"BPM Bank","brand:es":"Banco BPM","brand:wikidata":"Q27331643","brand:wikipedia":"en:Banco BPM",name:"Banco BPM","name:en":"BPM Bank","name:es":"Banco BPM"}},"amenity/bank|Banco CTT":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Banco CTT","brand:wikidata":"Q65161642","brand:wikipedia":"pt:Banco CTT",name:"Banco CTT"}},"amenity/bank|Banco Caja Social":{countryCodes:["co"],tags:{amenity:"bank",brand:"Banco Caja Social","brand:en":"Social Housing Bank","brand:es":"Banco Caja Social","brand:wikidata":"Q5717869","brand:wikipedia":"es:Banco Caja Social",name:"Banco Caja Social","name:en":"Social Housing Bank","name:es":"Banco Caja Social"}},"amenity/bank|Banco Ciudad":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Ciudad","brand:en":"City Bank","brand:es":"Banco Ciudad","brand:wikidata":"Q4856204","brand:wikipedia":"en:Bank of the City of Buenos Aires",name:"Banco Ciudad","name:en":"City Bank","name:es":"Banco Ciudad",official_name:"Banco Ciudad de Buenos Aires","official_name:en":"Bank of the City of Buenos Aires","official_name:es":"Banco Ciudad de Buenos Aires"}},"amenity/bank|Banco Continental~(Paraguay)":{countryCodes:["py"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q62054564",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Continental~(Peru)":{countryCodes:["pe"],tags:{amenity:"bank",brand:"Banco Continental","brand:en":"Continental Bank","brand:es":"Banco Continental","brand:wikidata":"Q4835089","brand:wikipedia":"en:BBVA Continental",name:"Banco Continental","name:en":"Continental Bank","name:es":"Banco Continental"}},"amenity/bank|Banco Estado":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Estado","brand:en":"State Bank","brand:es":"Banco Estado","brand:wikidata":"Q5718188","brand:wikipedia":"es:Banco del Estado de Chile",name:"Banco Estado","name:en":"State Bank","name:es":"Banco Estado",official_name:"Banco del Estado de Chile","official_name:en":"Bank of the State of Chile","official_name:es":"Banco del Estado de Chile"}},"amenity/bank|Banco Falabella":{countryCodes:["cl","co","pe"],nomatch:["shop/department_store|Falabella"],tags:{amenity:"bank",brand:"Banco Falabella","brand:en":"Falabella Bank","brand:es":"Banco Falabella","brand:wikidata":"Q4854088","brand:wikipedia":"en:Banco Falabella",name:"Banco Falabella","name:en":"Falabella Bank","name:es":"Banco Falabella"}},"amenity/bank|Banco Fassil":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fassil","brand:en":"Fassil Bank","brand:es":"Banco Fassil","brand:wikidata":"Q62118592",name:"Banco Fassil","name:en":"Fassil Bank","name:es":"Banco Fassil"}},"amenity/bank|Banco G&T Continental":{countryCodes:["gt","sv"],tags:{amenity:"bank",brand:"Banco G&T Continental","brand:en":"G&T Continental Bank","brand:es":"Banco G&T Continental","brand:wikidata":"Q5717949","brand:wikipedia":"es:Banco GYT Continental, S.A.",name:"Banco G&T Continental","name:en":"G&T Continental Bank","name:es":"Banco G&T Continental"}},"amenity/bank|Banco General":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"BW-Bank","brand:en":"BW-Bank","brand:es":"BW-Bank","brand:wikidata":"Q27618271","brand:wikipedia":"es:Banco General (Panamá)",name:"Banco General","name:en":"General Bank","name:es":"Banco General"}},"amenity/bank|Banco Industrial":{tags:{amenity:"bank",brand:"Banco Industrial","brand:en":"Industrial Bank","brand:es":"Banco Industrial","brand:wikidata":"Q16489444","brand:wikipedia":"es:Banco Industrial",name:"Banco Industrial","name:en":"Industrial Bank","name:es":"Banco Industrial"}},"amenity/bank|Banco Internacional~(Chile)":{countryCodes:["cl"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q56605586","brand:wikipedia":"es:Banco Internacional (Chile)",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Internacional~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"bank",brand:"Banco Internacional","brand:en":"International Bank","brand:es":"Banco Internacional","brand:wikidata":"Q806187","brand:wikipedia":"es:Banco Internacional",name:"Banco Internacional","name:en":"International Bank","name:es":"Banco Internacional"}},"amenity/bank|Banco Metropolitano":{countryCodes:["cu"],tags:{amenity:"bank",brand:"Banco Metropolitano","brand:en":"Metroplitan Bank","brand:es":"Banco Metropolitano","brand:wikidata":"Q62118612",name:"Banco Metropolitano","name:en":"Metropolitan Bank","name:es":"Banco Metropolitano"}},"amenity/bank|Banco Nacional":{countryCodes:["cr","pa"],tags:{amenity:"bank",brand:"Banco Nacional de Costa Rica","brand:en":"National Bank of Costa Rica","brand:es":"Banco Nacional de Costa Rica","brand:wikidata":"Q2917708","brand:wikipedia":"es:Banco Nacional de Costa Rica",name:"Banco Nacional","name:en":"National Bank","name:es":"Banco Nacional",official_name:"Banco Nacional de Costa Rica","official_name:en":"National Bank of Costa Rica","official_name:es":"Banco Nacional de Costa Rica",short_name:"BNCR"}},"amenity/bank|Banco Nación":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Nación","brand:en":"Nation Bank","brand:es":"Banco Nación","brand:wikidata":"Q2883376","brand:wikipedia":"en:Banco de la Nación Argentina",name:"Banco Nación","name:en":"Nation Bank","name:es":"Banco Nación",official_name:"Banco de la Nación Argentina","official_name:en":"Bank of the Argentine Nation","official_name:es":"Banco de la Nación Argentina"}},"amenity/bank|Banco Pastor":{countryCodes:["es"],tags:{amenity:"bank",brand:"Banco Pastor","brand:en":"Shepherd Bank","brand:es":"Banco Pastor","brand:wikidata":"Q806193","brand:wikipedia":"en:Banco Pastor",name:"Banco Pastor","name:en":"Shepherd Bank","name:es":"Banco Pastor",official_name:"Banco Popular Pastor","official_name:en":"Popular Shepherd Bank","official_name:es":"Banco Popular Pastor"}},"amenity/bank|Banco Pichincha":{tags:{amenity:"bank",brand:"Banco Pichincha","brand:en":"Pichincha Bank","brand:es":"Banco Pichincha","brand:wikidata":"Q4854135","brand:wikipedia":"en:Banco Pichincha",name:"Banco Pichincha","name:en":"Pichincha Bank","name:es":"Banco Pichincha"}},"amenity/bank|Banco Popular de Ahorro":{countryCodes:["cu"],matchNames:["bpa"],tags:{amenity:"bank",brand:"Banco Popular de Ahorro","brand:en":"Popular Saving Bank","brand:es":"Banco Popular de Ahorro","brand:wikidata":"Q62118626",name:"Banco Popular de Ahorro","name:en":"Popular Saving Bank","name:es":"Banco Popular de Ahorro"}},"amenity/bank|Banco Provincia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Provincia","brand:en":"Province Bank","brand:es":"Banco Provincia","brand:wikidata":"Q4856209","brand:wikipedia":"es:Banco de la Provincia de Buenos Aires",name:"Banco Provincia","name:en":"Province Bank","name:es":"Banco Provincia",official_name:"Banco de la Provincia de Buenos Aires","official_name:en":"Bank of the Province of Buenos Aires","official_name:es":"Banco de la Provincia de Buenos Aires"}},"amenity/bank|Banco Sabadell":{countryCodes:["es"],matchNames:["banc sabadell","sabadell"],tags:{amenity:"bank",brand:"Banco Sabadell","brand:ca":"Banc Sabadell","brand:es":"Banco Sabadell","brand:wikidata":"Q762330","brand:wikipedia":"es:Banco Sabadell",name:"Banco Sabadell","name:ca":"Banc Sabadell","name:es":"Banco Sabadell",official_name:"Banco de Sabadell, S.A."}},"amenity/bank|Banco Santa Fe":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Banco Santa Fe","brand:en":"Santa Fe Bank","brand:es":"Banco Santa Fe","brand:wikidata":"Q6046871","brand:wikipedia":"es:Nuevo Banco de Santa Fe",name:"Banco Santa Fe","name:en":"Santa Fe Bank","name:es":"Banco Santa Fe",official_name:"Nuevo Banco de Santa Fe","official_name:en":"New Bank of Santa Fe","official_name:es":"Nuevo Banco de Santa Fe"}},"amenity/bank|Banco Santander":{nomatch:["amenity/bank|Santander"],tags:{amenity:"bank",brand:"Banco Santander","brand:en":"Santander Bank","brand:es":"Banco Santander","brand:wikidata":"Q6496310","brand:wikipedia":"es:Banco Santander",name:"Banco Santander","name:en":"Santander Bank","name:es":"Banco Santander",official_name:"Santander Group"}},"amenity/bank|Banco Sol~(Angola)":{countryCodes:["ao"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118744",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Sol~(Bolivia)":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Sol","brand:en":"Sol Bank","brand:pt":"Banco Sol","brand:wikidata":"Q62118746",name:"Banco Sol","name:en":"Sol Bank","name:pt":"Banco Sol"}},"amenity/bank|Banco Unión":{countryCodes:["bo"],nomatch:["amenity/bank|UnionBank","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"Banco Unión","brand:en":"Union Bank","brand:es":"Banco Unión",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","brand:wikidata":"Q806950","brand:wikipedia":"en:Bank of France",name:"Banque de France"}},"amenity/bank|Banque de l'Habitat du Mali":{countryCodes:["ml"],tags:{amenity:"bank",brand:"Banque de l'Habitat du Mali","brand:wikidata":"Q4857076","brand:wikipedia":"en:Banque de l'Habitat du Mali",name:"Banque de l'Habitat du Mali"}},"amenity/bank|Banrisul":{countryCodes:["br"],tags:{amenity:"bank",brand:"Banrisul","brand:wikidata":"Q4857098","brand:wikipedia":"en:Banrisul",name:"Banrisul"}},"amenity/bank|Banrural":{countryCodes:["gt","hn"],tags:{amenity:"bank",brand:"Banrural","brand:wikidata":"Q5719130","brand:wikipedia":"es:Banrural",name:"Banrural"}},"amenity/bank|Barclays":{matchNames:["barclays bank"],tags:{amenity:"bank",brand:"Barclays","brand:wikidata":"Q245343","brand:wikipedia":"en:Barclays",name:"Barclays"}},"amenity/bank|Bcc":{countryCodes:["it"],tags:{amenity:"bank",brand:"Bcc","brand:wikidata":"Q25060394","brand:wikipedia":"en:Banca di Credito Cooperativo di Roma",name:"Bcc"}},"amenity/bank|Belfius":{countryCodes:["be"],tags:{amenity:"bank",brand:"Belfius","brand:wikidata":"Q1956014","brand:wikipedia":"en:Belfius",name:"Belfius"}},"amenity/bank|Bendigo Bank":{countryCodes:["au"],tags:{amenity:"bank",brand:"Bendigo Bank","brand:wikidata":"Q4887077","brand:wikipedia":"en:Bendigo and Adelaide Bank",name:"Bendigo Bank"}},"amenity/bank|Berliner Volksbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"Berliner Volksbank","brand:wikidata":"Q821855","brand:wikipedia":"de:Berliner Volksbank",name:"Berliner Volksbank"}},"amenity/bank|Bicentenario":{countryCodes:["ve"],tags:{amenity:"bank",brand:"Bicentenario","brand:wikidata":"Q5728123","brand:wikipedia":"es:Bicentenario Banco Universal",name:"Bicentenario"}},"amenity/bank|Bicici":{countryCodes:["ci"],matchNames:["agence bicici"],tags:{amenity:"bank",brand:"Bicici","brand:wikidata":"Q1667302","brand:wikipedia":"fr:Banque internationale pour le commerce et l'industrie de la Côte d'Ivoire",name:"Bicici"}},"amenity/bank|Bradesco":{countryCodes:["br"],matchNames:["banco bradesco"],tags:{amenity:"bank",brand:"Bradesco","brand:wikidata":"Q806181","brand:wikipedia":"en:Banco Bradesco",name:"Bradesco"}},"amenity/bank|Budapest Bank":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Budapest Bank","brand:wikidata":"Q27493463","brand:wikipedia":"en:Budapest Bank",name:"Budapest Bank"}},"amenity/bank|CBAO":{countryCodes:["sn"],tags:{amenity:"bank",brand:"CBAO","brand:wikidata":"Q532104","brand:wikipedia":"fr:CBAO Groupe Attijariwafa bank",name:"CBAO"}},"amenity/bank|CEC Bank":{countryCodes:["ro"],tags:{amenity:"bank",brand:"CEC Bank","brand:wikidata":"Q1023306","brand:wikipedia":"en:CEC Bank",name:"CEC Bank"}},"amenity/bank|CIB Bank":{tags:{amenity:"bank",brand:"CIB Bank","brand:wikidata":"Q839566","brand:wikipedia":"en:CIB Bank",name:"CIB Bank"}},"amenity/bank|CIBC":{countryCodes:["ca"],matchNames:["cibc banking centre"],tags:{amenity:"bank",brand:"CIBC","brand:wikidata":"Q666694","brand:wikipedia":"en:Canadian Imperial Bank of Commerce",name:"CIBC"}},"amenity/bank|CIC":{countryCodes:["fr"],tags:{amenity:"bank",brand:"CIC","brand:wikidata":"Q746525","brand:wikipedia":"en:Crédit Industriel et Commercial",name:"CIC"}},"amenity/bank|CIH Bank":{countryCodes:["ma"],tags:{amenity:"bank",brand:"CIH Bank","brand:wikidata":"Q3006220","brand:wikipedia":"en:CIH Bank",name:"CIH Bank"}},"amenity/bank|CIMB Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"CIMB Bank","brand:wikidata":"Q3045976","brand:wikipedia":"en:CIMB",name:"CIMB Bank"}},"amenity/bank|CIMB Niaga":{countryCodes:["id"],tags:{amenity:"bank",brand:"CIMB Niaga","brand:wikidata":"Q5011747","brand:wikipedia":"en:CIMB Niaga",name:"CIMB Niaga"}},"amenity/bank|CNEP":{countryCodes:["dz"],tags:{amenity:"bank",brand:"CNEP","brand:wikidata":"Q2931752","brand:wikipedia":"fr:CNEP-Banque",name:"CNEP"}},"amenity/bank|CRDB Bank":{countryCodes:["tz"],tags:{amenity:"bank",brand:"CRDB Bank","brand:wikidata":"Q5013848","brand:wikipedia":"en:CRDB Bank",name:"CRDB Bank"}},"amenity/bank|Caisse 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":{countryCodes:["co","cr","hn","pa","sv"],matchNames:["banco davivienda"],tags:{amenity:"bank",brand:"Davivienda","brand:wikidata":"Q5242054","brand:wikipedia":"es:Davivienda",name:"Davivienda"}},"amenity/bank|Denizbank":{tags:{amenity:"bank",brand:"Denizbank","brand:wikidata":"Q1115064","brand:wikipedia":"en:DenizBank",name:"Denizbank"}},"amenity/bank|Desjardins":{countryCodes:["ca"],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|EuroBic":{countryCodes:["pt"],matchNames:["banco bic"],tags:{amenity:"bank",brand:"EuroBic","brand:wikidata":"Q806175","brand:wikipedia":"pt:EuroBic",name:"EuroBic",official_name:"Banco BIC Português"}},"amenity/bank|Eurobank~(Greece)":{countryCodes:["gr"],matchNames:["eurobank ergasias"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q951850","brand:wikipedia":"el:Eurobank",name:"Eurobank"}},"amenity/bank|Eurobank~(Poland)":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q9256201","brand:wikipedia":"pl:Euro Bank",name:"Eurobank"}},"amenity/bank|Eurobank~(Serbia)":{countryCodes:["rs"],tags:{amenity:"bank",brand:"Eurobank","brand:wikidata":"Q5411684","brand:wikipedia":"sr:Eurobanka",name:"Eurobank"}},"amenity/bank|FNB~(South Africa)":{countryCodes:["bw","mz","na","us","za","zm"],tags:{amenity:"bank",brand:"FNB","brand:wikidata":"Q3072956","brand:wikipedia":"en:First National Bank (South Africa)",name:"FNB",official_name:"First National Bank"}},"amenity/bank|Faysal Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Faysal Bank","brand:wikidata":"Q5439099","brand:wikipedia":"en:Faysal Bank",name:"Faysal Bank"}},"amenity/bank|Federal Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Federal Bank","brand:wikidata":"Q2044983","brand:wikipedia":"en:Federal Bank",name:"Federal Bank"}},"amenity/bank|Fidelity Bank~(Ghana)":{countryCodes:["gh"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446778","brand:wikipedia":"en:Fidelity Bank Ghana",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(Nigeria)":{countryCodes:["ng"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q5446777","brand:wikipedia":"en:Fidelity Bank Nigeria",name:"Fidelity Bank"}},"amenity/bank|Fidelity Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fidelity Bank","brand:wikidata":"Q1411292","brand:wikipedia":"en:Fidelity Investments",name:"Fidelity Bank"}},"amenity/bank|Fifth Third Bank":{countryCodes:["us"],matchNames:["5/3"],tags:{amenity:"bank",brand:"Fifth Third Bank","brand:wikidata":"Q1411810","brand:wikipedia":"en:Fifth Third Bank",name:"Fifth Third Bank",short_name:"5/3 Bank"}},"amenity/bank|Finansbank":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Finansbank","brand:wikidata":"Q1416237","brand:wikipedia":"en:Finansbank",name:"Finansbank"}},"amenity/bank|First Bank~(North and South Carolina)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452332","brand:wikipedia":"en:First Bancorp",name:"First Bank"}},"amenity/bank|First Bank~(Puerto Rico)":{countryCodes:["us"],matchNames:["1st bancorp","1st bank","first bancorp"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452333","brand:wikipedia":"en:First BanCorp",name:"First Bank"}},"amenity/bank|First Bank~(Western USA)":{countryCodes:["us"],matchNames:["1st bank"],tags:{amenity:"bank",brand:"First Bank","brand:wikidata":"Q5452217","brand:wikipedia":"en:FirstBank Holding Co",name:"First Bank",short_name:"1STBank"}},"amenity/bank|First Citizens Bank~(Trinidad and Tobago)":{countryCodes:["bb","tt"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452734","brand:wikipedia":"en:First Citizens Bank (Trinidad and Tobago)",name:"First Citizens Bank"}},"amenity/bank|First Citizens Bank~(USA)":{countryCodes:["us"],matchNames:["1st citizens bank"],tags:{amenity:"bank",brand:"First Citizens Bank","brand:wikidata":"Q5452733","brand:wikipedia":"en:First Citizens BancShares",name:"First Citizens Bank"}},"amenity/bank|First Financial Bank":{countryCodes:["us"],matchNames:["1st financial bank"],tags:{amenity:"bank",brand:"First Financial Bank","brand:wikidata":"Q5453009","brand:wikipedia":"en:First Financial Bank (Ohio)",name:"First Financial Bank"}},"amenity/bank|First Interstate Bank":{countryCodes:["us"],matchNames:["1st interstate","1st interstate bancsystem","1st interstate bank","first interstate","first interstate bancsystem"],tags:{amenity:"bank",brand:"First Interstate BancSystem","brand:wikidata":"Q5453107","brand:wikipedia":"en:First Interstate BancSystem",name:"First Interstate Bank"}},"amenity/bank|First Midwest Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First Midwest Bank","brand:wikidata":"Q5453331","brand:wikipedia":"en:First Midwest Bank",name:"First Midwest Bank"}},"amenity/bank|First National Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"First National Bank","brand:wikidata":"Q5426765","brand:wikipedia":"en:F.N.B. Corporation",name:"First National Bank"}},"amenity/bank|First State Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"First State Bank",name:"First State Bank"}},"amenity/bank|First West Credit Union":{countryCodes:["ca"],tags:{alt_name:"First West",amenity:"bank",brand:"First West Credit Union","brand:wikidata":"Q5454073","brand:wikipedia":"en:First West Credit Union",name:"First West Credit Union"}},"amenity/bank|Frost Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Frost Bank","brand:wikidata":"Q5506152","brand:wikipedia":"en:Frost Bank",name:"Frost Bank"}},"amenity/bank|Fulton Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Fulton Bank","brand:wikidata":"Q16976594",name:"Fulton Bank"}},"amenity/bank|GCB Bank":{countryCodes:["gh"],tags:{amenity:"bank",brand:"GCB Bank","brand:wikidata":"Q1521346","brand:wikipedia":"en:GCB Bank",name:"GCB Bank"}},"amenity/bank|Galicia":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Galicia","brand:wikidata":"Q5717952","brand:wikipedia":"es:Banco Galicia",name:"Galicia"}},"amenity/bank|Garanti":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Garanti","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti"}},"amenity/bank|Garanti Bankası":{tags:{amenity:"bank",brand:"Garanti Bankası","brand:wikidata":"Q322962","brand:wikipedia":"en:Garanti Bank",name:"Garanti Bankası"}},"amenity/bank|Getin Bank":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Getin Bank","brand:wikidata":"Q9267646","brand:wikipedia":"pl:Getin Bank",name:"Getin Bank"}},"amenity/bank|Golden 1 Credit Union":{countryCodes:["us"],matchNames:["golden 1","golden one","golden one credit union","the golden 1 credit union","the golden one credit union"],tags:{amenity:"bank",brand:"Golden 1 Credit Union","brand:wikidata":"Q7736976","brand:wikipedia":"en:Golden 1 Credit Union",name:"Golden 1 Credit Union"}},"amenity/bank|Great Western Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Great Western Bank","brand:wikidata":"Q5600185","brand:wikipedia":"en:Great Western Bank (1907–present)",name:"Great Western Bank"}},"amenity/bank|Groupama":{tags:{amenity:"bank",brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"en:Groupama",name:"Groupama"}},"amenity/bank|HBL Bank":{countryCodes:["pk"],matchNames:["hbl"],tags:{amenity:"bank",brand:"HBL Bank","brand:wikidata":"Q1566843","brand:wikipedia":"ur:ایچ بی ایل پاکستان",name:"HBL Bank"}},"amenity/bank|HDFC Bank":{tags:{amenity:"bank",brand:"HDFC Bank","brand:wikidata":"Q631047","brand:wikipedia":"en:HDFC Bank",name:"HDFC Bank"}},"amenity/bank|HNB":{tags:{amenity:"bank",brand:"HNB","brand:wikidata":"Q3532080","brand:wikipedia":"en:Hatton National Bank",name:"HNB"}},"amenity/bank|HSBC UK~(UK)":{countryCodes:["gb"],matchNames:["HSBC"],tags:{amenity:"bank",brand:"HSBC UK","brand:wikidata":"Q64767453",name:"HSBC UK"}},"amenity/bank|HSBC~(Global)":{tags:{amenity:"bank",brand:"HSBC","brand:wikidata":"Q190464","brand:wikipedia":"en:HSBC",name:"HSBC"}},"amenity/bank|Halifax":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Halifax","brand:wikidata":"Q3310164","brand:wikipedia":"en:Halifax (bank)",name:"Halifax"}},"amenity/bank|Halkbank":{tags:{amenity:"bank",brand:"Halkbank","brand:wikidata":"Q3593818","brand:wikipedia":"en:Halkbank a.d.",name:"Halkbank"}},"amenity/bank|Hamburger Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Hamburger Sparkasse","brand:wikidata":"Q1573140","brand:wikipedia":"de:Hamburger Sparkasse",name:"Hamburger Sparkasse",short_name:"Haspa"}},"amenity/bank|Handelsbanken":{countryCodes:["dk","fi","gb","no","se"],tags:{amenity:"bank",brand:"Handelsbanken","brand:wikidata":"Q1421630","brand:wikipedia":"en:Handelsbanken",name:"Handelsbanken"}},"amenity/bank|Heritage Bank":{tags:{amenity:"bank",brand:"Heritage Bank","brand:wikidata":"Q5738690","brand:wikipedia":"en:Heritage Bank",name:"Heritage Bank"}},"amenity/bank|Hong Leong Bank":{countryCodes:["my"],tags:{amenity:"bank",brand:"Hong Leong Bank","brand:wikidata":"Q4383943","brand:wikipedia":"en:Hong Leong Bank",name:"Hong Leong Bank"}},"amenity/bank|Hrvatska poštanska banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Hrvatska poštanska banka","brand:wikidata":"Q5923981","brand:wikipedia":"en:Hrvatska poštanska banka",name:"Hrvatska poštanska banka"}},"amenity/bank|Huntington Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Huntington Bank","brand:wikidata":"Q798819","brand:wikipedia":"en:Huntington Bancshares",name:"Huntington Bank"}},"amenity/bank|HypoVereinsbank":{countryCodes:["de"],tags:{amenity:"bank",brand:"HypoVereinsbank","brand:wikidata":"Q220189","brand:wikipedia":"en:HypoVereinsbank",name:"HypoVereinsbank"}},"amenity/bank|ICBC":{tags:{amenity:"bank",brand:"ICBC","brand:wikidata":"Q26463","brand:wikipedia":"en:Industrial and Commercial Bank of China",name:"ICBC"}},"amenity/bank|ICICI Bank":{countryCodes:["ca","gb","in"],tags:{amenity:"bank",brand:"ICICI Bank","brand:wikidata":"Q1653258","brand:wikipedia":"en:ICICI Bank",name:"ICICI Bank"}},"amenity/bank|IDBI Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"IDBI Bank","brand:wikidata":"Q3633485","brand:wikipedia":"en:IDBI Bank",name:"IDBI Bank"}},"amenity/bank|ING":{matchNames:["ing bank"],tags:{amenity:"bank",brand:"ING","brand:wikidata":"Q645708","brand:wikipedia":"en:ING Group",name:"ING"}},"amenity/bank|ING Bank Śląski":{countryCodes:["pl"],tags:{amenity:"bank",brand:"ING Bank Śląski","brand:wikidata":"Q1410383","brand:wikipedia":"pl:ING Bank Śląski",name:"ING Bank Śląski"}},"amenity/bank|Ibercaja":{countryCodes:["es"],tags:{amenity:"bank",brand:"Ibercaja","brand:wikidata":"Q5907815","brand:wikipedia":"es:Ibercaja",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|Karur Vysya Bank":{tags:{amenity:"bank",brand:"Karur Vysya Bank",name:"Karur Vysya Bank"}},"amenity/bank|Kasa Stefczyka":{countryCodes:["pl"],tags:{amenity:"bank",brand:"Kasa Stefczyka","brand:wikidata":"Q57624461",name:"Kasa Stefczyka"}},"amenity/bank|KeyBank":{countryCodes:["us"],tags:{amenity:"bank",brand:"KeyBank","brand:wikidata":"Q1740314","brand:wikipedia":"en:KeyBank",name:"KeyBank"}},"amenity/bank|Komerční banka":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Komerční banka","brand:wikidata":"Q1541079","brand:wikipedia":"en:Komerční banka",name:"Komerční banka"}},"amenity/bank|Kotak Mahindra Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Kotak Mahindra Bank","brand:wikidata":"Q2040404","brand:wikipedia":"en:Kotak Mahindra Bank",name:"Kotak Mahindra Bank"}},"amenity/bank|Kutxabank":{countryCodes:["es"],tags:{amenity:"bank",brand:"Kutxabank","brand:wikidata":"Q5139377","brand:wikipedia":"en:Kutxabank",name:"Kutxabank"}},"amenity/bank|Kuveyt Türk":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Kuveyt Türk","brand:wikidata":"Q6036058","brand:wikipedia":"tr:Kuveyt Türk",name:"Kuveyt Türk"}},"amenity/bank|LBS":{tags:{amenity:"bank",brand:"LBS",name:"LBS"}},"amenity/bank|LCL":{countryCodes:["fr"],tags:{amenity:"bank",brand:"LCL","brand:wikidata":"Q779722","brand:wikipedia":"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~(Connecticut)":{countryCodes:["us"],nomatch:["amenity/fuel|Liberty"],tags:{amenity:"bank",brand:"Liberty Bank","brand:wikidata":"Q6541584","brand:wikipedia":"en:Liberty Bank",name:"Liberty Bank"}},"amenity/bank|Lloyds Bank":{countryCodes:["gb","im"],matchNames:["lloyds","lloyds tsb"],tags:{amenity:"bank",brand:"Lloyds Bank","brand:wikidata":"Q1152847","brand:wikipedia":"en:Lloyds Bank",name:"Lloyds Bank"}},"amenity/bank|M&T Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"M&T Bank","brand:wikidata":"Q3272257","brand:wikipedia":"en:M&T Bank",name:"M&T Bank"}},"amenity/bank|MCB":{matchNames:["mcb bank"],tags:{amenity:"bank",brand:"MCB","brand:wikidata":"Q15982510","brand:wikipedia":"ur:ایم سی بی بینک لمیٹڈ",name:"MCB"}},"amenity/bank|MONETA Money Bank":{countryCodes:["cz"],tags:{amenity:"bank",brand:"MONETA Money Bank","brand:wikidata":"Q24282966","brand:wikipedia":"cs:Moneta Money Bank",name:"MONETA Money Bank"}},"amenity/bank|Macro":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Macro","brand:wikidata":"Q2335199","brand:wikipedia":"en:Banco Macro",name:"Macro"}},"amenity/bank|Maybank":{tags:{amenity:"bank",brand:"Maybank","brand:wikidata":"Q1364018","brand:wikipedia":"en:Maybank",name:"Maybank"}},"amenity/bank|Meezan Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Meezan Bank","brand:wikidata":"Q6807934","brand:wikipedia":"en:Meezan Bank",name:"Meezan Bank"}},"amenity/bank|Mercantil":{tags:{amenity:"bank",brand:"Mercantil","brand:wikidata":"Q6818004","brand:wikipedia":"en:Mercantil Servicios Financieros",name:"Mercantil"}},"amenity/bank|Meridian Credit Union":{countryCodes:["ca"],tags:{alt_name:"Meridian",amenity:"bank",brand:"Meridian Credit Union","brand:wikidata":"Q6819303","brand:wikipedia":"en:Meridian Credit Union",name:"Meridian Credit Union"}},"amenity/bank|Metro Bank~(UK)":{countryCodes:["gb"],nomatch:["amenity/bank|Metrobank~(Philippines)"],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|Mittelbrandenburgische Sparkasse":{countryCodes:["de"],tags:{amenity:"bank",brand:"Mittelbrandenburgische Sparkasse","brand:wikidata":"Q1940058","brand:wikipedia":"de:Mittelbrandenburgische Sparkasse",name:"Mittelbrandenburgische Sparkasse"}},"amenity/bank|Monte dei Paschi di Siena":{countryCodes:["it"],tags:{amenity:"bank",brand:"Monte dei Paschi di Siena","brand:wikidata":"Q46730","brand:wikipedia":"en:Banca Monte dei Paschi di Siena",name:"Monte dei Paschi di Siena"}},"amenity/bank|Montepio":{countryCodes:["pt"],tags:{amenity:"bank",brand:"Montepio","brand:wikidata":"Q1946091","brand:wikipedia":"en:Montepio (bank)",name:"Montepio"}},"amenity/bank|Mountain America Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Mountain America Credit Union","brand:wikidata":"Q6924862","brand:wikipedia":"en:Mountain America Credit Union",name:"Mountain America Credit Union"}},"amenity/bank|NAB":{tags:{amenity:"bank",brand:"NAB","brand:wikidata":"Q1430985","brand:wikipedia":"en:National Australia Bank",name:"NAB"}},"amenity/bank|NLB":{tags:{amenity:"bank",brand:"NLB",name:"NLB"}},"amenity/bank|NSB":{countryCodes:["lk"],matchNames:["national savings bank"],tags:{amenity:"bank",brand:"NSB","brand:wikidata":"Q12500189","brand:wikipedia":"en:National Savings Bank (Sri Lanka)",name:"NSB"}},"amenity/bank|NatWest":{countryCodes:["gb","gg"],tags:{amenity:"bank",brand:"NatWest","brand:wikidata":"Q2740021","brand:wikipedia":"en:NatWest",name:"NatWest"}},"amenity/bank|National Bank":{countryCodes:["ca"],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":{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|Raiffeisen~(Luxembourg)":{countryCodes:["lu"],matchNames:["raiffeisen"],nomatch:["amenity/bank|Raiffeisen Polbank","amenity/bank|Raiffeisenbank~(Albania)","amenity/bank|Raiffeisenbank~(Bulgaria)","amenity/bank|Raiffeisenbank~(Czech Republic)","amenity/bank|Raiffeisenbank~(Romania)","amenity/bank|Raiffeisenbank~(Serbia)","amenity/bank|Райффайзен","amenity/bank|Райффайзен Банк Аваль","amenity/fuel|Raiffeisen"],tags:{amenity:"bank",brand:"Raiffeisen","brand:wikidata":"Q11220162","brand:wikipedia":"en:Banque Raiffeisen",name:"Raiffeisen"}},"amenity/bank|Regions Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Regions Bank","brand:wikidata":"Q917131","brand:wikipedia":"en:Regions Financial Corporation",name:"Regions Bank"}},"amenity/bank|Republic Bank~(Eastern Caribbean)":{countryCodes:["bb","gd","gy","tt"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314386","brand:wikipedia":"en:Republic Bank",name:"Republic Bank"}},"amenity/bank|Republic Bank~(USA)":{countryCodes:["us"],tags:{amenity:"bank",brand:"Republic Bank","brand:wikidata":"Q7314387","brand:wikipedia":"en:Republic Bank & Trust Company",name:"Republic Bank",official_name:"Republic Bank & Trust Company"}},"amenity/bank|República":{countryCodes:["uy"],tags:{amenity:"bank",brand:"República","brand:wikidata":"Q4077337","brand:wikipedia":"en:Banco de la República Oriental del Uruguay",name:"República"}},"amenity/bank|S-Pankki":{countryCodes:["fi"],tags:{amenity:"bank",brand:"S-Pankki","brand:wikidata":"Q7387053","brand:wikipedia":"fi:S-Pankki",name:"S-Pankki"}},"amenity/bank|SC제일은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"SC제일은행","brand:ko":"SC제일은행","brand:wikidata":"Q625531","brand:wikipedia":"en:Standard Chartered Korea",name:"SC제일은행","name:ko":"SC제일은행"}},"amenity/bank|SEB":{countryCodes:["de","ee","lt","lv","se"],tags:{amenity:"bank",brand:"SEB","brand:wikidata":"Q975655","brand:wikipedia":"en:SEB Group",name:"SEB"}},"amenity/bank|SMBC信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"SMBC信託銀行","brand:en":"SMBC Trust Bank","brand:wikidata":"Q17218805","brand:wikipedia":"jp:SMBC信託銀行",name:"SMBC信託銀行","name:en":" SMBC Trust Bank "}},"amenity/bank|SNS Bank":{countryCodes:["nl"],tags:{amenity:"bank",brand:"SNS Bank","brand:wikidata":"Q1857899","brand:wikipedia":"en:De Volksbank",name:"SNS Bank"}},"amenity/bank|Sacombank":{tags:{amenity:"bank",brand:"Sacombank","brand:wikidata":"Q6123772","brand:wikipedia":"vi:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín",name:"Sacombank"}},"amenity/bank|Sampath Bank":{countryCodes:["lk"],tags:{amenity:"bank",brand:"Sampath Bank","brand:wikidata":"Q7410095","brand:wikipedia":"en:Sampath Bank",name:"Sampath Bank"}},"amenity/bank|San Diego County Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"San Diego County Credit Union","brand:wikidata":"Q7413628","brand:wikipedia":"en:San Diego County Credit Union",name:"San Diego County Credit Union",short_name:"SDCCU"}},"amenity/bank|Santander":{matchNames:["santander consumer bank"],nomatch:["amenity/bank|Banco Santander"],tags:{amenity:"bank",brand:"Santander","brand:wikidata":"Q5835668","brand:wikipedia":"en:Santander Bank",name:"Santander"}},"amenity/bank|Santander Río":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Santander Río","brand:wikidata":"Q3385268","brand:wikipedia":"es:Banco Santander 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|Southern Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Southern Bank","brand:wikidata":"Q7569660","brand:wikipedia":"en:Southern Bank",name:"Southern Bank"}},"amenity/bank|Sparda-Bank":{countryCodes:["at","de"],tags:{amenity:"bank",brand:"Sparda-Bank","brand:wikidata":"Q2307136","brand:wikipedia":"en:Sparda-Bank",name:"Sparda-Bank"}},"amenity/bank|Stanbic Bank":{tags:{amenity:"bank",brand:"Stanbic Bank","brand:wikidata":"Q7597999","brand:wikipedia":"en:Stanbic Bank",name:"Stanbic Bank"}},"amenity/bank|Standard Bank":{tags:{amenity:"bank",brand:"Standard Bank","brand:wikidata":"Q1576610","brand:wikipedia":"en:Standard Bank",name:"Standard Bank"}},"amenity/bank|Standard Chartered":{matchNames:["standard chartered bank"],tags:{amenity:"bank",brand:"Standard Chartered","brand:wikidata":"Q548278","brand:wikipedia":"en:Standard Chartered",name:"Standard Chartered"}},"amenity/bank|State Bank of India":{tags:{amenity:"bank",brand:"State Bank of India","brand:wikidata":"Q1340361","brand:wikipedia":"en:State Bank of India",name:"State Bank of India"}},"amenity/bank|State Employees Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"State Employees Credit Union","brand:wikidata":"Q7603196","brand:wikipedia":"en:State Employees Credit Union",name:"State Employees Credit Union",short_name:"SECU"}},"amenity/bank|Summit Bank":{countryCodes:["pk"],tags:{amenity:"bank",brand:"Summit Bank","brand:wikidata":"Q7637775","brand:wikipedia":"en:Summit Bank",name:"Summit Bank"}},"amenity/bank|SunTrust":{countryCodes:["us"],matchNames:["suntrust bank"],tags:{amenity:"bank",brand:"SunTrust","brand:wikidata":"Q181507","brand:wikipedia":"en:SunTrust Banks",name:"SunTrust"}},"amenity/bank|Suncorp":{countryCodes:["au"],tags:{amenity:"bank",brand:"Suncorp","brand:wikidata":"Q24189567","brand:wikipedia":"en:Suncorp Bank",name:"Suncorp"}},"amenity/bank|Supervielle":{countryCodes:["ar"],tags:{amenity:"bank",brand:"Supervielle","brand:wikidata":"Q5718035","brand:wikipedia":"es:Banco Supervielle",name:"Supervielle"}},"amenity/bank|Swedbank":{countryCodes:["ee","lt","lv","se"],tags:{amenity:"bank",brand:"Swedbank","brand:wikidata":"Q1145493","brand:wikipedia":"en:Swedbank",name:"Swedbank"}},"amenity/bank|Syndicate Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Syndicate Bank","brand:wikidata":"Q2004088","brand:wikipedia":"en:Syndicate Bank",name:"Syndicate Bank"}},"amenity/bank|Synovus":{countryCodes:["us"],tags:{amenity:"bank",brand:"Synovus","brand:wikidata":"Q3508889","brand:wikipedia":"en:Synovus",name:"Synovus"}},"amenity/bank|TCF Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TCF Bank","brand:wikidata":"Q7669687","brand:wikipedia":"en:TCF Bank",name:"TCF Bank"}},"amenity/bank|TD Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"TD Bank","brand:wikidata":"Q7669891","brand:wikipedia":"en:TD Bank, N.A.",name:"TD Bank"}},"amenity/bank|TD Canada Trust":{countryCodes:["ca"],tags:{amenity:"bank",brand:"TD Canada Trust","brand:wikidata":"Q1080670","brand:wikipedia":"en:TD Canada Trust",name:"TD Canada Trust"}},"amenity/bank|TEB":{countryCodes:["tr"],tags:{amenity:"bank",brand:"TEB","brand:wikidata":"Q7862447","brand:wikipedia":"en:Türk Ekonomi Bankası",name:"TEB"}},"amenity/bank|TSB":{countryCodes:["gb"],tags:{amenity:"bank",brand:"TSB","brand:wikidata":"Q7671560","brand:wikipedia":"en:TSB Bank (United Kingdom)",name:"TSB"}},"amenity/bank|Takarékszövetkezet":{countryCodes:["hu"],tags:{amenity:"bank",brand:"Takarékszövetkezet","brand:wikidata":"Q30324674","brand:wikipedia":"en:TakarékBank",name:"Takarékszövetkezet"}},"amenity/bank|Tangerine":{countryCodes:["ca"],tags:{amenity:"bank",brand:"Tangerine","brand:wikidata":"Q15238797","brand:wikipedia":"en:Tangerine Bank",name:"Tangerine"}},"amenity/bank|Targobank":{countryCodes:["de","es"],tags:{amenity:"bank",brand:"Targobank","brand:wikidata":"Q1455437","brand:wikipedia":"en:Targobank",name:"Targobank"}},"amenity/bank|Tatra banka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Tatra banka","brand:wikidata":"Q1718069","brand:wikipedia":"en:Tatra banka",name:"Tatra banka"}},"amenity/bank|Taytay sa Kauswagan":{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":{countryCodes:["tn"],tags:{amenity:"bank",brand:"UIB","brand:wikidata":"Q3550305","brand:wikipedia":"ar:الاتحاد الدولي للبنوك",name:"UIB",official_name:"Union internationale de banques"}},"amenity/bank|UMB Bank":{tags:{amenity:"bank",brand:"UMB Bank","brand:wikidata":"Q7865088","brand:wikipedia":"en:UMB Financial Corporation",name:"UMB Bank"}},"amenity/bank|UNI":{countryCodes:["ca"],matchNames:["caisse populaire","caisse populaire acadienne"],tags:{amenity:"bank",brand:"UNI","brand:wikidata":"Q2933348","brand:wikipedia":"fr:UNI Coopération financière",name:"UNI",official_name:"UNI Coopération financière"}},"amenity/bank|UOB":{tags:{amenity:"bank",brand:"UOB","brand:wikidata":"Q2064074","brand:wikipedia":"en:United Overseas Bank",name:"UOB"}},"amenity/bank|USAA":{tags:{amenity:"bank",brand:"USAA","brand:wikidata":"Q7865722","brand:wikipedia":"en:USAA",name:"USAA",official_name:"United Services Automobile Association"}},"amenity/bank|Ulster Bank":{countryCodes:["gb","ie"],tags:{amenity:"bank",brand:"Ulster Bank","brand:wikidata":"Q2613366","brand:wikipedia":"en:Ulster Bank",name:"Ulster Bank"}},"amenity/bank|Umpqua Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Umpqua Bank","brand:wikidata":"Q7881772","brand:wikipedia":"en:Umpqua Holdings Corporation",name:"Umpqua Bank"}},"amenity/bank|UniCredit Bank":{matchNames:["unicredit","unicredit banca"],tags:{amenity:"bank",brand:"UniCredit Bank","brand:wikidata":"Q45568","brand:wikipedia":"en:UniCredit",name:"UniCredit Bank"}},"amenity/bank|Unicaja Banco":{countryCodes:["es"],tags:{amenity:"bank",brand:"Unicaja Banco","brand:wikidata":"Q2543704","brand:wikipedia":"en:Unicaja",name:"Unicaja Banco",short_name:"Unicaja"}},"amenity/bank|Union Bank of India":{countryCodes:["in"],tags:{amenity:"bank",brand:"Union Bank of India","brand:wikidata":"Q2004078","brand:wikipedia":"en:Union Bank of India",name:"Union Bank of India"}},"amenity/bank|Union Bank~(USA)":{countryCodes:["us"],matchNames:["mufg union bank","union bank of california"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{alt_name:"UnionBank",amenity:"bank",brand:"Union Bank","brand:wikidata":"Q1442804","brand:wikipedia":"en:MUFG Union Bank",name:"Union Bank"}},"amenity/bank|UnionBank~(Philippines)":{countryCodes:["ph"],matchNames:["union bank of the philippines"],nomatch:["amenity/bank|Banco Unión","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"UnionBank","brand:wikidata":"Q7885403","brand:wikipedia":"en:Union Bank of the Philippines",name:"UnionBank"}},"amenity/bank|United Bank~(Connecticut)":{countryCodes:["us"],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|Vietcombank":{tags:{amenity:"bank",brand:"Vietcombank",name:"Vietcombank"}},"amenity/bank|VietinBank":{tags:{amenity:"bank",brand:"VietinBank","brand:wikidata":"Q7928459","brand:wikipedia":"en:Vietinbank",name:"VietinBank"}},"amenity/bank|Vijaya Bank":{countryCodes:["in"],tags:{amenity:"bank",brand:"Vijaya Bank","brand:wikidata":"Q2003171","brand:wikipedia":"en:Vijaya Bank",name:"Vijaya Bank"}},"amenity/bank|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|Wings Financial Credit Union":{countryCodes:["us"],tags:{amenity:"bank",brand:"Wings Financial Credit Union","brand:wikidata":"Q8025267","brand:wikipedia":"en:Wings Financial Credit Union",name:"Wings Financial Credit Union"}},"amenity/bank|Yapı Kredi":{countryCodes:["tr"],tags:{amenity:"bank",brand:"Yapı Kredi","brand:wikidata":"Q8049138","brand:wikipedia":"en:Yapı ve Kredi Bankası",name:"Yapı Kredi"}},"amenity/bank|Yorkshire Bank":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Bank","brand:wikidata":"Q8055678","brand:wikipedia":"en:Yorkshire Bank",name:"Yorkshire Bank"}},"amenity/bank|Yorkshire Building Society":{countryCodes:["gb"],tags:{amenity:"bank",brand:"Yorkshire Building Society","brand:wikidata":"Q12073381","brand:wikipedia":"en:Yorkshire Building Society",name:"Yorkshire Building Society"}},"amenity/bank|Zagrebačka banka":{countryCodes:["hr"],tags:{amenity:"bank",brand:"Zagrebačka banka","brand:wikidata":"Q140381","brand:wikipedia":"en:Zagrebačka banka",name:"Zagrebačka banka"}},"amenity/bank|Zenith Bank":{countryCodes:["gb","gh","gm","ng","sl","za"],tags:{amenity:"bank",brand:"Zenith Bank","brand:wikidata":"Q5978240","brand:wikipedia":"en:Zenith Bank",name:"Zenith Bank"}},"amenity/bank|Zions Bank":{tags:{amenity:"bank",brand:"Zions Bank","brand:wikidata":"Q8072576",name:"Zions Bank"}},"amenity/bank|Ziraat Bankası":{tags:{amenity:"bank",brand:"Ziraat Bankası","brand:wikidata":"Q696003","brand:wikipedia":"en:Ziraat Bankası",name:"Ziraat Bankası"}},"amenity/bank|mBank":{tags:{amenity:"bank",brand:"mBank","brand:wikidata":"Q1160928","brand:wikipedia":"en:MBank",name:"mBank"}},"amenity/bank|st.george":{countryCodes:["au"],matchNames:["st.george bank"],tags:{amenity:"bank",brand:"st.george","brand:wikidata":"Q1606050","brand:wikipedia":"en:St.George Bank",name:"st.george"}},"amenity/bank|Ålandsbanken":{countryCodes:["fi"],tags:{amenity:"bank",brand:"Ålandsbanken","brand:wikidata":"Q4349236","brand:wikipedia":"sv:Ålandsbanken",name:"Ålandsbanken"}},"amenity/bank|ČSOB":{countryCodes:["cz","sk"],tags:{amenity:"bank",brand:"ČSOB","brand:wikidata":"Q340135","brand:wikipedia":"en:Československá obchodní banka",name:"ČSOB"}},"amenity/bank|Česká spořitelna":{countryCodes:["cz"],tags:{amenity:"bank",brand:"Česká spořitelna","brand:wikidata":"Q341100","brand:wikipedia":"en:Česká spořitelna",name:"Česká spořitelna"}},"amenity/bank|İş Bankası":{countryCodes:["tr"],tags:{amenity:"bank",brand:"İş Bankası","brand:wikidata":"Q909613","brand:wikipedia":"en:Türkiye İş Bankası",name:"İş Bankası"}},"amenity/bank|Εθνική Τράπεζα":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Εθνική Τράπεζα","brand:el":"Εθνική Τράπεζα","brand:en":"National Bank of Greece","brand:wikidata":"Q1816028","brand:wikipedia":"en:National Bank of Greece",name:"Εθνική Τράπεζα","name:el":"Εθνική Τράπεζα","name:en":"National Bank of Greece"}},"amenity/bank|Τράπεζα Πειραιώς":{countryCodes:["gr"],tags:{amenity:"bank",brand:"Τράπεζα Πειραιώς","brand:el":"Τράπεζα Πειραιώς","brand:en":"Piraeus Bank","brand:wikidata":"Q3312","brand:wikipedia":"en:Piraeus Bank",name:"Τράπεζα Πειραιώς","name:el":"Τράπεζα Πειραιώς","name:en":"Piraeus Bank",short_name:"Πειραιώς","short_name:el":"Πειραιώς","short_name:en":"Piraeus"}},"amenity/bank|А-Банк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"А-Банк","brand:wikidata":"Q28705400","brand:wikipedia":"uk:А-Банк",name:"А-Банк"}},"amenity/bank|Авангард":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Авангард","brand:wikidata":"Q62122617",name:"Авангард"}},"amenity/bank|Альфа-Банк":{countryCodes:["by","kz","ru","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:["ru"],tags:{amenity:"bank",brand:"Зенит","brand:en":"Zenit","brand:ru":"Зенит","brand:wikidata":"Q4191388","brand:wikipedia":"ru:Зенит (банк)",name:"Зенит","name:en":"Zenit","name:ru":"Зенит"}},"amenity/bank|Казкоммерцбанк":{countryCodes:["kz"],tags:{amenity:"bank",brand:"Казкоммерцбанк","brand:en":"Kazkommertsbank","brand:wikidata":"Q1168179","brand:wikipedia":"en:Kazkommertsbank",name:"Казкоммерцбанк","name:en":"Kazkommertsbank"}},"amenity/bank|Московский индустриальный банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Московский индустриальный банк","brand:en":"Moscow Industrial Bank","brand:wikidata":"Q4304145","brand:wikipedia":"ru:Московский индустриальный банк",name:"Московский индустриальный банк","name:en":"Moscow Industrial Bank"}},"amenity/bank|Мособлбанк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Мособлбанк","brand:en":"Mosobl Bank","brand:wikidata":"Q4304446","brand:wikipedia":"ru:Мособлбанк",name:"Мособлбанк","name:en":"Mosobl Bank"}},"amenity/bank|Народный банк":{countryCodes:["kg","kz","uz"],tags:{amenity:"bank",brand:"Народный банк","brand:wikidata":"Q1046186","brand:wikipedia":"kk:Қазақстан Халық банкі",name:"Народный банк"}},"amenity/bank|ОТП Банк":{countryCodes:["ru","ua"],tags:{amenity:"bank",brand:"ОТП Банк","brand:en":"OTP Bank","brand:wikidata":"Q912778","brand:wikipedia":"en:OTP Bank",name:"ОТП Банк","name:en":"OTP Bank"}},"amenity/bank|Обединена Българска Банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Обединена Българска Банка","brand:en":"United Bulgarian Bank","brand:wikidata":"Q7887555","brand:wikipedia":"en:United Bulgarian Bank",name:"Обединена Българска Банка","name:en":"United Bulgarian Bank"}},"amenity/bank|Открытие":{countryCodes:["ru"],matchNames:["банк открытие"],tags:{amenity:"bank",brand:"Открытие","brand:wikidata":"Q4327204","brand:wikipedia":"ru:Банк «Финансовая корпорация Открытие»",name:"Открытие"}},"amenity/bank|Ощадбанк":{countryCodes:["ua"],tags:{amenity:"bank",brand:"Ощадбанк","brand:en":"State Savings Bank of Ukraine","brand:wikidata":"Q4340839","brand:wikipedia":"uk:Ощадбанк",name:"Ощадбанк","name:en":"State Savings Bank of Ukraine"}},"amenity/bank|ПУМБ":{countryCodes:["ua"],tags:{amenity:"bank",brand:"ПУМБ","brand:en":"First Ukrainian International Bank","brand:wikidata":"Q4341156","brand:wikipedia":"en:First Ukrainian International Bank",name:"ПУМБ","name:en":"First Ukrainian International Bank"}},"amenity/bank|Почта Банк":{countryCodes:["ru"],tags:{amenity:"bank",brand:"Почта Банк","brand:en":"Post Bank","brand:wikidata":"Q24930461","brand:wikipedia":"en:Post Bank (Russia)",name:"Почта Банк","name:en":"Post Bank"}},"amenity/bank|Пощенска банка":{countryCodes:["bg"],tags:{amenity:"bank",brand:"Пощенска банка","brand:wikidata":"Q7234083","brand:wikipedia":"bg:Пощенска банка",name:"Пощенска банка","name:en":"Postbank"}},"amenity/bank|ПриватБанк":{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":"Aeon Bank","brand:ja":"イオン銀行","brand:wikidata":"Q11286327","brand:wikipedia":"ja:イオン銀行",name:"イオン銀行","name:en":"Aeon Bank","name:ja":"イオン銀行"}},"amenity/bank|スルガ銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"スルガ銀行","brand:en":"Suruga Bank","brand:ja":"スルガ銀行","brand:wikidata":"Q11313470","brand:wikipedia":"ja:スルガ銀行",name:"スルガ銀行","name:en":"Suruga Bank","name:ja":"スルガ銀行"}},"amenity/bank|三井住友信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友信託銀行","brand:en":"Sumitomo Mitsui Trust Bank","brand:wikidata":"Q5215421","brand:wikipedia":"jp:三井住友信託銀行",name:"三井住友信託銀行","name:en":"Sumitomo Mitsui Trust Bank"}},"amenity/bank|三井住友銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三井住友銀行","brand:en":"Sumitomo Mitsui Banking Corporation","brand:ja":"三井住友銀行","brand:wikidata":"Q2660418","brand:wikipedia":"en:Sumitomo Mitsui Banking Corporation",name:"三井住友銀行","name:en":"Sumitomo Mitsui Banking Corporation","name:ja":"三井住友銀行","short_name:en":"SMBC"}},"amenity/bank|三菱UFJ信託銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"三菱UFJ信託銀行","brand:en":"Mitsubishi UFJ Trust and Banking Corporation","brand:ja":"三菱UFJ信託銀行","brand:wikidata":"Q6883178","brand:wikipedia":"en:Mitsubishi UFJ Trust and Banking Corporation",name:"三菱UFJ信託銀行","name:en":"Mitsubishi UFJ Trust and Banking Corporation","name:ja":"三菱UFJ信託銀行"}},"amenity/bank|三菱UFJ銀行":{matchNames:["三菱東京UFJ銀行"],tags:{amenity:"bank",brand:"三菱UFJ銀行","brand:en":"MUFG Bank","brand:ja":"三菱UFJ銀行","brand:wikidata":"Q988284","brand:wikipedia":"en:MUFG Bank",name:"三菱UFJ銀行","name:en":"MUFG Bank","name:ja":"三菱UFJ銀行"}},"amenity/bank|上海商業儲蓄銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"上海商業儲蓄銀行","brand:en":"Shanghai Commercial and Savings Bank","brand:wikidata":"Q4207208","brand:wikipedia":"en:Shanghai Commercial and Savings Bank",name:"上海商業儲蓄銀行","name:en":"Shanghai Commercial and Savings Bank"}},"amenity/bank|上海浦东发展银行":{tags:{amenity:"bank",brand:"上海浦东发展银行",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|千葉銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"千葉銀行","brand:en":"The Chiba Bank","brand:ja":"千葉銀行","brand:wikidata":"Q1071712","brand:wikipedia":"en:Chiba Bank",name:"千葉銀行","name:en":"Chiba Bank","name:ja":"千葉銀行"}},"amenity/bank|台中商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台中商業銀行","brand:en":"Taichung Bank","brand:wikidata":"Q6136958","brand:wikipedia":"en:Taichung Bank",name:"台中商業銀行","name:en":"Taichung Bank"}},"amenity/bank|台北富邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台北富邦商業銀行","brand:en":"Taipei Fubon Bank","brand:wikidata":"Q697293","brand:wikipedia":"en:Taipei Fubon Bank",name:"台北富邦商業銀行","name:en":"Taipei Fubon Bank"}},"amenity/bank|台新國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"台新國際商業銀行","brand:en":"Taishin International Bank","brand:wikidata":"Q7676420","brand:wikipedia":"en:Taishin International Bank",name:"台新國際商業銀行","name:en":"Taishin International Bank"}},"amenity/bank|合作金庫商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"合作金庫商業銀行","brand:en":"Taiwan Cooperative Bank","brand:wikidata":"Q701540","brand:wikipedia":"en:Taiwan Cooperative Bank",name:"合作金庫商業銀行","name:en":"Taiwan Cooperative Bank"}},"amenity/bank|國泰世華商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"國泰世華商業銀行","brand:en":"Cathay United Bank","brand:wikidata":"Q702656","brand:wikipedia":"en:Cathay United Bank",name:"國泰世華商業銀行","name:en":"Cathay United Bank"}},"amenity/bank|埼玉りそな銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"埼玉りそな銀行","brand:en":"Saitama Resona Bank","brand:ja":"埼玉りそな銀行","brand:wikidata":"Q4671591","brand:wikipedia":"ja:埼玉りそな銀行",name:"埼玉りそな銀行","name:en":"Saitama Resona Bank","name:ja":"埼玉りそな銀行"}},"amenity/bank|大眾商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"大眾商業銀行","brand:en":"Ta Chong Commercial Bank","brand:wikidata":"Q10937047","brand:wikipedia":"zh:大眾商業銀行",name:"大眾商業銀行","name:en":"Ta Chong Commercial Bank"}},"amenity/bank|安泰商業銀行":{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":"Shinsei Bank","brand:ja":"新生銀行","brand:wikidata":"Q571997","brand:wikipedia":"ja:新生銀行",name:"新生銀行","name:en":"Shinsei Bank","name:ja":"新生銀行"}},"amenity/bank|日本銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"日本銀行","brand:en":"Bank of Japan","brand:wikidata":"Q333101","brand:wikipedia":"ja:日本銀行",name:"日本銀行","name:en":"Bank of Japan"}},"amenity/bank|東亞銀行":{countryCodes:["hk"],tags:{amenity:"bank",brand:"東亞銀行","brand:en":"Bank of East Asia","brand:wikidata":"Q806679","brand:wikipedia":"zh:東亞銀行","brand:zh-Hans":"东亚银行","brand:zh-Hant":"東亞銀行",name:"東亞銀行 BEA","name:en":"Bank of East Asia","name:zh-Hans":"东亚银行","name:zh-Hant":"東亞銀行"}},"amenity/bank|板信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"板信商業銀行","brand:en":"Bank of Panshin","brand:wikidata":"Q11104946","brand:wikipedia":"zh:板信商業銀行",name:"板信商業銀行","name:en":"Bank of Panshin"}},"amenity/bank|横浜銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"横浜銀行","brand:en":"Bank of Yokohama","brand:wikidata":"Q2744340","brand:wikipedia":"en:Bank of Yokohama",name:"横浜銀行","name:en":"Bank of Yokohama"}},"amenity/bank|永豐商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"永豐商業銀行","brand:en":"Bank SinoPac","brand:wikidata":"Q4855976","brand:wikipedia":"en:Bank SinoPac",name:"永豐商業銀行","name:en":"Bank SinoPac"}},"amenity/bank|渣打國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"渣打國際商業銀行","brand:wikidata":"Q62267023",name:"渣打國際商業銀行"}},"amenity/bank|玉山商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"玉山商業銀行","brand:en":"E.SUN Commercial Bank","brand:wikidata":"Q5321663","brand:wikipedia":"en:E.SUN Commercial Bank",name:"玉山商業銀行","name:en":"E.SUN Commercial Bank"}},"amenity/bank|第一商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"第一商業銀行","brand:en":"First Commercial Bank","brand:wikidata":"Q11602128","brand:wikipedia":"zh:第一商業銀行",name:"第一商業銀行","name:en":"First Commercial Bank"}},"amenity/bank|聯邦商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"聯邦商業銀行","brand:en":"Union Bank of Taiwan","brand:wikidata":"Q15927195","brand:wikipedia":"zh:聯邦商業銀行",name:"聯邦商業銀行","name:en":"Union Bank of Taiwan"}},"amenity/bank|臺灣中小企業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣中小企業銀行","brand:en":"Taiwan Business Bank","brand:wikidata":"Q15913812","brand:wikipedia":"zh:臺灣中小企業銀行",name:"臺灣中小企業銀行","name:en":"Taiwan Business Bank"}},"amenity/bank|臺灣土地銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣土地銀行","brand:en":"Land Bank of Taiwan","brand:wikidata":"Q717592","brand:wikipedia":"en:Land Bank of Taiwan",name:"臺灣土地銀行","name:en":"Land Bank of Taiwan"}},"amenity/bank|臺灣新光商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣新光商業銀行","brand:en":"Shin Kong Commercial Bank","brand:wikidata":"Q15909616","brand:wikipedia":"zh:臺灣新光商業銀行",name:"臺灣新光商業銀行","name:en":"Shin Kong Commercial Bank"}},"amenity/bank|臺灣銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"臺灣銀行","brand:en":"Bank of Taiwan","brand:wikidata":"Q706533","brand:wikipedia":"en:Bank of Taiwan",name:"臺灣銀行","name:en":"Bank of Taiwan"}},"amenity/bank|芝信用金庫":{tags:{amenity:"bank",brand:"芝信用金庫","brand:en":"Shiba Shinkin Bank","brand:ja":"芝信用金庫","brand:wikidata":"Q11614605","brand:wikipedia":"ja:芝信用金庫",name:"芝信用金庫","name:en":"Shiba Shinkin Bank","name:ja":"芝信用金庫"}},"amenity/bank|華南商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"華南商業銀行","brand:en":"Hua Nan Commercial Bank","brand:wikidata":"Q11620043","brand:wikipedia":"zh:華南銀行",name:"華南商業銀行","name:en":"Hua Nan Commercial Bank"}},"amenity/bank|近畿大阪銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"近畿大阪銀行","brand:en":"The Kinki Osaka Bank","brand:ja":"近畿大阪銀行","brand:wikidata":"Q11638628","brand:wikipedia":"ja:近畿大阪銀行",name:"近畿大阪銀行","name:en":"Kinki Osaka Bank","name:ja":"近畿大阪銀行"}},"amenity/bank|遠東國際商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"遠東國際商業銀行","brand:en":"Far Eastern International Bank","brand:wikidata":"Q15911143","brand:wikipedia":"zh:遠東國際商業銀行",name:"遠東國際商業銀行","name:en":"Far Eastern International Bank"}},"amenity/bank|陽信商業銀行":{countryCodes:["tw"],tags:{amenity:"bank",brand:"陽信商業銀行","brand:en":"Sunny Commercial Bank","brand:wikidata":"Q11658759","brand:wikipedia":"zh:陽信商業銀行",name:"陽信商業銀行","name:en":"Sunny Commercial Bank"}},"amenity/bank|静岡銀行":{countryCodes:["jp"],tags:{amenity:"bank",brand:"静岡銀行","brand:en":"Shizuoka Bank","brand:ja":"静岡銀行","brand:wikidata":"Q7499501","brand:wikipedia":"en:Shizuoka Bank",name:"静岡銀行","name:en":"Shizuoka Bank","name:ja":"静岡銀行"}},"amenity/bank|국민은행":{countryCodes:["kr"],matchNames:["국민은행 (gungmin bank)"],tags:{amenity:"bank",brand:"국민은행","brand:en":"KB Kookmin Bank","brand:ko":"국민은행","brand:wikidata":"Q496606","brand:wikipedia":"en:KB Financial Group Inc",name:"국민은행","name:en":"KB Kookmin Bank","name:ko":"국민은행"}},"amenity/bank|기업은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"기업은행","brand:en":"Industrial Bank of Korea","brand:ko":"기업은행","brand:wikidata":"Q483855","brand:wikipedia":"en:Industrial Bank of Korea",name:"기업은행","name:en":"Industrial Bank of Korea","name:ko":"기업은행"}},"amenity/bank|농협":{countryCodes:["kr"],matchNames:["nh농협은행"],tags:{amenity:"bank",brand:"농협","brand:en":"NH","brand:ko":"농협","brand:wikidata":"Q15283673","brand:wikipedia":"ko:NH농협은행",name:"농협","name:en":"NH","name:ko":"농협"}},"amenity/bank|새마을금고":{countryCodes:["kr"],tags:{amenity:"bank",brand:"새마을금고","brand:ko":"새마을금고","brand:wikidata":"Q12600614","brand:wikipedia":"ko:새마을금고",name:"새마을금고","name:ko":"새마을금고"}},"amenity/bank|신한은행":{countryCodes:["kr"],matchNames:["신한은행 (sinhan bank)"],tags:{amenity:"bank",brand:"신한은행","brand:en":"Sinhan Bank","brand:ko":"신한은행","brand:wikidata":"Q487230","brand:wikipedia":"en:Shinhan Bank",name:"신한은행","name:en":"Sinhan Bank","name:ko":"신한은행"}},"amenity/bank|우리은행":{countryCodes:["kr"],matchNames:["우리은행 (uri bank)"],tags:{amenity:"bank",brand:"우리은행","brand:en":"Woori Bank","brand:ko":"우리은행","brand:wikidata":"Q494369","brand:wikipedia":"en:Woori Bank",name:"우리은행","name:en":"Woori Bank","name:ko":"우리은행"}},"amenity/bank|하나은행":{countryCodes:["kr"],tags:{amenity:"bank",brand:"하나은행","brand:en":"Korea Exchange Bank","brand:ko":"하나은행","brand:wikidata":"Q484047","brand:wikipedia":"en:Korea Exchange Bank",name:"하나은행","name:en":"Korea Exchange Bank","name:ko":"하나은행"}},"amenity/bar|All Bar One":{countryCodes:["gb"],tags:{amenity:"bar",brand:"All Bar One","brand:wikidata":"Q4728624","brand:wikipedia":"en:All Bar One",name:"All Bar One"}},"amenity/bar|Revolución de Cuba":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolución de Cuba","brand:wikidata":"Q64024691",name:"Revolución de Cuba"}},"amenity/bar|Revolution":{countryCodes:["gb"],tags:{amenity:"bar",brand:"Revolution","brand:wikidata":"Q64024398",name:"Revolution"}},"amenity/bicycle_rental|Call a Bike":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"Call a Bike","brand:wikidata":"Q1060525","brand:wikipedia":"en:Call a Bike",name:"Call a Bike"}},"amenity/bicycle_rental|Explore Bike Share":{tags:{amenity:"bicycle_rental",brand:"Explore Bike Share",name:"Explore Bike Share"}},"amenity/bicycle_rental|Grid":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"}},"amenity/bicycle_rental|MiBici":{countryCodes:["mx"],tags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"}},"amenity/bicycle_rental|Swapfiets":{countryCodes:["be","de","dk","nl"],tags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"}},"amenity/bicycle_rental|metropolradruhr":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"}},"amenity/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/bureau_de_change|Обмен валют Кит Group":{tags:{amenity:"bureau_de_change",brand:"Обмен валют Кит Group",name:"Обмен валют Кит Group"}},"amenity/cafe|85°C":{countryCodes:["au","us"],matchNames:["85 cafe","85 degrees","85 degrees c","85 degrees celsius","85c bakery cafe","85c daily cafe","85oc"],tags:{alt_name:"85C",amenity:"cafe",brand:"85°C","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop;chinese",name:"85°C",takeaway:"yes"}},"amenity/cafe|85度C":{countryCodes:["cn","tw"],tags:{amenity:"cafe",brand:"85度C","brand:en":"85C Bakery Cafe","brand:wikidata":"Q4644852","brand:wikipedia":"en:85C Bakery Cafe",cuisine:"coffee_shop",name:"85度C","name:en":"85C Bakery Cafe",takeaway:"yes"}},"amenity/cafe|Aroma 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 Coffee Shop":{countryCodes:["jp"],matchNames:["beck's coffe shop"],tags:{alt_name:"ベックス・コーヒーショップ",amenity:"cafe",brand:"Beck's Coffee Shop","brand:wikidata":"Q11191008","brand:wikipedia":"ja:BECK'S COFFEE SHOP",cuisine:"coffee_shop",name:"Beck's Coffee Shop",takeaway:"yes"}},"amenity/cafe|Biggby Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Biggby Coffee","brand:wikidata":"Q4906876","brand:wikipedia":"en:Biggby Coffee",cuisine:"coffee_shop",name:"Biggby Coffee",takeaway:"yes"}},"amenity/cafe|Black Rock Coffee":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Black Rock Coffee","brand:wikidata":"Q64225934",cuisine:"coffee_shop",name:"Black Rock Coffee",takeaway:"yes"}},"amenity/cafe|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~(Canada/USA)":{countryCodes:["ca","us"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Culture~(New Zealand)":{countryCodes:["nz"],tags:{amenity:"cafe",brand:"Coffee Culture",cuisine:"coffee_shop",name:"Coffee Culture",takeaway:"yes"}},"amenity/cafe|Coffee Fellows":{countryCodes:["de","lu","nl"],tags:{amenity:"cafe",brand:"Coffee Fellows","brand:wikidata":"Q23461429","brand:wikipedia":"en:Coffee Fellows",cuisine:"coffee_shop",name:"Coffee Fellows",takeaway:"yes"}},"amenity/cafe|Coffee House~(Finland)":{countryCodes:["fi"],nomatch:["amenity/cafe|The Coffee House~(Vietnam)"],tags:{amenity:"cafe",brand:"Coffee House","brand:wikidata":"Q11855430","brand:wikipedia":"fi:Coffee House",cuisine:"coffee_shop",name:"Coffee House",takeaway:"yes"}},"amenity/cafe|Coffee Island":{countryCodes:["cy","gr"],tags:{amenity:"cafe",brand:"Coffee Island","brand:wikidata":"Q60867333","brand:wikipedia":"en:Coffee Island",cuisine:"coffee_shop",name:"Coffee Island",takeaway:"yes"}},"amenity/cafe|Coffee Like":{countryCodes:["kz","ru"],tags:{amenity:"cafe",brand:"Coffee Like",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|Jamaica Blue":{countryCodes:["ae","au","cn","my","nz","sg","uk"],tags:{amenity:"cafe",brand:"Jamaica Blue","brand:wikidata":"Q24965819","brand:wikipedia":"en:Jamaica Blue",cuisine:"coffee_shop",name:"Jamaica Blue",takeaway:"yes"}},"amenity/cafe|Joe & The Juice":{tags:{amenity:"cafe",brand:"Joe & The Juice","brand:wikidata":"Q26221514","brand:wikipedia":"en:Joe & The Juice",cuisine:"coffee_shop",name:"Joe & The Juice",takeaway:"yes"}},"amenity/cafe|La Colombe Coffee Roasters":{countryCodes:["us"],tags:{amenity:"cafe",brand:"La Colombe Coffee Roasters","brand:wikidata":"Q23461663","brand:wikipedia":"en:La Colombe Coffee Roasters",cuisine:"coffee_shop",name:"La Colombe Coffee Roasters",short_name:"La Colombe",takeaway:"yes"}},"amenity/cafe|Le Pain Quotidien":{tags:{amenity:"cafe",brand:"Le Pain Quotidien","brand:wikidata":"Q2046903","brand:wikipedia":"en:Le Pain Quotidien",cuisine:"coffee_shop",name:"Le Pain Quotidien",takeaway:"yes"}},"amenity/cafe|Mado":{countryCodes:["tr"],tags:{amenity:"cafe",brand:"Mado","brand:wikidata":"Q17116336","brand:wikipedia":"en:Mado (food company)",cuisine:"coffee_shop",name:"Mado",takeaway:"yes"}},"amenity/cafe|McCafé":{tags:{amenity:"cafe",brand:"McCafé","brand:wikidata":"Q3114287","brand:wikipedia":"en:McCafé",cuisine:"coffee_shop",name:"McCafé",takeaway:"yes"}},"amenity/cafe|Mikel":{countryCodes:["ae","au","cy","de","eg","gb","gr","sa","us"],tags:{amenity:"cafe",brand:"Mikel","brand:wikidata":"Q16952021","brand:wikipedia":"el:Mikel",cuisine:"coffee_shop",name:"Mikel",takeaway:"yes"}},"amenity/cafe|Muffin Break":{countryCodes:["au","in","nz","uk"],tags:{amenity:"cafe",brand:"Muffin Break","brand:wikidata":"Q16964876","brand:wikipedia":"en:Muffin Break",cuisine:"coffee_shop",name:"Muffin Break",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|Toast Box":{tags:{amenity:"cafe",brand:"Toast Box",cuisine:"coffee_shop",name:"Toast Box",takeaway:"yes"}},"amenity/cafe|Tostao’":{countryCodes:["co"],tags:{amenity:"cafe",brand:"Tostao’","brand:wikidata":"Q60632476",cuisine:"coffee_shop",name:"Tostao’","name:es":"Tostao’",official_name:"TOSTAO’ Café & Pan",takeaway:"yes"}},"amenity/cafe|Traveler's Coffee":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Traveler's Coffee","brand:wikidata":"Q4051716","brand:wikipedia":"ru:Traveler’s Coffee",cuisine:"coffee_shop",name:"Traveler's Coffee",takeaway:"yes"}},"amenity/cafe|Trung Nguyên Coffee":{countryCodes:["vn"],matchNames:["trung nguyen"],tags:{amenity:"cafe",brand:"Trung Nguyên","brand:wikidata":"Q3541154","brand:wikipedia":"vi:Trung Nguyên (công ty)",cuisine:"coffee_shop;vietnamese",name:"Trung Nguyên Coffee","name:en":"Trung Nguyen Coffee","name:vi":"Cà phê Trung Nguyên",takeaway:"yes"}},"amenity/cafe|Wayne's Coffee":{countryCodes:["fi","no","se"],tags:{amenity:"cafe",brand:"Wayne's Coffee","brand:wikidata":"Q2637272","brand:wikipedia":"en:Wayne's Coffee",cuisine:"coffee_shop",name:"Wayne's Coffee",takeaway:"yes"}},"amenity/cafe|Wild Bean Cafe":{tags:{amenity:"cafe",brand:"Wild Bean Cafe","brand:wikidata":"Q61804826",cuisine:"coffee_shop",name:"Wild Bean Cafe",takeaway:"yes"}},"amenity/cafe|Ya Kun Kaya Toast":{tags:{amenity:"cafe",brand:"Ya Kun Kaya Toast","brand:wikidata":"Q8046237","brand:wikipedia":"en:Ya Kun Kaya Toast",cuisine:"coffee_shop",name:"Ya Kun Kaya Toast",takeaway:"yes"}},"amenity/cafe|Їдальня":{tags:{amenity:"cafe",brand:"Їдальня",cuisine:"coffee_shop",name:"Їдальня",takeaway:"yes"}},"amenity/cafe|Берёзка":{tags:{amenity:"cafe",brand:"Берёзка",cuisine:"coffee_shop",name:"Берёзка",takeaway:"yes"}},"amenity/cafe|Виктория":{tags:{amenity:"cafe",brand:"Виктория",cuisine:"coffee_shop",name:"Виктория",takeaway:"yes"}},"amenity/cafe|Гурман":{tags:{amenity:"cafe",brand:"Гурман",cuisine:"coffee_shop",name:"Гурман",takeaway:"yes"}},"amenity/cafe|Даблби":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Даблби","brand:en":"Double B","brand:wikidata":"Q62501686",cuisine:"coffee_shop",name:"Даблби","name:en":"Double B",takeaway:"yes"}},"amenity/cafe|Лагуна":{countryCodes:["ru","ua"],tags:{amenity:"cafe",brand:"Лагуна",cuisine:"coffee_shop",name:"Лагуна",takeaway:"yes"}},"amenity/cafe|Лакомка":{tags:{amenity:"cafe",brand:"Лакомка",cuisine:"coffee_shop",name:"Лакомка",takeaway:"yes"}},"amenity/cafe|Оазис":{tags:{amenity:"cafe",brand:"Оазис","brand:en":"Oasis",cuisine:"coffee_shop",name:"Оазис","name:en":"Oasis",takeaway:"yes"}},"amenity/cafe|Парус":{tags:{amenity:"cafe",brand:"Парус",cuisine:"coffee_shop",name:"Парус",takeaway:"yes"}},"amenity/cafe|Сказка":{tags:{amenity:"cafe",brand:"Сказка",cuisine:"coffee_shop",name:"Сказка",takeaway:"yes"}},"amenity/cafe|Смак":{countryCodes:["kz","ru","ua","uz"],matchTags:["shop/convenience"],tags:{amenity:"cafe",brand:"Смак","brand:en":"Taste",cuisine:"coffee_shop",name:"Смак","name:en":"Taste",takeaway:"yes"}},"amenity/cafe|Старбакс":{countryCodes:["ru"],tags:{amenity:"cafe",brand:"Старбакс","brand:en":"Starbucks","brand:wikidata":"Q37158","brand:wikipedia":"en:Starbucks",cuisine:"coffee_shop",name:"Старбакс","name:en":"Starbucks",takeaway:"yes"}},"amenity/cafe|Транзит":{countryCodes:["kz","ru","ua"],tags:{amenity:"cafe",brand:"Транзит",cuisine:"coffee_shop",name:"Транзит",takeaway:"yes"}},"amenity/cafe|Уют":{tags:{amenity:"cafe",brand:"Уют",cuisine:"coffee_shop",name:"Уют",takeaway:"yes"}},"amenity/cafe|Фортуна":{tags:{amenity:"cafe",brand:"Фортуна",cuisine:"coffee_shop",name:"Фортуна",takeaway:"yes"}},"amenity/cafe|Хуторок":{tags:{amenity:"cafe",brand:"Хуторок",cuisine:"coffee_shop",name:"Хуторок",takeaway:"yes"}},"amenity/cafe|Шоколадница":{countryCodes:["ru"],matchNames:["шоколад"],tags:{amenity:"cafe",brand:"Шоколадница","brand:en":"Chocolate","brand:wikidata":"Q30891188","brand:wikipedia":"ru:Шоколадница (сеть кофеен)",cuisine:"coffee_shop",name:"Шоколадница","name:en":"Shokoladnitsa",takeaway:"yes"}},"amenity/cafe|Штолле":{countryCodes:["by","ru","ua"],tags:{amenity:"cafe",brand:"Штолле","brand:en":"Stolle","brand:wikidata":"Q62502236",cuisine:"coffee_shop",name:"Штолле","name:en":"Stolle",takeaway:"yes"}},"amenity/cafe|ארומה":{countryCodes:["il"],tags:{amenity:"cafe",brand:"ארומה","brand:en":"Aroma Espresso Bar","brand:he":"ארומה","brand:wikidata":"Q2909872","brand:wikipedia":"en:Aroma Espresso Bar",cuisine:"coffee_shop",name:"ארומה","name:en":"Aroma Espresso Bar","name:he":"ארומה",takeaway:"yes"}},"amenity/cafe|לנדוור":{countryCodes:["il"],matchNames:["קפה לדנוור"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה לנדוור","brand:en":"Landwer Coffee","brand:he":"קפה לנדוור","brand:wikidata":"Q6485288","brand:wikipedia":"he:קפה לנדוור",cuisine:"coffee_shop",name:"לנדוור","name:en":"Landwer","name:he":"לנדוור",takeaway:"yes"}},"amenity/cafe|סי קפה":{countryCodes:["il"],matchNames:["si cafe","si espresso"],tags:{alt_name:"סי אספרסו","alt_name:en":"Si Espresso","alt_name:he":"סי אספרסו",amenity:"cafe",brand:"סי קפה","brand:en":"Si Cafe","brand:he":"סי קפה","brand:wikidata":"Q64606227",cuisine:"coffee_shop",name:"סי קפה","name:en":"Si Cafe","name:he":"סי קפה",takeaway:"yes"}},"amenity/cafe|קפה ג'ו":{countryCodes:["il"],matchNames:["ג'ו קפה"],tags:{alt_name:"קפה Joe",amenity:"cafe",brand:"קפה ג'ו","brand:en":"Cafe Joe","brand:he":"קפה ג'ו","brand:wikidata":"Q6774425","brand:wikipedia":"he:קפה ג'ו",cuisine:"coffee_shop",name:"קפה ג'ו","name:en":"Cafe Joe","name:he":"קפה ג'ו",takeaway:"yes"}},"amenity/cafe|קפה גרג":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה גרג","brand:en":"Greg Cafe","brand:he":"קפה גרג","brand:wikidata":"Q43295499","brand:wikipedia":"he:קפה גרג",cuisine:"coffee_shop",name:"קפה גרג","name:en":"Greg Cafe","name:he":"קפה גרג",takeaway:"yes"}},"amenity/cafe|קפה נמרוד":{countryCodes:["il"],matchTags:["amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה נמרוד","brand:en":"Cafe Nimrod","brand:he":"קפה נמרוד","brand:wikidata":"Q64606192",cuisine:"coffee_shop",name:"קפה נמרוד","name:en":"Cafe Nimrod","name:he":"קפה נמרוד",takeaway:"yes"}},"amenity/cafe|קפה קפה":{countryCodes:["il"],matchTags:["amenity/fast_food","amenity/restaurant"],tags:{amenity:"cafe",brand:"קפה קפה","brand:en":"Cafe Cafe","brand:he":"קפה קפה","brand:wikidata":"Q5017233","brand:wikipedia":"he:קפה קפה",cuisine:"coffee_shop",name:"קפה קפה","name:en":"Cafe Cafe","name:he":"קפה קפה",takeaway:"yes"}},"amenity/cafe|רולדין":{countryCodes:["il"],matchTags:["amenity/restaurant","shop/bakery","shop/pastry"],tags:{amenity:"cafe",brand:"רולדין","brand:en":"Roladin","brand:he":"רולדין","brand:wikidata":"Q18390972","brand:wikipedia":"he:רולדין",cuisine:"coffee_shop",name:"רולדין","name:en":"Roladin","name:he":"רולדין",takeaway:"yes"}},"amenity/cafe|คาเฟ่ อเมซอน":{countryCodes:["th"],tags:{amenity:"cafe",brand:"คาเฟ่ อเมซอน","brand:en":"Café Amazon","brand:th":"คาเฟ่ อเมซอน","brand:wikidata":"Q43247503","brand:wikipedia":"en:Café Amazon",cuisine:"coffee_shop",name:"คาเฟ่ อเมซอน","name:en":"Café Amazon","name:th":"คาเฟ่ อเมซอน",takeaway:"yes"}},"amenity/cafe|エクセルシオール カフェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"エクセルシオール カフェ","brand:en":"EXCELSIOR CAFFÉ","brand:ja":"エクセルシオール カフェ","brand:wikidata":"Q11289828","brand:wikipedia":"ja:エクセルシオール カフェ",cuisine:"coffee_shop",name:"エクセルシオール カフェ","name:ja":"エクセルシオール カフェ",takeaway:"yes"}},"amenity/cafe|カフェ・ド・クリエ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ド・クリエ","brand:en":"Cafe de CRIE","brand:ja":"カフェ・ド・クリエ","brand:wikidata":"Q17219077","brand:wikipedia":"ja:ポッカクリエイト",cuisine:"coffee_shop",name:"カフェ・ド・クリエ","name:en":"Cafe de CRIE","name:ja":"カフェ・ド・クリエ",takeaway:"yes"}},"amenity/cafe|カフェ・ベローチェ":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"カフェ・ベローチェ","brand:en":"CAFFÈ VELOCE","brand:ja":"カフェ・ベローチェ","brand:wikidata":"Q11294597","brand:wikipedia":"ja:カフェ・ベローチェ",cuisine:"coffee_shop",name:"カフェ・ベローチェ","name:en":"CAFFÈ VELOCE","name:ja":"カフェ・ベローチェ",takeaway:"yes"}},"amenity/cafe|コメダ珈琲店":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"コメダ珈琲店","brand:en":"Komeda Coffee Shop","brand:ja":"コメダ珈琲店","brand:wikidata":"Q11302679","brand:wikipedia":"ja:コメダ",cuisine:"coffee_shop",name:"コメダ珈琲店","name:en":"Komeda Coffee Shop","name:ja":"コメダ珈琲店",takeaway:"yes"}},"amenity/cafe|サンマルクカフェ":{countryCodes:["jp"],tags:{"alt_name:en":"Saint Marc Café",amenity:"cafe",brand:"サンマルクカフェ","brand:en":"ST.MARC CAFÉ","brand:ja":"サンマルクカフェ","brand:wikidata":"Q11305989","brand:wikipedia":"ja:サンマルクホールディングス",cuisine:"coffee_shop",name:"サンマルクカフェ","name:en":"ST.MARC CAFÉ","name:ja":"サンマルクカフェ",takeaway:"yes"}},"amenity/cafe|スターバックス":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"スターバックス","brand:en":"Starbucks","brand:ja":"スターバックス","brand:wikidata":"Q37158","brand:wikipedia":"ja:スターバックス",cuisine:"coffee_shop",name:"スターバックス","name:en":"Starbucks","name:ja":"スターバックス",official_name:"スターバックスコーヒー","official_name:en":"Starbucks Coffee","official_name:ja":"スターバックスコーヒー",takeaway:"yes"}},"amenity/cafe|タリーズコーヒー":{countryCodes:["jp"],tags:{amenity:"cafe",brand:"タリーズコーヒー","brand:en":"Tully's Coffee","brand:ja":"タリーズコーヒー","brand:wikidata":"Q3541983","brand:wikipedia":"en:Tully's Coffee",cuisine:"coffee_shop",name:"タリーズコーヒー","name:en":"Tully's Coffee","name:ja":"タリーズコーヒー",takeaway:"yes"}},"amenity/cafe|ドトールコーヒーショップ":{countryCodes:["jp"],matchNames:["ドトールコーヒー"],tags:{amenity:"cafe",brand:"ドトールコーヒーショップ","brand:en":"Doutor","brand:ja":"ドトールコーヒーショップ","brand:wikidata":"Q11322732","brand:wikipedia":"ja:ドトールコーヒーショップ",cuisine:"coffee_shop",name:"ドトールコーヒーショップ","name:en":"Doutor Coffee Shop","name:ja":"ドトールコーヒーショップ",takeaway:"yes"}},"amenity/cafe|快可立":{countryCodes:["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|Chargy":{countryCodes:["lu"],tags:{amenity:"charging_station",brand:"Chargy","brand:wikidata":"Q62702950","brand:wikipedia":"lb:Chargy",name:"Chargy"}},"amenity/charging_station|Circuit électrique":{countryCodes:["ca"],tags:{amenity:"charging_station",brand:"Circuit électrique","brand: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|Electric Circuit":{countryCodes:["ca"],tags:{amenity:"charging_station",brand:"Electric Circuit","brand:wikidata":"Q64969699",name:"Electric Circuit"}},"amenity/charging_station|Enel":{countryCodes:["it"],matchNames:["enel - stazione di ricarica"],tags:{amenity:"charging_station",brand:"Enel","brand:wikidata":"Q651222","brand:wikipedia":"en:Enel",name:"Enel"}},"amenity/charging_station|Enel X":{tags:{amenity:"charging_station",brand:"Enel X",name:"Enel X"}},"amenity/charging_station|Enel x Metbus":{tags:{amenity:"charging_station",brand:"Enel x Metbus",name:"Enel x Metbus"}},"amenity/charging_station|FLO":{countryCodes:["ca","us"],nomatch:["shop/shoes|FLO"],tags:{amenity:"charging_station",brand:"FLO","brand:wikidata":"Q64971203",name:"FLO"}},"amenity/charging_station|InCharge":{matchNames:["Vattenfall"],tags:{amenity:"charging_station",brand:"InCharge","brand:wikidata":"Q71041027",name:"InCharge"}},"amenity/charging_station|Innogy":{matchNames:["RWE"],tags:{amenity:"charging_station",brand:"Innogy","brand:wikidata":"Q2124721","brand:wikipedia":"de:Innogy",name:"Innogy"}},"amenity/charging_station|Source London":{countryCodes:["gb"],tags:{amenity:"charging_station",brand:"Source London","brand:wikidata":"Q7565133","brand:wikipedia":"en:Source London",name:"Source London"}},"amenity/charging_station|Tesla Supercharger":{tags:{amenity:"charging_station",brand:"Tesla Supercharger","brand:wikidata":"Q17089620","brand:wikipedia":"en:Tesla Supercharger",name:"Tesla Supercharger"}},"amenity/charging_station|bike-energy":{countryCodes:["at","ch","de","fr","it","lu"],matchNames:["bike-energy ladestation"],tags:{amenity:"charging_station",brand:"bike-energy","brand:wikidata":"Q67770877",name:"bike-energy"}},"amenity/charging_station|eVgo":{countryCodes:["us"],tags:{amenity:"charging_station",brand:"eVgo","brand:wikidata":"Q61803820",name:"eVgo"}},"amenity/childcare|Kids 'R' Kids":{countryCodes:["us"],matchNames:["kids are kids"],tags:{after_school:"yes",amenity:"childcare",brand:"Kids 'R' Kids","brand:wikidata":"Q65560342",grades:"PK",name:"Kids 'R' Kids",nursery:"yes",official_name:"Kids 'R' Kids Learning Academies",preschool:"yes"}},"amenity/childcare|YMCA Child Care":{countryCodes:["us"],matchNames:["ymca","ymca child care center"],tags:{amenity:"childcare",brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",name:"YMCA Child Care"}},"amenity/cinema|109シネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"109シネマズ","brand:en":"109 Cinemas","brand:ja":"109シネマズ","brand:wikidata":"Q10854269","brand:wikipedia":"ja:109シネマズ",name:"109シネマズ","name:en":"109 Cinemas","name:ja":"109シネマズ"}},"amenity/cinema|AMC":{countryCodes:["us"],matchNames:["amc cinema","amc cinemas","amc theater","amc theaters","amc theatre","amc theatres"],tags:{amenity:"cinema",brand:"AMC","brand:wikidata":"Q294721","brand:wikipedia":"en:AMC Theatres",name:"AMC"}},"amenity/cinema|B&B Theatres":{countryCodes:["us"],matchNames:["b&b theaters"],tags:{amenity:"cinema",brand:"B&B Theatres","brand:wikidata":"Q4833576","brand:wikipedia":"en:B&B Theatres",name:"B&B Theatres",short_name:"B&B"}},"amenity/cinema|Caribbean Cinemas":{countryCodes:["ag","do","fr","gy","kn","lc","nl","pa","tt","us"],tags:{amenity:"cinema",brand:"Caribbean Cinemas","brand:wikidata":"Q5039364","brand:wikipedia":"en:Caribbean Cinemas",name:"Caribbean Cinemas"}},"amenity/cinema|Century Theatres":{countryCodes:["us"],matchNames:["century theater","century theaters","century theatre"],tags:{amenity:"cinema",brand:"Century Theatres","brand:wikidata":"Q2946307","brand:wikipedia":"en:Century Theatres",name:"Century Theatres",short_name:"Century"}},"amenity/cinema|CineStar":{countryCodes:["de"],tags:{amenity:"cinema",brand:"CineStar","brand:wikidata":"Q321889","brand:wikipedia":"de:Cinestar",name:"CineStar"}},"amenity/cinema|Cinema City":{countryCodes:["cz","hu","pl","ro"],tags:{amenity:"cinema",brand:"Cinema City","brand:wikidata":"Q543651","brand:wikipedia":"en:Cinema City International",name:"Cinema City"}},"amenity/cinema|Cinema NOS":{countryCodes:["pt"],tags:{amenity:"cinema",brand:"Cinemas NOS","brand:wikidata":"Q8063259","brand:wikipedia":"en:NOS Audiovisuais",name:"Cinema NOS"}},"amenity/cinema|Cinemark":{tags:{amenity:"cinema",brand:"Cinemark","brand:wikidata":"Q707530","brand:wikipedia":"en:Cinemark Theatres",name:"Cinemark"}},"amenity/cinema|Cinemaxx~(Europe)":{countryCodes:["de","dk"],nomatch:["amenity/cinema|Cinemaxx~(Indonesia)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q881860","brand:wikipedia":"de:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemaxx~(Indonesia)":{countryCodes:["id"],nomatch:["amenity/cinema|Cinemaxx~(Europe)"],tags:{amenity:"cinema",brand:"Cinemaxx","brand:wikidata":"Q19942740","brand:wikipedia":"id:Cinemaxx",name:"Cinemaxx"}},"amenity/cinema|Cinemex":{countryCodes:["mx"],tags:{amenity:"cinema",brand:"Cinemex","brand:wikidata":"Q3333072","brand:wikipedia":"en:Cinemex",name:"Cinemex"}},"amenity/cinema|Cineplanet":{countryCodes:["cl","pe"],tags:{amenity:"cinema",brand:"Cineplanet","brand:wikidata":"Q5769680","brand:wikipedia":"es:Cineplanet",name:"Cineplanet"}},"amenity/cinema|Cineplex":{countryCodes:["ca"],matchNames:["cineplex cinema","cineplex cinemas","cineplex entertainment","cineplex odeon","cineplex theatre","cineplex theatres"],tags:{amenity:"cinema",brand:"Cineplex","brand:wikidata":"Q2972807","brand:wikipedia":"en:Cineplex Entertainment",name:"Cineplex"}},"amenity/cinema|Cineplexx":{countryCodes:["at","si"],tags:{amenity:"cinema",brand:"Cineplexx","brand:wikidata":"Q873340","brand:wikipedia":"en:Cineplexx Cinemas",name:"Cineplexx"}},"amenity/cinema|Cinepolis":{tags:{amenity:"cinema",brand:"Cinepolis","brand:wikidata":"Q5686673","brand:wikipedia":"en:Cinépolis",name:"Cinepolis"}},"amenity/cinema|Cineworld":{countryCodes:["gb"],tags:{amenity:"cinema",brand:"Cineworld","brand:wikidata":"Q5120901","brand:wikipedia":"en:Cineworld",name:"Cineworld"}},"amenity/cinema|Event":{countryCodes:["au","nz"],matchNames:["event cinema"],tags:{amenity:"cinema",brand:"Event","brand:wikidata":"Q5416698","brand:wikipedia":"en:Event Cinemas",name:"Event",official_name:"Event Cinemas"}},"amenity/cinema|Harkins Theatres":{countryCodes:["us"],matchNames:["harkins theater","harkins theaters","harkins theatre"],tags:{amenity:"cinema",brand:"Harkins Theatres","brand:wikidata":"Q5658199","brand:wikipedia":"en:Harkins Theatres",name:"Harkins Theatres",short_name:"Harkins"}},"amenity/cinema|Hoyts":{countryCodes:["au","nz"],tags:{amenity:"cinema",brand:"Hoyts","brand:wikidata":"Q5922976","brand:wikipedia":"en:Hoyts",name:"Hoyts"}},"amenity/cinema|Landmark Theatres":{countryCodes:["us"],matchNames:["landmark theater","landmark theaters","landmark theatre"],tags:{amenity:"cinema",brand:"Landmark Theatres","brand:wikidata":"Q6484805","brand:wikipedia":"en:Landmark Theatres",name:"Landmark Theatres",short_name:"Landmark"}},"amenity/cinema|MOVIX":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"MOVIX","brand:wikidata":"Q11532184","brand:wikipedia":"ja:松竹マルチプレックスシアターズ",name:"MOVIX",official_name:"松竹マルチプレックスシアターズ","official_name:en":"Shochiku Multiplex Theatres"}},"amenity/cinema|Marcus Cinema":{countryCodes:["us"],matchNames:["marcus cinemas","marcus theater","marcus theaters","marcus theatre","marcus theatres"],tags:{amenity:"cinema",brand:"Marcus Cinema","brand:wikidata":"Q64083352",name:"Marcus Cinema",short_name:"Marcus"}},"amenity/cinema|Movie Tavern":{countryCodes:["us"],tags:{amenity:"cinema",brand:"Movie Tavern","brand:wikidata":"Q64083534",name:"Movie Tavern"}},"amenity/cinema|Multikino":{countryCodes:["lt","lv","pl"],tags:{amenity:"cinema",brand:"Multikino","brand:wikidata":"Q1144802","brand:wikipedia":"pl:Multikino",name:"Multikino"}},"amenity/cinema|Odeon":{countryCodes:["gb","gr","ie","it"],matchNames:["odeon cinema"],tags:{amenity:"cinema",brand:"Odeon","brand:wikidata":"Q6127470","brand:wikipedia":"en:Odeon Cinemas",name:"Odeon"}},"amenity/cinema|Pathé Gaumont":{countryCodes:["be","ch","fr","nl"],tags:{amenity:"cinema",brand:"Pathé Gaumont","brand:wikidata":"Q3060526","brand:wikipedia":"fr:Les cinémas Gaumont Pathé",name:"Pathé Gaumont"}},"amenity/cinema|Regal Cinemas":{countryCodes:["us"],matchNames:["regal cinema"],tags:{amenity:"cinema",brand:"Regal Cinemas","brand:wikidata":"Q835638","brand:wikipedia":"en:Regal Cinemas",name:"Regal Cinemas",short_name:"Regal"}},"amenity/cinema|Showcase Cinemas":{countryCodes:["ar","gb","us"],matchNames:["showcase cinema"],tags:{amenity:"cinema",brand:"Showcase Cinemas","brand:wikidata":"Q7503170","brand:wikipedia":"en:Showcase Cinemas",name:"Showcase Cinemas",short_name:"Showcase"}},"amenity/cinema|TOHOシネマズ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"TOHOシネマズ","brand:en":"TOHO CINEMAS","brand:ja":"TOHOシネマズ","brand:wikidata":"Q11235261","brand:wikipedia":"ja:TOHOシネマズ",name:"TOHOシネマズ","name:en":"Toho Cinemas","name:ja":"TOHOシネマズ",short_name:"TOHO"}},"amenity/cinema|The Space Cinema":{countryCodes:["it"],matchNames:["the space"],tags:{amenity:"cinema",brand:"The Space Cinema","brand:wikidata":"Q3989406","brand:wikipedia":"it:The Space Cinema",name:"The Space Cinema"}},"amenity/cinema|UGC":{countryCodes:["fr"],tags:{amenity:"cinema",brand:"UGC","brand:wikidata":"Q1643241","brand:wikipedia":"fr:Union générale cinématographique",name:"UGC"}},"amenity/cinema|Vue~(IrelandAndUK)":{countryCodes:["gb","ie"],matchNames:["vue cinema","vue cinemas"],nomatch:["amenity/cinema|Vue~(Netherlands)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2535134","brand:wikipedia":"en:Vue Cinemas",name:"Vue"}},"amenity/cinema|Vue~(Netherlands)":{countryCodes:["nl"],matchNames:["vue cinema"],nomatch:["amenity/cinema|Vue~(IrelandAndUK)"],tags:{amenity:"cinema",brand:"Vue","brand:wikidata":"Q2421690","brand:wikipedia":"nl:Vue (bioscoopketen)",name:"Vue"}},"amenity/cinema|イオンシネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"イオンシネマ","brand:en":"AEON Cinema","brand:ja":"イオンシネマ","brand:wikidata":"Q17192792","brand:wikipedia":"ja:イオンエンターテイメント",name:"イオンシネマ","name:en":"AEON Cinema","name:ja":"イオンシネマ"}},"amenity/cinema|ユナイテッド・シネマ":{countryCodes:["jp"],tags:{amenity:"cinema",brand:"ユナイテッド・シネマ","brand:en":"United Cinemas","brand:ja":"ユナイテッド・シネマ","brand:wikidata":"Q11345629","brand:wikipedia":"ja:ユナイテッド・シネマ",name:"ユナイテッド・シネマ","name:en":"United Cinemas","name:ja":"ユナイテッド・シネマ"}},"amenity/clinic|Aid Post":{tags:{amenity:"clinic",brand:"Aid Post",name:"Aid Post"}},"amenity/clinic|CityMD":{countryCodes:["us"],tags:{amenity:"clinic",brand:"CityMD","brand:wikidata":"Q22295471","brand:wikipedia":"en:CityMD",healthcare:"clinic",name:"CityMD"}},"amenity/clinic|DaVita Dialysis":{countryCodes:["us"],matchNames:["davita","davita dialysis center","davita kidney care"],tags:{amenity:"clinic",brand:"DaVita Dialysis","brand:wikidata":"Q5207184",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"DaVita Dialysis"}},"amenity/clinic|Dialysis Clinic":{countryCodes:["us"],matchNames:["dialysis clinic inc"],tags:{amenity:"clinic",brand:"Dialysis Clinic","brand:wikidata":"Q5270633","brand:wikipedia":"en:Dialysis Clinic, Inc.",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Dialysis Clinic",short_name:"DCI"}},"amenity/clinic|Fresenius Kidney Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Kidney Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Kidney Care"}},"amenity/clinic|Fresenius Medical Care":{countryCodes:["us"],tags:{amenity:"clinic",brand:"Fresenius Medical Care","brand:wikidata":"Q650259","brand:wikipedia":"en:Fresenius Medical Care",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Fresenius Medical Care"}},"amenity/clinic|Planned Parenthood":{countryCodes:["us"],matchTags:["amenity/doctors","amenity/social_facility"],tags:{amenity:"clinic",brand:"Planned Parenthood","brand:wikidata":"Q2553262","brand:wikipedia":"en:Planned Parenthood",healthcare:"counselling","healthcare:counselling":"antenatal;sexual",name:"Planned Parenthood"}},"amenity/clinic|Poliklinika":{tags:{amenity:"clinic",brand:"Poliklinika",name:"Poliklinika"}},"amenity/clinic|Posyandu":{tags:{amenity:"clinic",brand:"Posyandu",name:"Posyandu"}},"amenity/clinic|Puskesmas":{tags:{amenity:"clinic",brand:"Puskesmas",name:"Puskesmas"}},"amenity/clinic|Satellite Healthcare":{countryCodes:["us"],matchNames:["satellite","satellite dialysis"],tags:{amenity:"clinic",brand:"Satellite Healthcare","brand:wikidata":"Q50039787",healthcare:"dialysis","healthcare:speciality":"dialysis",name:"Satellite Healthcare"}},"amenity/clinic|Terveystalo":{countryCodes:["fi"],tags:{amenity:"clinic",brand:"Terveystalo","brand:wikidata":"Q11897034","brand:wikipedia":"fi:Terveystalo",healthcare:"clinic",name:"Terveystalo"}},"amenity/clinic|VA Clinic":{countryCodes:["us"],matchNames:["department of veterans affairs clinic","veterans administration","veterans administration clinic","veterans affairs","veterans affairs clinic"],tags:{amenity:"clinic",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"clinic","healthcare:for":"veterans",name:"VA Clinic",short_name:"VA"}},"amenity/clinic|ZoomCare":{countryCodes:["us"],tags:{amenity:"clinic",brand:"ZoomCare","brand:wikidata":"Q64120374","brand:wikipedia":"en:ZoomCare",healthcare:"clinic",name:"ZoomCare",urgent_care:"yes"}},"amenity/clinic|Амбулатория":{tags:{amenity:"clinic",brand:"Амбулатория",name:"Амбулатория"}},"amenity/clinic|Амбулаторія":{tags:{amenity:"clinic",brand:"Амбулаторія",name:"Амбулаторія"}},"amenity/clinic|Детская поликлиника":{tags:{amenity:"clinic",brand:"Детская поликлиника",name:"Детская поликлиника"}},"amenity/clinic|Женская консультация":{tags:{amenity:"clinic",brand:"Женская консультация",name:"Женская консультация"}},"amenity/clinic|Поликлиника":{tags:{amenity:"clinic",brand:"Поликлиника",name:"Поликлиника"}},"amenity/clinic|Поликлиника №1":{tags:{amenity:"clinic",brand:"Поликлиника №1",name:"Поликлиника №1"}},"amenity/clinic|Поліклініка":{tags:{amenity:"clinic",brand:"Поліклініка",name:"Поліклініка"}},"amenity/clinic|ФАП":{tags:{amenity:"clinic",brand:"ФАП",name:"ФАП"}},"amenity/clinic|درمانگاه":{tags:{amenity:"clinic",brand:"درمانگاه",name:"درمانگاه"}},"amenity/dentist|Aspen Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Aspen Dental","brand:wikidata":"Q4807808","brand:wikipedia":"en:Aspen Dental",healthcare:"dentist",name:"Aspen Dental"}},"amenity/dentist|Comfort Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Comfort Dental","brand:wikidata":"Q22079521","brand:wikipedia":"en:Comfort Dental",healthcare:"dentist",name:"Comfort Dental"}},"amenity/dentist|Dentix":{tags:{amenity:"dentist",brand:"Dentix","brand:wikidata":"Q30505320","brand:wikipedia":"es:Dentix",name:"Dentix"}},"amenity/dentist|Folktandvården":{countryCodes:["se"],tags:{amenity:"dentist",brand:"Folktandvården","brand:wikidata":"Q10497476","brand:wikipedia":"sv:Folktandvården",name:"Folktandvården"}},"amenity/dentist|Gentle Dental":{countryCodes:["us"],tags:{amenity:"dentist",brand:"Gentle Dental",name:"Gentle Dental"}},"amenity/dentist|Kool Smiles":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{amenity:"dentist",brand:"Kool Smiles","brand:wikidata":"Q6430587","brand:wikipedia":"en:Kool Smiles",healthcare:"dentist",name:"Kool Smiles"}},"amenity/dentist|Vitaldent":{countryCodes:["es","it"],tags:{amenity:"dentist",brand:"Vitaldent","brand:wikidata":"Q5860599","brand:wikipedia":"es:Vitaldent",name:"Vitaldent"}},"amenity/dentist|Western Dental":{countryCodes:["us"],matchTags:["healthcare/dentist"],tags:{alt_name:"Western Dental & Orthodontics",amenity:"dentist",brand:"Western Dental","brand:wikidata":"Q64211989","brand:wikipedia":"en:Western Dental",healthcare:"dentist",name:"Western Dental"}},"amenity/doctors|MinuteClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"MinuteClinic","brand:wikidata":"Q6871141","brand:wikipedia":"en:MinuteClinic",healthcare:"doctor","healthcare:speciality":"community",name:"MinuteClinic"}},"amenity/doctors|RediClinic":{countryCodes:["us"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"RediClinic","brand:wikidata":"Q64138408",healthcare:"doctor","healthcare:speciality":"community",name:"RediClinic"}},"amenity/doctors|The Little Clinic":{countryCodes:["us"],matchNames:["little clinic"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"The Little Clinic","brand:wikidata":"Q64138262",healthcare:"doctor","healthcare:speciality":"community",name:"The Little Clinic"}},"amenity/doctors|Walgreens Healthcare Clinic":{countryCodes:["us"],matchNames:["healthcare clinic","takecare","takecare clinic","walgreens"],matchTags:["amenity/clinic"],tags:{amenity:"doctors",brand:"Walgreens","brand:wikidata":"Q1591889",healthcare:"doctor","healthcare:speciality":"community",name:"Walgreens Healthcare Clinic"}},"amenity/fast_food|241 Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"241 Pizza","brand:wikidata":"Q4631768","brand:wikipedia":"en:241 Pizza",cuisine:"pizza",name:"241 Pizza",takeaway:"yes"}},"amenity/fast_food|A&W~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fast_food|A&W~(USA)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q2818848","brand:wikipedia":"en:A&W (Canada)",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|A&W~(USA)":{countryCodes:["us"],nomatch:["amenity/fast_food|A&W~(Canada)"],tags:{amenity:"fast_food",brand:"A&W","brand:wikidata":"Q277641","brand:wikipedia":"en:A&W Restaurants",cuisine:"burger",name:"A&W",takeaway:"yes"}},"amenity/fast_food|Andok's":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Andok's","brand:wikidata":"Q62267166",cuisine:"chicken",name:"Andok's",takeaway:"yes"}},"amenity/fast_food|Angel's Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Angel's Burger","brand:wikidata":"Q62267228",cuisine:"burger",name:"Angel's Burger",takeaway:"yes"}},"amenity/fast_food|Arby's":{countryCodes:["ca","tr","us"],tags:{amenity:"fast_food",brand:"Arby's","brand:wikidata":"Q630866","brand:wikipedia":"en:Arby's",cuisine:"sandwich",name:"Arby's",takeaway:"yes"}},"amenity/fast_food|Arctic Circle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Arctic Circle","brand:wikidata":"Q4787501","brand:wikipedia":"en:Arctic Circle Restaurants",cuisine:"burger",name:"Arctic Circle",takeaway:"yes"}},"amenity/fast_food|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;chicken",name:"Boston Market",takeaway:"yes"}},"amenity/fast_food|Braum's":{countryCodes:["us"],matchTags:["shop/dairy"],tags:{amenity:"fast_food",brand:"Braum's","brand:wikidata":"Q4958263","brand:wikipedia":"en:Braum's",cuisine:"ice_cream",name:"Braum's",shop:"dairy",takeaway:"yes"}},"amenity/fast_food|Bruegger's Bagels":{countryCodes:["us"],matchNames:["breuger's","breugger's","bruger's","brugger's"],tags:{amenity:"fast_food",brand:"Bruegger's Bagels","brand:wikidata":"Q4978656","brand:wikipedia":"en:Bruegger's",cuisine:"bagel",name:"Bruegger's Bagels",short_name:"Bruegger's",takeaway:"yes"}},"amenity/fast_food|Burger 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|Chicken Treat":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chicken Treat","brand:wikidata":"Q5096274","brand:wikipedia":"en:Chicken Treat",cuisine:"chicken",name:"Chicken Treat",takeaway:"yes"}},"amenity/fast_food|China Wok":{tags:{amenity:"fast_food",brand:"China Wok","brand:wikidata":"Q5766542","brand:wikipedia":"es:China Wok",cuisine:"chinese",name:"China Wok",takeaway:"yes"}},"amenity/fast_food|Chipotle":{tags:{amenity:"fast_food",brand:"Chipotle","brand:wikidata":"Q465751","brand:wikipedia":"en:Chipotle Mexican Grill",cuisine:"mexican",name:"Chipotle",official_name:"Chipotle Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Chopt":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Chopt","brand:wikidata":"Q17509305","brand:wikipedia":"en:Chopt",cuisine:"salad",name:"Chopt",takeaway:"yes"}},"amenity/fast_food|Chowking":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Chowking","brand:wikidata":"Q1076816","brand:wikipedia":"en:Chowking",cuisine:"asian",name:"Chowking",takeaway:"yes"}},"amenity/fast_food|Church's Chicken":{tags:{amenity:"fast_food",brand:"Church's Chicken","brand:wikidata":"Q1089932","brand:wikipedia":"en:Church's Chicken",cuisine:"chicken",name:"Church's Chicken",takeaway:"yes"}},"amenity/fast_food|Cinnabon":{matchTags:["shop/confectionery"],tags:{amenity:"fast_food",brand:"Cinnabon","brand: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|Crust":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Crust",cuisine:"pizza",name:"Crust",official_name:"Crust Gourmet Pizza Bar",takeaway:"yes"}},"amenity/fast_food|Cultures":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Cultures","brand:wikidata":"Q64876898",cuisine:"sandwich",name:"Cultures",takeaway:"yes"}},"amenity/fast_food|Culver's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Culver's","brand:wikidata":"Q1143589","brand:wikipedia":"en:Culver's",cuisine:"burger",name:"Culver's",takeaway:"yes"}},"amenity/fast_food|DQ Grill & Chill":{countryCodes:["ca","us"],matchNames:["dairy queen chill & grill"],nomatch:["amenity/fast_food|Dairy Queen"],tags:{amenity:"fast_food",brand:"DQ Grill & Chill","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"DQ Grill & Chill",takeaway:"yes"}},"amenity/fast_food|Dairy Queen":{matchNames:["dq"],nomatch:["amenity/fast_food|DQ Grill & Chill"],tags:{amenity:"fast_food",brand:"Dairy Queen","brand:wikidata":"Q1141226","brand:wikipedia":"en:Dairy Queen",cuisine:"ice_cream;burger",name:"Dairy Queen",takeaway:"yes"}},"amenity/fast_food|Daylight Donuts":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Daylight Donuts","brand:wikidata":"Q48970508","brand:wikipedia":"en:Daylight Donuts",cuisine:"donut",name:"Daylight Donuts",takeaway:"yes"}},"amenity/fast_food|Debonairs Pizza":{countryCodes:["ae","bw","ke","ls","mu","mw","mz","na","ng","sd","ss","sz","za","zm"],matchNames:["debonairs"],tags:{amenity:"fast_food",brand:"Debonairs Pizza","brand:wikidata":"Q65079407","brand:wikipedia":"en:Debonairs Pizza",cuisine:"pizza",name:"Debonairs Pizza",takeaway:"yes"}},"amenity/fast_food|Del Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Del Taco","brand:wikidata":"Q1183818","brand:wikipedia":"en:Del Taco",cuisine:"mexican",name:"Del Taco",takeaway:"yes"}},"amenity/fast_food|Dig Inn":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Dig Inn","brand:wikidata":"Q28226241","brand:wikipedia":"en:Dig Inn",cuisine:"regional",name:"Dig Inn",takeaway:"yes"}},"amenity/fast_food|Domino's":{matchNames:["dominos pizza"],tags:{amenity:"fast_food",brand:"Domino's","brand:wikidata":"Q839466","brand:wikipedia":"en:Domino's Pizza",cuisine:"pizza",name:"Domino's",takeaway:"yes"}},"amenity/fast_food|Donut King":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Donut King","brand:wikidata":"Q5296921","brand:wikipedia":"en:Donut King",cuisine:"donut;coffee_shop",name:"Donut King",takeaway:"yes"}},"amenity/fast_food|Dunkin' Donuts":{matchNames:["dunkin doughnuts"],tags:{amenity:"fast_food",brand:"Dunkin' Donuts","brand:wikidata":"Q847743","brand:wikipedia":"en:Dunkin' Donuts",cuisine:"donut;coffee_shop",name:"Dunkin' Donuts",takeaway:"yes"}},"amenity/fast_food|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|Es Teler 77":{tags:{amenity:"fast_food",brand:"Es Teler 77","brand:wikidata":"Q5396630",cuisine:"indonesian",name:"Es Teler 77",takeaway:"yes"}},"amenity/fast_food|Everest":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Everest","brand:wikidata":"Q62273299",cuisine:"burger",name:"Everest",takeaway:"yes"}},"amenity/fast_food|Extreme Pita":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Extreme Pita","brand:wikidata":"Q5422367","brand:wikipedia":"en:Extreme Pita",cuisine:"pita",name:"Extreme Pita",takeaway:"yes"}},"amenity/fast_food|Extreme Pizza":{tags:{amenity:"fast_food",brand:"Extreme Pizza","brand:wikidata":"Q5422364","brand:wikipedia":"en:Extreme Pizza",cuisine:"pizza",name:"Extreme Pizza",takeaway:"yes"}},"amenity/fast_food|Fazoli's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Fazoli's","brand:wikidata":"Q1399195","brand:wikipedia":"en:Fazoli's",cuisine:"italian",name:"Fazoli's",takeaway:"yes"}},"amenity/fast_food|Figaro's Pizza":{tags:{amenity:"fast_food",brand:"Figaro's Pizza","brand:wikidata":"Q48802600","brand:wikipedia":"en:Figaro's Pizza",cuisine:"pizza",name:"Figaro's Pizza",takeaway:"yes"}},"amenity/fast_food|Firehouse Subs":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Firehouse Subs","brand:wikidata":"Q5451873","brand:wikipedia":"en:Firehouse Subs",cuisine:"sandwich",name:"Firehouse Subs",takeaway:"yes"}},"amenity/fast_food|Five Guys":{tags:{amenity:"fast_food",brand:"Five Guys","brand:wikidata":"Q1131810","brand:wikipedia":"en:Five Guys",cuisine:"burger",name:"Five Guys",official_name:"Five Guys Burgers and Fries",takeaway:"yes"}},"amenity/fast_food|Freddy's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freddy's","brand:wikidata":"Q5496837","brand:wikipedia":"en:Freddy's Frozen Custard & Steakburgers",cuisine:"ice_cream;burger",name:"Freddy's",official_name:"Freddys Frozen Custard & Steakburgers",takeaway:"yes"}},"amenity/fast_food|Freebirds":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freebirds","brand:wikidata":"Q5500367","brand:wikipedia":"en:Freebirds World Burrito",cuisine:"mexican",name:"Freebirds",takeaway:"yes"}},"amenity/fast_food|Freshslice Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Freshslice Pizza","brand:wikidata":"Q5503082","brand:wikipedia":"en:Freshslice Pizza",cuisine:"pizza",name:"Freshslice Pizza",takeaway:"yes"}},"amenity/fast_food|Gabriel Pizza":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Gabriel Pizza","brand:wikidata":"Q5515791","brand:wikipedia":"en:Gabriel Pizza",cuisine:"pizza",name:"Gabriel Pizza",takeaway:"yes"}},"amenity/fast_food|Gino's Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q5563205","brand:wikipedia":"en:Gino's Pizza and Spaghetti",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"}},"amenity/fast_food|Gold Star Chili":{countryCodes:["us"],tags:{alt_name:"Gold Star",amenity:"fast_food",brand:"Gold Star Chili","brand:wikidata":"Q16994254","brand:wikipedia":"en:Gold Star Chili",cuisine:"chili",name:"Gold Star Chili",takeaway:"yes"}},"amenity/fast_food|Golden Chick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Golden Chick","brand:wikidata":"Q3772930","brand:wikipedia":"en:Golden Chick",cuisine:"chicken",name:"Golden Chick",takeaway:"yes"}},"amenity/fast_food|Golden Krust Caribbean Bakery & Grill":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Golden Krust Caribbean Bakery & Grill","brand:wikidata":"Q5579615","brand:wikipedia":"en:Golden Krust Caribbean Bakery & Grill",cuisine:"caribbean",name:"Golden Krust",takeaway:"yes"}},"amenity/fast_food|Good Times":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Good Times","brand:wikidata":"Q1143589","brand:wikipedia":"en:Good Times Burgers & Frozen Custard",cuisine:"burger;ice_cream",name:"Good Times",official_name:"Good Times Burgers & Frozen Custard",takeaway:"yes"}},"amenity/fast_food|Great American Cookies":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Great American Cookies","brand:wikidata":"Q5598629","brand:wikipedia":"en:Great American Cookies",cuisine:"cookies",name:"Great American Cookies",takeaway:"yes"}},"amenity/fast_food|Greenwich":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Greenwich","brand:wikidata":"Q2691308","brand:wikipedia":"en:Greenwich Pizza",cuisine:"pizza",name:"Greenwich",takeaway:"yes"}},"amenity/fast_food|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|Honey Baked Ham":{countryCodes:["us"],matchNames:["honey baked ham company"],matchTags:["shop/butcher","shop/deli"],tags:{alt_name:"HoneyBaked Ham",amenity:"fast_food",brand:"Honey Baked Ham","brand:wikidata":"Q5893363","brand:wikipedia":"en:The Honey Baked Ham Company",cuisine:"american",name:"Honey Baked Ham",official_name:"The Honey Baked Ham Company",takeaway:"yes"}},"amenity/fast_food|Hot Dog on a Stick":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Dog on a Stick","brand:wikidata":"Q5909922","brand:wikipedia":"en:Hot Dog on a Stick",cuisine:"hot_dog",name:"Hot Dog on a Stick",takeaway:"yes"}},"amenity/fast_food|Hot Head Burritos":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Hot Head Burritos","brand:wikidata":"Q5910008","brand:wikipedia":"en:Hot Head Burritos",cuisine:"mexican",name:"Hot Head Burritos",short_name:"Hot Head",takeaway:"yes"}},"amenity/fast_food|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",official_name:"Jimmy John's Gourmet Sandwiches",takeaway:"yes"}},"amenity/fast_food|Jimmy the Greek":{countryCodes:["ae","ca"],tags:{amenity:"fast_food",brand:"Jimmy the Greek","brand:wikidata":"Q17077817","brand:wikipedia":"en:Jimmy the Greek (restaurant)",cuisine:"greek",name:"Jimmy the Greek",takeaway:"yes"}},"amenity/fast_food|Jollibee":{tags:{amenity:"fast_food",brand:"Jollibee","brand:wikidata":"Q37614","brand:wikipedia":"en:Jollibee",cuisine:"burger",name:"Jollibee",takeaway:"yes"}},"amenity/fast_food|Just Salad":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Just Salad","brand:wikidata":"Q23091823","brand:wikipedia":"en:Just Salad",cuisine:"salad",name:"Just Salad",takeaway:"yes"}},"amenity/fast_food|KFC":{tags:{alt_name:"Kentucky Fried Chicken",amenity:"fast_food",brand:"KFC","brand:wikidata":"Q524757","brand:wikipedia":"en:KFC",cuisine:"chicken",name:"KFC",takeaway:"yes"}},"amenity/fast_food|Kernels Popcorn":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Kernels Popcorn","brand:wikidata":"Q64876684",cuisine:"popcorn",name:"Kernels Popcorn",takeaway:"yes"}},"amenity/fast_food|Kochlöffel":{countryCodes:["de","tr"],tags:{amenity:"fast_food",brand:"Kochlöffel","brand:wikidata":"Q315539","brand:wikipedia":"en:Kochlöffel",cuisine:"burger",name:"Kochlöffel",takeaway:"yes"}},"amenity/fast_food|Kotipizza":{countryCodes:["fi"],tags:{amenity:"fast_food",brand:"Kotipizza","brand:wikidata":"Q1628625","brand:wikipedia":"en:Kotipizza",cuisine:"pizza",name:"Kotipizza",takeaway:"yes"}},"amenity/fast_food|Krispy Kreme":{matchNames:["krispy kreme doughnuts"],tags:{amenity:"fast_food",brand:"Krispy Kreme","brand:wikidata":"Q1192805","brand:wikipedia":"en:Krispy Kreme",cuisine:"donut",name:"Krispy Kreme",takeaway:"yes"}},"amenity/fast_food|Krispy Krunchy Chicken":{countryCodes:["mx","us"],matchNames:["crispy crunchy chicken"],tags:{amenity:"fast_food",brand:"Krispy Krunchy Chicken","brand:wikidata":"Q65087447","brand:wikipedia":"en:Krispy Krunchy Chicken",cuisine:"chicken",name:"Krispy Krunchy Chicken",takeaway:"yes"}},"amenity/fast_food|Krystal":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Krystal","brand:wikidata":"Q472195","brand:wikipedia":"en:Krystal (restaurant)",cuisine:"burger",name:"Krystal",takeaway:"yes"}},"amenity/fast_food|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|La Salsa":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"La Salsa","brand:wikidata":"Q48835190","brand:wikipedia":"en:La Salsa",cuisine:"tex-mex",name:"La Salsa",takeaway:"yes"}},"amenity/fast_food|Lee's Famous Recipe Chicken":{countryCodes:["ca","us"],matchNames:["lee's"],tags:{amenity:"fast_food",brand:"Lee's Famous Recipe Chicken","brand:wikidata":"Q6512810","brand:wikipedia":"en:Lee's Famous Recipe Chicken",cuisine:"chicken",name:"Lee's Famous Recipe Chicken",takeaway:"yes"}},"amenity/fast_food|Lee's Sandwiches":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Lee's Sandwiches","brand:wikidata":"Q6512823","brand:wikipedia":"en:Lee's Sandwiches",cuisine:"vietnamese;sandwich",name:"Lee's Sandwiches",takeaway:"yes"}},"amenity/fast_food|Little Caesars":{matchNames:["little caesars pizza","little ceasars","little ceasars pizza"],tags:{amenity:"fast_food",brand:"Little Caesars","brand:wikidata":"Q1393809","brand:wikipedia":"en:Little Caesars",cuisine:"pizza",name:"Little Caesars",takeaway:"yes"}},"amenity/fast_food|Long John Silver's":{tags:{amenity:"fast_food",brand:"Long John Silver's","brand:wikidata":"Q1535221","brand:wikipedia":"en:Long John Silver's",cuisine:"seafood",name:"Long John Silver's",takeaway:"yes"}},"amenity/fast_food|Lotteria":{tags:{amenity:"fast_food",brand:"Lotteria","brand:wikidata":"Q249525","brand:wikipedia":"en:Lotteria",cuisine:"burger",name:"Lotteria",takeaway:"yes"}},"amenity/fast_food|MOD Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"MOD Pizza","brand:wikidata":"Q19903469","brand:wikipedia":"en:MOD Pizza",cuisine:"pizza",name:"MOD Pizza",takeaway:"yes"}},"amenity/fast_food|Manchu Wok":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Manchu Wok","brand:wikidata":"Q6747622","brand:wikipedia":"en:Manchu Wok",cuisine:"chinese",name:"Manchu Wok",takeaway:"yes"}},"amenity/fast_food|Mang Inasal":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Mang Inasal","brand:wikidata":"Q6748573","brand:wikipedia":"en:Mang Inasal",cuisine:"barbecue",name:"Mang Inasal",takeaway:"yes"}},"amenity/fast_food|Manhattan Bagel":{countryCodes:["us"],matchNames:["manhattan bagels"],tags:{amenity:"fast_food",brand:"Manhattan Bagel","brand:wikidata":"Q64517333",cuisine:"bagel",name:"Manhattan Bagel",takeaway:"yes"}},"amenity/fast_food|Mary Brown's":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Mary Brown's","brand:wikidata":"Q6779125","brand:wikipedia":"en:Mary Brown's",cuisine:"chicken",name:"Mary Brown's",takeaway:"yes"}},"amenity/fast_food|Max":{countryCodes:["se"],tags:{amenity:"fast_food",brand:"Max","brand:wikidata":"Q1912172","brand:wikipedia":"en:Max Hamburgers",cuisine:"burger",name:"Max",takeaway:"yes"}},"amenity/fast_food|McDonald's":{tags:{amenity:"fast_food",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"McDonald's",takeaway:"yes"}},"amenity/fast_food|Meson Sandwiches":{countryCodes:["us"],matchNames:["el meson"],tags:{alt_name:"El Meson Sandwiches",amenity:"fast_food",brand:"Meson Sandwiches","brand:wikidata":"Q5351585","brand:wikipedia":"en:El Meson Sandwiches",cuisine:"sandwich",name:"Meson Sandwiches",short_name:"Meson",takeaway:"yes"}},"amenity/fast_food|Mighty Taco":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Mighty Taco","brand:wikidata":"Q6844210","brand:wikipedia":"en:Mighty Taco",cuisine:"mexican",name:"Mighty Taco",takeaway:"yes"}},"amenity/fast_food|Minute Burger":{countryCodes:["ph"],tags:{amenity:"fast_food",brand:"Minute Burger","brand:wikidata":"Q62273503",cuisine:"burger",name:"Minute Burger",takeaway:"yes"}},"amenity/fast_food|Moe's Southwest Grill":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Moe's Southwest Grill","brand:wikidata":"Q6889938","brand:wikipedia":"en:Moe's Southwest Grill",cuisine:"mexican",name:"Moe's Southwest Grill",short_name:"Moe's",takeaway:"yes"}},"amenity/fast_food|Mr. Sub":{tags:{amenity:"fast_food",brand:"Mr. Sub","brand:wikidata":"Q6929225","brand:wikipedia":"en:Mr. Sub",cuisine:"sandwich",name:"Mr. Sub",takeaway:"yes"}},"amenity/fast_food|Mucho Burrito":{countryCodes:["ca","gb","us"],tags:{amenity:"fast_food",brand:"Mucho Burrito","brand:wikidata":"Q65148332",cuisine:"mexican",name:"Mucho Burrito",takeaway:"yes"}},"amenity/fast_food|Nathan's":{countryCodes:["us"],matchNames:["nathans famous"],tags:{amenity:"fast_food",brand:"Nathan's","brand:wikidata":"Q1319505","brand:wikipedia":"en:Nathan's Famous",cuisine:"hot_dog",name:"Nathan's",takeaway:"yes"}},"amenity/fast_food|New York Fries":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"New York Fries","brand:wikidata":"Q7013558","brand:wikipedia":"en:New York Fries",cuisine:"fries",name:"New York Fries",takeaway:"yes"}},"amenity/fast_food|New York Pizza":{countryCodes:["nl"],tags:{amenity:"fast_food",brand:"New York Pizza","brand:wikidata":"Q2639128","brand:wikipedia":"nl:New York Pizza",cuisine:"pizza",name:"New York Pizza",takeaway:"yes"}},"amenity/fast_food|Noah's Bagels":{countryCodes:["us"],matchNames:["noahs ny bagels"],tags:{amenity:"fast_food",brand:"Noah's Bagels","brand:wikidata":"Q64517373",cuisine:"bagel",name:"Noah's Bagels",official_name:"Noah's New York Bagels",takeaway:"yes"}},"amenity/fast_food|Noodle Box":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Noodle Box","brand:wikidata":"Q7049671","brand:wikipedia":"en:Noodle Box",cuisine:"noodle",name:"Noodle Box",takeaway:"yes"}},"amenity/fast_food|Nordsee":{countryCodes:["at","ch","de"],tags:{amenity:"fast_food",brand:"Nordsee","brand:wikidata":"Q74866","brand:wikipedia":"en:Nordsee",cuisine:"seafood",name:"Nordsee",takeaway:"yes"}},"amenity/fast_food|Num Pang":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Num Pang","brand:wikidata":"Q62079702","brand:wikipedia":"en:Num Pang",cuisine:"cambodian, sandwich",name:"Num Pang",takeaway:"yes"}},"amenity/fast_food|O'Tacos":{countryCodes:["be","fr"],tags:{amenity:"fast_food",brand:"O'Tacos","brand:wikidata":"Q28494040","brand:wikipedia":"en:O'Tacos",cuisine:"mexican",name:"O'Tacos",takeaway:"yes"}},"amenity/fast_food|Oporto":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Oporto","brand:wikidata":"Q4412342","brand:wikipedia":"en:Oporto (restaurant)",cuisine:"burger;chicken",name:"Oporto",takeaway:"yes"}},"amenity/fast_food|Orange Julius":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Orange Julius","brand:wikidata":"Q3355059","brand:wikipedia":"en:Orange Julius",cuisine:"juice",name:"Orange Julius",takeaway:"yes"}},"amenity/fast_food|P. Terry's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"P. Terry's","brand:wikidata":"Q19903521","brand:wikipedia":"en:P. Terry's",cuisine:"burger",name:"P. Terry's",official_name:"P. Terry's Burger Stand",takeaway:"yes"}},"amenity/fast_food|Pal's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Pal's","brand:wikidata":"Q7126094","brand:wikipedia":"en:Pal's",cuisine:"burger",name:"Pal's",official_name:"Pal's Sudden Service",takeaway:"yes"}},"amenity/fast_food|Panago":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Panago","brand:wikidata":"Q17111672","brand:wikipedia":"en:Panago",cuisine:"pizza",name:"Panago",takeaway:"yes"}},"amenity/fast_food|Panda Express":{matchNames:["panda"],tags:{amenity:"fast_food",brand:"Panda Express","brand:wikidata":"Q1358690","brand:wikipedia":"en:Panda Express",cuisine:"chinese",name:"Panda Express",takeaway:"yes"}},"amenity/fast_food|Panera Bread":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Panera Bread","brand:wikidata":"Q7130852","brand:wikipedia":"en:Panera Bread",cuisine:"sandwich",name:"Panera Bread",short_name:"Panera",takeaway:"yes"}},"amenity/fast_food|Panos":{countryCodes:["ae","be","cz","nl","pl","sk","tw"],tags:{amenity:"fast_food",brand:"Panos","brand:wikidata":"Q3384496","brand:wikipedia":"nl:Panos",cuisine:"sandwich",name:"Panos",takeaway:"yes"}},"amenity/fast_food|Pans & Company":{countryCodes:["es","it","pt"],tags:{amenity:"fast_food",brand:"Pans & Company","brand:wikidata":"Q11697586","brand:wikipedia":"es:Pans & Company",cuisine:"sandwich",name:"Pans & Company",takeaway:"yes"}},"amenity/fast_food|Papa John's":{matchNames:["papa john","papa john pizza","papa johns pizza"],tags:{amenity:"fast_food",brand:"Papa John's","brand:wikidata":"Q2759586","brand:wikipedia":"en:Papa John's Pizza",cuisine:"pizza",name:"Papa John's",takeaway:"yes"}},"amenity/fast_food|Papa Murphy's":{countryCodes:["ca","us"],matchNames:["papa murphy","papa murphy pizza","papa murphys pizza"],tags:{amenity:"fast_food",brand:"Papa Murphy's","brand:wikidata":"Q7132349","brand:wikipedia":"en:Papa Murphy's",cuisine:"pizza",name:"Papa Murphy's",official_name:"Papa Murphy's Take 'N' Bake Pizza",takeaway:"only"}},"amenity/fast_food|Penn Station":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Penn Station","brand:wikidata":"Q7163311","brand:wikipedia":"en:Penn Station (restaurant)",cuisine:"sandwich",name:"Penn Station",takeaway:"yes"}},"amenity/fast_food|Philly Pretzel Factory":{countryCodes:["us"],matchNames:["philadelphia pretzel factory","philadelphia soft pretzel factory","philly soft pretzel factory"],tags:{amenity:"fast_food",brand:"Philly Pretzel Factory","brand:wikidata":"Q60097339",cuisine:"pretzel",name:"Philly Pretzel Factory",takeaway:"yes"}},"amenity/fast_food|Pinulito":{countryCodes:["gt"],tags:{amenity:"fast_food",brand:"Pinulito","brand:wikidata":"Q62273613",cuisine:"chicken",name:"Pinulito",takeaway:"yes"}},"amenity/fast_food|Pita Pit":{tags:{amenity:"fast_food",brand:"Pita Pit","brand:wikidata":"Q7757289","brand:wikipedia":"en:Pita Pit",cuisine:"pita",name:"Pita Pit",takeaway:"yes"}},"amenity/fast_food|Pizza 73":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Pizza 73","brand:wikidata":"Q7199950","brand:wikipedia":"en:Pizza 73",cuisine:"pizza",name:"Pizza 73",takeaway:"yes"}},"amenity/fast_food|Pizza Capers":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Pizza Capers",cuisine:"pizza",name:"Pizza Capers",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Delivery":{tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Delivery",takeaway:"yes"}},"amenity/fast_food|Pizza Hut Express":{nomatch:["amenity/restaurant|Pizza Hut"],tags:{amenity:"fast_food",brand:"Pizza Hut","brand:wikidata":"Q191615","brand:wikipedia":"en:Pizza Hut",cuisine:"pizza",name:"Pizza Hut Express",takeaway:"yes"}},"amenity/fast_food|Pizza Inn":{tags:{amenity:"fast_food",brand:"Pizza Inn","brand:wikidata":"Q4118850","brand:wikipedia":"en:Pizza Inn",cuisine:"pizza",name:"Pizza Inn",takeaway:"yes"}},"amenity/fast_food|Pizza King":{tags:{amenity:"fast_food",brand:"Pizza King",cuisine:"pizza",name:"Pizza King",takeaway:"yes"}},"amenity/fast_food|Pizza 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|Portillo's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Portillo's","brand:wikidata":"Q3399307","brand:wikipedia":"en:Portillo's Restaurants",cuisine:"hot_dog;burger",name:"Portillo's",takeaway:"yes"}},"amenity/fast_food|Potbelly":{countryCodes:["us"],matchNames:["potbelly sandwich shop"],tags:{amenity:"fast_food",brand:"Potbelly","brand:wikidata":"Q7234777","brand:wikipedia":"en:Potbelly Sandwich Shop",cuisine:"sandwich",name:"Potbelly",official_name:"Potbelly Sandwich Works",takeaway:"yes"}},"amenity/fast_food|Pret A Manger":{countryCodes:["ae","cn","de","dk","fr","gb","hk","nl","sg","us"],tags:{amenity:"fast_food",brand:"Pret A Manger","brand:wikidata":"Q2109109","brand:wikipedia":"en:Pret a Manger",cuisine:"sandwich",name:"Pret A Manger",short_name:"Pret",takeaway:"yes"}},"amenity/fast_food|Pretzelmaker":{countryCodes:["us"],matchNames:["pretzel time"],tags:{amenity:"fast_food",brand:"Pretzelmaker","brand:wikidata":"Q7242321","brand:wikipedia":"en:Pretzelmaker",cuisine:"pretzel",name:"Pretzelmaker",takeaway:"yes"}},"amenity/fast_food|Qdoba":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Qdoba","brand:wikidata":"Q1363885","brand:wikipedia":"en:Qdoba",cuisine:"mexican",name:"Qdoba",official_name:"Qdoba Mexican Grill",takeaway:"yes"}},"amenity/fast_food|Quesada":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Quesada","brand:wikidata":"Q66070360",cuisine:"mexican",name:"Quesada",official_name:"Quesada Burritos & Tacos",takeaway:"yes"}},"amenity/fast_food|Quick":{countryCodes:["be","fr","lu"],tags:{amenity:"fast_food",brand:"Quick","brand:wikidata":"Q286494","brand:wikipedia":"en:Quick (restaurant)",cuisine:"burger",name:"Quick",takeaway:"yes"}},"amenity/fast_food|Quiznos":{matchNames:["quiznos sub","quiznos subs"],tags:{amenity:"fast_food",brand:"Quiznos","brand:wikidata":"Q1936229","brand:wikipedia":"en:Quiznos",cuisine:"sandwich",name:"Quiznos",takeaway:"yes"}},"amenity/fast_food|Raising Cane's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Raising Cane's","brand:wikidata":"Q7285144","brand:wikipedia":"en:Raising Cane's Chicken Fingers",cuisine:"chicken",name:"Raising Cane's",official_name:"Raising Cane's Chicken Fingers",takeaway:"yes"}},"amenity/fast_food|Rally's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Rally's","brand:wikidata":"Q63919323",cuisine:"burger",name:"Rally's",takeaway:"yes"}},"amenity/fast_food|Red Rooster":{countryCodes:["au"],tags:{amenity:"fast_food",brand:"Red Rooster","brand:wikidata":"Q376466","brand:wikipedia":"en:Red Rooster",cuisine:"chicken",name:"Red Rooster",takeaway:"yes"}},"amenity/fast_food|Robin's Donuts":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Robin's Donuts","brand:wikidata":"Q7352199","brand:wikipedia":"en:Robin's Donuts",cuisine:"donut",name:"Robin's Donuts",short_name:"Robin's",takeaway:"yes"}},"amenity/fast_food|Roy Rogers":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Roy Rogers","brand:wikidata":"Q7373311","brand:wikipedia":"en:Roy Rogers Restaurants",cuisine:"burger;sandwich;chicken",name:"Roy Rogers",takeaway:"yes"}},"amenity/fast_food|Rubio's":{countryCodes:["us"],matchNames:["rubios fresh mexican grill"],tags:{amenity:"fast_food",brand:"Rubio's","brand:wikidata":"Q7376154","brand:wikipedia":"en:Rubio's Coastal Grill",cuisine:"mexican",name:"Rubio's",official_name:"Rubio's Coastal Grill",takeaway:"yes"}},"amenity/fast_food|SUSU & Sons":{countryCodes:["il"],matchNames:["סוסו ובניו"],tags:{amenity:"fast_food",brand:"SUSU & Sons","brand:en":"SUSU & Sons","brand:he":"סוסו אנד סאנס","brand:wikidata":"Q64760081",cuisine:"burger",name:"SUSU & Sons","name:en":"SUSU & Sons","name:he":"סוסו אנד סאנס",takeaway:"yes"}},"amenity/fast_food|Sarku Japan":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Sarku Japan","brand:wikidata":"Q7424243",cuisine:"japanese",name:"Sarku Japan",takeaway:"yes"}},"amenity/fast_food|Sarpino's Pizzeria":{tags:{amenity:"fast_food",brand:"Sarpino's Pizzeria","brand:wikidata":"Q28229116","brand:wikipedia":"en:Sarpino's Pizzeria",cuisine:"pizza",name:"Sarpino's Pizzeria",takeaway:"yes"}},"amenity/fast_food|Sbarro":{matchNames:["Sbarro Pizzeria"],tags:{amenity:"fast_food",brand:"Sbarro","brand:wikidata":"Q2589409","brand:wikipedia":"en:Sbarro",cuisine:"pizza",name:"Sbarro",takeaway:"yes"}},"amenity/fast_food|Schlotzsky's":{countryCodes:["us"],matchNames:["schlotzskys deli"],tags:{amenity:"fast_food",brand:"Schlotzsky's","brand:wikidata":"Q2244796","brand:wikipedia":"en:Schlotzsky's",cuisine:"sandwich",name:"Schlotzsky's",takeaway:"yes"}},"amenity/fast_food|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 'n Shake":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak 'n Shake","brand:wikidata":"Q7605233","brand:wikipedia":"en:Steak 'n Shake",cuisine:"burger",name:"Steak 'n Shake",takeaway:"yes"}},"amenity/fast_food|Steak Escape":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Steak Escape","brand:wikidata":"Q7605235","brand:wikipedia":"en:Steak Escape",cuisine:"sandwich",name:"Steak Escape",takeaway:"yes"}},"amenity/fast_food|Steers":{tags:{amenity:"fast_food",brand:"Steers","brand:wikidata":"Q56599145","brand:wikipedia":"en:Steers",cuisine:"burger",name:"Steers",takeaway:"yes"}},"amenity/fast_food|Subway":{matchNames:["subway sandwiches"],tags:{amenity:"fast_food",brand:"Subway","brand:wikidata":"Q244457","brand:wikipedia":"en:Subway (restaurant)",cuisine:"sandwich",name:"Subway",takeaway:"yes"}},"amenity/fast_food|Supermac's":{countryCodes:["gb","ie"],tags:{amenity:"fast_food",brand:"Supermac's","brand:wikidata":"Q7643750","brand:wikipedia":"en:Supermac's",cuisine:"burger",name:"Supermac's",takeaway:"yes"}},"amenity/fast_food|Sushi Shop":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Sushi Shop","brand:wikidata":"Q64840990",cuisine:"sushi",name:"Sushi Shop",takeaway:"yes"}},"amenity/fast_food|Taco Bell":{tags:{amenity:"fast_food",brand:"Taco Bell","brand:wikidata":"Q752941","brand:wikipedia":"en:Taco Bell",cuisine:"tex-mex",name:"Taco Bell",takeaway:"yes"}},"amenity/fast_food|Taco Bueno":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Bueno","brand:wikidata":"Q7673958","brand:wikipedia":"en:Taco Bueno",cuisine:"mexican",name:"Taco Bueno",takeaway:"yes"}},"amenity/fast_food|Taco Cabana":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco Cabana","brand:wikidata":"Q12070488","brand:wikipedia":"en:Taco Cabana",cuisine:"mexican",name:"Taco Cabana",takeaway:"yes"}},"amenity/fast_food|Taco Del Mar":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Del Mar","brand:wikidata":"Q7673972","brand:wikipedia":"en:Taco del Mar",cuisine:"mexican",name:"Taco Del Mar",takeaway:"yes"}},"amenity/fast_food|Taco John's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taco John's","brand:wikidata":"Q7673962","brand:wikipedia":"en:Taco John's",cuisine:"mexican",name:"Taco John's",takeaway:"yes"}},"amenity/fast_food|Taco Time":{countryCodes:["ca","us"],tags:{amenity:"fast_food",brand:"Taco Time","brand:wikidata":"Q7673969","brand:wikipedia":"en:Taco Time",cuisine:"mexican",name:"Taco Time",takeaway:"yes"}},"amenity/fast_food|Ted's Hot Dogs":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Ted's Hot Dogs","brand:wikidata":"Q7692930","brand:wikipedia":"en:Ted's Hot Dogs",cuisine:"hot_dog",name:"Ted's Hot Dogs",takeaway:"yes"}},"amenity/fast_food|Telepizza":{tags:{amenity:"fast_food",brand:"Telepizza","brand:wikidata":"Q2699863","brand:wikipedia":"en:Telepizza",cuisine:"pizza",name:"Telepizza",takeaway:"yes"}},"amenity/fast_food|Teriyaki Experience":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Teriyaki Experience","brand:wikidata":"Q7702453",cuisine:"japanese",name:"Teriyaki Experience",takeaway:"yes"}},"amenity/fast_food|Texas Burger":{tags:{amenity:"fast_food",brand:"Texas Burger",cuisine:"burger",name:"Texas Burger",takeaway:"yes"}},"amenity/fast_food|Texas Chicken":{tags:{amenity:"fast_food",brand:"Texas Chicken",cuisine:"chicken",name:"Texas Chicken",takeaway:"yes"}},"amenity/fast_food|Thai Express~(Singapore)":{countryCodes:["sg"],nomatch:["amenity/fast_food|Thaï Express~(North America)"],tags:{amenity:"fast_food",brand:"Thai Express","brand:wikidata":"Q7709119","brand:wikipedia":"en:Thai Express",cuisine:"thai",name:"Thai Express",takeaway:"yes"}},"amenity/fast_food|Thaï Express~(North America)":{countryCodes:["ca","us"],matchNames:["thai express"],nomatch:["amenity/fast_food|Thai Express~(Singapore)"],tags:{amenity:"fast_food",brand:"Thaï Express","brand:wikidata":"Q7711610","brand:wikipedia":"en:Thaï Express",cuisine:"thai",name:"Thaï Express",takeaway:"yes"}},"amenity/fast_food|The Habit Burger Grill":{countryCodes:["us"],matchNames:["the habit burger"],tags:{alt_name:"Habit Burger Grill",amenity:"fast_food",brand:"The Habit Burger Grill","brand:wikidata":"Q18158741","brand:wikipedia":"en:The Habit Burger Grill",cuisine:"burger",name:"The Habit Burger Grill",short_name:"Habit Burger",takeaway:"yes"}},"amenity/fast_food|The Pizza Company":{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|Wayback Burgers":{tags:{amenity:"fast_food",brand:"Wayback Burgers","brand:wikidata":"Q16997570","brand:wikipedia":"en:Wayback Burgers",cuisine:"burger",name:"Wayback Burgers",takeaway:"yes"}},"amenity/fast_food|Wendy's":{tags:{amenity:"fast_food",brand:"Wendy's","brand:wikidata":"Q550258","brand:wikipedia":"en:Wendy's",cuisine:"burger",name:"Wendy's",takeaway:"yes"}},"amenity/fast_food|Whataburger":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Whataburger","brand:wikidata":"Q376627","brand:wikipedia":"en:Whataburger",cuisine:"burger",name:"Whataburger",takeaway:"yes"}},"amenity/fast_food|Which Wich?":{countryCodes:["ae","gb","gt","mx","om","qa","sa","us"],tags:{amenity:"fast_food",brand:"Which Wich?","brand:wikidata":"Q7993556","brand:wikipedia":"en:Which Wich?",cuisine:"sandwich",name:"Which Wich?",takeaway:"yes"}},"amenity/fast_food|White Castle":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"White Castle","brand:wikidata":"Q1244034","brand:wikipedia":"en:White Castle (restaurant)",cuisine:"burger",name:"White Castle",takeaway:"yes"}},"amenity/fast_food|Wienerschnitzel":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Wienerschnitzel","brand:wikidata":"Q324679","brand:wikipedia":"en:Wienerschnitzel",cuisine:"hot_dog",name:"Wienerschnitzel",takeaway:"yes"}},"amenity/fast_food|Wimpy":{tags:{amenity:"fast_food",brand:"Wimpy","brand:wikidata":"Q2811992","brand:wikipedia":"en:Wimpy (restaurant)",cuisine:"burger",name:"Wimpy",takeaway:"yes"}},"amenity/fast_food|WingStreet":{countryCodes:["au","ca","cy","us"],tags:{amenity:"fast_food",brand:"WingStreet","brand:wikidata":"Q946630","brand:wikipedia":"en:WingStreet",cuisine:"wings",name:"WingStreet",takeaway:"yes"}},"amenity/fast_food|Wingstop":{countryCodes:["mx","us"],tags:{amenity:"fast_food",brand:"Wingstop","brand:wikidata":"Q8025339","brand:wikipedia":"en:Wingstop",cuisine:"wings",name:"Wingstop",takeaway:"yes"}},"amenity/fast_food|Xi'an Famous Foods":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Xi'an Famous Foods","brand:wikidata":"Q8044020","brand:wikipedia":"en:Xi'an Famous Foods",cuisine:"chinese",name:"Xi'an Famous Foods",takeaway:"yes"}},"amenity/fast_food|Yellow Cab Pizza":{tags:{amenity:"fast_food",brand:"Yellow Cab Pizza","brand:wikidata":"Q8051689","brand:wikipedia":"en:Yellow Cab Pizza",cuisine:"pizza",name:"Yellow Cab Pizza",takeaway:"yes"}},"amenity/fast_food|Zaxby's":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zaxby's","brand:wikidata":"Q8067525","brand:wikipedia":"en:Zaxby's",cuisine:"chicken",name:"Zaxby's",official_name:"Zaxby's Chicken Fingers & Buffalo Wings",takeaway:"yes"}},"amenity/fast_food|Zoës Kitchen":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Zoës Kitchen","brand:wikidata":"Q8074747","brand:wikipedia":"en:Zoës Kitchen",cuisine:"mediterranean",name:"Zoës Kitchen",takeaway:"yes"}},"amenity/fast_food|immergrün":{countryCodes:["de"],matchNames:["immergün"],tags:{amenity:"fast_food",brand:"immergrün","brand:wikidata":"Q62589254",cuisine:"sandwich;salad;juice",name:"immergün",takeaway:"yes"}},"amenity/fast_food|Γρηγόρης":{countryCodes:["gr"],tags:{amenity:"fast_food",brand:"Γρηγόρης","brand:el":"Γρηγόρης","brand:en":"Gregorys","brand:wikidata":"Q62273834",cuisine:"sandwich",name:"Γρηγόρης","name:el":"Γρηγόρης","name:en":"Gregorys",takeaway:"yes"}},"amenity/fast_food|Бургер Кинг":{countryCodes:["by","kz","ru"],tags:{amenity:"fast_food",brand:"Бургер Кинг","brand:en":"Burger King","brand:ru":"Бургер Кинг","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"Бургер Кинг","name:en":"Burger King","name:ru":"Бургер Кинг",takeaway:"yes"}},"amenity/fast_food|Домино'c":{matchNames:["доминоc пицца"],tags:{amenity:"fast_food",brand:"Домино'c","brand:en":"Domino's","brand:ru":"Домино'c","brand:wikidata":"Q839466","brand:wikipedia":"ru:Domino’s Pizza",cuisine:"pizza",name:"Домино'c","name:en":"Domino's","name:ru":"Домино'c",takeaway:"yes"}},"amenity/fast_food|Крошка Картошка":{countryCodes:["ru"],tags:{amenity:"fast_food",brand:"Крошка Картошка","brand:en":"Kroshka Kartoshka","brand:ru":"Крошка Картошка","brand:wikidata":"Q4241838","brand:wikipedia":"ru:Крошка Картошка",cuisine:"potato",name:"Крошка Картошка","name:en":"Kroshka Kartoshka","name:ru":"Крошка Картошка",takeaway:"yes"}},"amenity/fast_food|Макдоналдс":{tags:{amenity:"fast_food",brand:"Макдоналдс","brand:en":"McDonald's","brand:ru":"Макдоналдс","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",cuisine:"burger",name:"Макдоналдс","name:en":"McDonald's","name:ru":"Макдоналдс",takeaway:"yes"}},"amenity/fast_food|Папа Джонс":{countryCodes:["by","ru"],tags:{amenity:"fast_food",brand:"Папа Джонс","brand:en":"Papa John's","brand:ru":"Папа Джонс","brand:wikidata":"Q2759586","brand:wikipedia":"ru:Papa John’s",cuisine:"pizza",name:"Папа Джонс","name:en":"Papa John's","name:ru":"Папа Джонс",takeaway:"yes"}},"amenity/fast_food|Робин Сдобин":{countryCodes:["ru"],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"],matchNames:["ドミノ・ピザ"],tags:{amenity:"fast_food",brand:"ドミノ","brand:en":"Domino's","brand:ja":"ドミノ","brand:wikidata":"Q839466","brand:wikipedia":"ja:ドミノ・ピザ",cuisine:"pizza",name:"ドミノ","name:en":"Domino's","name:ja":"ドミノ",takeaway:"yes"}},"amenity/fast_food|バーガーキング":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"バーガーキング","brand:en":"Burger King","brand:ja":"バーガーキング","brand:wikidata":"Q177054","brand:wikipedia":"en:Burger King",cuisine:"burger",name:"バーガーキング","name:en":"Burger King","name:ja":"バーガーキング",takeaway:"yes"}},"amenity/fast_food|ピザハット":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザハット","brand:en":"Pizza Hut","brand:ja":"ピザハット","brand:wikidata":"Q191615","brand:wikipedia":"ja:ピザハット",cuisine:"pizza",name:"ピザハット","name:en":"Pizza Hut","name:ja":"ピザハット",takeaway:"yes"}},"amenity/fast_food|ピザ・カリフォルニア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザ・カリフォルニア","brand:en":"Pizza California","brand:ja":"ピザ・カリフォルニア","brand:wikidata":"Q75324","brand:wikipedia":"ja:ピザ・カリフォルニア",cuisine:"pizza",name:"ピザ・カリフォルニア","name:en":"Pizza California","name:ja":"ピザ・カリフォルニア",takeaway:"yes"}},"amenity/fast_food|ピザーラ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ピザーラ","brand:en":"Pizza-La","brand:ja":"ピザーラ","brand:wikidata":"Q7199948","brand:wikipedia":"ja:ピザーラ",cuisine:"pizza",name:"ピザーラ","name:en":"Pizza-La","name:ja":"ピザーラ",takeaway:"yes"}},"amenity/fast_food|ファーストキッチン":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"pizza",name:"ファーストキッチン","name:en":"First Kitchen","name:ja":"ファーストキッチン",takeaway:"yes"}},"amenity/fast_food|フレッシュネスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"フレッシュネスバーガー","brand:en":"Freshness Burger","brand:ja":"フレッシュネスバーガー","brand:wikidata":"Q5503087","brand:wikipedia":"ja:フレッシュネスバーガー",cuisine:"burger",name:"フレッシュネスバーガー","name:en":"Freshness Burger","name:ja":"フレッシュネスバーガー",takeaway:"yes"}},"amenity/fast_food|マクドナルド":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"マクドナルド","brand:en":"McDonald's","brand:ja":"マクドナルド","brand:wikidata":"Q38076","brand:wikipedia":"ja:マクドナルド",cuisine:"burger",name:"マクドナルド","name:en":"McDonald's","name:ja":"マクドナルド",takeaway:"yes"}},"amenity/fast_food|ミスタードーナツ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ミスタードーナツ","brand:en":"Mister Donut","brand:ja":"ミスタードーナツ","brand:wikidata":"Q1065819","brand:wikipedia":"en:Mister Donut",cuisine:"donut",name:"ミスタードーナツ","name:en":"Mister Donut","name:ja":"ミスタードーナツ",takeaway:"yes"}},"amenity/fast_food|モスバーガー":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"モスバーガー","brand:en":"MOS Burger","brand:ja":"モスバーガー","brand:wikidata":"Q1204169","brand:wikipedia":"ja:モスバーガー",cuisine:"burger",name:"モスバーガー","name:en":"MOS Burger","name:ja":"モスバーガー",takeaway:"yes"}},"amenity/fast_food|ラーメン二郎":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ラーメン二郎","brand:en":"Ramen Jiro","brand:ja":"ラーメン二郎","brand:wikidata":"Q11347765","brand:wikipedia":"ja:ラーメン二郎",cuisine:"ramen",name:"ラーメン二郎","name:en":"Ramen Jiro","name:ja":"ラーメン二郎",takeaway:"yes"}},"amenity/fast_food|ロッテリア":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"ロッテリア","brand:en":"Lotteria","brand:ja":"ロッテリア","brand:wikidata":"Q249525","brand:wikipedia":"ja:ロッテリア",cuisine:"burger",name:"ロッテリア","name:en":"Lotteria","name:ja":"ロッテリア",takeaway:"yes"}},"amenity/fast_food|吉野家":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"吉野家","brand:en":"Yoshinoya","brand:ja":"吉野家","brand:wikidata":"Q776272","brand:wikipedia":"ja:吉野家",cuisine:"beef_bowl",name:"吉野家","name:en":"Yoshinoya","name:ja":"吉野家",takeaway:"yes"}},"amenity/fast_food|富士そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"富士そば","brand:en":"Fuji Soba","brand:ja":"富士そば","brand:wikidata":"Q11414722","brand:wikipedia":"ja:名代富士そば",cuisine:"soba",name:"富士そば","name:en":"Fuji Soba","name:ja":"富士そば",takeaway:"yes"}},"amenity/fast_food|幸楽苑":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"幸楽苑","brand:en":"Kourakuen","brand:ja":"幸楽苑","brand:wikidata":"Q11484003","brand:wikipedia":"ja:幸楽苑",cuisine:"ramen",name:"幸楽苑","name:en":"Kourakuen","name:ja":"幸楽苑",takeaway:"yes"}},"amenity/fast_food|摩斯漢堡":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"摩斯漢堡","brand:en":"MOS Burger","brand:wikidata":"Q1204169","brand:wikipedia":"zh:摩斯漢堡","brand:zh":"摩斯漢堡",cuisine:"burger",name:"摩斯漢堡","name:en":"MOS Burger","name:zh":"摩斯漢堡",takeaway:"yes"}},"amenity/fast_food|日高屋":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"日高屋","brand:en":"Hidakaya","brand:wikidata":"Q11326050","brand:wikipedia":"ja:ハイデイ日高",cuisine:"noodle",name:"日高屋","name:en":"Hidakaya",takeaway:"yes"}},"amenity/fast_food|松屋":{countryCodes:["cn","hk","jp","mo","sg","tw"],tags:{amenity:"fast_food",brand:"松屋","brand:en":"Matsuya","brand:ja":"松屋","brand:wikidata":"Q848773","brand:wikipedia":"ja:松屋フーズ",cuisine:"japanese",name:"松屋","name:en":"Matsuya","name:ja":"松屋",official_name:"松屋フーズ","official_name:en":"Matsuya Foods","official_name:ja":"松屋フーズ",takeaway:"yes"}},"amenity/fast_food|箱根そば":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"箱根そば","brand:en":"Hakone Soba","brand:ja":"箱根そば","brand:wikidata":"Q11603345","brand:wikipedia":"ja:箱根そば",cuisine:"soba",name:"箱根そば","name:en":"Hakone Soba","name:ja":"箱根そば",takeaway:"yes"}},"amenity/fast_food|築地銀だこ":{countryCodes:["jp"],tags:{amenity:"fast_food",brand:"築地銀だこ","brand:en":"Gindaco","brand:ja":"築地銀だこ","brand:wikidata":"Q11603490","brand:wikipedia":"ja:築地銀だこ",cuisine:"takoyaki",name:"築地銀だこ","name:en":"Gindaco","name:ja":"築地銀だこ",takeaway:"yes"}},"amenity/fast_food|肯德基":{countryCodes:["cn","hk","mo","sg","tw"],tags:{amenity:"fast_food",brand:"肯德基","brand:en":"KFC","brand:wikidata":"Q524757","brand:wikipedia":"zh:肯德基",cuisine:"chicken",name:"肯德基","name:en":"KFC",takeaway:"yes"}},"amenity/fast_food|麥當勞":{countryCodes:["hk","mo","tw"],tags:{amenity:"fast_food",brand:"麥當勞","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麥當勞","brand:zh":"麥當勞","brand:zh-Hant":"麥當勞",cuisine:"burger",name:"麥當勞","name:en":"McDonald's","name:zh":"麥當勞","name:zh-Hant":"麥當勞",takeaway:"yes"}},"amenity/fast_food|麦当劳":{countryCodes:["cn","sg"],tags:{amenity:"fast_food",brand:"麦当劳","brand:en":"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"zh:麦当劳","brand:zh":"麦当劳","brand:zh-Hans":"麦当劳",cuisine:"burger",name:"麦当劳","name:en":"McDonald's","name:zh":"麦当劳","name:zh-Hans":"麦当劳",takeaway:"yes"}},"amenity/fast_food|롯데리아":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"롯데리아","brand:en":"Lotteria","brand:ko":"롯데리아","brand:wikidata":"Q249525","brand:wikipedia":"ko:롯데리아",cuisine:"burger",name:"롯데리아","name:en":"Lotteria","name:ko":"롯데리아",takeaway:"yes"}},"amenity/fast_food|맘스터치":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맘스터치","brand:ko":"맘스터치","brand:wikidata":"Q23044856","brand:wikipedia":"en:Mom's Touch",cuisine:"burger",name:"맘스터치","name:ko":"맘스터치",takeaway:"yes"}},"amenity/fast_food|맥도날드":{countryCodes:["kr"],tags:{amenity:"fast_food",brand:"맥도날드","brand:en":"McDonald's","brand:ko":"맥도날드","brand:wikidata":"Q38076","brand:wikipedia":"ko:맥도날드",cuisine:"burger",name:"맥도날드","name:en":"McDonald's","name:ko":"맥도날드",takeaway:"yes"}},"amenity/fuel|1-2-3":{countryCodes:["dk","pl"],tags:{amenity:"fuel",brand:"1-2-3","brand:wikidata":"Q4545742","brand:wikipedia":"en:1-2-3 (fuel station)",name:"1-2-3"}},"amenity/fuel|7-Eleven":{matchNames:["7-11","seven eleven"],nomatch:["shop/convenience|7-Eleven"],tags:{amenity:"fuel",brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven"}},"amenity/fuel|76":{nomatch:["shop/convenience|76"],tags:{amenity:"fuel",brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76"}},"amenity/fuel|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|Amic":{tags:{amenity:"fuel",brand:"Amic",name:"Amic"}},"amenity/fuel|Api":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Api","brand:wikidata":"Q466043","brand:wikipedia":"en:American Petroleum Institute",name:"Api"}},"amenity/fuel|Aral":{countryCodes:["de","lu"],matchNames:["aral tankstelle"],nomatch:["shop/convenience|Aral"],tags:{amenity:"fuel",brand:"Aral","brand:wikidata":"Q565734","brand:wikipedia":"en:Aral AG",name:"Aral"}},"amenity/fuel|Arco":{countryCodes:["mx","us"],tags:{amenity:"fuel",brand:"Arco","brand:wikidata":"Q304769","brand:wikipedia":"en:ARCO",name:"Arco"}},"amenity/fuel|Asda":{countryCodes:["gb"],nomatch:["shop/supermarket|ASDA","shop/supermarket|Asda"],tags:{amenity:"fuel",brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda"}},"amenity/fuel|Atem":{countryCodes:["br"],matchNames:["posto atem"],tags:{amenity:"fuel",brand:"Atem","brand:wikidata":"Q62332255",name:"Atem"}},"amenity/fuel|Auchan":{nomatch:["shop/supermarket|Auchan"],tags:{amenity:"fuel",brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan"}},"amenity/fuel|Avanti":{countryCodes:["at"],tags:{amenity:"fuel",brand:"Avanti","brand:wikidata":"Q168238","brand:wikipedia":"en:OMV",name:"Avanti"}},"amenity/fuel|Avia":{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|Baltic Petroleum":{tags:{amenity:"fuel",brand:"Baltic Petroleum",name:"Baltic Petroleum"}},"amenity/fuel|Bangchak":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Bangchak","brand:wikidata":"Q6579719","brand:wikipedia":"zh:曼差石油股份",name:"Bangchak"}},"amenity/fuel|Beyfin":{tags:{amenity:"fuel",brand:"Beyfin",name:"Beyfin"}},"amenity/fuel|Bharat Petroleum":{countryCodes:["in"],tags:{amenity:"fuel",brand:"Bharat Petroleum","brand:wikidata":"Q854826","brand:wikipedia":"en:Bharat Petroleum",name:"Bharat Petroleum"}},"amenity/fuel|Biomax":{countryCodes:["co"],tags:{amenity:"fuel",brand:"Biomax","brand:wikidata":"Q62274413",name:"Biomax"}},"amenity/fuel|Bliska":{countryCodes:["pl"],tags:{amenity:"fuel",brand:"Bliska","brand:wikidata":"Q4016378","brand:wikipedia":"pl:Bliska",name:"Bliska"}},"amenity/fuel|CAMPSA":{countryCodes:["es"],tags:{amenity:"fuel",brand:"CAMPSA","brand:wikidata":"Q1031623","brand:wikipedia":"en:Campsa",name:"CAMPSA",official_name:"Compañía Arrendataria del Monopolio del Petróleo, S.A."}},"amenity/fuel|Caltex":{tags:{amenity:"fuel",brand:"Caltex","brand:wikidata":"Q277470","brand:wikipedia":"en:Caltex",name:"Caltex"}},"amenity/fuel|Canadian Tire Gas+":{matchNames:["canadian tire","canadian tire gas bar"],nomatch:["shop/department_store|Canadian Tire"],tags:{amenity:"fuel",brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire"}},"amenity/fuel|Carrefour":{matchNames:["carrefour market"],nomatch:["shop/convenience|Carrefour Express","shop/supermarket|Carrefour"],tags:{brand:"Carrefour","brand:wikidata":"Q217599","brand:wikipedia":"fr:Carrefour (enseigne)",name:"Carrefour"}},"amenity/fuel|Casey's General Store":{matchNames:["caseys"],nomatch:["shop/convenience|Casey's General Store"],tags:{amenity:"fuel",brand:"Casey's General Store","brand:wikidata":"Q2940968","brand:wikipedia":"en:Casey's General Stores",name:"Casey's General Store"}},"amenity/fuel|Casino":{tags:{amenity:"fuel",brand:"Casino",name:"Casino"}},"amenity/fuel|Cenex":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Cenex","brand:wikidata":"Q5011381","brand:wikipedia":"en:CHS Inc.",name:"Cenex"}},"amenity/fuel|Cepsa":{countryCodes:["es","pt"],tags:{amenity:"fuel",brand:"Cepsa","brand:wikidata":"Q608819","brand:wikipedia":"en:Cepsa",name:"Cepsa",official_name:"Compañía Española de Petróleos, S.A.U."}},"amenity/fuel|Ceypetco":{countryCodes:["lk"],matchNames:["lanka filling station"],tags:{amenity:"fuel",brand:"Ceypetco","brand:wikidata":"Q5065795","brand:wikipedia":"en:Ceylon Petroleum Corporation",name:"Ceypetco"}},"amenity/fuel|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|Gas Plus":{nomatch:["shop/mobile_phone|Plus","shop/supermarket|PLUS"],tags:{amenity:"fuel",brand:"Gas Plus",name:"Gas Plus"}},"amenity/fuel|Gazel":{countryCodes:["co","mx","pe"],tags:{amenity:"fuel",brand:"Gazel","brand:wikidata":"Q62529885",name:"Gazel"}},"amenity/fuel|Gazprom":{tags:{amenity:"fuel",brand:"Gazprom","brand:wikidata":"Q102673","brand:wikipedia":"en:Gazprom",name:"Gazprom"}},"amenity/fuel|GetGo":{countryCodes:["us"],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|Kadoil":{tags:{amenity:"fuel",brand:"Kadoil",name:"Kadoil"}},"amenity/fuel|Kangaroo Express":{countryCodes:["us"],nomatch:["shop/convenience|Kangaroo Express"],tags:{amenity:"fuel",brand:"Kangaroo Express","brand:wikidata":"Q61747408",name:"Kangaroo Express",short_name:"Kangaroo"}},"amenity/fuel|Kastrati":{tags:{amenity:"fuel",brand:"Kastrati",name:"Kastrati"}},"amenity/fuel|Kobil":{countryCodes:["bi","et","ke","rw","tz","ug","zm"],tags:{amenity:"fuel",brand:"Kobil","brand:wikidata":"Q22906119","brand:wikipedia":"en:KenolKobil",name:"Kobil"}},"amenity/fuel|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|Meijer":{countryCodes:["us"],nomatch:["shop/supermarket|Meijer"],tags:{amenity:"fuel",brand:"Meijer","brand:wikidata":"Q1917753","brand:wikipedia":"en:Meijer",name:"Meijer"}},"amenity/fuel|Metano":{countryCodes:["it"],tags:{amenity:"fuel",brand:"Metano","brand:wikidata":"Q62294765",name:"Metano"}},"amenity/fuel|Migrol":{countryCodes:["ch"],tags:{amenity:"fuel",brand:"Migrol","brand:wikidata":"Q1747771","brand:wikipedia":"de:Migrol",name:"Migrol"}},"amenity/fuel|Mobil":{matchNames:["mobile"],nomatch:["shop/convenience|Mobil Mart"],tags:{amenity:"fuel",brand:"Mobil","brand:wikidata":"Q3088656","brand:wikipedia":"en:Mobil",name:"Mobil"}},"amenity/fuel|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|Octa+":{tags:{amenity:"fuel",brand:"Octa+",name:"Octa+"}},"amenity/fuel|Oilibya":{matchNames:["oilibia","oilibiya","oillibia","oilliby","oillibya","oillybia","oilybia","olibya","olybia"],tags:{amenity:"fuel",brand:"Oilibya","brand:wikidata":"Q7081491","brand:wikipedia":"en:Oilibya",name:"Oilibya","name:ar":"أويليبيا"}},"amenity/fuel|Olerex":{countryCodes:["ee"],tags:{amenity:"fuel",brand:"Olerex","brand:wikidata":"Q16931205","brand:wikipedia":"et:AS Olerex",name:"Olerex"}},"amenity/fuel|Opet":{countryCodes:["tr"],tags:{amenity:"fuel",brand:"Opet","brand:wikidata":"Q7072824","brand:wikipedia":"en:Opet",name:"Opet"}},"amenity/fuel|Orlen":{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":{matchNames:["sams club fuel center","sams club gas"],nomatch:["shop/wholesale|Sam's Club"],tags:{amenity:"fuel",brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club"}},"amenity/fuel|Sasol":{countryCodes:["za"],tags:{amenity:"fuel",brand:"Sasol","brand:wikidata":"Q905998","brand:wikipedia":"en:Sasol",name:"Sasol"}},"amenity/fuel|Sea Oil":{countryCodes:["ph"],tags:{amenity:"fuel",brand:"Sea Oil","brand:wikidata":"Q7389549","brand:wikipedia":"en:Seaoil Philippines",name:"Sea Oil"}},"amenity/fuel|Sheetz":{nomatch:["shop/convenience|Sheetz"],tags:{amenity:"fuel",brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz"}},"amenity/fuel|Shell":{matchNames:["posto shell","shell gas station","shell petrol station","shell station","station shell"],nomatch:["amenity/fuel|Shell Express","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell"}},"amenity/fuel|Shell Express":{nomatch:["amenity/fuel|Shell","shop/convenience|Shell Select"],tags:{amenity:"fuel",brand:"Shell Express","brand:wikidata":"Q2289188","brand:wikipedia":"nl:Shell Express",name:"Shell Express"}},"amenity/fuel|Sinclair":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Sinclair","brand:wikidata":"Q1290900","brand:wikipedia":"en:Sinclair Oil Corporation",name:"Sinclair"}},"amenity/fuel|Slovnaft":{countryCodes:["cz","pl","sk"],tags:{amenity:"fuel",brand:"Slovnaft","brand:wikidata":"Q1587563","brand:wikipedia":"en:Slovnaft",name:"Slovnaft"}},"amenity/fuel|Socar":{tags:{amenity:"fuel",brand:"Socar","brand:wikidata":"Q1622293","brand:wikipedia":"en:SOCAR",name:"Socar"}},"amenity/fuel|Sokimex":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Sokimex","brand:wikidata":"Q1149575","brand:wikipedia":"en:Sokimex",name:"Sokimex"}},"amenity/fuel|Sonic":{countryCodes:["ca"],nomatch:["amenity/fast_food|Sonic"],tags:{amenity:"fuel",brand:"Sonic",name:"Sonic"}},"amenity/fuel|Speedway":{nomatch:["shop/convenience|Speedway"],tags:{amenity:"fuel",brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway"}},"amenity/fuel|Sprint":{countryCodes:["de"],nomatch:["shop/mobile_phone|Sprint"],tags:{amenity:"fuel",brand:"Sprint","brand:wikidata":"Q57588452",name:"Sprint"}},"amenity/fuel|St1":{countryCodes:["fi","se"],tags:{amenity:"fuel",brand:"St1","brand:wikidata":"Q7592214","brand:wikipedia":"en:St1",name:"St1"}},"amenity/fuel|Star":{countryCodes:["de"],tags:{amenity:"fuel",brand:"Star","brand:wikidata":"Q2031095","brand:wikipedia":"de:Orlen Deutschland",name:"Star"}},"amenity/fuel|Star Oil":{tags:{amenity:"fuel",brand:"Star Oil",name:"Star Oil"}},"amenity/fuel|Station Service E. Leclerc":{matchNames:["e. leclerc"],tags:{amenity:"fuel",brand:"E.Leclerc","brand:wikidata":"Q1273376","brand:wikipedia":"fr:E.Leclerc",name:"Station Service E. Leclerc"}},"amenity/fuel|Statoil":{countryCodes:["dk","ee","ie","pl","ru","se"],tags:{amenity:"fuel",brand:"Statoil","brand:wikidata":"Q1776022","brand:wikipedia":"en:Equinor",name:"Statoil"}},"amenity/fuel|Stewart's":{countryCodes:["us"],nomatch:["shop/convenience|Stewart's"],tags:{amenity:"fuel",brand:"Stewart's","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's"}},"amenity/fuel|Sunoco":{nomatch:["shop/convenience|Sunoco"],tags:{amenity:"fuel",brand:"Sunoco","brand:wikidata":"Q1423218","brand:wikipedia":"en:Sunoco",name:"Sunoco"}},"amenity/fuel|Super U":{countryCodes:["fr"],nomatch:["shop/convenience|Utile","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{amenity:"fuel",brand:"Super U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Super U"}},"amenity/fuel|Susco":{countryCodes:["th"],tags:{amenity:"fuel",brand:"Susco",name:"Susco"}},"amenity/fuel|TA":{countryCodes:["us"],tags:{amenity:"fuel",brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA"}},"amenity/fuel|Tamoil":{countryCodes:["ch","de","es","fr","it","nl"],tags:{amenity:"fuel",brand:"Tamoil","brand:wikidata":"Q706793","brand:wikipedia":"en:Tamoil",name:"Tamoil"}},"amenity/fuel|Tango":{countryCodes:["nl"],tags:{amenity:"fuel",brand:"Tango","brand:wikidata":"Q2423920","brand:wikipedia":"nl:Tango CV",name:"Tango"}},"amenity/fuel|Tanka":{countryCodes:["se"],tags:{amenity:"fuel",brand:"Tanka","brand:wikidata":"Q10690640","brand:wikipedia":"sv:Tanka (bensinstationskedja)",name:"Tanka"}},"amenity/fuel|Teboil":{countryCodes:["fi"],tags:{amenity:"fuel",brand:"Teboil","brand:wikidata":"Q7692079","brand:wikipedia":"en:Teboil",name:"Teboil"}},"amenity/fuel|Tela":{countryCodes:["kh"],tags:{amenity:"fuel",brand:"Tela","brand:wikidata":"Q62534875",name:"Tela"}},"amenity/fuel|Tempo":{countryCodes:["ca"],tags:{amenity:"fuel",brand:"Tempo","brand:wikidata":"Q62535175",name:"Tempo"}},"amenity/fuel|Terpel":{tags:{amenity:"fuel",brand:"Terpel","brand:wikidata":"Q7703003","brand:wikipedia":"en:Terpel",name:"Terpel"}},"amenity/fuel|Terrible's":{countryCodes:["us"],tags:{amenity:"fuel",brand:"Terrible's","brand:wikidata":"Q7703648","brand:wikipedia":"en:Terrible Herbst",name:"Terrible's"}},"amenity/fuel|Tesco":{nomatch:["shop/convenience|Tesco"],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 昆仑好":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好"],nomatch:["shop/convenience|uSmile 昆仑好"],tags:{amenity:"fuel",brand:"uSmile 昆仑好","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"uSmile 便利店",name:"uSmile 昆仑好","name:en":"uSmile","name:zh":"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|توتال":{tags:{amenity:"fuel",brand:"توتال",name:"توتال"}},"amenity/fuel|บางจาก":{countryCodes:["th"],tags:{amenity:"fuel",brand:"บางจาก","brand:en":"Bangchak","brand:th":"บางจาก","brand:wikidata":"Q6579719","brand:wikipedia":"th:บางจาก คอร์ปอเรชัน",name:"บางจาก","name:en":"Bangchak","name:th":"บางจาก"}},"amenity/fuel|ป.ต.ท.":{countryCodes:["th"],tags:{amenity:"fuel",brand:"ป.ต.ท.","brand:en":"PTT","brand:th":"ป.ต.ท.","brand:wikidata":"Q1810389","brand:wikipedia":"th:ปตท.",name:"ป.ต.ท.","name:en":"PTT","name:th":"ป.ต.ท."}},"amenity/fuel|เชลล์":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เชลล์","brand:en":"Shell","brand:th":"เชลล์","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"เชลล์","name:en":"Shell","name:th":"เชลล์"}},"amenity/fuel|เอสโซ่":{countryCodes:["th"],tags:{amenity:"fuel",brand:"เอสโซ่","brand:en":"Esso","brand:th":"เอสโซ่","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"เอสโซ่","name:en":"Esso","name:th":"เอสโซ่"}},"amenity/fuel|エッソ":{countryCodes:["jp"],matchNames:["エッソ石油"],tags:{amenity:"fuel",brand:"エッソ","brand:en":"Esso","brand:ja":"エッソ","brand:wikidata":"Q867662","brand:wikipedia":"en:Esso",name:"エッソ","name:en":"Esso","name:ja":"エッソ"}},"amenity/fuel|エネオス":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"エネオス","brand:en":"JXTG Nippon Oil & Energy","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"JXTG Nippon Oil & Energy","name:ja":"エネオス"}},"amenity/fuel|コスモ石油":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"コスモ石油","brand:en":"Cosmo Oil Company","brand:ja":"コスモ石油","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ石油","name:en":"Cosmo Oil Company","name:ja":"コスモ石油"}},"amenity/fuel|ゼネラル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"ゼネラル","brand:en":"Tonen General","brand:ja":"ゼネラル","brand:wikidata":"Q11528048","brand:wikipedia":"ja:東燃ゼネラル石油",name:"ゼネラル","name:en":"Tonen General","name:ja":"ゼネラル"}},"amenity/fuel|モービル":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"モービル","brand:en":"Mobil","brand:ja":"モービル","brand:wikidata":"Q3088656","brand:wikipedia":"ja:モービル (ブランド)",name:"モービル","name:en":"Mobil","name:ja":"モービル"}},"amenity/fuel|中国石化 Sinopec":{countryCodes:["cn"],matchNames:["Sinopec","Sinopec fuel","中国石化","中国石化加油站"],tags:{amenity:"fuel",brand:"中国石化 Sinopec","brand:en":"Sinopec","brand:wikidata":"Q831445","brand:wikipedia":"en:Sinopec","brand:zh":"中国石化",name:"中国石化 Sinopec","name:en":"Sinopec","name:zh":"中国石化"}},"amenity/fuel|中国石油":{countryCodes:["cn"],matchNames:["中油加油站"],tags:{amenity:"fuel",brand:"中国石油","brand:en":"PetroChina","brand:wikidata":"Q503182","brand:wikipedia":"en:PetroChina","brand:zh":"中国石油",name:"中国石油","name:en":"PetroChina","name:zh":"中国石油"}},"amenity/fuel|全國加油站":{countryCodes:["tw"],tags:{amenity:"fuel",brand:"全國加油站","brand:en":"NPC","brand:wikidata":"Q20410455","brand:wikipedia":"zh:全國加油站","brand:zh":"全國加油站",name:"全國加油站","name:en":"NPC","name:zh":"全國加油站"}},"amenity/fuel|出光":{countryCodes:["jp"],tags:{amenity:"fuel",brand:"出光","brand:en":"Idemitsu Kosan","brand:ja":"出光","brand:wikidata":"Q2216770","brand:wikipedia":"en:Idemitsu Kosan",name:"出光","name:en":"Idemitsu Kosan","name:ja":"出光"}},"amenity/fuel|台塑石油":{tags:{amenity:"fuel",brand:"台塑石油",name:"台塑石油"}},"amenity/fuel|台灣中油":{countryCodes:["tw"],matchNames:["中油"],tags:{amenity:"fuel",brand:"台灣中油","brand:en":"CPC Corporation, Taiwan","brand:wikidata":"Q21527177","brand:wikipedia":"en:CPC Corporation, Taiwan","brand:zh":"台灣中油",name:"台灣中油","name:en":"CPC Corporation, Taiwan","name:zh":"台灣中油"}},"amenity/fuel|昭和シェル":{countryCodes:["jp"],matchNames:["昭和シェル石油"],tags:{amenity:"fuel",brand:"昭和シェル","brand:en":"Showa Shell Sekiyu","brand:ja":"昭和シェル","brand:wikidata":"Q277115","brand:wikipedia":"en:Showa Shell Sekiyu",name:"昭和シェル","name:en":"Showa Shell Sekiyu","name:ja":"昭和シェル"}},"amenity/fuel|福懋加油站":{tags:{amenity:"fuel",brand:"福懋加油站",name:"福懋加油站"}},"amenity/hospital|Centro de Salud":{tags:{amenity:"hospital",brand:"Centro de Salud",name:"Centro de Salud"}},"amenity/hospital|Centro de Saúde":{tags:{amenity:"hospital",brand:"Centro de Saúde",name:"Centro de Saúde"}},"amenity/hospital|Cruz Roja":{tags:{amenity:"hospital",brand:"Cruz Roja",name:"Cruz Roja"}},"amenity/hospital|IMSS":{tags:{amenity:"hospital",brand:"IMSS",name:"IMSS"}},"amenity/hospital|Select Specialty Hospital":{countryCodes:["us"],matchNames:["select speciality"],tags:{amenity:"hospital",brand:"Select Specialty Hospital","brand:wikidata":"Q66360902",healthcare:"hospital",name:"Select Specialty Hospital"}},"amenity/hospital|Shriners Hospital for Children":{countryCodes:["us"],matchNames:["shriners burn hospital","shriners hospital","shriners hospitals for children"],tags:{amenity:"hospital",brand:"Shriners Hospitals for Children","brand:wikidata":"Q7504109","brand:wikipedia":"en:Shriners Hospitals for Children",healthcare:"hospital","healthcare:speciality":"paediatrics",name:"Shriners Hospitals for Children"}},"amenity/hospital|VA Medical Center":{countryCodes:["us"],matchNames:["department of veterans affairs medical center","veterans administration","veterans administration hospital","veterans administration medical center","veterans affairs","veterans affairs hospital","veterans affairs medical center"],tags:{amenity:"hospital",brand:"VA","brand:wikidata":"Q6580225","brand:wikipedia":"en:Veterans Health Administration",healthcare:"hospital","healthcare:for":"veterans",name:"VA Medical Center",short_name:"VA"}},"amenity/hospital|Амбулатория":{tags:{amenity:"hospital",brand:"Амбулатория",name:"Амбулатория"}},"amenity/hospital|Больница":{tags:{amenity:"hospital",brand:"Больница",name:"Больница"}},"amenity/hospital|Городская больница":{tags:{amenity:"hospital",brand:"Городская больница",name:"Городская больница"}},"amenity/hospital|Детская больница":{tags:{amenity:"hospital",brand:"Детская больница",name:"Детская больница"}},"amenity/hospital|Детская поликлиника":{tags:{amenity:"hospital",brand:"Детская поликлиника",name:"Детская поликлиника"}},"amenity/hospital|Женская консультация":{tags:{amenity:"hospital",brand:"Женская консультация",name:"Женская консультация"}},"amenity/hospital|Инфекционное отделение":{tags:{amenity:"hospital",brand:"Инфекционное отделение",name:"Инфекционное отделение"}},"amenity/hospital|Кожно-венерологический диспансер":{tags:{amenity:"hospital",brand:"Кожно-венерологический диспансер",name:"Кожно-венерологический диспансер"}},"amenity/hospital|Медпункт":{tags:{amenity:"hospital",brand:"Медпункт",name:"Медпункт"}},"amenity/hospital|Поликлиника":{tags:{amenity:"hospital",brand:"Поликлиника",name:"Поликлиника"}},"amenity/hospital|Противотуберкулезный диспансер":{tags:{amenity:"hospital",brand:"Противотуберкулезный диспансер",name:"Противотуберкулезный диспансер"}},"amenity/hospital|Районная больница":{tags:{amenity:"hospital",brand:"Районная больница",name:"Районная больница"}},"amenity/hospital|Роддом":{tags:{amenity:"hospital",brand:"Роддом",name:"Роддом"}},"amenity/hospital|Родильный дом":{tags:{amenity:"hospital",brand:"Родильный дом",name:"Родильный дом"}},"amenity/hospital|Скорая помощь":{tags:{amenity:"hospital",brand:"Скорая помощь",name:"Скорая помощь"}},"amenity/hospital|ФАП":{tags:{amenity:"hospital",brand:"ФАП",name:"ФАП"}},"amenity/hospital|Фельдшерско-акушерский пункт":{tags:{amenity:"hospital",brand:"Фельдшерско-акушерский пункт",name:"Фельдшерско-акушерский пункт"}},"amenity/hospital|ЦРБ":{tags:{amenity:"hospital",brand:"ЦРБ",name:"ЦРБ"}},"amenity/hospital|Центральная районная больница":{tags:{amenity:"hospital",brand:"Центральная районная больница",name:"Центральная районная больница"}},"amenity/hospital|โรงพยาบาลส่งเสริมสุขภาพตำบล":{countryCodes:["th"],tags:{amenity:"hospital",brand:"โรงพยาบาลส่งเสริมสุขภาพตำบล","brand:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล",name:"โรงพยาบาลส่งเสริมสุขภาพตำบล","name:th":"โรงพยาบาลส่งเสริมสุขภาพตำบล"}},"amenity/ice_cream|33 пингвина":{tags:{amenity:"ice_cream",brand:"33 пингвина",name:"33 пингвина"}},"amenity/ice_cream|Abbott's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Abbott's Frozen Custard","brand:wikidata":"Q4664334","brand:wikipedia":"en:Abbott's Frozen Custard",name:"Abbott's Frozen Custard",short_name:"Abbott's"}},"amenity/ice_cream|Amorino":{countryCodes:["ae","ch","cz","de","es","fr","gr","ie","it","lu","ma","mt","mx","nc","pt","qa","re","uk","us"],tags:{amenity:"ice_cream",brand:"Amorino","brand:wikidata":"Q2843884","brand:wikipedia":"fr:Amorino",name:"Amorino"}},"amenity/ice_cream|Amy's Ice Creams":{tags:{amenity:"ice_cream",brand:"Amy's Ice Creams","brand:wikidata":"Q4749045","brand:wikipedia":"en:Amy's Ice Creams",name:"Amy's Ice Creams"}},"amenity/ice_cream|Andy's Frozen Custard":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Andy's Frozen Custard","brand:wikidata":"Q4760327","brand:wikipedia":"en:Andy's Frozen Custard",name:"Andy's Frozen Custard",short_name:"Andy's"}},"amenity/ice_cream|Baskin-Robbins":{tags:{amenity:"ice_cream",brand:"Baskin-Robbins","brand:wikidata":"Q584601","brand:wikipedia":"en:Baskin-Robbins",cuisine:"ice_cream",name:"Baskin-Robbins"}},"amenity/ice_cream|Ben & Jerry's":{tags:{amenity:"ice_cream",brand:"Ben & Jerry's","brand:wikidata":"Q816412","brand:wikipedia":"en:Ben & Jerry's",cuisine:"ice_cream",name:"Ben & Jerry's"}},"amenity/ice_cream|Bruster's Ice Cream":{countryCodes:["us"],matchNames:["brusters"],tags:{amenity:"ice_cream",brand:"Bruster's Ice Cream","brand:wikidata":"Q4979810","brand:wikipedia":"en:Bruster's Ice Cream",cuisine:"ice_cream",name:"Bruster's Ice Cream"}},"amenity/ice_cream|Carvel":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Carvel","brand:wikidata":"Q5047520","brand:wikipedia":"en:Carvel (franchise)",cuisine:"ice_cream",delivery:"yes",name:"Carvel",takeaway:"yes"}},"amenity/ice_cream|Cold Stone Creamery":{countryCodes:["ng","us"],matchNames:["cold stone"],tags:{amenity:"ice_cream",brand:"Cold Stone Creamery","brand:wikidata":"Q1094923","brand:wikipedia":"en:Cold Stone Creamery",cuisine:"ice_cream",name:"Cold Stone Creamery"}},"amenity/ice_cream|D'Onofrio":{countryCodes:["pe"],tags:{amenity:"ice_cream",brand:"D'Onofrio","brand:wikidata":"Q5203166","brand:wikipedia":"es:D'Onofrio",cuisine:"ice_cream",name:"D'Onofrio"}},"amenity/ice_cream|Freddo":{tags:{amenity:"ice_cream",brand:"Freddo","brand:wikidata":"Q28823999","brand:wikipedia":"es:Freddo",cuisine:"ice_cream",name:"Freddo"}},"amenity/ice_cream|Graeter's":{countryCodes:["us"],matchNames:["greaters"],tags:{amenity:"ice_cream",brand:"Graeter's","brand:wikidata":"Q5592430","brand:wikipedia":"en:Graeter's",cuisine:"ice_cream",name:"Graeter's",takeaway:"yes"}},"amenity/ice_cream|Grido":{countryCodes:["ar"],matchNames:["grido helado"],matchTags:["shop/confectionary"],tags:{amenity:"ice_cream",brand:"Grido","brand:wikidata":"Q5885724","brand:wikipedia":"es:Grido Helado",cuisine:"ice_cream",name:"Grido"}},"amenity/ice_cream|Häagen-Dazs":{tags:{amenity:"ice_cream",brand:"Häagen-Dazs","brand:wikidata":"Q1143333","brand:wikipedia":"en:Häagen-Dazs",name:"Häagen-Dazs"}},"amenity/ice_cream|La Michoacana":{countryCodes:["mx"],matchNames:["paleteria la michoacana"],tags:{amenity:"ice_cream",brand:"La Michoacana","brand:wikidata":"Q17118857","brand:wikipedia":"en:Paletería La Michoacana",name:"La Michoacana"}},"amenity/ice_cream|Marble Slab Creamery":{countryCodes:["ca","us"],tags:{amenity:"ice_cream",brand:"Marble Slab Creamery","brand:wikidata":"Q17020087","brand:wikipedia":"en:Marble Slab Creamery",cuisine:"ice_cream",name:"Marble Slab Creamery"}},"amenity/ice_cream|Menchie's":{countryCodes:["ae","bh","bs","ca","cn","gb","in","jp","kw","qa","sa","us"],matchNames:["menchie's frozen yoghurt","menchie's frozen yogurt"],tags:{amenity:"ice_cream",brand:"Menchie's","brand:wikidata":"Q6816528","brand:wikipedia":"en:Menchie's Frozen Yogurt",cuisine:"frozen_yogurt",name:"Menchie's"}},"amenity/ice_cream|Pinkberry":{tags:{amenity:"ice_cream",brand:"Pinkberry","brand:wikidata":"Q2904053","brand:wikipedia":"en:Pinkberry",cuisine:"frozen_yogurt",name:"Pinkberry",takeaway:"yes"}},"amenity/ice_cream|Ralph's Italian Ices":{countryCodes:["us"],matchNames:["ralphs famous italian ices and ice cream","ralphs italian ice","ralphs italian ices and ice cream"],tags:{amenity:"ice_cream",brand:"Ralph's Italian Ices","brand:wikidata":"Q62576909",cuisine:"ice_cream",name:"Ralph's Italian Ices",official_name:"Ralph's Famous Italian Ices"}},"amenity/ice_cream|Rita's Italian Ice":{countryCodes:["us"],matchNames:["ritas","ritas water ice"],tags:{amenity:"ice_cream",brand:"Rita's Italian Ice","brand:wikidata":"Q7336456","brand:wikipedia":"en:Rita's Italian Ice",cuisine:"ice_cream",name:"Rita's Italian Ice"}},"amenity/ice_cream|Shake's":{countryCodes:["us"],tags:{amenity:"ice_cream",brand:"Shake's","brand:wikidata":"Q17032842","brand:wikipedia":"en:Shake's Frozen Custard",name:"Shake's",official_name:"Shake’s Frozen Custard"}},"amenity/ice_cream|TCBY":{tags:{amenity:"ice_cream",brand:"TCBY","brand:wikidata":"Q7669631","brand:wikipedia":"en:TCBY",cuisine:"frozen_yogurt",name:"TCBY",takeaway:"yes"}},"amenity/ice_cream|Yogen Früz":{tags:{amenity:"ice_cream",brand:"Yogen Früz","brand:wikidata":"Q8054358","brand:wikipedia":"en:Yogen Früz",cuisine:"frozen_yogurt",name:"Yogen Früz",takeaway:"yes"}},"amenity/ice_cream|Yogurt Mountain":{tags:{amenity:"ice_cream",brand:"Yogurt Mountain","brand:wikidata":"Q8054427","brand:wikipedia":"en:Yogurt Mountain",cuisine:"frozen_yogurt",name:"Yogurt Mountain",takeaway:"yes"}},"amenity/ice_cream|Yogurtland":{countryCodes:["ae","au","sg","th","us","ve"],tags:{amenity:"ice_cream",brand:"Yogurtland","brand:wikidata":"Q8054428","brand:wikipedia":"en:Yogurtland",cuisine:"frozen_yogurt",name:"Yogurtland",takeaway:"yes"}},"amenity/ice_cream|sweetFrog":{countryCodes:["us"],matchNames:["sweetfrog frozen yogurt","sweetfrog premium frozen yogurt"],tags:{amenity:"ice_cream",brand:"sweetFrog","brand:wikidata":"Q16952110","brand:wikipedia":"en:Sweet Frog",cuisine:"frozen_yogurt",name:"sweetFrog"}},"amenity/ice_cream|サーティワンアイスクリーム":{countryCodes:["jp"],tags:{amenity:"ice_cream",brand:"バスキン・ロビンス","brand:en":"Baskin-Robbins","brand:ja":"バスキン・ロビンス","brand:wikidata":"Q584601","brand:wikipedia":"ja:バスキン・ロビンス",cuisine:"ice_cream",name:"サーティワンアイスクリーム","name:en":"Baskin-Robbins","name:ja":"サーティワンアイスクリーム"}},"amenity/kindergarten|Children's Learning Adventure":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"Children's Learning Adventure","brand:wikidata":"Q64821213","brand:wikipedia":"en:Children's Learning Adventure",fee:"yes","isced:level":"0",name:"Children's Learning Adventure",nursery:"yes",preschool:"yes",short_name:"CLA"}},"amenity/kindergarten|Childtime":{countryCodes:["us"],matchNames:["childtime learning center","childtime learning centers"],tags:{amenity:"kindergarten",brand:"Childtime","brand:wikidata":"Q64877793",fee:"yes","isced:level":"0",name:"Childtime",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|KinderCare":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"KinderCare Learning Center",amenity:"kindergarten",brand:"KinderCare","brand:wikidata":"Q6410551","brand:wikipedia":"en:KinderCare Learning Centers",fee:"yes","isced:level":"0",name:"KinderCare",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|La Petite Academy":{countryCodes:["us"],matchNames:["la petite"],tags:{amenity:"kindergarten",brand:"La Petite Academy","brand:wikidata":"Q64877784",fee:"yes","isced:level":"0",name:"La Petite Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|New Horizon Academy":{countryCodes:["us"],tags:{after_school:"yes",amenity:"kindergarten",brand:"New Horizon Academy","brand:wikidata":"Q64821306",fee:"yes","isced:level":"0",name:"New Horizon Academy",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Primrose School":{countryCodes:["us"],matchNames:["primrose"],tags:{after_school:"yes",alt_name:"Primrose Schools",amenity:"kindergarten",brand:"Primrose School","brand:wikidata":"Q7243677","brand:wikipedia":"en:Primrose Schools",fee:"yes","isced:level":"0",max_age:"12",min_age:"6 weeks",name:"Primrose School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Children's Courtyard":{countryCodes:["us"],matchNames:["children's courtyard"],tags:{amenity:"kindergarten",brand:"The Children's Courtyard","brand:wikidata":"Q64877852",fee:"yes","isced:level":"0",name:"The Children's Courtyard",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|The Goddard School":{countryCodes:["us"],tags:{after_school:"yes",alt_name:"Goddard School",amenity:"kindergarten",brand:"The Goddard School","brand:wikidata":"Q5576260","brand:wikipedia":"en:Goddard School",fee:"yes","isced:level":"0",min_age:"6 weeks",name:"The Goddard School",nursery:"yes",preschool:"yes"}},"amenity/kindergarten|Tutor Time":{countryCodes:["us"],matchNames:["tutor time child care","tutor time child care learning center","tutor time learning center","tutor time learning centers"],tags:{amenity:"kindergarten",brand:"Tutor Time","brand:wikidata":"Q64877826",fee:"yes","isced:level":"0",name:"Tutor Time",nursery:"yes",preschool:"yes"}},"amenity/language_school|AEON":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"AEON","brand:en":"Aeon","brand:ja":"AEON","brand:ja-Hira":"イーオン","brand:ja-Latn":"AEON","brand:wikidata":"Q4687898","brand:wikipedia":"ja:イーオン","language:en":"main",name:"AEON","name:en":"Aeon","name:ja":"AEON","name:ja-Hira":"イーオン","name:ja-Latn":"AEON"}},"amenity/language_school|Berlitz":{tags:{amenity:"language_school",brand:"Berlitz","brand:wikidata":"Q821960","brand:wikipedia":"en:Berlitz Corporation",name:"Berlitz"}},"amenity/language_school|ECC外語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ECC外語学院","brand:en":"ECC Foreign Language Institute","brand:ja":"ECC外語学院","brand:ja-Hira":"イーシーシーがいごがくいん","brand:ja-Latn":"ECC Gaigo Gakuin","brand:wikidata":"Q5322655","brand:wikipedia":"ja:ECC総合教育機関","language:en":"main",name:"ECC外語学院","name:en":"ECC Foreign Language Institute","name:ja":"ECC外語学院","name:ja-Hira":"イーシーシーがいごがくいん","name:ja-Latn":"ECC Gaigo Gakuin",short_name:"ECC","short_name:en":"ECC","short_name:ja":"ECC","short_name:ja-Hira":"イーシーシー","short_name:ja-Latn":"ECC"}},"amenity/language_school|ELS":{countryCodes:["ca","in","my","pa","sa","tr","us","vn"],tags:{amenity:"language_school",brand:"ELS","brand:en":"ELS","brand:wikidata":"Q5323325","brand:wikipedia":"en:ELS Language Centers","language:en":"main",name:"ELS","name:en":"ELS",official_name:"ELS Language Centers","official_name:en":"ELS Language Centers"}},"amenity/language_school|GABA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"GABA","brand:en":"Gaba","brand:ja":"GABA","brand:ja-Kana":"ガバ","brand:ja-Latn":"GABA","brand:wikidata":"Q5515241","brand:wikipedia":"ja:GABA (企業)","language:en":"main",name:"GABA","name:en":"Gaba","name:ja":"GABA","name:ja-Kana":"ガバ","name:ja-Latn":"GABA"}},"amenity/language_school|NOVA":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"NOVA","brand:en":"Nova","brand:ja":"NOVA","brand:ja-Hira":"ノヴァ","brand:ja-Latn":"NOVA","brand:wikidata":"Q7064000","brand:wikipedia":"ja:NOVA","language:en":"main",name:"NOVA","name:en":"Nova","name:ja":"NOVA","name:ja-Hira":"ノヴァ","name:ja-Latn":"NOVA"}},"amenity/language_school|Shane English School":{countryCodes:["cn","dz","gb","hk","id","kr","pl","th","tw","vn"],tags:{amenity:"language_school",brand:"Shane English School","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"en:Shane English School","language:en":"main",name:"Shane English School","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|シェーン英会話":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"シェーン英会話","brand:en":"Shane English School","brand:ja":"シェーン英会話","brand:ja-Latn":"Shēn Eikaiwa","brand:wikidata":"Q17054332","brand:wikipedia":"ja:シェーン英会話スクール","language:en":"main",name:"シェーン英会話","name:en":"Shane English School","name:ja":"シェーン英会話","name:ja-Latn":"Shēn Eikaiwa"}},"amenity/language_school|セイハ英語学院":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"セイハ英語学院","brand:en":"Seiha English Academy","brand:ja":"セイハ英語学院","brand:ja-Hani":"セイハえいごがくいん","brand:ja-Latn":"Seiha Eigo Gakuin","brand:wikidata":"Q7446694","language:en":"main",name:"セイハ英語学院","name:en":"Seiha English Academy","name:ja":"セイハ英語学院","name:ja-Hani":"セイハえいごがくいん","name:ja-Latn":"Seiha Eigo Gakuin"}},"amenity/language_school|ベルリッツ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ベルリッツ","brand:en":"Berlitz","brand:ja":"ベルリッツ","brand:ja-Hira":"ベルリッツ","brand:wikidata":"Q4892545","brand:wikipedia":"ja:ベルリッツ・ジャパン",name:"ベルリッツ","name:en":"Berlitz","name:ja":"ベルリッツ","name:ja-Hira":"ベルリッツ"}},"amenity/language_school|ペッピーキッズクラブ":{countryCodes:["jp"],tags:{amenity:"language_school",brand:"ペッピーキッズクラブ","brand:en":"Peppy Kids Club","brand:ja":"ペッピーキッズクラブ","brand:ja-Latn":"Peppi Kizzu Kurabu","brand:wikidata":"Q7166471","brand:wikipedia":"ja:ペッピーキッズクラブ","language:en":"main",name:"ペッピーキッズクラブ","name:en":"Peppy Kids Club","name:ja":"ペッピーキッズクラブ","name:ja-Latn":"Peppi Kizzu Kurabu"}},"amenity/money_transfer|Express Union":{countryCodes:["td"],matchTags:["amenity/bank"],nomatch:["amenity/bank|Banco Unión","amenity/bank|UnionBank"],tags:{amenity:"money_transfer",brand:"Express Union","brand:wikidata":"Q3062276","brand:wikipedia":"fr:Express Union",name:"Express Union"}},"amenity/money_transfer|Hoa Phát":{countryCodes:["us"],matchNames:["hoa phat goi tien","hoa phat gui tien"],tags:{amenity:"money_transfer",brand:"Hoa Phát","brand:wikidata":"Q65116775",name:"Hoa Phát","name:vi":"Hoa Phát"}},"amenity/money_transfer|MoneyGram":{countryCodes:["de","fr","gr"],tags:{amenity:"money_transfer",brand:"MoneyGram","brand:wikidata":"Q1944412","brand:wikipedia":"en:MoneyGram",name:"MoneyGram"}},"amenity/money_transfer|Orange Money":{countryCodes:["ml"],tags:{amenity:"money_transfer",brand:"Orange Money","brand:wikidata":"Q16668220","brand:wikipedia":"en:Orange Money",name:"Orange Money"}},"amenity/money_transfer|Western Union":{matchTags:["amenity/bureau_de_change"],nomatch:["amenity/bank|Western Union"],tags:{amenity:"money_transfer",brand:"Western Union","brand:wikidata":"Q861042","brand:wikipedia":"en:Western Union",name:"Western Union"}},"amenity/parking|Diamond Parking":{countryCodes:["ca","us"],tags:{amenity:"parking",brand:"Diamond Parking","brand:wikidata":"Q5270887","brand:wikipedia":"en:Diamond Parking",name:"Diamond Parking"}},"amenity/parking|Parking Company of America":{countryCodes:["us"],tags:{amenity:"parking",brand:"Parking Company of America","brand:wikidata":"Q65491376",fee:"yes",name:"Parking Company of America",short_name:"PCA"}},"amenity/parking|SP+":{countryCodes:["ca","us"],matchNames:["central parking","central parking system","standard parking"],nomatch:["amenity/fuel|SP"],tags:{alt_name:"SP Plus",amenity:"parking",brand:"SP+","brand:wikidata":"Q7598289","brand:wikipedia":"en:SP Plus Corporation",fee:"yes",name:"SP+"}},"amenity/parking|Wilson Parking":{countryCodes:["au","cn","hk","ko","nz","sg"],matchNames:["wilson"],tags:{amenity:"parking",brand:"Wilson Parking","brand:wikidata":"Q28448427","brand:wikipedia":"en:Wilson Parking",fee:"yes",name:"Wilson Parking"}},"amenity/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|Farmaci":{tags:{amenity:"pharmacy",brand:"Farmaci",healthcare:"pharmacy",name:"Farmaci"}},"amenity/pharmacy|Farmacia Benavides":{countryCodes:["mx"],tags:{amenity:"pharmacy",brand:"Farmacia Benavides","brand:wikidata":"Q5435613","brand:wikipedia":"en:Farmacias Benavides",healthcare:"pharmacy",name:"Farmacia Benavides"}},"amenity/pharmacy|Farmacia Familiei":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Farmacia Familiei",healthcare:"pharmacy",name:"Farmacia Familiei"}},"amenity/pharmacy|Farmacia Guadalajara":{countryCodes:["mx"],matchNames:["farmacias guadalajara"],tags:{amenity:"pharmacy",brand:"Farmacia Guadalajara","brand:wikidata":"Q5435609","brand:wikipedia":"en:Farmacias Guadalajara",healthcare:"pharmacy",name:"Farmacia Guadalajara"}},"amenity/pharmacy|Farmacias Ahumada":{tags:{amenity:"pharmacy",brand:"Farmacias Ahumada","brand:wikidata":"Q5856069","brand:wikipedia":"es:Farmacias Ahumada",healthcare:"pharmacy",name:"Farmacias Ahumada"}},"amenity/pharmacy|Farmacias Benavides":{tags:{amenity:"pharmacy",brand:"Farmacias Benavides",healthcare:"pharmacy",name:"Farmacias Benavides"}},"amenity/pharmacy|Farmacias Económicas~(Ecuador)":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108380",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Económicas~(El Salvador)":{countryCodes:["sv"],tags:{amenity:"pharmacy",brand:"Farmacias Económicas","brand:wikidata":"Q62108397",healthcare:"pharmacy",name:"Farmacias Económicas"}},"amenity/pharmacy|Farmacias Similares":{countryCodes:["cl","gt","mx"],matchNames:["similares"],tags:{amenity:"pharmacy",brand:"Farmacias Similares","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias Similares"}},"amenity/pharmacy|Farmacias del Ahorro":{countryCodes:["mx"],matchNames:["farmacia del ahorro"],tags:{amenity:"pharmacy",brand:"Farmacias del Ahorro","brand:wikidata":"Q62086647",healthcare:"pharmacy",name:"Farmacias del Ahorro"}},"amenity/pharmacy|Farmacias del Dr. Simi":{countryCodes:["cl","gt","mx"],tags:{amenity:"pharmacy",brand:"Farmacias del Dr. Simi","brand:wikidata":"Q62564610",healthcare:"pharmacy",name:"Farmacias del Dr. Simi"}},"amenity/pharmacy|Farmacity":{countryCodes:["ra"],tags:{amenity:"pharmacy",brand:"Farmacity","brand:wikidata":"Q5856076","brand:wikipedia":"es:Farmacity",healthcare:"pharmacy",name:"Farmacity"}},"amenity/pharmacy|Farmacorp":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacorp",healthcare:"pharmacy",name:"Farmacorp"}},"amenity/pharmacy|Farmahorro":{tags:{amenity:"pharmacy",brand:"Farmahorro","brand:wikidata":"Q20015002","brand:wikipedia":"es:Farmahorro",healthcare:"pharmacy",name:"Farmahorro"}},"amenity/pharmacy|Farmatodo":{tags:{amenity:"pharmacy",brand:"Farmatodo","brand:wikidata":"Q5856092","brand:wikipedia":"es:Farmatodo",healthcare:"pharmacy",name:"Farmatodo"}},"amenity/pharmacy|Farmácia São João":{tags:{amenity:"pharmacy",brand:"Farmácia São João",healthcare:"pharmacy",name:"Farmácia São João"}},"amenity/pharmacy|Felicia":{countryCodes:["md"],tags:{amenity:"pharmacy",brand:"Felicia","brand:wikidata":"Q62564805",healthcare:"pharmacy",name:"Felicia"}},"amenity/pharmacy|Fred Meyer Pharmacy":{countryCodes:["us"],matchNames:["fred meyer"],nomatch:["shop/supermarket|Fred Meyer"],tags:{amenity:"pharmacy",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",healthcare:"pharmacy",name:"Fred Meyer Pharmacy"}},"amenity/pharmacy|Fybeca":{countryCodes:["ec"],tags:{amenity:"pharmacy",brand:"Fybeca","brand:wikidata":"Q62564822",healthcare:"pharmacy",name:"Fybeca"}},"amenity/pharmacy|Generika":{countryCodes:["ph"],matchNames:["generika drugstore"],tags:{amenity:"pharmacy",brand:"Generika","brand:wikidata":"Q62564876",healthcare:"pharmacy",name:"Generika"}},"amenity/pharmacy|Gintarinė vaistinė":{countryCodes:["lt"],tags:{amenity:"pharmacy",brand:"Gintarinė vaistinė","brand:wikidata":"Q15857801","brand:wikipedia":"lt:Gintarinė vaistinė",healthcare:"pharmacy",name:"Gintarinė vaistinė"}},"amenity/pharmacy|Guardian~(Asia)":{countryCodes:["bn","id","kh","my","sg","vn"],tags:{amenity:"pharmacy",brand:"Guardian","brand:wikidata":"Q63371124","brand:wikipedia":"ms:Guardian Malaysia",healthcare:"pharmacy",name:"Guardian"}},"amenity/pharmacy|Guardian~(Australia)":{countryCodes:["au"],matchNames:["guardian pharmacies","guardian pharmacy"],tags:{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|Life Pharmacy":{tags:{amenity:"pharmacy",brand:"Life Pharmacy",healthcare:"pharmacy",name:"Life Pharmacy"}},"amenity/pharmacy|Lloyds Pharmacy":{countryCodes:["be","gb","ie","im"],matchNames:["lloyds"],tags:{amenity:"pharmacy",brand:"Lloyds Pharmacy","brand:wikidata":"Q6662870","brand:wikipedia":"en:LloydsPharmacy",healthcare:"pharmacy",name:"Lloyds Pharmacy"}},"amenity/pharmacy|Locatel":{tags:{amenity:"pharmacy",brand:"Locatel",healthcare:"pharmacy",name:"Locatel"}},"amenity/pharmacy|London Drugs":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"London Drugs","brand:wikidata":"Q3258955","brand:wikipedia":"en:London Drugs",healthcare:"pharmacy",name:"London Drugs"}},"amenity/pharmacy|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{amenity:"pharmacy",brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",healthcare:"pharmacy",name:"Longs Drugs",short_name:"Longs"}},"amenity/pharmacy|Mannings":{countryCodes:["cn","hk","mo"],tags:{amenity:"pharmacy",brand:"Mannings","brand:wikidata":"Q13646560","brand:wikipedia":"en:Mannings",healthcare:"pharmacy",name:"Mannings"}},"amenity/pharmacy|Marc's Pharmacy":{countryCodes:["us"],nomatch:["shop/supermarket|Marc's"],tags:{amenity:"pharmacy",brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",healthcare:"pharmacy",name:"Marc's Pharmacy"}},"amenity/pharmacy|MedPlus":{countryCodes:["in"],tags:{amenity:"pharmacy",brand:"MedPlus","brand:wikidata":"Q65684234","brand:wikipedia":"en:MedPlus",healthcare:"pharmacy",name:"MedPlus"}},"amenity/pharmacy|Mercury Drug":{countryCodes:["ph"],tags:{amenity:"pharmacy",brand:"Mercury Drug","brand:wikidata":"Q6818610","brand:wikipedia":"en:Mercury Drug",healthcare:"pharmacy",name:"Mercury Drug"}},"amenity/pharmacy|Mifarma":{countryCodes:["pe"],tags:{amenity:"pharmacy",brand:"Mifarma","brand:wikidata":"Q62564998",healthcare:"pharmacy",name:"Mifarma"}},"amenity/pharmacy|Multipharma":{countryCodes:["be"],tags:{amenity:"pharmacy",brand:"Multipharma","brand:wikidata":"Q62565018",healthcare:"pharmacy",name:"Multipharma"}},"amenity/pharmacy|Mēness aptieka":{countryCodes:["lv"],tags:{amenity:"pharmacy",brand:"Mēness aptieka","brand:wikidata":"Q57583051",healthcare:"pharmacy",name:"Mēness aptieka"}},"amenity/pharmacy|Pague Menos":{countryCodes:["br"],matchNames:["farmácia pague menos"],tags:{amenity:"pharmacy",brand:"Pague Menos","brand:wikidata":"Q7124466","brand:wikipedia":"pt:Pague Menos",healthcare:"pharmacy",name:"Pague Menos"}},"amenity/pharmacy|Panvel":{countryCodes:["br"],tags:{amenity:"pharmacy",brand:"Panvel","brand:wikidata":"Q10344254","brand:wikipedia":"pt:Panvel",healthcare:"pharmacy",name:"Panvel"}},"amenity/pharmacy|PharmaChoice":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"PharmaChoice","brand:wikidata":"Q7180716","brand:wikipedia":"en:PharmaChoice",healthcare:"pharmacy",name:"PharmaChoice"}},"amenity/pharmacy|PharmaSave~(Australia)":{countryCodes:["au"],nomatch:["amenity/pharmacy|Pharmasave~(Canada)"],tags:{amenity:"pharmacy",brand:"PharmaSave","brand:wikidata":"Q63367906",healthcare:"pharmacy",name:"PharmaSave"}},"amenity/pharmacy|Pharmacie Principale":{tags:{amenity:"pharmacy",brand:"Pharmacie Principale","brand:wikidata":"Q1547749","brand:wikipedia":"fr:Groupe PP Holding",healthcare:"pharmacy",name:"Pharmacie Principale"}},"amenity/pharmacy|Pharmacy 4 Less":{countryCodes:["au"],tags:{amenity:"pharmacy",brand:"Pharmacy 4 Less","brand:wikidata":"Q63367608",healthcare:"pharmacy",name:"Pharmacy 4 Less"}},"amenity/pharmacy|Pharmaprix":{countryCodes:["ca"],tags:{amenity:"pharmacy",brand:"Pharmaprix","brand:wikidata":"Q1820137","brand:wikipedia":"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:en":"Sakura Pharmacy","name:ja":"さくら薬局"}},"amenity/pharmacy|ウェルパーク":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウェルパーク","brand:ja":"ウェルパーク","brand:wikidata":"Q11288610","brand:wikipedia":"ja:ウェルパーク",healthcare:"pharmacy",name:"ウェルパーク","name:en":"Welpark","name:ja":"ウェルパーク"}},"amenity/pharmacy|ウエルシア":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア","brand:en":"Welcia","brand:ja":"ウエルシア","brand:wikidata":"Q11288684","brand:wikipedia":"ja:ウエルシアホールディングス",healthcare:"pharmacy",name:"ウエルシア","name:en":"Welcia","name:ja":"ウエルシア"}},"amenity/pharmacy|ウエルシア薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ウエルシア薬局","brand:en":"Welcia Yakkyoku","brand:ja":"ウエルシア薬局","brand:wikidata":"Q11288687","brand:wikipedia":"ja:ウエルシア薬局",healthcare:"pharmacy",name:"ウエルシア薬局","name:en":"Welcia Yakkyoku","name:ja":"ウエルシア薬局"}},"amenity/pharmacy|カワチ薬品":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"カワチ薬品","brand:en":"Cawachi","brand:ja":"カワチ薬品","brand:wikidata":"Q11295397","brand:wikipedia":"ja:カワチ薬品",healthcare:"pharmacy",name:"カワチ薬品","name:en":"Cawachi","name:ja":"カワチ薬品"}},"amenity/pharmacy|キリン堂":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"キリン堂","brand:en":"Kirindo","brand:ja":"キリン堂","brand:wikidata":"Q11297751","brand:wikipedia":"ja:キリン堂",healthcare:"pharmacy",name:"キリン堂","name:en":"Kirindo","name:ja":"キリン堂"}},"amenity/pharmacy|クスリのアオキ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クスリのアオキ","brand:en":"Kusuri no Aoki","brand:ja":"クスリのアオキ","brand:wikidata":"Q11298661","brand:wikipedia":"ja:クスリのアオキ",healthcare:"pharmacy",name:"クスリのアオキ","name:en":"Kusuri no Aoki","name:ja":"クスリのアオキ"}},"amenity/pharmacy|クリエイト":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイト","brand:en":"Create","brand:ja":"クリエイト","brand:wikidata":"Q17215731","brand:wikipedia":"ja:クリエイト",healthcare:"pharmacy",name:"クリエイト","name:en":"Create","name:ja":"クリエイト"}},"amenity/pharmacy|クリエイトSD":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"クリエイトSD","brand:en":"CreateSD","brand:ja":"クリエイトSD","brand:wikidata":"Q11299163","brand:wikipedia":"ja:クリエイトSDホールディングス",healthcare:"pharmacy",name:"クリエイトSD","name:en":"CreateSD","name:ja":"クリエイトSD"}},"amenity/pharmacy|コクミン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"コクミン","brand:en":"Kokumin","brand:ja":"コクミン","brand:wikidata":"Q11301923","brand:wikipedia":"ja:コクミン",healthcare:"pharmacy",name:"コクミン","name:en":"Kokumin","name:ja":"コクミン",official_name:"コクミンドラッグ","official_name:en":"Kokumin Drug","official_name:ja":"コクミンドラッグ"}},"amenity/pharmacy|ココカラファイン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ココカラファイン","brand:en":"Cocokara Fine","brand:ja":"ココカラファイン","brand:wikidata":"Q11301948","brand:wikipedia":"ja:ココカラファイン",healthcare:"pharmacy",name:"ココカラファイン","name:en":"Cocokara Fine","name:ja":"ココカラファイン"}},"amenity/pharmacy|サツドラ":{countryCodes:["jp"],matchNames:["サッポロドラッグストアー"],tags:{"alt_name:en":"Satsudora",amenity:"pharmacy",brand:"サツドラ","brand:en":"Sapporo Drug Store","brand:ja":"サツドラ","brand:wikidata":"Q11304804",healthcare:"pharmacy",name:"サツドラ","name:en":"Sapporo Drug Store","name:ja":"サツドラ"}},"amenity/pharmacy|サンドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"サンドラッグ","brand:en":"Sundrug","brand:ja":"サンドラッグ","brand:wikidata":"Q11305867","brand:wikipedia":"ja:サンドラッグ",healthcare:"pharmacy",name:"サンドラッグ","name:en":"Sundrug","name:ja":"サンドラッグ"}},"amenity/pharmacy|スギ薬局":{countryCodes:["jp"],nomatch:["shop/chemist|スギ薬局"],tags:{amenity:"pharmacy",brand:"スギ薬局","brand:en":"Sugi Pharmacy","brand:ja":"スギ薬局","brand:wikidata":"Q11311460","brand:wikipedia":"ja:スギ薬局",healthcare:"pharmacy",name:"スギ薬局","name:en":"Sugi Pharmacy","name:ja":"スギ薬局"}},"amenity/pharmacy|セイジョー":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"セイジョー","brand:en":"Seijo","brand:ja":"セイジョー","brand:wikidata":"Q11314133","brand:wikipedia":"ja:セイジョー",healthcare:"pharmacy",name:"セイジョー","name:en":"Seijo","name:ja":"セイジョー"}},"amenity/pharmacy|ダイコクドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ダイコクドラッグ","brand:en":"Daikoku Drug","brand:ja":"ダイコクドラッグ","brand:wikidata":"Q11316754","brand:wikipedia":"ja:ダイコク",healthcare:"pharmacy",name:"ダイコクドラッグ","name:en":"Daikoku Drug","name:ja":"ダイコクドラッグ"}},"amenity/pharmacy|ツルハドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ツルハドラッグ","brand:en":"Tsuruha","brand:ja":"ツルハドラッグ","brand:wikidata":"Q11318826","brand:wikipedia":"ja:ツルハ",healthcare:"pharmacy",name:"ツルハドラッグ","name:en":"Tsuruha","name:ja":"ツルハドラッグ"}},"amenity/pharmacy|トモズ":{countryCodes:["jp"],matchNames:["トモズエキスプレス"],tags:{amenity:"pharmacy",brand:"トモズ","brand:en":"Tomod's","brand:ja":"トモズ","brand:wikidata":"Q7820097","brand:wikipedia":"ja:トモズ",healthcare:"pharmacy",name:"トモズ","name:en":"Tomod's","name:ja":"トモズ"}},"amenity/pharmacy|ドラッグイレブン":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグイレブン","brand:en":"Drug Eleven","brand:ja":"ドラッグイレブン","brand:wikidata":"Q11323075","brand:wikipedia":"ja:ドラッグイレブン",healthcare:"pharmacy",name:"ドラッグイレブン","name:en":"Drug Eleven","name:ja":"ドラッグイレブン"}},"amenity/pharmacy|ドラッグセイムス":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"ドラッグセイムス","brand:en":"Seims","brand:ja":"ドラッグセイムス","brand:wikidata":"Q11456137","brand:wikipedia":"ja:富士薬品",healthcare:"pharmacy",name:"ドラッグセイムス","name:en":"Drug Seims","name:ja":"ドラッグセイムス"}},"amenity/pharmacy|マツモトキヨシ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"マツモトキヨシ","brand:en":"Matsukiyo","brand:ja":"マツモトキヨシ","brand:wikidata":"Q8014776","brand:wikipedia":"ja:マツモトキヨシ",healthcare:"pharmacy",name:"マツモトキヨシ","name:en":"Matsukiyo","name:ja":"マツモトキヨシ"}},"amenity/pharmacy|丁丁藥局":{nomatch:["shop/chemist|丁丁藥局"],tags:{amenity:"pharmacy",brand:"丁丁藥局",healthcare:"pharmacy",name:"丁丁藥局"}},"amenity/pharmacy|屈臣氏":{nomatch:["shop/chemist|屈臣氏"],tags:{amenity:"pharmacy",brand:"屈臣氏",healthcare:"pharmacy",name:"屈臣氏"}},"amenity/post_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~(Macau)":{countryCodes:["mo"],nomatch:["amenity/post_office|CTT~(Portugal)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q909429","brand:wikipedia":"en:CTT (Macau)",name:"CTT"}},"amenity/post_office|CTT~(Portugal)":{countryCodes:["pt"],nomatch:["amenity/post_office|CTT~(Macau)"],tags:{amenity:"post_office",brand:"CTT","brand:wikidata":"Q1024518","brand:wikipedia":"en:CTT Correios de Portugal, S.A.",name:"CTT"}},"amenity/post_office|Canada Post":{countryCodes:["ca"],nomatch:["amenity/post_box|Canada Post"],tags:{amenity:"post_office",brand:"Canada Post","brand:wikidata":"Q1032001","brand:wikipedia":"en:Canada Post",name:"Canada Post"}},"amenity/post_office|Chilexpress":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Chilexpress",name:"Chilexpress"}},"amenity/post_office|Correios":{countryCodes:["br"],tags:{amenity:"post_office",brand:"Correios","brand:wikidata":"Q3375004","brand:wikipedia":"en:Correios",name:"Correios"}},"amenity/post_office|Correo Argentino":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"Correo Argentino","brand:wikidata":"Q4036566","brand:wikipedia":"en:Correo Argentino",name:"Correo Argentino"}},"amenity/post_office|Correos de Chile":{countryCodes:["cl"],tags:{amenity:"post_office",brand:"Correos de Chile","brand:wikidata":"Q5172893","brand:wikipedia":"en:Correos de Chile",name:"Correos de Chile"}},"amenity/post_office|Correos de Costa Rica":{countryCodes:["cr"],tags:{amenity:"post_office",brand:"Correos de Costa Rica","brand:wikidata":"Q5172894","brand:wikipedia":"en:Correos de Costa Rica",name:"Correos de Costa Rica"}},"amenity/post_office|Correos de México":{countryCodes:["mx"],tags:{amenity:"post_office",brand:"Correos de México","brand:wikidata":"Q5172898","brand:wikipedia":"en:Correos de México",name:"Correos de México"}},"amenity/post_office|DHL":{matchNames:["dhl paketshop"],tags:{amenity:"post_office",brand:"DHL","brand:wikidata":"Q489815","brand:wikipedia":"en:DHL",name:"DHL"}},"amenity/post_office|DPD Paketshop":{countryCodes:["at","de","pl"],tags:{amenity:"post_office",brand:"DPD Paketshop","brand:wikidata":"Q541030","brand:wikipedia":"en:DPDgroup",name:"DPD Paketshop"}},"amenity/post_office|Deutsche Post":{countryCodes:["de"],matchNames:["deutsche post ag","deutsche post filiale"],tags:{amenity:"post_office",brand:"Deutsche Post","brand:wikidata":"Q157645","brand:wikipedia":"en:Deutsche Post",name:"Deutsche Post"}},"amenity/post_office|Fancourier":{countryCodes:["ro"],tags:{amenity:"post_office",brand:"Fancourier","brand:wikidata":"Q12727984","brand:wikipedia":"ro:FAN Courier Express",name:"Fancourier"}},"amenity/post_office|FedEx":{nomatch:["amenity/post_box|FedEx"],tags:{amenity:"post_office",brand:"FedEx","brand:wikidata":"Q459477","brand:wikipedia":"en:FedEx",name:"FedEx"}},"amenity/post_office|Hermes Paketshop":{countryCodes:["de"],matchNames:["hermes"],tags:{amenity:"post_office",brand:"Hermes Paketshop","brand:wikidata":"Q1613532","brand:wikipedia":"en:Hermes Group",name:"Hermes Paketshop"}},"amenity/post_office|LBC":{countryCodes:["ph"],matchNames:["lbc express"],tags:{amenity:"post_office",brand:"LBC","brand:wikidata":"Q17075584","brand:wikipedia":"en:LBC Express",name:"LBC"}},"amenity/post_office|La Poste":{tags:{amenity:"post_office",brand:"La Poste","brand:wikidata":"Q373724","brand:wikipedia":"fr:La Poste (entreprise française)",name:"La Poste"}},"amenity/post_office|MRW":{countryCodes:["ad","es","gi","pt","ve"],tags:{amenity:"post_office",brand:"MRW","brand:wikidata":"Q23767821","brand:wikipedia":"es:MRW",name:"MRW"}},"amenity/post_office|OCA":{countryCodes:["ar"],tags:{amenity:"post_office",brand:"OCA","brand:wikidata":"Q5172887","brand:wikipedia":"es:Correo OCA",name:"OCA"}},"amenity/post_office|Oficina de Correos":{countryCodes:["es"],matchNames:["correos"],tags:{amenity:"post_office",brand:"Oficina de Correos","brand:wikidata":"Q776605","brand:wikipedia":"es:Correos (España)",name:"Oficina de Correos"}},"amenity/post_office|PTT":{nomatch:["amenity/fuel|PTT"],tags:{amenity:"post_office",brand:"PTT",name:"PTT"}},"amenity/post_office|Poczta Polska":{countryCodes:["pl"],tags:{amenity:"post_office",brand:"Poczta Polska","brand:wikidata":"Q168833","brand:wikipedia":"pl:Poczta Polska",name:"Poczta Polska"}},"amenity/post_office|Post Office~(UK)":{countryCodes:["gb"],tags:{amenity:"post_office",brand:"Post Office","brand:wikidata":"Q1783168","brand:wikipedia":"en:Post Office Ltd",name:"Post Office"}},"amenity/post_office|PostalAnnex":{countryCodes:["us"],matchTags:["shop/post_office"],tags:{amenity:"post_office",brand:"PostalAnnex","brand:wikidata":"Q61960357",name:"PostalAnnex"}},"amenity/post_office|Postbank Finanzcenter":{tags:{amenity:"post_office",brand:"Postbank Finanzcenter",name:"Postbank Finanzcenter"}},"amenity/post_office|Poste Italiane":{countryCodes:["it"],tags:{amenity:"post_office",brand:"Poste Italiane","brand:wikidata":"Q495026","brand:wikipedia":"en:Poste italiane",name:"Poste Italiane"}},"amenity/post_office|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/pub|Ezītis miglā":{countryCodes:["lv"],tags:{amenity:"pub",brand:"Ezītis miglā",name:"Ezītis miglā"}},"amenity/pub|Walkabout":{countryCodes:["gb"],tags:{amenity:"pub",brand:"Walkabout","brand:wikidata":"Q7962149","brand:wikipedia":"en:Walkabout (pub chain)",name:"Walkabout"}},"amenity/public_bookcase|Little Free Library":{tags:{amenity:"public_bookcase",brand:"Little Free Library","brand:wikidata":"Q6650101","brand:wikipedia":"en:Little Free Library",name:"Little Free Library"}},"amenity/recycling|Planet Aid":{countryCodes:["us"],tags:{amenity:"recycling",brand:"Planet Aid","brand:wikidata":"Q7201055","brand:wikipedia":"en:Planet Aid",name:"Planet Aid","recycling:clothes":"yes","recycling:shoes":"yes",recycling_type:"container"}},"amenity/recycling|Saint Vincent de Paul":{countryCodes:["us"],matchNames:["st vincent de paul"],tags:{amenity:"recycling",brand:"Saint Vincent de Paul","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul","recycling:clothes":"yes","recycling:shoes":"yes",short_name:"SVdP"}},"amenity/recycling|The Salvation Army":{countryCodes:["us"],matchNames:["salvation army"],nomatch:["shop/charity|The Salvation Army"],tags:{amenity:"recycling",brand:"The Salvation Army","brand:wikidata":"Q188307","brand:wikipedia":"en:The Salvation Army",name:"The Salvation Army","recycling:clothes":"yes"}},"amenity/restaurant|100 Montaditos":{countryCodes:["es","it","pt"],tags:{amenity:"restaurant",brand:"100 Montaditos","brand:wikidata":"Q8355805","brand:wikipedia":"en:Cervecería 100 Montaditos",cuisine:"sandwich",name:"100 Montaditos"}},"amenity/restaurant|3 Brewers~(On)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brewers","name:fr":"3 Brasseurs",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|ASK Italian":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"ASK Italian","brand:wikidata":"Q4807056","brand:wikipedia":"en:ASK Italian",cuisine:"italian",name:"ASK Italian"}},"amenity/restaurant|Amici's East Coast Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Amici","brand:wikidata":"Q66133409",cuisine:"pizza",name:"Amici"}},"amenity/restaurant|Applebee's":{matchNames:["applebees bar and grill","applebees grill and bar","applebees neighborhood bar and grill"],tags:{amenity:"restaurant",brand:"Applebee's Neighborhood Grill & Bar","brand:wikidata":"Q621532","brand:wikipedia":"en:Applebee's",cuisine:"american",name:"Applebee's",official_name:"Applebee's Neighborhood Grill & Bar"}},"amenity/restaurant|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|Bonchon Chicken":{countryCodes:["bh","kh","kr","kw","my","ph","sg","th","us"],tags:{amenity:"restaurant",brand:"Bonchon Chicken","brand:wikidata":"Q4941248","brand:wikipedia":"en:Bonchon Chicken",cuisine:"chicken;korean;sushi",name:"Bonchon Chicken"}},"amenity/restaurant|Bonefish Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Bonefish Grill","brand:wikidata":"Q4941599","brand:wikipedia":"en:Bonefish Grill",cuisine:"seafood",name:"Bonefish Grill"}},"amenity/restaurant|Boston Pizza":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Boston Pizza","brand:wikidata":"Q894578","brand:wikipedia":"en:Boston Pizza",cuisine:"pizza",name:"Boston Pizza"}},"amenity/restaurant|Bravo":{countryCodes:["us"],nomatch:["shop/supermarket|Bravo"],tags:{alt_name:"Bravo Cucina Italiana",amenity:"restaurant",brand:"Bravo","brand:wikidata":"Q64055574",cuisine:"italian",name:"Bravo"}},"amenity/restaurant|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"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Chuck E. Cheese's","brand:wikidata":"Q2438391","brand:wikipedia":"en:Chuck E. Cheese's",cuisine:"pizza",leisure:"amusement_arcade",name:"Chuck E. Cheese's"}},"amenity/restaurant|Chuy's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Chuy's","brand:wikidata":"Q5118415","brand:wikipedia":"en:Chuy's",cuisine:"tex-mex",name:"Chuy's"}},"amenity/restaurant|Cici's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Cici's Pizza","brand:wikidata":"Q2972189","brand:wikipedia":"en:Cicis",cuisine:"pizza;buffet",name:"Cici's Pizza"}},"amenity/restaurant|Claim Jumper":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Claim Jumper","brand:wikidata":"Q5125081","brand:wikipedia":"en:Claim Jumper",cuisine:"american",name:"Claim Jumper"}},"amenity/restaurant|Coast to Coast":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Coast to Coast","brand:wikidata":"Q22000729","brand:wikipedia":"en:Coast to Coast (restaurant)",cuisine:"american",name:"Coast to Coast"}},"amenity/restaurant|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"],matchTags:["leisure/amusement_arcade"],tags:{amenity:"restaurant",brand:"Dave & Buster's","brand:wikidata":"Q5228205","brand:wikipedia":"en:Dave & Buster's",cuisine:"american",leisure:"amusement_arcade",name:"Dave & Buster's"}},"amenity/restaurant|Denny's":{tags:{amenity:"restaurant",brand:"Denny's","brand:wikidata":"Q1189695","brand:wikipedia":"en:Denny's",cuisine:"american",name:"Denny's"}},"amenity/restaurant|Dickey's Barbecue Pit":{countryCodes:["us"],matchNames:["dickeys barbecue"],tags:{amenity:"restaurant",brand:"Dickey's Barbecue Pit","brand:wikidata":"Q19880747","brand:wikipedia":"en:Dickey's Barbecue Pit",cuisine:"barbecue",name:"Dickey's Barbecue Pit"}},"amenity/restaurant|Donatos Pizza":{countryCodes:["us"],matchNames:["donatos"],tags:{amenity:"restaurant",brand:"Donatos Pizza","brand:wikidata":"Q1240741","brand:wikipedia":"en:Donatos Pizza",cuisine:"pizza",name:"Donatos Pizza",takeaway:"yes"}},"amenity/restaurant|East Side Mario's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"East Side Mario's","brand:wikidata":"Q5329375","brand:wikipedia":"en:East Side Mario's",cuisine:"italian",name:"East Side Mario's"}},"amenity/restaurant|Eat'n Park":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Eat'n Park","brand:wikidata":"Q5331211","brand:wikipedia":"en:Eat'n Park",cuisine:"american",name:"Eat'n Park"}},"amenity/restaurant|Elephant Bar":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Elephant Bar","brand:wikidata":"Q5359302","brand:wikipedia":"en:Elephant Bar",cuisine:"american",name:"Elephant Bar"}},"amenity/restaurant|Famous Dave's":{countryCodes:["us"],matchNames:["famous daves bbq"],tags:{amenity:"restaurant",brand:"Famous Dave's","brand:wikidata":"Q5433448","brand:wikipedia":"en:Famous Dave's",cuisine:"barbecue",name:"Famous Dave's"}},"amenity/restaurant|Fernandez":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Fernandez",cuisine:"steak",name:"Fernandez"}},"amenity/restaurant|First Watch":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"First Watch","brand:wikidata":"Q5454064","brand:wikipedia":"en:First Watch (restaurant chain)",cuisine:"american;breakfast",name:"First Watch"}},"amenity/restaurant|Flunch":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Flunch","brand:wikidata":"Q629326","brand:wikipedia":"en:Flunch",cuisine:"french",name:"Flunch"}},"amenity/restaurant|Foster's Hollywood":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Foster's Hollywood","brand:wikidata":"Q5864366","brand:wikipedia":"en:Foster's Hollywood",cuisine:"american",name:"Foster's Hollywood"}},"amenity/restaurant|Frankie & Benny's":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Frankie & Benny's","brand:wikidata":"Q5490892","brand:wikipedia":"en:Frankie & Benny's",cuisine:"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|IKEA Restaurant":{tags:{amenity:"restaurant",brand:"IKEA Restaurant",name:"IKEA Restaurant"}},"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'Atelier":{tags:{amenity:"restaurant",brand:"L'Atelier",name:"L'Atelier"}},"amenity/restaurant|L'Osteria":{countryCodes:["at","ch","cz","de","fr","gb","nl"],tags:{amenity:"restaurant",brand:"L'Osteria","brand:wikidata":"Q17323478","brand:wikipedia":"de:L’Osteria",cuisine:"italian",name:"L'Osteria"}},"amenity/restaurant|La Boucherie":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"La Boucherie","brand:wikidata":"Q21427479","brand:wikipedia":"fr:La Boucherie (restaurant)",cuisine:"steak_house",name:"La Boucherie"}},"amenity/restaurant|La Cage":{countryCodes:["ca"],matchNames:["La Cage aux Sports"],tags:{amenity:"restaurant",brand:"La Cage","brand:wikidata":"Q3206980","brand:wikipedia":"fr:La Cage aux Sports",cuisine:"burger;chicken;sandwich;fish;pasta",name:"La Cage"}},"amenity/restaurant|LaRosa's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LaRosa's Pizzeria","brand:wikidata":"Q6460833","brand:wikipedia":"en:LaRosa's Pizzeria",cuisine:"pizza",name:"LaRosa's Pizzeria",takeaway:"yes"}},"amenity/restaurant|Ledo Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ledo Pizza","brand:wikidata":"Q6512734","brand:wikipedia":"en:Ledo Pizza",cuisine:"pizza",name:"Ledo Pizza"}},"amenity/restaurant|Legal Sea Foods":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Legal Sea Foods","brand:wikidata":"Q6517417","brand:wikipedia":"en:Legal Sea Foods",cuisine:"seafood",name:"Legal Sea Foods"}},"amenity/restaurant|Les 3 Brasseurs~(Qc,Br,Fr)":{countryCodes:["br","ca","fr"],matchNames:["3 Brasseurs"],tags:{amenity:"restaurant",brand:"3 Brasseurs","brand:wikidata":"Q3230326","brand:wikipedia":"fr:Les 3 Brasseurs",cuisine:"burger;pizza;seafood",name:"3 Brasseurs","name:en":"3 Brewers",official_name:"Les 3 Brasseurs"}},"amenity/restaurant|Logan's Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Logan's Roadhouse","brand:wikidata":"Q6666872","brand:wikipedia":"en:Logan's Roadhouse",cuisine:"american",name:"Logan's Roadhouse"}},"amenity/restaurant|LongHorn Steakhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"LongHorn Steakhouse","brand:wikidata":"Q3259007","brand:wikipedia":"en:LongHorn Steakhouse",cuisine:"steak_house",name:"LongHorn Steakhouse"}},"amenity/restaurant|Lou Malnati's Pizzeria":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Lou Malnati's Pizzeria","brand:wikidata":"Q6685628","brand:wikipedia":"en:Lou Malnati's Pizzeria",cuisine:"pizza",name:"Lou Malnati's Pizzeria"}},"amenity/restaurant|Loving Hut":{tags:{amenity:"restaurant",brand:"Loving Hut","brand:wikidata":"Q3491655","brand:wikipedia":"en:Loving Hut",cuisine:"international","diet:vegan":"only","diet:vegetarian":"only",name:"Loving Hut"}},"amenity/restaurant|Luby's":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Luby's","brand:wikidata":"Q6695701","brand:wikipedia":"en:Luby's",cuisine:"american",name:"Luby's"}},"amenity/restaurant|Léon de Bruxelles":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Léon de Bruxelles","brand:wikidata":"Q21041507","brand:wikipedia":"en:Léon de Bruxelles",cuisine:"friture",name:"Léon de Bruxelles"}},"amenity/restaurant|MK Restaurants":{countryCodes:["th"],tags:{amenity:"restaurant",brand:"MK Restaurants","brand:wikidata":"Q62075359",cuisine:"thai",name:"MK Restaurants"}},"amenity/restaurant|Marco's Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Marco's Pizza","brand:wikidata":"Q6757382","brand:wikipedia":"en:Marco's Pizza",cuisine:"pizza",name:"Marco's Pizza"}},"amenity/restaurant|Marie Callender's":{countryCodes:["mx","us"],matchNames:["marie calendar","marie calendar's","marie callendar's"],tags:{amenity:"restaurant",brand:"Marie Callender's","brand:wikidata":"Q6762784","brand:wikipedia":"en:Marie Callender's",cuisine:"american",name:"Marie Callender's"}},"amenity/restaurant|Max's Restaurant":{countryCodes:["ph"],matchNames:["Max's"],tags:{amenity:"restaurant",brand:"Max's Restaurant","brand:wikidata":"Q6794477","brand:wikipedia":"en:Max's Restaurant",cuisine:"asian",name:"Max's Restaurant"}},"amenity/restaurant|McAlister's Deli":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"McAlister's Deli","brand:wikidata":"Q17020829","brand:wikipedia":"en:McAlister's Deli",cuisine:"sandwich",name:"McAlister's Deli"}},"amenity/restaurant|McCormick & Schmick's":{countryCodes:["us"],matchNames:["mccormick and schmick","mccormick and schmicks grill"],tags:{amenity:"restaurant",brand:"McCormick & Schmick's","brand:wikidata":"Q6800562","brand:wikipedia":"en:McCormick & Schmick's",cuisine:"seafood;steak",name:"McCormick & Schmick's"}},"amenity/restaurant|Mellow Mushroom":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mellow Mushroom","brand:wikidata":"Q17021360","brand:wikipedia":"en:Mellow Mushroom",cuisine:"pizza",name:"Mellow Mushroom"}},"amenity/restaurant|Migros Restaurant":{tags:{amenity:"restaurant",brand:"Migros Restaurant",name:"Migros Restaurant"}},"amenity/restaurant|Mikes":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Mikes","brand:wikidata":"Q3313615","brand:wikipedia":"fr:Mikes",cuisine:"pizza;pasta;sandwich",name:"Mikes"}},"amenity/restaurant|Mimi's Cafe":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Mimi's Cafe","brand:wikidata":"Q17022081","brand:wikipedia":"en:Mimi's Cafe",cuisine:"french",name:"Mimi's Cafe"}},"amenity/restaurant|Montana's":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Montana's","brand:wikidata":"Q17022490","brand:wikipedia":"en:Montana's BBQ & Bar",cuisine:"barbecue",name:"Montana's",official_name:"Montana's BBQ & Bar"}},"amenity/restaurant|Morton's The Steakhouse":{countryCodes:["us"],matchNames:["mortons"],tags:{amenity:"restaurant",brand:"Morton's The Steakhouse","brand:wikidata":"Q17022759","brand:wikipedia":"en:Morton's The Steakhouse",cuisine:"steak_house",name:"Morton's The Steakhouse"}},"amenity/restaurant|Moses":{countryCodes:["il"],tags:{amenity:"restaurant",brand:"Moses","brand:en":"Moses","brand:he":"מוזס","brand:wikidata":"Q64760150",cuisine:"burger",name:"Moses","name:en":"Moses","name:he":"מוזס"}},"amenity/restaurant|Mountain Mike's":{countryCodes:["us"],tags:{alt_name:"Mountain Mike's Pizza",amenity:"restaurant",brand:"Mountain Mike's","brand:wikidata":"Q6925120","brand:wikipedia":"en:Mountain Mike's Pizza",cuisine:"pizza",name:"Mountain Mike's",takeaway:"yes"}},"amenity/restaurant|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|Peter Piper Pizza":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Peter Piper Pizza","brand:wikidata":"Q7176401",cuisine:"pizza",name:"Peter Piper Pizza"}},"amenity/restaurant|Phở 24":{countryCodes:["vn"],tags:{amenity:"restaurant",brand:"Phở 24","brand:wikidata":"Q63863118",cuisine:"vietnamese;noodle",name:"Phở 24","name:en":"Pho 24","name:vi":"Phở 24"}},"amenity/restaurant|Phở Hòa":{countryCodes:["ca","id","kr","ms","ph","tw","us"],tags:{alt_name:"Phở Hoà","alt_name:en":"Pho Hoa","alt_name:vi":"Phở Hoà",amenity:"restaurant",brand:"Phở Hòa","brand:wikidata":"Q55629932","brand:wikipedia":"en:Phở Hòa",cuisine:"vietnamese;noodle",name:"Phở Hòa","name:vi":"Phở Hòa"}},"amenity/restaurant|Pieology Pizzeria":{countryCodes:["us"],matchNames:["pieology"],tags:{amenity:"restaurant",brand:"Pieology Pizzeria","brand:wikidata":"Q60746053","brand:wikipedia":"en:Pieology",cuisine:"pizza",name:"Pieology Pizzeria"}},"amenity/restaurant|Pizza 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|Sonny's BBQ":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Sonny's BBQ","brand:wikidata":"Q7561989","brand:wikipedia":"en:Sonny's BBQ",cuisine:"bbq",name:"Sonny's BBQ"}},"amenity/restaurant|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|Stoney River":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Stoney River","brand:wikidata":"Q7619422","brand:wikipedia":"en:Stoney River Legendary Steaks",cuisine:"steak_house",name:"Stoney River"}},"amenity/restaurant|Sunset Grill":{countryCodes:["ca","us"],tags:{amenity:"restaurant",brand:"Sunset Grill","brand:wikidata":"Q62112489","brand:wikipedia":"en:Sunset Grill (Canadian restaurant chain)",cuisine:"american",name:"Sunset Grill"}},"amenity/restaurant|Swiss Chalet":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Swiss Chalet","brand:wikidata":"Q2372909","brand:wikipedia":"en:Swiss Chalet",cuisine:"chicken",name:"Swiss Chalet"}},"amenity/restaurant|TGI Friday's":{tags:{amenity:"restaurant",brand:"TGI Friday's","brand:wikidata":"Q1524184","brand:wikipedia":"en:TGI Fridays",cuisine:"american",name:"TGI Friday's"}},"amenity/restaurant|Ted's Montana Grill":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Ted's Montana Grill","brand:wikidata":"Q16953170","brand:wikipedia":"en:Ted's Montana Grill",cuisine:"american",name:"Ted's Montana Grill"}},"amenity/restaurant|Tempero Manero":{countryCodes:["br"],tags:{amenity:"restaurant",brand:"Tempero Manero",cuisine:"brazilian",name:"Tempero Manero"}},"amenity/restaurant|Texas Roadhouse":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Texas Roadhouse","brand:wikidata":"Q7707945","brand:wikipedia":"en:Texas Roadhouse",cuisine:"steak_house",name:"Texas Roadhouse"}},"amenity/restaurant|The Cheesecake Factory":{countryCodes:["us"],tags:{alt_name:"Cheesecake Factory",amenity:"restaurant",brand:"The Cheesecake Factory","brand:wikidata":"Q1045842","brand:wikipedia":"en:The Cheesecake Factory",cuisine:"american",name:"The Cheesecake Factory"}},"amenity/restaurant|The Keg":{countryCodes:["ca","us"],matchNames:["keg"],tags:{amenity:"restaurant",brand:"The Keg","brand:wikidata":"Q7744066","brand:wikipedia":"en:The Keg",cuisine:"steak_house",name:"The Keg"}},"amenity/restaurant|The Melting Pot":{countryCodes:["us"],tags:{alt_name:"Melting Pot",amenity:"restaurant",brand:"The Melting Pot","brand:wikidata":"Q7750948","brand:wikipedia":"en:The Melting Pot (restaurant)",cuisine:"fondue",name:"The Melting Pot"}},"amenity/restaurant|The Original Pancake House":{countryCodes:["jp","kr","us"],matchNames:["original pancake house"],tags:{amenity:"restaurant",brand:"The Original Pancake House","brand:wikidata":"Q7755384","brand:wikipedia":"en:The Original Pancake House",cuisine:"breakfast;pancake",name:"The Original Pancake House"}},"amenity/restaurant|Tinseltown":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Tinseltown",cuisine:"american",name:"Tinseltown"}},"amenity/restaurant|Toby Carvery":{countryCodes:["gb"],matchTags:["amenity/pub"],tags:{amenity:"restaurant",brand:"Toby Carvery","brand:wikidata":"Q7811777","brand:wikipedia":"en:Toby Carvery",cuisine:"british",name:"Toby Carvery"}},"amenity/restaurant|Toks":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Toks","brand:wikidata":"Q48835586","brand:wikipedia":"en:Toks",cuisine:"mexican",name:"Toks"}},"amenity/restaurant|Tony Roma's":{matchNames:["tony roma"],tags:{amenity:"restaurant",brand:"Tony Roma's","brand:wikidata":"Q2213883","brand:wikipedia":"en:Tony Roma's",cuisine:"barbecue",name:"Tony Roma's"}},"amenity/restaurant|Topper's Pizza~(Canada)":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Topper's Pizza","brand:wikidata":"Q7825105","brand:wikipedia":"en:Topper's Pizza (Canadian restaurant)",cuisine:"pizza",name:"Topper's Pizza"}},"amenity/restaurant|Toppers Pizza~(USA)":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Toppers Pizza","brand:wikidata":"Q7825113","brand:wikipedia":"en:Toppers Pizza (American restaurant)",cuisine:"pizza",name:"Toppers Pizza"}},"amenity/restaurant|Unos":{tags:{amenity:"restaurant",brand:"Unos","brand:wikidata":"Q7897209","brand:wikipedia":"en:Uno Pizzeria & Grill",cuisine:"pizza",name:"Unos"}},"amenity/restaurant|Vapiano":{tags:{amenity:"restaurant",brand:"Vapiano","brand:wikidata":"Q506252","brand:wikipedia":"en:Vapiano",cuisine:"italian",name:"Vapiano"}},"amenity/restaurant|Village Inn":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Village Inn","brand:wikidata":"Q7930659","brand:wikipedia":"en:Village Inn",cuisine:"american",name:"Village Inn"}},"amenity/restaurant|Vips~(Asia)":{countryCodes:["cn","kr"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q12599540","brand:wikipedia":"ko:빕스",cuisine:"salad;steak_house",name:"Vips"}},"amenity/restaurant|Vips~(Mexico)":{countryCodes:["mx"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q48783378","brand:wikipedia":"es:Vips",cuisine:"mexican",name:"Vips"}},"amenity/restaurant|Vips~(Spain)":{countryCodes:["es"],tags:{amenity:"restaurant",brand:"Vips","brand:wikidata":"Q66087862",cuisine:"international",name:"Vips"}},"amenity/restaurant|Waffle House":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Waffle House","brand:wikidata":"Q1701206","brand:wikipedia":"en:Waffle House",cuisine:"american",name:"Waffle House",opening_hours:"24/7"}},"amenity/restaurant|Wagamama":{tags:{amenity:"restaurant",brand:"Wagamama","brand:wikidata":"Q503715","brand:wikipedia":"en:Wagamama",cuisine:"asian",name:"Wagamama"}},"amenity/restaurant|Wasabi":{tags:{amenity:"restaurant",brand:"Wasabi","brand:wikidata":"Q23891278","brand:wikipedia":"en:Wasabi (restaurant)",cuisine:"japanese",name:"Wasabi"}},"amenity/restaurant|Western Sizzlin'":{countryCodes:["us"],matchNames:["western sizzling"],tags:{amenity:"restaurant",brand:"Western Sizzlin'","brand:wikidata":"Q7988295","brand:wikipedia":"en:Western Sizzlin'",cuisine:"american;steak",name:"Western Sizzlin'"}},"amenity/restaurant|White Spot":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"White Spot","brand:wikidata":"Q7995414","brand:wikipedia":"en:White Spot",cuisine:"burger",name:"White Spot"}},"amenity/restaurant|Wild Wing":{countryCodes:["ca"],tags:{amenity:"restaurant",brand:"Wild Wing","brand:wikidata":"Q8000869","brand:wikipedia":"en:Wild Wing Restaurants",cuisine:"chicken",name:"Wild Wing"}},"amenity/restaurant|YO! Sushi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"YO! Sushi","brand:wikidata":"Q3105441","brand:wikipedia":"en:YO! Sushi",cuisine:"sushi",name:"YO! Sushi"}},"amenity/restaurant|Yard House":{countryCodes:["us"],tags:{alcohol:"yes",amenity:"restaurant",brand:"Yard House","brand:wikidata":"Q21189156","brand:wikipedia":"en:Yard House",cuisine:"american",name:"Yard House"}},"amenity/restaurant|Zizzi":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Zizzi","brand:wikidata":"Q8072944","brand:wikipedia":"en:Zizzi",cuisine:"italian",name:"Zizzi"}},"amenity/restaurant|bd's Mongolian Grill":{countryCodes:["mn","us"],matchNames:["bd Mongolian Grill"],tags:{amenity:"restaurant",brand:"bd's Mongolian Grill","brand:wikidata":"Q69890408",cuisine:"mongolian_bbq",name:"bd's Mongolian Grill"}},"amenity/restaurant|dean&david":{countryCodes:["at","ch","de","lu","qa"],tags:{amenity:"restaurant",brand:"dean&david","brand:wikidata":"Q66132404",cuisine:"salad;sandwich",name:"dean&david"}},"amenity/restaurant|Евразия~(Russia)":{countryCodes:["ru"],tags:{amenity:"restaurant",brand:"Евразия","brand:wikidata":"Q66087936",cuisine:"international",name:"Евразия"}},"amenity/restaurant|Евразия~(Ukraine)":{countryCodes:["ua"],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":"Asakuma","brand:ja":"あさくま","brand:wikidata":"Q11257174","brand:wikipedia":"ja:あさくま",cuisine:"steak_house",name:"あさくま","name:en":"Asakuma","name:ja":"あさくま"}},"amenity/restaurant|いきなり!ステーキ":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"いきなり!ステーキ","brand:en":"Ikinari Steak","brand:ja":"いきなり!ステーキ","brand:wikidata":"Q21652405","brand:wikipedia":"ja:いきなり!ステーキ",cuisine:"steak_house",name:"いきなり!ステーキ","name:en":"Ikinari Steak","name:ja":"いきなり!ステーキ"}},"amenity/restaurant|とんでん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"とんでん","brand:ja":"とんでん",name:"とんでん","name:ja":"とんでん"}},"amenity/restaurant|はなまるうどん":{countryCodes:["jp"],tags:{amenity:"restaurant",brand:"はなまるうどん","brand:en":"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|Lions Clubs International":{matchNames:["lions club","lions club international","lions clubs"],tags:{amenity:"social_centre",brand:"Lions Clubs International","brand:wikidata":"Q270029","brand:wikipedia":"en:Lions Clubs International",name:"Lions Clubs International"}},"amenity/social_centre|Moose Lodge":{countryCodes:["bm","ca","us"],matchNames:["moose"],tags:{amenity:"social_centre",brand:"Loyal Order of Moose","brand:wikidata":"Q6908585","brand:wikipedia":"en:Loyal Order of Moose",name:"Moose Lodge",official_name:"Loyal Order of Moose"}},"amenity/social_centre|Odd Fellows Hall":{matchNames:["odd fellow","odd fellows"],tags:{amenity:"social_centre",brand:"Independent Order of Odd Fellows","brand:wikidata":"Q1425508","brand:wikipedia":"en:Independent Order of Odd Fellows",name:"Odd Fellows Hall",official_name:"Independent Order of Odd Fellows",short_name:"IOOF"}},"amenity/social_centre|Orioles Nest":{countryCodes:["us"],matchNames:["fraternal order of orioles","oriole nest","orioles"],tags:{amenity:"social_centre",brand:"Fraternal Order Orioles","brand:wikidata":"Q5493805","brand:wikipedia":"en:Fraternal Order Orioles",name:"Orioles Nest",official_name:"Fraternal Order Orioles",short_name:"FOO"}},"amenity/social_centre|Royal Canadian Legion Hall":{countryCodes:["ca"],tags:{amenity:"social_centre",brand:"Royal Canadian Legion","brand:wikidata":"Q3270231","brand:wikipedia":"en:Royal Canadian Legion",name:"Royal Canadian Legion Hall",short_name:"RCL"}},"amenity/social_centre|VFW Post":{countryCodes:["de","jp","kr","ph","th","us"],tags:{amenity:"social_centre",brand:"Veterans of Foreign Wars of the United States","brand:wikidata":"Q3556413","brand:wikipedia":"en:Veterans of Foreign Wars",name:"VFW Post","name:en":"VFW Post",official_name:"Veterans of Foreign Wars of the United States",short_name:"VFW","social_centre:for":"veterans"}},"amenity/social_facility|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"}},"craft/window_construction|K par K":{countryCodes:["fr"],tags:{brand:"K par K","brand:wikidata":"Q3191596","brand:wikipedia":"fr:K par K",craft:"window_construction",name:"K par K"}},"healthcare/blood_donation|American Red Cross":{countryCodes:["us"],tags:{brand:"American Red Cross","brand:wikidata":"Q470110","brand:wikipedia":"en:The American National Red Cross","donation:compensation":"no",healthcare:"blood_donation",name:"American Red Cross",official_name:"The American National Red Cross",short_name:"Red Cross"}},"healthcare/blood_donation|Australian Red Cross Blood Service":{countryCodes:["au"],tags:{brand:"Australian Red Cross Blood Service","brand:wikidata":"Q4824602","brand:wikipedia":"en:Australian Red Cross Blood Service","donation:compensation":"no",healthcare:"blood_donation",name:"Australian Red Cross Blood Service",short_name:"Blood Service"}},"healthcare/blood_donation|Thai Red Cross Society":{countryCodes:["th"],tags:{brand:"Thai Red Cross Society","brand:wikidata":"Q4922087","brand:wikipedia":"en:Thai Red Cross Society","donation:compensation":"no",healthcare:"blood_donation",name:"Thai Red Cross Society",short_name:"Thai Red Cross"}},"healthcare/counselling|Jenny Craig":{countryCodes:["au","ca","nz","us"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{brand:"Jenny Craig","brand:wikidata":"Q6179221","brand:wikipedia":"en:Jenny Craig, Inc.",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"Jenny Craig"}},"healthcare/counselling|WW Studio":{matchNames:["ww"],matchTags:["amenity/doctors","amenity/weight_clinic","leisure/fitness_centre","office/therapist","shop/beauty","shop/diet","shop/food","shop/health_food","shop/herbalist","shop/nutrition","shop/nutrition_supplements","shop/weight_loss"],tags:{alt_name:"Weight Watchers",brand:"WW Studio","brand:wikidata":"Q1929466","brand:wikipedia":"en:WW International",healthcare:"counselling","healthcare:counselling":"dietitian","healthcare:speciality":"weight_loss",name:"WW Studio"}},"landuse/residential|Avalon":{countryCodes:["us"],tags:{brand:"Avalon","brand:wikidata":"Q64665938",landuse:"residential",name:"Avalon",residential:"apartments"}},"leisure/bowling_alley|Strike Bowling Bar":{countryCodes:["au"],tags:{brand:"Strike Bowling Bar","brand:wikidata":"Q7623769","brand:wikipedia":"en:Strike Bowling Bar",leisure:"bowling_alley",name:"Strike Bowling Bar"}},"leisure/dog_park|Kamp K9":{countryCodes:["ca","us"],matchTags:["leisure/park"],tags:{brand:"KOA","brand:wikidata":"Q16988635","brand:wikipedia":"en:Kampgrounds of America",leisure:"dog_park",name:"Kamp K9"}},"leisure/escape_game|Escapology":{countryCodes:["us"],matchTags:["tourism/attraction"],tags:{brand:"Escapology","brand:wikidata":"Q64137163",leisure:"escape_game",name:"Escapology"}},"leisure/fitness_centre|24 Hour Fitness":{countryCodes:["us"],tags:{brand:"24 Hour Fitness","brand:wikidata":"Q4631849","brand:wikipedia":"en:24 Hour Fitness",leisure:"fitness_centre",name:"24 Hour Fitness"}},"leisure/fitness_centre|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":{countryCodes:["br","cl","co","do","mx","pe"],tags:{brand:"Smart Fit","brand:wikidata":"Q30930959","brand:wikipedia":"pt:Smart Fit",leisure:"fitness_centre",name:"Smart Fit"}},"leisure/fitness_centre|Snap Fitness":{tags:{brand:"Snap Fitness","brand:wikidata":"Q7547254","brand:wikipedia":"en:Snap Fitness",leisure:"fitness_centre",name:"Snap Fitness"}},"leisure/fitness_centre|SoulCycle":{countryCodes:["ca","us"],tags:{brand:"SoulCycle","brand:wikidata":"Q17084730","brand:wikipedia":"en:SoulCycle",leisure:"fitness_centre",name:"SoulCycle",sport:"cycling"}},"leisure/fitness_centre|カーブス":{countryCodes:["jp"],tags:{brand:"カーブス","brand:en":"Curves","brand:ja":"カーブス","brand:wikidata":"Q5196080","brand:wikipedia":"ja:カーブス",leisure:"fitness_centre",name:"カーブス","name:en":"Curves","name:ja":"カーブス"}},"leisure/playground|McDonald's PlayPlace":{matchNames:["mcdonald's"],tags:{access:"customers",brand:"McDonald's","brand:wikidata":"Q38076","brand:wikipedia":"en:McDonald's",leisure:"playground",name:"McDonald's PlayPlace"}},"leisure/sports_centre|YMCA":{tags:{brand:"YMCA","brand:wikidata":"Q157169","brand:wikipedia":"en:YMCA",leisure:"sports_centre",name:"YMCA"}},"leisure/sports_centre|iFLY":{tags:{brand:"iFLY","brand:wikidata":"Q64767105",leisure:"sports_centre",name:"iFLY",sport:"indoor_skydiving"}},"office/bail_bond_agent|Aladdin Bail Bonds":{countryCodes:["us"],matchNames:["aladdin","aladin bail bonds","alladin bail bonds"],matchTags:["amenity/bail_bond","amenity/bail_bonds","office/bail_bond","office/bail_bonds","shop/bail_bond","shop/bail_bonds","shop/money_lender"],tags:{brand:"Aladdin Bail Bonds","brand:wikidata":"Q64166257","brand:wikipedia":"en:Aladdin Bail Bonds",name:"Aladdin Bail Bonds",office:"bail_bond_agent",opening_hours:"24/7"}},"office/coworking|Awfis":{countryCodes:["in"],tags:{brand:"Awfis","brand:wikidata":"Q60747757","brand:wikipedia":"en:Awfis",fee:"yes",name:"Awfis",office:"coworking"}},"office/coworking|Ucommune~(China)":{countryCodes:["cn"],tags:{brand:"优客工场","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"优客工场","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Hong Kong)":{countryCodes:["hk"],tags:{brand:"優客工場 Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場 Ucommune","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|Ucommune~(Singapore)":{countryCodes:["sg"],tags:{brand:"Ucommune","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"优客工场","brand:zh-Hans":"优客工场",fee:"yes",name:"Ucommune","name:en":"Ucommune","name:zh":"优客工场","name:zh-Hans":"优客工场",office:"coworking"}},"office/coworking|Ucommune~(Taiwan)":{countryCodes:["tw"],tags:{brand:"優客工場","brand:en":"Ucommune","brand:wikidata":"Q60785187","brand:wikipedia":"en:Ucommune","brand:zh":"優客工場","brand:zh-Hans":"优客工场","brand:zh-Hant":"優客工場",fee:"yes",name:"優客工場","name:en":"Ucommune","name:zh":"優客工場","name:zh-Hans":"优客工场","name:zh-Hant":"優客工場",office:"coworking"}},"office/coworking|WeWork":{countryCodes:["us"],tags:{brand:"WeWork","brand:wikidata":"Q19995004","brand:wikipedia":"en:WeWork",fee:"yes",name:"WeWork",office:"coworking"}},"office/employment_agency|Adecco":{tags:{brand:"Adecco","brand:wikidata":"Q353494","brand:wikipedia":"en:The Adecco Group",name:"Adecco",office:"employment_agency"}},"office/employment_agency|Agentur für Arbeit":{countryCodes:["de"],tags:{brand:"Agentur für Arbeit","brand:wikidata":"Q1478016","brand:wikipedia":"de:Bundesagentur für Arbeit",name:"Agentur für Arbeit",office:"employment_agency"}},"office/employment_agency|Appel Médical":{countryCodes:["fr"],tags:{brand:"Appel Médical",name:"Appel Médical",office:"employment_agency"}},"office/employment_agency|Jobcentre Plus":{countryCodes:["gb"],tags:{brand:"Jobcentre Plus","brand:wikidata":"Q6206793","brand:wikipedia":"en:Jobcentre Plus",name:"Jobcentre Plus",office:"employment_agency"}},"office/employment_agency|Manpower":{tags:{brand:"Manpower","brand:wikidata":"Q1472539","brand:wikipedia":"en:ManpowerGroup",name:"Manpower",office:"employment_agency"}},"office/employment_agency|Pôle Emploi":{countryCodes:["fr"],tags:{brand:"Pôle Emploi","brand:wikidata":"Q8901192","brand:wikipedia":"en:Pôle emploi",name:"Pôle Emploi",office:"employment_agency"}},"office/employment_agency|Randstad":{tags:{brand:"Randstad","brand:wikidata":"Q267840","brand:wikipedia":"en:Randstad Holding",name:"Randstad",office:"employment_agency"}},"office/energy_supplier|Naturgy":{countryCodes:["ar","au","be","br","cl","cn","cr","de","do","dz","eg","es","fr","ie","in","jm","jo","jp","lu","ma","mx","nl","om","pa","pe","pk","pr","pt","sg","uk"],tags:{brand:"Naturgy","brand:wikidata":"Q474690","brand:wikipedia":"es:Naturgy",name:"Naturgy",office:"energy_supplier"}},"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","brand:wikidata":"Q5161738","brand:wikipedia":"en:Connells Group",name:"Connells",office:"estate_agent"}},"office/estate_agent|Engel & Völkers":{tags:{brand:"Engel & Völkers","brand:wikidata":"Q1341765","brand:wikipedia":"en:Engel & Völkers",name:"Engel & Völkers",office:"estate_agent"}},"office/estate_agent|Foncia":{countryCodes:["fr"],tags:{brand:"Foncia","brand:wikidata":"Q1435638","brand:wikipedia":"fr:Foncia",name:"Foncia",office:"estate_agent"}},"office/estate_agent|Foxtons":{countryCodes:["gb"],tags:{brand:"Foxtons","brand:wikidata":"Q5477251","brand:wikipedia":"en:Foxtons",name:"Foxtons",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":{countryCodes:["gb"],matchNames:["hamptons international lettings","hamptons international sales"],tags:{brand:"Hamptons International","brand:wikidata":"Q5646350","brand:wikipedia":"en:Hamptons International",name:"Hamptons International",office:"estate_agent",short_name:"Hamptons"}},"office/estate_agent|Laforêt":{countryCodes:["fr"],tags:{brand:"Laforêt","brand:wikidata":"Q56310946","brand:wikipedia":"fr:Laforêt (immobilier)",name:"Laforêt",office:"estate_agent"}},"office/estate_agent|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","brand:wikidata":"Q2399658","brand:wikipedia":"de: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:en":"Apaman Shop","brand:ja":"アパマンショップ","brand:wikidata":"Q11284512","brand:wikipedia":"ja:Apaman Network",name:"アパマンショップ","name:en":"Apaman Shop","name:ja":"アパマンショップ",office:"estate_agent"}},"office/estate_agent|エイブル":{countryCodes:["jp"],tags:{brand:"エイブル","brand:en":"Able","brand:ja":"エイブル","brand:wikidata":"Q11289620","brand:wikipedia":"ja:エイブル",name:"エイブル","name:en":"Able","name:ja":"エイブル",office:"estate_agent"}},"office/estate_agent|ピタットハウス":{countryCodes:["jp"],matchNames:["ピタットハウスネットワーク"],tags:{brand:"ピタットハウス","brand:en":"Pitat House","brand:ja":"ピタットハウス","brand:wikidata":"Q11331484","brand:wikipedia":"ja:ピタットハウスネットワーク",name:"ピタットハウス","name:en":"Pitat House","name:ja":"ピタットハウス",office:"estate_agent"}},"office/estate_agent|信義房屋":{countryCodes:["tw"],tags:{brand:"信義房屋","brand:en":"Sinyi Realty","brand:wikidata":"Q10888034","brand:wikipedia":"zh:信義房屋","brand:zh":"信義房屋",name:"信義房屋","name:en":"Sinyi Realty","name:zh":"信義房屋",office:"estate_agent"}},"office/estate_agent|永慶房屋":{countryCodes:["tw"],tags:{brand:"永慶房屋","brand:en":"Yung Ching","brand:wikidata":"Q11132113","brand:wikipedia":"zh:永慶房屋","brand:zh":"永慶房屋",name:"永慶房屋","name:en":"Yung Ching","name:zh":"永慶房屋",office:"estate_agent"}},"office/financial_advisor|Edward Jones":{countryCodes:["ca","us"],tags:{alt_name:"Edward Jones Investments",brand:"Edward Jones","brand:wikidata":"Q5343830","brand:wikipedia":"en:Edward Jones Investments",name:"Edward Jones",office:"financial_advisor"}},"office/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|Bâloise":{tags:{brand:"Bâloise","brand:wikidata":"Q457912","brand:wikipedia":"en:Bâloise",name:"Bâloise",office:"insurance"}},"office/insurance|CUK Ubezpieczenia":{countryCodes:["pl"],tags:{brand:"CUK Ubezpieczenia",name:"CUK Ubezpieczenia",office:"insurance"}},"office/insurance|DAK":{countryCodes:["de"],tags:{brand:"DAK","brand:wikidata":"Q1151671","brand:wikipedia":"de:DAK-Gesundheit",name:"DAK",office:"insurance"}},"office/insurance|DEVK":{countryCodes:["de"],tags:{brand:"DEVK","brand:wikidata":"Q1153049","brand:wikipedia":"de:DEVK",name:"DEVK",office:"insurance"}},"office/insurance|Debeka":{countryCodes:["de"],tags:{brand:"Debeka","brand:wikidata":"Q1181452","brand:wikipedia":"de:Debeka",name:"Debeka",office:"insurance"}},"office/insurance|Erie Insurance":{countryCodes:["us"],matchNames:["erie"],tags:{brand:"Erie Insurance","brand:wikidata":"Q5388314","brand:wikipedia":"en:Erie Insurance Group",name:"Erie Insurance",office:"insurance"}},"office/insurance|Farmers Insurance":{countryCodes:["us"],matchNames:["farmers"],tags:{brand:"Farmers Insurance","brand:wikidata":"Q1396863","brand:wikipedia":"en:Farmers Insurance Group",name:"Farmers Insurance",office:"insurance"}},"office/insurance|Foyer":{countryCodes:["lu"],tags:{brand:"Foyer","brand:wikidata":"Q1344573","brand:wikipedia":"lb:Foyer",name:"Foyer",office:"insurance"}},"office/insurance|GEICO":{countryCodes:["us"],tags:{brand:"GEICO","brand:wikidata":"Q1498689","brand:wikipedia":"en:GEICO",name:"GEICO",office:"insurance"}},"office/insurance|GMF":{countryCodes:["fr"],tags:{brand:"GMF","brand:wikidata":"Q3095296","brand:wikipedia":"fr:Garantie mutuelle des fonctionnaires",name:"GMF",office:"insurance"}},"office/insurance|Generali":{tags:{brand:"Generali","brand:wikidata":"Q670482","brand:wikipedia":"it:Assicurazioni Generali",name:"Generali",office:"insurance"}},"office/insurance|Grange Insurance":{countryCodes:["us"],matchNames:["grange"],tags:{brand:"Grange Insurance","brand:wikidata":"Q17183481","brand:wikipedia":"en:Grange Insurance",name:"Grange Insurance",office:"insurance"}},"office/insurance|Groupama":{matchTags:["amenity/bank|Groupama"],tags:{brand:"Groupama","brand:wikidata":"Q3083531","brand:wikipedia":"fr:Groupama",name:"Groupama",office:"insurance",official_name:"Groupe des Assurances Mutuelles Agricoles"}},"office/insurance|HUK-Coburg":{countryCodes:["de"],tags:{brand:"HUK-Coburg",name:"HUK-Coburg",office:"insurance"}},"office/insurance|Harmonie Mutuelle":{countryCodes:["fr"],tags:{brand:"Harmonie Mutuelle","brand:wikidata":"Q3127528","brand:wikipedia":"fr:Harmonie mutuelle",name:"Harmonie Mutuelle",office:"insurance"}},"office/insurance|Knappschaft":{countryCodes:["de"],tags:{brand:"Knappschaft","brand:wikidata":"Q1313465","brand:wikipedia":"de:Knappschaft (Krankenkasse)",name:"Knappschaft",office:"insurance"}},"office/insurance|LaLux":{countryCodes:["lu"],matchNames:["La Luxembourgeoise"],tags:{brand:"LaLux","brand:wikipedia":"lb:La Luxembourgeoise",name:"LaLux",office:"insurance"}},"office/insurance|MAAF":{countryCodes:["fr"],tags:{brand:"MAAF","brand:wikidata":"Q3331028","brand:wikipedia":"fr:Mutuelle d'assurance des artisans de France",name:"MAAF",office:"insurance"}},"office/insurance|MMA":{countryCodes:["fr"],tags:{brand:"MMA","brand:wikidata":"Q3331046","brand:wikipedia":"fr:MMA (assurance)",name:"MMA",office:"insurance",official_name:"Mutuelles du Mans Assurances"}},"office/insurance|Macif":{countryCodes:["fr"],tags:{brand:"Macif","brand:wikidata":"Q3331021","brand:wikipedia":"fr:Mutuelle assurance des commerçants et industriels de France et des cadres et des salariés de l'industrie et du commerce",name:"Macif",office:"insurance"}},"office/insurance|Maif":{countryCodes:["fr"],tags:{brand:"Maif","brand:wikidata":"Q3331029","brand:wikipedia":"fr:Mutuelle d'assurance des instituteurs de France",name:"Maif",office:"insurance",official_name:"Mutuelle d'assurance des instituteurs de France"}},"office/insurance|Mapfre":{tags:{brand:"Mapfre","brand:wikidata":"Q544532","brand:wikipedia":"en:Mapfre",name:"Mapfre",office:"insurance"}},"office/insurance|Matmut":{countryCodes:["fr"],tags:{brand:"Matmut","brand:wikidata":"Q3299185","brand:wikipedia":"fr:Matmut",name:"Matmut",office:"insurance"}},"office/insurance|Nationwide":{countryCodes:["us"],matchNames:["nationwide insurance"],nomatch:["amenity/bank|Nationwide"],tags:{brand:"Nationwide","brand:wikidata":"Q6979886","brand:wikipedia":"en:Nationwide Mutual Insurance Company",name:"Nationwide",office:"insurance"}},"office/insurance|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|SV SparkassenVersicherung":{countryCodes:["de"],tags:{brand:"SV SparkassenVersicherung","brand:wikidata":"Q2208645","brand:wikipedia":"de:SV SparkassenVersicherung",name:"SV SparkassenVersicherung",office:"insurance"}},"office/insurance|State Farm":{countryCodes:["us"],matchNames:["state farm insurance"],tags:{brand:"State Farm","brand:wikidata":"Q2007336","brand:wikipedia":"en:State Farm",name:"State Farm",office:"insurance"}},"office/insurance|Swinton":{countryCodes:["gb"],tags:{brand:"Swinton","brand:wikidata":"Q7658785","brand:wikipedia":"en:Swinton Insurance",name:"Swinton",office:"insurance"}},"office/insurance|Techniker Krankenkasse":{countryCodes:["de"],tags:{brand:"Techniker Krankenkasse","brand:wikidata":"Q607531","brand:wikipedia":"de:Techniker Krankenkasse",name:"Techniker Krankenkasse",office:"insurance"}},"office/insurance|The Co-operators":{countryCodes:["ca"],tags:{brand:"The Co-operators","brand:wikidata":"Q3520320","brand:wikipedia":"en:The Co-operators",name:"The Co-operators",office:"insurance"}},"office/insurance|Tranquilidade":{countryCodes:["pt"],tags:{brand:"Tranquilidade Seguros","brand:wikidata":"Q7833457","brand:wikipedia":"en:Tranquilidade",name:"Tranquilidade",office:"insurance"}},"office/insurance|Wüstenrot":{countryCodes:["at","cz","de","sk"],tags:{brand:"Wüstenrot",name:"Wüstenrot",office:"insurance"}},"office/insurance|Zurich":{tags:{brand:"Zurich","brand:wikidata":"Q230426","brand:wikipedia":"en:Zurich Insurance Group",name:"Zurich",office:"insurance"}},"office/insurance|Белгосстрах":{countryCodes:["by"],tags:{brand:"Белгосстрах",name:"Белгосстрах",office:"insurance"}},"office/insurance|Ингосстрах":{countryCodes:["ru"],tags:{brand:"Ингосстрах","brand:en":"Ingosstrakh","brand:ru":"Ингосстрах","brand:wikidata":"Q4200631","brand:wikipedia":"ru:Ингосстрах",name:"Ингосстрах","name:en":"Ingosstrakh","name:ru":"Ингосстрах",office:"insurance"}},"office/insurance|РЕСО-Гарантия":{countryCodes:["ru"],tags:{brand:"РЕСО-Гарантия","brand:en":"RESO-Guarantee","brand:ru":"РЕСО-Гарантия","brand:wikidata":"Q4386516","brand:wikipedia":"ru:РЕСО-Гарантия",name:"РЕСО-Гарантия","name:en":"RESO-Guarantee","name:ru":"РЕСО-Гарантия",office:"insurance"}},"office/insurance|Росгосстрах":{countryCodes:["ru"],tags:{brand:"Росгосстрах","brand:wikidata":"Q4397745","brand:wikipedia":"en:Rosgosstrakh",name:"Росгосстрах",office:"insurance"}},"office/insurance|Согласие":{countryCodes:["ru"],tags:{brand:"Согласие","brand:en":"Soglasie","brand:ru":"Согласие","brand:wikidata":"Q4426689","brand:wikipedia":"ru:Согласие (компания)",name:"Согласие","name:en":"Soglasie","name:ru":"Согласие",office:"insurance"}},"office/insurance|بیمه ایران":{countryCodes:["ir"],tags:{brand:"بیمه ایران","brand:en":"Iran Insurance","brand:fa":"بیمه ایران","brand:wikidata":"Q5930269","brand:wikipedia":"fa:بیمه ایران",name:"بیمه ایران","name:en":"Iran Insurance","name:fa":"بیمه ایران",office:"insurance"}},"office/tax_advisor|Block Advisors":{countryCodes:["us"],tags:{brand:"Block Advisors","brand:wikidata":"Q64166231",name:"Block Advisors",office:"tax_advisor"}},"office/tax_advisor|H&R Block":{countryCodes:["au","ca","in","us"],tags:{brand:"H&R Block","brand:wikidata":"Q5627799","brand:wikipedia":"en:H&R Block",name:"H&R Block",office:"tax_advisor"}},"office/tax_advisor|Jackson Hewitt":{countryCodes:["us"],tags:{brand:"Jackson Hewitt","brand:wikidata":"Q6117132","brand:wikipedia":"en:Jackson Hewitt",name:"Jackson Hewitt",office:"tax_advisor",official_name:"Jackson Hewitt Tax Service"}},"office/tax_advisor|Liberty Tax":{countryCodes:["us"],tags:{alt_name:"Liberty Tax Service",brand:"Liberty Tax","brand:wikidata":"Q6541978","brand:wikipedia":"en:Liberty Tax Service",name:"Liberty Tax",office:"tax_advisor"}},"shop/agrarian|Granngården":{countryCodes:["se"],tags:{brand:"Granngården","brand:wikidata":"Q10508136","brand:wikipedia":"sv:Granngården AB",name:"Granngården",shop:"agrarian"}},"shop/agrarian|Southern States":{countryCodes:["us"],tags:{agrarian:"seed;feed;tools",brand:"Southern States","brand:wikidata":"Q7570508","brand:wikipedia":"en:Southern States Cooperative",name:"Southern States",official_name:"Southern States Cooperative",shop:"agrarian"}},"shop/alcohol|Alko":{countryCodes:["fi"],tags:{brand:"Alko","brand:wikidata":"Q1849187","brand:wikipedia":"en:Alko",name:"Alko",shop:"alcohol"}},"shop/alcohol|BC Liquor Store":{countryCodes:["ca"],tags:{brand:"BC Liquor Store","brand:wikidata":"Q43079557","brand:wikipedia":"en:BC Liquor Stores",name:"BC Liquor Store",shop:"alcohol"}},"shop/alcohol|BWS":{countryCodes:["au"],tags:{brand:"BWS","brand:wikidata":"Q4836848","brand:wikipedia":"en:BWS (liquor retailer)",name:"BWS",shop:"alcohol"}},"shop/alcohol|Bargain Booze":{countryCodes:["gb"],tags:{brand:"Bargain Booze","brand:wikidata":"Q16971315","brand:wikipedia":"en:Bargain Booze",name:"Bargain Booze",shop:"alcohol"}},"shop/alcohol|BevMo!":{countryCodes:["us"],tags:{brand:"BevMo!","brand:wikidata":"Q4899308","brand:wikipedia":"en:BevMo!",name:"BevMo!",shop:"alcohol"}},"shop/alcohol|Cellarbrations":{countryCodes:["au"],tags:{brand:"Cellarbrations",name:"Cellarbrations",shop:"alcohol"}},"shop/alcohol|Dan Murphy's":{countryCodes:["au"],tags:{brand:"Dan Murphy's","brand:wikidata":"Q5214075","brand:wikipedia":"en:Dan Murphy's",name:"Dan Murphy's",shop:"alcohol"}},"shop/alcohol|Fine Wine & Good Spirits":{countryCodes:["us"],tags:{brand:"Fine Wine & Good Spirits","brand:wikidata":"Q64514776",name:"Fine Wine & Good Spirits",shop:"alcohol"}},"shop/alcohol|Gall & Gall":{countryCodes:["nl"],tags:{brand:"Gall & Gall","brand:wikidata":"Q13639185","brand:wikipedia":"nl:Gall & Gall",name:"Gall & Gall",shop:"alcohol"}},"shop/alcohol|LCBO":{countryCodes:["ca"],tags:{brand:"LCBO","brand:wikidata":"Q845263","brand:wikipedia":"en:Liquor Control Board of Ontario",name:"LCBO",shop:"alcohol"}},"shop/alcohol|Liquor Depot":{countryCodes:["ca"],tags:{brand:"Liquor Depot",name:"Liquor Depot",shop:"alcohol"}},"shop/alcohol|Liquorland":{countryCodes:["au"],tags:{brand:"Liquorland","brand:wikidata":"Q2283837","brand:wikipedia":"en:Liquorland",name:"Liquorland",shop:"alcohol"}},"shop/alcohol|Majestic":{countryCodes:["gb"],matchNames:["majestic wine","majestic wine warehouse"],tags:{brand:"Majestic","brand:wikidata":"Q6737725","brand:wikipedia":"en:Majestic Wine",name:"Majestic",shop:"alcohol"}},"shop/alcohol|Mitra":{countryCodes:["nl"],tags:{brand:"Mitra",name:"Mitra",shop:"alcohol"}},"shop/alcohol|Nicolas":{countryCodes:["be","fr","gb"],tags:{brand:"Nicolas","brand:wikidata":"Q3340012","brand:wikipedia":"en:Nicolas (wine retailer)",name:"Nicolas",shop:"alcohol"}},"shop/alcohol|Oddbins":{countryCodes:["gb"],tags:{brand:"Oddbins","brand:wikidata":"Q7077472","brand:wikipedia":"en:Oddbins",name:"Oddbins",shop:"alcohol"}},"shop/alcohol|SAQ":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ Express","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ",shop:"alcohol"}},"shop/alcohol|SAQ Express":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Sélection"],tags:{brand:"SAQ Express","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Express",shop:"alcohol"}},"shop/alcohol|SAQ Sélection":{countryCodes:["ca"],nomatch:["shop/alcohol|SAQ","shop/alcohol|SAQ Express"],tags:{brand:"SAQ Sélection","brand:wikidata":"Q3488077","brand:wikipedia":"en:Société des alcools du Québec",name:"SAQ Sélection",shop:"alcohol"}},"shop/alcohol|Spec's":{countryCodes:["us"],tags:{brand:"Spec's","brand:wikidata":"Q7574415","brand:wikipedia":"en:Spec's Wine, Spirits & Finer Foods",name:"Spec's",shop:"alcohol"}},"shop/alcohol|Super Liquor":{countryCodes:["nz"],tags:{brand:"Super Liquor",name:"Super Liquor",shop:"alcohol"}},"shop/alcohol|Systembolaget":{countryCodes:["se"],tags:{brand:"Systembolaget","brand:wikidata":"Q1476113","brand:wikipedia":"en:Systembolaget",name:"Systembolaget",shop:"alcohol"}},"shop/alcohol|The Beer Store":{countryCodes:["ca"],tags:{brand:"The Beer Store","brand:wikidata":"Q16243674","brand:wikipedia":"en:The Beer Store",name:"The Beer Store",shop:"alcohol"}},"shop/alcohol|Thirsty Camel":{countryCodes:["au"],tags:{brand:"Thirsty Camel",name:"Thirsty Camel",shop:"alcohol"}},"shop/alcohol|Total Wine":{countryCodes:["us"],tags:{brand:"Total Wine","brand:wikidata":"Q7828084","brand:wikipedia":"en:Total Wine & More",name:"Total Wine",official_name:"Total Wine & More",shop:"alcohol"}},"shop/alcohol|Virginia ABC":{countryCodes:["us"],tags:{brand:"Virginia ABC","brand:wikidata":"Q7934236","brand:wikipedia":"en:Virginia Alcoholic Beverage Control Authority",name:"Virginia ABC",shop:"alcohol"}},"shop/alcohol|Алкомаркет":{countryCodes:["kz"],tags:{brand:"Алкомаркет",name:"Алкомаркет",shop:"alcohol"}},"shop/alcohol|Ароматный мир":{countryCodes:["ru"],tags:{brand:"Ароматный мир",name:"Ароматный мир",shop:"alcohol"}},"shop/alcohol|Бристоль":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Бристоль","brand:wikidata":"Q59155583","brand:wikipedia":"ru:Бристоль (сеть магазинов)",name:"Бристоль",shop:"alcohol"}},"shop/alcohol|Винлаб":{countryCodes:["ru"],tags:{brand:"Винлаб",name:"Винлаб",shop:"alcohol"}},"shop/alcohol|Горилка":{countryCodes:["kz","ru"],tags:{brand:"Горилка",name:"Горилка",shop:"alcohol"}},"shop/alcohol|Градус":{countryCodes:["ru","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|Zippy":{countryCodes:["es","pt"],tags:{brand:"Zippy","brand:wikidata":"Q10395161","brand:wikipedia":"en:Zippy Kidstore",name:"Zippy",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|Armbruster":{countryCodes:["de"],tags:{brand:"Armbruster","brand:wikidata":"Q67987954",name:"Armbruster",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|BreadTalk":{countryCodes:["sg"],tags:{brand:"BreadTalk","brand:wikidata":"Q1106640","brand:wikipedia":"en:BreadTalk",name:"BreadTalk",shop:"bakery"}},"shop/bakery|Breadtop":{countryCodes:["au"],tags:{brand:"Breadtop","brand:wikidata":"Q4959217","brand:wikipedia":"en:Breadtop",cuisine:"chinese",name:"Breadtop",shop:"bakery"}},"shop/bakery|Bäckerei Fuchs":{countryCodes:["de"],tags:{brand:"Bäckerei Fuchs","brand:wikidata":"Q42825993","brand:wikipedia":"de:Harald Fuchs Bäckerei – Konditorei",name:"Bäckerei Fuchs",shop:"bakery"}},"shop/bakery|Bäckerei Grimminger":{countryCodes:["de"],tags:{brand:"Bäckerei Grimminger",name:"Bäckerei Grimminger",shop:"bakery"}},"shop/bakery|Bäckerei Schmidt":{countryCodes:["de"],tags:{brand:"Bäckerei Schmidt",name:"Bäckerei Schmidt",shop:"bakery"}},"shop/bakery|Bäckerei Schneider":{countryCodes:["de"],tags:{brand:"Bäckerei Schneider",name:"Bäckerei Schneider",shop:"bakery"}},"shop/bakery|Büsch":{countryCodes:["de"],tags:{brand:"Büsch",name:"Büsch",shop:"bakery"}},"shop/bakery|COBS Bread":{countryCodes:["ca","us"],tags:{brand:"COBS Bread","brand:wikidata":"Q4849261","brand:wikipedia":"en:Bakers Delight",name:"COBS Bread",shop:"bakery"}},"shop/bakery|Cadera":{countryCodes:["de"],tags:{brand:"Cadera","brand:wikidata":"Q62086410",name:"Cadera",shop:"bakery"}},"shop/bakery|Cooplands":{countryCodes:["gb"],tags:{brand:"Cooplands","brand:wikidata":"Q5167971","brand:wikipedia":"en:Cooplands",name:"Cooplands",shop:"bakery"}},"shop/bakery|Dat Backhus":{countryCodes:["de"],tags:{brand:"Dat Backhus","brand:wikidata":"Q62093175",name:"Dat Backhus",shop:"bakery"}},"shop/bakery|Der Beck":{countryCodes:["de"],tags:{brand:"Der Beck","brand:wikidata":"Q1192443","brand:wikipedia":"en:Der Beck",name:"Der Beck",shop:"bakery"}},"shop/bakery|Der Mann":{countryCodes:["at"],tags:{brand:"Der Mann",name:"Der Mann",shop:"bakery"}},"shop/bakery|Ditsch":{countryCodes:["de"],tags:{brand:"Ditsch","brand:wikidata":"Q911573","brand:wikipedia":"en:Ditsch",name:"Ditsch",shop:"bakery"}},"shop/bakery|Fischer":{countryCodes:["be","fr","lu"],tags:{brand:"Fischer","brand:wikipedia":"lb:Panelux",name:"Fischer",shop:"bakery"}},"shop/bakery|Fornetti":{tags:{brand:"Fornetti","brand:wikidata":"Q1003020","brand:wikipedia":"en:Fornetti",name:"Fornetti",shop:"bakery"}},"shop/bakery|Goeken backen":{countryCodes:["de"],tags:{brand:"Goeken backen",name:"Goeken backen",shop:"bakery"}},"shop/bakery|Goldilocks":{countryCodes:["ca","ph","th","us"],tags:{brand:"Goldilocks","brand:wikidata":"Q5580198","brand:wikipedia":"en:Goldilocks Bakeshop",name:"Goldilocks",shop:"bakery"}},"shop/bakery|Granier":{countryCodes:["es"],tags:{brand:"Granier",name:"Granier",shop:"bakery"}},"shop/bakery|Great Harvest Bread Company":{countryCodes:["us"],tags:{brand:"Great Harvest Bread Company","brand:wikidata":"Q5599297","brand:wikipedia":"en:Great Harvest Bread Company",name:"Great Harvest Bread Company",shop:"bakery"}},"shop/bakery|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|Il Fornaio":{tags:{brand:"Il Fornaio",name:"Il Fornaio",shop:"bakery"}},"shop/bakery|Julie's Bakeshop":{countryCodes:["ph"],tags:{brand:"Julie's Bakeshop",name:"Julie's Bakeshop",shop:"bakery"}},"shop/bakery|K&U Bäckerei":{countryCodes:["de"],matchNames:["k&u"],tags:{brand:"K&U Bäckerei","brand:wikidata":"Q1719433","brand:wikipedia":"de:K & U Bäckerei",name:"K&U Bäckerei",shop:"bakery"}},"shop/bakery|Kamps":{countryCodes:["de"],tags:{brand:"Kamps","brand:wikidata":"Q1723381","brand:wikipedia":"de:Kamps (Unternehmen)",name:"Kamps",shop:"bakery"}},"shop/bakery|La Mie Câline":{countryCodes:["fr"],tags:{brand:"La Mie Câline","brand:wikidata":"Q3210704","brand:wikipedia":"fr:La Mie câline",name:"La Mie Câline",shop:"bakery"}},"shop/bakery|Le Crobag":{countryCodes:["at","de","pl","ru"],tags:{brand:"Le Crobag","brand:wikidata":"Q1558025","brand:wikipedia":"de:Le Crobag",name:"Le Crobag",shop:"bakery"}},"shop/bakery|Le Fournil":{countryCodes:["fr"],tags:{brand:"Le Fournil",name:"Le Fournil",shop:"bakery"}},"shop/bakery|Leifert":{countryCodes:["de"],matchNames:["bäckerei leifert"],tags:{brand:"Leifert","brand:wikidata":"Q66086129",name:"Leifert",shop:"bakery"}},"shop/bakery|Lila Bäcker":{countryCodes:["de"],tags:{brand:"Lila Bäcker","brand:wikidata":"Q57516591",name:"Lila Bäcker",shop:"bakery"}},"shop/bakery|Lipóti Pékség":{countryCodes:["hu"],tags:{brand:"Lipóti Pékség",name:"Lipóti Pékség",shop:"bakery"}},"shop/bakery|Löwenbäcker Schaper":{countryCodes:["de"],matchNames:["schaper"],tags:{brand:"Löwenbäcker Schaper","brand:wikidata":"Q62075965",name:"Löwenbäcker Schaper",shop:"bakery"}},"shop/bakery|Marie Blachère":{countryCodes:["fr"],tags:{brand:"Marie Blachère","brand:wikidata":"Q62082410","brand:wikipedia":"fr:Marie Blachère",name:"Marie Blachère",shop:"bakery"}},"shop/bakery|Milkau":{countryCodes:["de"],tags:{brand:"Milkau","brand:wikidata":"Q66208652",name:"Milkau",shop:"bakery"}},"shop/bakery|Mlinar":{countryCodes:["ba","hr","sl"],tags:{brand:"Mlinar","brand:wikidata":"Q62082464",name:"Mlinar",shop:"bakery"}},"shop/bakery|Musmanni":{countryCodes:["cr"],tags:{brand:"Musmanni","brand:wikidata":"Q19382082","brand:wikipedia":"no:Musmanni",name:"Musmanni",shop:"bakery"}},"shop/bakery|Nothing Bundt Cakes":{countryCodes:["ca","us"],tags:{brand:"Nothing Bundt Cakes","brand:wikidata":"Q62082526",name:"Nothing Bundt Cakes",shop:"bakery"}},"shop/bakery|Nur Hier":{countryCodes:["de"],tags:{brand:"Nur Hier",name:"Nur Hier",shop:"bakery"}},"shop/bakery|Oebel":{countryCodes:["de"],tags:{brand:"Oebel",name:"Oebel",shop:"bakery"}},"shop/bakery|Pan de Manila":{countryCodes:["ph"],tags:{brand:"Pan de Manila",name:"Pan de Manila",shop:"bakery"}},"shop/bakery|Paris Baguette~(worldwide)":{countryCodes:["sg","us","vn"],matchNames:["paris baguette cafe"],nomatch:["shop/bakery|巴黎贝甜","shop/bakery|파리바게뜨"],tags:{brand:"Paris Baguette","brand:wikidata":"Q62605260",name:"Paris Baguette",shop:"bakery"}},"shop/bakery|Paul":{tags:{brand:"Paul","brand:wikidata":"Q3370417","brand:wikipedia":"en:Paul (bakery)",name:"Paul",shop:"bakery"}},"shop/bakery|Peter's gute Backstube":{countryCodes:["de"],tags:{brand:"Peter's gute Backstube","brand:wikidata":"Q67987587",name:"Peter's gute Backstube",shop:"bakery"}},"shop/bakery|Red Ribbon":{countryCodes:["ph","us"],tags:{brand:"Red Ribbon","brand:wikidata":"Q7304789","brand:wikipedia":"en:Red Ribbon Bakeshop",name:"Red Ribbon",shop:"bakery"}},"shop/bakery|Richters Altstadt-Bäckerei":{countryCodes:["de"],tags:{brand:"Richters Altstadt-Bäckerei","brand:wikidata":"Q66212346",name:"Richters Altstadt-Bäckerei",shop:"bakery"}},"shop/bakery|Ronde des Pains":{countryCodes:["be","fr"],tags:{brand:"Ronde des Pains","brand:wikidata":"Q3441707","brand:wikipedia":"fr:Ronde des Pains",name:"Ronde des Pains",shop:"bakery"}},"shop/bakery|Schäfer's":{countryCodes:["de"],tags:{brand:"Schäfer's","brand:wikidata":"Q1464562","brand:wikipedia":"de:Schäfers Brot",name:"Schäfer's",shop:"bakery"}},"shop/bakery|Sehne":{countryCodes:["de"],tags:{brand:"Sehne","brand:wikidata":"Q1314761","brand:wikipedia":"de:Sehne Backwaren",name:"Sehne",shop:"bakery"}},"shop/bakery|Starke Bäcker":{countryCodes:["de"],tags:{brand:"Starke Bäcker","brand:wikidata":"Q66133336",name:"Starke Bäcker",shop:"bakery"}},"shop/bakery|Steinecke":{countryCodes:["de"],tags:{brand:"Steinecke","brand:wikidata":"Q57516278","brand:wikipedia":"de:Meisterbäckerei Steinecke",name:"Steinecke",shop:"bakery"}},"shop/bakery|Sternenbäck":{countryCodes:["de"],tags:{brand:"Sternenbäck","brand:wikidata":"Q62595021",name:"Sternenbäck",shop:"bakery"}},"shop/bakery|Ströck":{countryCodes:["at"],tags:{brand:"Ströck","brand:wikidata":"Q2357607","brand:wikipedia":"de:Ströck-Brot",name:"Ströck",shop:"bakery"}},"shop/bakery|Upper Crust":{tags:{brand:"Upper Crust","brand:wikidata":"Q7898585","brand:wikipedia":"en:Upper Crust (restaurant chain)",name:"Upper Crust",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"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Indigo Sun","brand:wikidata":"Q63436906",name:"Indigo Sun",shop:"beauty"}},"shop/beauty|Nails for You":{tags:{beauty:"nails",brand:"Nails for You",name:"Nails for You",shop:"beauty"}},"shop/beauty|Palm Beach Tan":{countryCodes:["us"],matchTags:["leisure/tanning_salon","shop/solarium"],tags:{beauty:"tanning",brand:"Palm Beach Tan","brand:wikidata":"Q64027086","brand:wikipedia":"en:Palm Beach Tan",name:"Palm Beach Tan",shop:"beauty"}},"shop/beauty|Perfect Brows NYC":{countryCodes:["us"],matchNames:["Perfect Brows"],tags:{beauty:"eyebrow;eyelash;waxing",brand:"Perfect Brows NYC",name:"Perfect Brows NYC",shop:"beauty"}},"shop/beauty|Sola Salons":{countryCodes:["us"],matchNames:["sola","sola salon studios"],tags:{beauty:"hair;nails;skin_care;massage",brand:"Sola Salons","brand:wikidata":"Q64337426",name:"Sola Salons",shop:"beauty"}},"shop/beauty|Star Nails":{tags:{beauty:"nails",brand:"Star Nails",name:"Star Nails",shop:"beauty"}},"shop/beauty|The Skin Bar at Ulta Beauty":{countryCodes:["us"],nomatch:["shop/beauty|Ulta Beauty","shop/cosmetics|Ulta Beauty"],tags:{alt_name:"Ulta Skin Bar",beauty:"skin_care",brand:"Ulta Beauty","brand:wikidata":"Q7880076","brand:wikipedia":"en:Ulta Beauty",name:"The Skin Bar at Ulta Beauty",shop:"beauty"}},"shop/beauty|Yves Rocher":{matchTags:["shop/chemist","shop/cosmetics"],tags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595","brand:wikipedia":"en:Yves Rocher (company)",name:"Yves Rocher",shop:"beauty"}},"shop/bed|Bensons for Beds":{countryCodes:["gb"],matchNames:["bensons"],tags:{brand:"Bensons for Beds","brand:wikidata":"Q4890299","brand:wikipedia":"en:Bensons for Beds",name:"Bensons for Beds",shop:"bed"}},"shop/bed|Beter Bed":{countryCodes:["be","nl"],tags:{brand:"Beter Bed","brand:wikidata":"Q831076","brand:wikipedia":"nl:Beter Bed",name:"Beter Bed",shop:"bed"}},"shop/bed|Casper":{tags:{brand:"Casper","brand:wikidata":"Q20539294","brand:wikipedia":"en:Casper Sleep",name:"Casper",shop:"bed"}},"shop/bed|Dreams":{countryCodes:["gb"],tags:{brand:"Dreams","brand:wikidata":"Q5306688","brand:wikipedia":"en:Dreams (bed retailer)",name:"Dreams",shop:"bed"}},"shop/bed|Matratzen Concord":{countryCodes:["at","ch","de"],tags:{brand:"Matratzen Concord","brand:wikidata":"Q18629057","brand:wikipedia":"de:Matratzen Concord",name:"Matratzen Concord",shop:"bed"}},"shop/bed|Mattress Firm":{countryCodes:["us"],matchNames:["sleepys"],tags:{brand:"Mattress Firm","brand:wikidata":"Q6791878","brand:wikipedia":"en:Mattress Firm",name:"Mattress Firm",shop:"bed"}},"shop/bed|Mattress Warehouse":{countryCodes:["us"],tags:{brand:"Mattress Warehouse","brand:wikidata":"Q61995079",name:"Mattress Warehouse",shop:"bed"}},"shop/bed|Sleep Country":{countryCodes:["ca"],matchNames:["Sleep Country Canada"],tags:{brand:"Sleep Country","brand:wikidata":"Q7539684","brand:wikipedia":"en:Sleep Country Canada",name:"Sleep Country",shop:"bed"}},"shop/bed|Sleep Experts":{countryCodes:["us"],tags:{brand:"Sleep Experts","brand:wikidata":"Q7539688","brand:wikipedia":"en:Sleep Experts",name:"Sleep Experts",shop:"bed"}},"shop/bed|Sleep Number":{countryCodes:["us"],tags:{brand:"Sleep Number","brand:wikidata":"Q7447640","brand:wikipedia":"en:Sleep Number",name:"Sleep Number",shop:"bed"}},"shop/beverages|50嵐":{countryCodes:["cn","tw"],tags:{brand:"50嵐",name:"50嵐",shop:"beverages"}},"shop/beverages|Dursty":{countryCodes:["de"],tags:{brand:"Dursty","brand:wikidata":"Q1267518","brand:wikipedia":"de:Dursty Getränkemärkte",name:"Dursty",shop:"beverages"}},"shop/beverages|Edeka Getränkemarkt":{countryCodes:["de"],tags:{brand:"Edeka Getränkemarkt","brand:wikidata":"Q57450576",name:"Edeka Getränkemarkt",shop:"beverages"}},"shop/beverages|Fristo":{countryCodes:["at","de"],matchNames:["fristo getränkemarkt"],tags:{brand:"Fristo","brand:wikidata":"Q1465151","brand:wikipedia":"de:Fristo",name:"Fristo",shop:"beverages"}},"shop/beverages|Getränke Hoffmann":{countryCodes:["de"],tags:{brand:"Getränke Hoffmann","brand:wikidata":"Q19284021","brand:wikipedia":"de:Getränke Hoffmann",name:"Getränke Hoffmann",shop:"beverages"}},"shop/beverages|Getränkeland":{countryCodes:["de"],tags:{brand:"Getränkeland","brand:wikidata":"Q62594849",name:"Getränkeland",shop:"beverages"}},"shop/beverages|Hol'ab":{countryCodes:["de"],tags:{brand:"Hol'ab","brand:wikidata":"Q57557270",name:"Hol'ab",shop:"beverages"}},"shop/beverages|Orterer Getränkemarkt":{countryCodes:["de"],tags:{brand:"Orterer Getränkemarkt","brand:wikidata":"Q23787118","brand:wikipedia":"de:Orterer Gruppe",name:"Orterer Getränkemarkt",shop:"beverages"}},"shop/beverages|Rewe Getränkemarkt":{countryCodes:["de"],tags:{brand:"Rewe Getränkemarkt","brand:wikidata":"Q57519344",name:"Rewe Getränkemarkt",shop:"beverages"}},"shop/beverages|Trinkgut":{countryCodes:["de"],tags:{brand:"Trinkgut","brand:wikidata":"Q2453627","brand:wikipedia":"de:Trinkgut",name:"Trinkgut",shop:"beverages"}},"shop/beverages|大苑子":{tags:{brand:"大苑子","brand:en":"DaYung's","brand:wikipedia":"zh:大苑子","brand:zh":"大苑子",name:"大苑子","name:en":"DaYung's","name:zh":"大苑子",shop:"beverages"}},"shop/beverages|清心福全":{countryCodes:["tw"],tags:{brand:"清心福全","brand:en":"Ching Shin","brand:wikidata":"Q10391229","brand:wikipedia":"zh:清心福全冷飲站","brand:zh":"清心福全",name:"清心福全","name:en":"Ching Shin","name:zh":"清心福全",shop:"beverages"}},"shop/beverages|茶湯會":{countryCodes:["tw"],tags:{brand:"茶湯會",name:"茶湯會",shop:"beverages"}},"shop/bicycle|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:wikidata":"Q2007823","brand:wikipedia":"el:ΟΠΑΠ",name:"ΟΠΑΠ",shop:"bookmaker"}},"shop/bookmaker|Лига ставок":{countryCodes:["ru"],tags:{brand:"Лига ставок","brand:en":"Liga Stavok","brand:ru":"Лига ставок","brand:wikidata":"Q6545804","brand:wikipedia":"ru:Лига Ставок",name:"Лига ставок","name:en":"Liga Stavok","name:ru":"Лига ставок",shop:"bookmaker"}},"shop/bookmaker|Фонбет":{countryCodes:["ru"],tags:{brand:"Фонбет","brand:en":"Fonbet","brand:ru":"Фонбет","brand:wikidata":"Q49137910","brand:wikipedia":"ru:Фонбет",name:"Фонбет","name:en":"Fonbet","name:ru":"Фонбет",shop:"bookmaker"}},"shop/books|Akademibokhandeln":{countryCodes:["se"],tags:{brand:"Akademibokhandeln","brand:wikidata":"Q10403918","brand:wikipedia":"sv:Akademibokhandeln",name:"Akademibokhandeln",shop:"books"}},"shop/books|Akateeminen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Akateeminen Kirjakauppa","brand:wikidata":"Q10403942","brand:wikipedia":"fi:Akateeminen Kirjakauppa",name:"Akateeminen Kirjakauppa",shop:"books"}},"shop/books|Barnes & Noble":{countryCodes:["us"],tags:{brand:"Barnes & Noble","brand:wikidata":"Q795454","brand:wikipedia":"en:Barnes & Noble",name:"Barnes & Noble",shop:"books"}},"shop/books|Bertrand":{countryCodes:["pt"],tags:{brand:"Bertrand","brand:wikidata":"Q1866547","brand:wikipedia":"en:Livraria Bertrand",name:"Bertrand",shop:"books"}},"shop/books|Books-A-Million":{countryCodes:["us"],tags:{brand:"Books-A-Million","brand:wikidata":"Q4943266","brand:wikipedia":"en:Books-A-Million",name:"Books-A-Million",shop:"books"}},"shop/books|Bruna":{countryCodes:["nl"],tags:{brand:"Bruna","brand:wikidata":"Q3317555","brand:wikipedia":"en:Bruna (company)",name:"Bruna",shop:"books"}},"shop/books|Chapters":{countryCodes:["ca","us"],tags:{brand:"Chapters","brand:wikidata":"Q5073540","brand:wikipedia":"en:Chapters (bookstore)",name:"Chapters",shop:"books"}},"shop/books|Coles":{countryCodes:["ca"],nomatch:["amenity/fuel|Coles Express","shop/convenience|Coles Express","shop/supermarket|Coles"],tags:{brand:"Coles","brand:wikidata":"Q5144641","brand:wikipedia":"en:Coles (bookstore)",name:"Coles",shop:"books"}},"shop/books|Cultura":{countryCodes:["fr"],tags:{brand:"Cultura","brand:wikidata":"Q3007154","brand:wikipedia":"fr:Cultura",name:"Cultura",shop:"books"}},"shop/books|Empik":{countryCodes:["pl"],tags:{brand:"Empik","brand:wikidata":"Q3045978","brand:wikipedia":"pl:Empik",name:"Empik",shop:"books"}},"shop/books|Fnac":{countryCodes:["be","ch","es","fr","nl","pt"],tags:{brand:"Fnac","brand:wikidata":"Q676585","brand:wikipedia":"en:Fnac",name:"Fnac",shop:"books"}},"shop/books|Gramedia":{countryCodes:["id"],tags:{brand:"Gramedia","brand:wikidata":"Q19646130","brand:wikipedia":"id:Gramedia (toko buku)",name:"Gramedia",shop:"books"}},"shop/books|Half Price Books":{countryCodes:["us"],tags:{brand:"Half Price Books","brand:wikidata":"Q5641744","brand:wikipedia":"en:Half Price Books",name:"Half Price Books",shop:"books"}},"shop/books|Hugendubel":{countryCodes:["de"],tags:{brand:"Hugendubel","brand:wikidata":"Q1634142","brand:wikipedia":"en:Hugendubel",name:"Hugendubel",shop:"books"}},"shop/books|Indigo":{countryCodes:["ca","us"],tags:{alt_name:"!ndigo",brand:"Indigo","brand:wikidata":"Q2477358","brand:wikipedia":"en:Indigo Books and Music",name:"Indigo",shop:"books"}},"shop/books|Libro":{countryCodes:["at"],tags:{brand:"Libro","brand:wikidata":"Q1823138","brand:wikipedia":"de:Libro",name:"Libro",shop:"books"}},"shop/books|Mondadori":{countryCodes:["it"],tags:{brand:"Mondadori","brand:wikidata":"Q85355","brand:wikipedia":"en:Arnoldo Mondadori Editore",name:"Mondadori",shop:"books"}},"shop/books|National Book Store":{countryCodes:["ph"],tags:{brand:"National Book Store","brand:wikidata":"Q6971094","brand:wikipedia":"en:National Book Store",name:"National Book Store",shop:"books"}},"shop/books|Osiander":{countryCodes:["de"],tags:{brand:"Osiander","brand:wikidata":"Q1800686","brand:wikipedia":"de:Osiandersche Buchhandlung",name:"Osiander",shop:"books"}},"shop/books|Oxfam Bookshop":{countryCodes:["gb"],tags:{brand:"Oxfam Bookshop","brand:wikidata":"Q7115196","brand:wikipedia":"en:Oxfam bookshops",name:"Oxfam Bookshop",shop:"books"}},"shop/books|Seagull Book":{countryCodes:["us"],tags:{brand:"Seagull Book","brand:wikidata":"Q7440458","brand:wikipedia":"en:Seagull Book",name:"Seagull Book",shop:"books"}},"shop/books|Standaard Boekhandel":{countryCodes:["be"],tags:{brand:"Standaard Boekhandel","brand:wikidata":"Q3496554","brand:wikipedia":"nl:Standaard Boekhandel",name:"Standaard Boekhandel",shop:"books"}},"shop/books|Suomalainen Kirjakauppa":{countryCodes:["fi"],tags:{brand:"Suomalainen Kirjakauppa","brand:wikidata":"Q7641808","brand:wikipedia":"fi:Suomalainen Kirjakauppa",name:"Suomalainen Kirjakauppa",shop:"books"}},"shop/books|TSUTAYA":{countryCodes:["jp"],nomatch:["shop/music|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"books"}},"shop/books|Thalia":{countryCodes:["at","ch","de"],tags:{brand:"Thalia","brand:wikidata":"Q2408854","brand:wikipedia":"de:Thalia Bücher",name:"Thalia",shop:"books"}},"shop/books|The Works":{countryCodes:["gb","ie"],tags:{brand:"The Works","brand:wikidata":"Q7775853","brand:wikipedia":"en:The Works (retailer)",name:"The Works",shop:"books"}},"shop/books|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":"Books Onion","brand:ja":"オリオン書房","brand:wikidata":"Q11292597","brand:wikipedia":"ja:オリオン書房",name:"オリオン書房","name:en":"Books Onion","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"],matchNames:["文教堂書店"],tags:{brand:"文教堂","brand:en":"Bunkyodo","brand:ja":"文教堂","brand:wikidata":"Q11499974","brand:wikipedia":"ja:文教堂",name:"文教堂","name:en":"Bunkyodo","name:ja":"文教堂",shop:"books"}},"shop/books|新华书店":{countryCodes:["cn"],tags:{brand:"新华书店","brand:en":"Xinhua Bookstore","brand:wikidata":"Q6124193","brand:wikipedia":"en:Xinhua Bookstore","brand:zh":"新华书店",name:"新华书店","name:en":"Xinhua Bookstore","name:zh":"新华书店",shop:"books"}},"shop/books|有隣堂":{countryCodes:["jp"],tags:{brand:"有隣堂","brand:en":"Yurindo","brand:ja":"有隣堂","brand:wikidata":"Q8061680","brand:wikipedia":"ja:有隣堂",name:"有隣堂","name:en":"Yurindo","name:ja":"有隣堂",shop:"books"}},"shop/books|未来屋書店":{countryCodes:["jp"],tags:{brand:"未来屋書店","brand:en":"Miraiya Shoten","brand:ja":"未来屋書店","brand:wikidata":"Q11519563","brand:wikipedia":"ja:未来屋書店",name:"未来屋書店","name:en":"Miraiya Shoten","name:ja":"未来屋書店",shop:"books"}},"shop/butcher|Coqivoire":{countryCodes:["ci"],tags:{brand:"Coqivoire","brand:wikidata":"Q60183284",butcher:"poultry",name:"Coqivoire",shop:"butcher"}},"shop/butcher|Fleischerei Richter":{countryCodes:["de"],tags:{brand:"Fleischerei Richter",name:"Fleischerei Richter",shop:"butcher"}},"shop/butcher|Foani":{countryCodes:["ci"],tags:{brand:"Foani","brand:wikidata":"Q60183335",butcher:"poultry",name:"Foani",shop:"butcher"}},"shop/butcher|Gzella":{countryCodes:["pl"],tags:{brand:"Gzella",name:"Gzella",shop:"butcher"}},"shop/butcher|M&M Food Market":{countryCodes:["ca"],tags:{brand:"M&M Food Market","brand:wikidata":"Q6711827","brand:wikipedia":"en:M&M Food Market",name:"M&M Food Market",shop:"butcher"}},"shop/butcher|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"],matchTags:["shop/doityourself"],tags:{brand:"Advance Auto Parts","brand:wikidata":"Q4686051","brand:wikipedia":"en:Advance Auto Parts",name:"Advance Auto Parts",shop:"car_parts"}},"shop/car_parts|Auto Plus":{countryCodes:["us"],tags:{brand:"Auto Plus","brand:wikidata":"Q65121114",name:"Auto Plus",official_name:"Auto Plus Auto Parts",shop:"car_parts"}},"shop/car_parts|AutoZone":{countryCodes:["br","mx","us"],matchTags:["shop/doityourself"],tags:{brand:"AutoZone","brand:wikidata":"Q4826087","brand:wikipedia":"en:AutoZone",name:"AutoZone",shop:"car_parts"}},"shop/car_parts|Automat":{countryCodes:["nl"],tags:{brand:"Automat","brand:wikidata":"Q70623238",name:"Automat",shop:"car_parts"}},"shop/car_parts|Brezan":{countryCodes:["be","nl"],tags:{brand:"Brezan",name:"Brezan",shop:"car_parts"}},"shop/car_parts|Carquest":{countryCodes:["us"],tags:{brand:"Carquest","brand:wikidata":"Q5045948","brand:wikipedia":"en:Carquest",name:"Carquest",official_name:"Carquest Auto Parts",shop:"car_parts"}},"shop/car_parts|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"],matchTags:["shop/doityourself"],tags:{brand:"O'Reilly Auto Parts","brand:wikidata":"Q7071951","brand:wikipedia":"en:O'Reilly Auto Parts",name:"O'Reilly Auto Parts",shop:"car_parts"}},"shop/car_parts|Repco":{countryCodes:["au","nz"],tags:{brand:"Repco","brand:wikidata":"Q173425","brand:wikipedia":"en:Repco",name:"Repco",shop:"car_parts"}},"shop/car_parts|Supercheap Auto":{countryCodes:["au","nz"],tags:{brand:"Supercheap Auto","brand:wikidata":"Q7643119","brand:wikipedia":"en:Supercheap Auto",name:"Supercheap Auto",shop:"car_parts"}},"shop/car_parts|Tokić":{countryCodes:["ba","hr"],tags:{brand:"Tokić",name:"Tokić",shop:"car_parts"}},"shop/car_parts|Армтек":{countryCodes:["by","kz","ru"],tags:{brand:"Армтек",name:"Армтек",shop:"car_parts"}},"shop/car_parts|Форсаж":{tags:{brand:"Форсаж",name:"Форсаж",shop:"car_parts"}},"shop/car_parts|イエローハット":{countryCodes:["jp"],tags:{brand:"イエローハット","brand:en":"Yellow Hat","brand:ja":"イエローハット","brand:wikidata":"Q11285915","brand:wikipedia":"ja:イエローハット",name:"イエローハット","name:en":"Yellow Hat","name:ja":"イエローハット",shop:"car_parts"}},"shop/car_parts|オートバックス":{countryCodes:["jp"],tags:{brand:"オートバックス","brand:en":"Autobacs","brand:ja":"オートバックス","brand:wikidata":"Q7886426","brand:wikipedia":"ja:オートバックスセブン",name:"オートバックス","name:en":"Autobacs","name:ja":"オートバックス",shop:"car_parts"}},"shop/car_parts|ジェームス":{countryCodes:["jp"],tags:{brand:"ジェームス","brand:en":"JMS","brand:ja":"ジェームス","brand:wikidata":"Q11309404","brand:wikipedia":"ja:ジェームス",name:"ジェームス","name:en":"JMS","name:ja":"ジェームス","official_name:en":"Joyful Motorist Shop",shop:"car_parts"}},"shop/car_parts|タイヤ館":{countryCodes:["jp"],tags:{brand:"タイヤ館","brand:en":"Taiyakan","brand:ja":"タイヤ館","brand:wikidata":"Q11315808","brand:wikipedia":"ja:タイヤ館",name:"タイヤ館","name:en":"Taiyakan","name:ja":"タイヤ館",shop:"car_parts"}},"shop/car_repair|A.T.U":{countryCodes:["at","de"],matchNames:["auto-teile-unger"],tags:{brand:"A.T.U","brand:wikidata":"Q784721","brand:wikipedia":"de:Auto-Teile-Unger",name:"A.T.U",shop:"car_repair"}},"shop/car_repair|AAMCO":{countryCodes:["ca","us"],matchNames:["aamco transmissions","aamco transmissions and total car care"],tags:{brand:"AAMCO","brand:wikidata":"Q4649902","brand:wikipedia":"en:AAMCO Transmissions",name:"AAMCO","service:vehicle:transmission":"yes",shop:"car_repair"}},"shop/car_repair|ATS Euromaster":{countryCodes:["gb"],tags:{brand:"ATS Euromaster","brand:wikidata":"Q4654920","brand:wikipedia":"en:ATS Euromaster",name:"ATS Euromaster",shop:"car_repair"}},"shop/car_repair|Autoservis":{tags:{brand:"Autoservis",name:"Autoservis",shop:"car_repair"}},"shop/car_repair|Avatacar":{countryCodes:["fr"],tags:{brand:"Avatacar","brand:wikidata":"Q65156251","brand:wikipedia":"fr:Avatacar",name:"Avatacar",shop:"car_repair"}},"shop/car_repair|BestDrive":{countryCodes:["cz","fr","sk"],tags:{brand:"BestDrive","brand:wikidata":"Q63057183",name:"BestDrive",shop:"car_repair"}},"shop/car_repair|Bosch Car Service":{matchNames:["bosch service"],tags:{brand:"Bosch Car Service","brand:wikidata":"Q234021","brand:wikipedia":"en:Robert Bosch GmbH",name:"Bosch Car Service",shop:"car_repair"}},"shop/car_repair|Brakes Plus":{countryCodes:["us"],tags:{brand:"Brakes Plus","brand:wikidata":"Q62075246",name:"Brakes Plus",shop:"car_repair"}},"shop/car_repair|Car-X":{countryCodes:["us"],tags:{brand:"Car-X","brand:wikidata":"Q63859189",name:"Car-X",shop:"car_repair"}},"shop/car_repair|Carglass":{tags:{brand:"Carglass","brand:wikidata":"Q1035997","brand:wikipedia":"de:Carglass",name:"Carglass",shop:"car_repair"}},"shop/car_repair|Carstar":{countryCodes:["ca","us"],matchNames:["carstar auto body repair experts"],tags:{brand:"Carstar","brand:wikidata":"Q64187891",name:"Carstar","service:vehicle:body_repair":"yes",shop:"car_repair"}},"shop/car_repair|Citroën":{nomatch:["shop/car|Citroën"],tags:{brand:"Citroën","brand:wikidata":"Q6746","brand:wikipedia":"fr:Citroën",name:"Citroën",shop:"car_repair"}},"shop/car_repair|Euromaster":{countryCodes:["ch","de","es","fi","fr","nl","pt"],tags:{brand:"Euromaster","brand:wikidata":"Q3060668","brand:wikipedia":"de:Euromaster",name:"Euromaster",shop:"car_repair"}},"shop/car_repair|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","monro muffler"],tags:{brand:"Monro Muffler Brake","brand:wikidata":"Q6902090","brand:wikipedia":"en:Monro Muffler Brake",name:"Monro Muffler Brake",shop:"car_repair"}},"shop/car_repair|Mr. Lube":{countryCodes:["ca"],tags:{brand:"Mr. Lube","brand:wikidata":"Q17104067","brand:wikipedia":"en:Mr. Lube",name:"Mr. Lube",shop:"car_repair"}},"shop/car_repair|National Tire and Battery":{countryCodes:["us"],tags:{brand:"National Tire and Battery","brand:wikidata":"Q6978944","brand:wikipedia":"en:National Tire and Battery",name:"National Tire and Battery",shop:"car_repair"}},"shop/car_repair|Norauto":{countryCodes:["ar","es","fr","hu","it","pl","pt","ro"],tags:{brand:"Norauto","brand:wikidata":"Q3317698","brand:wikipedia":"en:Mobivia Groupe",name:"Norauto",shop:"car_repair"}},"shop/car_repair|Pep Boys":{countryCodes:["us"],tags:{brand:"Pep Boys","brand:wikidata":"Q3375007","brand:wikipedia":"en:Pep Boys",name:"Pep Boys",shop:"car_repair"}},"shop/car_repair|Peugeot":{nomatch:["shop/car|Peugeot"],tags:{brand:"Peugeot","brand:wikidata":"Q6742","brand:wikipedia":"en:Peugeot",name:"Peugeot",shop:"car_repair"}},"shop/car_repair|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"],matchNames:["safelight auto glass"],tags:{brand:"Safelite AutoGlass","brand:wikidata":"Q28797369","brand:wikipedia":"en:Safelite",name:"Safelite AutoGlass","service:vehicle:glass":"yes",shop:"car_repair"}},"shop/car_repair|Sears Auto Center":{countryCodes:["mx","us"],nomatch:["shop/department_store|Sears"],tags:{brand:"Sears Auto Center","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears Auto Center",shop:"car_repair"}},"shop/car_repair|Speedy":{countryCodes:["fr"],nomatch:["shop/car_repair|Speedy Auto Service"],tags:{brand:"Speedy","brand:wikidata":"Q3492969","brand:wikipedia":"fr:Speedy (entreprise)",name:"Speedy",shop:"car_repair"}},"shop/car_repair|Speedy Auto Service":{countryCodes:["ca"],nomatch:["shop/car_repair|Speedy"],tags:{brand:"Speedy Auto Service","brand:wikidata":"Q22318193",name:"Speedy Auto Service",shop:"car_repair"}},"shop/car_repair|Toyota":{nomatch:["shop/car|Toyota"],tags:{brand:"Toyota","brand:wikidata":"Q53268","brand:wikipedia":"en:Toyota",name:"Toyota",shop:"car_repair"}},"shop/car_repair|Tuffy":{countryCodes:["us"],matchNames:["tuffy auto service","tuffy auto service center","tuffy auto service centers","tuffy service","tuffy service center","tuffy service centers","tuffy tire and auto service","tuffy tire and auto service center","tuffy tire and auto service centers"],tags:{brand:"Tuffy","brand:wikidata":"Q17125314","brand:wikipedia":"en:Tuffy Auto Service Centers",name:"Tuffy",shop:"car_repair"}},"shop/car_repair|Valvoline":{countryCodes:["us"],tags:{brand:"Valvoline","brand:wikidata":"Q7912852","brand:wikipedia":"en:Valvoline Instant Oil Change",name:"Valvoline",official_name:"Valvoline Instant Oil Change",shop:"car_repair"}},"shop/car_repair|ÖAMTC":{countryCodes:["at"],tags:{brand:"ÖAMTC","brand:wikidata":"Q306057","brand:wikipedia":"de:Österreichischer Automobil-, Motorrad- und Touring Club",name:"ÖAMTC",shop:"car_repair"}},"shop/car_repair|Автоэлектрик":{tags:{brand:"Автоэлектрик",name:"Автоэлектрик",shop:"car_repair"}},"shop/car_repair|СТО":{tags:{brand:"СТО",name:"СТО",shop:"car_repair"}},"shop/car_repair|カーコンビニ倶楽部":{countryCodes:["jp"],tags:{brand:"カーコンビニ倶楽部","brand:en":"Car Convenience Club","brand:ja":"カーコンビニ倶楽部","brand:wikidata":"Q11295590","brand:wikipedia":"ja:カーコンビニ倶楽部",name:"カーコンビニ倶楽部","name:en":"Car Convenience Club","name:ja":"カーコンビニ倶楽部",shop:"car_repair"}},"shop/car|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:ja":"トヨタカローラ",name:"トヨタカローラ","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":{countryCodes:["dk"],tags:{brand:"Kirkens Korshær Genbrug","brand:wikidata":"Q12321915","brand:wikipedia":"da:Kirkens Korshær",name:"Kirkens Korshær Genbrug",shop:"charity"}},"shop/charity|Mind":{countryCodes:["gb"],tags:{brand:"Mind","brand:wikidata":"Q3314763","brand:wikipedia":"en:Mind (charity)",name:"Mind",shop:"charity"}},"shop/charity|Myrorna":{countryCodes:["se"],matchTags:["shop/clothes","shop/second_hand"],tags:{brand:"Myrorna","brand:wikidata":"Q10592609","brand:wikipedia":"sv:Myrorna",name:"Myrorna",shop:"charity"}},"shop/charity|Oxfam":{countryCodes:["be","de","gb","ie","im"],tags:{brand:"Oxfam","brand:wikidata":"Q267941","brand:wikipedia":"en:Oxfam",name:"Oxfam",shop:"charity"}},"shop/charity|PDSA":{tags:{brand:"PDSA",name:"PDSA",shop:"charity"}},"shop/charity|RSPCA":{countryCodes:["au","gb"],tags:{brand:"RSPCA","brand:wikidata":"Q584819","brand:wikipedia":"en:Royal Society for the Prevention of Cruelty to Animals",name:"RSPCA",shop:"charity"}},"shop/charity|Saint Vincent de Paul Thrift Store":{countryCodes:["us"],matchNames:["saint vincent de paul","saint vincent de paul society","society of saint vincent de paul","society of st vincent de paul","st vincent de paul","st vincent de paul society","st vincent de paul thrift store","svdp thrift store","the society of saint vincent de paul","the society of st vincent de paul"],matchTags:["shop/clothes","shop/department_store","shop/second_hand"],tags:{brand:"Saint Vincent de Paul Thrift Store","brand:wikidata":"Q66581837",name:"Saint Vincent de Paul Thrift Store",shop:"charity",short_name:"SVdP"}},"shop/charity|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","brand:wikidata":"Q67197464",name:"101 Drogerie",shop:"chemist"}},"shop/chemist|7 Дней":{countryCodes:["ru"],tags:{brand:"7 Дней",name:"7 Дней",shop:"chemist"}},"shop/chemist|Acqua & Sapone":{countryCodes:["it"],tags:{brand:"Acqua & Sapone","brand:wikidata":"Q51079044","brand:wikipedia":"it:Acqua & Sapone (azienda)",name:"Acqua & Sapone",shop:"chemist"}},"shop/chemist|Bipa":{countryCodes:["at","hr"],tags:{brand:"Bipa","brand:wikidata":"Q864933","brand:wikipedia":"de:Bipa",name:"Bipa",shop:"chemist"}},"shop/chemist|Boots":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Boots"],tags:{brand:"Boots","brand:wikidata":"Q6123139",name:"Boots",shop:"chemist"}},"shop/chemist|Budnikowsky":{countryCodes:["de"],tags:{brand:"Budnikowsky","brand:wikidata":"Q1001516","brand:wikipedia":"de:Budnikowsky",name:"Budnikowsky",shop:"chemist"}},"shop/chemist|CVS Pharmacy":{countryCodes:["us"],nomatch:["amenity/pharmacy|CVS Pharmacy","amenity/vending_machine|CVS Pharmacy"],tags:{brand:"CVS Pharmacy","brand:wikidata":"Q2078880","brand:wikipedia":"en:CVS Pharmacy",name:"CVS Pharmacy",shop:"chemist",short_name:"CVS"}},"shop/chemist|Clarel":{tags:{brand:"Clarel",name:"Clarel",shop:"chemist"}},"shop/chemist|Drogeria Natura":{countryCodes:["pl"],tags:{brand:"Drogeria Natura","brand:wikidata":"Q9212032","brand:wikipedia":"pl:Drogerie Natura",name:"Drogeria Natura",shop:"chemist"}},"shop/chemist|Etos":{countryCodes:["nl"],tags:{brand:"Etos","brand:wikidata":"Q2609459","brand:wikipedia":"en:Etos",name:"Etos",shop:"chemist"}},"shop/chemist|Hebe":{countryCodes:["pl"],tags:{brand:"Hebe",name:"Hebe",shop:"chemist"}},"shop/chemist|Kruidvat":{countryCodes:["be","fr","nl"],tags:{brand:"Kruidvat","brand:wikidata":"Q2226366","brand:wikipedia":"en:Kruidvat",name:"Kruidvat",shop:"chemist"}},"shop/chemist|Longs Drugs~(Hawaii)":{countryCodes:["us"],tags:{brand:"Longs Drugs","brand:wikidata":"Q16931196","brand:wikipedia":"en:Longs Drugs",name:"Longs Drugs",shop:"chemist",short_name:"Longs"}},"shop/chemist|Matas":{countryCodes:["dk"],tags:{brand:"Matas","brand:wikidata":"Q6786143","brand:wikipedia":"en:Matas (drug store)",name:"Matas",shop:"chemist"}},"shop/chemist|Müller":{countryCodes:["at","ch","de","es","hr","hu"],tags:{brand:"Müller","brand:wikidata":"Q1958759","brand:wikipedia":"en:Müller (German trade company)",name:"Müller",shop:"chemist"}},"shop/chemist|Natura":{tags:{brand:"Natura",name:"Natura",shop:"chemist"}},"shop/chemist|Rite Aid":{nomatch:["amenity/pharmacy|Rite Aid"],tags:{brand:"Rite Aid","brand:wikidata":"Q3433273","brand:wikipedia":"en:Rite Aid",name:"Rite Aid",shop:"chemist"}},"shop/chemist|Rossmann":{countryCodes:["cz","de","hu","pl"],tags:{brand:"Rossmann","brand:wikidata":"Q316004","brand:wikipedia":"de:Dirk Rossmann GmbH",name:"Rossmann",shop:"chemist"}},"shop/chemist|Savers":{countryCodes:["gb"],matchNames:["Savers Drugstores"],nomatch:["shop/variety_store|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",name:"Savers",official_name:"Savers Health & Beauty",shop:"chemist"}},"shop/chemist|Superdrug":{countryCodes:["gb"],nomatch:["amenity/pharmacy|Superdrug"],tags:{brand:"Superdrug","brand:wikidata":"Q7643261","brand:wikipedia":"en:Superdrug",name:"Superdrug",shop:"chemist"}},"shop/chemist|Teta":{countryCodes:["cz","sk"],tags:{brand:"Teta","brand:wikidata":"Q20860823","brand:wikipedia":"cs:Teta drogerie",name:"Teta",shop:"chemist"}},"shop/chemist|Tigotà":{countryCodes:["it"],tags:{brand:"Tigotà",name:"Tigotà",shop:"chemist"}},"shop/chemist|Trekpleister":{countryCodes:["nl"],tags:{brand:"Trekpleister","brand:wikidata":"Q2551576","brand:wikipedia":"nl:Trekpleister (drogisterij)",name:"Trekpleister",shop:"chemist"}},"shop/chemist|Walgreens":{countryCodes:["us"],matchNames:["walgreens pharmacy"],tags:{brand:"Walgreens","brand:wikidata":"Q1591889","brand:wikipedia":"en:Walgreens",name:"Walgreens",shop:"chemist"}},"shop/chemist|Watsons":{matchTags:["shop/cosmetics"],nomatch:["amenity/pharmacy|Watsons"],tags:{brand:"Watsons","brand:wikidata":"Q7974785","brand:wikipedia":"en:Watsons",name:"Watsons",shop:"chemist"}},"shop/chemist|dm":{countryCodes:["at","ba","bg","cz","de","hr","hu","it","mk","ro","rs","si","sk"],matchNames:["dm drogerie markt"],tags:{brand:"dm","brand:wikidata":"Q266572","brand:wikipedia":"en:Dm-drogerie markt",name:"dm",shop:"chemist"}},"shop/chemist|Мила":{countryCodes:["by"],tags:{brand:"Мила",name:"Мила",shop:"chemist"}},"shop/chemist|Новэкс":{countryCodes:["ru"],tags:{brand:"Новэкс",name:"Новэкс",shop:"chemist"}},"shop/chemist|Остров чистоты":{countryCodes:["by"],tags:{brand:"Остров чистоты",name:"Остров чистоты",shop:"chemist"}},"shop/chemist|Рубль Бум":{countryCodes:["ru"],tags:{brand:"Рубль Бум",name:"Рубль Бум",shop:"chemist"}},"shop/chemist|Улыбка радуги":{countryCodes:["ru"],tags:{brand:"Улыбка радуги",name:"Улыбка радуги",shop:"chemist"}},"shop/chemist|スギ薬局":{countryCodes:["jp"],nomatch:["amenity/pharmacy|スギ薬局"],tags:{brand:"スギ薬局","brand:ja":"スギ薬局",name:"スギ薬局","name:ja":"スギ薬局",shop:"chemist"}},"shop/chemist|丁丁藥局":{nomatch:["amenity/pharmacy|丁丁藥局"],tags:{brand:"丁丁藥局",name:"丁丁藥局",shop:"chemist"}},"shop/chemist|屈臣氏":{countryCodes:["cn","hk","tw"],nomatch:["amenity/pharmacy|屈臣氏"],tags:{brand:"屈臣氏","brand:wikidata":"Q7974785","brand:wikipedia":"zh:屈臣氏",name:"屈臣氏",shop:"chemist"}},"shop/chemist|康是美":{countryCodes:["tw"],tags:{brand:"康是美","brand:wikidata":"Q11063876","brand:wikipedia":"zh:康是美藥妝店",name:"康是美",shop:"chemist"}},"shop/chocolate|Cacau Show":{countryCodes:["br"],tags:{brand:"Cacau Show","brand:wikidata":"Q9671713","brand:wikipedia":"en:Cacau Show",name:"Cacau Show",shop:"chocolate"}},"shop/chocolate|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|Altar'd State":{countryCodes:["us"],tags:{brand:"Altar'd State","brand:wikidata":"Q71022008",name:"Altar'd State",shop:"clothes"}},"shop/clothes|American Eagle Outfitters":{countryCodes:["ca","us"],tags:{brand:"American Eagle Outfitters","brand:wikidata":"Q2842931","brand:wikipedia":"en:American Eagle Outfitters",clothes:"men;women",name:"American Eagle Outfitters",shop:"clothes",short_name:"American Eagle"}},"shop/clothes|An Phước":{tags:{brand:"An Phước",name:"An Phước",shop:"clothes"}},"shop/clothes|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",clothes:"women",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|Bonmarché":{countryCodes:["gb"],tags:{brand:"Bonmarché","brand:wikidata":"Q4942146","brand:wikipedia":"en:Bonmarché",name:"Bonmarché",shop:"clothes"}},"shop/clothes|Bonobo":{countryCodes:["fr"],nomatch:["shop/clothes|Bonobos"],tags:{brand:"Bonobo","brand:wikidata":"Q63682093",clothes:"men;women",name:"Bonobo",shop:"clothes"}},"shop/clothes|Bonobos":{countryCodes:["us"],nomatch:["shop/clothes|Bonobo"],tags:{brand:"Bonobos","brand:wikidata":"Q4942546","brand:wikipedia":"en:Bonobos (apparel)",clothes:"men",name:"Bonobos",shop:"clothes"}},"shop/clothes|Bootlegger":{tags:{brand:"Bootlegger","brand:wikidata":"Q65947984",clothes:"women",name:"Bootlegger",shop:"clothes"}},"shop/clothes|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|City Gear":{countryCodes:["us"],tags:{brand:"City Gear","brand:wikidata":"Q16958629","brand:wikipedia":"en:City Gear",name:"City Gear",shop:"clothes"}},"shop/clothes|Cleo":{tags:{brand:"Cleo","brand:wikidata":"Q65947963",clothes:"women",name:"Cleo",shop:"clothes"}},"shop/clothes|Club Monaco":{countryCodes:["ca","gb","us"],tags:{brand:"Club Monaco","brand:wikidata":"Q2979949","brand:wikipedia":"en:Club Monaco",name:"Club Monaco",shop:"clothes"}},"shop/clothes|Colin's":{tags:{brand:"Colin's","brand:wikidata":"Q28729658",name:"Colin's",shop:"clothes"}},"shop/clothes|Colloseum":{countryCodes:["at","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|Cotton On":{tags:{brand:"Cotton On",name:"Cotton On",shop:"clothes"}},"shop/clothes|Cropp":{countryCodes:["cs","hu","pl","ro","ru","sk","ua"],tags:{brand:"Cropp","brand:wikidata":"Q9196793","brand:wikipedia":"pl:Cropp",name:"Cropp",shop:"clothes"}},"shop/clothes|Cubus":{countryCodes:["de","fi","lv","no","pl","se"],tags:{brand:"Cubus","brand:wikidata":"Q3439593","brand:wikipedia":"no:Cubus",name:"Cubus",shop:"clothes"}},"shop/clothes|DTLR":{countryCodes:["us"],tags:{brand:"DTLR",name:"DTLR",shop:"clothes"}},"shop/clothes|DXL Men's Apparel":{countryCodes:["us"],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":"Q65090033","brand:wikipedia":"en:DressBarn",name:"Dress Barn",shop:"clothes"}},"shop/clothes|Dressmann":{countryCodes:["at","fi","no","se"],tags:{brand:"Dressmann","brand:wikidata":"Q3357081","brand:wikipedia":"en:Dressmann",name:"Dressmann",shop:"clothes"}},"shop/clothes|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|Francesca's":{tags:{brand:"Francesca's",name:"Francesca's",shop:"clothes"}},"shop/clothes|Free People":{countryCodes:["ca","us"],tags:{brand:"Free People","brand:wikidata":"Q5499945","brand:wikipedia":"en:Free People",name:"Free People",shop:"clothes"}},"shop/clothes|Fussl":{countryCodes:["at","de"],tags:{brand:"Fussl",name:"Fussl",shop:"clothes"}},"shop/clothes|G-Star Raw":{tags:{brand:"G-Star Raw",name:"G-Star Raw",shop:"clothes"}},"shop/clothes|GU":{countryCodes:["cl","jp","tw"],tags:{brand:"GU","brand:wikidata":"Q5512642","brand:wikipedia":"en:GU (retailer)",name:"GU",shop:"clothes"}},"shop/clothes|Gabe's":{countryCodes:["us"],matchNames:["gabriel brothers"],tags:{brand:"Gabe's","brand:wikidata":"Q5515554","brand:wikipedia":"en:Gabe's",name:"Gabe's",shop:"clothes"}},"shop/clothes|Gant":{tags:{brand:"Gant","brand:wikidata":"Q1493667","brand:wikipedia":"en:Gant (retailer)",name:"Gant",shop:"clothes"}},"shop/clothes|Gap":{matchNames:["the gap"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap",shop:"clothes"}},"shop/clothes|Gap Factory":{countryCodes:["us"],tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Factory",shop:"clothes"}},"shop/clothes|Gap Kids":{tags:{brand:"Gap","brand:wikidata":"Q420822","brand:wikipedia":"en:Gap Inc.",name:"Gap Kids",shop:"clothes"}},"shop/clothes|Garage":{countryCodes:["am","ca","jo","om","qa","sa","us"],tags:{brand:"Garage","brand:wikidata":"Q5521860","brand:wikipedia":"en:Garage (clothing retailer)",clothes:"women",name:"Garage",shop:"clothes"}},"shop/clothes|Gerry Weber":{tags:{brand:"Gerry Weber","brand:wikidata":"Q873447","brand:wikipedia":"en:Gerry Weber",name:"Gerry Weber",shop:"clothes"}},"shop/clothes|Gina Laura":{countryCodes:["at","de"],tags:{brand:"Gina Laura","brand:wikidata":"Q2700576","brand:wikipedia":"de:Gina Laura",name:"Gina Laura",shop:"clothes"}},"shop/clothes|Gloria Jeans":{countryCodes:["ru","ua"],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|Joe Fresh":{tags:{brand:"Joe Fresh","brand:wikidata":"Q6209926","brand:wikipedia":"en:Joe Fresh",name:"Joe Fresh",shop:"clothes"}},"shop/clothes|Johnny Was":{countryCodes:["us"],tags:{brand:"Johnny Was",clothes:"women",name:"Johnny Was",shop:"clothes"}},"shop/clothes|Joules":{countryCodes:["gb","gg","ie"],tags:{brand:"Joules","brand:wikidata":"Q25351738","brand:wikipedia":"en:Joules (clothing)",name:"Joules",shop:"clothes"}},"shop/clothes|Jules":{countryCodes:["be","fr","it"],tags:{brand:"Jules","brand:wikidata":"Q3188386","brand:wikipedia":"fr:Jules (enseigne)",clothes:"men",name:"Jules",shop:"clothes"}},"shop/clothes|Justice":{countryCodes:["ca","us"],tags:{brand:"Justice","brand:wikidata":"Q7857512","brand:wikipedia":"en:Tween Brands",name:"Justice",shop:"clothes"}},"shop/clothes|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|MO":{countryCodes:["pt"],tags:{brand:"MO","brand:wikidata":"Q51882883","brand:wikipedia":"pt:MO (lojas)",name:"MO",shop:"clothes"}},"shop/clothes|MS Mode":{countryCodes:["be","de","fr","lu","nl"],tags:{brand:"MS Mode",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|Mandee":{countryCodes:["us"],tags:{brand:"Mandee","brand:wikidata":"Q71035705",clothes:"women",name:"Mandee",shop:"clothes"}},"shop/clothes|Mango":{tags:{brand:"Mango","brand:wikidata":"Q136503","brand:wikipedia":"en:Mango (retailer)",name:"Mango",shop:"clothes"}},"shop/clothes|Marc O'Polo":{countryCodes:["at","be","ch","de","nl","pl"],tags:{brand:"Marc O'Polo","brand:wikidata":"Q1892752","brand:wikipedia":"en:Marc O'Polo",name:"Marc O'Polo",shop:"clothes"}},"shop/clothes|Marimekko":{countryCodes:["fi"],tags:{brand:"Marimekko","brand:wikidata":"Q534903","brand:wikipedia":"fi:Marimekko",name:"Marimekko",shop:"clothes"}},"shop/clothes|Marisa":{tags:{brand:"Marisa",name:"Marisa",shop:"clothes"}},"shop/clothes|Mark Formelle":{countryCodes:["by","kz","ru"],tags:{brand:"Mark Formelle",name:"Mark Formelle",shop:"clothes"}},"shop/clothes|Mark's":{countryCodes:["ca"],tags:{brand:"Mark's","brand:wikidata":"Q6766373","brand:wikipedia":"en:Mark's",name:"Mark's",shop:"clothes"}},"shop/clothes|Massimo Dutti":{tags:{brand:"Massimo Dutti","brand:wikidata":"Q788231","brand:wikipedia":"en:Massimo Dutti",name:"Massimo Dutti",shop:"clothes"}},"shop/clothes|Matalan":{countryCodes:["ae","gb"],tags:{brand:"Matalan","brand:wikidata":"Q12061509","brand:wikipedia":"en:Matalan",name:"Matalan",shop:"clothes"}},"shop/clothes|Maurices":{countryCodes:["ca","fr","us"],tags:{brand:"Maurices","brand:wikidata":"Q6793571","brand:wikipedia":"en:Maurices",clothes:"women",name:"Maurices",shop:"clothes"}},"shop/clothes|Max Mara":{tags:{brand:"Max Mara","brand:wikidata":"Q1151774","brand:wikipedia":"en:Max Mara",name:"Max Mara",shop:"clothes"}},"shop/clothes|Melanie Lyne":{countryCodes:["ca"],tags:{brand:"Melanie Lyne","brand:wikidata":"Q64861470",clothes:"women",name:"Melanie Lyne",shop:"clothes"}},"shop/clothes|Men's Wearhouse":{countryCodes:["us"],matchNames:["mens warehouse"],tags:{brand:"Men's Wearhouse","brand:wikidata":"Q57405513","brand:wikipedia":"en:Men's Wearhouse",clothes:"suits",name:"Men's Wearhouse",shop:"clothes"}},"shop/clothes|Mexx":{tags:{brand:"Mexx","brand:wikidata":"Q1837290","brand:wikipedia":"en:Mexx",name:"Mexx",shop:"clothes"}},"shop/clothes|Michael Kors":{tags:{brand:"Michael Kors","brand:wikidata":"Q19572998","brand:wikipedia":"en:Capri Holdings",name:"Michael Kors",shop:"clothes"}},"shop/clothes|Miller & Monroe":{countryCodes:["at","de","nl"],tags:{brand:"Miller & Monroe",name:"Miller & Monroe",shop:"clothes"}},"shop/clothes|Mim":{countryCodes:["fr","it"],tags:{brand:"Mim",name:"Mim",shop:"clothes"}},"shop/clothes|Miss Etam":{countryCodes:["nl"],tags:{brand:"Miss Etam",name:"Miss Etam",shop:"clothes"}},"shop/clothes|Miss Selfridge":{tags:{brand:"Miss Selfridge","brand:wikidata":"Q6877374","brand:wikipedia":"en:Miss Selfridge",clothes:"women",name:"Miss Selfridge",shop:"clothes"}},"shop/clothes|Mohito":{tags:{brand:"Mohito",name:"Mohito",shop:"clothes"}},"shop/clothes|Monsoon":{countryCodes:["gb","gg","ie"],tags:{brand:"Monsoon","brand:wikidata":"Q65007501",name:"Monsoon",shop:"clothes"}},"shop/clothes|Moores":{countryCodes:["ca"],tags:{brand:"Moores","brand:wikidata":"Q6908309","brand:wikipedia":"en:Moores",clothes:"men",name:"Moores",shop:"clothes"}},"shop/clothes|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|Mustang":{tags:{brand:"Mustang","brand:wikidata":"Q221562","brand:wikipedia":"de:Mustang (Jeans)",name:"Mustang",shop:"clothes"}},"shop/clothes|NKD":{countryCodes:["at","de","it","si"],tags:{brand:"NKD","brand:wikidata":"Q927272","brand:wikipedia":"de:NKD",name:"NKD",shop:"clothes"}},"shop/clothes|Naf Naf":{countryCodes:["ch","fr"],tags:{brand:"Naf Naf","brand:wikidata":"Q3334188","brand:wikipedia":"fr:Naf Naf",name:"Naf Naf",shop:"clothes"}},"shop/clothes|Napapijri":{tags:{brand:"Napapijri",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|Prada":{tags:{brand:"Prada","brand:wikidata":"Q193136","brand:wikipedia":"en:Prada",name:"Prada",shop:"clothes"}},"shop/clothes|Primark":{tags:{brand:"Primark","brand:wikidata":"Q137023","brand:wikipedia":"en:Primark",name:"Primark",shop:"clothes"}},"shop/clothes|Promod":{tags:{brand:"Promod","brand:wikidata":"Q3407429","brand:wikipedia":"en:Promod",name:"Promod",shop:"clothes"}},"shop/clothes|Pull & Bear":{tags:{brand:"Pull & Bear","brand:wikidata":"Q691029","brand:wikipedia":"en:Pull&Bear",name:"Pull & Bear",shop:"clothes"}},"shop/clothes|Puma":{nomatch:["amenity/fuel|Puma"],tags:{brand:"Puma","brand:wikidata":"Q157064","brand:wikipedia":"en:Puma (brand)",name:"Puma",shop:"clothes"}},"shop/clothes|Quiksilver":{matchNames:["quicksilver"],tags:{brand:"Quiksilver","brand:wikidata":"Q1329463","brand:wikipedia":"en:Quiksilver",name:"Quiksilver",shop:"clothes"}},"shop/clothes|RW&CO.":{countryCodes:["ca"],tags:{brand:"RW&CO.","brand:wikidata":"Q65965663",clothes:"women;men",name:"RW&CO.",shop:"clothes"}},"shop/clothes|Rainbow":{countryCodes:["de","us"],tags:{brand:"Rainbow","brand:wikidata":"Q7284708","brand:wikipedia":"en:Rainbow Shops",name:"Rainbow",shop:"clothes"}},"shop/clothes|Reebok":{tags:{brand:"Reebok","brand:wikidata":"Q466183","brand:wikipedia":"en:Reebok",name:"Reebok",shop:"clothes"}},"shop/clothes|Reiss":{tags:{brand:"Reiss","brand:wikidata":"Q7310479","brand:wikipedia":"en:Reiss (brand)",name:"Reiss",shop:"clothes"}},"shop/clothes|Reitmans":{countryCodes:["ca"],tags:{brand:"Reitmans","brand:wikidata":"Q7310506","brand:wikipedia":"en:Reitmans",name:"Reitmans",shop:"clothes"}},"shop/clothes|Reserved":{tags:{brand:"Reserved","brand:wikidata":"Q21809354","brand:wikipedia":"en:Reserved",name:"Reserved",shop:"clothes"}},"shop/clothes|Ricki's":{tags:{brand:"Ricki's","brand:wikidata":"Q65947929",clothes:"women",name:"Ricki's",shop:"clothes"}},"shop/clothes|River Island":{countryCodes:["gb","ie","im","nl","pl"],tags:{brand:"River Island","brand:wikidata":"Q2670328","brand:wikipedia":"en:River Island",name:"River Island",shop:"clothes"}},"shop/clothes|Robert Graham":{countryCodes:["us"],tags:{brand:"Robert Graham","brand:wikidata":"Q18390679","brand:wikipedia":"en:Robert Graham (fashion brand)",clothes:"men",name:"Robert Graham",shop:"clothes"}},"shop/clothes|Roots":{tags:{brand:"Roots","brand:wikidata":"Q7366633","brand:wikipedia":"en:Roots Canada",name:"Roots",shop:"clothes"}},"shop/clothes|Saint Laurent":{tags:{alt_name:"Yves Saint Laurent",brand:"Saint Laurent","brand:wikidata":"Q2282172","brand:wikipedia":"en:Yves Saint Laurent (brand)",name:"Saint Laurent",shop:"clothes",short_name:"YSL"}},"shop/clothes|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|Soma":{countryCodes:["us"],tags:{alt_name:"Soma Intimates",brand:"Soma","brand:wikidata":"Q69882213",clothes:"underwear;women",name:"Soma",shop:"clothes"}},"shop/clothes|Spanx":{countryCodes:["us"],tags:{brand:"Spanx","brand:wikidata":"Q1932886","brand:wikipedia":"en:Spanx",clothes:"underwear",name:"Spanx",shop:"clothes"}},"shop/clothes|Springfield":{tags:{brand:"Springfield","brand:wikidata":"Q958209","brand:wikipedia":"es:Springfield (cadena de tiendas)",name:"Springfield",shop:"clothes"}},"shop/clothes|Stefanel":{countryCodes:["at","de","fr","it"],tags:{brand:"Stefanel","brand:wikidata":"Q2338087","brand:wikipedia":"ro:Stefanel (companie)",name:"Stefanel",shop:"clothes"}},"shop/clothes|Steps":{countryCodes:["nl"],tags:{brand:"Steps",name:"Steps",shop:"clothes"}},"shop/clothes|Stitches":{countryCodes:["ca"],tags:{brand:"Stitches","brand:wikidata":"Q7617652","brand:wikipedia":"en:Stitches (store)",name:"Stitches",shop:"clothes"}},"shop/clothes|Stradivarius":{tags:{brand:"Stradivarius","brand:wikidata":"Q3322945","brand:wikipedia":"en:Stradivarius (clothing brand)",name:"Stradivarius",shop:"clothes"}},"shop/clothes|Street One":{countryCodes:["at","be","ch","de","dk","nl"],tags:{brand:"Street One","brand:wikidata":"Q61997265",name:"Street One",shop:"clothes"}},"shop/clothes|Suburbia":{countryCodes:["mx"],tags:{brand:"Suburbia","brand:wikidata":"Q6134992","brand:wikipedia":"en:Suburbia (department store)",name:"Suburbia",shop:"clothes"}},"shop/clothes|Superdry":{tags:{brand:"Superdry","brand:wikidata":"Q1684445","brand:wikipedia":"en:Superdry",name:"Superdry",shop:"clothes"}},"shop/clothes|Suzy Shier":{countryCodes:["ca"],tags:{brand:"Suzy Shier","brand:wikidata":"Q65464976",clothes:"women",name:"Suzy Shier",shop:"clothes"}},"shop/clothes|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 Kooples":{tags:{brand:"The Kooples",name:"The Kooples",shop:"clothes"}},"shop/clothes|The North Face":{tags:{alt_name:"North Face",brand:"The North Face","brand:wikidata":"Q152784","brand:wikipedia":"en:The North Face",name:"The North Face",shop:"clothes"}},"shop/clothes|The Sting":{countryCodes:["be","de","gb","nl"],tags:{brand:"The Sting","brand:wikidata":"Q2518794","brand:wikipedia":"nl:The Sting Companies",name:"The Sting",shop:"clothes"}},"shop/clothes|The Walking Company":{tags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"clothes"}},"shop/clothes|Thyme Maternity":{countryCodes:["ca"],tags:{brand:"Thyme Maternity","brand:wikidata":"Q17033572","brand:wikipedia":"en:Thyme Maternity",clothes:"maternity",name:"Thyme Maternity",shop:"clothes"}},"shop/clothes|Tillys":{countryCodes:["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|Topman":{tags:{brand:"Topman","brand:wikidata":"Q1090880","brand:wikipedia":"en:Topman",clothes:"men",name:"Topman",shop:"clothes"}},"shop/clothes|Topshop":{tags:{brand:"Topshop","brand:wikidata":"Q1893576","brand:wikipedia":"en:Topshop",clothes:"women",name:"Topshop",shop:"clothes"}},"shop/clothes|Torrid":{countryCodes:["us"],tags:{brand:"Torrid","brand:wikidata":"Q7827120","brand:wikipedia":"en:Torrid (clothing retailer)",name:"Torrid",shop:"clothes"}},"shop/clothes|Tory Burch":{countryCodes:["us"],tags:{brand:"Tory Burch","brand:wikidata":"Q19988222","brand:wikipedia":"en:Tory Burch (company)",name:"Tory Burch",shop:"clothes"}},"shop/clothes|Triumph":{tags:{brand:"Triumph","brand:wikidata":"Q671216","brand:wikipedia":"en:Triumph International",name:"Triumph",shop:"clothes"}},"shop/clothes|Truworths":{countryCodes:["za"],tags:{brand:"Truworths","brand:wikidata":"Q24233998","brand:wikipedia":"en:Truworths",name:"Truworths",shop:"clothes"}},"shop/clothes|UNTUCKit":{countryCodes:["ca","us"],tags:{brand:"UNTUCKit","brand:wikidata":"Q28207006","brand:wikipedia":"en:Untuckit",name:"UNTUCKit",shop:"clothes"}},"shop/clothes|USC":{countryCodes:["gb","ie"],tags:{brand:"USC","brand:wikidata":"Q7866331","brand:wikipedia":"en:USC (clothing retailer)",name:"USC",shop:"clothes"}},"shop/clothes|Ulla Popken":{countryCodes:["at","be","ch","de","fr","nl"],tags:{brand:"Ulla Popken","brand:wikidata":"Q2475146","brand:wikipedia":"en:Ulla Popken",name:"Ulla Popken",shop:"clothes"}},"shop/clothes|Under Armour":{matchNames:["under armor"],tags:{brand:"Under Armour","brand:wikidata":"Q2031485","brand:wikipedia":"en:Under Armour",clothes:"men;women",name:"Under Armour",shop:"clothes"}},"shop/clothes|Undiz":{tags:{brand:"Undiz",name:"Undiz",shop:"clothes"}},"shop/clothes|Uniqlo":{tags:{brand:"Uniqlo","brand:wikidata":"Q26070","brand:wikipedia":"en:Uniqlo",name:"Uniqlo",shop:"clothes"}},"shop/clothes|United Colors of Benetton":{tags:{brand:"United Colors of Benetton","brand:wikidata":"Q817139","brand:wikipedia":"en:Benetton Group",name:"United Colors of Benetton",shop:"clothes",short_name:"Benetton"}},"shop/clothes|Urban Outfitters":{tags:{brand:"Urban Outfitters","brand:wikidata":"Q3552193","brand:wikipedia":"en:Urban Outfitters",name:"Urban Outfitters",shop:"clothes"}},"shop/clothes|Urban Planet":{tags:{brand:"Urban Planet",name:"Urban Planet",shop:"clothes"}},"shop/clothes|V.I.M.":{countryCodes:["us"],tags:{brand:"V.I.M.","brand:wikidata":"Q71042495",clothes:"children;men;women",name:"V.I.M.",shop:"clothes"}},"shop/clothes|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|Wellensteyn":{tags:{brand:"Wellensteyn",name:"Wellensteyn",shop:"clothes"}},"shop/clothes|West 49":{countryCodes:["ca"],tags:{brand:"West 49","brand:wikidata":"Q7984218","brand:wikipedia":"en:West 49",name:"West 49",shop:"clothes"}},"shop/clothes|White House Black Market":{countryCodes:["ca","us"],matchNames:["white house | black market"],tags:{brand:"White House Black Market","brand:wikidata":"Q7994858","brand:wikipedia":"en:White House Black Market",name:"White House Black Market",shop:"clothes"}},"shop/clothes|White Stuff":{countryCodes:["de","dk","gb","gg"],tags:{brand:"White Stuff","brand:wikidata":"Q7995442","brand:wikipedia":"en:White Stuff Clothing",name:"White Stuff",shop:"clothes"}},"shop/clothes|Wibra":{countryCodes:["be","nl"],tags:{brand:"Wibra","brand:wikidata":"Q943405","brand:wikipedia":"en:Wibra",name:"Wibra",shop:"clothes"}},"shop/clothes|Wilsons Leather":{countryCodes:["ca","us"],tags:{brand:"Wilsons Leather","brand:wikidata":"Q8023296","brand:wikipedia":"en:Wilsons Leather",clothes:"men;women",name:"Wilsons Leather",shop:"clothes"}},"shop/clothes|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/computer|PCデポ":{countryCodes:["jp"],matchNames:["PC DEPOT","ピーシーデポ"],tags:{brand:"PCデポ","brand:en":"PC Depot","brand:ja":"PCデポ","brand:wikidata":"Q11331723","brand:wikipedia":"ja:ピーシーデポコーポレーション",name:"PCデポ","name:en":"PC Depot","name:ja":"PCデポ",shop:"computer"}},"shop/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:"不二家","brand:en":"Fujiya","brand:ja":"不二家","brand:wikidata":"Q858452","brand:wikipedia":"ja:不二家",name:"不二家","name:en":"Fujiya","name:ja":"不二家",shop:"confectionery"}},"shop/convenience|10-11":{countryCodes:["is"],tags:{brand:"10-11","brand:wikidata":"Q65336720","brand:wikipedia":"is:10-11",name:"10-11",shop:"convenience"}},"shop/convenience|1st Stop":{countryCodes:["us"],matchNames:["first stop"],tags:{brand:"1st Stop","brand:wikidata":"Q65706152",name:"1st Stop",shop:"convenience"}},"shop/convenience|3COINS":{countryCodes:["jp"],matchNames:["スリーコインズ"],tags:{alt_name:"スリーコインズ",brand:"3COINS","brand:wikidata":"Q60997353","brand:wikipedia":"ja:3COINS",name:"3COINS",shop:"convenience"}},"shop/convenience|7-Eleven":{matchNames:["7-11","seven eleven"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|7-Eleven"],tags:{brand:"7-Eleven","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"7-Eleven",shop:"convenience"}},"shop/convenience|759 Store":{countryCodes:["hk"],tags:{brand:"759 Store","brand:wikidata":"Q10846179","brand:wikipedia":"en:759 Store",name:"759 Store",shop:"convenience"}},"shop/convenience|76":{nomatch:["amenity/fuel|76"],tags:{brand:"76","brand:wikidata":"Q1658320","brand:wikipedia":"en:76 (gas station)",name:"76",shop:"convenience"}},"shop/convenience|8 à Huit":{countryCodes:["fr"],nomatch:["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|Alfamidi":{countryCodes:["id"],tags:{brand:"Alfamidi","brand:wikidata":"Q12471462","brand:wikipedia":"id:Alfamidi",name:"Alfamidi",shop:"convenience"}},"shop/convenience|Allsup's":{tags:{brand:"Allsup's",name:"Allsup's",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":{nomatch:["shop/supermarket|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"convenience"}},"shop/convenience|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/supermarket|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"convenience"}},"shop/convenience|CU":{countryCodes:["kr"],tags:{brand:"CU",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|La Vie Claire":{tags:{brand:"La Vie Claire",name:"La Vie Claire",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|Lonia":{tags:{brand:"Lonia",name:"Lonia",shop:"convenience"}},"shop/convenience|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/supermarket|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"convenience"}},"shop/convenience|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|Maisto prekės":{tags:{brand:"Maisto prekės",name:"Maisto prekės",shop:"convenience"}},"shop/convenience|Marathon":{nomatch:["amenity/fuel|Marathon"],tags:{brand:"Marathon","brand:wikidata":"Q458363","brand:wikipedia":"en:Marathon Petroleum",name:"Marathon",shop:"convenience"}},"shop/convenience|Maverik":{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|MrMax":{countryCodes:["jp"],matchNames:["ミスターマックス"],tags:{alt_name:"ミスターマックス",brand:"MrMax","brand:wikidata":"Q11342034","brand:wikipedia":"ja:ミスターマックス",name:"MrMax",shop:"convenience"}},"shop/convenience|Nasz Sklep":{countryCodes:["pl"],tags:{brand:"Nasz Sklep","brand:wikidata":"Q62070369",name:"Nasz Sklep",shop:"convenience"}},"shop/convenience|Neste K":{countryCodes:["fi"],tags:{brand:"Neste K","brand:wikidata":"Q42901270","brand:wikipedia":"fi:Neste K",name:"Neste K",shop:"convenience"}},"shop/convenience|NewDays":{countryCodes:["jp"],matchNames:["newdays ミニ"],tags:{alt_name:"ニューデイズ",brand:"NewDays","brand:wikidata":"Q11234763","brand:wikipedia":"ja:NewDays",name:"NewDays",shop:"convenience"}},"shop/convenience|Nisa":{countryCodes:["gb"],tags:{brand:"Nisa","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa",shop:"convenience"}},"shop/convenience|Nisa Local":{countryCodes:["gb"],tags:{brand:"Nisa Local","brand:wikidata":"Q16999069","brand:wikipedia":"en:Nisa (retailer)",name:"Nisa Local",shop:"convenience"}},"shop/convenience|OK Market":{countryCodes:["cl"],tags:{brand:"OK Market",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|Rewe To Go":{countryCodes:["de"],nomatch:["shop/supermarket|Rewe","shop/supermarket|Rewe City"],tags:{brand:"Rewe To Go","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe To Go",shop:"convenience"}},"shop/convenience|Royal Farms":{countryCodes:["us"],nomatch:["amenity/fuel|Royal Farms"],tags:{brand:"Royal Farms","brand:wikidata":"Q7374169","brand:wikipedia":"en:Royal Farms",name:"Royal Farms",shop:"convenience"}},"shop/convenience|Rutter's":{countryCodes:["us"],tags:{brand:"Rutter's","brand:wikidata":"Q7383544","brand:wikipedia":"en:Rutter's",name:"Rutter's",shop:"convenience"}},"shop/convenience|Sainsbury's Local":{countryCodes:["gb"],matchTags:["shop/supermarket"],tags:{brand:"Sainsbury's Local","brand:wikidata":"Q13218434","brand:wikipedia":"en:Sainsbury's Local",name:"Sainsbury's Local",shop:"convenience"}},"shop/convenience|Sale":{countryCodes:["fi"],tags:{brand:"Sale","brand:wikidata":"Q11892046","brand:wikipedia":"fi:Sale",name:"Sale",shop:"convenience"}},"shop/convenience|Select":{nomatch:["shop/clothes|Select"],tags:{brand:"Select",name:"Select",shop:"convenience"}},"shop/convenience|Sheetz":{nomatch:["amenity/fuel|Sheetz"],tags:{brand:"Sheetz","brand:wikidata":"Q7492551","brand:wikipedia":"en:Sheetz",name:"Sheetz",shop:"convenience"}},"shop/convenience|Shell":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell",shop:"convenience"}},"shop/convenience|Shell Select":{nomatch:["amenity/fuel|Shell","amenity/fuel|Shell Express"],tags:{brand:"Shell Select","brand:wikidata":"Q154950","brand:wikipedia":"en:Royal Dutch Shell",name:"Shell Select",shop:"convenience"}},"shop/convenience|Shop & Go":{tags:{brand:"Shop & Go",name:"Shop & Go",shop:"convenience"}},"shop/convenience|Siwa":{countryCodes:["fi"],tags:{brand:"Siwa","brand:wikidata":"Q11893827","brand:wikipedia":"fi:Siwa",name:"Siwa",shop:"convenience"}},"shop/convenience|Spar":{nomatch:["shop/convenience|Spar Express","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"convenience"}},"shop/convenience|Spar Express":{matchTags:["shop/supermarket"],nomatch:["shop/convenience|Spar","shop/supermarket|Spar"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar Express",shop:"convenience"}},"shop/convenience|Speedway":{nomatch:["amenity/fuel|Speedway"],tags:{brand:"Speedway","brand:wikidata":"Q7575683","brand:wikipedia":"en:Speedway LLC",name:"Speedway",shop:"convenience"}},"shop/convenience|Społem":{nomatch:["shop/supermarket|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"convenience"}},"shop/convenience|Star Mart":{tags:{brand:"Star Mart","brand:wikidata":"Q61994857",name:"Star Mart",shop:"convenience"}},"shop/convenience|Stewart's Shops":{countryCodes:["us"],matchNames:["stewarts"],nomatch:["amenity/fuel|Stewart's"],tags:{brand:"Stewart's Shops","brand:wikidata":"Q7615690","brand:wikipedia":"en:Stewart's Shops",name:"Stewart's Shops",shop:"convenience"}},"shop/convenience|Stripes":{countryCodes:["cl","us"],tags:{brand:"Stripes","brand:wikidata":"Q7624135","brand:wikipedia":"en:Stripes Convenience Stores",name:"Stripes",shop:"convenience"}},"shop/convenience|Studenac":{tags:{brand:"Studenac",name:"Studenac",shop:"convenience"}},"shop/convenience|Sunoco":{nomatch:["amenity/fuel|Sunoco"],tags:{brand:"Sunoco",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":{tags:{brand:"United",name:"United",shop:"convenience"}},"shop/convenience|United Dairy Farmers":{countryCodes:["us"],matchTags:["amenity/ice_cream","shop/ice_cream"],nomatch:["amenity/fuel|United Dairy Farmers"],tags:{amenity:"ice_cream",brand:"United Dairy Farmers","brand:wikidata":"Q7887677","brand:wikipedia":"en:United Dairy Farmers",name:"United Dairy Farmers",shop:"convenience",short_name:"UDF"}},"shop/convenience|Utile":{countryCodes:["fr"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|Super U","shop/supermarket|Hyper U","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Utile","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Utile",shop:"convenience"}},"shop/convenience|Valero":{nomatch:["amenity/fuel|Valero"],tags:{brand:"Valero",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|Wawa":{nomatch:["amenity/fuel|Wawa"],tags:{brand:"Wawa","brand:wikidata":"Q5936320","brand:wikipedia":"en:Wawa (company)",name:"Wawa",shop:"convenience"}},"shop/convenience|Weltladen":{countryCodes:["at","ch","de"],tags:{brand:"Weltladen","brand:wikidata":"Q1640782","brand:wikipedia":"de:Weltladen",name:"Weltladen",shop:"convenience"}},"shop/convenience|Woolworths Petrol":{countryCodes:["au"],nomatch:["amenity/fuel|Woolworths Petrol"],tags:{brand:"Caltex","brand:wikidata":"Q5023980","brand:wikipedia":"en:Caltex Woolworths",name:"Woolworths Petrol",shop:"convenience"}},"shop/convenience|abc~(Poland)":{countryCodes:["pl"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|ABC"],tags:{brand:"abc","brand:wikidata":"Q11683985","brand:wikipedia":"pl:Abc (sieć handlowa)",name:"abc",shop:"convenience"}},"shop/convenience|ampm":{tags:{brand:"ampm","brand:wikidata":"Q306960","brand:wikipedia":"en:Ampm",name:"ampm",shop:"convenience"}},"shop/convenience|miniピアゴ":{countryCodes:["jp"],matchNames:["ミニピアゴ"],tags:{brand:"miniピアゴ","brand:en":"mini Piago","brand:ja":"miniピアゴ","brand:wikidata":"Q11188499","brand:wikipedia":"ja:Miniピアゴ",name:"miniピアゴ","name:en":"mini Piago","name:ja":"miniピアゴ",shop:"convenience"}},"shop/convenience|uSmile 昆仑好":{countryCodes:["cn"],matchNames:["usmile","usmile 便利店","昆仑好"],matchTags:["shop/supermarket"],nomatch:["amenity/fuel|uSmile 昆仑好"],tags:{brand:"uSmile 昆仑好","brand:en":"uSmile","brand:wikidata":"Q66480830","brand:zh":"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|АТБ":{countryCodes:["ua"],tags:{brand:"АТБ",name:"АТБ",shop:"convenience"}},"shop/convenience|Абсолют":{countryCodes:["ru"],matchNames:["Абсолют Cash&Carry"],tags:{brand:"Абсолют",name:"Абсолют",shop:"convenience"}},"shop/convenience|Авоська":{countryCodes:["ru"],tags:{brand:"Авоська",name:"Авоська",shop:"convenience"}},"shop/convenience|Агрокомплекс":{countryCodes:["ru"],tags:{brand:"Агрокомплекс",name:"Агрокомплекс",shop:"convenience"}},"shop/convenience|Ассорти-продукт":{countryCodes:["ru"],tags:{brand:"Ассорти-продукт",name:"Ассорти-продукт",shop:"convenience"}},"shop/convenience|Береке":{countryCodes:["kg","kz"],tags:{brand:"Береке",name:"Береке",shop:"convenience"}},"shop/convenience|Везунчик":{countryCodes:["ru","ua"],tags:{brand:"Везунчик",name:"Везунчик",shop:"convenience"}},"shop/convenience|Верный":{countryCodes:["ru"],tags:{brand:"Верный",name:"Верный",shop:"convenience"}},"shop/convenience|ВкусВилл":{countryCodes:["ru"],tags:{brand:"ВкусВилл","brand:wikidata":"Q57271676","brand:wikipedia":"ru:Вкусвилл",name:"ВкусВилл",shop:"convenience"}},"shop/convenience|Гастрономчикъ":{countryCodes:["ru"],matchNames:["Гастрономчик"],tags:{brand:"Гастрономчикъ",name:"Гастрономчикъ",shop:"convenience"}},"shop/convenience|Гроздь":{countryCodes:["ru"],nomatch:["shop/supermarketk|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"convenience"}},"shop/convenience|Доброном":{countryCodes:["by","ru"],tags:{brand:"Доброном","brand:wikidata":"Q2565040","brand:wikipedia":"be:Eurotorg",name:"Доброном",shop:"convenience"}},"shop/convenience|Евроопт Market":{countryCodes:["by"],matchNames:["Евроопт Маркет"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Market","brand:wikidata":"Q65455869",name:"Евроопт Market",shop:"convenience"}},"shop/convenience|Евроопт Минимаркет":{countryCodes:["by"],matchTags:["shop/supermarket"],tags:{brand:"Евроопт Минимаркет","brand:wikidata":"Q65455911",name:"Евроопт Минимаркет",shop:"convenience"}},"shop/convenience|Ермолино":{countryCodes:["ru","ua"],matchNames:["Продукты Ермолино"],tags:{brand:"Ермолино",name:"Ермолино",shop:"convenience"}},"shop/convenience|КазМунайГаз":{nomatch:["amenity/fuel|КазМунайГаз"],tags:{brand:"КазМунайГаз",name:"КазМунайГаз",shop:"convenience"}},"shop/convenience|Квартал вкуса":{countryCodes:["by"],tags:{brand:"Квартал вкуса",name:"Квартал вкуса",shop:"convenience"}},"shop/convenience|Копеечка":{countryCodes:["by"],tags:{brand:"Копеечка","brand:wikidata":"Q68207105",name:"Копеечка",shop:"convenience"}},"shop/convenience|Копейка":{countryCodes:["ru"],tags:{brand:"Копейка","brand:en":"Kopeyka","brand:wikidata":"Q1783878","brand:wikipedia":"en:Kopeyka (supermarket)",name:"Копейка","name:en":"Kopeyka",shop:"convenience"}},"shop/convenience|Лукойл":{nomatch:["amenity/fuel|Лукойл"],tags:{brand:"Лукойл",name:"Лукойл",shop:"convenience"}},"shop/convenience|Магнит":{matchNames:["магнит у дома"],nomatch:["shop/cosmetics|Магнит Косметик","shop/supermarket|Магнит"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"convenience"}},"shop/convenience|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/supermarket|Мария-Ра"],tags:{brand:"Мария-Ра","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра",shop:"convenience"}},"shop/convenience|Маяк":{countryCodes:["ru"],tags:{brand:"Маяк",name:"Маяк",shop:"convenience"}},"shop/convenience|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка",name:"Монетка",shop:"convenience"}},"shop/convenience|Мрія":{countryCodes:["ua"],tags:{brand:"Мрія",name:"Мрія",shop:"convenience"}},"shop/convenience|Родны кут":{tags:{brand:"Родны кут",name:"Родны кут",shop:"convenience"}},"shop/convenience|Сильпо":{countryCodes:["ua"],tags:{brand:"Сильпо","brand:wikidata":"Q4419434","brand:wikipedia":"ru:Сильпо",name:"Сильпо",shop:"convenience"}},"shop/convenience|У Палыча":{countryCodes:["ru"],tags:{brand:"У Палыча",name:"У Палыча",shop:"convenience"}},"shop/convenience|Фасоль":{countryCodes:["ru"],tags:{brand:"Фасоль",name:"Фасоль",shop:"convenience"}},"shop/convenience|Ярче":{countryCodes:["ru"],tags:{brand:"Ярче",name:"Ярче",shop:"convenience"}},"shop/convenience|アンスリー":{countryCodes:["jp"],tags:{brand:"アンスリー","brand:en":"Ansuri","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"Ansuri","name:ja":"アンスリー",shop:"convenience"}},"shop/convenience|サンクス":{countryCodes:["jp"],tags:{brand:"サンクス","brand:en":"Sunkus","brand:ja":"サンクス","brand:wikidata":"Q16141064","brand:wikipedia":"ja:サークルKサンクス",name:"サンクス","name:en":"Sunkus","name:ja":"サンクス",shop:"convenience"}},"shop/convenience|サークルK":{countryCodes:["jp"],tags:{brand:"サークルK","brand:en":"Circle K","brand:ja":"サークルK","brand:wikidata":"Q3268010","brand:wikipedia":"en:Circle K",name:"サークルK","name:en":"Circle K","name:ja":"サークルK",shop:"convenience"}},"shop/convenience|スリーエフ":{countryCodes:["jp"],tags:{brand:"スリーエフ","brand:en":"Three F","brand:ja":"スリーエフ","brand:wikidata":"Q11313419","brand:wikipedia":"ja:スリーエフ",name:"スリーエフ","name:en":"Three F","name:ja":"スリーエフ",shop:"convenience"}},"shop/convenience|セイコーマート":{countryCodes:["jp"],tags:{brand:"セイコーマート","brand:en":"Seicomart","brand:ja":"セイコーマート","brand:wikidata":"Q11314123","brand:wikipedia":"ja:セイコーマート",name:"セイコーマート","name:en":"Seicomart","name:ja":"セイコーマート",shop:"convenience"}},"shop/convenience|セブン-イレブン":{countryCodes:["jp"],matchNames:["セブンイレブン(7-11)","セブンイレブン(seven-eleven)"],tags:{brand:"セブン-イレブン","brand:en":"7-Eleven","brand:ja":"セブン-イレブン","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"セブン-イレブン","name:en":"7-Eleven","name:ja":"セブン-イレブン","official_name:en":"Seven-Eleven",shop:"convenience"}},"shop/convenience|セーブオン":{countryCodes:["jp"],tags:{brand:"セーブオン","brand:en":"Save On","brand:ja":"セーブオン","brand:wikidata":"Q11314868","brand:wikipedia":"ja:セーブオン",name:"セーブオン","name:en":"Save On","name:ja":"セーブオン",shop:"convenience"}},"shop/convenience|デイリーヤマザキ":{countryCodes:["jp"],tags:{brand:"デイリーヤマザキ","brand:en":"Daily Yamazaki","brand:ja":"デイリーヤマザキ","brand:wikidata":"Q5209392","brand:wikipedia":"en:Daily Yamazaki",name:"デイリーヤマザキ","name:en":"Daily Yamazaki","name:ja":"デイリーヤマザキ",shop:"convenience"}},"shop/convenience|ナチュラルローソン":{countryCodes:["jp"],tags:{brand:"ナチュラルローソン","brand:en":"NATURAL LAWSON","brand:ja":"ナチュラルローソン","brand:wikidata":"Q11323850","brand:wikipedia":"ja:ナチュラルローソン",name:"ナチュラルローソン","name:en":"Natural Lawson","name:ja":"ナチュラルローソン",shop:"convenience"}},"shop/convenience|ファミリーマート":{countryCodes:["jp"],tags:{brand:"ファミリーマート","brand:en":"FamilyMart","brand:ja":"ファミリーマート","brand:wikidata":"Q1191685","brand:wikipedia":"en:FamilyMart",name:"ファミリーマート","name:en":"FamilyMart","name:ja":"ファミリーマート",shop:"convenience"}},"shop/convenience|ポプラ":{countryCodes:["jp"],tags:{brand:"ポプラ","brand:en":"Poplar","brand:ja":"ポプラ","brand:wikidata":"Q7229380","brand:wikipedia":"ja:ポプラ (コンビニエンスストア)",name:"ポプラ","name:en":"Poplar","name:ja":"ポプラ",shop:"convenience"}},"shop/convenience|ミニストップ":{countryCodes:["jp"],tags:{brand:"ミニストップ","brand:en":"Ministop","brand:ja":"ミニストップ","brand:wikidata":"Q1038929","brand:wikipedia":"ja:ミニストップ",name:"ミニストップ","name:en":"Ministop","name:ja":"ミニストップ",shop:"convenience"}},"shop/convenience|ヤマザキショップ":{countryCodes:["jp"],tags:{brand:"ヤマザキショップ","brand:ja":"ヤマザキショップ","brand:wikidata":"Q11345131","brand:wikipedia":"ja:ヤマザキショップ",name:"ヤマザキショップ","name:en":"Yamazaki Shop","name:ja":"ヤマザキショップ",shop:"convenience"}},"shop/convenience|ローソン":{countryCodes:["jp"],matchNames:["ローソン"],tags:{brand:"ローソン","brand:en":"LAWSON","brand:ja":"ローソン","brand:wikidata":"Q1557223","brand:wikipedia":"ja:ローソン",name:"ローソン","name:en":"Lawson","name:ja":"ローソン",shop:"convenience"}},"shop/convenience|ローソンストア100":{countryCodes:["jp"],tags:{brand:"ローソンストア100","brand:en":"LAWSON STORE 100","brand:ja":"ローソンストア100","brand:wikidata":"Q11350960","brand:wikipedia":"ja:ローソンストア100",name:"ローソンストア100","name:en":"Lawson Store 100","name:ja":"ローソンストア100",shop:"convenience"}},"shop/convenience|ローソン・スリーエフ":{countryCodes:["jp"],matchNames:["lawson+スリーエフ","ローソン・スリーエフ"],tags:{brand:"ローソン・スリーエフ","brand:en":"LAWSON・Three F","brand:ja":"ローソン・スリーエフ","brand:wikidata":"Q24866804","brand:wikipedia":"ja:ローソン・スリーエフ",name:"ローソン・スリーエフ","name:en":"Lawson・Three F","name:ja":"ローソン・スリーエフ",shop:"convenience"}},"shop/convenience|全家":{countryCodes:["cn"],tags:{brand:"全家","brand:en":"FamilyMart","brand:wikidata":"Q1191685","brand:wikipedia":"zh:FamilyMart",name:"全家","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|全家便利商店":{countryCodes:["tw"],tags:{brand:"全家便利商店","brand:en":"FamilyMart","brand:wikidata":"Q10891564","brand:wikipedia":"zh:全家便利商店",name:"全家便利商店","name:en":"FamilyMart",shop:"convenience"}},"shop/convenience|萊爾富":{countryCodes:["tw"],tags:{brand:"萊爾富","brand:en":"Hi-Life","brand:wikidata":"Q11326216","brand:wikipedia":"zh:萊爾富",name:"萊爾富","name:en":"Hi-Life",shop:"convenience"}},"shop/convenience|미니스톱":{countryCodes:["kr"],tags:{brand:"미니스톱","brand:ko":"미니스톱",name:"미니스톱","name:ko":"미니스톱",shop:"convenience"}},"shop/convenience|세븐일레븐":{countryCodes:["kr"],tags:{brand:"세븐일레븐","brand:en":"7-Eleven","brand:ko":"세븐일레븐","brand:wikidata":"Q259340","brand:wikipedia":"en:7-Eleven",name:"세븐일레븐","name:en":"7-Eleven","name:ko":"세븐일레븐",shop:"convenience"}},"shop/copyshop|FedEx Office":{countryCodes:["us"],matchNames:["fedex office print and ship center"],matchTags:["amenity/post_office"],tags:{brand:"FedEx Office","brand:wikidata":"Q474379","brand:wikipedia":"en:FedEx Office",name:"FedEx Office",shop:"copyshop"}},"shop/copyshop|Minuteman Press":{tags:{brand:"Minuteman Press","brand:wikidata":"Q64866081",name:"Minuteman Press",shop:"copyshop"}},"shop/copyshop|Photocopie":{tags:{brand:"Photocopie",name:"Photocopie",shop:"copyshop"}},"shop/copyshop|Sir Speedy":{countryCodes:["us"],matchTags:["amenity/post_office"],tags:{brand:"Sir Speedy","brand:wikidata":"Q17088225","brand:wikipedia":"en:Sir Speedy",name:"Sir Speedy",shop:"copyshop"}},"shop/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|Ив Роше":{tags:{brand:"Ив Роше",name:"Ив Роше",shop:"cosmetics"}},"shop/cosmetics|Л'Этуаль":{countryCodes:["ru"],tags:{brand:"Л'Этуаль","brand:wikidata":"Q18400706","brand:wikipedia":"ru:Л’Этуаль",name:"Л'Этуаль",shop:"cosmetics"}},"shop/cosmetics|Магнит Косметик":{countryCodes:["ru"],matchTags:["shop/chemist"],nomatch:["shop/convenience|Магнит","shop/supermarket|Магнит"],tags:{brand:"Магнит Косметик","brand:en":"Magnit Cosmetics","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит Косметик","name:en":"Magnit Cosmetics",shop:"cosmetics"}},"shop/cosmetics|Подружка":{countryCodes:["ru","ua"],tags:{brand:"Подружка",name:"Подружка",shop:"cosmetics"}},"shop/cosmetics|Чистый дом":{countryCodes:["ru","ua"],tags:{brand:"Чистый дом",name:"Чистый дом",shop:"cosmetics"}},"shop/country_store|Atwoods":{countryCodes:["us"],tags:{brand:"Atwoods","brand:wikidata":"Q4818874","brand:wikipedia":"en:Atwoods",name:"Atwoods",shop:"country_store"}},"shop/country_store|Blain's Farm & Fleet":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"Blain's Farm & Fleet","brand:wikidata":"Q4923906","brand:wikipedia":"en:Blain's Farm & Fleet",name:"Blain's Farm & Fleet",shop:"country_store"}},"shop/country_store|Bomgaars":{countryCodes:["us"],tags:{brand:"Bomgaars","brand:wikidata":"Q22059070","brand:wikipedia":"en:Bomgaars",name:"Bomgaars",shop:"country_store"}},"shop/country_store|Fleet Farm":{countryCodes:["us"],matchNames:["mills fleet farm"],tags:{brand:"Fleet Farm","brand:wikidata":"Q6859973","brand:wikipedia":"en:Fleet Farm",name:"Fleet Farm",shop:"country_store"}},"shop/country_store|Grange Co-op":{countryCodes:["us"],tags:{brand:"Grange Co-op","brand:wikidata":"Q5595639","brand:wikipedia":"en:Grange Cooperative",name:"Grange Co-op",shop:"country_store"}},"shop/country_store|Home of Economy":{countryCodes:["us"],tags:{brand:"Home of Economy","brand:wikidata":"Q5889100","brand:wikipedia":"en:Home of Economy",name:"Home of Economy",shop:"country_store"}},"shop/country_store|Norbys Farm Fleet":{countryCodes:["us"],tags:{brand:"Norbys Farm Fleet","brand:wikidata":"Q7050461","brand:wikipedia":"en:Norby's Farm Fleet",name:"Norbys Farm Fleet",shop:"country_store"}},"shop/country_store|Orscheln Farm & Home":{countryCodes:["us"],tags:{brand:"Orscheln Farm & Home","brand:wikidata":"Q22060331","brand:wikipedia":"en:Orscheln Farm & Home",name:"Orscheln Farm & Home",shop:"country_store"}},"shop/country_store|Peavey Mart":{countryCodes:["ca"],tags:{brand:"Peavey Mart","brand:wikidata":"Q7158483","brand:wikipedia":"en:Peavey Mart",name:"Peavey Mart",shop:"country_store"}},"shop/country_store|Rural King":{countryCodes:["us"],tags:{brand:"Rural King","brand:wikidata":"Q7380525","brand:wikipedia":"en:Rural King",name:"Rural King",shop:"country_store"}},"shop/country_store|TSC Stores":{countryCodes:["ca"],tags:{brand:"TSC Stores","brand:wikidata":"Q62720230",name:"TSC Stores",shop:"country_store"}},"shop/country_store|Theisen's":{countryCodes:["us"],tags:{brand:"Theisen's","brand:wikidata":"Q7777850","brand:wikipedia":"en:Theisen's",name:"Theisen's",shop:"country_store"}},"shop/country_store|Tractor Supply Company":{countryCodes:["us"],matchNames:["tractor supply co"],tags:{brand:"Tractor Supply Company","brand:wikidata":"Q15109925","brand:wikipedia":"en:Tractor Supply Company",name:"Tractor Supply Company",shop:"country_store"}},"shop/country_store|Wynnstay":{countryCodes:["gb"],tags:{brand:"Wynnstay","brand:wikidata":"Q63016351",name:"Wynnstay",shop:"country_store"}},"shop/craft|A.C. Moore":{countryCodes:["us"],tags:{brand:"A.C. Moore","brand:wikidata":"Q4647066","brand:wikipedia":"en:A.C. Moore",name:"A.C. Moore",shop:"craft"}},"shop/craft|Hobby Lobby":{countryCodes:["in","us"],tags:{brand:"Hobby Lobby","brand:wikidata":"Q5874938","brand:wikipedia":"en:Hobby Lobby",name:"Hobby Lobby",shop:"craft"}},"shop/craft|Hobbycraft":{countryCodes:["gb"],matchTags:["shop/art"],tags:{brand:"Hobbycraft","brand:wikidata":"Q16984508","brand:wikipedia":"en:Hobbycraft",name:"Hobbycraft",shop:"craft"}},"shop/craft|Jo-Ann":{countryCodes:["us"],tags:{brand:"Jo-Ann","brand:wikidata":"Q6203968","brand:wikipedia":"en:Jo-Ann Stores",name:"Jo-Ann",shop:"craft"}},"shop/craft|Michaels":{countryCodes:["ca","us"],tags:{brand:"Michaels","brand:wikidata":"Q6835667","brand:wikipedia":"en:Michaels",name:"Michaels",shop:"craft"}},"shop/craft|Woodcraft":{countryCodes:["us"],matchTags:["craft/carpenter","shop/doityourself","shop/hardware","shop/hobby"],tags:{brand:"Woodcraft","brand:wikidata":"Q22026341","brand:wikipedia":"en:Woodcraft Supply",name:"Woodcraft",shop:"craft"}},"shop/deli|ほっともっと":{countryCodes:["jp"],nomatch:["amenity/fast_food|ほっともっと"],tags:{brand:"ほっともっと","brand:en":"Hotto Motto","brand:ja":"ほっともっと","brand:wikidata":"Q10850949","brand:wikipedia":"ja:ほっともっと",name:"ほっともっと","name:en":"Hotto Motto","name:ja":"ほっともっと",shop:"deli"}},"shop/deli|京樽":{countryCodes:["jp"],matchTags:["amenity/fast_food"],tags:{brand:"京樽","brand:en":"Kyotaru","brand:ja":"京樽","brand:wikidata":"Q11374503","brand:wikipedia":"ja:京樽",name:"京樽","name:en":"Kyotaru","name:ja":"京樽",shop:"deli"}},"shop/department_store|Barneys New York":{countryCodes:["us"],matchNames:["barneys"],tags:{brand:"Barneys New York","brand:wikidata":"Q59465","brand:wikipedia":"en:Barneys New York",name:"Barneys New York",shop:"department_store"}},"shop/department_store|Bealls~(Florida-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876153","brand:wikipedia":"en:Bealls (Florida)",name:"Bealls",shop:"department_store"}},"shop/department_store|Bealls~(Texas-based)":{countryCodes:["us"],tags:{brand:"Bealls","brand:wikidata":"Q4876156","brand:wikipedia":"en:Bealls (Texas)",name:"Bealls",shop:"department_store"}},"shop/department_store|Belk":{countryCodes:["us"],tags:{brand:"Belk","brand:wikidata":"Q127428","brand:wikipedia":"en:Belk",name:"Belk",shop:"department_store"}},"shop/department_store|Bi-Mart":{countryCodes:["us"],tags:{brand:"Bi-Mart","brand:wikidata":"Q4902331","brand:wikipedia":"en:Bi-Mart",name:"Bi-Mart",shop:"department_store"}},"shop/department_store|Big Lots":{countryCodes:["us"],matchTags:["shop/variety_store"],tags:{brand:"Big Lots","brand:wikidata":"Q4905973","brand:wikipedia":"en:Big Lots",name:"Big Lots",shop:"department_store"}},"shop/department_store|Big W":{countryCodes:["au"],tags:{brand:"Big W","brand:wikidata":"Q4906646","brand:wikipedia":"en:Big W",name:"Big W",shop:"department_store"}},"shop/department_store|Bloomingdale's":{countryCodes:["us"],tags:{brand:"Bloomingdale's","brand:wikidata":"Q283383","brand:wikipedia":"en:Bloomingdale's",name:"Bloomingdale's",shop:"department_store"}},"shop/department_store|Boscov's":{countryCodes:["us"],tags:{brand:"Boscov's","brand:wikidata":"Q4947190","brand:wikipedia":"en:Boscov's",name:"Boscov's",shop:"department_store"}},"shop/department_store|Boyes":{countryCodes:["gb"],tags:{brand:"Boyes","brand:wikidata":"Q7958471","brand:wikipedia":"en:Boyes (department chain)",name:"Boyes",shop:"department_store"}},"shop/department_store|Canadian Tire":{countryCodes:["ca"],matchTags:["shop/doityourself"],nomatch:["amenity/fuel|Canadian Tire"],tags:{brand:"Canadian Tire","brand:wikidata":"Q1032400","brand:wikipedia":"en:Canadian Tire",name:"Canadian Tire",shop:"department_store"}},"shop/department_store|Casas Bahia":{countryCodes:["br"],tags:{brand:"Casas Bahia","brand:wikidata":"Q5048048","brand:wikipedia":"en:Casas Bahia",name:"Casas Bahia",shop:"department_store"}},"shop/department_store|Century 21":{countryCodes:["us"],matchNames:["c21"],nomatch:["office/estate_agent|Century 21"],tags:{brand:"Century 21","brand:wikidata":"Q5063125","brand:wikipedia":"en:Century 21 (department store)",name:"Century 21",shop:"department_store"}},"shop/department_store|Coppel":{tags:{brand:"Coppel","brand:wikidata":"Q2497795","brand:wikipedia":"en:Coppel",name:"Coppel",shop:"department_store"}},"shop/department_store|David Jones":{countryCodes:["au"],tags:{brand:"David Jones","brand:wikidata":"Q5235753","brand:wikipedia":"en:David Jones Limited",name:"David Jones",shop:"department_store"}},"shop/department_store|Debenhams":{countryCodes:["gb","ie"],tags:{brand:"Debenhams","brand:wikidata":"Q1181484","brand:wikipedia":"en:Debenhams",name:"Debenhams",shop:"department_store"}},"shop/department_store|Dillard's":{countryCodes:["us"],tags:{brand:"Dillard's","brand:wikidata":"Q844805","brand:wikipedia":"en:Dillard's",name:"Dillard's",shop:"department_store"}},"shop/department_store|El Corte Inglés":{countryCodes:["es"],matchNames:["corte ingles"],tags:{brand:"El Corte Inglés","brand:wikidata":"Q623133","brand:wikipedia":"en:El Corte Inglés",name:"El Corte Inglés",shop:"department_store"}},"shop/department_store|Falabella":{matchNames:["saga falabella"],nomatch:["amenity/bank|Banco Falabella"],tags:{brand:"Falabella","brand:wikidata":"Q5135229","brand:wikipedia":"en:Falabella (retail store)",name:"Falabella",shop:"department_store"}},"shop/department_store|Galeria Kaufhof":{countryCodes:["de"],tags:{brand:"Galeria Kaufhof","brand:wikidata":"Q322598","brand:wikipedia":"en:Galeria Kaufhof",name:"Galeria Kaufhof",shop:"department_store"}},"shop/department_store|Giant Tiger":{countryCodes:["ca"],tags:{brand:"Giant Tiger","brand:wikidata":"Q5558429","brand:wikipedia":"en:Giant Tiger",name:"Giant Tiger",shop:"department_store"}},"shop/department_store|Goody's":{countryCodes:["us"],tags:{brand:"Goody's","brand:wikidata":"Q5583733","brand:wikipedia":"en:Goody's (store)",name:"Goody's",shop:"department_store"}},"shop/department_store|Gordmans":{countryCodes:["us"],tags:{brand:"Gordmans","brand:wikidata":"Q5584725","brand:wikipedia":"en:Gordmans",name:"Gordmans",shop:"department_store"}},"shop/department_store|HEMA":{countryCodes:["be","de","lu","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",official_name:"J.C. Penney Company",shop:"department_store"}},"shop/department_store|John Lewis":{countryCodes:["gb"],tags:{brand:"John Lewis","brand:wikidata":"Q1918981","brand:wikipedia":"en:John Lewis & Partners",name:"John Lewis",shop:"department_store"}},"shop/department_store|Karstadt":{countryCodes:["de"],tags:{brand:"Karstadt","brand:wikidata":"Q182910","brand:wikipedia":"en:Karstadt",name:"Karstadt",shop:"department_store"}},"shop/department_store|Kmart~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(USA)"],tags:{brand:"Kmart","brand:wikidata":"Q6421682","brand:wikipedia":"en:Kmart Australia",name:"Kmart",shop:"department_store"}},"shop/department_store|Kmart~(USA)":{countryCodes:["us"],matchNames:["k-mart"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Kmart~(Australia)"],tags:{brand:"Kmart","brand:wikidata":"Q1753080","brand:wikipedia":"en:Kmart",name:"Kmart",shop:"department_store"}},"shop/department_store|Kohl's":{countryCodes:["us"],tags:{brand:"Kohl's","brand:wikidata":"Q967265","brand:wikipedia":"en:Kohl's",name:"Kohl's",shop:"department_store"}},"shop/department_store|Lojas Americanas":{countryCodes:["br"],tags:{brand:"Lojas Americanas","brand:wikidata":"Q3064093","brand:wikipedia":"en:Lojas Americanas",name:"Lojas Americanas",shop:"department_store"}},"shop/department_store|Lord & Taylor":{countryCodes:["us"],tags:{brand:"Lord & Taylor","brand:wikidata":"Q2749082","brand:wikipedia":"en:Lord & Taylor",name:"Lord & Taylor",shop:"department_store"}},"shop/department_store|Lotte Department Store":{matchNames:["lotte"],tags:{brand:"Lotte Department Store","brand:wikidata":"Q489905","brand:wikipedia":"en:Lotte Department Store",name:"Lotte Department Store",shop:"department_store"}},"shop/department_store|M&S Outlet":{matchNames:["marks & spencer outlet"],matchTags:["shop/supermarket"],tags:{brand:"M&S Outlet","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Outlet",shop:"department_store"}},"shop/department_store|Macy's":{countryCodes:["us"],tags:{brand:"Macy's","brand:wikidata":"Q629269","brand:wikipedia":"en:Macy's",name:"Macy's",shop:"department_store"}},"shop/department_store|Manor":{countryCodes:["ch"],tags:{brand:"Manor","brand:wikidata":"Q382686","brand:wikipedia":"en:Manor (department store)",name:"Manor",shop:"department_store"}},"shop/department_store|Marks & Spencer":{countryCodes:["gb","gr","ie"],matchNames:["m and s"],matchTags:["shop/supermarket"],tags:{brand:"Marks & Spencer","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"Marks & Spencer",shop:"department_store"}},"shop/department_store|Marshalls":{countryCodes:["ca","us"],tags:{brand:"Marshalls","brand:wikidata":"Q15903261","brand:wikipedia":"en:Marshalls",name:"Marshalls",shop:"department_store"}},"shop/department_store|Muji":{countryCodes:["it"],tags:{brand:"Muji","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"en:Muji",name:"Muji","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|Myer":{countryCodes:["au"],tags:{brand:"Myer","brand:wikidata":"Q1110323","brand:wikipedia":"en:Myer",name:"Myer",shop:"department_store"}},"shop/department_store|Neiman Marcus":{countryCodes:["us"],tags:{brand:"Neiman Marcus","brand:wikidata":"Q743497","brand:wikipedia":"en:Neiman Marcus",name:"Neiman Marcus",shop:"department_store"}},"shop/department_store|Nordstrom":{countryCodes:["ca","us"],tags:{brand:"Nordstrom","brand:wikidata":"Q174310","brand:wikipedia":"en:Nordstrom",name:"Nordstrom",shop:"department_store"}},"shop/department_store|Oechsle":{countryCodes:["pe"],tags:{brand:"Oechsle","brand:wikidata":"Q6049096","brand:wikipedia":"es:Oechsle",name:"Oechsle",shop:"department_store"}},"shop/department_store|París":{countryCodes:["cl","pe"],tags:{brand:"París","brand:wikidata":"Q20812805","brand:wikipedia":"en:París (retail store)",name:"París",shop:"department_store"}},"shop/department_store|Printemps":{countryCodes:["ad","cn","fr","jp","sa"],tags:{brand:"Printemps","brand:wikidata":"Q1535260","brand:wikipedia":"fr:Printemps (grands magasins)",name:"Printemps",shop:"department_store"}},"shop/department_store|Ripley":{countryCodes:["cl","pe"],tags:{brand:"Ripley","brand:wikidata":"Q3433040","brand:wikipedia":"en:Ripley S.A.",name:"Ripley",shop:"department_store"}},"shop/department_store|Ross":{countryCodes:["us"],tags:{brand:"Ross","brand:wikidata":"Q3442791","brand:wikipedia":"en:Ross Stores",name:"Ross",official_name:"Ross Dress for Less",shop:"department_store"}},"shop/department_store|Saks Fifth Avenue":{countryCodes:["ca","us"],tags:{brand:"Saks Fifth Avenue","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Fifth Avenue",shop:"department_store"}},"shop/department_store|Saks Off 5th":{countryCodes:["ca","us"],tags:{brand:"Saks Off 5th","brand:wikidata":"Q2723882","brand:wikipedia":"en:Saks Fifth Avenue",name:"Saks Off 5th",shop:"department_store"}},"shop/department_store|Sears":{countryCodes:["mx","us"],nomatch:["shop/car_repair|Sears Auto Center"],tags:{brand:"Sears","brand:wikidata":"Q6499202","brand:wikipedia":"en:Sears",name:"Sears",shop:"department_store"}},"shop/department_store|Sears Hometown":{countryCodes:["us"],matchNames:["sears hometown store","sears hometown stores"],tags:{brand:"Sears Hometown","brand:wikidata":"Q69926963",name:"Sears Hometown",shop:"department_store"}},"shop/department_store|Sears Outlet":{countryCodes:["us"],matchNames:["sears outlet store","sears outlet stores"],tags:{brand:"Sears Outlet","brand:wikidata":"Q20080412",name:"Sears Outlet",shop:"department_store"}},"shop/department_store|Shopko":{countryCodes:["us"],tags:{brand:"Shopko","brand:wikidata":"Q7501155","brand:wikipedia":"en:Shopko",name:"Shopko",shop:"department_store"}},"shop/department_store|Stein Mart":{countryCodes:["us"],tags:{brand:"Stein Mart","brand:wikidata":"Q7606770","brand:wikipedia":"en:Stein Mart",name:"Stein Mart",shop:"department_store"}},"shop/department_store|Stockmann":{countryCodes:["fi"],tags:{brand:"Stockmann","brand:wikidata":"Q1543093","brand:wikipedia":"fi:Stockmann",name:"Stockmann",shop:"department_store"}},"shop/department_store|TJ Maxx":{countryCodes:["us"],tags:{brand:"TJ Maxx","brand:wikidata":"Q10860683","brand:wikipedia":"en:TJ Maxx",name:"TJ Maxx",shop:"department_store"}},"shop/department_store|TK Maxx":{tags:{brand:"TK Maxx","brand:wikidata":"Q23823668","brand:wikipedia":"en:TK Maxx",name:"TK Maxx",shop:"department_store"}},"shop/department_store|Target~(Australia)":{countryCodes:["au"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(USA)"],tags:{brand:"Target","brand:wikidata":"Q7685854","brand:wikipedia":"en:Target Australia",name:"Target",shop:"department_store"}},"shop/department_store|Target~(USA)":{countryCodes:["us"],matchNames:["Super Target"],matchTags:["shop/supermarket"],nomatch:["shop/department_store|Target~(Australia)"],tags:{brand:"Target","brand:wikidata":"Q1046951","brand:wikipedia":"en:Target Corporation",name:"Target",shop:"department_store"}},"shop/department_store|The Warehouse":{countryCodes:["nz"],tags:{brand:"The Warehouse","brand:wikidata":"Q3566291","brand:wikipedia":"en:The Warehouse Group",name:"The Warehouse",shop:"department_store"}},"shop/department_store|Walmart":{matchTags:["shop/supermarket"],tags:{brand:"Walmart","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart",shop:"department_store"}},"shop/department_store|Woolworth":{countryCodes:["de"],tags:{brand:"Woolworth","brand:wikidata":"Q183538","brand:wikipedia":"de:Woolworth Deutschland",name:"Woolworth",shop:"department_store"}},"shop/department_store|Åhléns":{countryCodes:["se"],tags:{brand:"Åhléns","brand:wikidata":"Q270851","brand:wikipedia":"sv:Åhléns",name:"Åhléns",shop:"department_store"}},"shop/department_store|Épicerie":{countryCodes:["ma"],tags:{brand:"Épicerie",name:"Épicerie",shop:"department_store"}},"shop/department_store|Éxito":{countryCodes:["co"],matchTags:["shop/supermarket"],tags:{brand:"Éxito",name:"Éxito",shop:"department_store"}},"shop/department_store|東急ハンズ":{countryCodes:["jp"],tags:{brand:"東急ハンズ","brand:en":"Tokyu Hands","brand:ja":"東急ハンズ","brand:wikidata":"Q859212","brand:wikipedia":"ja:東急ハンズ",name:"東急ハンズ","name:en":"Tokyu Hands","name:ja":"東急ハンズ",shop:"department_store"}},"shop/department_store|無印良品":{countryCodes:["jp","tw"],tags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品",shop:"department_store"}},"shop/department_store|롯데백화점":{countryCodes:["kr"],tags:{brand:"롯데백화점","brand:ko":"롯데백화점","brand:wikidata":"Q489905","brand:wikipedia":"ko:롯데백화점",name:"롯데백화점","name:en":"Lotte Department Store","name:ko":"롯데백화점",shop:"department_store"}},"shop/doityourself|Ace Hardware":{tags:{brand:"Ace Hardware","brand:wikidata":"Q4672981","brand:wikipedia":"en:Ace Hardware",name:"Ace Hardware",shop:"doityourself"}},"shop/doityourself|B&Q":{tags:{brand:"B&Q","brand:wikidata":"Q707602","brand:wikipedia":"en:B&Q",name:"B&Q",shop:"doityourself"}},"shop/doityourself|Bauhaus":{tags:{brand:"Bauhaus","brand:wikidata":"Q672043","brand:wikipedia":"en:Bauhaus (company)",name:"Bauhaus",shop:"doityourself"}},"shop/doityourself|Biltema":{countryCodes:["dk","fi","no","se"],tags:{brand:"Biltema","brand:wikidata":"Q3355552","brand:wikipedia":"en:Biltema",name:"Biltema",shop:"doityourself"}},"shop/doityourself|Brico":{countryCodes:["be","fr","it"],tags:{brand:"Brico","brand:wikidata":"Q2510786","brand:wikipedia":"en:Brico",name:"Brico",shop:"doityourself"}},"shop/doityourself|Brico Dépôt":{countryCodes:["es","fr","pt","ro"],tags:{brand:"Brico Dépôt","brand:wikidata":"Q2889702","brand:wikipedia":"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|Jula":{tags:{brand:"Jula",name:"Jula",shop:"doityourself"}},"shop/doityourself|Karwei":{countryCodes:["nl"],tags:{brand:"Karwei","brand:wikidata":"Q2097480","brand:wikipedia":"en:Karwei",name:"Karwei",shop:"doityourself"}},"shop/doityourself|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:en":"Keiyo","brand:ja":"ケーヨー","brand:wikidata":"Q11301462","brand:wikipedia":"ja:ケーヨー",name:"ケーヨー","name:en":"Keiyo","name:ja":"ケーヨー",shop:"doityourself"}},"shop/doityourself|コメリ":{countryCodes:["jp"],tags:{brand:"コメリ","brand:en":"Komeri","brand:ja":"コメリ","brand:wikidata":"Q11302690","brand:wikipedia":"ja:コメリ",name:"コメリ","name:en":"Komeri","name:ja":"コメリ",shop:"doityourself"}},"shop/doityourself|コーナン":{countryCodes:["jp"],tags:{brand:"コーナン","brand:en":"Kohnan","brand:ja":"コーナン","brand:wikidata":"Q11303403","brand:wikipedia":"ja:コーナン",name:"コーナン","name:en":"Kohnan","name:ja":"コーナン",shop:"doityourself"}},"shop/doityourself|ナフコ":{countryCodes:["jp"],tags:{brand:"ナフコ","brand:en":"Nafco","brand:ja":"ナフコ","brand:wikidata":"Q11323981","brand:wikipedia":"ja:ナフコ (ホームセンター)",name:"ナフコ","name:en":"Nafco","name:ja":"ナフコ",shop:"doityourself"}},"shop/doors|Юркас":{countryCodes:["by"],tags:{brand:"Юркас",name:"Юркас",shop:"doors"}},"shop/dry_cleaning|5àsec":{tags:{brand:"5àsec","brand:wikidata":"Q2817899","brand:wikipedia":"fr:5àsec",name:"5àsec",shop:"dry_cleaning"}},"shop/dry_cleaning|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/electrical|Kafkas":{countryCodes:["gr"],tags:{brand:"Kafkas","brand:wikidata":"Q68201770",name:"Kafkas",shop:"electrical"}},"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":{countryCodes:["ar"],tags:{brand:"Frávega","brand:wikidata":"Q5401467","brand:wikipedia":"es:Frávega",name:"Frávega",shop:"electronics"}},"shop/electronics|Garbarino":{tags:{brand:"Garbarino","brand:wikidata":"Q5875270","brand:wikipedia":"es:Garbarino",name:"Garbarino",shop:"electronics"}},"shop/electronics|Gigantti":{countryCodes:["fi"],tags:{brand:"Gigantti","brand:wikidata":"Q42512186","brand:wikipedia":"fi:Gigantti (tavarataloketju)",name:"Gigantti",shop:"electronics"}},"shop/electronics|Hartlauer":{countryCodes:["at"],tags:{brand:"Hartlauer","brand:wikidata":"Q1587223","brand:wikipedia":"de:Hartlauer",name:"Hartlauer",shop:"electronics"}},"shop/electronics|Interdiscount":{countryCodes:["ch"],tags:{brand:"Interdiscount","brand:wikidata":"Q1665980","brand:wikipedia":"de:Interdiscount",name:"Interdiscount",shop:"electronics"}},"shop/electronics|JB Hi-Fi":{countryCodes:["au","nz"],tags:{brand:"JB Hi-Fi","brand:wikidata":"Q3310113","brand:wikipedia":"en:JB Hi-Fi",name:"JB Hi-Fi",shop:"electronics"}},"shop/electronics|Jaycar":{countryCodes:["au","nz"],tags:{brand:"Jaycar","brand:wikidata":"Q6167713","brand:wikipedia":"en:Jaycar",name:"Jaycar",shop:"electronics"}},"shop/electronics|Kjell & Company":{countryCodes:["no","se"],matchNames:["kjell och company"],tags:{brand:"Kjell & Company","brand:wikidata":"Q6419332","brand:wikipedia":"en:Kjell & Company",name:"Kjell & Company",shop:"electronics"}},"shop/electronics|Komputronik":{countryCodes:["pl"],tags:{brand:"Komputronik","brand:wikidata":"Q11742085","brand:wikipedia":"pl:Komputronik",name:"Komputronik",shop:"electronics"}},"shop/electronics|LG":{tags:{brand:"LG",name:"LG",shop:"electronics"}},"shop/electronics|La Curacao":{tags:{brand:"La Curacao","brand:wikidata":"Q5194599","brand:wikipedia":"en:Curacao (retail store)",name:"La Curacao",shop:"electronics"}},"shop/electronics|MDA":{tags:{brand:"MDA",name:"MDA",shop:"electronics"}},"shop/electronics|Maplin":{countryCodes:["gb"],tags:{brand:"Maplin","brand:wikidata":"Q6754124","brand:wikipedia":"en:Maplin (retailer)",name:"Maplin",shop:"electronics"}},"shop/electronics|Media Expert":{countryCodes:["pl"],tags:{brand:"Media Expert","brand:wikidata":"Q11776794","brand:wikipedia":"pl:Media Expert",name:"Media Expert",shop:"electronics"}},"shop/electronics|Media Markt":{tags:{brand:"Media Markt","brand:wikidata":"Q2381223","brand:wikipedia":"en:Media Markt",name:"Media Markt",shop:"electronics"}},"shop/electronics|Medimax":{countryCodes:["de"],tags:{brand:"Medimax","brand:wikidata":"Q62872450",name:"Medimax",shop:"electronics"}},"shop/electronics|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","se"],tags:{brand:"Power","brand:wikidata":"Q20857751","brand:wikipedia":"fi:Power",name:"Power",shop:"electronics"}},"shop/electronics|RTV Euro AGD":{countryCodes:["pl"],tags:{brand:"RTV Euro AGD","brand:wikidata":"Q7277895","brand:wikipedia":"pl:RTV Euro AGD",name:"RTV Euro AGD",shop:"electronics"}},"shop/electronics|RadioShack":{tags:{brand:"RadioShack","brand:wikidata":"Q1195490","brand:wikipedia":"en:RadioShack",name:"RadioShack",shop:"electronics"}},"shop/electronics|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","brand:wikidata":"Q3999692","brand:wikipedia":"it:Trony",name:"Trony",shop:"electronics"}},"shop/electronics|Unieuro":{countryCodes:["it"],tags:{brand:"Unieuro","brand:wikidata":"Q4004687","brand:wikipedia":"en:Unieuro",name:"Unieuro",shop:"electronics"}},"shop/electronics|Worten":{countryCodes:["es","pt"],tags:{brand:"Worten","brand:wikidata":"Q10394039","brand:wikipedia":"pt:Worten",name:"Worten",shop:"electronics"}},"shop/electronics|b8ta":{countryCodes:["us"],tags:{brand:"b8ta","brand:wikidata":"Q55604609","brand:wikipedia":"en:B8ta",name:"b8ta",shop:"electronics"}},"shop/electronics|М.Видео":{countryCodes:["ru"],tags:{brand:"М.Видео","brand:en":"M.video","brand:wikidata":"Q6558800","brand:wikipedia":"en:M.video",name:"М.Видео","name:en":"M.video",shop:"electronics"}},"shop/electronics|Фокстрот":{countryCodes:["ua"],tags:{brand:"Фокстрот","brand:wikidata":"Q16721578","brand:wikipedia":"uk:Фокстрот (торгова мережа)",name:"Фокстрот",shop:"electronics"}},"shop/electronics|Эксперт":{countryCodes:["ru"],tags:{brand:"Эксперт","brand:en":"Expert","brand:ru":"Эксперт","brand:wikidata":"Q4530590","brand:wikipedia":"ru:Эксперт (сеть магазинов)",name:"Эксперт","name:en":"Expert","name:ru":"Эксперт",shop:"electronics"}},"shop/electronics|Эльдорадо":{countryCodes:["ru","ua"],tags:{brand:"Эльдорадо","brand:wikidata":"Q4531492","brand:wikipedia":"ru:Эльдорадо (сеть магазинов)",name:"Эльдорадо",shop:"electronics"}},"shop/electronics|エディオン":{countryCodes:["jp"],tags:{brand:"エディオン","brand:en":"EDION","brand:ja":"エディオン","brand:wikidata":"Q11290252","brand:wikipedia":"ja:エディオン",name:"エディオン","name:en":"EDION","name:ja":"エディオン",shop:"electronics"}},"shop/electronics|ケーズデンキ":{countryCodes:["jp"],matchTags:["shop/appliance"],tags:{brand:"ケーズデンキ","brand:en":"K's Denki","brand:ja":"ケーズデンキ","brand:wikidata":"Q6322472","brand:wikipedia":"ja:ケーズホールディングス",name:"ケーズデンキ","name:en":"K's Denki","name:ja":"ケーズデンキ",shop:"electronics"}},"shop/electronics|コジマ":{countryCodes:["jp"],tags:{brand:"コジマ","brand:en":"Kojima","brand:ja":"コジマ","brand:wikidata":"Q11302052","brand:wikipedia":"ja:コジマ",name:"コジマ","name:en":"Kojima","name:ja":"コジマ",shop:"electronics"}},"shop/electronics|ソフマップ":{countryCodes:["jp"],tags:{brand:"ソフマップ","brand:en":"Sofmap","brand:ja":"ソフマップ","brand:wikidata":"Q7553789","brand:wikipedia":"ja:ソフマップ",name:"ソフマップ","name:en":"Sofmap","name:ja":"ソフマップ",shop:"electronics"}},"shop/electronics|ノジマ":{countryCodes:["jp"],tags:{brand:"ノジマ","brand:en":"Nojima","brand:ja":"ノジマ","brand:wikidata":"Q11325660","brand:wikipedia":"ja:ノジマ",name:"ノジマ","name:en":"Nojima","name:ja":"ノジマ",shop:"electronics"}},"shop/electronics|ビックカメラ":{countryCodes:["jp"],tags:{brand:"ビックカメラ","brand:en":"Bic Camera","brand:ja":"ビックカメラ","brand:wikidata":"Q4903531","brand:wikipedia":"ja:ビックカメラ",name:"ビックカメラ","name:en":"Bic Camera","name:ja":"ビックカメラ",shop:"electronics"}},"shop/electronics|ヤマダ電機":{countryCodes:["jp"],tags:{brand:"ヤマダ電機","brand:en":"Yamada Denki","brand:ja":"ヤマダ電機","brand:wikidata":"Q1096390","brand:wikipedia":"en:Yamada Denki",name:"ヤマダ電機","name:en":"Yamada Denki","name:ja":"ヤマダ電機",shop:"electronics"}},"shop/electronics|ヨドバシカメラ":{countryCodes:["jp"],tags:{brand:"ヨドバシカメラ","brand:en":"Yodobashi Camera","brand:ja":"ヨドバシカメラ","brand:wikidata":"Q168467","brand:wikipedia":"ja:ヨドバシカメラ",name:"ヨドバシカメラ","name:en":"Yodobashi Camera","name:ja":"ヨドバシカメラ",shop:"electronics"}},"shop/electronics|全國電子":{countryCodes:["tw"],tags:{brand:"全國電子","brand:en":"E-life Mall","brand:wikidata":"Q10891540","brand:wikipedia":"zh:全國電子",name:"全國電子","name:en":"E-life Mall",shop:"electronics"}},"shop/electronics|燦坤3C":{countryCodes:["tw"],tags:{brand:"燦坤3C","brand:en":"Tsannkuen 3C","brand:wikidata":"Q11569285","brand:wikipedia":"zh:燦坤",name:"燦坤3C","name:en":"Tsannkuen 3C",shop:"electronics"}},"shop/erotic|Adam & Eve":{countryCodes:["ca","pe","us"],tags:{brand:"Adam & Eve","brand:wikidata":"Q4678604","brand:wikipedia":"en:Adam & Eve (company)",name:"Adam & Eve",shop:"erotic"}},"shop/erotic|Amazing Intimate Essentials":{countryCodes:["us"],tags:{brand:"Amazing Intimate Essentials","brand:wikidata":"Q66305936",name:"Amazing Intimate Essentials",shop:"erotic",short_name:"Amazing.net"}},"shop/erotic|Ann Summers":{countryCodes:["gb","ie"],tags:{brand:"Ann Summers","brand:wikidata":"Q579524","brand:wikipedia":"en:Ann Summers",name:"Ann Summers",shop:"erotic"}},"shop/erotic|Orion":{countryCodes:["at","de"],tags:{brand:"Orion","brand:wikidata":"Q1609577","brand:wikipedia":"de:Orion (Erotik)",name:"Orion",shop:"erotic"}},"shop/erotic|Pulse and Cocktails":{countryCodes:["gb"],tags:{brand:"Pulse and Cocktails","brand:wikidata":"Q7259672","brand:wikipedia":"en:Pulse and Cocktails",name:"Pulse and Cocktails",shop:"erotic"}},"shop/fabric|Mondial Tissus":{countryCodes:["fr"],matchTags:["shop/curtain","shop/department_store"],tags:{brand:"Mondial Tissus","brand:wikidata":"Q17635288","brand:wikipedia":"fr:Mondial Tissus",name:"Mondial Tissus",shop:"fabric"}},"shop/fashion_accessories|Brighton Collectibles":{countryCodes:["us"],matchNames:["brighton"],tags:{brand:"Brighton Collectibles","brand:wikidata":"Q4967623","brand:wikipedia":"en:Brighton Collectibles",name:"Brighton Collectibles",shop:"fashion_accessories"}},"shop/fashion_accessories|Bvlgari":{matchNames:["bulgari"],tags:{brand:"Bulgari","brand:wikidata":"Q752515","brand:wikipedia":"en:Bulgari",name:"Bvlgari",shop:"fashion_accessories"}},"shop/fashion_accessories|Claire's":{matchTags:["shop/jewelry"],tags:{brand:"Claire's","brand:wikidata":"Q2974996","brand:wikipedia":"en:Claire's",name:"Claire's",shop:"fashion_accessories"}},"shop/fashion_accessories|Radley London":{countryCodes:["gb"],tags:{brand:"Radley London","brand:wikidata":"Q7281436",name:"Radley London",shop:"fashion_accessories",short_name:"Radley"}},"shop/fashion_accessories|Van Cleef & Arpels":{matchNames:["van cleef & arples"],tags:{brand:"Van Cleef & Arpels","brand:wikidata":"Q2708181","brand:wikipedia":"en:Van Cleef & Arpels",name:"Van Cleef & Arpels",shop:"fashion_accessories"}},"shop/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|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","lu","pt"],matchTags:["shop/interior_decoration"],tags:{brand:"Casa","brand:wikidata":"Q1991755","brand:wikipedia":"fr:Casa (enseigne)",name:"Casa",shop:"furniture"}},"shop/furniture|Conforama":{countryCodes:["ch","es","fr","it","lu"],tags:{brand:"Conforama","brand:wikidata":"Q541134","brand:wikipedia":"en:Conforama",name:"Conforama",shop:"furniture"}},"shop/furniture|Crate & Barrel":{countryCodes:["us"],tags:{brand:"Crate & Barrel","brand:wikidata":"Q5182604","brand:wikipedia":"en:Crate & Barrel",name:"Crate & Barrel",shop:"furniture"}},"shop/furniture|DFS":{countryCodes:["gb"],tags:{brand:"DFS","brand:wikidata":"Q5204927","brand:wikipedia":"en:DFS Furniture",name:"DFS",shop:"furniture"}},"shop/furniture|Dunelm":{countryCodes:["gb"],matchNames:["dunelm hill"],tags:{brand:"Dunelm","brand:wikidata":"Q5315020","brand:wikipedia":"en:Dunelm Group",name:"Dunelm",shop:"furniture"}},"shop/furniture|Dänisches Bettenlager":{countryCodes:["at","de"],matchTags:["shop/bed"],tags:{brand:"Dänisches Bettenlager","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"Dänisches Bettenlager",shop:"furniture"}},"shop/furniture|Ethan Allen":{countryCodes:["ca","us"],tags:{brand:"Ethan Allen","brand:wikidata":"Q5402870","brand:wikipedia":"en:Ethan Allen (company)",name:"Ethan Allen",shop:"furniture"}},"shop/furniture|Fly":{countryCodes:["fr"],tags:{brand:"Fly","brand:wikidata":"Q1389184","brand:wikipedia":"fr:Fly (entreprise)",name:"Fly",shop:"furniture"}},"shop/furniture|Freedom":{countryCodes:["au"],matchNames:["freedom furniture"],tags:{brand:"Freedom","brand:wikidata":"Q5500546","brand:wikipedia":"en:Freedom Furniture",name:"Freedom",shop:"furniture"}},"shop/furniture|Furniture Village":{countryCodes:["gb"],tags:{brand:"Furniture Village","brand:wikidata":"Q5509685","brand:wikipedia":"en:Furniture Village",name:"Furniture Village",shop:"furniture"}},"shop/furniture|HSL":{countryCodes:["gb"],tags:{brand:"HSL","brand:wikidata":"Q64284324",name:"HSL",official_name:"High Seat Limited",shop:"furniture"}},"shop/furniture|Harveys":{countryCodes:["gb"],nomatch:["amenity/fast_food|Harvey's"],tags:{brand:"Harveys","brand:wikidata":"Q5677754","brand:wikipedia":"en:Harveys Furniture",name:"Harveys",shop:"furniture"}},"shop/furniture|Havertys":{countryCodes:["us"],tags:{brand:"Havertys","brand:wikidata":"Q5683881","brand:wikipedia":"en:Havertys",name:"Havertys",shop:"furniture"}},"shop/furniture|IKEA":{tags:{brand:"IKEA","brand:wikidata":"Q54078","brand:wikipedia":"en:IKEA",name:"IKEA",shop:"furniture"}},"shop/furniture|Isku":{countryCodes:["fi"],tags:{brand:"Isku","brand:wikidata":"Q11865127","brand:wikipedia":"fi:Isku (yritys)",name:"Isku",shop:"furniture"}},"shop/furniture|JYSK":{tags:{brand:"JYSK","brand:wikidata":"Q138913","brand:wikipedia":"en:Jysk (store)",name:"JYSK",shop:"furniture"}},"shop/furniture|Jerome's Furniture":{countryCodes:["us"],tags:{brand:"Jerome's Furniture","brand:wikidata":"Q16997693","brand:wikipedia":"en:Jerome's",name:"Jerome's Furniture",shop:"furniture",short_name:"Jerome's"}},"shop/furniture|Kika":{countryCodes:["at"],tags:{brand:"Kika","brand:wikidata":"Q256456","brand:wikipedia":"de:Kika (Möbelhaus)",name:"Kika",shop:"furniture"}},"shop/furniture|Kwantum":{countryCodes:["nl"],tags:{brand:"Kwantum","brand:wikidata":"Q2262591","brand:wikipedia":"nl:Kwantum (winkelketen)",name:"Kwantum",shop:"furniture"}},"shop/furniture|La-Z-Boy":{countryCodes:["ca","us"],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|Leiner":{countryCodes:["at"],tags:{brand:"Leiner","brand:wikidata":"Q1661472","brand:wikipedia":"de:Rudolf Leiner (Unternehmen)",name:"Leiner",shop:"furniture"}},"shop/furniture|LoveSac":{countryCodes:["us"],tags:{brand:"LoveSac","brand:wikidata":"Q6690181","brand:wikipedia":"en:LoveSac",name:"LoveSac",shop:"furniture"}},"shop/furniture|Maisons du Monde":{countryCodes:["be","ch","de","es","fr","gb","it","lu"],tags:{brand:"Maisons du Monde","brand:wikidata":"Q3280364","brand:wikipedia":"fr:Maisons du Monde",name:"Maisons du Monde",shop:"furniture"}},"shop/furniture|Möbelix":{countryCodes:["at","cz","hu","sk"],tags:{brand:"Möbelix","brand:wikidata":"Q877547","brand:wikipedia":"hu:Möbelix",name:"Möbelix",shop:"furniture"}},"shop/furniture|Mömax":{countryCodes:["at","de","hu","si"],tags:{brand:"Mömax","brand:wikidata":"Q56388481","brand:wikipedia":"hu:Mömax",name:"Mömax",shop:"furniture"}},"shop/furniture|Oak Furnitureland":{countryCodes:["gb"],tags:{brand:"Oak Furnitureland","brand:wikidata":"Q16959724","brand:wikipedia":"en:Oak Furniture Land",name:"Oak Furnitureland",shop:"furniture"}},"shop/furniture|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","lu"],tags:{brand:"Roller","brand:wikidata":"Q1621286","brand:wikipedia":"de:Roller (Möbelhaus)",name:"Roller",shop:"furniture"}},"shop/furniture|Rooms To Go":{countryCodes:["us"],tags:{brand:"Rooms To Go","brand:wikidata":"Q7366329","brand:wikipedia":"en:Rooms To Go",name:"Rooms To Go",shop:"furniture"}},"shop/furniture|Rutar":{countryCodes:["at"],tags:{brand:"Rutar","brand:wikidata":"Q22910157","brand:wikipedia":"de:RUTAR Group",name:"Rutar",shop:"furniture"}},"shop/furniture|ScS":{countryCodes:["gb"],tags:{brand:"ScS","brand:wikidata":"Q19654399","brand:wikipedia":"en:ScS",name:"ScS",shop:"furniture"}},"shop/furniture|The Brick":{countryCodes:["ca"],tags:{brand:"The Brick","brand:wikidata":"Q7720000","brand:wikipedia":"en:The Brick",name:"The Brick",shop:"furniture"}},"shop/furniture|Urban Barn":{countryCodes:["ca"],tags:{brand:"Urban Barn","brand:wikidata":"Q62515207",name:"Urban Barn",shop:"furniture"}},"shop/furniture|Value City Furniture":{countryCodes:["us"],tags:{brand:"Value City Furniture","brand:wikidata":"Q63859417",name:"Value City Furniture",shop:"furniture"}},"shop/furniture|XXXLutz":{countryCodes:["at","de"],tags:{brand:"XXXLutz","brand:wikidata":"Q70339467","brand:wikipedia":"de:XXXLutz",name:"XXXLutz",shop:"furniture"}},"shop/furniture|west elm":{tags:{brand:"west elm","brand:wikidata":"Q7985021","brand:wikipedia":"en:Williams-Sonoma",name:"west elm",shop:"furniture"}},"shop/furniture|İstikbal":{countryCodes:["tr"],tags:{brand:"İstikbal","brand:wikidata":"Q6031999","brand:wikipedia":"tr:İstikbal",name:"İstikbal",shop:"furniture"}},"shop/furniture|Много мебели":{countryCodes:["ru"],tags:{brand:"Много мебели",name:"Много мебели",shop:"furniture"}},"shop/furniture|ニトリ":{countryCodes:["jp"],tags:{brand:"ニトリ","brand:en":"Nitori","brand:ja":"ニトリ","brand:wikidata":"Q10801453","brand:wikipedia":"en:Nitori",name:"ニトリ","name:en":"Nitori","name:ja":"ニトリ",shop:"furniture"}},"shop/games|Games Workshop":{countryCodes:["de","fr","gb","nl","us"],tags:{brand:"Games Workshop","brand:wikidata":"Q587270","brand:wikipedia":"en:Games Workshop",name:"Games Workshop",shop:"games"}},"shop/garden_centre|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","brand:wikidata":"Q483551","brand:wikipedia":"en:Walmart",name:"Walmart Garden Center",shop:"garden_centre"}},"shop/garden_centre|Welkoop":{countryCodes:["nl"],tags:{brand:"Welkoop",name:"Welkoop",shop:"garden_centre"}},"shop/garden_centre|ZG Raiffeisen":{countryCodes:["de"],nomatch:["amenity/fuel|ZG Raiffeisen"],tags:{brand:"ZG Raiffeisen","brand:wikidata":"Q136135","brand:wikipedia":"de:ZG Raiffeisen",name:"ZG Raiffeisen",shop:"garden_centre"}},"shop/gas|Airgas":{countryCodes:["us"],matchTags:["amenity/fuel","shop/fuel","shop/trade"],tags:{brand:"Airgas","brand:wikidata":"Q80635","brand:wikipedia":"en:Airgas",name:"Airgas",shop:"gas"}},"shop/gas|AmeriGas":{countryCodes:["us"],nomatch:["amenity/vending_machine|AmeriGas"],tags:{brand:"AmeriGas","brand:wikidata":"Q23130318","brand:wikipedia":"en:AmeriGas","fuel:lpg":"yes",name:"AmeriGas",shop:"gas"}},"shop/gas|Ferrellgas":{countryCodes:["us"],tags:{brand:"Ferrellgas","brand:wikidata":"Q5445299","brand:wikipedia":"en:Ferrellgas","fuel:lpg":"yes",name:"Ferrellgas",shop:"gas"}},"shop/gift|American Greetings":{countryCodes:["us"],tags:{brand:"American Greetings","brand:wikidata":"Q464767","brand:wikipedia":"en:American Greetings",name:"American Greetings",shop:"gift"}},"shop/gift|Card Factory":{countryCodes:["gb","im"],tags:{brand:"Card Factory","brand:wikidata":"Q5038192","brand:wikipedia":"en:Card Factory",name:"Card Factory",shop:"gift"}},"shop/gift|Carlton Cards":{countryCodes:["ca"],matchNames:["carlton"],tags:{brand:"Carlton Cards","brand:wikidata":"Q5042968","brand:wikipedia":"en:Carlton Cards",name:"Carlton Cards",shop:"gift"}},"shop/gift|Clintons":{countryCodes:["gb"],matchNames:["clinton cards"],tags:{brand:"Clintons","brand:wikidata":"Q5134299","brand:wikipedia":"en:Clintons",name:"Clintons",shop:"gift"}},"shop/gift|Cracker Barrel":{countryCodes:["us"],nomatch:["amenity/restaurant|Cracker Barrel"],tags:{brand:"Cracker Barrel","brand:wikidata":"Q4492609","brand:wikipedia":"en:Cracker Barrel",name:"Cracker Barrel",official_name:"Cracker Barrel Old Country Store",shop:"gift"}},"shop/gift|Disney Store":{countryCodes:["ca","fr","us"],matchNames:["the disney store"],matchTags:["shop/toys"],tags:{brand:"Disney Store","brand:wikidata":"Q1047009","brand:wikipedia":"en:Disney Store",name:"Disney Store",shop:"gift"}},"shop/gift|Edible Arrangements":{countryCodes:["ca","us"],tags:{brand:"Edible Arrangements","brand:wikidata":"Q5337996","brand:wikipedia":"en:Edible Arrangements",name:"Edible Arrangements",shop:"gift"}},"shop/gift|Hallmark":{countryCodes:["ca","gb","us"],matchNames:["hallmark gold crown"],tags:{brand:"Hallmark","brand:wikidata":"Q1521910","brand:wikipedia":"en:Hallmark Cards",name:"Hallmark",shop:"gift"}},"shop/gift|Nanu-Nana":{countryCodes:["at","de"],tags:{brand:"Nanu-Nana","brand:wikidata":"Q1720245","brand:wikipedia":"de:Nanu-Nana",name:"Nanu-Nana",shop:"gift"}},"shop/gift|Papyrus":{countryCodes:["us"],tags:{brand:"Papyrus","brand:wikidata":"Q28222692","brand:wikipedia":"en:Papyrus (company)",name:"Papyrus",shop:"gift"}},"shop/gift|Showcase":{countryCodes:["ca","us"],tags:{brand:"Showcase","brand:wikidata":"Q7503163","brand:wikipedia":"en:Showcase (retailer)",name:"Showcase",shop:"gift"}},"shop/gift|Spencer's":{countryCodes:["ca","us"],tags:{brand:"Spencer Gifts","brand:wikidata":"Q7576055","brand:wikipedia":"en:Spencer Gifts",name:"Spencer's",official_name:"Spencer Gifts",shop:"gift"}},"shop/gift|Things Remembered":{countryCodes:["ca","us"],tags:{brand:"Things Remembered","brand:wikidata":"Q54958287","brand:wikipedia":"en:Things Remembered",name:"Things Remembered",shop:"gift"}},"shop/gift|Wereldwinkel":{countryCodes:["be","nl"],tags:{brand:"Wereldwinkel",name:"Wereldwinkel",shop:"gift"}},"shop/greengrocer|Produce Junction":{countryCodes:["us"],tags:{brand:"Produce Junction","brand:wikidata":"Q60583541",name:"Produce Junction",shop:"greengrocer"}},"shop/hairdresser_supply|Sally Beauty Supply":{countryCodes:["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/supermarket"],tags:{brand:"Holland & Barrett","brand:wikidata":"Q5880870","brand:wikipedia":"en:Holland & Barrett",name:"Holland & Barrett",shop:"health_food"}},"shop/hearing_aids|Amplifon":{tags:{brand:"Amplifon","brand:wikidata":"Q477222","brand:wikipedia":"en:Amplifon",name:"Amplifon",shop:"hearing_aids"}},"shop/hearing_aids|Audika":{countryCodes:["ch","fr"],tags:{brand:"Audika","brand:wikidata":"Q2870745","brand:wikipedia":"fr:Audika",name:"Audika",shop:"hearing_aids"}},"shop/hearing_aids|Beter Horen":{countryCodes:["nl"],tags:{brand:"Beter Horen",name:"Beter Horen",shop:"hearing_aids"}},"shop/hearing_aids|Geers":{countryCodes:["de","pl"],tags:{brand:"Geers","brand:wikidata":"Q1497707","brand:wikipedia":"de:Geers Hörakustik",name:"Geers",shop:"hearing_aids"}},"shop/hearing_aids|Kind Hörgeräte":{countryCodes:["de"],matchNames:["kind"],tags:{brand:"Kind Hörgeräte","brand:wikidata":"Q43598590","brand:wikipedia":"de:Kind Hörgeräte",name:"Kind Hörgeräte",shop:"hearing_aids"}},"shop/hearing_aids|Miracle-Ear":{countryCodes:["ca","us"],tags:{brand:"Miracle-Ear","brand:wikidata":"Q17108572","brand:wikipedia":"en:Miracle-Ear",name:"Miracle-Ear",shop:"hearing_aids"}},"shop/hearing_aids|Neuroth":{countryCodes:["at","de"],tags:{brand:"Neuroth","brand:wikidata":"Q15836645","brand:wikipedia":"de:Neuroth AG",name:"Neuroth",shop:"hearing_aids"}},"shop/hifi|Bang & Olufsen":{tags:{brand:"Bang & Olufsen","brand:wikidata":"Q790020","brand:wikipedia":"en:Bang & Olufsen",name:"Bang & Olufsen",shop:"hifi"}},"shop/hifi|Bose":{tags:{brand:"Bose","brand:wikidata":"Q328568","brand:wikipedia":"en:Bose Corporation",name:"Bose",shop:"hifi"}},"shop/hifi|Devialet":{tags:{brand:"Devialet","brand:wikidata":"Q3025419","brand:wikipedia":"fr:Devialet",name:"Devialet",shop:"hifi"}},"shop/hifi|Harman Kardon":{tags:{brand:"Harman Kardon","brand:wikidata":"Q1476454","brand:wikipedia":"en:Harman Kardon",name:"Harman Kardon",shop:"hifi"}},"shop/hifi|JBL":{tags:{brand:"JBL","brand:wikidata":"Q1153754","brand:wikipedia":"en:JBL",name:"JBL",shop:"hifi"}},"shop/hobby|アニメイト":{countryCodes:["jp"],tags:{brand:"アニメイト","brand:en":"Animate","brand:ja":"アニメイト","brand:wikidata":"Q1041890","brand:wikipedia":"ja:アニメイト",name:"アニメイト","name:en":"Animate","name:ja":"アニメイト",shop:"hobby"}},"shop/houseware|At Home":{countryCodes:["us"],matchNames:["garden ridge"],tags:{brand:"At Home","brand:wikidata":"Q5522290","brand:wikipedia":"en:At Home (store)",name:"At Home",shop:"houseware"}},"shop/houseware|Bed Bath & Beyond":{countryCodes:["ca","mx","nz","us"],matchTags:["shop/department_store"],tags:{brand:"Bed Bath & Beyond","brand:wikidata":"Q813782","brand:wikipedia":"en:Bed Bath & Beyond",name:"Bed Bath & Beyond",shop:"houseware"}},"shop/houseware|Blokker":{countryCodes:["be","nl"],tags:{brand:"Blokker","brand:wikidata":"Q884934","brand:wikipedia":"en:Blokker Holding",name:"Blokker",shop:"houseware"}},"shop/houseware|Cervera":{countryCodes:["se"],tags:{brand:"Cervera","brand:wikidata":"Q10447179","brand:wikipedia":"sv:Cervera (företag)",name:"Cervera",shop:"houseware"}},"shop/houseware|HomeGoods":{countryCodes:["us"],matchTags:["shop/department_store"],tags:{brand:"HomeGoods","brand:wikidata":"Q5887941","brand:wikipedia":"en:HomeGoods",name:"HomeGoods",shop:"houseware"}},"shop/houseware|Kitchen Collection":{countryCodes:["us"],tags:{brand:"Kitchen Collection","brand:wikidata":"Q64149036",name:"Kitchen Collection",shop:"houseware"}},"shop/houseware|Lagerhaus":{matchTags:["shop/doityourself"],tags:{brand:"Lagerhaus","brand:wikidata":"Q10553211","brand:wikipedia":"sv:Lagerhaus",name:"Lagerhaus",shop:"houseware"}},"shop/houseware|Lakeland":{countryCodes:["gb"],tags:{brand:"Lakeland","brand:wikidata":"Q16256199","brand:wikipedia":"en:Lakeland (company)",name:"Lakeland",shop:"houseware"}},"shop/houseware|Le Creuset":{matchTags:["shop/kitchen"],tags:{brand:"Le Creuset","brand:wikidata":"Q555861","brand:wikipedia":"en:Le Creuset",name:"Le Creuset",shop:"houseware"}},"shop/houseware|Marskramer":{countryCodes:["nl"],tags:{brand:"Marskramer","brand:wikidata":"Q2305917","brand:wikipedia":"nl:Marskramer (warenhuis)",name:"Marskramer",shop:"houseware"}},"shop/houseware|Old Time Pottery":{countryCodes:["us"],tags:{brand:"Old Time Pottery","brand: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/houseware|京王アートマン":{countryCodes:["jp"],matchNames:["アートマン"],matchTags:["shop/variety_store"],tags:{brand:"京王アートマン","brand:en":"Keio Atman","brand:ja":"京王アートマン","brand:wikidata":"Q11374580","brand:wikipedia":"ja:京王アートマン",name:"京王アートマン","name:en":"Keio Atman","name:ja":"京王アートマン",shop:"variety_store"}},"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|F.Hinds":{countryCodes:["gb"],tags:{brand:"F.Hinds","brand:wikidata":"Q5423915","brand:wikipedia":"en:F. Hinds",name:"F.Hinds",shop:"jewelry"}},"shop/jewelry|Fred Meyer":{countryCodes:["us"],nomatch:["shop/department_store|Fred Meyer","shop/supermarket|Fred Meyer"],tags:{brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer",shop:"jewelry"}},"shop/jewelry|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|Jubiler":{tags:{brand:"Jubiler",name:"Jubiler",shop:"jewelry"}},"shop/jewelry|Julien d'Orcel":{countryCodes:["fr"],tags:{brand:"Julien d'Orcel","brand:wikidata":"Q62497463",name:"Julien d'Orcel",shop:"jewelry"}},"shop/jewelry|Kay Jewelers":{countryCodes:["us"],tags:{brand:"Kay Jewelers","brand:wikidata":"Q62029290",name:"Kay Jewelers",shop:"jewelry"}},"shop/jewelry|Lucardi":{countryCodes:["nl"],tags:{brand:"Lucardi","brand:wikidata":"Q13774940","brand:wikipedia":"nl:Lucardi",name:"Lucardi",shop:"jewelry"}},"shop/jewelry|Michael Hill":{countryCodes:["au","ca","nz","us"],tags:{brand:"Michael Hill","brand:wikidata":"Q3308250","brand:wikipedia":"en:Michael Hill Jeweller",name:"Michael Hill",shop:"jewelry"}},"shop/jewelry|PNJ":{countryCodes:["vn"],tags:{brand:"PNJ","brand:wikidata":"Q61129183","brand:wikipedia":"vi:PNJ",name:"PNJ",shop:"jewelry"}},"shop/jewelry|Pandora":{tags:{brand:"Pandora","brand:wikidata":"Q2241604","brand:wikipedia":"en:Pandora (jewelry)",name:"Pandora",shop:"jewelry"}},"shop/jewelry|Peoples Jewellers":{countryCodes:["ca"],tags:{brand:"Peoples Jewellers","brand:wikidata":"Q64995558",name:"Peoples Jewellers",shop:"jewelry"}},"shop/jewelry|Piercing Pagoda":{countryCodes:["us"],tags:{brand:"Piercing Pagoda",name:"Piercing Pagoda",shop:"jewelry"}},"shop/jewelry|Swarovski":{tags:{brand:"Swarovski","brand:wikidata":"Q611115","brand:wikipedia":"en:Swarovski",name:"Swarovski",shop:"jewelry"}},"shop/jewelry|Thomas Sabo":{tags:{brand:"Thomas Sabo",name:"Thomas Sabo",shop:"jewelry"}},"shop/jewelry|Tiffany & Company":{countryCodes:["us"],matchNames:["tiffany","tiffany's"],tags:{brand:"Tiffany & Company","brand:wikidata":"Q1066858","brand:wikipedia":"en:Tiffany & Co.",name:"Tiffany & Company",official_name:"Tiffany & Co.",shop:"jewelry"}},"shop/jewelry|Tous":{tags:{brand:"Tous","brand:wikidata":"Q3815128","brand:wikipedia":"en:Tous (company)",name:"Tous",shop:"jewelry"}},"shop/jewelry|Warren James":{countryCodes:["gb"],tags:{brand:"Warren James","brand:wikidata":"Q19604616","brand:wikipedia":"en:Warren James Jewellers",name:"Warren James",shop:"jewelry"}},"shop/jewelry|Zales":{countryCodes:["us"],tags:{brand:"Zales","brand:wikidata":"Q8065305","brand:wikipedia":"en:Zale Corporation",name:"Zales",shop:"jewelry"}},"shop/jewelry|Адамас":{countryCodes:["ru"],tags:{brand:"Адамас","brand:en":"Adamas","brand:ru":"Адамас","brand:wikidata":"Q62393709",name:"Адамас","name:en":"Adamas","name:ru":"Адамас",shop:"jewelry"}},"shop/jewelry|Золотая мечта":{countryCodes:["by"],tags:{brand:"Золотая мечта","brand:en":"Gold Dream","brand:ru":"Золотая мечта",name:"Золотая мечта","name:en":"Gold Dream","name:ru":"Золотая мечта",shop:"jewelry"}},"shop/kiosk|Lietuvos spauda":{countryCodes:["lt"],tags:{brand:"Lietuvos spauda","brand:wikidata":"Q6514414","brand:wikipedia":"lt:Lietuvos spauda",name:"Lietuvos spauda",shop:"kiosk"}},"shop/kiosk|Narvesen":{countryCodes:["lt","lv","no"],tags:{brand:"Narvesen","brand:wikidata":"Q6514414","brand:wikipedia":"en:Narvesen",name:"Narvesen",shop:"kiosk"}},"shop/kiosk|Pressbyrån":{countryCodes:["se"],tags:{brand:"Pressbyrån","brand:wikidata":"Q2489072","brand:wikipedia":"en:Pressbyrån",name:"Pressbyrån",shop:"kiosk"}},"shop/kiosk|R-Kioski":{countryCodes:["fi"],tags:{brand:"R-Kioski","brand:wikidata":"Q1571400","brand:wikipedia":"en:R-kioski",name:"R-Kioski",shop:"kiosk"}},"shop/kiosk|Ruch":{countryCodes:["pl"],tags:{brand:"Ruch","brand:wikidata":"Q1260314","brand:wikipedia":"pl:Ruch (przedsiębiorstwo)",name:"Ruch",shop:"kiosk"}},"shop/kiosk|Tisak":{countryCodes:["hr"],tags:{brand:"Tisak","brand:wikidata":"Q12643627","brand:wikipedia":"hr:Tisak (tvrtka)",name:"Tisak",shop:"kiosk"}},"shop/kiosk|k kiosk":{countryCodes:["ch"],nomatch:["shop/newsagent|k kiosk"],tags:{brand:"k kiosk","brand:wikidata":"Q60381703","brand:wikipedia":"it:K Kiosk",name:"k kiosk",shop:"kiosk"}},"shop/kiosk|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"kiosk"}},"shop/kiosk|キヨスク":{countryCodes:["jp"],tags:{brand:"キヨスク","brand:en":"KIOSK","brand:ja":"キヨスク","brand:wikidata":"Q1334796","brand:wikipedia":"ja:キヨスク",name:"キヨスク","name:en":"KIOSK","name:ja":"キヨスク",shop:"kiosk"}},"shop/kitchen|Cuisinella":{countryCodes:["fr","tn"],tags:{brand:"Cuisinella","brand:wikidata":"Q3007012","brand:wikipedia":"fr:Cuisinella",name:"Cuisinella",shop:"kitchen"}},"shop/kitchen|Ixina":{countryCodes:["ae","au","be","bf","bh","bj","ca","ci","cm","cn","cz","dz","ee","eg","fr","gh","hr","ke","kw","lu","ly","ma","mu","nl","pl","qa","ro","ru","sa","se","sn","tg","th","tn","vn"],tags:{brand:"Ixina","brand:wikidata":"Q3156424","brand:wikipedia":"fr:Ixina",name:"Ixina",shop:"kitchen"}},"shop/kitchen|Magnet":{countryCodes:["gb"],matchNames:["magnet kitchens"],tags:{brand:"Magnet","brand:wikidata":"Q6731427","brand:wikipedia":"en:Magnet Kitchens",name:"Magnet",shop:"kitchen"}},"shop/kitchen|Mobalpa":{countryCodes:["be","fr","gb"],tags:{brand:"Mobalpa","brand:wikidata":"Q3317571","brand:wikipedia":"fr:Mobalpa",name:"Mobalpa",shop:"kitchen"}},"shop/kitchen|Schmidt":{countryCodes:["be","es","fr","gb"],tags:{brand:"Schmidt","brand:wikidata":"Q3487620","brand:wikipedia":"de:Schmidt Groupe",name:"Schmidt",shop:"kitchen"}},"shop/kitchen|SoCoo'c":{countryCodes:["fr"],tags:{brand:"SoCoo'c","brand:wikidata":"Q62783840","brand:wikipedia":"fr:SoCoo'c",name:"SoCoo'c",shop:"kitchen"}},"shop/massage|Massage Envy":{countryCodes:["us"],matchNames:["massage envy spa"],tags:{brand:"Massage Envy","brand:wikidata":"Q22922899","brand:wikipedia":"en:Massage Envy",name:"Massage Envy",shop:"massage"}},"shop/massage|Massage Heights":{countryCodes:["ca","us"],tags:{brand:"Massage Heights","brand:wikidata":"Q64573956",name:"Massage Heights",shop:"massage"}},"shop/medical_supply|Pofam-Poznań":{countryCodes:["pl"],tags:{brand:"Pofam-Poznań","brand:wikidata":"Q62057457",name:"Pofam-Poznań",shop:"medical_supply"}},"shop/medical_supply|Ортека":{countryCodes:["ru"],tags:{brand:"Ортека","brand:wikidata":"Q62393660",name:"Ортека",shop:"medical_supply"}},"shop/mobile_phone|3 Store":{countryCodes:["gb","it"],matchNames:["3","three","three store"],tags:{brand:"3 Store","brand:wikidata":"Q407009","brand:wikipedia":"en:3 (telecommunications)",name:"3 Store",shop:"mobile_phone"}},"shop/mobile_phone|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/telecommunication|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"mobile_phone"}},"shop/mobile_phone|AT&T":{countryCodes:["mx","us"],matchNames:["att mobile","att mobility","att wireless"],tags:{brand:"AT&T","brand:wikidata":"Q298594","brand:wikipedia":"en:AT&T Mobility",name:"AT&T",shop:"mobile_phone"}},"shop/mobile_phone|Bell":{countryCodes:["ca"],matchNames:["bell mobile","bell mobility","bell wireless"],nomatch:["shop/telecommunication|Bell"],tags:{brand:"Bell","brand:wikidata":"Q2894594","brand:wikipedia":"en:Bell Mobility",name:"Bell",shop:"mobile_phone"}},"shop/mobile_phone|Best Buy Mobile":{countryCodes:["ca"],nomatch:["amenity/vending_machine|Best Buy Express","shop/electronics|Best Buy"],tags:{brand:"Best Buy Mobile","brand:wikidata":"Q533415","brand:wikipedia":"en:Best Buy",name:"Best Buy Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bitė":{countryCodes:["lt"],tags:{brand:"Bitė","brand:wikidata":"Q796010","brand:wikipedia":"lt:Bitės grupė",name:"Bitė",shop:"mobile_phone"}},"shop/mobile_phone|Boost Mobile":{countryCodes:["us"],matchNames:["boost"],tags:{brand:"Boost Mobile","brand:wikidata":"Q4943790","brand:wikipedia":"en:Boost Mobile",name:"Boost Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Bouygues Telecom":{countryCodes:["fr"],tags:{brand:"Bouygues Telecom","brand:wikidata":"Q581438","brand:wikipedia":"fr:Bouygues Telecom",name:"Bouygues Telecom",shop:"mobile_phone"}},"shop/mobile_phone|Carphone Warehouse":{countryCodes:["by","gb","ie"],matchNames:["the carphone warehouse"],tags:{brand:"Carphone Warehouse","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Carphone Warehouse",shop:"mobile_phone"}},"shop/mobile_phone|Chatr":{countryCodes:["ca"],matchNames:["Chatr Mobile"],tags:{brand:"Chatr","brand:wikidata":"Q5087766","brand:wikipedia":"en:Chatr",name:"Chatr",shop:"mobile_phone"}},"shop/mobile_phone|Claro":{tags:{brand:"Claro","brand:wikidata":"Q1770208","brand:wikipedia":"en:Claro (company)",name:"Claro",shop:"mobile_phone"}},"shop/mobile_phone|Cricket Wireless":{countryCodes:["us"],matchNames:["cricket"],tags:{brand:"Cricket Wireless","brand:wikidata":"Q5184987","brand:wikipedia":"en:Cricket Wireless",name:"Cricket Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Digicel":{tags:{brand:"Digicel","brand:wikidata":"Q2117506","brand:wikipedia":"en:Digicel",name:"Digicel",shop:"mobile_phone"}},"shop/mobile_phone|EE":{countryCodes:["gb"],tags:{brand:"EE","brand:wikidata":"Q5322942","brand:wikipedia":"en:EE Limited",name:"EE",shop:"mobile_phone"}},"shop/mobile_phone|Entel":{countryCodes:["cl","pe"],tags:{brand:"Entel","brand:wikidata":"Q450420","brand:wikipedia":"en:Entel (Chile)",name:"Entel",shop:"mobile_phone"}},"shop/mobile_phone|Fido":{countryCodes:["ca"],tags:{brand:"Fido","brand:wikidata":"Q3071471","brand:wikipedia":"en:Fido Solutions",name:"Fido",shop:"mobile_phone"}},"shop/mobile_phone|Freedom Mobile":{countryCodes:["ca"],matchNames:["freedom","wind mobile"],tags:{brand:"Freedom Mobile","brand:wikidata":"Q8023931","brand:wikipedia":"en:Freedom Mobile",name:"Freedom Mobile",shop:"mobile_phone"}},"shop/mobile_phone|Koodo":{countryCodes:["ca"],tags:{brand:"Koodo","brand:wikidata":"Q6430529","brand:wikipedia":"en:Koodo Mobile",name:"Koodo",shop:"mobile_phone"}},"shop/mobile_phone|MEO":{matchNames:["loja meo"],tags:{brand:"MEO","brand:wikidata":"Q3306167","brand:wikipedia":"en:MEO (telecommunications company)",name:"MEO",shop:"mobile_phone"}},"shop/mobile_phone|MTN":{matchNames:["agence mtn"],tags:{brand:"MTN","brand:wikidata":"Q1813361","brand:wikipedia":"en:MTN Group",name:"MTN",shop:"mobile_phone"}},"shop/mobile_phone|MetroPCS":{countryCodes:["us"],tags:{brand:"MetroPCS","brand:wikidata":"Q1925685","brand:wikipedia":"en:Metro by T-Mobile",name:"MetroPCS",shop:"mobile_phone"}},"shop/mobile_phone|Mobilcom Debitel":{countryCodes:["de","ir"],matchNames:["debitel"],tags:{brand:"Mobilcom Debitel","brand:wikidata":"Q344744","brand:wikipedia":"en:Debitel",name:"Mobilcom Debitel",shop:"mobile_phone"}},"shop/mobile_phone|Moov":{countryCodes:["ci","tg"],matchNames:["agence moov"],tags:{brand:"Moov","brand:wikidata":"Q3323637","brand:wikipedia":"fr:Moov Côte d'Ivoire",name:"Moov",shop:"mobile_phone"}},"shop/mobile_phone|Movistar":{tags:{brand:"Movistar","brand:wikidata":"Q967735","brand:wikipedia":"en:Movistar",name:"Movistar",shop:"mobile_phone"}},"shop/mobile_phone|NOS":{tags:{brand:"NOS","brand:wikidata":"Q136331","brand:wikipedia":"en:NOS (Portuguese media company)",name:"NOS",shop:"mobile_phone"}},"shop/mobile_phone|O2":{countryCodes:["cz","de","gb","ie","sk"],tags:{brand:"O2","brand:wikidata":"Q1759255","brand:wikipedia":"en:Telefónica Europe",name:"O2",shop:"mobile_phone"}},"shop/mobile_phone|Optie1":{countryCodes:["nl"],tags:{brand:"Optie1","brand:wikidata":"Q62393564",name:"Optie1",shop:"mobile_phone"}},"shop/mobile_phone|Optus":{countryCodes:["au"],tags:{brand:"Optus","brand:wikidata":"Q865038",name:"Optus",shop:"mobile_phone"}},"shop/mobile_phone|Orange":{matchNames:["agence orange"],tags:{brand:"Orange","brand:wikidata":"Q1431486","brand:wikipedia":"fr:Orange (entreprise)",name:"Orange",shop:"mobile_phone"}},"shop/mobile_phone|Personal":{countryCodes:["ar","py"],tags:{brand:"Personal","brand:wikidata":"Q10933021","brand:wikipedia":"es:Personal (Argentina)",name:"Personal",shop:"mobile_phone"}},"shop/mobile_phone|Phone House":{countryCodes:["de","es","fr","nl","pt"],matchNames:["the phone house"],tags:{brand:"Phone House","brand:wikidata":"Q118046","brand:wikipedia":"en:Carphone Warehouse",name:"Phone House",shop:"mobile_phone"}},"shop/mobile_phone|Play":{countryCodes:["pl"],tags:{brand:"Play","brand:wikidata":"Q7202998","brand:wikipedia":"pl:Play (sieć telefonii komórkowej)",name:"Play",shop:"mobile_phone"}},"shop/mobile_phone|Plus":{countryCodes:["pl"],nomatch:["amenity/fuel|Gas Plus","shop/supermarket|PLUS"],tags:{brand:"Plus","brand:wikidata":"Q7205598","brand:wikipedia":"pl:Plus (sieć telefonii komórkowej)",name:"Plus",shop:"mobile_phone"}},"shop/mobile_phone|Rogers":{countryCodes:["ca"],tags:{brand:"Rogers","brand:wikidata":"Q3439663","brand:wikipedia":"en:Rogers Wireless",name:"Rogers",shop:"mobile_phone"}},"shop/mobile_phone|SFR":{countryCodes:["fr","lu"],matchNames:["espace sfr"],tags:{brand:"SFR","brand:wikidata":"Q218765","brand:wikipedia":"en:SFR",name:"SFR",shop:"mobile_phone"}},"shop/mobile_phone|Sprint":{nomatch:["amenity/fuel|Sprint"],tags:{brand:"Sprint","brand:wikidata":"Q301965","brand:wikipedia":"en:Sprint Corporation",name:"Sprint",shop:"mobile_phone"}},"shop/mobile_phone|T-Mobile":{tags:{brand:"T-Mobile","brand:wikidata":"Q327634","brand:wikipedia":"en:T-Mobile",name:"T-Mobile",shop:"mobile_phone"}},"shop/mobile_phone|TIM":{countryCodes:["br","it"],tags:{brand:"TIM","brand:wikidata":"Q144617","brand:wikipedia":"en:Telecom Italia",name:"TIM",shop:"mobile_phone"}},"shop/mobile_phone|Tbooth Wireless":{countryCodes:["ca"],tags:{brand:"Tbooth Wireless","brand:wikidata":"Q7690597",name:"Tbooth Wireless",shop:"mobile_phone"}},"shop/mobile_phone|Telcel":{countryCodes:["cu","mx"],tags:{brand:"Telcel","brand:wikidata":"Q3517255","brand:wikipedia":"en:Telcel",name:"Telcel",shop:"mobile_phone"}},"shop/mobile_phone|Tele2":{tags:{brand:"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|Telekom":{countryCodes:["de","hu","ro","si","sk"],matchNames:["telekom shop"],tags:{brand:"Telekom","brand:wikidata":"Q9396","brand:wikipedia":"en:Deutsche Telekom",name:"Telekom",shop:"mobile_phone"}},"shop/mobile_phone|Telenor":{tags:{brand:"Telenor","brand:wikidata":"Q845632","brand:wikipedia":"en:Telenor",name:"Telenor",shop:"mobile_phone"}},"shop/mobile_phone|Telia":{countryCodes:["dk","fi","lt","no","se"],tags:{brand:"Telia","brand:wikidata":"Q862303","brand:wikipedia":"en:Telia Company",name:"Telia",shop:"mobile_phone"}},"shop/mobile_phone|Telstra":{countryCodes:["au"],tags:{brand:"Telstra","brand:wikidata":"Q721162","brand:wikipedia":"en:Telstra",name:"Telstra",shop:"mobile_phone"}},"shop/mobile_phone|Telus":{countryCodes:["ca"],tags:{brand:"Telus","brand:wikidata":"Q165858","brand:wikipedia":"en:Telus",name:"Telus",shop:"mobile_phone"}},"shop/mobile_phone|Turkcell":{countryCodes:["cy","tr"],tags:{brand:"Turkcell","brand:wikidata":"Q283852","brand:wikipedia":"en:Turkcell",name:"Turkcell",shop:"mobile_phone"}},"shop/mobile_phone|U.S. Cellular":{countryCodes:["us"],tags:{brand:"U.S. Cellular","brand:wikidata":"Q2466256","brand:wikipedia":"en:U.S. Cellular",name:"U.S. Cellular",shop:"mobile_phone"}},"shop/mobile_phone|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:["shop/telecommunication|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"mobile_phone"}},"shop/mobile_phone|Мегафон":{countryCodes:["ru","tj"],tags:{brand:"Мегафон","brand:en":"MegaFon","brand:wikidata":"Q1720713","brand:wikipedia":"en:MegaFon",name:"Мегафон","name:en":"MegaFon",shop:"mobile_phone"}},"shop/mobile_phone|НА'СВЯЗИ":{countryCodes:["by"],tags:{brand:"НА'СВЯЗИ",name:"НА'СВЯЗИ",shop:"mobile_phone"}},"shop/mobile_phone|Связной":{countryCodes:["by","ru","uz"],tags:{brand:"Связной","brand:en":"Svyaznoy","brand:wikidata":"Q65371","brand:wikipedia":"en:Svyaznoy",name:"Связной","name:en":"Svyaznoy",shop:"mobile_phone"}},"shop/mobile_phone|Теле2":{countryCodes:["ru"],tags:{brand:"Теле2","brand:en":"Tele2","brand:wikidata":"Q309865","brand:wikipedia":"en:Tele2",name:"Теле2","name:en":"Tele2",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンク":{countryCodes:["jp"],tags:{brand:"ソフトバンク","brand:en":"SoftBank Telecom","brand:ja":"ソフトバンク","brand:wikidata":"Q7553832","brand:wikipedia":"en:SoftBank Telecom",name:"ソフトバンク","name:en":"SoftBank Telecom","name:ja":"ソフトバンク",shop:"mobile_phone"}},"shop/mobile_phone|ソフトバンクショップ":{countryCodes:["jp"],tags:{brand:"ソフトバンクショップ","brand:en":"SoftBankShop","brand:ja":"ソフトバンクショップ","brand:wikidata":"Q11315281","brand:wikipedia":"ja:ソフトバンクショップ",name:"ソフトバンクショップ","name:en":"SoftBankShop","name:ja":"ソフトバンクショップ",shop:"mobile_phone"}},"shop/mobile_phone|ドコモショップ":{countryCodes:["jp"],tags:{brand:"ドコモショップ","brand:en":"DoCoMo Shop","brand:ja":"ドコモショップ","brand:wikidata":"Q853958","brand:wikipedia":"ja:NTTドコモ",name:"ドコモショップ","name:en":"DoCoMo Shop","name:ja":"ドコモショップ",shop:"mobile_phone"}},"shop/mobile_phone|ワイモバイル":{countryCodes:["jp"],tags:{brand:"ワイモバイル","brand:ja":"ワイモバイル",name:"ワイモバイル","name:ja":"ワイモバイル",shop:"mobile_phone"}},"shop/mobile_phone|台灣大哥大":{countryCodes:["tw"],tags:{brand:"台灣大哥大","brand:en":"Taiwan Mobile","brand:wikidata":"Q5943259","brand:wikipedia":"zh:台灣大哥大","brand:zh":"台灣大哥大",name:"台灣大哥大","name:en":"Taiwan Mobile","name:zh":"台灣大哥大",shop:"mobile_phone"}},"shop/money_lender|ACE Cash Express":{countryCodes:["us"],matchNames:["ace"],tags:{brand:"ACE Cash Express","brand:wikidata":"Q24260962","brand:wikipedia":"en:ACE Cash Express",name:"ACE Cash Express",shop:"money_lender"}},"shop/money_lender|Advance America":{countryCodes:["us"],tags:{brand:"Advance America","brand:wikidata":"Q4686044",name:"Advance America",shop:"money_lender"}},"shop/money_lender|California Check Cashing Stores":{countryCodes:["us"],matchNames:["california check cashing"],tags:{brand:"California Check Cashing Stores","brand:wikidata":"Q64390932",name:"California Check Cashing Stores",shop:"money_lender"}},"shop/money_lender|Cash Store":{countryCodes:["us"],tags:{brand:"Cash Store","brand:wikidata":"Q61943411",name:"Cash Store",shop:"money_lender"}},"shop/money_lender|CashMax":{countryCodes:["us"],tags:{brand:"CashMax","brand:wikidata":"Q69365478",name:"CashMax",shop:"money_lender"}},"shop/money_lender|Check Into Cash":{countryCodes:["us"],tags:{brand:"Check Into Cash","brand:wikidata":"Q16961246","brand:wikipedia":"en:Check Into Cash",name:"Check Into Cash",shop:"money_lender"}},"shop/money_lender|CheckSmart":{countryCodes:["us"],tags:{alt_name:"Check$mart",brand:"CheckSmart","brand:wikidata":"Q65640213",name:"CheckSmart",shop:"money_lender"}},"shop/money_lender|First Virginia":{countryCodes:["us"],matchNames:["1st virginia"],tags:{brand:"First Virginia","brand:wikidata":"Q65640051",name:"First Virginia",shop:"money_lender"}},"shop/money_lender|Money Mart":{countryCodes:["ca","us"],tags:{brand:"Money Mart","brand:wikidata":"Q6899166","brand:wikipedia":"en:Money Mart",name:"Money Mart",shop:"money_lender"}},"shop/motorcycle|Harley-Davidson":{tags:{brand:"Harley-Davidson","brand:wikidata":"Q192814","brand:wikipedia":"en:Harley-Davidson",name:"Harley-Davidson",shop:"motorcycle"}},"shop/motorcycle|Honda":{nomatch:["shop/car|Honda"],tags:{brand:"Honda","brand:wikidata":"Q9584","brand:wikipedia":"en:Honda",name:"Honda",shop:"motorcycle"}},"shop/motorcycle|Kawasaki":{tags:{brand:"Kawasaki","brand:wikidata":"Q6379855","brand:wikipedia":"en:Kawasaki motorcycles",name:"Kawasaki",shop:"motorcycle"}},"shop/motorcycle|Motortrade":{countryCodes:["ph"],tags:{brand:"Motortrade","brand:wikidata":"Q48803162","brand:wikipedia":"en:Motortrade",name:"Motortrade",shop:"motorcycle"}},"shop/motorcycle|Suzuki":{nomatch:["shop/car|Suzuki"],tags:{brand:"Suzuki","brand:wikidata":"Q181642","brand:wikipedia":"en:Suzuki",name:"Suzuki",shop:"motorcycle"}},"shop/motorcycle|Yamaha":{tags:{brand:"Yamaha","brand:wikidata":"Q158888","brand:wikipedia":"en:Yamaha Motor Company",name:"Yamaha",shop:"motorcycle"}},"shop/motorcycle|レッドバロン":{countryCodes:["jp"],tags:{brand:"レッドバロン","brand:en":"Red Baron","brand:ja":"レッドバロン","brand:wikidata":"Q11349759","brand:wikipedia":"ja:レッドバロン (企業)",name:"レッドバロン","name:en":"Red Baron","name:ja":"レッドバロン",shop:"motorcycle"}},"shop/music|FYE":{countryCodes:["us"],tags:{brand:"FYE","brand:wikidata":"Q5424141","brand:wikipedia":"en:FYE (retailer)",name:"FYE",shop:"music"}},"shop/music|HMV":{countryCodes:["ca","gb"],tags:{brand:"HMV","brand:wikidata":"Q10854572","brand:wikipedia":"en:HMV",name:"HMV",shop:"music"}},"shop/music|Sunrise Records":{countryCodes:["ca","gb"],tags:{brand:"Sunrise Records","brand:wikidata":"Q30600373","brand:wikipedia":"en:Sunrise Records (retailer)",name:"Sunrise Records",shop:"music"}},"shop/music|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/video|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"music"}},"shop/music|タワーレコード":{countryCodes:["jp"],matchNames:["タワレコ"],tags:{alt_name:"タワレコ",brand:"タワーレコード","brand:en":"Tower Records","brand:ja":"タワーレコード","brand:wikidata":"Q3265728","brand:wikipedia":"ja:タワーレコード",name:"タワーレコード","name:en":"Tower Records","name:ja":"タワーレコード",shop:"music"}},"shop/musical_instrument|Guitar Center":{countryCodes:["us"],tags:{brand:"Guitar Center","brand:wikidata":"Q3622794","brand:wikipedia":"en:Guitar Center",name:"Guitar Center",shop:"musical_instrument"}},"shop/musical_instrument|Long & McQuade":{countryCodes:["ca"],tags:{brand:"Long & McQuade","brand:wikidata":"Q6672180","brand:wikipedia":"en:Long & McQuade",name:"Long & McQuade",shop:"musical_instrument"}},"shop/newsagent|Cigo":{countryCodes:["de","nl"],tags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"}},"shop/newsagent|Hudson News":{tags:{brand:"Hudson News",name:"Hudson News",shop:"newsagent"}},"shop/newsagent|Inmedio":{countryCodes:["hu","pl","ro"],tags:{brand:"Inmedio",name:"Inmedio",shop:"newsagent"}},"shop/newsagent|Kolporter":{countryCodes:["pl"],matchTags:["shop/kiosk"],tags:{brand:"Kolporter","brand:wikidata":"Q6427874","brand:wikipedia":"pl:Kolporter (przedsiębiorstwo)",name:"Kolporter",shop:"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":"Q67723214",name:"Белсоюзпечать",shop:"newsagent"}},"shop/newsagent|Витебскоблсоюзпечать":{countryCodes:["by"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Союзпечать"],tags:{brand:"Витебскоблсоюзпечать","brand:wikidata":"Q67723214",name:"Витебскоблсоюзпечать",shop:"newsagent"}},"shop/newsagent|Первая полоса":{countryCodes:["ru"],tags:{brand:"Первая полоса","brand:wikidata":"Q62736412",name:"Первая полоса",shop:"newsagent"}},"shop/newsagent|Роспечать":{tags:{brand:"Роспечать",name:"Роспечать",shop:"newsagent"}},"shop/newsagent|Союзпечать":{countryCodes:["ru","ua"],matchTags:["shop/kiosk"],nomatch:["shop/newsagent|Белсоюзпечать","shop/newsagent|Витебскоблсоюзпечать"],tags:{brand:"Союзпечать","brand:wikidata":"Q4430611","brand:wikipedia":"ru:Союзпечать",name:"Союзпечать",shop:"newsagent"}},"shop/newsagent|読売新聞":{countryCodes:["jp"],tags:{brand:"読売新聞","brand:en":"Yomiuri Shimbun","brand:wikidata":"Q645218","brand:wikipedia":"en:Yomiuri Shimbun",name:"読売新聞","name:en":"Yomiuri Shimbun",shop:"newsagent"}},"shop/nutrition_supplements|GNC":{matchNames:["gnc live well"],tags:{brand:"GNC","brand:wikidata":"Q4808595","brand:wikipedia":"en:GNC (store)",name:"GNC",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Popeye's Supplements":{countryCodes:["ca"],tags:{brand:"Popeye's Supplements","brand:wikidata":"Q71096495",name:"Popeye's Supplements",shop:"nutrition_supplements"}},"shop/nutrition_supplements|The Vitamin Shoppe":{countryCodes:["us"],matchTags:["shop/chemist"],tags:{brand:"The Vitamin Shoppe","brand:wikidata":"Q7772938","brand:wikipedia":"en:The Vitamin Shoppe",name:"The Vitamin Shoppe",shop:"nutrition_supplements"}},"shop/nutrition_supplements|Vitamin World":{countryCodes:["us"],tags:{brand:"Vitamin World","brand:wikidata":"Q7936979","brand:wikipedia":"en:Vitamin World",name:"Vitamin World",shop:"nutrition_supplements"}},"shop/optician|Alain Afflelou":{countryCodes:["be","ch","es","fr","pt"],tags:{brand:"Alain Afflelou","brand:wikidata":"Q2829511","brand:wikipedia":"fr:Alain Afflelou (entreprise)",name:"Alain Afflelou",shop:"optician"}},"shop/optician|America's Best Contacts & Eyeglasses":{countryCodes:["us"],tags:{brand:"America's Best Contacts & Eyeglasses","brand:wikidata":"Q4742504","brand:wikipedia":"en:America's Best Contacts & Eyeglasses",name:"America's Best Contacts & Eyeglasses",shop:"optician",short_name:"America's Best"}},"shop/optician|Apollo-Optik":{countryCodes:["de"],nomatch:["amenity/pharmacy|Apollo Pharmacy"],tags:{brand:"Apollo-Optik","brand:wikidata":"Q618940","brand:wikipedia":"de:Apollo-Optik",name:"Apollo-Optik",shop:"optician",short_name:"Apollo"}},"shop/optician|Atol":{countryCodes:["fr"],tags:{brand:"Atol","brand:wikidata":"Q2869542","brand:wikipedia":"fr:Atol (opticien)",name:"Atol",shop:"optician"}},"shop/optician|Boots Opticians":{countryCodes:["gb"],tags:{brand:"Boots Opticians","brand:wikidata":"Q4944037","brand:wikipedia":"en:Boots Opticians",name:"Boots Opticians",shop:"optician",short_name:"Boots"}},"shop/optician|Clarkson Eyecare":{countryCodes:["us"],tags:{brand:"Clarkson Eyecare","brand:wikidata":"Q64027001",healthcare:"optometrist",name:"Clarkson Eyecare",shop:"optician",short_name:"Clarkson"}},"shop/optician|Cohen's Fashion Optical":{countryCodes:["us"],matchNames:["cohen's optical"],tags:{brand:"Cohen's Fashion Optical","brand:wikidata":"Q5141313","brand:wikipedia":"en:Cohen's Fashion Optical",healthcare:"optometrist",name:"Cohen's Fashion Optical",shop:"optician",short_name:"Cohen's"}},"shop/optician|Die Brille":{countryCodes:["de"],tags:{brand:"Die Brille",name:"Die Brille",shop:"optician"}},"shop/optician|Eye Wish":{countryCodes:["nl"],tags:{brand:"Eye Wish","brand:wikidata":"Q62391641",name:"Eye Wish",shop:"optician"}},"shop/optician|Fielmann":{tags:{brand:"Fielmann","brand:wikidata":"Q457822","brand:wikipedia":"en:Fielmann",name:"Fielmann",shop:"optician"}},"shop/optician|GMO":{countryCodes:["cl","co","ec","pe"],tags:{brand:"GMO",name:"GMO",shop:"optician"}},"shop/optician|General Óptica":{countryCodes:["es"],tags:{brand:"General Óptica","brand:wikidata":"Q62391672",name:"General Óptica",shop:"optician"}},"shop/optician|Grand Optical":{countryCodes:["fr"],tags:{brand:"Grand Optical","brand:wikidata":"Q3113677","brand:wikipedia":"fr:Grand Optical",name:"Grand Optical",shop:"optician"}},"shop/optician|Générale d'Optique":{countryCodes:["fr"],tags:{brand:"Générale d'Optique","brand:wikidata":"Q62391701",name:"Générale d'Optique",shop:"optician"}},"shop/optician|Hakim Optical":{countryCodes:["ca"],tags:{brand:"Hakim Optical","brand:wikidata":"Q28232761","brand:wikipedia":"en:Hakim Optical",name:"Hakim Optical",shop:"optician"}},"shop/optician|Hans Anders":{countryCodes:["be","fr","nl"],tags:{brand:"Hans Anders","brand:wikidata":"Q1884976","brand:wikipedia":"nl:Hans Anders",name:"Hans Anders",shop:"optician"}},"shop/optician|Instrumentarium":{countryCodes:["fi"],tags:{brand:"Instrumentarium","brand:wikidata":"Q11864937","brand:wikipedia":"fi:Instrumentarium",name:"Instrumentarium",shop:"optician"}},"shop/optician|Krys":{countryCodes:["fr"],tags:{brand:"Krys","brand:wikidata":"Q3119538","brand:wikipedia":"fr:Krys Group",name:"Krys",shop:"optician"}},"shop/optician|LensCrafters":{countryCodes:["ca","us"],tags:{brand:"LensCrafters","brand:wikidata":"Q6523209","brand:wikipedia":"en:LensCrafters",name:"LensCrafters",shop:"optician"}},"shop/optician|Lenskart":{countryCodes:["in"],tags:{brand:"Lenskart","brand:wikidata":"Q17068753",name:"Lenskart",shop:"optician"}},"shop/optician|Les Opticiens Mutualistes":{countryCodes:["fr"],tags:{brand:"Les Opticiens Mutualistes","brand:wikidata":"Q18414551","brand:wikipedia":"fr:Les Opticiens Mutualistes",name:"Les Opticiens Mutualistes",shop:"optician"}},"shop/optician|Lissac":{countryCodes:["fr"],tags:{brand:"Lissac","brand:wikidata":"Q63102559",name:"Lissac",shop:"optician"}},"shop/optician|Multiópticas~(Portugal)":{countryCodes:["pt"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391722",name:"Multiópticas",shop:"optician"}},"shop/optician|Multiópticas~(Spain)":{countryCodes:["es"],tags:{brand:"Multiópticas","brand:wikidata":"Q62391719",name:"Multiópticas",shop:"optician"}},"shop/optician|Nissen":{countryCodes:["fi"],tags:{brand:"Nissen",name:"Nissen",shop:"optician"}},"shop/optician|Oakley":{countryCodes:["us"],matchTags:["shop/clothes","shop/sports"],tags:{brand:"Oakley","brand:wikidata":"Q161906","brand:wikipedia":"en:Oakley, Inc.",name:"Oakley",shop:"optician"}},"shop/optician|Oliver Peoples":{tags:{brand:"Oliver Peoples","brand:wikidata":"Q7087746","brand:wikipedia":"en:Oliver Peoples",name:"Oliver Peoples",shop:"optician"}},"shop/optician|Optic 2000":{countryCodes:["ch","fr"],tags:{brand:"Optic 2000","brand:wikidata":"Q3354445","brand:wikipedia":"fr:Optic 2000",name:"Optic 2000",shop:"optician"}},"shop/optician|Optical Center":{tags:{brand:"Optical Center","brand:wikidata":"Q3354448","brand:wikipedia":"fr:Optical Center",name:"Optical Center",shop:"optician"}},"shop/optician|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|Люксоптика":{tags:{brand:"Люксоптика",name:"Люксоптика",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"],matchNames:["cotswold"],tags:{brand:"Cotswold Outdoor","brand:wikidata":"Q5175488","brand:wikipedia":"en:Cotswold Outdoor",name:"Cotswold Outdoor",shop:"outdoor"}},"shop/outdoor|Gander Outdoors":{countryCodes:["us"],matchNames:["gander mountain"],tags:{brand:"Gander Outdoors","brand:wikidata":"Q64357426","brand:wikipedia":"en:Gander Outdoors",name:"Gander Outdoors",shop:"outdoor"}},"shop/outdoor|Jack Wolfskin":{countryCodes:["ch","de","fr"],matchTags:["shop/clothes"],tags:{brand:"Jack Wolfskin","brand:wikidata":"Q536133","brand:wikipedia":"en:Jack Wolfskin",name:"Jack Wolfskin",shop:"outdoor"}},"shop/outdoor|Kathmandu":{countryCodes:["au","nz"],tags:{brand:"Kathmandu","brand:wikidata":"Q1736294","brand:wikipedia":"en:Kathmandu (company)",name:"Kathmandu",shop:"outdoor"}},"shop/outdoor|Millets":{countryCodes:["gb"],tags:{brand:"Millets","brand:wikidata":"Q64822903",name:"Millets",shop:"outdoor"}},"shop/outdoor|Mountain Warehouse":{countryCodes:["gb","pl"],tags:{brand:"Mountain Warehouse","brand:wikidata":"Q6925414","brand:wikipedia":"en:Mountain Warehouse",name:"Mountain Warehouse",shop:"outdoor"}},"shop/outdoor|REI":{countryCodes:["id","us"],tags:{brand:"REI","brand:wikidata":"Q3414933","brand:wikipedia":"en:Recreational Equipment, Inc.",name:"REI",official_name:"Recreational Equipment, Inc.",shop:"outdoor"}},"shop/outdoor|Sportsman's Warehouse":{countryCodes:["us"],tags:{brand:"Sportsman's Warehouse","brand:wikidata":"Q7579979","brand:wikipedia":"en:Sportsman's Warehouse",name:"Sportsman's Warehouse",shop:"outdoor"}},"shop/outdoor|Trespass":{countryCodes:["fr","gb","ie"],tags:{brand:"Trespass","brand:wikidata":"Q17035733","brand:wikipedia":"en:Trespass (clothing)",name:"Trespass",shop:"outdoor"}},"shop/outpost|Wildberries":{countryCodes:["by","ru"],matchTags:["shop/clothes"],tags:{brand:"Wildberries","brand:wikidata":"Q24933714","brand:wikipedia":"ru:Wildberries",name:"Wildberries",shop:"outpost"}},"shop/paint|Benjamin Moore":{countryCodes:["ca","us"],tags:{brand:"Benjamin Moore","brand:wikidata":"Q4889038","brand:wikipedia":"en:Benjamin Moore & Co.",name:"Benjamin Moore",shop:"paint"}},"shop/paint|Comex":{tags:{brand:"Comex","brand:wikidata":"Q5151654","brand:wikipedia":"en:Comex Group",name:"Comex",shop:"paint"}},"shop/paint|Jotun":{tags:{brand:"Jotun","brand:wikidata":"Q1778870","brand:wikipedia":"en:Jotun (company)",name:"Jotun",shop:"paint"}},"shop/paint|National Paints":{countryCodes:["ae","qa"],tags:{brand:"National Paints","brand:wikidata":"Q62073521",name:"National Paints",shop:"paint"}},"shop/paint|Sherwin-Williams":{matchNames:["sherwin williams paint store","sherwin williams paints"],tags:{brand:"Sherwin-Williams","brand:wikidata":"Q48881","brand:wikipedia":"en:Sherwin-Williams",name:"Sherwin-Williams",shop:"paint"}},"shop/party|Party City":{countryCodes:["ca","us"],tags:{brand:"Party City","brand:wikidata":"Q7140896","brand:wikipedia":"en:Party City",name:"Party City",shop:"party"}},"shop/pastry|Cookies by Design":{countryCodes:["us"],matchTags:["shop/confectionery","shop/gift"],tags:{brand:"Cookies by Design","brand:wikidata":"Q5167112","brand:wikipedia":"en:Cookies by Design",craft:"bakery",name:"Cookies by Design",shop:"pastry"}},"shop/pastry|Namur":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Namur",name:"Namur",shop:"pastry"}},"shop/pastry|Oberweis":{countryCodes:["lu"],matchTags:["shop/bakery","shop/confectionery"],tags:{brand:"Oberweis",name:"Oberweis",shop:"pastry"}},"shop/pastry|Smallcakes":{countryCodes:["us"],tags:{brand:"Smallcakes","brand:wikidata":"Q62384749",name:"Smallcakes",shop:"pastry"}},"shop/pawnbroker|Cash Converters":{tags:{brand:"Cash Converters","brand:wikidata":"Q5048645","brand:wikipedia":"en:Cash Converters",name:"Cash Converters",shop:"pawnbroker"}},"shop/pawnbroker|Cebuana Lhuillier":{countryCodes:["ph"],matchNames:["agencia cebuana","m lhuillier"],tags:{brand:"Cebuana Lhuillier","brand:wikidata":"Q17064661","brand:wikipedia":"en:Cebuana Lhuillier",name:"Cebuana Lhuillier",shop:"pawnbroker",short_name:"Cebuana"}},"shop/pawnbroker|Loombard":{countryCodes:["pl"],tags:{brand:"Loombard",name:"Loombard",shop:"pawnbroker"}},"shop/pawnbroker|Palawan Pawnshop":{countryCodes:["ph"],tags:{brand:"Palawan Pawnshop","brand:wikidata":"Q62391488",name:"Palawan Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|RD Pawnshop":{countryCodes:["ph"],tags:{brand:"RD Pawnshop",name:"RD Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Villarica Pawnshop":{countryCodes:["ph"],tags:{brand:"Villarica Pawnshop","brand:wikidata":"Q62391438",name:"Villarica Pawnshop",shop:"pawnbroker"}},"shop/pawnbroker|Скарбниця":{countryCodes:["ua"],tags:{brand:"Скарбниця",name:"Скарбниця",shop:"pawnbroker"}},"shop/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/pet|イオンペット":{countryCodes:["jp"],tags:{brand:"イオンペット","brand:en":"Aeonpet","brand:ja":"イオンペット","brand:wikidata":"Q11286064","brand:wikipedia":"ja:イオンペット",name:"イオンペット","name:en":"Aeonpet","name:ja":"イオンペット",shop:"pet"}},"shop/photo|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:en":"Kitamura Camera","brand:ja":"カメラのキタムラ","brand:wikidata":"Q11294821","brand:wikipedia":"ja:カメラのキタムラ",name:"カメラのキタムラ","name:en":"Kitamura Camera","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"],nomatch:["shop/storage_rental|U-Haul"],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"],matchNames:["Белвест"],tags:{brand:"Belwest",name:"Belwest",shop:"shoes"}},"shop/shoes|Besson Chaussures":{countryCodes:["fr"],tags:{brand:"Besson Chaussures","brand:wikidata":"Q2899930","brand:wikipedia":"fr:Besson Chaussures",name:"Besson Chaussures",shop:"shoes"}},"shop/shoes|Birkenstock":{tags:{brand:"Birkenstock","brand:wikidata":"Q648458","brand:wikipedia":"en:Birkenstock",name:"Birkenstock",shop:"shoes"}},"shop/shoes|Brantano":{countryCodes:["be","gb","lu"],tags:{brand:"Brantano","brand:wikidata":"Q4957616","brand:wikipedia":"en:Brantano Footwear",name:"Brantano",shop:"shoes"}},"shop/shoes|Browns":{countryCodes:["ca"],tags:{brand:"Browns","brand:wikidata":"Q16954153","brand:wikipedia":"en:Browns Shoes",name:"Browns",shop:"shoes"}},"shop/shoes|CCC":{tags:{brand:"CCC","brand:wikidata":"Q11788344","brand:wikipedia":"de:CCC (Unternehmen)",name:"CCC",shop:"shoes"}},"shop/shoes|Call It Spring":{tags:{brand:"Call It Spring","brand:wikidata":"Q7580363","brand:wikipedia":"en:Call It Spring",name:"Call It Spring",shop:"shoes"}},"shop/shoes|Camper":{tags:{brand:"Camper","brand:wikidata":"Q1030922","brand:wikipedia":"en:Camper (company)",name:"Camper",shop:"shoes"}},"shop/shoes|Chaussea":{countryCodes:["be","es","fr","lu"],tags:{brand:"Chaussea","brand:wikidata":"Q62082044",name:"Chaussea",shop:"shoes"}},"shop/shoes|Christian Louboutin":{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|Courir":{tags:{brand:"Courir","brand:wikidata":"Q3001258","brand:wikipedia":"fr:Courir (chaîne de magasins)",name:"Courir",shop:"shoes"}},"shop/shoes|Crocs":{tags:{brand:"Crocs","brand:wikidata":"Q926699","brand:wikipedia":"en:Crocs",name:"Crocs",shop:"shoes"}},"shop/shoes|DSW":{countryCodes:["ca","us"],matchNames:["designer shoe warehouse","dsw shoes"],tags:{brand:"DSW","brand:wikidata":"Q5206207","brand:wikipedia":"en:Designer Brands",name:"DSW",shop:"shoes"}},"shop/shoes|Deichmann":{tags:{brand:"Deichmann","brand:wikidata":"Q664543","brand:wikipedia":"en:Deichmann SE",name:"Deichmann",shop:"shoes"}},"shop/shoes|Din sko":{countryCodes:["no","se"],tags:{brand:"Din sko","brand:wikidata":"Q10472869","brand:wikipedia":"sv:Din sko",name:"Din sko",shop:"shoes"}},"shop/shoes|Dosenbach":{countryCodes:["ch"],tags:{brand:"Dosenbach","brand:wikidata":"Q2677329","brand:wikipedia":"de:Dosenbach-Ochsner",name:"Dosenbach",shop:"shoes"}},"shop/shoes|Dune London":{countryCodes:["ch","de","fr","gb","nl"],tags:{brand:"Dune London","brand:wikidata":"Q65557112",name:"Dune London",shop:"shoes",short_name:"Dune"}},"shop/shoes|Ecco":{tags:{brand:"Ecco","brand:wikidata":"Q1280255","brand:wikipedia":"en:ECCO",name:"Ecco",shop:"shoes"}},"shop/shoes|FLO":{countryCodes:["al","tr"],nomatch:["amenity/charging_station|FLO"],tags:{brand:"FLO","brand:wikidata":"Q61994802",name:"FLO",shop:"shoes"}},"shop/shoes|Famous Footwear":{countryCodes:["us"],tags:{brand:"Famous Footwear","brand:wikidata":"Q5433457","brand:wikipedia":"en:Famous Footwear",name:"Famous Footwear",shop:"shoes"}},"shop/shoes|Foot Locker":{tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Foot Locker",shop:"shoes"}},"shop/shoes|Foot Solutions":{tags:{brand:"Foot Solutions","brand:wikidata":"Q69982369",name:"Foot Solutions",shop:"shoes"}},"shop/shoes|Footaction":{countryCodes:["ca","pr","us"],tags:{brand:"Footaction","brand:wikidata":"Q71022064",name:"Footaction",shop:"shoes"}},"shop/shoes|G.H. Bass & Co.":{countryCodes:["gb","us"],tags:{brand:"G.H. Bass & Co.","brand:wikidata":"Q16993893","brand:wikipedia":"en:G.H. Bass & Co.",name:"G.H. Bass & Co.",shop:"shoes"}},"shop/shoes|Gabor":{countryCodes:["de","it"],tags:{brand:"Gabor","brand:wikidata":"Q1488760","brand:wikipedia":"de:Gabor Shoes",name:"Gabor",shop:"shoes"}},"shop/shoes|Geox":{tags:{brand:"Geox","brand:wikidata":"Q588001","brand:wikipedia":"en:Geox",name:"Geox",shop:"shoes"}},"shop/shoes|Görtz":{countryCodes:["de"],tags:{brand:"Görtz","brand:wikidata":"Q1559593","brand:wikipedia":"de:Ludwig Görtz",name:"Görtz",shop:"shoes"}},"shop/shoes|Havaianas":{tags:{brand:"Havaianas","brand:wikidata":"Q3128675","brand:wikipedia":"en:Havaianas",name:"Havaianas",shop:"shoes"}},"shop/shoes|Humanic":{countryCodes:["at","cz","de","hu","ro","sk"],tags:{brand:"Humanic","brand:wikidata":"Q1636668","brand:wikipedia":"en:Humanic",name:"Humanic",shop:"shoes"}},"shop/shoes|Hush Puppies":{tags:{brand:"Hush Puppies","brand:wikidata":"Q1828588","brand:wikipedia":"en:Hush Puppies",name:"Hush Puppies",shop:"shoes"}},"shop/shoes|Jimmy Choo":{tags:{brand:"Jimmy Choo","brand:wikidata":"Q5213855","brand:wikipedia":"en:Jimmy Choo Ltd",name:"Jimmy Choo",shop:"shoes"}},"shop/shoes|Johnston & Murphy":{countryCodes:["ca","us"],tags:{brand:"Johnston & Murphy","brand:wikidata":"Q6268615","brand:wikipedia":"en:Johnston & Murphy",name:"Johnston & Murphy",shop:"shoes"}},"shop/shoes|Jones Bootmaker":{countryCodes:["gb"],tags:{brand:"Jones Bootmaker","brand:wikidata":"Q6275139","brand:wikipedia":"en:Jones Bootmaker",name:"Jones Bootmaker",shop:"shoes",short_name:"Jones"}},"shop/shoes|Journeys":{countryCodes:["ca","us"],tags:{brand:"Journeys","brand:wikidata":"Q61994838",name:"Journeys",shop:"shoes"}},"shop/shoes|Kari":{tags:{brand:"Kari","brand:wikidata":"Q47155680","brand:wikipedia":"ru:Kari (компания)",name:"Kari",shop:"shoes"}},"shop/shoes|Kids Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Kids Foot Locker",shop:"shoes"}},"shop/shoes|Kurt Geiger":{countryCodes:["gb"],tags:{brand:"Kurt Geiger","brand:wikidata":"Q17063744",name:"Kurt Geiger",shop:"shoes"}},"shop/shoes|La Halle aux Chaussures":{countryCodes:["fr"],tags:{brand:"La Halle aux Chaussures","brand:wikidata":"Q62390731",name:"La Halle aux Chaussures",shop:"shoes"}},"shop/shoes|Lady Foot Locker":{countryCodes:["us"],tags:{brand:"Foot Locker","brand:wikidata":"Q63335","brand:wikipedia":"en:Foot Locker",name:"Lady Foot Locker",shop:"shoes"}},"shop/shoes|Manfield~(France)":{countryCodes:["fr"],tags:{brand:"Manfield",name:"Manfield",shop:"shoes"}},"shop/shoes|Manfield~(Netherlands)":{countryCodes:["be","de","nl"],tags:{brand:"Manfield","brand:wikidata":"Q58328872","brand:wikipedia":"nl:Manfield schoenen",name:"Manfield",shop:"shoes"}},"shop/shoes|Marko":{countryCodes:["by","ru"],matchNames:["Марко"],tags:{brand:"Marko","brand:wikidata":"Q67861181",name:"Marko","name:ru":"Марко",shop:"shoes"}},"shop/shoes|Mephisto":{tags:{brand:"Mephisto","brand:wikidata":"Q822975","brand:wikipedia":"fr:Mephisto (chaussure)",name:"Mephisto",shop:"shoes"}},"shop/shoes|Merrell":{countryCodes:["us"],tags:{brand:"Merrell","brand:wikidata":"Q1921997","brand:wikipedia":"en:Merrell (company)",name:"Merrell",shop:"shoes"}},"shop/shoes|Minelli":{tags:{brand:"Minelli","brand:wikidata":"Q61994831",name:"Minelli",shop:"shoes"}},"shop/shoes|Naturalizer":{countryCodes:["ca","cn","gu","us"],tags:{brand:"Naturalizer","brand:wikidata":"Q65012038",name:"Naturalizer",shop:"shoes"}},"shop/shoes|New Balance":{tags:{brand:"New Balance","brand:wikidata":"Q742988","brand:wikipedia":"en:New Balance",name:"New Balance",shop:"shoes"}},"shop/shoes|Office":{countryCodes:["de","gb","ie","ro"],tags:{brand:"Office","brand:wikidata":"Q7079121","brand:wikipedia":"en:Office Holdings",name:"Office",shop:"shoes"}},"shop/shoes|Payless ShoeSource":{matchNames:["payless"],tags:{brand:"Payless ShoeSource","brand:wikidata":"Q7156755","brand:wikipedia":"en:Payless ShoeSource",name:"Payless ShoeSource",shop:"shoes"}},"shop/shoes|Quick Schuh":{countryCodes:["at","de"],tags:{brand:"Quick Schuh","brand:wikidata":"Q2123069","brand:wikipedia":"de:Quick Schuh",name:"Quick Schuh",shop:"shoes"}},"shop/shoes|R.M.Williams":{tags:{brand:"R.M.Williams","brand:wikidata":"Q65042966","brand:wikipedia":"en:R. M. Williams (company)",name:"R.M.Williams",shop:"shoes"}},"shop/shoes|Rack Room Shoes":{countryCodes:["us"],tags:{brand:"Rack Room Shoes","brand:wikidata":"Q17109937","brand:wikipedia":"en:Rack Room Shoes",name:"Rack Room Shoes",shop:"shoes"}},"shop/shoes|Ralf Ringer":{countryCodes:["ru"],tags:{brand:"Ralf Ringer",name:"Ralf Ringer",shop:"shoes"}},"shop/shoes|Red Wing":{countryCodes:["de","gb","nl","us"],matchNames:["red wing shoes"],tags:{brand:"Red Wing","brand:wikidata":"Q934096","brand:wikipedia":"en:Red Wing Shoes",name:"Red Wing",shop:"shoes"}},"shop/shoes|Reno":{countryCodes:["at","ch","de","hu","sk"],tags:{brand:"Reno","brand:wikidata":"Q2144204","brand:wikipedia":"de:Reno (Schuhhandel)",name:"Reno",shop:"shoes"}},"shop/shoes|Respect":{countryCodes:["by","ru","ua"],tags:{brand:"Respect",name:"Respect",shop:"shoes"}},"shop/shoes|Rieker":{tags:{brand:"Rieker","brand:wikidata":"Q2152193","brand:wikipedia":"en:Rieker Shoes",name:"Rieker",shop:"shoes"}},"shop/shoes|Rockport":{tags:{brand:"Rockport","brand:wikidata":"Q4048384","brand:wikipedia":"en:Rockport (company)",name:"Rockport",shop:"shoes"}},"shop/shoes|Runners Point":{countryCodes:["de"],tags:{brand:"Runners Point","brand:wikidata":"Q2176418","brand:wikipedia":"de:Runners Point",name:"Runners Point",shop:"shoes"}},"shop/shoes|Salamander":{tags:{brand:"Salamander","brand:wikidata":"Q878354","brand:wikipedia":"de:Salamander (Schuhe)",name:"Salamander",shop:"shoes"}},"shop/shoes|Salvatore Ferragamo":{tags:{brand:"Salvatore Ferragamo","brand:wikidata":"Q3946053","brand:wikipedia":"en:Salvatore Ferragamo S.p.A.",name:"Salvatore Ferragamo",shop:"shoes"}},"shop/shoes|San Marina":{countryCodes:["fr"],tags:{brand:"San Marina","brand:wikidata":"Q3471558","brand:wikipedia":"fr:San Marina",name:"San Marina",shop:"shoes"}},"shop/shoes|Scapino":{countryCodes:["nl"],tags:{brand:"Scapino","brand:wikidata":"Q2298792","brand:wikipedia":"nl:Scapino (winkelketen)",name:"Scapino",shop:"shoes"}},"shop/shoes|Schuh":{countryCodes:["de","gb","gg","ie"],tags:{brand:"Schuh","brand:wikidata":"Q7432952","brand:wikipedia":"en:Schuh",name:"Schuh",shop:"shoes"}},"shop/shoes|Schuh-Mann":{countryCodes:["de"],tags:{brand:"Schuh-Mann","brand:wikidata":"Q66133314",name:"Schuh-Mann",shop:"shoes"}},"shop/shoes|Schuhkay":{countryCodes:["de"],tags:{brand:"Schuhkay","brand:wikidata":"Q66009415",name:"Schuhkay",shop:"shoes"}},"shop/shoes|Shoe Carnival":{countryCodes:["us"],tags:{brand:"Shoe Carnival","brand:wikidata":"Q7500007","brand:wikipedia":"en:Shoe Carnival",name:"Shoe Carnival",shop:"shoes"}},"shop/shoes|Shoe Show":{tags:{brand:"Shoe Show",name:"Shoe Show",shop:"shoes"}},"shop/shoes|Shoe Zone":{countryCodes:["gb","ie"],tags:{brand:"Shoe Zone","brand:wikidata":"Q7500016","brand:wikipedia":"en:Shoe Zone",name:"Shoe Zone",shop:"shoes"}},"shop/shoes|Siemes Schuhcenter":{countryCodes:["de"],tags:{brand:"Siemes Schuhcenter","brand:wikidata":"Q2800720","brand:wikipedia":"de:Siemes (Unternehmen)",name:"Siemes Schuhcenter",shop:"shoes"}},"shop/shoes|Skechers":{matchNames:["sketchers"],tags:{brand:"Skechers","brand:wikidata":"Q2945643","brand:wikipedia":"en:Skechers",name:"Skechers",shop:"shoes"}},"shop/shoes|Snipes":{countryCodes:["at","ch","de","es","fr","it","nl","us"],tags:{brand:"Snipes","brand:wikidata":"Q42306166","brand:wikipedia":"de:Snipes (Unternehmen)",name:"Snipes",shop:"shoes"}},"shop/shoes|Soft Moc":{countryCodes:["ca"],tags:{brand:"Soft Moc","brand:wikidata":"Q65012391",name:"Soft Moc",shop:"shoes"}},"shop/shoes|Sperry":{countryCodes:["us"],matchNames:["sperry top sider"],tags:{brand:"Sperry","brand:wikidata":"Q7576421","brand:wikipedia":"en:Sperry Top-Sider",name:"Sperry",shop:"shoes"}},"shop/shoes|Steve Madden":{countryCodes:["ca","us"],tags:{brand:"Steve Madden","brand:wikidata":"Q25352034","brand:wikipedia":"en:Steve Madden (company)",name:"Steve Madden",shop:"shoes"}},"shop/shoes|Stride Rite":{countryCodes:["us"],tags:{brand:"Stride Rite","brand:wikidata":"Q2356171","brand:wikipedia":"en:Stride Rite Corporation",name:"Stride Rite",shop:"shoes"}},"shop/shoes|Stuart Weitzman":{countryCodes:["ca","us"],tags:{brand:"Stuart Weitzman",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|ЦентрОбувь":{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|Golf Galaxy":{countryCodes:["us"],matchTags:["shop/golf"],tags:{brand:"Golf Galaxy","brand:wikidata":"Q69364358",name:"Golf Galaxy",shop:"sports",sport:"golf"}},"shop/sports|Hervis":{countryCodes:["at","cz","de","hr","hu","ro","si"],matchNames:["hervis sport","hervis sports"],tags:{brand:"Hervis","brand:wikidata":"Q1614816","brand:wikipedia":"de:Hervis",name:"Hervis",shop:"sports"}},"shop/sports|Hibbett Sports":{countryCodes:["us"],tags:{brand:"Hibbett Sports","brand:wikidata":"Q5750671","brand:wikipedia":"en:Hibbett Sports",name:"Hibbett Sports",shop:"sports"}},"shop/sports|Intersport":{tags:{brand:"Intersport","brand:wikidata":"Q666888","brand:wikipedia":"en:Intersport",name:"Intersport",shop:"sports"}},"shop/sports|JD Sports":{countryCodes:["de","es","fr","gb","ie","nl"],matchNames:["JD"],tags:{brand:"JD Sports","brand:wikidata":"Q6108019","brand:wikipedia":"en:JD Sports",name:"JD Sports",shop:"sports"}},"shop/sports|Marathon Sports":{countryCodes:["bo","ec","pe"],tags:{brand:"Marathon Sports","brand:wikidata":"Q3027516","brand:wikipedia":"es:Marathon Sports",name:"Marathon Sports",shop:"sports"}},"shop/sports|Martes Sport":{countryCodes:["pl"],tags:{brand:"Martes Sport","brand:wikidata":"Q62073490",name:"Martes Sport",shop:"sports"}},"shop/sports|Modell's Sporting Goods":{countryCodes:["us"],matchNames:["modells"],tags:{brand:"Modell's Sporting Goods","brand:wikidata":"Q3317844","brand:wikipedia":"en:Modell's Sporting Goods",name:"Modell's Sporting Goods",shop:"sports"}},"shop/sports|Peloton":{countryCodes:["ca","gb","us"],tags:{brand:"Peloton","brand:wikidata":"Q56276186","brand:wikipedia":"en:Peloton (company)",name:"Peloton",shop:"sports"}},"shop/sports|Play It Again Sports":{countryCodes:["ca","us"],tags:{brand:"Play It Again Sports","brand:wikidata":"Q7203029","brand:wikipedia":"en:Play It Again Sports",name:"Play It Again Sports",shop:"sports"}},"shop/sports|Rebel":{countryCodes:["au","nz"],tags:{brand:"Rebel","brand:wikidata":"Q18636397","brand:wikipedia":"en:Rebel (company)",name:"Rebel",shop:"sports"}},"shop/sports|Sport 2000":{countryCodes:["at","de","fr","nl"],tags:{brand:"Sport 2000","brand:wikidata":"Q262394","brand:wikipedia":"de:Sport 2000",name:"Sport 2000",shop:"sports"}},"shop/sports|Sport Chek":{countryCodes:["ca"],tags:{brand:"Sport Chek","brand:wikidata":"Q3494037","brand:wikipedia":"en:Sport Chek",name:"Sport Chek",shop:"sports"}},"shop/sports|Sport Zone":{countryCodes:["pt"],tags:{brand:"Sport Zone","brand:wikidata":"Q18485899","brand:wikipedia":"pt:Sport Zone",name:"Sport Zone",shop:"sports"}},"shop/sports|Sporting Life":{countryCodes:["ca"],tags:{brand:"Sporting Life","brand:wikidata":"Q7579583","brand:wikipedia":"en:Sporting Life (retailer)",name:"Sporting Life",shop:"sports"}},"shop/sports|Sportisimo":{countryCodes:["cz","sk"],tags:{brand:"Sportisimo","brand:wikidata":"Q54974273",name:"Sportisimo",shop:"sports"}},"shop/sports|Sports Authority":{tags:{brand:"Sports Authority","brand:wikidata":"Q7579688","brand:wikipedia":"en:Sports Authority",name:"Sports Authority",shop:"sports"}},"shop/sports|Sports Direct":{matchNames:["SportsDirect.com"],tags:{brand:"Sports Direct","brand:wikidata":"Q2913554","brand:wikipedia":"en:Sports Direct",name:"Sports Direct",shop:"sports"}},"shop/sports|Sprinter":{countryCodes:["es"],tags:{brand:"Sprinter","brand:wikidata":"Q6133465","brand:wikipedia":"es:Sprinter (tienda)",name:"Sprinter",shop:"sports"}},"shop/sports|Stadium":{countryCodes:["de","dk","fi","se"],tags:{brand:"Stadium","brand:wikidata":"Q4993863","brand:wikipedia":"sv:Stadium (detaljhandelskedja)",name:"Stadium",shop:"sports"}},"shop/sports|XXL":{countryCodes:["fi","no","se"],tags:{brand:"XXL","brand:wikidata":"Q12010840","brand:wikipedia":"no:XXL",name:"XXL",shop:"sports"}},"shop/sports|Декатлон":{countryCodes:["bg","ru","ua"],tags:{brand:"Декатлон","brand:en":"Decathlon","brand:ru":"Декатлон","brand:wikidata":"Q509349","brand:wikipedia":"ru:Decathlon",name:"Декатлон","name:en":"Decathlon","name:ru":"Декатлон",shop:"sports"}},"shop/sports|Спортмастер":{countryCodes:["by","kz","ru","ua"],matchNames:["спортмастер гипер"],tags:{brand:"Спортмастер","brand:en":"Sportmaster","brand:ru":"Спортмастер","brand:wikidata":"Q4438176","brand:wikipedia":"ru:Спортмастер",name:"Спортмастер","name:en":"Sportmaster","name:ru":"Спортмастер",shop:"sports"}},"shop/stationery|Buffetti":{countryCodes:["it"],tags:{brand:"Buffetti",name:"Buffetti",shop:"stationery"}},"shop/stationery|Bureau Vallée":{countryCodes:["fr"],tags:{brand:"Bureau Vallée","brand:wikidata":"Q18385014","brand:wikipedia":"fr:Bureau Vallée",name:"Bureau Vallée",shop:"stationery"}},"shop/stationery|McPaper":{countryCodes:["ch","de"],tags:{brand:"McPaper","brand:wikidata":"Q1915329","brand:wikipedia":"de:McPaper",name:"McPaper",shop:"stationery"}},"shop/stationery|Office Depot":{matchTags:["shop/office_supplies"],tags:{brand:"Office Depot","brand:wikidata":"Q1337797","brand:wikipedia":"en:Office Depot",name:"Office Depot",shop:"stationery"}},"shop/stationery|OfficeMax":{countryCodes:["mx","nz","us"],tags:{brand:"OfficeMax","brand:wikidata":"Q7079111","brand:wikipedia":"en:OfficeMax",name:"OfficeMax",shop:"stationery"}},"shop/stationery|Officeworks":{countryCodes:["au"],tags:{brand:"Officeworks","brand:wikidata":"Q7079486","brand:wikipedia":"en:Officeworks",name:"Officeworks",shop:"stationery"}},"shop/stationery|Pagro":{countryCodes:["at"],tags:{brand:"Pagro","brand:wikidata":"Q57550022",name:"Pagro",shop:"stationery"}},"shop/stationery|Paper Source":{countryCodes:["us"],tags:{brand:"Paper Source","brand:wikidata":"Q25000269","brand:wikipedia":"en:Paper Source",name:"Paper Source",shop:"stationery"}},"shop/stationery|Paperchase":{countryCodes:["gb"],tags:{brand:"Paperchase","brand:wikidata":"Q7132739","brand:wikipedia":"en:Paperchase",name:"Paperchase",shop:"stationery"}},"shop/stationery|Ryman":{countryCodes:["gb"],tags:{brand:"Ryman","brand:wikidata":"Q7385188","brand:wikipedia":"en:Ryman",name:"Ryman",shop:"stationery"}},"shop/stationery|Smiggle":{countryCodes:["at","gb","hk","ie","my","nz","sg"],tags:{brand:"Smiggle","brand:wikidata":"Q7544536",name:"Smiggle",shop:"stationery"}},"shop/stationery|Staples":{matchTags:["shop/office_supplies"],tags:{brand:"Staples","brand:wikidata":"Q785943","brand:wikipedia":"en:Staples Inc.",name:"Staples",shop:"stationery"}},"shop/stationery|Комус":{countryCodes:["ru"],tags:{brand:"Комус","brand:en":"Komus","brand:wikidata":"Q4230314","brand:wikipedia":"en:Komus (company)",name:"Комус","name:en":"Komus",shop:"stationery"}},"shop/storage_rental|Extra Space Storage":{countryCodes:["us"],matchNames:["extra space"],tags:{brand:"Extra Space Storage","brand:wikidata":"Q5422162","brand:wikipedia":"en:Extra Space Storage",name:"Extra Space Storage",shop:"storage_rental"}},"shop/storage_rental|Public Storage":{countryCodes:["ca","us"],matchTags:["shop/storage_units"],tags:{brand:"Public Storage","brand:wikidata":"Q1156045","brand:wikipedia":"en:Public Storage",name:"Public Storage",shop:"storage_rental"}},"shop/storage_rental|U-Haul":{countryCodes:["ca","us"],matchNames:["uhaul neighborhood dealer"],nomatch:["shop/rental|U-Haul"],tags:{brand:"U-Haul","brand:wikidata":"Q7862902","brand:wikipedia":"en:U-Haul",name:"U-Haul",shop:"storage_rental"}},"shop/supermarket|8 à Huit":{nomatch:["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","brand:wikidata":"Q2832081","brand:wikipedia":"es:Alcampo",name:"Alcampo",shop:"supermarket"}},"shop/supermarket|Aldi":{tags:{brand:"Aldi","brand:wikidata":"Q125054","brand:wikipedia":"en:Aldi",name:"Aldi",shop:"supermarket"}},"shop/supermarket|Aldi Nord":{countryCodes:["de"],tags:{brand:"Aldi Nord","brand:wikidata":"Q41171373","brand:wikipedia":"en:Aldi",name:"Aldi Nord",shop:"supermarket"}},"shop/supermarket|Aldi Süd":{countryCodes:["de"],tags:{brand:"Aldi Süd","brand:wikidata":"Q41171672","brand:wikipedia":"en:Aldi",name:"Aldi Süd",shop:"supermarket"}},"shop/supermarket|Alfamart":{countryCodes:["id","ph"],matchTags:["shop/convenience"],tags:{brand:"Alfamart","brand:wikidata":"Q23745600","brand:wikipedia":"en:Alfamart",name:"Alfamart",shop:"supermarket"}},"shop/supermarket|Alimerka":{countryCodes:["es"],tags:{brand:"Alimerka","brand:wikidata":"Q16482738","brand:wikipedia":"es:Alimerka",name:"Alimerka",shop:"supermarket"}},"shop/supermarket|Alnatura":{countryCodes:["ch","de"],tags:{brand:"Alnatura","brand:wikidata":"Q876811","brand:wikipedia":"en:Alnatura",name:"Alnatura",organic:"only",shop:"supermarket"}},"shop/supermarket|Amigo":{countryCodes:["us"],matchNames:["amigo puerto rico","amigo supermarket","supermercado amigo"],tags:{alt_name:"Supermercados Amigo",brand:"Amigo","brand:wikidata":"Q4746234","brand:wikipedia":"en:Amigo Supermarkets",name:"Amigo",shop:"supermarket"}},"shop/supermarket|Ara":{countryCodes:["co"],tags:{brand:"Ara",name:"Ara",shop:"supermarket"}},"shop/supermarket|Asda":{countryCodes:["gb"],nomatch:["amenity/fuel|Asda"],tags:{brand:"Asda","brand:wikidata":"Q297410","brand:wikipedia":"en:Asda",name:"Asda",shop:"supermarket"}},"shop/supermarket|Atacadão":{countryCodes:["br"],tags:{brand:"Atacadão","brand:wikidata":"Q2868739","brand:wikipedia":"en:Atacadão",name:"Atacadão",shop:"supermarket"}},"shop/supermarket|Auchan":{nomatch:["amenity/fuel|Auchan"],tags:{brand:"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"en:Auchan",name:"Auchan",shop:"supermarket"}},"shop/supermarket|Auchan Drive":{countryCodes:["fr","lu"],tags:{brand:"Auchan Drive",name:"Auchan Drive",shop:"supermarket"}},"shop/supermarket|BI-LO":{countryCodes:["us"],tags:{brand:"BI-LO","brand:wikidata":"Q4835620","brand:wikipedia":"en:BI-LO (United States)",name:"BI-LO",shop:"supermarket"}},"shop/supermarket|BM":{countryCodes:["es"],tags:{brand:"BM","brand:wikidata":"Q62073462",name:"BM",shop:"supermarket"}},"shop/supermarket|Bashas'":{countryCodes:["us"],tags:{brand:"Bashas'","brand:wikidata":"Q4866786","brand:wikipedia":"en:Bashas'",name:"Bashas'",shop:"supermarket"}},"shop/supermarket|Biedronka":{countryCodes:["pl"],tags:{brand:"Biedronka","brand:wikidata":"Q857182","brand:wikipedia":"pl:Biedronka (sieć handlowa)",name:"Biedronka",shop:"supermarket"}},"shop/supermarket|Big Bazaar":{countryCodes:["in"],tags:{brand:"Big Bazaar","brand:wikidata":"Q3631008","brand:wikipedia":"en:Big Bazaar",name:"Big Bazaar",shop:"supermarket"}},"shop/supermarket|Big C":{countryCodes:["th","vn"],tags:{brand:"Big C","brand:wikidata":"Q858665","brand:wikipedia":"en:Big C",name:"Big C",shop:"supermarket"}},"shop/supermarket|Big-A":{tags:{brand:"Big-A",name:"Big-A",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|Bónus":{countryCodes:["fo","is"],tags:{brand:"Bónus","brand:wikidata":"Q3480158","brand:wikipedia":"en:Bónus",name:"Bónus",shop:"supermarket"}},"shop/supermarket|C-Town Supermarkets":{countryCodes:["us"],tags:{brand:"C-Town Supermarkets","brand:wikidata":"Q5005929","brand:wikipedia":"en:C-Town Supermarkets",name:"C-Town",shop:"supermarket"}},"shop/supermarket|CBA":{nomatch:["shop/convenience|CBA"],tags:{brand:"CBA","brand:wikidata":"Q779845","brand:wikipedia":"en:CBA (food retail)",name:"CBA",shop:"supermarket"}},"shop/supermarket|COOP Jednota":{countryCodes:["cz","sk"],matchNames:["jednota"],nomatch:["shop/convenience|COOP Jednota"],tags:{brand:"COOP Jednota","brand:wikidata":"Q41629254","brand:wikipedia":"sk:COOP Jednota Slovensko",name:"COOP Jednota",shop:"supermarket"}},"shop/supermarket|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|Dierbergs":{countryCodes:["us"],tags:{brand:"Dierbergs","brand:wikidata":"Q5274978","brand:wikipedia":"en:Dierbergs Markets",name:"Dierbergs",shop:"supermarket"}},"shop/supermarket|Dino":{countryCodes:["pl"],tags:{brand:"Dino","brand:wikidata":"Q11694239","brand:wikipedia":"pl:Dino Polska",name:"Dino",shop:"supermarket"}},"shop/supermarket|Dirk van den Broek":{countryCodes:["nl"],tags:{brand:"Dirk van den Broek","brand:wikidata":"Q17502722","brand:wikipedia":"en:Dirk (supermarket)",name:"Dirk van den Broek",shop:"supermarket"}},"shop/supermarket|Disco~(Argentina)":{countryCodes:["ar"],tags:{brand:"Disco","brand:wikidata":"Q6135978","brand:wikipedia":"es:Disco (supermercado de Argentina)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Disco~(Uruguay)":{countryCodes:["uy"],tags:{brand:"Disco","brand:wikidata":"Q16636819","brand:wikipedia":"es:Disco (supermercado de Uruguay)",name:"Disco",shop:"supermarket"}},"shop/supermarket|Diska":{countryCodes:["de"],tags:{brand:"Diska","brand:wikidata":"Q62390177",name:"Diska",shop:"supermarket"}},"shop/supermarket|Dollar General Market":{countryCodes:["us"],matchTags:["shop/convenience","shop/variet_store"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/supermarket|Dollar General Market","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General Market","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General Market",shop:"supermarket"}},"shop/supermarket|Dunnes Stores":{countryCodes:["gb","ie"],tags:{brand:"Dunnes Stores","brand:wikidata":"Q1266203","brand:wikipedia":"en:Dunnes Stores",name:"Dunnes Stores",shop:"supermarket"}},"shop/supermarket|E-Center":{countryCodes:["de"],tags:{brand:"E-Center","brand:wikidata":"Q701755","brand:wikipedia":"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|Edeka xpress":{countryCodes:["de"],tags:{brand:"Edeka","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"Edeka xpress",shop:"supermarket"}},"shop/supermarket|Eko":{countryCodes:["pl"],nomatch:["amenity/fuel|EKO~(Canada)","amenity/fuel|EKO~(Greece)"],tags:{brand:"Eko","brand:wikidata":"Q9251859","brand:wikipedia":"pl:Eko Holding",name:"Eko",shop:"supermarket"}},"shop/supermarket|Ekom":{countryCodes:["it"],tags:{brand:"Ekom","brand:wikidata":"Q62073442",name:"Ekom",shop:"supermarket"}},"shop/supermarket|Ekono":{countryCodes:["cl"],tags:{brand:"Ekono","brand:wikidata":"Q2842729","brand:wikipedia":"es:Ekono",name:"Ekono",shop:"supermarket"}},"shop/supermarket|Eroski":{countryCodes:["es","gi"],matchNames:["charter","eroski center"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski",shop:"supermarket"}},"shop/supermarket|Eroski City":{countryCodes:["es"],tags:{brand:"Eroski","brand:wikidata":"Q1361349","brand:wikipedia":"en:Eroski",name:"Eroski City",shop:"supermarket"}},"shop/supermarket|Esselunga":{countryCodes:["it"],tags:{brand:"Esselunga","brand:wikidata":"Q1059636","brand:wikipedia":"en:Esselunga",name:"Esselunga",shop:"supermarket"}},"shop/supermarket|EuroSpin":{countryCodes:["it","si"],tags:{brand:"EuroSpin","brand:wikidata":"Q1374674","brand:wikipedia":"it:Eurospin",name:"EuroSpin",shop:"supermarket"}},"shop/supermarket|Eurospar":{tags:{brand:"Eurospar","brand:wikidata":"Q12309283","brand:wikipedia":"da:Eurospar",name:"Eurospar",shop:"supermarket"}},"shop/supermarket|Extra":{matchNames:["coop extra"],matchTags:["shop/convenience"],tags:{brand:"Extra","brand:wikidata":"Q11964085","brand:wikipedia":"no:Extra (Coop)",name:"Extra",shop:"supermarket"}},"shop/supermarket|Famila":{countryCodes:["de","it"],tags:{brand:"Famila","brand:wikidata":"Q1395108","brand:wikipedia":"de:Famila",name:"Famila",shop:"supermarket"}},"shop/supermarket|Family Fare":{countryCodes:["us"],tags:{brand:"Family Fare","brand:wikidata":"Q19868045","brand:wikipedia":"en:Family Fare",name:"Family Fare",shop:"supermarket"}},"shop/supermarket|Fareway":{countryCodes:["us"],tags:{brand:"Fareway","brand:wikidata":"Q5434998","brand:wikipedia":"en:Fareway",name:"Fareway",shop:"supermarket"}},"shop/supermarket|Farm Boy":{countryCodes:["ca"],tags:{brand:"Farm Boy","brand:wikidata":"Q5435469","brand:wikipedia":"en:Farm Boy",name:"Farm Boy",shop:"supermarket"}},"shop/supermarket|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|Fry's Food and Drug":{countryCodes:["us"],matchNames:["frys"],nomatch:["shop/electronics|Fry's Electronics"],tags:{brand:"Fry's Food and Drug","brand:wikidata":"Q5506547","brand:wikipedia":"en:Fry's Food and Drug",name:"Fry's Food and Drug",shop:"supermarket"}},"shop/supermarket|Føtex":{countryCodes:["dk"],tags:{brand:"Føtex","brand:wikidata":"Q1480395","brand:wikipedia":"en:Føtex",name:"Føtex",shop:"supermarket"}},"shop/supermarket|G20":{countryCodes:["fr"],tags:{brand:"G20","brand:wikidata":"Q3504731","brand:wikipedia":"fr:Supermarchés G20",name:"G20",shop:"supermarket"}},"shop/supermarket|GBarbosa":{countryCodes:["br"],tags:{brand:"GBarbosa","brand:wikidata":"Q10287817","brand:wikipedia":"pt:GBarbosa",name:"GBarbosa",shop:"supermarket"}},"shop/supermarket|Gadis":{countryCodes:["es"],tags:{brand:"Gadis","brand:wikidata":"Q12389151","brand:wikipedia":"gl:Gadisa",name:"Gadis",shop:"supermarket"}},"shop/supermarket|Giant Eagle":{countryCodes:["us"],tags:{brand:"Giant Eagle","brand:wikidata":"Q1522721","brand:wikipedia":"en:Giant Eagle",name:"Giant Eagle",shop:"supermarket"}},"shop/supermarket|Giant Hypermarket":{countryCodes:["id","my","sg","vn"],tags:{brand:"Giant Hypermarket","brand:wikidata":"Q4217013","brand:wikipedia":"en:Giant Hypermarket",name:"Giant Hypermarket",shop:"supermarket"}},"shop/supermarket|Giant~(Carlisle)":{countryCodes:["us"],nomatch:["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|Hero Supermarket":{countryCodes:["id"],tags:{brand:"Hero Supermarket","brand:wikidata":"Q12485604","brand:wikipedia":"en:Hero Supermarket",name:"Hero Supermarket",shop:"supermarket"}},"shop/supermarket|Heron Foods":{countryCodes:["gb"],tags:{brand:"Heron Foods","brand:wikidata":"Q5743472","brand:wikipedia":"en:Heron Foods",name:"Heron Foods",shop:"supermarket"}},"shop/supermarket|Hofer":{countryCodes:["at","si"],nomatch:["amenity/fuel|Hofer"],tags:{brand:"Hofer","brand:wikidata":"Q15815751","brand:wikipedia":"de:Hofer KG",name:"Hofer",shop:"supermarket"}},"shop/supermarket|Hoogvliet":{countryCodes:["nl"],tags:{brand:"Hoogvliet","brand:wikidata":"Q2770647","brand:wikipedia":"nl:Hoogvliet (supermarkt)",name:"Hoogvliet",shop:"supermarket"}},"shop/supermarket|Hruška":{nomatch:["shop/convenience|Hruška"],tags:{brand:"Hruška",name:"Hruška",shop:"supermarket"}},"shop/supermarket|Hy-Vee":{countryCodes:["us"],nomatch:["amenity/fuel|Hy-Vee Gas"],tags:{brand:"Hy-Vee","brand:wikidata":"Q1639719","brand:wikipedia":"en:Hy-Vee",name:"Hy-Vee",shop:"supermarket"}},"shop/supermarket|Hyper U":{countryCodes:["fr"],nomatch:["amenity/fuel|Super U","shop/convenience|Utile","shop/supermarket|Super U","shop/supermarket|U Express"],tags:{brand:"Hyper U","brand:wikidata":"Q2529029","brand:wikipedia":"en:Système U",name:"Hyper U",shop:"supermarket"}},"shop/supermarket|ICA":{countryCodes:["no","se"],matchNames:["ica supermarket"],nomatch:["shop/supermarket|ICA Kvantum","shop/supermarket|ICA Maxi"],tags:{brand:"ICA","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA",shop:"supermarket"}},"shop/supermarket|ICA Kvantum":{countryCodes:["se"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Maxi"],tags:{brand:"ICA Kvantum","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Kvantum",shop:"supermarket"}},"shop/supermarket|ICA Maxi":{countryCodes:["no","se"],matchNames:["maxi"],nomatch:["shop/supermarket|ICA","shop/supermarket|ICA Kvantum"],tags:{brand:"ICA Maxi","brand:wikidata":"Q1663776","brand:wikipedia":"sv:Ica",name:"ICA Maxi",shop:"supermarket"}},"shop/supermarket|IDEA":{countryCodes:["rs"],tags:{brand:"IDEA","brand:wikidata":"Q23461622","brand:wikipedia":"en:Idea (supermarkets)",name:"IDEA",shop:"supermarket"}},"shop/supermarket|IGA":{countryCodes:["au","ca","us"],tags:{brand:"IGA","brand:wikidata":"Q3146662","brand:wikipedia":"en:IGA (supermarkets)",name:"IGA",shop:"supermarket"}},"shop/supermarket|Ingles":{countryCodes:["us"],tags:{brand:"Ingles","brand:wikidata":"Q6032595","brand:wikipedia":"en:Ingles",name:"Ingles",shop:"supermarket"}},"shop/supermarket|Intermarché":{tags:{brand:"Intermarché","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché",shop:"supermarket"}},"shop/supermarket|Intermarché Super":{countryCodes:["be","fr","pl","pt"],tags:{brand:"Intermarché Super","brand:wikidata":"Q3153200","brand:wikipedia":"fr:Intermarché",name:"Intermarché Super",shop:"supermarket"}},"shop/supermarket|Interspar":{countryCodes:["at"],tags:{brand:"Interspar","brand:wikidata":"Q15820339","brand:wikipedia":"de:Interspar (Österreich)",name:"Interspar",shop:"supermarket"}},"shop/supermarket|Ipercoop":{tags:{brand:"Ipercoop",name:"Ipercoop",shop:"supermarket"}},"shop/supermarket|Irma":{countryCodes:["dk"],tags:{brand:"Irma","brand:wikidata":"Q797150","brand:wikipedia":"en:Irma (supermarket)",name:"Irma",shop:"supermarket"}},"shop/supermarket|Jan Linders":{countryCodes:["nl"],tags:{brand:"Jan Linders","brand:wikidata":"Q2200982","brand:wikipedia":"nl:Jan Linders Supermarkten",name:"Jan Linders",shop:"supermarket"}},"shop/supermarket|Jewel-Osco":{countryCodes:["us"],tags:{brand:"Jewel-Osco","brand:wikidata":"Q3178470","brand:wikipedia":"en:Jewel (supermarket)",name:"Jewel-Osco",shop:"supermarket"}},"shop/supermarket|Jumbo":{tags:{brand:"Jumbo","brand:wikidata":"Q2262314","brand:wikipedia":"en:Jumbo (supermarket)",name:"Jumbo",shop:"supermarket"}},"shop/supermarket|K+K":{countryCodes:["de"],tags:{brand:"K+K","brand:wikidata":"Q1718009","brand:wikipedia":"de:K+K Klaas & Kock",name:"K+K",shop:"supermarket"}},"shop/supermarket|K-Citymarket":{countryCodes:["fi"],tags:{brand:"K-Citymarket","brand:wikidata":"Q11868561","brand:wikipedia":"fi:K-Citymarket",name:"K-Citymarket",shop:"supermarket"}},"shop/supermarket|K-Supermarket":{countryCodes:["fi"],tags:{brand:"K-Supermarket","brand:wikidata":"Q5408668","brand:wikipedia":"fi:K-Supermarket",name:"K-Supermarket",shop:"supermarket"}},"shop/supermarket|Kaufland":{countryCodes:["bg","cz","de","hr","pl","ro","sk"],tags:{brand:"Kaufland","brand:wikidata":"Q685967","brand:wikipedia":"en:Kaufland",name:"Kaufland",shop:"supermarket"}},"shop/supermarket|King Soopers":{countryCodes:["us"],tags:{brand:"King Soopers","brand:wikidata":"Q6412065","brand:wikipedia":"en:King Soopers",name:"King Soopers",shop:"supermarket"}},"shop/supermarket|Kings":{countryCodes:["us"],tags:{brand:"Kings","brand:wikidata":"Q6412914","brand:wikipedia":"en:Kings Food Markets",name:"Kings",shop:"supermarket"}},"shop/supermarket|Kiwi":{countryCodes:["dk","no"],tags:{brand:"Kiwi","brand:wikidata":"Q1613639","brand:wikipedia":"en:Kiwi (store)",name:"Kiwi",shop:"supermarket"}},"shop/supermarket|Konsum":{countryCodes:["de","ee","se"],tags:{brand:"Konsum",name:"Konsum",shop:"supermarket"}},"shop/supermarket|Konzum~(Balkans)":{countryCodes:["ba","hr","rs"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Czechia)"],tags:{brand:"Konzum","brand:wikidata":"Q518563","brand:wikipedia":"hr:Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Konzum~(Czechia)":{countryCodes:["cz","sk"],nomatch:["shop/convenience|Konzum~(Balkans)","shop/convenience|Konzum~(Czechia)","shop/supermarket|Konzum~(Balkans)"],tags:{brand:"Konzum",name:"Konzum",shop:"supermarket"}},"shop/supermarket|Kroger":{matchNames:["kroger food and drug","krogers"],nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger",shop:"supermarket"}},"shop/supermarket|Kroger Marketplace":{nomatch:["amenity/fuel|Kroger"],tags:{brand:"Kroger Marketplace","brand:wikidata":"Q153417","brand:wikipedia":"en:Kroger",name:"Kroger Marketplace",shop:"supermarket"}},"shop/supermarket|Krónan":{countryCodes:["is"],tags:{brand:"Krónan","brand:wikidata":"Q16419327","brand:wikipedia":"is:Krónan (verslun)",name:"Krónan",shop:"supermarket"}},"shop/supermarket|Kvickly":{countryCodes:["dk"],tags:{brand:"Kvickly","brand:wikidata":"Q7061148","brand:wikipedia":"en:Kvickly",name:"Kvickly",shop:"supermarket"}},"shop/supermarket|La Anónima":{countryCodes:["ar"],tags:{brand:"La Anónima","brand:wikidata":"Q6135985","brand:wikipedia":"es:La Anónima",name:"La Anónima",shop:"supermarket"}},"shop/supermarket|La Comer":{countryCodes:["mx"],tags:{brand:"La Comer","brand:wikidata":"Q26765126","brand:wikipedia":"es:La Comer",name:"La Comer",shop:"supermarket"}},"shop/supermarket|La Michoacana Meat Market":{countryCodes:["us"],matchNames:["la michoacana"],tags:{brand:"La Michoacana Meat Market","brand:en":"La Michoacana Meat Market","brand:es":"La Michoacana","brand:wikidata":"Q6463872","brand:wikipedia":"en:La Michoacana Meat Market",cuisine:"latin_american",name:"La Michoacana Meat Market","name:en":"La Michoacana Meat Market","name:es":"La Michoacana",shop:"supermarket"}},"shop/supermarket|La Plaza de DIA":{countryCodes:["es"],tags:{brand:"La Plaza de DIA","brand:wikidata":"Q58904673",name:"La Plaza de DIA",shop:"supermarket"}},"shop/supermarket|La Vie Claire":{countryCodes:["fr"],tags:{brand:"La Vie Claire","brand:wikidata":"Q3213589","brand:wikipedia":"fr:La Vie Claire",name:"La Vie Claire",organic:"only",shop:"supermarket"}},"shop/supermarket|Landi":{countryCodes:["ch"],tags:{brand:"Landi","brand:wikidata":"Q1803010","brand:wikipedia":"de:Landi (Unternehmen)",name:"Landi",shop:"supermarket"}},"shop/supermarket|Leader Price":{tags:{brand:"Leader Price","brand:wikidata":"Q2181426","brand:wikipedia":"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|Londis":{tags:{brand:"Londis",name:"Londis",shop:"supermarket"}},"shop/supermarket|Lotte Mart":{countryCodes:["id","kr"],tags:{brand:"Lotte Mart","brand:wikidata":"Q326715","brand:wikipedia":"en:Lotte Mart",name:"Lotte Mart",shop:"supermarket"}},"shop/supermarket|Lowe's Market":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowes Foods"],tags:{brand:"Lowe's Market","brand:wikidata":"Q6693107","brand:wikipedia":"en:Lowe's Market",name:"Lowe's Market",shop:"supermarket"}},"shop/supermarket|Lowes Foods":{countryCodes:["us"],nomatch:["shop/clothes|Lowes","shop/doityourself|Lowe's","shop/supermarket|Lowe's Market"],tags:{brand:"Lowes Foods","brand:wikidata":"Q6693991","brand:wikipedia":"en:Lowes Foods",name:"Lowes Foods",shop:"supermarket"}},"shop/supermarket|Lucky":{countryCodes:["us"],matchNames:["luckys"],tags:{brand:"Lucky","brand:wikidata":"Q6698032","brand:wikipedia":"en:Lucky Stores",name:"Lucky",shop:"supermarket"}},"shop/supermarket|Lupa":{countryCodes:["es"],tags:{brand:"Lupa","brand:wikidata":"Q58044048",name:"Lupa",shop:"supermarket"}},"shop/supermarket|M&S Foodhall":{matchNames:["marks & spencer foodhall"],tags:{brand:"M&S Foodhall","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Foodhall",shop:"supermarket"}},"shop/supermarket|M&S Simply Food":{matchNames:["marks & spencer simply food"],nomatch:["shop/convenience|M&S Simply Food"],tags:{brand:"M&S Simply Food","brand:wikidata":"Q714491","brand:wikipedia":"en:Marks & Spencer",name:"M&S Simply Food",shop:"supermarket"}},"shop/supermarket|MD":{countryCodes:["it"],matchNames:["md discount"],tags:{brand:"MD","brand:wikidata":"Q3841263","brand:wikipedia":"en:MD Discount",name:"MD",shop:"supermarket"}},"shop/supermarket|MPREIS":{countryCodes:["at","it"],tags:{brand:"MPREIS","brand:wikidata":"Q873491","brand:wikipedia":"de:MPreis",name:"MPREIS",shop:"supermarket"}},"shop/supermarket|Marc's":{countryCodes:["us"],nomatch:["amenity/pharmacy|Marc's"],tags:{brand:"Marc's","brand:wikidata":"Q17080259","brand:wikipedia":"en:Marc's",name:"Marc's",shop:"supermarket"}},"shop/supermarket|Markant":{countryCodes:["de"],tags:{brand:"Markant","brand:wikidata":"Q57523365",name:"Markant",shop:"supermarket"}},"shop/supermarket|Market Basket":{tags:{brand:"Market Basket","brand:wikidata":"Q2079198","brand:wikipedia":"en:Market Basket (New England)",name:"Market Basket",shop:"supermarket"}},"shop/supermarket|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":{countryCodes:["es","pt"],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|My Basket":{tags:{brand:"My Basket",name:"My Basket",shop:"supermarket"}},"shop/supermarket|NP":{matchNames:["np-markt"],nomatch:["amenity/fuel|NP"],tags:{brand:"NP","brand:wikidata":"Q15836148","brand:wikipedia":"de:NP-Markt",name:"NP",shop:"supermarket"}},"shop/supermarket|NTUC Fairprice":{tags:{brand:"NTUC Fairprice",name:"NTUC Fairprice",shop:"supermarket"}},"shop/supermarket|Nah & Frisch":{countryCodes:["at","de"],matchNames:["nah und frisch"],tags:{brand:"Nah & Frisch","brand:wikidata":"Q1963643","brand:wikipedia":"de:Nah & Frisch",name:"Nah & Frisch",shop:"supermarket"}},"shop/supermarket|Nahkauf":{countryCodes:["de"],tags:{brand:"Nahkauf","brand:wikidata":"Q57515238",name:"Nahkauf",shop:"supermarket"}},"shop/supermarket|Natural Grocers":{countryCodes:["us"],tags:{brand:"Natural Grocers",name:"Natural Grocers",shop:"supermarket"}},"shop/supermarket|Naturalia":{countryCodes:["fr"],tags:{brand:"Naturalia","brand:wikidata":"Q3337081","brand:wikipedia":"fr:Naturalia",name:"Naturalia",shop:"supermarket"}},"shop/supermarket|Netto Marken-Discount":{countryCodes:["de"],tags:{brand:"Netto Marken-Discount","brand:wikidata":"Q879858","brand:wikipedia":"de:Netto Marken-Discount",name:"Netto Marken-Discount",shop:"supermarket"}},"shop/supermarket|Netto~(Les Mousquetaires)":{countryCodes:["fr","pt"],tags:{brand:"Netto","brand:wikidata":"Q2720988","brand:wikipedia":"fr:Netto",name:"Netto",shop:"supermarket"}},"shop/supermarket|Netto~(Salling)":{countryCodes:["da","de","pl","se"],tags:{brand:"Netto","brand:wikidata":"Q552652","brand:wikipedia":"da:Netto (supermarkedskæde)",name:"Netto",shop:"supermarket"}},"shop/supermarket|Nettó~(Iceland)":{countryCodes:["is"],tags:{brand:"Nettó","brand:wikidata":"Q67205962",name:"Nettó",shop:"supermarket"}},"shop/supermarket|New World":{countryCodes:["nz"],tags:{brand:"New World","brand:wikidata":"Q7012488","brand:wikipedia":"en:New World (supermarket)",name:"New World",shop:"supermarket"}},"shop/supermarket|No Frills":{countryCodes:["ca"],tags:{brand:"No Frills","brand:wikidata":"Q3342407","brand:wikipedia":"en:No Frills (grocery store)",name:"No Frills",shop:"supermarket"}},"shop/supermarket|Norfa XL":{countryCodes:["lt"],tags:{brand:"Norfa XL","brand:wikidata":"Q1998983","brand:wikipedia":"lt:Norfa",name:"Norfa XL",shop:"supermarket"}},"shop/supermarket|Norma":{countryCodes:["at","cz","de","fr"],tags:{brand:"Norma","brand:wikidata":"Q450180","brand:wikipedia":"de:Norma (Handelskette)",name:"Norma",shop:"supermarket"}},"shop/supermarket|Northern Store":{countryCodes:["ca"],tags:{brand:"Northern Store","brand:wikidata":"Q7754361","brand:wikipedia":"en:The North West Company",name:"Northern Store",shop:"supermarket"}},"shop/supermarket|Okay":{countryCodes:["be"],tags:{brand:"Okay","brand:wikidata":"Q2159701","brand:wikipedia":"fr:OKay",name:"Okay",shop:"supermarket"}},"shop/supermarket|Olímpica":{countryCodes:["co"],tags:{brand:"Olímpica","brand:wikidata":"Q24749847","brand:wikipedia":"es:Grupo Empresarial Olímpica",name:"Olímpica",shop:"supermarket"}},"shop/supermarket|PLUS":{countryCodes:["nl"],nomatch:["amenity/fuel|Gas Plus","shop/mobile_phone|Plus"],tags:{brand:"PLUS","brand:wikidata":"Q1978981","brand:wikipedia":"nl:PLUS (Nederlandse supermarkt)",name:"PLUS",shop:"supermarket"}},"shop/supermarket|POLOmarket":{countryCodes:["pl"],tags:{brand:"POLOmarket","brand:wikidata":"Q11821937","brand:wikipedia":"pl:Polomarket",name:"POLOmarket",shop:"supermarket"}},"shop/supermarket|Palí":{countryCodes:["cr","ni"],tags:{brand:"Palí","brand:wikidata":"Q1064887","brand:wikipedia":"es:Walmart de México y Centroamérica",name:"Palí",shop:"supermarket"}},"shop/supermarket|Pam":{countryCodes:["ch","it"],tags:{brand:"Pam","brand:wikidata":"Q3777398","brand:wikipedia":"it:Gruppo PAM",name:"Pam",shop:"supermarket"}},"shop/supermarket|Patel Brothers":{countryCodes:["us"],tags:{brand:"Patel Brothers","brand:wikidata":"Q55641396","brand:wikipedia":"en:Patel Brothers",cuisine:"indian",name:"Patel Brothers",shop:"supermarket"}},"shop/supermarket|Pavilions":{countryCodes:["us"],tags:{brand:"Pavilions","brand:wikidata":"Q7155886","brand:wikipedia":"en:Pavilions (supermarket)",name:"Pavilions",shop:"supermarket"}},"shop/supermarket|Penny":{countryCodes:["at","cz","de","hu","it","ro"],matchNames:["penny market","penny markt"],tags:{brand:"Penny","brand:wikidata":"Q284688","brand:wikipedia":"en:Penny (supermarket)",name:"Penny",shop:"supermarket"}},"shop/supermarket|Pick 'n Save":{countryCodes:["us","za"],tags:{brand:"Pick 'n Save","brand:wikidata":"Q7371288","brand:wikipedia":"en:Roundy's",name:"Pick 'n Save",shop:"supermarket"}},"shop/supermarket|Pick n Pay":{tags:{brand:"Pick n Pay","brand:wikidata":"Q7190735","brand:wikipedia":"en:Pick n Pay Stores",name:"Pick n Pay",shop:"supermarket"}},"shop/supermarket|Piggly Wiggly":{countryCodes:["gb","us"],tags:{brand:"Piggly Wiggly","brand:wikidata":"Q3388303","brand:wikipedia":"en:Piggly Wiggly",name:"Piggly Wiggly",shop:"supermarket"}},"shop/supermarket|Pingo Doce":{countryCodes:["pt"],tags:{brand:"Pingo Doce","brand:wikidata":"Q1575057","brand:wikipedia":"en:Pingo Doce",name:"Pingo Doce",shop:"supermarket"}},"shop/supermarket|Piotr i Paweł":{countryCodes:["pl"],tags:{brand:"Piotr i Paweł","brand:wikidata":"Q2096356","brand:wikipedia":"pl:Piotr i Paweł",name:"Piotr i Paweł",shop:"supermarket"}},"shop/supermarket|Plaza Vea":{tags:{brand:"Plaza Vea","brand:wikidata":"Q7203672","brand:wikipedia":"en:Plaza Vea",name:"Plaza Vea",shop:"supermarket"}},"shop/supermarket|Plodine":{countryCodes:["hr"],tags:{brand:"Plodine","brand:wikidata":"Q58040098",name:"Plodine",shop:"supermarket"}},"shop/supermarket|Poiesz":{countryCodes:["nl"],tags:{brand:"Poiesz","brand:wikidata":"Q2521700","brand:wikipedia":"nl:Poiesz Supermarkten",name:"Poiesz",shop:"supermarket"}},"shop/supermarket|Price Chopper~(Kansas City)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(New York)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242572","brand:wikipedia":"en:Price Chopper (supermarket)",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Price Chopper~(New York)":{countryCodes:["us"],nomatch:["shop/supermarket|Price Chopper~(Kansas City)"],tags:{brand:"Price Chopper","brand:wikidata":"Q7242574","brand:wikipedia":"en:Price Chopper Supermarkets",name:"Price Chopper",shop:"supermarket"}},"shop/supermarket|Prisma":{countryCodes:["ee","fi","ru"],tags:{brand:"Prisma","brand:wikidata":"Q12047031","brand:wikipedia":"fi:Prisma (kauppaketju)",name:"Prisma",shop:"supermarket"}},"shop/supermarket|Prix":{countryCodes:["it"],matchNames:["prix quality"],tags:{brand:"Prix","brand:wikidata":"Q61994819",name:"Prix",shop:"supermarket"}},"shop/supermarket|Profi":{countryCodes:["be","hu","ro"],tags:{brand:"Profi","brand:wikidata":"Q956664","brand:wikipedia":"en:Profi",name:"Profi",shop:"supermarket"}},"shop/supermarket|Profi City":{countryCodes:["ro"],tags:{brand:"Profi City",name:"Profi City",shop:"supermarket"}},"shop/supermarket|Provigo":{countryCodes:["ca"],tags:{brand:"Provigo","brand:wikidata":"Q3408306","brand:wikipedia":"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/convenience|Rewe To Go","shop/supermarket|Rewe City"],tags:{brand:"Rewe","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe",shop:"supermarket"}},"shop/supermarket|Rewe City":{countryCodes:["de"],nomatch:["shop/convenience|Rewe To Go","shop/supermarket|Rewe"],tags:{brand:"Rewe City","brand:wikidata":"Q16968817","brand:wikipedia":"en:REWE",name:"Rewe City",shop:"supermarket"}},"shop/supermarket|Rimi":{countryCodes:["ee","lt","lv"],tags:{brand:"Rimi","brand:wikidata":"Q7334456","brand:wikipedia":"en:Rimi (Norway)",name:"Rimi",shop:"supermarket"}},"shop/supermarket|S-market":{countryCodes:["fi"],tags:{brand:"S-market","brand:wikidata":"Q11891613","brand:wikipedia":"fi:S-market",name:"S-market",shop:"supermarket"}},"shop/supermarket|Safeway":{nomatch:["amenity/fuel|Safeway","amenity/pharmacy|Safeway"],tags:{brand:"Safeway","brand:wikidata":"Q1508234","brand:wikipedia":"en:Safeway Inc.",name:"Safeway",shop:"supermarket"}},"shop/supermarket|Sainsbury's":{countryCodes:["gb"],nomatch:["amenity/fuel|Sainsbury's"],tags:{brand:"Sainsbury's","brand:wikidata":"Q152096","brand:wikipedia":"en:Sainsbury's",name:"Sainsbury's",shop:"supermarket"}},"shop/supermarket|Santa Isabel":{countryCodes:["cl"],tags:{brand:"Santa Isabel","brand:wikidata":"Q7419620","brand:wikipedia":"es:Santa Isabel (supermercado)",name:"Santa Isabel",shop:"supermarket"}},"shop/supermarket|Save-A-Lot":{countryCodes:["us"],tags:{brand:"Save-A-Lot","brand:wikidata":"Q7427972","brand:wikipedia":"en:Save-A-Lot",name:"Save-A-Lot",shop:"supermarket"}},"shop/supermarket|Save-On-Foods":{countryCodes:["ca"],tags:{brand:"Save-On-Foods","brand:wikidata":"Q7427974","brand:wikipedia":"en:Save-On-Foods",name:"Save-On-Foods",shop:"supermarket"}},"shop/supermarket|Schnucks":{countryCodes:["us"],tags:{brand:"Schnucks","brand:wikidata":"Q7431920","brand:wikipedia":"en:Schnucks",name:"Schnucks",shop:"supermarket"}},"shop/supermarket|Shaw's":{countryCodes:["us"],tags:{brand:"Shaw's","brand:wikidata":"Q578387","brand:wikipedia":"en:Shaw's and Star Market",name:"Shaw's",shop:"supermarket"}},"shop/supermarket|Sheng Siong":{tags:{brand:"Sheng Siong",name:"Sheng Siong",shop:"supermarket"}},"shop/supermarket|ShopRite~(USA)":{countryCodes:["us"],nomatch:["shop/supermarket|Shoprite~(Africa)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"ShopRite","brand:wikidata":"Q7501097","brand:wikipedia":"en:ShopRite (United States)",name:"ShopRite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Africa)":{countryCodes:["ao","bw","cd","gh","ls","mg","mu","mw","mz","na","ng","sz","ug","za","zm"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Isle of Man)"],tags:{brand:"Shoprite","brand:wikidata":"Q1857639","brand:wikipedia":"en:Shoprite (South Africa)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Shoprite~(Isle of Man)":{countryCodes:["im"],nomatch:["shop/supermarket|ShopRite~(USA)","shop/supermarket|Shoprite~(Africa)"],tags:{brand:"Shoprite","brand:wikidata":"Q7501242","brand:wikipedia":"en:Shoprite (Isle of Man)",name:"Shoprite",shop:"supermarket"}},"shop/supermarket|Sigma":{countryCodes:["it"],tags:{brand:"Sigma","brand:wikidata":"Q3977979","brand:wikipedia":"it:Supermercati Sigma",name:"Sigma",shop:"supermarket"}},"shop/supermarket|Simply Market":{matchNames:["simply"],tags:{brand:"Simply Market","brand:wikidata":"Q3484790","brand:wikipedia":"en:Simply Market",name:"Simply Market",shop:"supermarket"}},"shop/supermarket|Sky":{countryCodes:["de","lv","nl"],tags:{brand:"Sky","brand:wikidata":"Q1129779","brand:wikipedia":"de:Coop eG",name:"Sky",shop:"supermarket"}},"shop/supermarket|Smart & Final":{countryCodes:["mx","us"],tags:{brand:"Smart & Final","brand:wikidata":"Q7543916","brand:wikipedia":"en:Smart & Final",name:"Smart & Final",shop:"supermarket"}},"shop/supermarket|Smith's":{countryCodes:["ca","us"],nomatch:["amenity/fuel|Smith's"],tags:{brand:"Smith's","brand:wikidata":"Q7544856","brand:wikipedia":"en:Smith's Food and Drug",name:"Smith's",shop:"supermarket"}},"shop/supermarket|Sobeys":{countryCodes:["ca"],tags:{brand:"Sobeys","brand:wikidata":"Q1143340","brand:wikipedia":"en:Sobeys",name:"Sobeys",shop:"supermarket"}},"shop/supermarket|Soriana":{countryCodes:["mx"],tags:{brand:"Soriana","brand:wikidata":"Q735562","brand:wikipedia":"en:Soriana",name:"Soriana",shop:"supermarket"}},"shop/supermarket|Spar":{nomatch:["shop/convenience|Spar","shop/convenience|Spar Express"],tags:{brand:"Spar","brand:wikidata":"Q610492","brand:wikipedia":"en:Spar (retailer)",name:"Spar",shop:"supermarket"}},"shop/supermarket|Społem":{nomatch:["shop/convenience|Społem"],tags:{brand:"Społem","brand:wikidata":"Q11826043","brand:wikipedia":"pl:Powszechna Spółdzielnia Spożywców „Społem”",name:"Społem",shop:"supermarket"}},"shop/supermarket|Sprouts Farmers Market":{countryCodes:["us"],tags:{brand:"Sprouts Farmers Market","brand:wikidata":"Q7581369","brand:wikipedia":"en:Sprouts Farmers Market",name:"Sprouts Farmers Market",shop:"supermarket"}},"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"],matchTags:["shop/convenience"],tags:{brand:"Volg","brand:wikidata":"Q2530746","brand:wikipedia":"de:Volg",name:"Volg",shop:"supermarket"}},"shop/supermarket|Vomar":{countryCodes:["nl"],tags:{brand:"Vomar","brand:wikidata":"Q3202837","brand:wikipedia":"nl:Vomar",name:"Vomar",shop:"supermarket"}},"shop/supermarket|Vons":{countryCodes:["us"],tags:{brand:"Vons","brand:wikidata":"Q7941609","brand:wikipedia":"en:Vons",name:"Vons",shop:"supermarket"}},"shop/supermarket|Waitrose":{countryCodes:["gb","je"],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|nah und gut":{countryCodes:["de"],tags:{brand:"nah und gut","brand:wikidata":"Q701755","brand:wikipedia":"en:Edeka",name:"nah und gut",shop:"supermarket"}},"shop/supermarket|Şok":{countryCodes:["tr"],tags:{brand:"Şok","brand:wikidata":"Q19613992","brand:wikipedia":"tr:Şok (market)",name:"Şok",shop:"supermarket"}},"shop/supermarket|ΑΒ Βασιλόπουλος":{countryCodes:["gr"],tags:{brand:"ΑΒ Βασιλόπουλος","brand:el":"ΑΒ Βασιλόπουλος","brand:en":"AB Vassilopoulos","brand:wikidata":"Q4721807","brand:wikipedia":"el:Άλφα Βήτα Βασιλόπουλος",name:"ΑΒ Βασιλόπουλος","name:el":"ΑΒ Βασιλόπουλος","name:en":"AB Vassilopoulos",shop:"supermarket"}},"shop/supermarket|Γαλαξίας":{countryCodes:["gr"],tags:{brand:"Γαλαξίας","brand:el":"Γαλαξίας","brand:en":"Galaxias","brand:wikidata":"Q5518063","brand:wikipedia":"el:Γαλαξίας (σούπερ μάρκετ)",name:"Γαλαξίας","name:el":"Γαλαξίας","name:en":"Galaxias",shop:"supermarket"}},"shop/supermarket|Μασούτης":{countryCodes:["gr"],tags:{brand:"Μασούτης","brand:el":"Μασούτης","brand:en":"Masoutis","brand:wikidata":"Q6783887","brand:wikipedia":"en:Masoutis",name:"Μασούτης","name:el":"Μασούτης","name:en":"Masoutis",shop:"supermarket"}},"shop/supermarket|Σκλαβενίτης":{countryCodes:["gr"],tags:{brand:"Σκλαβενίτης","brand:el":"Σκλαβενίτης","brand:en":"Sklavenitis","brand:wikidata":"Q7536037","brand:wikipedia":"el:Σκλαβενίτης",name:"Σκλαβενίτης","name:el":"Σκλαβενίτης","name:en":"Sklavenitis",shop:"supermarket"}},"shop/supermarket|АТБ":{tags:{brand:"АТБ",name:"АТБ",shop:"supermarket"}},"shop/supermarket|Абсолют~(Russia)":{countryCodes:["ru"],tags:{brand:"Абсолют","brand:wikidata":"Q62389597",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Абсолют~(Ukraine)":{countryCodes:["ua"],tags:{brand:"Абсолют","brand:wikidata":"Q62389546",name:"Абсолют",shop:"supermarket"}},"shop/supermarket|Авоська":{tags:{brand:"Авоська",name:"Авоська",shop:"supermarket"}},"shop/supermarket|Азбука Вкуса":{countryCodes:["ru"],tags:{brand:"Азбука Вкуса","brand:en":"Azbuka Vkusa","brand:wikidata":"Q4058209","brand:wikipedia":"en:Azbuka Vkusa",name:"Азбука Вкуса","name:en":"Azbuka Vkusa",shop:"supermarket"}},"shop/supermarket|Атак":{countryCodes:["ru"],tags:{brand:"Атак","brand:en":"Atac","brand:wikidata":"Q2868738","brand:wikipedia":"ru:Atac",name:"Атак","name:en":"Atac",shop:"supermarket"}},"shop/supermarket|Ашан":{countryCodes:["ru","ua"],tags:{brand:"Ашан","brand:en":"Auchan","brand:wikidata":"Q758603","brand:wikipedia":"ru:Auchan",name:"Ашан","name:en":"Auchan",shop:"supermarket"}},"shop/supermarket|Байрам":{countryCodes:["ru"],tags:{brand:"Байрам",name:"Байрам",shop:"supermarket"}},"shop/supermarket|Брусничка":{countryCodes:["ua"],tags:{brand:"Брусничка","brand:en":"Brusnichka","brand:wikidata":"Q21656645","brand:wikipedia":"uk:Брусничка (торгова мережа)",name:"Брусничка","name:en":"Brusnichka",shop:"supermarket"}},"shop/supermarket|Булмаг":{countryCodes:["bg"],tags:{brand:"Булмаг","brand:en":"BulMag","brand:wikidata":"Q66133376",name:"Булмаг","name:en":"BulMag",shop:"supermarket"}},"shop/supermarket|Верный":{tags:{brand:"Верный",name:"Верный",shop:"supermarket"}},"shop/supermarket|Виктория":{countryCodes:["ru"],matchTags:["shop/convenience"],nomatch:["amenity/cafe|Виктория","shop/hairdresser|Виктория"],tags:{brand:"Виктория","brand:wikidata":"Q4111046","brand:wikipedia":"ru:Виктория (сеть магазинов)",name:"Виктория",shop:"supermarket"}},"shop/supermarket|Виталюр":{countryCodes:["by"],tags:{brand:"Виталюр","brand:wikidata":"Q55663075","brand:wikipedia":"ru:Виталюр",name:"Виталюр",shop:"supermarket"}},"shop/supermarket|Вопак":{countryCodes:["ua"],tags:{brand:"Вопак","brand:en":"Vopak","brand:wikidata":"Q30966107","brand:wikipedia":"uk:Вопак",name:"Вопак","name:en":"Vopak",shop:"supermarket"}},"shop/supermarket|Гастроном":{tags:{brand:"Гастроном",name:"Гастроном",shop:"supermarket"}},"shop/supermarket|Гроздь":{nomatch:["shop/convenience|Гроздь"],tags:{brand:"Гроздь","brand:wikidata":"Q21638412","brand:wikipedia":"ru:Гроздь (сеть магазинов)",name:"Гроздь",shop:"supermarket"}},"shop/supermarket|Гулливер":{countryCodes:["ru"],tags:{brand:"Гулливер","brand:wikidata":"Q58003470",name:"Гулливер",shop:"supermarket"}},"shop/supermarket|Десяточка":{countryCodes:["ru"],tags:{brand:"Десяточка","brand:en":"Desyatochka","brand:wikidata":"Q61876182",name:"Десяточка",shop:"supermarket"}},"shop/supermarket|Дикси":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Дикси","brand:en":"Dixy","brand:wikidata":"Q4161561","brand:wikipedia":"ru:Дикси (сеть магазинов)",name:"Дикси",shop:"supermarket"}},"shop/supermarket|Евроопт":{countryCodes:["by"],matchTags:["shop/convenience"],tags:{brand:"Евроопт","brand:en":"Euroopt","brand:ru":"Евроопт","brand:wikidata":"Q2565040","brand:wikipedia":"be:Еўрагандаль",name:"Евроопт","name:en":"Euroopt","name:ru":"Евроопт",shop:"supermarket"}},"shop/supermarket|Евроопт Hyper":{countryCodes:["by"],matchNames:["евроопт Гипер"],tags:{brand:"Евроопт Hyper","brand:wikidata":"Q65455975",name:"Евроопт Hyper",shop:"supermarket"}},"shop/supermarket|Евроопт Super":{countryCodes:["by"],matchNames:["евроопт Супер"],tags:{brand:"Евроопт Super","brand:wikidata":"Q65455960",name:"Евроопт Super",shop:"supermarket"}},"shop/supermarket|Караван":{countryCodes:["ru","ua"],tags:{brand:"Караван",name:"Караван",shop:"supermarket"}},"shop/supermarket|Карусель":{countryCodes:["ru"],tags:{brand:"Карусель","brand:en":"Karusel","brand:wikidata":"Q4216307","brand:wikipedia":"ru:Карусель (сеть магазинов)",name:"Карусель","name:en":"Karusel",shop:"supermarket"}},"shop/supermarket|Квартал":{tags:{brand:"Квартал",name:"Квартал",shop:"supermarket"}},"shop/supermarket|Кировский":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Кировский","brand:wikidata":"Q63301903",name:"Кировский",shop:"supermarket"}},"shop/supermarket|Командор":{countryCodes:["ru"],tags:{brand:"Командор","brand:en":"Komandor","brand:wikidata":"Q61876152",name:"Командор",shop:"supermarket"}},"shop/supermarket|Красный Яр":{countryCodes:["ru"],tags:{brand:"Красный Яр","brand:en":"Krasnyj Jar","brand:wikidata":"Q1786753","brand:wikipedia":"ru:Красный Яр",name:"Красный Яр",shop:"supermarket"}},"shop/supermarket|Лента":{countryCodes:["ru"],tags:{brand:"Лента","brand:en":"Lenta","brand:wikidata":"Q4258608","brand:wikipedia":"ru:Лента (сеть магазинов)",name:"Лента","name:en":"Lenta",shop:"supermarket"}},"shop/supermarket|ЛотОК":{tags:{brand:"ЛотОК",name:"ЛотОК",shop:"supermarket"}},"shop/supermarket|Магазин":{tags:{brand:"Магазин",name:"Магазин",shop:"supermarket"}},"shop/supermarket|Магнит":{matchTags:["shop/department_store"],nomatch:["shop/convenience|Магнит","shop/cosmetics|Магнит Косметик"],tags:{brand:"Магнит","brand:en":"Magnit","brand:wikidata":"Q940518","brand:wikipedia":"ru:Магнит (сеть магазинов)",name:"Магнит","name:en":"Magnit",shop:"supermarket"}},"shop/supermarket|Магнит у дома":{countryCodes:["ru"],tags:{brand:"Магнит у дома",name:"Магнит у дома",shop:"supermarket"}},"shop/supermarket|Магнолия":{countryCodes:["ru"],matchTags:["shop/convenience"],tags:{brand:"Магнолия","brand:wikipedia":"ru:Магнолия (сеть магазинов)",name:"Магнолия",shop:"supermarket"}},"shop/supermarket|Мария-Ра":{countryCodes:["ru"],nomatch:["shop/convenience|Мария-Ра"],tags:{brand:"Мария-Ра","brand:en":"Maria-ra","brand:wikidata":"Q4281631","brand:wikipedia":"ru:Мария-Ра",name:"Мария-Ра","name:en":"Maria-ra",shop:"supermarket"}},"shop/supermarket|Мираторг":{countryCodes:["ru"],tags:{brand:"Мираторг",name:"Мираторг",shop:"supermarket"}},"shop/supermarket|Монетка":{countryCodes:["ru"],tags:{brand:"Монетка","brand:en":"Monetka","brand:wikidata":"Q4301704","brand:wikipedia":"ru:Монетка (сеть магазинов)",name:"Монетка","name:en":"Monetka",shop:"supermarket"}},"shop/supermarket|Народная 7Я семьЯ":{countryCodes:["ru"],matchNames:["семья"],tags:{brand:"Народная 7Я семьЯ","brand:en":"People's 7th Family","brand:wikidata":"Q4032436","brand:wikipedia":"ru:Народная 7Я семья",name:"Народная 7Я семьЯ","name:en":"People's 7th Family",shop:"supermarket"}},"shop/supermarket|Перекрёсток":{countryCodes:["ru"],matchNames:["перекресток"],matchTags:["shop/convenience"],tags:{brand:"Перекрёсток","brand:en":"Perekryostok","brand:wikidata":"Q1684639","brand:wikipedia":"en:Perekrestok (supermarket chain)",name:"Перекрёсток",shop:"supermarket"}},"shop/supermarket|Покупочка":{countryCodes:["ru"],tags:{brand:"Покупочка","brand:wikidata":"Q58003270",name:"Покупочка",shop:"supermarket"}},"shop/supermarket|Полушка":{countryCodes:["ru"],tags:{brand:"Полушка","brand:en":"Polushka","brand:wikidata":"Q4371080","brand:wikipedia":"ru:Полушка (сеть магазинов)",name:"Полушка","name:en":"Polushka",shop:"supermarket"}},"shop/supermarket|Пятёрочка":{countryCodes:["ru"],matchNames:["пятерочка"],matchTags:["shop/convenience"],tags:{brand:"Пятёрочка","brand:en":"Pyaterochka","brand:wikidata":"Q1768969","brand:wikipedia":"ru:Пятёрочка",name:"Пятёрочка","name:en":"Pyaterochka",shop:"supermarket"}},"shop/supermarket|Радеж":{countryCodes:["ru"],tags:{brand:"Радеж","brand:en":"Radezh","brand:wikidata":"Q4387165","brand:wikipedia":"ru:Радеж (торговая сеть)",name:"Радеж","name:en":"Radezh",shop:"supermarket"}},"shop/supermarket|Рублёвский":{countryCodes:["by"],tags:{brand:"Рублёвский",name:"Рублёвский",shop:"supermarket"}},"shop/supermarket|Рукавичка":{countryCodes:["ua"],tags:{brand:"Рукавичка","brand:en":"Rukavychka","brand:wikidata":"Q20092568","brand:wikipedia":"uk:Рукавичка (торгова мережа)",name:"Рукавичка","name:en":"Rukavychka",shop:"supermarket"}},"shop/supermarket|Светофор":{countryCodes:["ru"],tags:{brand:"Светофор","brand:en":"Svetofor","brand:wikidata":"Q61875920",name:"Светофор",shop:"supermarket"}},"shop/supermarket|Семишагофф":{countryCodes:["ru"],tags:{brand:"Семишагофф","brand:wikidata":"Q58003374",name:"Семишагофф",shop:"supermarket"}},"shop/supermarket|Сільпо":{countryCodes:["ua"],tags:{brand:"Сільпо","brand:en":"Silpo","brand:wikidata":"Q4419434","brand:wikipedia":"en:Silpo",name:"Сільпо","name:en":"Silpo",shop:"supermarket"}},"shop/supermarket|Таврия В":{countryCodes:["ua"],tags:{brand:"Таврия В","brand:wikidata":"Q61823146","brand:wikipedia":"uk:Таврія В",name:"Таврия В",shop:"supermarket"}},"shop/supermarket|Фора":{countryCodes:["ua"],tags:{brand:"Фора","brand:en":"Fora","brand:wikidata":"Q12165977","brand:wikipedia":"uk:Фора (мережа магазинів)",name:"Фора","name:en":"Fora",shop:"supermarket"}},"shop/supermarket|Фуршет":{countryCodes:["ua"],tags:{brand:"Фуршет","brand:en":"Furshet","brand:wikidata":"Q4493564","brand:wikipedia":"uk:Фуршет (мережа супермаркетів)",name:"Фуршет","name:en":"Furshet",shop:"supermarket"}},"shop/supermarket|Эдельвейс":{countryCodes:["ru"],tags:{brand:"Эдельвейс","brand:en":"Edelveis","brand:wikidata":"Q57979368",name:"Эдельвейс","name:en":"Edelveis",shop:"supermarket"}},"shop/supermarket|Ярче":{tags:{brand:"Ярче",name:"Ярче",shop:"supermarket"}},"shop/supermarket|שופרסל דיל":{countryCodes:["il"],tags:{brand:"שופרסל דיל","brand:he":"שופרסל דיל",name:"שופרסל דיל","name:he":"שופרסל דיל",shop:"supermarket"}},"shop/supermarket|سوبر ماركت":{tags:{brand:"سوبر ماركت",name:"سوبر ماركت",shop:"supermarket"}},"shop/supermarket|いなげや":{countryCodes:["jp"],tags:{brand:"いなげや","brand:en":"Inageya","brand:ja":"いなげや","brand:wikidata":"Q17193392","brand:wikipedia":"ja:いなげや",name:"いなげや","name:en":"Inageya","name:ja":"いなげや",shop:"supermarket"}},"shop/supermarket|まいばすけっと":{countryCodes:["jp"],tags:{brand:"まいばすけっと","brand:en":"My Basket","brand:ja":"まいばすけっと","brand:wikidata":"Q11278154","brand:wikipedia":"ja:まいばすけっと",name:"まいばすけっと","name:en":"My Basket","name:ja":"まいばすけっと",shop:"supermarket"}},"shop/supermarket|アコレ":{countryCodes:["jp"],tags:{"alt_name:en":"Acolle",brand:"アコレ","brand:en":"A・Colle","brand:ja":"アコレ","brand:wikidata":"Q11283128","brand:wikipedia":"ja:アコレ",name:"アコレ","name:en":"A・Colle","name:ja":"アコレ",shop:"supermarket"}},"shop/supermarket|イオン":{countryCodes:["jp"],tags:{brand:"イオン","brand:en":"AEON","brand:ja":"イオン","brand:wikidata":"Q11285951","brand:wikipedia":"ja:イオン (店舗ブランド)",name:"イオン","name:en":"AEON","name:ja":"イオン",shop:"supermarket"}},"shop/supermarket|イズミヤ":{countryCodes:["jp"],matchNames:["いづみや"],tags:{brand:"イズミヤ","brand:en":"Izumiya","brand:ja":"イズミヤ","brand:wikidata":"Q11286632","brand:wikipedia":"ja:イズミヤ",name:"イズミヤ","name:en":"Izumiya","name:ja":"イズミヤ",shop:"supermarket"}},"shop/supermarket|イトーヨーカドー":{countryCodes:["jp"],matchNames:["イトーヨーカ堂"],tags:{brand:"イトーヨーカドー","brand:en":"Ito-Yokado","brand:ja":"イトーヨーカドー","brand:wikidata":"Q3088746","brand:wikipedia":"en:Ito-Yokado",name:"イトーヨーカドー","name:en":"Ito-Yokado","name:ja":"イトーヨーカドー",shop:"supermarket"}},"shop/supermarket|オリンピック":{countryCodes:["jp"],tags:{brand:"オリンピック","brand:en":"Olympic","brand:ja":"オリンピック","brand:wikidata":"Q11292764","brand:wikipedia":"ja:Olympicグループ",name:"オリンピック","name:en":"Olympic","name:ja":"オリンピック",shop:"supermarket"}},"shop/supermarket|カスミ":{countryCodes:["jp"],tags:{brand:"カスミ","brand:en":"Kasumi","brand:ja":"カスミ","brand:wikidata":"Q11294160","brand:wikipedia":"ja:カスミ",name:"カスミ","name:en":"Kasumi","name:ja":"カスミ",shop:"supermarket"}},"shop/supermarket|コープ":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op",brand:"コープ","brand:en":"CO・OP","brand:ja":"コープ","brand:wikidata":"Q11508615","brand:wikipedia":"ja:日本生活協同組合連合会",name:"コープ","name:ja":"コープ",official_name:"日本生活協同組合連合会","official_name:en":"Japanese Consumers' Co-operative Union",shop:"supermarket"}},"shop/supermarket|コープこう":{countryCodes:["jp"],tags:{"alt_name:en":"Co-op Kobe",brand:"コープこう","brand:en":"CO・OP Kobe","brand:ja":"コープこう","brand:wikidata":"Q5137453","brand:wikipedia":"ja:生活協同組合コープこうべ",name:"コープこう","name:en":"CO・OP Kobe","name:ja":"コープこう",official_name:"生活協同組合コープこうべ","official_name:en":"The Consumer Co-operative Kobe",shop:"supermarket"}},"shop/supermarket|サミット":{countryCodes:["jp"],tags:{brand:"サミット","brand:en":"Summit","brand:ja":"サミット","brand:wikidata":"Q11305129","brand:wikipedia":"ja:サミット (チェーンストア)",name:"サミット","name:en":"Summit","name:ja":"サミット",shop:"supermarket"}},"shop/supermarket|ダイエー":{countryCodes:["jp"],tags:{brand:"ダイエー","brand:en":"daiei","brand:ja":"ダイエー","brand:wikidata":"Q11316644","brand:wikipedia":"ja:ダイエー (店舗ブランド)",name:"ダイエー","name:en":"Daiei","name:ja":"ダイエー",shop:"supermarket"}},"shop/supermarket|バロー":{countryCodes:["jp"],tags:{brand:"バロー","brand:en":"Valor","brand:ja":"バロー","brand:wikidata":"Q11328346","brand:wikipedia":"ja:バロー (チェーンストア)",name:"バロー","name:en":"Valor","name:ja":"バロー",shop:"supermarket"}},"shop/supermarket|ベイシア":{countryCodes:["jp"],tags:{brand:"ベイシア","brand:en":"Beisia","brand:ja":"ベイシア","brand:wikidata":"Q11336776","brand:wikipedia":"ja:ベイシア",name:"ベイシア","name:en":"Beisia","name:ja":"ベイシア",shop:"supermarket"}},"shop/supermarket|マックスバリュ":{countryCodes:["jp"],tags:{brand:"マックスバリュ","brand:en":"Maxvalu Tokai","brand:ja":"マックスバリュ","brand:wikidata":"Q1960109","brand:wikipedia":"en:MaxValu",name:"マックスバリュ","name:en":"Maxvalu Tokai","name:ja":"マックスバリュ",shop:"supermarket"}},"shop/supermarket|マルエツ":{countryCodes:["jp"],tags:{brand:"マルエツ","brand:en":"Maruetsu","brand:ja":"マルエツ","brand:wikidata":"Q11341197","brand:wikipedia":"ja:マルエツ",name:"マルエツ","name:en":"Maruetsu","name:ja":"マルエツ",shop:"supermarket"}},"shop/supermarket|ヤオコー":{countryCodes:["jp"],tags:{brand:"ヤオコー","brand:en":"Yaoko","brand:ja":"ヤオコー","brand:wikidata":"Q11344967","brand:wikipedia":"ja:ヤオコー",name:"ヤオコー","name:en":"Yaoko","name:ja":"ヤオコー",shop:"supermarket"}},"shop/supermarket|ヨークベニマル":{countryCodes:["jp"],tags:{brand:"ヨークベニマル","brand:en":"York Benimaru","brand:ja":"ヨークベニマル","brand:wikidata":"Q11346199","brand:wikipedia":"ja:ヨークベニマル",name:"ヨークベニマル","name:en":"York Benimaru","name:ja":"ヨークベニマル",shop:"supermarket"}},"shop/supermarket|ヨークマート":{countryCodes:["jp"],tags:{brand:"ヨークマート","brand:en":"YorkMart","brand:ja":"ヨークマート","brand:wikidata":"Q11346201","brand:wikipedia":"ja:ヨークマート",name:"ヨークマート","name:en":"YorkMart","name:ja":"ヨークマート",shop:"supermarket"}},"shop/supermarket|ライフ":{countryCodes:["jp"],tags:{brand:"ライフ","brand:en":"Life","brand:ja":"ライフ","brand:wikidata":"Q11346476","brand:wikipedia":"ja:ライフコーポレーション",name:"ライフ","name:en":"Life","name:ja":"ライフ",shop:"supermarket"}},"shop/supermarket|ワイズマート":{countryCodes:["jp"],matchNames:["よしのぶっさん"],tags:{brand:"ワイズマート","brand:en":"Y'smart","brand:ja":"ワイズマート","brand:wikidata":"Q11351175","brand:wikipedia":"ja:ワイズマート",name:"ワイズマート","name:en":"Y'smart","name:ja":"ワイズマート",shop:"supermarket"}},"shop/supermarket|全聯":{countryCodes:["tw"],tags:{brand:"全聯","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|全聯福利中心":{countryCodes:["tw"],tags:{brand:"全聯福利中心","brand:en":"Pxmart","brand:wikidata":"Q7262792","brand:wikipedia":"en:PX Mart",name:"全聯福利中心","name:en":"Pxmart",shop:"supermarket"}},"shop/supermarket|家乐福":{countryCodes:["cn"],tags:{brand:"家乐福","brand:wikidata":"Q217599","brand:wikipedia":"wuu:家乐福",name:"家乐福",shop:"supermarket"}},"shop/supermarket|惠康 Wellcome":{countryCodes:["hk"],tags:{brand:"惠康 Wellcome","brand:en":"Wellcome","brand:wikidata":"Q706247","brand:wikipedia":"zh:惠康",name:"惠康 Wellcome","name:en":"Wellcome",shop:"supermarket"}},"shop/supermarket|東急ストア":{countryCodes:["jp"],tags:{brand:"東急ストア","brand:en":"Tokyu Store","brand:ja":"東急ストア","brand:wikidata":"Q11526963","brand:wikipedia":"ja:東急ストア",name:"東急ストア","name:en":"Tokyu Store","name:ja":"東急ストア",shop:"supermarket"}},"shop/supermarket|東武ストア":{countryCodes:["jp"],tags:{brand:"東武ストア","brand:en":"Tobu Store","brand:ja":"東武ストア","brand:wikidata":"Q11527478","brand:wikipedia":"ja:東武ストア",name:"東武ストア","name:en":"Tobu Store","name:ja":"東武ストア",shop:"supermarket"}},"shop/supermarket|業務スーパー":{countryCodes:["jp"],tags:{brand:"業務スーパー","brand:en":"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:["leslies pool supply","leslies swimming pool supplies"],matchTags:["shop/outdoor","shop/pool","shop/water_sports"],tags:{brand:"Leslie's Pool Supplies","brand:wikidata":"Q6530568","brand:wikipedia":"en:Leslie's Poolmart",name:"Leslie's Pool Supplies",official_name:"Leslie's Pool Supplies Service & Repair",shop:"swimming_pool"}},"shop/tea|DavidsTea":{countryCodes:["ca","us"],tags:{brand:"DavidsTea","brand:wikidata":"Q3019129","brand:wikipedia":"en:DavidsTea",name:"DavidsTea",shop:"tea"}},"shop/tea|T2":{countryCodes:["au"],tags:{brand:"T2","brand:wikidata":"Q48802134","brand:wikipedia":"en:T2 (Australian company)",name:"T2",shop:"tea"}},"shop/tea|TeeGschwendner":{countryCodes:["de"],tags:{brand:"TeeGschwendner","brand:wikidata":"Q2399969","brand:wikipedia":"de:TeeGschwendner",name:"TeeGschwendner",shop:"tea"}},"shop/telecommunication|A1":{countryCodes:["at","bg","by","hr","si"],matchNames:["velcom","velcom|a1","велком"],nomatch:["shop/mobile_phone|A1"],tags:{brand:"A1","brand:wikidata":"Q688755","brand:wikipedia":"en:A1 Telekom Austria Group",name:"A1",shop:"telecommunication"}},"shop/telecommunication|Agencia ICE":{tags:{brand:"Agencia ICE",name:"Agencia ICE",shop:"telecommunication"}},"shop/telecommunication|Bell":{countryCodes:["ca"],matchNames:["bell canada"],nomatch:["shop/mobile_phone|Bell"],tags:{brand:"Bell","brand:wikidata":"Q815694","brand:wikipedia":"en:Bell Canada",name:"Bell",shop:"telecommunication"}},"shop/telecommunication|Ooredoo":{tags:{brand:"Ooredoo","brand:wikidata":"Q919935","brand:wikipedia":"en:Ooredoo",name:"Ooredoo",shop:"telecommunication"}},"shop/telecommunication|Spectrum":{countryCodes:["us"],tags:{brand:"Spectrum","brand:wikidata":"Q7805197","brand:wikipedia":"en:Spectrum (cable service)",name:"Spectrum",shop:"telecommunication"}},"shop/telecommunication|Xfinity":{countryCodes:["us"],tags:{brand:"Xfinity","brand:wikidata":"Q5151002","brand:wikipedia":"en:Xfinity",name:"Xfinity",shop:"telecommunication"}},"shop/telecommunication|Дом.ru":{tags:{brand:"Дом.ru",name:"Дом.ru",shop:"telecommunication"}},"shop/telecommunication|МТС":{countryCodes:["by","ru","ua"],nomatch:["shop/mobile_phone|МТС"],tags:{brand:"МТС","brand:en":"MTS","brand:wikidata":"Q1368919","brand:wikipedia":"en:MTS (network provider)",name:"МТС","name:en":"MTS",shop:"telecommunication"}},"shop/telecommunication|Магазин lifecell":{tags:{brand:"Магазин lifecell",name:"Магазин lifecell",shop:"telecommunication"}},"shop/telecommunication|Ростелеком":{countryCodes:["ru"],tags:{brand:"Ростелеком","brand:wikidata":"Q1477012","brand:wikipedia":"en:Rostelecom",name:"Ростелеком",shop:"telecommunication"}},"shop/telecommunication|Укртелеком":{countryCodes:["ua"],tags:{brand:"Укртелеком","brand:wikidata":"Q1505321","brand:wikipedia":"en:Ukrtelecom",name:"Укртелеком",shop:"telecommunication"}},"shop/telecommunication|中華電信":{countryCodes:["tw"],tags:{brand:"中華電信","brand:en":"Chunghwa Telecom","brand:wikidata":"Q717531","brand:wikipedia":"zh:中華電信","brand:zh":"中華電信",name:"中華電信","name:en":"Chunghwa Telecom","name:zh":"中華電信",shop:"telecommunication"}},"shop/telecommunication|遠傳電信":{countryCodes:["tw"],tags:{brand:"遠傳電信","brand:en":"FarEasTone","brand:wikidata":"Q5434486","brand:wikipedia":"zh:遠傳電信","brand:zh":"遠傳電信",name:"遠傳電信","name:en":"FarEasTone","name:zh":"遠傳電信",shop:"telecommunication"}},"shop/ticket|Boutique Grandes Lignes":{countryCodes:["fr"],tags:{brand:"Boutique Grandes Lignes","brand:wikidata":"Q13646","brand:wikipedia":"fr:Société nationale des chemins de fer français",name:"Boutique Grandes Lignes",shop:"ticket"}},"shop/ticket|DB Reisezentrum":{countryCodes:["de"],matchNames:["reisezentrum"],tags:{brand:"DB Reisezentrum","brand:wikidata":"Q15842100","brand:wikipedia":"de:Reisezentrum",name:"DB Reisezentrum",shop:"ticket"}},"shop/ticket|Guichet Transilien":{countryCodes:["fr"],tags:{brand:"Guichet Transilien","brand:wikidata":"Q389554","brand:wikipedia":"fr:Transilien",name:"Guichet Transilien",shop:"ticket"}},"shop/tiles|Topps Tiles":{countryCodes:["gb"],matchTags:["shop/diy"],tags:{brand:"Topps Tiles","brand:wikidata":"Q17026595","brand:wikipedia":"en:Topps Tiles",name:"Topps Tiles",shop:"tiles"}},"shop/tobacco|Nemzeti Dohánybolt":{countryCodes:["hu"],matchNames:["dohánybolt"],matchTags:["shop/kiosk"],tags:{brand:"Nemzeti Dohánybolt","brand:wikidata":"Q20639040","brand:wikipedia":"en:Dohánybolt",name:"Nemzeti Dohánybolt",shop:"tobacco"}},"shop/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":{countryCodes:["it"],tags:{brand:"Toys Center",name:"Toys Center",shop:"toys"}},"shop/toys|Toys R Us":{tags:{brand:"Toys R Us","brand:wikidata":"Q696334","brand:wikipedia":"en:Toys \"R\" Us",name:"Toys R Us",shop:"toys"}},"shop/toys|Бегемотик":{countryCodes:["ru"],tags:{brand:"Бегемотик",name:"Бегемотик",shop:"toys"}},"shop/toys|Детский мир":{countryCodes:["kz","ru"],tags:{brand:"Детский мир","brand:en":"Detskiy Mir","brand:wikidata":"Q16643324","brand:wikipedia":"en:Detsky Mir",name:"Детский мир","name:en":"Detskiy Mir",shop:"toys"}},"shop/toys|Кораблик":{countryCodes:["ru"],tags:{brand:"Кораблик","brand:wikidata":"Q57653416",name:"Кораблик",shop:"toys"}},"shop/trade|84 Lumber":{countryCodes:["us"],matchNames:["84","eighty-four lumber"],tags:{brand:"84 Lumber","brand:wikidata":"Q4644779","brand:wikipedia":"en:84 Lumber",name:"84 Lumber",shop:"trade",trade:"building_supplies"}},"shop/trade|Caterpillar":{matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"Caterpillar","brand:wikidata":"Q459965","brand:wikipedia":"en:Caterpillar Inc.",name:"Caterpillar",shop:"trade",short_name:"CAT",trade:"agricultural_equipment"}},"shop/trade|Fastenal":{countryCodes:["ca","pa","us"],tags:{brand:"Fastenal","brand:wikidata":"Q3067119","brand:wikipedia":"en:Fastenal",name:"Fastenal",shop:"trade"}},"shop/trade|Grainger":{countryCodes:["ca","us"],matchNames:["granger","w. w. grainger"],tags:{brand:"Grainger","brand:wikidata":"Q1627894","brand:wikipedia":"en:W. W. Grainger",name:"Grainger",shop:"trade"}},"shop/trade|John Deere":{countryCodes:["ca","us"],matchTags:["shop/car","shop/farm","shop/hardware","shop/tractor"],tags:{brand:"John Deere","brand:wikidata":"Q496302","brand:wikipedia":"en:John Deere",name:"John Deere",shop:"trade",trade:"agricultural_equipment"}},"shop/travel_agency|Alltours":{countryCodes:["de"],tags:{brand:"Alltours","brand:wikidata":"Q2649481","brand:wikipedia":"de:Alltours",name:"Alltours",shop:"travel_agency"}},"shop/travel_agency|American Automobile Association":{countryCodes:["us"],matchTags:["office/travel_agent","shop/car"],nomatch:["office/insurance|AAA Insurance"],tags:{brand:"American Automobile Association","brand:wikidata":"Q463436","brand:wikipedia":"en:American Automobile Association",name:"American Automobile Association",shop:"travel_agency",short_name:"AAA"}},"shop/travel_agency|Coral Travel":{countryCodes:["pl","ru","ua"],tags:{brand:"Coral Travel","brand:wikidata":"Q58011479",name:"Coral Travel",shop:"travel_agency"}},"shop/travel_agency|D-reizen":{countryCodes:["nl"],tags:{brand:"D-reizen","brand:wikidata":"Q2445498","brand:wikipedia":"nl:D-reizen",name:"D-reizen",shop:"travel_agency"}},"shop/travel_agency|DER Reisebüro":{countryCodes:["de"],matchNames:["der deutsches reisebüro"],tags:{brand:"DER Reisebüro","brand:wikidata":"Q56729186","brand:wikipedia":"de:Deutsches Reisebüro",name:"DER Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Expedia CruiseShipCenters":{countryCodes:["ca","us"],tags:{brand:"Expedia CruiseShipCenters","brand:wikidata":"Q5189985","brand:wikipedia":"en:Expedia CruiseShipCenters",name:"Expedia CruiseShipCenters",shop:"travel_agency"}},"shop/travel_agency|First Reisebüro":{countryCodes:["de"],tags:{brand:"First Reisebüro","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"First Reisebüro",shop:"travel_agency"}},"shop/travel_agency|Flight Centre":{tags:{brand:"Flight Centre","brand:wikidata":"Q5459202","brand:wikipedia":"en:Flight Centre",name:"Flight Centre",shop:"travel_agency"}},"shop/travel_agency|Halcón Viajes":{countryCodes:["es"],tags:{brand:"Halcón Viajes","brand:wikidata":"Q57591939",name:"Halcón Viajes",shop:"travel_agency"}},"shop/travel_agency|Havas Voyages":{countryCodes:["fr"],tags:{brand:"Havas Voyages","brand:wikidata":"Q57628091",name:"Havas Voyages",shop:"travel_agency"}},"shop/travel_agency|Kuoni":{tags:{brand:"Kuoni","brand:wikidata":"Q684355","brand:wikipedia":"en:Kuoni Travel",name:"Kuoni",shop:"travel_agency"}},"shop/travel_agency|Last Minute Tour":{countryCodes:["it"],tags:{brand:"Last Minute Tour",name:"Last Minute Tour",shop:"travel_agency"}},"shop/travel_agency|Liberty Travel":{countryCodes:["us"],tags:{brand:"Liberty Travel","brand:wikidata":"Q17031665","brand:wikipedia":"en:Liberty Travel",name:"Liberty Travel",shop:"travel_agency"}},"shop/travel_agency|Neckermann Reisen":{countryCodes:["de"],tags:{brand:"Neckermann Reisen","brand:wikidata":"Q17300280",name:"Neckermann Reisen",shop:"travel_agency"}},"shop/travel_agency|Reiseland":{countryCodes:["de"],tags:{brand:"Reiseland","brand:wikidata":"Q40387610","brand:wikipedia":"de:OTTO Reisen",name:"Reiseland",shop:"travel_agency"}},"shop/travel_agency|Selectour":{countryCodes:["fr"],tags:{brand:"Selectour","brand:wikidata":"Q3478073","brand:wikipedia":"fr:Selectour",name:"Selectour",shop:"travel_agency"}},"shop/travel_agency|TUI~(Group)":{matchNames:["tui reisecenter"],tags:{brand:"TUI","brand:wikidata":"Q573103","brand:wikipedia":"en:TUI AG",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|TUI~(UK)":{countryCodes:["gb"],matchNames:["thomson"],tags:{brand:"TUI","brand:wikidata":"Q7795876","brand:wikipedia":"en:TUI UK",name:"TUI",shop:"travel_agency"}},"shop/travel_agency|The Co-operative Travel":{countryCodes:["gb"],tags:{brand:"The Co-operative Travel","brand:wikidata":"Q7726526","brand:wikipedia":"en:The Co-operative Travel",name:"The Co-operative Travel",shop:"travel_agency"}},"shop/travel_agency|Thomas Cook":{tags:{brand:"Thomas Cook","brand:wikidata":"Q2141800","brand:wikipedia":"en:Thomas Cook Group",name:"Thomas Cook",shop:"travel_agency"}},"shop/travel_agency|Turkish Airlines":{tags:{brand:"Turkish Airlines","brand:wikidata":"Q4548","brand:wikipedia":"en:Turkish Airlines",name:"Turkish Airlines",shop:"travel_agency"}},"shop/travel_agency|ltur":{countryCodes:["de"],tags:{brand:"ltur","brand:wikidata":"Q519040","brand:wikipedia":"de:L’TUR",name:"ltur",shop:"travel_agency"}},"shop/travel_agency|Поехали с нами":{countryCodes:["ua"],tags:{brand:"Поехали с нами","brand:wikidata":"Q25439141","brand:wikipedia":"uk:Поїхали з нами",name:"Поехали с нами",shop:"travel_agency"}},"shop/tyres|Big O Tires":{countryCodes:["ca","us"],tags:{brand:"Big O Tires","brand:wikidata":"Q4906085","brand:wikipedia":"en:Big O Tires",name:"Big O Tires",shop:"tyres"}},"shop/tyres|Bridgestone":{tags:{brand:"Bridgestone","brand:wikidata":"Q179433","brand:wikipedia":"en:Bridgestone",name:"Bridgestone",shop:"tyres"}},"shop/tyres|Discount Tire":{countryCodes:["us"],tags:{brand:"Discount Tire","brand:wikidata":"Q5281735","brand:wikipedia":"en:Discount Tire",name:"Discount Tire",shop:"tyres"}},"shop/tyres|Express Oil Change & Tire Engineers":{countryCodes:["us"],tags:{brand:"Express Oil Change & Tire Engineers","brand:wikidata":"Q39057654","brand:wikipedia":"en:Express Oil Change & Tire Engineers",name:"Express Oil Change & Tire Engineers",shop:"tyres"}},"shop/tyres|Les Schwab Tire Center":{countryCodes:["us"],matchNames:["les schwab"],tags:{brand:"Les Schwab Tire Center","brand:wikidata":"Q6529977","brand:wikipedia":"en:Les Schwab Tire Centers",name:"Les Schwab Tire Center",shop:"tyres"}},"shop/tyres|Michelin":{tags:{brand:"Michelin","brand:wikidata":"Q151107","brand:wikipedia":"en:Michelin",name:"Michelin",shop:"tyres"}},"shop/tyres|Tire Discounters":{countryCodes:["us"],tags:{brand:"Tire Discounters","brand:wikidata":"Q29093639","brand:wikipedia":"en:Tire Discounters",name:"Tire Discounters",shop:"tyres"}},"shop/tyres|Tires Plus":{countryCodes:["us"],tags:{brand:"Tires Plus","brand:wikidata":"Q64015091",name:"Tires Plus",shop:"tyres"}},"shop/tyres|Vianor":{tags:{brand:"Vianor","brand:wikidata":"Q10714920","brand:wikipedia":"sv:Vianor",name:"Vianor",shop:"tyres"}},"shop/vacuum_cleaner|Oreck":{countryCodes:["us"],matchNames:["oreck vacuums"],tags:{brand:"Oreck","brand:wikidata":"Q57273844",name:"Oreck",shop:"vacuum_cleaner"}},"shop/variety_store|99 Cents Only Stores":{countryCodes:["us"],matchNames:["99 cent only stores","99 cents only"],tags:{brand:"99 Cents Only Stores","brand:wikidata":"Q4646294","brand:wikipedia":"en:99 Cents Only Stores",name:"99 Cents Only Stores",shop:"variety_store"}},"shop/variety_store|Action":{countryCodes:["at","be","de","fr","lu","nl","pl"],tags:{brand:"Action","brand:wikidata":"Q2634111","brand:wikipedia":"nl:Action (winkel)",name:"Action",shop:"variety_store"}},"shop/variety_store|B&M":{tags:{brand:"B&M",name:"B&M",shop:"variety_store"}},"shop/variety_store|B&M Bargains":{countryCodes:["gb"],tags:{brand:"B&M Bargains","brand:wikidata":"Q4836931","brand:wikipedia":"en:B & M",name:"B&M Bargains",shop:"variety_store"}},"shop/variety_store|Big Bazar":{countryCodes:["be","nl"],tags:{brand:"Big Bazar","brand:wikidata":"Q15873104","brand:wikipedia":"nl:Big Bazar",name:"Big Bazar",shop:"variety_store"}},"shop/variety_store|D9150":{tags:{brand:"D9150",name:"D9150",shop:"variety_store"}},"shop/variety_store|D9300":{tags:{brand:"D9300",name:"D9300",shop:"variety_store"}},"shop/variety_store|Daiso Japan":{countryCodes:["au","us"],tags:{brand:"Daiso","brand:wikidata":"Q866991","brand:wikipedia":"en:Daiso",name:"Daiso Japan",shop:"variety_store",short_name:"Daiso"}},"shop/variety_store|Dollar General":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/supermarket|Dollar General Market","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar General","brand:wikidata":"Q145168","brand:wikipedia":"en:Dollar General",name:"Dollar General",shop:"variety_store"}},"shop/variety_store|Dollar Tree":{countryCodes:["ca","us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollarama","shop/variety_store|Family Dollar"],tags:{brand:"Dollar Tree","brand:wikidata":"Q5289230","brand:wikipedia":"en:Dollar Tree",name:"Dollar Tree",shop:"variety_store"}},"shop/variety_store|Dollarama":{countryCodes:["ca"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Family Dollar"],tags:{brand:"Dollarama","brand:wikidata":"Q3033947","brand:wikipedia":"en:Dollarama",name:"Dollarama",shop:"variety_store"}},"shop/variety_store|EuroShop":{countryCodes:["de"],tags:{brand:"EuroShop","brand:wikidata":"Q15846763","brand:wikipedia":"de:Schum EuroShop",name:"EuroShop",shop:"variety_store"}},"shop/variety_store|Family Dollar":{countryCodes:["us"],nomatch:["amenity/bank|Dollar Bank","amenity/car_rental|Dollar","shop/variety_store|Dollar General","shop/variety_store|Dollar Tree","shop/variety_store|Dollarama"],tags:{brand:"Family Dollar","brand:wikidata":"Q5433101","brand:wikipedia":"en:Family Dollar",name:"Family Dollar",shop:"variety_store"}},"shop/variety_store|Five Below":{countryCodes:["us"],tags:{brand:"Five Below","brand:wikidata":"Q5455836","brand:wikipedia":"en:Five Below",name:"Five Below",shop:"variety_store"}},"shop/variety_store|Fix Price":{countryCodes:["by","ru"],tags:{brand:"Fix Price","brand:wikidata":"Q4038791","brand:wikipedia":"ru:Fix Price (сеть магазинов)",name:"Fix Price",shop:"variety_store"}},"shop/variety_store|Flying Tiger Copenhagen":{matchNames:["tgr","tiger"],tags:{brand:"Flying Tiger Copenhagen","brand:wikidata":"Q2786319","brand:wikipedia":"en:Flying Tiger Copenhagen",name:"Flying Tiger Copenhagen",shop:"variety_store",short_name:"Flying Tiger"}},"shop/variety_store|GiFi":{countryCodes:["fr"],tags:{brand:"GiFi","brand:wikidata":"Q3105439","brand:wikipedia":"fr:Gifi",name:"GiFi",shop:"variety_store"}},"shop/variety_store|Home Bargains":{countryCodes:["gb"],tags:{brand:"Home Bargains","brand:wikidata":"Q5888229","brand:wikipedia":"en:Home Bargains",name:"Home Bargains",shop:"variety_store"}},"shop/variety_store|M9":{tags:{brand:"M9",name:"M9",shop:"variety_store"}},"shop/variety_store|Miniso":{tags:{brand:"Miniso","brand:wikidata":"Q20732498","brand:wikipedia":"en:Miniso",name:"Miniso",shop:"variety_store"}},"shop/variety_store|Mäc-Geiz":{countryCodes:["de"],tags:{brand:"Mäc-Geiz","brand:wikidata":"Q1957126","brand:wikipedia":"de:Mäc-Geiz",name:"Mäc-Geiz",shop:"variety_store"}},"shop/variety_store|NOZ":{countryCodes:["fr"],tags:{brand:"NOZ","brand:wikidata":"Q3345688","brand:wikipedia":"fr:Noz",name:"NOZ",shop:"variety_store"}},"shop/variety_store|Ocean State Job Lot":{countryCodes:["us"],tags:{brand:"Ocean State Job Lot","brand:wikidata":"Q7076076","brand:wikipedia":"en:Ocean State Job Lot",name:"Ocean State Job Lot",shop:"variety_store",short_name:"Job Lot"}},"shop/variety_store|Ollie's Bargain Outlet":{countryCodes:["us"],tags:{brand:"Ollie's Bargain Outlet","brand:wikidata":"Q7088304","brand:wikipedia":"en:Ollie's Bargain Outlet",name:"Ollie's Bargain Outlet",shop:"variety_store",short_name:"Ollie's"}},"shop/variety_store|Poundland":{countryCodes:["gb"],tags:{brand:"Poundland","brand:wikidata":"Q1434528","brand:wikipedia":"en:Poundland",name:"Poundland",shop:"variety_store"}},"shop/variety_store|Poundstretcher":{countryCodes:["gb"],tags:{brand:"Poundstretcher","brand:wikidata":"Q7235675","brand:wikipedia":"en:Poundstretcher",name:"Poundstretcher",shop:"variety_store"}},"shop/variety_store|Poundworld":{countryCodes:["gb","ie"],tags:{brand:"Poundworld","brand:wikidata":"Q16967516","brand:wikipedia":"en:Poundworld",name:"Poundworld",shop:"variety_store"}},"shop/variety_store|Roses":{countryCodes:["us"],tags:{brand:"Roses","brand:wikidata":"Q7368644","brand:wikipedia":"en:Roses (store)",name:"Roses",shop:"variety_store"}},"shop/variety_store|Savers":{countryCodes:["gb"],nomatch:["shop/chemist|Savers"],tags:{brand:"Savers","brand:wikidata":"Q7428189","brand:wikipedia":"en:Savers (UK retailer)",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"],tags:{brand:"ダイレックス","brand:en":"Direx","brand:ja":"ダイレックス","brand:wikidata":"Q11317051","brand:wikipedia":"ja:ダイレックス (ディスカウントストア)",name:"ダイレックス","name:en":"Direx","name:ja":"ダイレックス",shop:"variety_store"}},"shop/variety_store|トライアル":{countryCodes:["jp"],tags:{brand:"トライアル","brand:en":"Trial","brand:ja":"トライアル","brand:wikidata":"Q11321723","brand:wikipedia":"ja:トライアルカンパニー",name:"トライアル","name:en":"Trial","name:ja":"トライアル",shop:"variety_store"}},"shop/variety_store|ドン・キホーテ":{countryCodes:["jp"],tags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"ドン・キホーテ","name:en":"Don Quijote","name:ja":"ドン・キホーテ",opening_hours:"24/7",shop:"variety_store",short_name:"ドンキ","short_name:en":"Donki","short_name:ja":"ドンキ"}},"shop/video_games|EB Games":{countryCodes:["au","ca","nz"],tags:{brand:"EB Games","brand:wikidata":"Q4993686","brand:wikipedia":"en:EB Games",name:"EB Games",shop:"video_games"}},"shop/video_games|Game":{countryCodes:["gb"],tags:{brand:"Game","brand:wikidata":"Q5519813","brand:wikipedia":"en:Game (retailer)",name:"Game",shop:"video_games"}},"shop/video_games|Game Mania":{countryCodes:["be","nl"],tags:{brand:"Game Mania","brand:wikidata":"Q18069429","brand:wikipedia":"nl:Game Mania",name:"Game Mania",shop:"video_games"}},"shop/video_games|GameStop":{tags:{brand:"GameStop","brand:wikidata":"Q202210","brand:wikipedia":"en:GameStop",name:"GameStop",shop:"video_games"}},"shop/video_games|Micromania":{countryCodes:["fr"],tags:{brand:"Micromania","brand:wikidata":"Q3312221","brand:wikipedia":"en:Micromania (video game retailer)",name:"Micromania",shop:"video_games"}},"shop/video|Blockbuster":{tags:{brand:"Blockbuster","brand:wikidata":"Q884711","brand:wikipedia":"en:Blockbuster LLC",name:"Blockbuster",shop:"video"}},"shop/video|Family Video":{countryCodes:["us"],tags:{brand:"Family Video","brand:wikidata":"Q5433297","brand:wikipedia":"en:Family Video",name:"Family Video",shop:"video"}},"shop/video|TSUTAYA":{nomatch:["shop/books|TSUTAYA","shop/music|TSUTAYA"],tags:{brand:"TSUTAYA","brand:wikidata":"Q5193457","brand:wikipedia":"ja:カルチュア・コンビニエンス・クラブ",name:"TSUTAYA",shop:"video"}},"shop/video|ゲオ":{countryCodes:["jp"],matchNames:["geo"],tags:{brand:"GEO","brand:ja":"GEO","brand:wikidata":"Q5533938","brand:wikipedia":"ja:ゲオ",name:"ゲオ","name:en":"GEO","name:ja":"ゲオ",shop:"video"}},"shop/watches|Fossil":{countryCodes:["de","us"],matchTags:["shop/jewelry"],tags:{brand:"Fossil","brand:wikidata":"Q356212","brand:wikipedia":"en:Fossil Group",name:"Fossil",shop:"watches"}},"shop/watches|Omega":{countryCodes:["ch","fr"],tags:{brand:"Omega","brand:wikidata":"Q659224","brand:wikipedia":"en:Omega SA",name:"Omega",shop:"watches"}},"shop/watches|Rolex":{countryCodes:["us"],tags:{brand:"Rolex","brand:wikidata":"Q62288","brand:wikipedia":"en:Rolex",name:"Rolex",shop:"watches"}},"shop/watches|Swatch":{matchTags:["shop/jewelry"],tags:{brand:"Swatch","brand:wikidata":"Q573422","brand:wikipedia":"en:Swatch",name:"Swatch",shop:"watches"}},"shop/wholesale|BJ's Wholesale Club":{countryCodes:["us"],matchNames:["bjs","bjs wholesale"],tags:{brand:"BJ's Wholesale Club","brand:wikidata":"Q4835754","brand:wikipedia":"en:BJ's Wholesale Club",name:"BJ's Wholesale Club",shop:"wholesale"}},"shop/wholesale|Costco":{matchNames:["costco wholesale"],nomatch:["amenity/fuel|Costco Gasoline","amenity/pharmacy|Costco Pharmacy"],tags:{brand:"Costco","brand:wikidata":"Q715583","brand:wikipedia":"en:Costco",name:"Costco",shop:"wholesale"}},"shop/wholesale|Makro":{tags:{brand:"Makro","brand:wikidata":"Q704606","brand:wikipedia":"en:Makro",name:"Makro",shop:"wholesale"}},"shop/wholesale|Metro":{nomatch:["amenity/bank|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":{nomatch:["amenity/fuel|Sam's Club"],tags:{brand:"Sam's Club","brand:wikidata":"Q1972120","brand:wikipedia":"en:Sam's Club",name:"Sam's Club",shop:"wholesale"}},"shop/wholesale|Sligro":{tags:{brand:"Sligro","brand:wikidata":"Q3170052","brand:wikipedia":"nl:Sligro Food Group",membership:"yes",name:"Sligro",shop:"wholesale"}},"shop/wholesale|コストコ":{countryCodes:["jp"],tags:{brand:"コストコ","brand:en":"Costco","brand:ja":"コストコ","brand:wikidata":"Q715583","brand:wikipedia":"ja:コストコ",name:"コストコ","name:en":"Costco","name:ja":"コストコ",shop:"wholesale"}},"tourism/caravan_site|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|Baymont":{countryCodes:["ca","mx","us"],matchNames:["baymont inn","baymont inn & suites"],tags:{brand:"Baymont","brand:wikidata":"Q4874634","brand:wikipedia":"en:Baymont Inn & Suites",name:"Baymont",official_name:"Baymont by Wyndham",tourism:"hotel"}},"tourism/hotel|Best Western":{nomatch:["tourism/hotel|Best Western Plus"],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":{countryCodes:["ca","us"],matchNames:["courtyard marriott"],tags:{brand:"Courtyard","brand:wikidata":"Q1053170","brand:wikipedia":"en:Courtyard by Marriott",name:"Courtyard",official_name:"Courtyard by Marriott",tourism:"hotel"}},"tourism/hotel|Crowne Plaza":{tags:{brand:"Crowne Plaza","brand:wikidata":"Q2746220","brand:wikipedia":"en:Crowne Plaza",name:"Crowne Plaza",tourism:"hotel"}},"tourism/hotel|Days Inn":{countryCodes:["ca","gb","us"],tags:{brand:"Days Inn","brand:wikidata":"Q1047239","brand:wikipedia":"en:Days Inn",name:"Days Inn",tourism:"hotel"}},"tourism/hotel|Delta":{tags:{brand:"Delta","brand:wikidata":"Q5254663","brand:wikipedia":"en:Delta Hotels",name:"Delta",official_name:"Delta Hotels",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|Drury Inn & Suites":{countryCodes:["us"],tags:{brand:"Drury Inn & Suites","brand:wikidata":"Q5309391","brand:wikipedia":"en:Drury Hotels",name:"Drury Inn & Suites",tourism:"hotel"}},"tourism/hotel|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|Grupo Barceló":{countryCodes:["es","us"],tags:{brand:"Grupo Barceló","brand:en":"Barceló Group","brand:es":"Grupo Barceló","brand:wikidata":"Q15148996","brand:wikipedia":"es:Grupo Barceló",name:"Grupo Barceló","name:en":"Barceló Group","name:es":"Grupo Barceló",tourism:"hotel"}},"tourism/hotel|Hampton":{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|Hawthorn Suites":{countryCodes:["us"],tags:{brand:"Hawthorn Suites","brand:wikidata":"Q5685511","brand:wikipedia":"en:Hawthorn Suites",name:"Hawthorn Suites",official_name:"Hawthorn Suites by Wyndham",short_name:"Hawthorn",tourism:"hotel"}},"tourism/hotel|Hilton":{tags:{brand:"Hilton","brand:wikidata":"Q598884","brand:wikipedia":"en:Hilton Hotels & Resorts",name:"Hilton",tourism:"hotel"}},"tourism/hotel|Hilton Garden Inn":{countryCodes:["ca","mx","us"],tags:{brand:"Hilton Garden Inn","brand:wikidata":"Q1162859","brand:wikipedia":"en:Hilton Garden Inn",name:"Hilton Garden Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn":{nomatch:["tourism/hotel|Holiday Inn Express"],tags:{brand:"Holiday Inn","brand:wikidata":"Q2717882","brand:wikipedia":"en:Holiday Inn",name:"Holiday Inn",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express":{nomatch:["tourism/hotel|Holiday Inn"],tags:{brand:"Holiday Inn Express","brand:wikidata":"Q5880423","brand:wikipedia":"en:Holiday Inn Express",name:"Holiday Inn Express",tourism:"hotel"}},"tourism/hotel|Holiday Inn Express & Suites":{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 Belvedere":{tags:{brand:"Hotel Belvedere",name:"Hotel Belvedere",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 Inn":{countryCodes:["ca","cl","co","hn","mx","us"],matchNames:["la quinta"],nomatch:["tourism/hotel|La Quinta Inn & Suites"],tags:{brand:"La Quinta Inn","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn",official_name:"La Quinta Inn by Wyndham",tourism:"hotel"}},"tourism/hotel|La Quinta Inn & Suites":{countryCodes:["ca","us"],matchNames:["la quinta inns and suites"],nomatch:["tourism/hotel|La Quinta Inn"],tags:{brand:"La Quinta Inn & Suites","brand:wikidata":"Q6464734","brand:wikipedia":"en:La Quinta Inns & Suites",name:"La Quinta Inn & Suites",official_name:"La Quinta Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|Le Méridien":{tags:{brand:"Le Méridien","brand:wikidata":"Q261077","brand:wikipedia":"en:Le Méridien",name:"Le Méridien",tourism:"hotel"}},"tourism/hotel|Marriott":{tags:{brand:"Marriott","brand:wikidata":"Q1141173","brand:wikipedia":"en:Marriott International",name:"Marriott",tourism:"hotel"}},"tourism/hotel|Meininger":{matchNames:["hoteles meininger"],tags:{brand:"Meininger","brand:wikidata":"Q42773330","brand:wikipedia":"de:Meininger Hotel Gruppe",name:"Meininger",official_name:"Meininger Hotels",tourism:"hotel"}},"tourism/hotel|Mercure":{tags:{brand:"Mercure","brand:wikidata":"Q1709809","brand:wikipedia":"en:Mercure (hotel)",name:"Mercure",tourism:"hotel"}},"tourism/hotel|Microtel":{countryCodes:["ca","cn","mx","ph","us"],matchNames:["microtel inn"],nomatch:["tourism/hotel|Microtel Inn & Suites"],tags:{brand:"Microtel","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel",official_name:"Microtel by Wyndham",tourism:"hotel"}},"tourism/hotel|Microtel Inn & Suites":{countryCodes:["ca","mx","us"],nomatch:["tourism/hotel|Microtel"],tags:{brand:"Microtel Inn & Suites","brand:wikidata":"Q6840402","brand:wikipedia":"en:Microtel Inn and Suites",name:"Microtel Inn & Suites",official_name:"Microtel Inn & Suites by Wyndham",tourism:"hotel"}},"tourism/hotel|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|Qubus":{countryCodes:["pl"],tags:{brand:"Qubus","brand:wikidata":"Q11832868","brand:wikipedia":"pl:Qubus Hotel",name:"Qubus",official_name:"Qubus Hotel",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~(Asia/Oceania)":{countryCodes:["au","hk","id","kr","my","nz","sg","th"],tags:{brand:"Travelodge","brand:wikidata":"Q24997583","brand:wikipedia":"en:Travelodge Australia",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(Europe)":{countryCodes:["es","gb","ie"],tags:{brand:"Travelodge","brand:wikidata":"Q9361374","brand:wikipedia":"en:Travelodge UK",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|Travelodge~(North America)":{countryCodes:["ca","us"],tags:{brand:"Travelodge","brand:wikidata":"Q7836087","brand:wikipedia":"en:Travelodge",name:"Travelodge",tourism:"hotel"}},"tourism/hotel|W Hotels":{tags:{brand:"W Hotels","brand:wikidata":"Q7958488","brand:wikipedia":"en:W Hotels",name:"W Hotels",short_name:"W",tourism:"hotel"}},"tourism/hotel|Wingate":{countryCodes:["us"],matchNames:["wingate inn"],tags:{brand:"Wingate","brand:wikidata":"Q8025144","brand:wikipedia":"en:Wingate by Wyndham",name:"Wingate",official_name:"Wingate by Wyndham",tourism:"hotel"}},"tourism/hotel|Уют":{tags:{brand:"Уют",name:"Уют",tourism:"hotel"}},"tourism/hotel|東横イン":{countryCodes:["jp"],tags:{brand:"東横イン","brand:en":"Toyoko Inn","brand:ja":"東横イン","brand:wikidata":"Q1320541","brand:wikipedia":"en:Toyoko Inn",name:"東横イン","name:en":"Toyoko Inn","name:ja":"東横イン",tourism:"hotel"}},"tourism/motel|Americas Best Value Inn":{tags:{brand:"Americas Best Value Inn",name:"Americas Best Value Inn",tourism:"motel"}},"tourism/motel|Budget Host Inn":{countryCodes:["us"],tags:{alt_name:"Budget Host",brand:"Budget Host Inn","brand:wikidata":"Q16954336","brand:wikipedia":"en:Budget Host",name:"Budget Host Inn",tourism:"motel"}},"tourism/motel|Econo Lodge":{tags:{brand:"Econo Lodge","brand:wikidata":"Q5333330","brand:wikipedia":"en:Econo Lodge",name:"Econo Lodge",tourism:"motel"}},"tourism/motel|Knights Inn":{countryCodes:["ca","us"],tags:{brand:"Knights Inn","brand:wikidata":"Q6422409","brand:wikipedia":"en:Knights Inn",name:"Knights Inn",tourism:"motel"}},"tourism/motel|Motel 6":{countryCodes:["ca","us"],tags:{brand:"Motel 6","brand:wikidata":"Q2188884","brand:wikipedia":"en:Motel 6",name:"Motel 6",tourism:"motel"}},"tourism/motel|Rodeway Inn":{countryCodes:["ca","us"],tags:{brand:"Rodeway Inn","brand:wikidata":"Q7356709","brand:wikipedia":"en:Rodeway Inn",name:"Rodeway Inn",tourism:"motel"}},"tourism/motel|Super 8":{countryCodes:["ca","us"],tags:{brand:"Super 8","brand:wikidata":"Q5364003","brand:wikipedia":"en:Super 8 Motels",name:"Super 8",tourism:"motel"}}};
66220         var brands$1 = {
66221         brands: brands
66222         };
66223
66224         var keepTags = ["^amenity/bank$","^amenity/bicycle_rental$","^amenity/bureau_de_change$","^amenity/cafe$","^amenity/car_rental$","^amenity/car_sharing$","^amenity/charging_station$","^amenity/cinema$","^amenity/clinic$","^amenity/dentist$","^amenity/fast_food$","^amenity/fuel$","^amenity/hospital$","^amenity/ice_cream$","^amenity/money_transfer$","^amenity/payment_(centre|terminal)$","^amenity/pharmacy$","^amenity/post_(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$"];
66225         var discardKeys = ["^amenity/bank\\|(bank zachodni|bz) wbk$","^amenity/bank\\|(kreis|stadt)?sparkasse.*$","^amenity/bank\\|bank spółdzielczy$","^amenity/bank\\|pko$","^amenity/bank\\|volks- und raiffeisenbank$","^amenity/bank\\|volksbank$","^amenity/bank\\|volksbank( |-)raiffeisenbank$","^amenity/bank\\|vr( |-)bank$","^amenity/bar\\|(уют)$","^amenity/cafe\\|(kiosque(\\sà)?\\scafé|caf(e|é)\\sexpress|встреча|рандеву|чайхана|жемчужина)$","^amenity/cinema\\|октябрь$","^amenity/clinic\\|(clinic|health center|health sub center|urgent care|consultorio)$","^amenity/fast_food\\|(ali\\sbaba|antalya|asia\\s(bistro|imbiss|wok)|(berlin|city)\\sdöner|city\\s(grill|pizza)|kfc/taco\\sbell)$","^amenity/fast_food\\|(marmaris|pizza\\s(house|time))$","^amenity/fuel\\|gnv|gpl|posto|spbu|جایگاه\\scng$","^amenity/hospital\\|(clinic|health center|(government )?hospital( municipal)?)$","^amenity/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\\|((gasthaus|gasthof|schwarzer)?\\s?(adler|löwen))$","^amenity/restaurant\\|(ali\\sbaba|adria|akropolis|amici|aroma|asia|athen|athos|bahnhof|bamboo|bären|bella\\s(vista|napoli))","^amenity/restaurant\\|(belvedere|canteen|cantina|capri|carpe\\sdiem|casa\\s?(blanca|mia)|casino)","^amenity/restaurant\\|(china\\s(buffet|garden|house|king|star|town|wok)|(da|la|las|el)\\s)","^amenity/restaurant\\|(delphi|deutsches\\shaus|dionysos|dolce\\svita|dorfkrug|europa|frohsinn)","^amenity/restaurant\\|(golden\\sdragon|great\\swall)$","^amenity/restaurant\\|(grüner\\sbaum|hellas|hirsch(en)?|hong\\skong|ichiban|il\\sgiardino|jade\\sgarden|jägerhof)","^amenity/restaurant\\|(kirchenwirt|koliba|kreta|kreuz|krone|lamm|le\\s(bistrot|patio))","^amenity/restaurant\\|(l'escale|lemongrass|linde|lindenhof|little\\s(italy|india)|los\\s(amigos|arcos))","^amenity/restaurant\\|(lotus|löwen|maharaja|mamma\\smia|mandarin|marco\\spolo|marmaris|mediterraneo|mensa|milano|mykonos|mythos)","^amenity/restaurant\\|(namaste|napoli|new\\schina|oasis|ochsen|olympia|osaka|paradise|parrilla|peking|pho|pinocchio)","^amenity/restaurant\\|(pizza\\shouse|pizz(a|e)ria|pizza\\sking|pomodoro|portofino|poseidon|ratskeller|rhodos|ristorante\\s)","^amenity/restaurant\\|(roma|rose|rössl(e|i)|saffron|saigon|sakura|san\\smarco|santorini|schützenhaus|shalimar|shanghai|sonne|sphinx)","^amenity/restaurant\\|(sportheim|sternen|syrtaki|taj\\smahal|taste\\sof\\sindia|the\\skitchen|toscana|tokyo|traube)","^amenity/restaurant\\|(waldschänke|wok|zorbas|(zum|zur)\\s)","^amenity/restaurant\\|永和豆漿$","^amenity/social_facility\\|dom pomocy społecznej$","^amenity/social_facility\\|maison de retraite$","^amenity/social_facility\\|safe haven$","^shop/(convenience|kiosk)\\|(777|bp|esso|exxon|mobil|shell)$","^shop/bakery\\|(backshop|schneider|schäfer|каравай)$","^shop/bakery\\|(bäckerei\\s)?müller","^shop/butcher\\|butcher$","^shop/clothes\\|трикотаж$","^shop/convenience\\|(24 часа|августина|альянс|апельсин|ассорти|бер(е|ё)зка|бриз|валентина|весна|визит|ветеран|водолей|гастроном|гермес|гурман|диана|добрый|дружба|домашний|елена)$","^shop/convenience\\|(milk bar|юлия)$","^shop/convenience\\|(калинка|каштан|квартал|колобок|колос(ок)?|каравай|кооператор|корзинка|кулинария|лакомка|ласточка|лидер|луч|любава|любимый|людмила|люкс)$","^shop/convenience\\|(меркурий|мечта|мини маркет|мираж|белорусские продукты|продукты 24|натали|надежда|ника)$","^shop/convenience\\|(оазис|околица|олимп|парус|пеликан|престиж|подсолнух|радуга|росинка|ромашка|родник|рассвет|русь)$","^shop/convenience\\|(сельпо|семейный|сказка|солнышко|спутник|солнечный|светлана|удача|ивушка)$","^shop/convenience\\|(юбилейный|южный|эконом|шанс|чайка|центральный|хороший|хуторок|фаворит|фортуна|татьяна|тройка|эдем|уют)$","^shop/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)?$","^shop/tailor|tailor$","^tourism/(h|m)otel\\|budget inn$","^tourism/hotel\\|(belvedere|krone|victoria)","^tourism/hotel\\|(central|city|europa|grand|palace|park|royal)\\s?hotel$","^tourism/hotel\\|h(o|ô)tel\\s(astoria|central|continental|europa|imperial|krone|panorama|plaza|royal|victoria|(zur\\s)?post|de france)$","^tourism/hotel\\|строитель$"];
66226         var discardNames = ["^((drummed|independent) )?(cng|filling|fuel|gas|lpg|petrol)(\\s(station|pump))?$","^((le|the) )?salo(o)?n( de)?( coiffure| fryzjerski| beauté)?( homme| dame)?$","^((горячий|свежий) )?хлеб(ница)?$","^((разливное|живое) )?пиво$","^(beer|convenience|corner|general|liquor|variety)(\\sstore)?$","^(bureau de |)change$","^(buzón\\sde\\s)?correos$","^(cl(i|í)nica )?dental$","^(cl(i|í)nica )?veterinari(a|o)$","^(clinique )?vétérinaire$","^(coffee|pet|vulcanizing|gift|local)(\\sshop)?$","^(hof|dorf)laden$","^(h|m)otel$","^(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 (de salud|de saúde|médico)$","^centro naturista$","^chifa$","^chinese restaurant$","^cine(ma)?$","^cleaners$","^co-operative$","^coffee$","^coiff(eur|ure)\\s?(homme|dame)?$","^colmado$","^comedor$","^comida china$","^commercial hotel$","^consultorio (dental|odontologico|local|médico)$","^credit union$","^currency exchange$","^d(ö|o)ner(\\skebab)?$","^delikatesy$","^dental(\\s(clinic|surgery))?$","^dentist(a|e)?$","^drinks$","^droguer(i|í)a$","^dép(ô|o)t de gaz$","^dépanneur$","^eczane$","^edicola$","^eiscaf(e|é)(\\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$","^offener bücherschrank$","^oplaadpunt$","^opti(c|k)a$","^optical center$","^optyk$","^outlet$","^pa(r|cz)komat$","^pac?k(etbox|station)$","^padaria$","^panader(i|í)a$","^pancake house$","^panificio$","^panorama$","^papeler(i|í)a$","^parafarmacia$","^parduotuvė$","^parkscheinautomat$","^parquímetro$","^peluquer(i|í)a$","^pharmac(ie|y)$","^piekarnia$","^piscine$","^pizz(eri)?a$","^po(s|š)t(a|e|o)$","^poczta$","^poissonnerie$","^polyclinique$","^post\\s?(agentur|filiale|partner|stelle)?$","^potraviny$","^prehrana$","^pressing$","^pulper(i|í)a$","^punkt apteczny$","^quin?cai?llerie$","^quiosco$","^rent a car$","^repuestos automotrices$","^restaurant(e)?(\\suniversit(ário|aire))?$","^rzeźnik$","^sale$","^salle (omnisport|polyvalente)$","^salão de beleza$","^sari-sari store$","^sb\\stank$","^second\\shand$","^shops?$","^sklep$","^smíšené zboží$","^snacks?$","^souvenir(s)?( shop)?$","^spätkauf$","^stacja (benzynowa|paliw)$","^stadium$","^stadtbäckerei$","^station service$","^steak house$","^stores?$","^super ?america","^super\\s?m(arket|ercado)$","^sushi(\\sbar)?$","^taba(c|k)(os|chi)?(\\strafi(k|c))?$","^tabac\\spresse$","^tabaccher(i|í)a$","^tacos$","^taller( mec(á|a)nico)?$","^tanatorio$","^tankstelle$","^tattoo$","^taverna$","^tea stall$","^tesha$","^tienda(\\sde\\s(barrio|abarrotes))?$","^toko pakaian$","^trafik(a)?$","^trattoria$","^trinkhalle$","^télécentre$","^ufficio postale$","^unidade básica de saúde$","^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обуви$","^ресторан$","^ритуал(ьные услуги)?$","^рыб(a|олов)$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^универ(маг|сам)$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخابرات$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ポスト$","^体育館$","^加油站$","^早餐店$","^珈琲館$","^租$","^自動販売機$","^自販機$","^郵便ポスト$","^郵局$","^食堂$","automat na jizdenky"];
66227         var filters = {
66228         keepTags: keepTags,
66229         discardKeys: discardKeys,
66230         discardNames: discardNames
66231         };
66232
66233         // ES5 for iD, for now
66234
66235
66236         // remove spaces, punctuation, diacritics
66237         var simplify = function simplify(str) {
66238             return diacritics.remove(
66239                 str
66240                     .replace(/&/g,'and')
66241                     .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,'')
66242                     .toLowerCase()
66243             );
66244         };
66245
66246         // ES5 for iD, for now
66247
66248
66249         // toParts - split a name-suggestion-index key into parts
66250         // {
66251         //   kvnd:        "amenity/fast_food|Thaï Express~(North America)",
66252         //   kvn:         "amenity/fast_food|Thaï Express",
66253         //   kv:          "amenity/fast_food",
66254         //   k:           "amenity",
66255         //   v:           "fast_food",
66256         //   n:           "Thaï Express",
66257         //   d:           "(North America)",
66258         //   nsimple:     "thaiexpress",
66259         //   kvnnsimple:  "amenity/fast_food|thaiexpress"
66260         // }
66261         var to_parts = function toParts(kvnd) {
66262             var parts = {};
66263             parts.kvnd = kvnd;
66264
66265             var kvndparts = kvnd.split('~', 2);
66266             if (kvndparts.length > 1) parts.d = kvndparts[1];
66267
66268             parts.kvn = kvndparts[0];
66269             var kvnparts = parts.kvn.split('|', 2);
66270             if (kvnparts.length > 1) parts.n = kvnparts[1];
66271
66272             parts.kv = kvnparts[0];
66273             var kvparts = parts.kv.split('/', 2);
66274             parts.k = kvparts[0];
66275             parts.v = kvparts[1];
66276
66277             parts.nsimple = simplify(parts.n);
66278             parts.kvnsimple = parts.kv + '|' + parts.nsimple;
66279             return parts;
66280         };
66281
66282         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","shop/telecommunication"],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/power_tools","shop/trade"],health_food:["shop/health","shop/health_food","shop/herbalist","shop/nutrition_supplements"],houseware:["shop/houseware","shop/interior_decoration"],lodging:["tourism/hotel","tourism/motel"],money_transfer:["amenity/money_transfer","shop/money_transfer"],outdoor:["shop/outdoor","shop/sports"],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"],wholesale:["shop/wholesale","shop/supermarket","shop/department_store"],variety_store:["shop/variety_store","shop/supermarket","shop/convenience"]};
66283         var match_groups = {
66284         matchGroups: matchGroups
66285         };
66286
66287         var match_groups$1 = /*#__PURE__*/Object.freeze({
66288                 __proto__: null,
66289                 matchGroups: matchGroups,
66290                 'default': match_groups
66291         });
66292
66293         var require$$0 = getCjsExportFromNamespace(match_groups$1);
66294
66295         // ES5 for iD, for now
66296
66297
66298
66299         var matchGroups$1 = require$$0.matchGroups;
66300
66301         var matcher$1 = function() {
66302           var _warnings = []; // array of match conflict pairs
66303           var _ambiguous = {};
66304           var _matchIndex = {};
66305           var matcher = {};
66306
66307           // Create an index of all the keys/simplenames for fast matching
66308           matcher.buildMatchIndex = function(brands) {
66309
66310             // two passes - once for primary names, once for secondary/alternate names
66311             Object.keys(brands).forEach(function(kvnd) { insertNames(kvnd, 'primary'); });
66312             Object.keys(brands).forEach(function(kvnd) { insertNames(kvnd, 'secondary'); });
66313
66314             function insertNames(kvnd, which) {
66315               var obj = brands[kvnd];
66316               var parts = to_parts(kvnd);
66317
66318               if (obj.countryCodes) {
66319                 parts.countryCodes = obj.countryCodes.slice(); // copy
66320               }
66321
66322               var nomatches = (obj.nomatch || [])
66323                 .map(function(kvnd) { return to_parts(kvnd).kvnsimple; });
66324
66325               var match_kv = [parts.kv]
66326                 .concat(obj.matchTags || [])
66327                 .map(function(s) { return s.toLowerCase(); });
66328
66329               var match_nsimple = [];
66330               if (which === 'primary') {
66331                 match_nsimple = [parts.n]
66332                   .concat(obj.matchNames || [])
66333                   .concat(obj.tags.official_name || [])  // #2732
66334                   .map(simplify);
66335
66336               } else if (which === 'secondary') {
66337                 if (parts.d) return;  // exit early - we collected these on the first pass
66338                 match_nsimple = []
66339                   .concat(obj.tags.alt_name || [])       // #2732
66340                   .concat(obj.tags.short_name || [])     // #2732
66341                   .map(simplify);
66342               }
66343
66344               if (!match_nsimple.length) return;  // nothing to do
66345
66346               match_kv.forEach(function(kv) {
66347                 match_nsimple.forEach(function(nsimple) {
66348                   var test = kv + nsimple;
66349                   if (nomatches.some(function(s) { return s === test; })) {
66350                     console.log("WARNING match/nomatch conflict for " + test);
66351                     return;
66352                   }
66353
66354                   if (parts.d) {
66355                     // Known ambiguous names with disambiguation string ~(USA) / ~(Canada)
66356                     // FIXME: Name collisions will overwrite the initial entry (ok for now)
66357                     if (!_ambiguous[kv]) _ambiguous[kv] = {};
66358                     _ambiguous[kv][nsimple] = parts;
66359
66360                   } else {
66361                     // Names we expect to be unique..
66362                     // Warn if we detect collisions in a primary name, ignore if a secondary name - #2972
66363                     if (!_matchIndex[kv]) _matchIndex[kv] = {};
66364                     var m = _matchIndex[kv][nsimple];
66365                     if (m) {  // there already is a match for this name
66366                       if (which === 'primary') {
66367                         _warnings.push([m.kvnd, kvnd + ' ("' + nsimple + '")']);
66368                       }
66369                     } else {
66370                       _matchIndex[kv][nsimple] = parts;
66371                     }
66372                   }
66373                 });
66374               });
66375
66376             }
66377           };
66378
66379           // pass a `key`, `value`, `name` and return the best match,
66380           // `countryCode` optional (if supplied, must match that too)
66381           matcher.matchKVN = function(key, value, name, countryCode) {
66382             return matcher.matchParts(
66383               to_parts(key + "/" + value + "|" + name),
66384               countryCode
66385             );
66386           };
66387
66388           // pass a parts object and return the best match,
66389           // `countryCode` optional (if supplied, must match that too)
66390           matcher.matchParts = function(parts, countryCode) {
66391             var match = null;
66392             var inGroup = false;
66393
66394             // fixme: we currently return a single match for ambiguous
66395             match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
66396             if (match && matchesCountryCode(match)) return match;
66397
66398             // try to return an exact match
66399             match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
66400             if (match && matchesCountryCode(match)) return match;
66401
66402             // look in match groups
66403             for (var mg in matchGroups$1) {
66404               var matchGroup = matchGroups$1[mg];
66405               match = null;
66406               inGroup = false;
66407
66408               for (var i = 0; i < matchGroup.length; i++) {
66409                 var otherkv = matchGroup[i].toLowerCase();
66410                 if (!inGroup) {
66411                   inGroup = otherkv === parts.kv;
66412                 }
66413                 if (!match) {
66414                   // fixme: we currently return a single match for ambiguous
66415                   match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
66416                 }
66417                 if (!match) {
66418                   match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
66419                 }
66420
66421                 if (!matchesCountryCode(match)) {
66422                   match = null;
66423                 }
66424
66425                 if (inGroup && match) {
66426                   return match;
66427                 }
66428               }
66429             }
66430
66431             return null;
66432
66433             function matchesCountryCode(match) {
66434               if (!countryCode) return true;
66435               if (!match.countryCodes) return true;
66436               return match.countryCodes.indexOf(countryCode) !== -1;
66437             }
66438           };
66439
66440           matcher.getWarnings = function() {
66441             return _warnings;
66442           };
66443
66444           return matcher;
66445         };
66446
66447         function validationOutdatedTags(context) {
66448             var type = 'outdated_tags';
66449
66450             // initialize name-suggestion-index matcher
66451             var nsiMatcher = matcher$1();
66452             nsiMatcher.buildMatchIndex(brands$1.brands);
66453             var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
66454
66455             var allWD = {};
66456             var allWP = {};
66457             Object.keys(brands$1.brands).forEach(function(kvnd) {
66458                 var brand = brands$1.brands[kvnd];
66459                 var wd = brand.tags['brand:wikidata'];
66460                 var wp = brand.tags['brand:wikipedia'];
66461                 if (wd) { allWD[wd] = kvnd; }
66462                 if (wp) { allWP[wp] = kvnd; }
66463             });
66464
66465
66466             function oldTagIssues(entity, graph) {
66467                 var oldTags = Object.assign({}, entity.tags);  // shallow copy
66468                 var preset = context.presets().match(entity, graph);
66469                 var explicitPresetUpgrade = preset.replacement;
66470                 var subtype = 'deprecated_tags';
66471
66472                 // upgrade preset..
66473                 if (preset.replacement) {
66474                     var newPreset = context.presets().item(preset.replacement);
66475                     graph = actionChangePreset(entity.id, preset, newPreset, true)(graph);  // true = skip field defaults
66476                     entity = graph.entity(entity.id);
66477                     preset = newPreset;
66478                 }
66479
66480                 // upgrade tags..
66481                 var deprecatedTags = entity.deprecatedTags();
66482                 if (deprecatedTags.length) {
66483                     deprecatedTags.forEach(function(tag) {
66484                         graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
66485                     });
66486                     entity = graph.entity(entity.id);
66487                 }
66488
66489                 // add missing addTags..
66490                 var newTags = Object.assign({}, entity.tags);  // shallow copy
66491                 if (preset.tags !== preset.addTags) {
66492                     Object.keys(preset.addTags).forEach(function(k) {
66493                         if (!newTags[k]) {
66494                             newTags[k] = preset.addTags[k];
66495                             if (!explicitPresetUpgrade) {
66496                                 subtype = 'incomplete_tags';
66497                             }
66498                         }
66499                     });
66500                 }
66501
66502                 // Do `wikidata` or `wikipedia` identify this entity as a brand?  #6416
66503                 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
66504                 var isBrand;
66505                 if (newTags.wikidata) {                 // try matching `wikidata`
66506                     isBrand = allWD[newTags.wikidata];
66507                 }
66508                 if (!isBrand && newTags.wikipedia) {    // fallback to `wikipedia`
66509                     isBrand = allWP[newTags.wikipedia];
66510                 }
66511                 if (isBrand && !newTags.office) {       // but avoid doing this for corporate offices
66512                     if (newTags.wikidata) {
66513                         newTags['brand:wikidata'] = newTags.wikidata;
66514                         delete newTags.wikidata;
66515                     }
66516                     if (newTags.wikipedia) {
66517                         newTags['brand:wikipedia'] = newTags.wikipedia;
66518                         delete newTags.wikipedia;
66519                     }
66520                     // I considered setting `name` and other tags here, but they aren't unique per wikidata
66521                     // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
66522                     // So users will really need to use a preset or assign `name` themselves.
66523                 }
66524
66525                 // try key/value|name match against name-suggestion-index
66526                 if (newTags.name) {
66527                     for (var i = 0; i < nsiKeys.length; i++) {
66528                         var k = nsiKeys[i];
66529                         if (!newTags[k]) continue;
66530
66531                         var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name);
66532                         if (!match) continue;
66533
66534                         // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
66535                         if (match.d) continue;
66536
66537                         var brand = brands$1.brands[match.kvnd];
66538                         if (brand && brand.tags['brand:wikidata']) {
66539                             subtype = 'noncanonical_brand';
66540
66541                             var keepTags = ['takeaway'].reduce(function(acc, k) {
66542                                 if (newTags[k]) {
66543                                     acc[k] = newTags[k];
66544                                 }
66545                                 return acc;
66546                             }, {});
66547
66548                             nsiKeys.forEach(function(k) { delete newTags[k]; });
66549                             Object.assign(newTags, brand.tags, keepTags);
66550                             break;
66551                         }
66552                     }
66553                 }
66554
66555
66556                 // determine diff
66557                 var tagDiff = utilTagDiff(oldTags, newTags);
66558                 if (!tagDiff.length) return [];
66559
66560                 var prefix = '';
66561                 if (subtype === 'noncanonical_brand') {
66562                     prefix = 'noncanonical_brand.';
66563                 } else if (subtype === 'incomplete_tags') {
66564                     prefix = 'incomplete.';
66565                 }
66566
66567                 // don't allow autofixing brand tags
66568                 var autoArgs = subtype !== 'noncanonical_brand' ? [doUpgrade, t('issues.fix.upgrade_tags.annotation')] : null;
66569
66570                 return [new validationIssue({
66571                     type: type,
66572                     subtype: subtype,
66573                     severity: 'warning',
66574                     message: showMessage,
66575                     reference: showReference,
66576                     entityIds: [entity.id],
66577                     hash: JSON.stringify(tagDiff),
66578                     fixes: [
66579                         new validationIssueFix({
66580                             autoArgs: autoArgs,
66581                             title: t('issues.fix.upgrade_tags.title'),
66582                             onClick: function(context) {
66583                                 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66584                             }
66585                         })
66586                     ]
66587                 })];
66588
66589
66590                 function doUpgrade(graph) {
66591                     var currEntity = graph.hasEntity(entity.id);
66592                     if (!currEntity) return graph;
66593
66594                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
66595                     tagDiff.forEach(function(diff) {
66596                         if (diff.type === '-') {
66597                             delete newTags[diff.key];
66598                         } else if (diff.type === '+') {
66599                             newTags[diff.key] = diff.newVal;
66600                         }
66601                     });
66602
66603                     return actionChangeTags(currEntity.id, newTags)(graph);
66604                 }
66605
66606
66607                 function showMessage(context) {
66608                     var currEntity = context.hasEntity(entity.id);
66609                     if (!currEntity) return '';
66610
66611                     var messageID = 'issues.outdated_tags.' + prefix + 'message';
66612
66613                     if (subtype === 'noncanonical_brand' && tagDiff.every(function(d) {
66614                         return d.type === '+';
66615                     })) {
66616                         messageID += '_incomplete';
66617                     }
66618
66619                     return t(messageID,
66620                         { feature: utilDisplayLabel(currEntity, context) }
66621                     );
66622                 }
66623
66624
66625                 function showReference(selection) {
66626                     var enter = selection.selectAll('.issue-reference')
66627                         .data([0])
66628                         .enter();
66629
66630                     enter
66631                         .append('div')
66632                         .attr('class', 'issue-reference')
66633                         .text(t('issues.outdated_tags.' + prefix + 'reference'));
66634
66635                     enter
66636                         .append('strong')
66637                         .text(t('issues.suggested'));
66638
66639                     enter
66640                         .append('table')
66641                         .attr('class', 'tagDiff-table')
66642                         .selectAll('.tagDiff-row')
66643                         .data(tagDiff)
66644                         .enter()
66645                         .append('tr')
66646                         .attr('class', 'tagDiff-row')
66647                         .append('td')
66648                         .attr('class', function(d) {
66649                             var klass = d.type === '+' ? 'add' : 'remove';
66650                             return 'tagDiff-cell tagDiff-cell-' + klass;
66651                         })
66652                         .text(function(d) { return d.display; });
66653                 }
66654             }
66655
66656
66657             function oldMultipolygonIssues(entity, graph) {
66658
66659                 var multipolygon, outerWay;
66660                 if (entity.type === 'relation') {
66661                     outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
66662                     multipolygon = entity;
66663                 } else if (entity.type === 'way') {
66664                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
66665                     outerWay = entity;
66666                 } else {
66667                     return [];
66668                 }
66669
66670                 if (!multipolygon || !outerWay) return [];
66671
66672                 return [new validationIssue({
66673                     type: type,
66674                     subtype: 'old_multipolygon',
66675                     severity: 'warning',
66676                     message: showMessage,
66677                     reference: showReference,
66678                     entityIds: [outerWay.id, multipolygon.id],
66679                     fixes: [
66680                         new validationIssueFix({
66681                             autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
66682                             title: t('issues.fix.move_tags.title'),
66683                             onClick: function(context) {
66684                                 context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
66685                             }
66686                         })
66687                     ]
66688                 })];
66689
66690
66691                 function doUpgrade(graph) {
66692                     var currMultipolygon = graph.hasEntity(multipolygon.id);
66693                     var currOuterWay = graph.hasEntity(outerWay.id);
66694                     if (!currMultipolygon || !currOuterWay) return graph;
66695
66696                     currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
66697                     graph = graph.replace(currMultipolygon);
66698                     return actionChangeTags(currOuterWay.id, {})(graph);
66699                 }
66700
66701
66702                 function showMessage(context) {
66703                     var currMultipolygon = context.hasEntity(multipolygon.id);
66704                     if (!currMultipolygon) return '';
66705
66706                     return t('issues.old_multipolygon.message',
66707                         { multipolygon: utilDisplayLabel(currMultipolygon, context) }
66708                     );
66709                 }
66710
66711
66712                 function showReference(selection) {
66713                     selection.selectAll('.issue-reference')
66714                         .data([0])
66715                         .enter()
66716                         .append('div')
66717                         .attr('class', 'issue-reference')
66718                         .text(t('issues.old_multipolygon.reference'));
66719                 }
66720             }
66721
66722
66723             var validation = function checkOutdatedTags(entity, graph) {
66724                 var issues = oldMultipolygonIssues(entity, graph);
66725                 if (!issues.length) issues = oldTagIssues(entity, graph);
66726                 return issues;
66727             };
66728
66729
66730             validation.type = type;
66731
66732             return validation;
66733         }
66734
66735         function validationPrivateData() {
66736             var type = 'private_data';
66737
66738             // assume that some buildings are private
66739             var privateBuildingValues = {
66740                 detached: true,
66741                 farm: true,
66742                 house: true,
66743                 houseboat: true,
66744                 residential: true,
66745                 semidetached_house: true,
66746                 static_caravan: true
66747             };
66748
66749             // but they might be public if they have one of these other tags
66750             var publicKeys = {
66751                 amenity: true,
66752                 craft: true,
66753                 historic: true,
66754                 leisure: true,
66755                 office: true,
66756                 shop: true,
66757                 tourism: true
66758             };
66759
66760             // these tags may contain personally identifying info
66761             var personalTags = {
66762                 'contact:email': true,
66763                 'contact:fax': true,
66764                 'contact:phone': true,
66765                 email: true,
66766                 fax: true,
66767                 phone: true
66768             };
66769
66770
66771             var validation = function checkPrivateData(entity) {
66772                 var tags = entity.tags;
66773                 if (!tags.building || !privateBuildingValues[tags.building]) return [];
66774
66775                 var keepTags = {};
66776                 for (var k in tags) {
66777                     if (publicKeys[k]) return [];  // probably a public feature
66778                     if (!personalTags[k]) {
66779                         keepTags[k] = tags[k];
66780                     }
66781                 }
66782
66783                 var tagDiff = utilTagDiff(tags, keepTags);
66784                 if (!tagDiff.length) return [];
66785
66786                 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
66787
66788                 return [new validationIssue({
66789                     type: type,
66790                     severity: 'warning',
66791                     message: showMessage,
66792                     reference: showReference,
66793                     entityIds: [entity.id],
66794                     fixes: [
66795                         new validationIssueFix({
66796                             icon: 'iD-operation-delete',
66797                             title: t('issues.fix.' + fixID + '.title'),
66798                             onClick: function(context) {
66799                                 context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
66800                             }
66801                         })
66802                     ]
66803                 })];
66804
66805
66806                 function doUpgrade(graph) {
66807                     var currEntity = graph.hasEntity(entity.id);
66808                     if (!currEntity) return graph;
66809
66810                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
66811                     tagDiff.forEach(function(diff) {
66812                         if (diff.type === '-') {
66813                             delete newTags[diff.key];
66814                         } else if (diff.type === '+') {
66815                             newTags[diff.key] = diff.newVal;
66816                         }
66817                     });
66818
66819                     return actionChangeTags(currEntity.id, newTags)(graph);
66820                 }
66821
66822
66823                 function showMessage(context) {
66824                     var currEntity = context.hasEntity(this.entityIds[0]);
66825                     if (!currEntity) return '';
66826
66827                     return t('issues.private_data.contact.message',
66828                         { feature: utilDisplayLabel(currEntity, context) }
66829                     );
66830                 }
66831
66832
66833                 function showReference(selection) {
66834                     var enter = selection.selectAll('.issue-reference')
66835                         .data([0])
66836                         .enter();
66837
66838                     enter
66839                         .append('div')
66840                         .attr('class', 'issue-reference')
66841                         .text(t('issues.private_data.reference'));
66842
66843                     enter
66844                         .append('strong')
66845                         .text(t('issues.suggested'));
66846
66847                     enter
66848                         .append('table')
66849                         .attr('class', 'tagDiff-table')
66850                         .selectAll('.tagDiff-row')
66851                         .data(tagDiff)
66852                         .enter()
66853                         .append('tr')
66854                         .attr('class', 'tagDiff-row')
66855                         .append('td')
66856                         .attr('class', function(d) {
66857                             var klass = d.type === '+' ? 'add' : 'remove';
66858                             return 'tagDiff-cell tagDiff-cell-' + klass;
66859                         })
66860                         .text(function(d) { return d.display; });
66861                 }
66862             };
66863
66864
66865             validation.type = type;
66866
66867             return validation;
66868         }
66869
66870         function validationSuspiciousName() {
66871             var type = 'suspicious_name';
66872
66873             // known list of generic names (e.g. "bar")
66874             var discardNamesRegexes = filters.discardNames.map(function(discardName) {
66875                 return new RegExp(discardName, 'i');
66876             });
66877
66878             var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
66879
66880             function isDiscardedSuggestionName(lowercaseName) {
66881                 for (var i = 0; i < discardNamesRegexes.length; i++) {
66882                     if (discardNamesRegexes[i].test(lowercaseName)) {
66883                         return true;
66884                     }
66885                 }
66886                 return false;
66887             }
66888
66889             // test if the name is just the key or tag value (e.g. "park")
66890             function nameMatchesRawTag(lowercaseName, tags) {
66891                 var i, key, val;
66892                 for (i = 0; i < keysToTestForGenericValues.length; i++) {
66893                     key = keysToTestForGenericValues[i];
66894                     val = tags[key];
66895                     if (val) {
66896                         val = val.toLowerCase();
66897                         if (key === lowercaseName ||
66898                             val === lowercaseName ||
66899                             key.replace(/\_/g, ' ') === lowercaseName ||
66900                             val.replace(/\_/g, ' ') === lowercaseName) {
66901                             return true;
66902                         }
66903                     }
66904                 }
66905                 return false;
66906             }
66907
66908             function isGenericName(name, tags) {
66909                 name = name.toLowerCase();
66910                 return nameMatchesRawTag(name, tags) || isDiscardedSuggestionName(name);
66911             }
66912
66913             function makeGenericNameIssue(entityId, nameKey, genericName, langCode) {
66914                 return new validationIssue({
66915                     type: type,
66916                     subtype: 'generic_name',
66917                     severity: 'warning',
66918                     message: function(context) {
66919                         var entity = context.hasEntity(this.entityIds[0]);
66920                         if (!entity) return '';
66921                         var preset = utilPreset(entity, context);
66922                         var langName = langCode && languageName(langCode);
66923                         return t('issues.generic_name.message' + (langName ? '_language' : ''),
66924                             { feature: preset.name(), name: genericName, language: langName }
66925                         );
66926                     },
66927                     reference: showReference,
66928                     entityIds: [entityId],
66929                     hash: nameKey + '=' + genericName,
66930                     fixes: [
66931                         new validationIssueFix({
66932                             icon: 'iD-operation-delete',
66933                             title: t('issues.fix.remove_the_name.title'),
66934                             onClick: function(context) {
66935                                 var entityId = this.issue.entityIds[0];
66936                                 var entity = context.entity(entityId);
66937                                 var tags = Object.assign({}, entity.tags);   // shallow copy
66938                                 delete tags[nameKey];
66939                                 context.perform(
66940                                     actionChangeTags(entityId, tags),
66941                                     t('issues.fix.remove_generic_name.annotation')
66942                                 );
66943                             }
66944                         })
66945                     ]
66946                 });
66947
66948                 function showReference(selection) {
66949                     selection.selectAll('.issue-reference')
66950                         .data([0])
66951                         .enter()
66952                         .append('div')
66953                         .attr('class', 'issue-reference')
66954                         .text(t('issues.generic_name.reference'));
66955                 }
66956             }
66957
66958             function makeIncorrectNameIssue(entityId, nameKey, incorrectName, langCode) {
66959                 return new validationIssue({
66960                     type: type,
66961                     subtype: 'not_name',
66962                     severity: 'warning',
66963                     message: function(context) {
66964                         var entity = context.hasEntity(this.entityIds[0]);
66965                         if (!entity) return '';
66966                         var preset = utilPreset(entity, context);
66967                         var langName = langCode && languageName(langCode);
66968                         return t('issues.incorrect_name.message' + (langName ? '_language' : ''),
66969                             { feature: preset.name(), name: incorrectName, language: langName }
66970                         );
66971                     },
66972                     reference: showReference,
66973                     entityIds: [entityId],
66974                     hash: nameKey + '=' + incorrectName,
66975                     fixes: [
66976                         new validationIssueFix({
66977                             icon: 'iD-operation-delete',
66978                             title: t('issues.fix.remove_the_name.title'),
66979                             onClick: function(context) {
66980                                 var entityId = this.issue.entityIds[0];
66981                                 var entity = context.entity(entityId);
66982                                 var tags = Object.assign({}, entity.tags);   // shallow copy
66983                                 delete tags[nameKey];
66984                                 context.perform(
66985                                     actionChangeTags(entityId, tags),
66986                                     t('issues.fix.remove_mistaken_name.annotation')
66987                                 );
66988                             }
66989                         })
66990                     ]
66991                 });
66992
66993                 function showReference(selection) {
66994                     selection.selectAll('.issue-reference')
66995                         .data([0])
66996                         .enter()
66997                         .append('div')
66998                         .attr('class', 'issue-reference')
66999                         .text(t('issues.generic_name.reference'));
67000                 }
67001             }
67002
67003
67004             var validation = function checkGenericName(entity) {
67005                 // a generic name is okay if it's a known brand or entity
67006                 if (entity.hasWikidata()) return [];
67007
67008                 var issues = [];
67009
67010                 var notNames = (entity.tags['not:name'] || '').split(';');
67011
67012                 for (var key in entity.tags) {
67013                     var m = key.match(/^name(?:(?::)([a-zA-Z_-]+))?$/);
67014                     if (!m) continue;
67015
67016                     var langCode = m.length >= 2 ? m[1] : null;
67017
67018                     var value = entity.tags[key];
67019                     if (notNames.length) {
67020                         for (var i in notNames) {
67021                             var notName = notNames[i];
67022                             if (value === notName) {
67023                                 issues.push(makeIncorrectNameIssue(entity.id, key, value, langCode));
67024                                 continue;
67025                             }
67026                         }
67027                     }
67028                     if (isGenericName(value, entity.tags)) {
67029                         issues.push(makeGenericNameIssue(entity.id, key, value, langCode));
67030                     }
67031                 }
67032
67033                 return issues;
67034             };
67035
67036             validation.type = type;
67037
67038             return validation;
67039         }
67040
67041         function validationUnsquareWay(context) {
67042             var type = 'unsquare_way';
67043             var DEFAULT_DEG_THRESHOLD = 5;   // see also issues.js
67044
67045             // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
67046             var epsilon = 0.05;
67047             var nodeThreshold = 10;
67048
67049             function isBuilding(entity, graph) {
67050                 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') return false;
67051                 return entity.tags.building && entity.tags.building !== 'no';
67052             }
67053
67054
67055             var validation = function checkUnsquareWay(entity, graph) {
67056
67057                 if (!isBuilding(entity, graph)) return [];
67058
67059                 // don't flag ways marked as physically unsquare
67060                 if (entity.tags.nonsquare === 'yes') return [];
67061
67062                 var isClosed = entity.isClosed();
67063                 if (!isClosed) return [];        // this building has bigger problems
67064
67065                 // don't flag ways with lots of nodes since they are likely detail-mapped
67066                 var nodes = graph.childNodes(entity).slice();    // shallow copy
67067                 if (nodes.length > nodeThreshold + 1) return [];   // +1 because closing node appears twice
67068
67069                 // ignore if not all nodes are fully downloaded
67070                 var osm = services$1.osm;
67071                 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) return [];
67072
67073                 // don't flag connected ways to avoid unresolvable unsquare loops
67074                 var hasConnectedSquarableWays = nodes.some(function(node) {
67075                     return graph.parentWays(node).some(function(way) {
67076                         if (way.id === entity.id) return false;
67077                         if (isBuilding(way, graph)) return true;
67078                         return graph.parentRelations(way).some(function(parentRelation) {
67079                             return parentRelation.isMultipolygon() &&
67080                                 parentRelation.tags.building &&
67081                                 parentRelation.tags.building !== 'no';
67082                         });
67083                     });
67084                 });
67085                 if (hasConnectedSquarableWays) return [];
67086
67087
67088                 // user-configurable square threshold
67089                 var storedDegreeThreshold = context.storage('validate-square-degrees');
67090                 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
67091
67092                 var points = nodes.map(function(node) { return context.projection(node.loc); });
67093                 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) return [];
67094
67095                 var autoArgs;
67096                 // don't allow autosquaring features linked to wikidata
67097                 if (!entity.tags.wikidata) {
67098                     // use same degree threshold as for detection
67099                     var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
67100                     autoAction.transitionable = false;  // when autofixing, do it instantly
67101                     autoArgs = [autoAction, t('operations.orthogonalize.annotation.area')];
67102                 }
67103
67104                 return [new validationIssue({
67105                     type: type,
67106                     subtype: 'building',
67107                     severity: 'warning',
67108                     message: function(context) {
67109                         var entity = context.hasEntity(this.entityIds[0]);
67110                         return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
67111                     },
67112                     reference: showReference,
67113                     entityIds: [entity.id],
67114                     hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
67115                     fixes: [
67116                         new validationIssueFix({
67117                             icon: 'iD-operation-orthogonalize',
67118                             title: t('issues.fix.square_feature.title'),
67119                             autoArgs: autoArgs,
67120                             onClick: function(context, completionHandler) {
67121                                 var entityId = this.issue.entityIds[0];
67122                                 // use same degree threshold as for detection
67123                                 context.perform(
67124                                     actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
67125                                     t('operations.orthogonalize.annotation.area')
67126                                 );
67127                                 // run after the squaring transition (currently 150ms)
67128                                 window.setTimeout(function() { completionHandler(); }, 175);
67129                             }
67130                         }),
67131                         /*
67132                         new validationIssueFix({
67133                             title: t('issues.fix.tag_as_unsquare.title'),
67134                             onClick: function(context) {
67135                                 var entityId = this.issue.entityIds[0];
67136                                 var entity = context.entity(entityId);
67137                                 var tags = Object.assign({}, entity.tags);  // shallow copy
67138                                 tags.nonsquare = 'yes';
67139                                 context.perform(
67140                                     actionChangeTags(entityId, tags),
67141                                     t('issues.fix.tag_as_unsquare.annotation')
67142                                 );
67143                             }
67144                         })
67145                         */
67146                     ]
67147                 })];
67148
67149                 function showReference(selection) {
67150                     selection.selectAll('.issue-reference')
67151                         .data([0])
67152                         .enter()
67153                         .append('div')
67154                         .attr('class', 'issue-reference')
67155                         .text(t('issues.unsquare_way.buildings.reference'));
67156                 }
67157             };
67158
67159             validation.type = type;
67160
67161             return validation;
67162         }
67163
67164
67165
67166         var Validations = /*#__PURE__*/Object.freeze({
67167                 __proto__: null,
67168                 validationAlmostJunction: validationAlmostJunction,
67169                 validationCloseNodes: validationCloseNodes,
67170                 validationCrossingWays: validationCrossingWays,
67171                 validationDisconnectedWay: validationDisconnectedWay,
67172                 validationFormatting: validationFormatting,
67173                 validationHelpRequest: validationHelpRequest,
67174                 validationImpossibleOneway: validationImpossibleOneway,
67175                 validationIncompatibleSource: validationIncompatibleSource,
67176                 validationMaprules: validationMaprules,
67177                 validationMismatchedGeometry: validationMismatchedGeometry,
67178                 validationMissingRole: validationMissingRole,
67179                 validationMissingTag: validationMissingTag,
67180                 validationOutdatedTags: validationOutdatedTags,
67181                 validationPrivateData: validationPrivateData,
67182                 validationSuspiciousName: validationSuspiciousName,
67183                 validationUnsquareWay: validationUnsquareWay
67184         });
67185
67186         function coreValidator(context) {
67187             var dispatch$1 = dispatch('validated', 'focusedIssue');
67188             var validator = utilRebind({}, dispatch$1, 'on');
67189
67190             var _rules = {};
67191             var _disabledRules = {};
67192
67193             var _ignoredIssueIDs = {};          // issue.id -> true
67194             var _baseCache = validationCache(); // issues before any user edits
67195             var _headCache = validationCache(); // issues after all user edits
67196             var _validatedGraph = null;
67197             var _deferred = new Set();
67198
67199             //
67200             // initialize the validator rulesets
67201             //
67202             validator.init = function() {
67203                 Object.values(Validations).forEach(function(validation) {
67204                     if (typeof validation !== 'function') return;
67205
67206                     var fn = validation(context);
67207                     var key = fn.type;
67208                     _rules[key] = fn;
67209                 });
67210
67211                 var disabledRules = context.storage('validate-disabledRules');
67212                 if (disabledRules) {
67213                     disabledRules.split(',')
67214                         .forEach(function(key) { _disabledRules[key] = true; });
67215                 }
67216             };
67217
67218
67219             //
67220             // clear caches, called whenever iD resets after a save
67221             //
67222             validator.reset = function() {
67223                 Array.from(_deferred).forEach(function(handle) {
67224                     window.cancelIdleCallback(handle);
67225                     _deferred.delete(handle);
67226                 });
67227
67228                 // clear caches
67229                 _ignoredIssueIDs = {};
67230                 _baseCache = validationCache();
67231                 _headCache = validationCache();
67232                 _validatedGraph = null;
67233             };
67234
67235             validator.resetIgnoredIssues = function() {
67236                 _ignoredIssueIDs = {};
67237                 // reload UI
67238                 dispatch$1.call('validated');
67239             };
67240
67241
67242             // when the user changes the squaring thereshold, rerun this on all buildings
67243             validator.changeSquareThreshold = function() {
67244
67245                 reloadUnsquareIssues(_headCache, context.graph());
67246                 reloadUnsquareIssues(_baseCache, context.history().base());
67247
67248                 dispatch$1.call('validated');
67249             };
67250
67251             function reloadUnsquareIssues(cache, graph) {
67252
67253                 var checkUnsquareWay = _rules.unsquare_way;
67254                 if (typeof checkUnsquareWay !== 'function') return;
67255
67256                 // uncache existing
67257                 cache.uncacheIssuesOfType('unsquare_way');
67258
67259                 var buildings = context.history().tree().intersects(geoExtent([-180,-90],[180, 90]), graph)  // everywhere
67260                     .filter(function(entity) {
67261                         return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
67262                     });
67263
67264                 // rerun for all buildings
67265                 buildings.forEach(function(entity) {
67266                     var detected = checkUnsquareWay(entity, graph);
67267                     if (detected.length !== 1) return;
67268
67269                     var issue = detected[0];
67270                     var ignoreFix = new validationIssueFix({
67271                         title: t('issues.fix.ignore_issue.title'),
67272                         icon: 'iD-icon-close',
67273                         onClick: function() {
67274                             ignoreIssue(this.issue.id);
67275                         }
67276                     });
67277                     ignoreFix.type = 'ignore';
67278                     ignoreFix.issue = issue;
67279                     issue.fixes.push(ignoreFix);
67280
67281                     if (!cache.issuesByEntityID[entity.id]) {
67282                         cache.issuesByEntityID[entity.id] = new Set();
67283                     }
67284                     cache.issuesByEntityID[entity.id].add(issue.id);
67285                     cache.issuesByIssueID[issue.id] = issue;
67286                 });
67287             }
67288
67289             // options = {
67290             //     what: 'all',     // 'all' or 'edited'
67291             //     where: 'all',   // 'all' or 'visible'
67292             //     includeIgnored: false   // true, false, or 'only'
67293             //     includeDisabledRules: false   // true, false, or 'only'
67294             // };
67295             validator.getIssues = function(options) {
67296                 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
67297                 var issues = Object.values(_headCache.issuesByIssueID);
67298                 var view = context.map().extent();
67299
67300                 return issues.filter(function(issue) {
67301                     if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
67302                     if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
67303
67304                     if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
67305                     if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
67306
67307                     // Sanity check:  This issue may be for an entity that not longer exists.
67308                     // If we detect this, uncache and return false so it is not included..
67309                     var entityIds = issue.entityIds || [];
67310                     for (var i = 0; i < entityIds.length; i++) {
67311                         var entityId = entityIds[i];
67312                         if (!context.hasEntity(entityId)) {
67313                             delete _headCache.issuesByEntityID[entityId];
67314                             delete _headCache.issuesByIssueID[issue.id];
67315                             return false;
67316                         }
67317                     }
67318
67319                     if (opts.what === 'edited' && _baseCache.issuesByIssueID[issue.id]) return false;
67320
67321                     if (opts.where === 'visible') {
67322                         var extent = issue.extent(context.graph());
67323                         if (!view.intersects(extent)) return false;
67324                     }
67325
67326                     return true;
67327                 });
67328             };
67329
67330             validator.getResolvedIssues = function() {
67331                 var baseIssues = Object.values(_baseCache.issuesByIssueID);
67332                 return baseIssues.filter(function(issue) {
67333                     return !_headCache.issuesByIssueID[issue.id];
67334                 });
67335             };
67336
67337             validator.focusIssue = function(issue) {
67338                 var extent = issue.extent(context.graph());
67339
67340                 if (extent) {
67341                     var setZoom = Math.max(context.map().zoom(), 19);
67342                     context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
67343
67344                     // select the first entity
67345                     if (issue.entityIds && issue.entityIds.length) {
67346                         window.setTimeout(function() {
67347                             var ids = issue.entityIds;
67348                             context.enter(modeSelect(context, [ids[0]]));
67349                             dispatch$1.call('focusedIssue', this, issue);
67350                         }, 250);  // after ease
67351                     }
67352                 }
67353             };
67354
67355
67356             validator.getIssuesBySeverity = function(options) {
67357                 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
67358                 groups.error = groups.error || [];
67359                 groups.warning = groups.warning || [];
67360                 return groups;
67361             };
67362
67363             // show some issue types in a particular order
67364             var orderedIssueTypes = [
67365                 // flag missing data first
67366                 'missing_tag', 'missing_role',
67367                 // then flag identity issues
67368                 'outdated_tags', 'mismatched_geometry',
67369                 // flag geometry issues where fixing them might solve connectivity issues
67370                 'crossing_ways', 'almost_junction',
67371                 // then flag connectivity issues
67372                 'disconnected_way', 'impossible_oneway'
67373             ];
67374
67375             validator.getEntityIssues = function(entityID, options) {
67376                 var cache = _headCache;
67377
67378                 var issueIDs = cache.issuesByEntityID[entityID];
67379                 if (!issueIDs) return [];
67380
67381                 var opts = options || {};
67382
67383                 return Array.from(issueIDs)
67384                     .map(function(id) { return cache.issuesByIssueID[id]; })
67385                     .filter(function(issue) {
67386                         if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) return false;
67387                         if (!opts.includeDisabledRules && _disabledRules[issue.type]) return false;
67388
67389                         if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) return false;
67390                         if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) return false;
67391
67392                         return true;
67393                     }).sort(function(issue1, issue2) {
67394                         if (issue1.type === issue2.type) {
67395                             // issues of the same type, sort deterministically
67396                             return issue1.id < issue2.id ? -1 : 1;
67397                         }
67398                         var index1 = orderedIssueTypes.indexOf(issue1.type);
67399                         var index2 = orderedIssueTypes.indexOf(issue2.type);
67400                         if (index1 !== -1 && index2 !== -1) {
67401                             // both issue types have explicit sort orders
67402                             return index1 - index2;
67403                         } else if (index1 === -1 && index2 === -1) {
67404                             // neither issue type has an explicit sort order, sort by type
67405                             return issue1.type < issue2.type ? -1 : 1;
67406                         } else {
67407                             // order explicit types before everything else
67408                             return index1 !== -1 ? -1 : 1;
67409                         }
67410                     });
67411             };
67412
67413
67414             validator.getRuleKeys = function() {
67415                 return Object.keys(_rules)
67416                     .filter(function(key) { return key !== 'maprules'; })
67417                     .sort(function(key1, key2) {
67418                         // alphabetize by localized title
67419                         return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
67420                     });
67421             };
67422
67423
67424             validator.isRuleEnabled = function(key) {
67425                 return !_disabledRules[key];
67426             };
67427
67428
67429             validator.toggleRule = function(key) {
67430                 if (_disabledRules[key]) {
67431                     delete _disabledRules[key];
67432                 } else {
67433                     _disabledRules[key] = true;
67434                 }
67435
67436                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
67437                 validator.validate();
67438             };
67439
67440
67441             validator.disableRules = function(keys) {
67442                 _disabledRules = {};
67443                 keys.forEach(function(k) {
67444                     _disabledRules[k] = true;
67445                 });
67446
67447                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
67448                 validator.validate();
67449             };
67450
67451
67452             function ignoreIssue(id) {
67453                 _ignoredIssueIDs[id] = true;
67454             }
67455
67456
67457             //
67458             // Run validation on a single entity for the given graph
67459             //
67460             function validateEntity(entity, graph) {
67461                 var entityIssues = [];
67462
67463                 // runs validation and appends resulting issues
67464                 function runValidation(key) {
67465
67466                     var fn = _rules[key];
67467                     if (typeof fn !== 'function') {
67468                         console.error('no such validation rule = ' + key);  // eslint-disable-line no-console
67469                         return;
67470                     }
67471
67472                     var detected = fn(entity, graph);
67473                     detected.forEach(function(issue) {
67474                         var hasIgnoreFix = issue.fixes && issue.fixes.length && issue.fixes[issue.fixes.length - 1].type === 'ignore';
67475                         if (issue.severity === 'warning' && !hasIgnoreFix) {
67476                             var ignoreFix = new validationIssueFix({
67477                                 title: t('issues.fix.ignore_issue.title'),
67478                                 icon: 'iD-icon-close',
67479                                 onClick: function() {
67480                                     ignoreIssue(this.issue.id);
67481                                 }
67482                             });
67483                             ignoreFix.type = 'ignore';
67484                             ignoreFix.issue = issue;
67485                             issue.fixes.push(ignoreFix);
67486                         }
67487                     });
67488                     entityIssues = entityIssues.concat(detected);
67489                 }
67490
67491                 // run all rules
67492                 Object.keys(_rules).forEach(runValidation);
67493
67494                 return entityIssues;
67495             }
67496
67497             function entityIDsToValidate(entityIDs, graph) {
67498                 var processedIDs = new Set();
67499                 return entityIDs.reduce(function(acc, entityID) {
67500                     // keep redundancy check separate from `acc` because an `entityID`
67501                     // could have been added to `acc` as a related entity through an earlier pass
67502                     if (processedIDs.has(entityID)) return acc;
67503                     processedIDs.add(entityID);
67504
67505                     var entity = graph.hasEntity(entityID);
67506                     if (!entity) return acc;
67507
67508                     acc.add(entityID);
67509
67510                     var checkParentRels = [entity];
67511
67512                     if (entity.type === 'node') {
67513                         graph.parentWays(entity).forEach(function(parentWay) {
67514                             acc.add(parentWay.id); // include parent ways
67515                             checkParentRels.push(parentWay);
67516                         });
67517                     } else if (entity.type === 'relation') {
67518                         entity.members.forEach(function(member) {
67519                             acc.add(member.id); // include members
67520                         });
67521                     } else if (entity.type === 'way') {
67522                         entity.nodes.forEach(function(nodeID) {
67523                             acc.add(nodeID); // include child nodes
67524                             graph._parentWays[nodeID].forEach(function(wayID) {
67525                                 acc.add(wayID); // include connected ways
67526                             });
67527                         });
67528                     }
67529
67530                     checkParentRels.forEach(function(entity) {   // include parent relations
67531                         if (entity.type !== 'relation') {        // but not super-relations
67532                             graph.parentRelations(entity).forEach(function(parentRelation) {
67533                                 acc.add(parentRelation.id);
67534                             });
67535                         }
67536                     });
67537
67538                     return acc;
67539
67540                 }, new Set());
67541             }
67542
67543             //
67544             // Run validation for several entities, supplied `entityIDs`,
67545             // against `graph` for the given `cache`
67546             //
67547             function validateEntities(entityIDs, graph, cache) {
67548
67549                 // clear caches for existing issues related to these entities
67550                 entityIDs.forEach(cache.uncacheEntityID);
67551
67552                 // detect new issues and update caches
67553                 entityIDs.forEach(function(entityID) {
67554                     var entity = graph.hasEntity(entityID);
67555                     // don't validate deleted entities
67556                     if (!entity) return;
67557
67558                     var issues = validateEntity(entity, graph);
67559                     cache.cacheIssues(issues);
67560                 });
67561             }
67562
67563
67564             //
67565             // Validates anything that has changed since the last time it was run.
67566             // Also updates the "validatedGraph" to be the current graph
67567             // and dispatches a `validated` event when finished.
67568             //
67569             validator.validate = function() {
67570
67571                 var currGraph = context.graph();
67572                 _validatedGraph = _validatedGraph || context.history().base();
67573                 if (currGraph === _validatedGraph) {
67574                     dispatch$1.call('validated');
67575                     return;
67576                 }
67577                 var oldGraph = _validatedGraph;
67578                 var difference = coreDifference(oldGraph, currGraph);
67579                 _validatedGraph = currGraph;
67580
67581                 var createdAndModifiedEntityIDs = difference.extantIDs(true);   // created/modified (true = w/relation members)
67582                 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
67583
67584                 // check modified and deleted entities against the old graph in order to update their related entities
67585                 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
67586                 var modifiedAndDeletedEntityIDs = difference.deleted().concat(difference.modified())
67587                     .map(function(entity) { return entity.id; });
67588                 var entityIDsToCheckForOldGraph = entityIDsToValidate(modifiedAndDeletedEntityIDs, oldGraph);
67589
67590                 // concat the sets
67591                 entityIDsToCheckForOldGraph.forEach(entityIDsToCheck.add, entityIDsToCheck);
67592
67593                 validateEntities(entityIDsToCheck, context.graph(), _headCache);
67594
67595                 dispatch$1.call('validated');
67596             };
67597
67598
67599             // WHEN TO RUN VALIDATION:
67600             // When graph changes:
67601             context.history()
67602                 .on('restore.validator', validator.validate)   // restore saved history
67603                 .on('undone.validator', validator.validate)    // undo
67604                 .on('redone.validator', validator.validate);   // redo
67605                 // but not on 'change' (e.g. while drawing)
67606
67607             // When user chages editing modes:
67608             context
67609                 .on('exit.validator', validator.validate);
67610
67611             // When merging fetched data:
67612             context.history()
67613                 .on('merge.validator', function(entities) {
67614                     if (!entities) return;
67615                     var handle = window.requestIdleCallback(function() {
67616                         var entityIDs = entities.map(function(entity) { return entity.id; });
67617                         var headGraph = context.graph();
67618                         validateEntities(entityIDsToValidate(entityIDs, headGraph), headGraph, _headCache);
67619
67620                         var baseGraph = context.history().base();
67621                         validateEntities(entityIDsToValidate(entityIDs, baseGraph), baseGraph, _baseCache);
67622
67623                         dispatch$1.call('validated');
67624                     });
67625                     _deferred.add(handle);
67626                 });
67627
67628
67629             return validator;
67630         }
67631
67632
67633         function validationCache() {
67634
67635             var cache = {
67636                 issuesByIssueID: {},  // issue.id -> issue
67637                 issuesByEntityID: {} // entity.id -> set(issue.id)
67638             };
67639
67640             cache.cacheIssues = function(issues) {
67641                 issues.forEach(function(issue) {
67642                     var entityIds = issue.entityIds || [];
67643                     entityIds.forEach(function(entityId) {
67644                         if (!cache.issuesByEntityID[entityId]) {
67645                             cache.issuesByEntityID[entityId] = new Set();
67646                         }
67647                         cache.issuesByEntityID[entityId].add(issue.id);
67648                     });
67649                     cache.issuesByIssueID[issue.id] = issue;
67650                 });
67651             };
67652
67653             cache.uncacheIssue = function(issue) {
67654                 // When multiple entities are involved (e.g. crossing_ways),
67655                 // remove this issue from the other entity caches too..
67656                 var entityIds = issue.entityIds || [];
67657                 entityIds.forEach(function(entityId) {
67658                     if (cache.issuesByEntityID[entityId]) {
67659                         cache.issuesByEntityID[entityId].delete(issue.id);
67660                     }
67661                 });
67662                 delete cache.issuesByIssueID[issue.id];
67663             };
67664
67665             cache.uncacheIssues = function(issues) {
67666                 issues.forEach(cache.uncacheIssue);
67667             };
67668
67669             cache.uncacheIssuesOfType = function(type) {
67670                 var issuesOfType = Object.values(cache.issuesByIssueID)
67671                     .filter(function(issue) { return issue.type === type; });
67672                 cache.uncacheIssues(issuesOfType);
67673             };
67674
67675             //
67676             // Remove a single entity and all its related issues from the caches
67677             //
67678             cache.uncacheEntityID = function(entityID) {
67679                 var issueIDs = cache.issuesByEntityID[entityID];
67680                 if (!issueIDs) return;
67681
67682                 issueIDs.forEach(function(issueID) {
67683                     var issue = cache.issuesByIssueID[issueID];
67684                     if (issue) {
67685                         cache.uncacheIssue(issue);
67686                     } else {
67687                         delete cache.issuesByIssueID[issueID];
67688                     }
67689                 });
67690
67691                 delete cache.issuesByEntityID[entityID];
67692             };
67693
67694             return cache;
67695         }
67696
67697         function presetCollection(collection) {
67698             var maxSearchResults = 50;
67699
67700             var presets = {
67701
67702                 collection: collection,
67703
67704
67705                 item: function(id) {
67706                     return this.collection.find(function(d) {
67707                         return d.id === id;
67708                     });
67709                 },
67710
67711                 index: function(id) {
67712                     return this.collection.findIndex(function(d) {
67713                         return d.id === id;
67714                     });
67715                 },
67716
67717                 matchGeometry: function(geometry) {
67718                     return presetCollection(this.collection.filter(function(d) {
67719                         return d.matchGeometry(geometry);
67720                     }));
67721                 },
67722
67723                 matchAnyGeometry: function(geometries) {
67724                     return presetCollection(this.collection.filter(function(d) {
67725                         return geometries.some(function(geometry) {
67726                             return d.matchGeometry(geometry);
67727                         });
67728                     }));
67729                 },
67730
67731                 fallback: function(geometry) {
67732                     var id = geometry;
67733                     if (id === 'vertex') id = 'point';
67734                     return this.item(id);
67735                 },
67736
67737                 search: function(value, geometry, countryCode) {
67738                     if (!value) return this;
67739
67740                     value = value.toLowerCase().trim();
67741
67742                     // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
67743                     function leading(a) {
67744                         var index = a.indexOf(value);
67745                         return index === 0 || a[index - 1] === ' ';
67746                     }
67747
67748                     // match at name beginning only
67749                     function leadingStrict(a) {
67750                         var index = a.indexOf(value);
67751                         return index === 0;
67752                     }
67753
67754                     function sortNames(a, b) {
67755                         var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
67756                         var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
67757
67758                         // priority if search string matches preset name exactly - #4325
67759                         if (value === aCompare) return -1;
67760                         if (value === bCompare) return 1;
67761
67762                         // priority for higher matchScore
67763                         var i = b.originalScore - a.originalScore;
67764                         if (i !== 0) return i;
67765
67766                         // priority if search string appears earlier in preset name
67767                         i = aCompare.indexOf(value) - bCompare.indexOf(value);
67768                         if (i !== 0) return i;
67769
67770                         // priority for shorter preset names
67771                         return aCompare.length - bCompare.length;
67772                     }
67773
67774                     var pool = this.collection;
67775                     if (countryCode) {
67776                         pool = pool.filter(function(a) {
67777                             if (a.countryCodes && a.countryCodes.indexOf(countryCode) === -1) {
67778                                 return false;
67779                             }
67780                             if (a.notCountryCodes && a.notCountryCodes.indexOf(countryCode) !== -1) {
67781                                 return false;
67782                             }
67783                             return true;
67784                         });
67785                     }
67786                     var searchable = pool.filter(function(a) {
67787                         return a.searchable !== false && a.suggestion !== true;
67788                     });
67789                     var suggestions = pool.filter(function(a) {
67790                         return a.suggestion === true;
67791                     });
67792
67793                     // matches value to preset.name
67794                     var leading_name = searchable
67795                         .filter(function(a) {
67796                             return leading(a.name().toLowerCase());
67797                         }).sort(sortNames);
67798
67799                     // matches value to preset.terms values
67800                     var leading_terms = searchable
67801                         .filter(function(a) {
67802                             return (a.terms() || []).some(leading);
67803                         });
67804
67805                     // matches value to preset.tags values
67806                     var leading_tag_values = searchable
67807                         .filter(function(a) {
67808                             return Object.values(a.tags || {})
67809                                 .filter(function(val) { return val !== '*'; })
67810                                 .some(leading);
67811                         });
67812
67813                     var leading_suggestions = suggestions
67814                         .filter(function(a) {
67815                             return leadingStrict(a.originalName.toLowerCase());
67816                         }).sort(sortNames);
67817
67818                     // finds close matches to value in preset.name
67819                     var similar_name = searchable
67820                         .map(function(a) {
67821                             return { preset: a, dist: utilEditDistance(value, a.name()) };
67822                         }).filter(function(a) {
67823                             return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
67824                         }).sort(function(a, b) {
67825                             return a.dist - b.dist;
67826                         }).map(function(a) {
67827                             return a.preset;
67828                         });
67829
67830                     // finds close matches to value in preset.terms
67831                     var similar_terms = searchable
67832                         .filter(function(a) {
67833                             return (a.terms() || []).some(function(b) {
67834                                 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
67835                             });
67836                         });
67837
67838                     var similar_suggestions = suggestions
67839                         .map(function(a) {
67840                             return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
67841                         }).filter(function(a) {
67842                             return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
67843                         }).sort(function(a, b) {
67844                             return a.dist - b.dist;
67845                         }).map(function(a) {
67846                             return a.preset;
67847                         });
67848
67849                     var results = leading_name.concat(
67850                         leading_suggestions,
67851                         leading_terms,
67852                         leading_tag_values,
67853                         similar_name,
67854                         similar_suggestions,
67855                         similar_terms
67856                     ).slice(0, maxSearchResults - 1);
67857
67858                     if (geometry) {
67859                         if (typeof geometry === 'string') {
67860                             results.push(presets.fallback(geometry));
67861                         } else {
67862                             geometry.forEach(function(geom) {
67863                                 results.push(presets.fallback(geom));
67864                             });
67865                         }
67866                     }
67867
67868                     return presetCollection(utilArrayUniq(results));
67869                 }
67870             };
67871
67872
67873             return presets;
67874         }
67875
67876         function presetCategory(id, category, all) {
67877             category = Object.assign({}, category);   // shallow copy
67878
67879             category.id = id;
67880
67881
67882             category.members = presetCollection(category.members.map(function(id) {
67883                 return all.item(id);
67884             }));
67885
67886
67887             category.geometry = category.members.collection.reduce(function(geometries, preset) {
67888                 for (var index in preset.geometry) {
67889                     var geometry = preset.geometry[index];
67890                     if (geometries.indexOf(geometry) === -1) {
67891                         geometries.push(geometry);
67892                     }
67893                 }
67894                 return geometries;
67895             }, []);
67896
67897
67898             category.matchGeometry = function(geometry) {
67899                 return category.geometry.indexOf(geometry) >= 0;
67900             };
67901
67902
67903             category.matchScore = function() {
67904                 return -1;
67905             };
67906
67907
67908             category.name = function() {
67909                 return t('presets.categories.' + id + '.name', {'default': id});
67910             };
67911
67912
67913             category.terms = function() {
67914                 return [];
67915             };
67916
67917
67918             return category;
67919         }
67920
67921         function presetField(id, field) {
67922             field = Object.assign({}, field);   // shallow copy
67923
67924             field.id = id;
67925
67926             // for use in classes, element ids, css selectors
67927             field.safeid = id.replace(/[^_a-zA-Z0-9\-]/g, '_');
67928
67929             field.matchGeometry = function(geometry) {
67930                 return !field.geometry || field.geometry === geometry;
67931             };
67932
67933
67934             field.t = function(scope, options) {
67935                 return t('presets.fields.' + id + '.' + scope, options);
67936             };
67937
67938
67939             field.label = function() {
67940                 return field.overrideLabel || field.t('label', {'default': id});
67941             };
67942
67943
67944             var placeholder = field.placeholder;
67945             field.placeholder = function() {
67946                 return field.t('placeholder', {'default': placeholder});
67947             };
67948
67949
67950             field.originalTerms = (field.terms || []).join();
67951
67952             field.terms = function() {
67953                 return field.t('terms', { 'default': field.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
67954             };
67955
67956
67957             return field;
67958         }
67959
67960         function presetPreset(id, preset, fields, visible, rawPresets) {
67961             preset = Object.assign({}, preset);   // shallow copy
67962
67963             preset.id = id;
67964
67965             preset.parentPresetID = function() {
67966                 var endIndex = preset.id.lastIndexOf('/');
67967                 if (endIndex < 0) return null;
67968
67969                 return preset.id.substring(0, endIndex);
67970             };
67971
67972
67973             // For a preset without fields, use the fields of the parent preset.
67974             // Replace {preset} placeholders with the fields of the specified presets.
67975             function resolveFieldInheritance() {
67976
67977                 // Skip `fields` for the keys which define the preset.
67978                 // These are usually `typeCombo` fields like `shop=*`
67979                 function shouldInheritFieldWithID(fieldID) {
67980                     var f = fields[fieldID];
67981                     if (f.key) {
67982                         if (preset.tags[f.key] !== undefined &&
67983                             // inherit anyway if multiple values are allowed or just a checkbox
67984                             f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
67985                             return false;
67986                         }
67987                     }
67988                     return true;
67989                 }
67990
67991                 // returns an array of field IDs to inherit from the given presetID, if found
67992                 function inheritedFieldIDs(presetID, prop) {
67993                     if (!presetID) return null;
67994
67995                     var inheritPreset = rawPresets[presetID];
67996                     if (!inheritPreset) return null;
67997
67998                     var inheritFieldIDs = inheritPreset[prop] || [];
67999
68000                     if (prop === 'fields') {
68001                         inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
68002                     }
68003
68004                     return inheritFieldIDs;
68005                 }
68006
68007
68008                 ['fields', 'moreFields'].forEach(function(prop) {
68009                     var fieldIDs = [];
68010                     if (preset[prop] && preset[prop].length) {    // fields were defined
68011                         preset[prop].forEach(function(fieldID) {
68012                             var match = fieldID.match(/\{(.*)\}/);
68013                             if (match !== null) {        // presetID wrapped in braces {}
68014                                 var inheritIDs = inheritedFieldIDs(match[1], prop);
68015                                 if (inheritIDs !== null) {
68016                                     fieldIDs = fieldIDs.concat(inheritIDs);
68017                                 } else {
68018                                     /* eslint-disable no-console */
68019                                     console.log('Cannot resolve presetID ' + match[0] +
68020                                         ' found in ' + preset.id + ' ' + prop);
68021                                     /* eslint-enable no-console */
68022                                 }
68023                             } else {
68024                                 fieldIDs.push(fieldID);  // no braces - just a normal field
68025                             }
68026                         });
68027
68028                     } else {  // no fields defined, so use the parent's if possible
68029                         fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
68030                     }
68031                     // resolve duplicate fields
68032                     fieldIDs = utilArrayUniq(fieldIDs);
68033
68034                     // update this preset with the results
68035                     preset[prop] = fieldIDs;
68036
68037                     // update the raw object to allow for multiple levels of inheritance
68038                     rawPresets[preset.id][prop] = fieldIDs;
68039                 });
68040             }
68041
68042             if (rawPresets) {
68043                 resolveFieldInheritance();
68044             }
68045
68046             preset.fields = (preset.fields || []).map(getFields);
68047             preset.moreFields = (preset.moreFields || []).map(getFields);
68048             preset.geometry = (preset.geometry || []);
68049
68050             visible = visible || false;
68051
68052             function getFields(f) {
68053                 return fields[f];
68054             }
68055
68056
68057             preset.matchGeometry = function(geometry) {
68058                 return preset.geometry.indexOf(geometry) >= 0;
68059             };
68060
68061
68062             preset.originalScore = preset.matchScore || 1;
68063
68064
68065             preset.matchScore = function(entityTags) {
68066                 var tags = preset.tags;
68067                 var seen = {};
68068                 var score = 0;
68069                 var k;
68070
68071                 // match on tags
68072                 for (k in tags) {
68073                     seen[k] = true;
68074                     if (entityTags[k] === tags[k]) {
68075                         score += preset.originalScore;
68076                     } else if (tags[k] === '*' && k in entityTags) {
68077                         score += preset.originalScore / 2;
68078                     } else {
68079                         return -1;
68080                     }
68081                 }
68082
68083                 // boost score for additional matches in addTags - #6802
68084                 var addTags = preset.addTags;
68085                 for (k in addTags) {
68086                     if (!seen[k] && entityTags[k] === addTags[k]) {
68087                         score += preset.originalScore;
68088                     }
68089                 }
68090
68091                 return score;
68092             };
68093
68094
68095             var _textCache = {};
68096
68097             preset.t = function(scope, options) {
68098                 var textID = 'presets.presets.' + id + '.' + scope;
68099
68100                 if (_textCache[textID]) return _textCache[textID];
68101
68102                 var text = t(textID, options);
68103                 _textCache[textID] = text;
68104                 return text;
68105             };
68106
68107
68108             preset.originalName = preset.name || '';
68109
68110
68111             preset.name = function() {
68112                 if (preset.suggestion) {
68113                     var path = id.split('/');
68114                     path.pop();  // remove brand name
68115                     // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
68116                     return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
68117                 }
68118                 return preset.t('name', { 'default': preset.originalName });
68119             };
68120
68121
68122             preset.originalTerms = (preset.terms || []).join();
68123
68124
68125             preset.terms = function() {
68126                 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
68127             };
68128
68129
68130             preset.isFallback = function() {
68131                 var tagCount = Object.keys(preset.tags).length;
68132                 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
68133             };
68134
68135             preset.visible = function(val) {
68136                 if (!arguments.length) return visible;
68137                 visible = val;
68138                 return visible;
68139             };
68140
68141
68142             var reference = preset.reference || {};
68143             preset.reference = function(geometry) {
68144                 // Lookup documentation on Wikidata...
68145                 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
68146                 if (qid) {
68147                     return { qid: qid };
68148                 }
68149
68150                 // Lookup documentation on OSM Wikibase...
68151                 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
68152                 var value = reference.value || preset.tags[key];
68153
68154                 if (geometry === 'relation' && key === 'type') {
68155                     if (value in preset.tags) {
68156                         key = value;
68157                         value = preset.tags[key];
68158                     } else {
68159                         return { rtype: value };
68160                     }
68161                 }
68162
68163                 if (value === '*') {
68164                     return { key: key };
68165                 } else {
68166                     return { key: key, value: value };
68167                 }
68168             };
68169
68170
68171             preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
68172             preset.unsetTags = function(tags, geometry) {
68173                 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
68174
68175                 for (var f in preset.fields) {
68176                     var field = preset.fields[f];
68177                     if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
68178                         delete tags[field.key];
68179                     }
68180                 }
68181
68182                 delete tags.area;
68183                 return tags;
68184             };
68185
68186
68187             preset.addTags = preset.addTags || preset.tags || {};
68188             preset.setTags = function(tags, geometry, skipFieldDefaults) {
68189                 var addTags = preset.addTags;
68190                 var k;
68191
68192                 tags = Object.assign({}, tags);   // shallow copy
68193
68194                 for (k in addTags) {
68195                     if (addTags[k] === '*') {
68196                         tags[k] = 'yes';
68197                     } else {
68198                         tags[k] = addTags[k];
68199                     }
68200                 }
68201
68202                 // Add area=yes if necessary.
68203                 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
68204                 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
68205                 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
68206                 if (!addTags.hasOwnProperty('area')) {
68207                     delete tags.area;
68208                     if (geometry === 'area') {
68209                         var needsAreaTag = true;
68210                         if (preset.geometry.indexOf('line') === -1) {
68211                             for (k in addTags) {
68212                                 if (k in osmAreaKeys) {
68213                                     needsAreaTag = false;
68214                                     break;
68215                                 }
68216                             }
68217                         }
68218                         if (needsAreaTag) {
68219                             tags.area = 'yes';
68220                         }
68221                     }
68222                 }
68223                 if (geometry && !skipFieldDefaults) {
68224                     for (var f in preset.fields) {
68225                         var field = preset.fields[f];
68226                         if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
68227                             tags[field.key] = field.default;
68228                         }
68229                     }
68230                 }
68231
68232                 return tags;
68233             };
68234
68235
68236             return preset;
68237         }
68238
68239         function presetIndex(context) {
68240             // a presetCollection with methods for
68241             // loading new data and returning defaults
68242
68243             var dispatch$1 = dispatch('recentsChange', 'favoritePreset');
68244
68245             var all = presetCollection([]);
68246             var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
68247             var _fields = {};
68248             var _universal = [];
68249             var _favorites, _recents;
68250             // presets that the user can add
68251             var _addablePresetIDs;
68252
68253             // Index of presets by (geometry, tag key).
68254             var _index = {
68255                 point: {},
68256                 vertex: {},
68257                 line: {},
68258                 area: {},
68259                 relation: {}
68260             };
68261
68262             all.match = function(entity, resolver) {
68263                 return resolver.transient(entity, 'presetMatch', function() {
68264                     var geometry = entity.geometry(resolver);
68265
68266                     // Treat entities on addr:interpolation lines as points, not vertices - #3241
68267                     if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
68268                         geometry = 'point';
68269                     }
68270
68271                     return all.matchTags(entity.tags, geometry);
68272                 });
68273             };
68274
68275             all.matchTags = function(tags, geometry) {
68276
68277                 var address;
68278                 var geometryMatches = _index[geometry];
68279                 var best = -1;
68280                 var match;
68281
68282                 for (var k in tags) {
68283                     // If any part of an address is present,
68284                     // allow fallback to "Address" preset - #4353
68285                     if (/^addr:/.test(k) && geometryMatches['addr:*']) {
68286                         address = geometryMatches['addr:*'][0];
68287                     }
68288
68289                     var keyMatches = geometryMatches[k];
68290                     if (!keyMatches) continue;
68291
68292                     for (var i = 0; i < keyMatches.length; i++) {
68293                         var score = keyMatches[i].matchScore(tags);
68294                         if (score > best) {
68295                             best = score;
68296                             match = keyMatches[i];
68297                         }
68298                     }
68299
68300                 }
68301
68302                 if (address && (!match || match.isFallback())) {
68303                     match = address;
68304                 }
68305                 return match || all.fallback(geometry);
68306             };
68307
68308             all.allowsVertex = function(entity, resolver) {
68309                 if (entity.type !== 'node') return false;
68310                 if (Object.keys(entity.tags).length === 0) return true;
68311
68312                 return resolver.transient(entity, 'vertexMatch', function() {
68313                     // address lines allow vertices to act as standalone points
68314                     if (entity.isOnAddressLine(resolver)) return true;
68315
68316                     var geometries = osmNodeGeometriesForTags(entity.tags);
68317                     if (geometries.vertex) return true;
68318                     if (geometries.point) return false;
68319                     // allow vertices for unspecified points
68320                     return true;
68321                 });
68322             };
68323
68324
68325             // Because of the open nature of tagging, iD will never have a complete
68326             // list of tags used in OSM, so we want it to have logic like "assume
68327             // that a closed way with an amenity tag is an area, unless the amenity
68328             // is one of these specific types". This function computes a structure
68329             // that allows testing of such conditions, based on the presets designated
68330             // as as supporting (or not supporting) the area geometry.
68331             //
68332             // The returned object L is a whitelist/blacklist of tags. A closed way
68333             // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
68334             // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
68335             // and the subkeys form the blacklist.
68336             all.areaKeys = function() {
68337                 var areaKeys = {};
68338                 var ignore = ['barrier', 'highway', 'footway', 'railway', 'type'];  // probably a line..
68339
68340                 // ignore name-suggestion-index and deprecated presets
68341                 var presets = all.collection.filter(function(p) {
68342                     return !p.suggestion && !p.replacement;
68343                 });
68344
68345                 // whitelist
68346                 presets.forEach(function(d) {
68347                     for (var key in d.tags) break;
68348                     if (!key) return;
68349                     if (ignore.indexOf(key) !== -1) return;
68350
68351                     if (d.geometry.indexOf('area') !== -1) {    // probably an area..
68352                         areaKeys[key] = areaKeys[key] || {};
68353                     }
68354                 });
68355
68356                 // blacklist
68357                 presets.forEach(function(d) {
68358                     for (var key in d.addTags) {
68359                         // examine all addTags to get a better sense of what can be tagged on lines - #6800
68360                         var value = d.addTags[key];
68361                         if (key in areaKeys &&                      // probably an area...
68362                             d.geometry.indexOf('line') !== -1 &&    // but sometimes a line
68363                             value !== '*') {
68364                             areaKeys[key][value] = true;
68365                         }
68366                     }
68367                 });
68368
68369                 return areaKeys;
68370             };
68371
68372             all.pointTags = function() {
68373                 return all.collection.reduce(function(pointTags, d) {
68374                     // ignore name-suggestion-index, deprecated, and generic presets
68375                     if (d.suggestion || d.replacement || d.searchable === false) return pointTags;
68376
68377                     // only care about the primary tag
68378                     for (var key in d.tags) break;
68379                     if (!key) return pointTags;
68380
68381                     // if this can be a point
68382                     if (d.geometry.indexOf('point') !== -1) {
68383                         pointTags[key] = pointTags[key] || {};
68384                         pointTags[key][d.tags[key]] = true;
68385                     }
68386                     return pointTags;
68387                 }, {});
68388             };
68389
68390             all.vertexTags = function() {
68391                 return all.collection.reduce(function(vertexTags, d) {
68392                     // ignore name-suggestion-index, deprecated, and generic presets
68393                     if (d.suggestion || d.replacement || d.searchable === false) return vertexTags;
68394
68395                     // only care about the primary tag
68396                     for (var key in d.tags) break;
68397                     if (!key) return vertexTags;
68398
68399                     // if this can be a vertex
68400                     if (d.geometry.indexOf('vertex') !== -1) {
68401                         vertexTags[key] = vertexTags[key] || {};
68402                         vertexTags[key][d.tags[key]] = true;
68403                     }
68404                     return vertexTags;
68405                 }, {});
68406             };
68407
68408             all.build = function(d, visible) {
68409                 if (d.fields) {
68410                     Object.keys(d.fields).forEach(function(id) {
68411                         var f = d.fields[id];
68412                         _fields[id] = presetField(id, f);
68413                         if (f.universal) {
68414                             _universal.push(_fields[id]);
68415                         }
68416                     });
68417                 }
68418
68419                 if (d.presets) {
68420                     var rawPresets = d.presets;
68421                     Object.keys(d.presets).forEach(function(id) {
68422                         var p = d.presets[id];
68423                         var existing = all.index(id);
68424                         var isVisible = typeof visible === 'function' ? visible(id, p) : visible;
68425                         if (existing !== -1) {
68426                             all.collection[existing] = presetPreset(id, p, _fields, isVisible, rawPresets);
68427                         } else {
68428                             all.collection.push(presetPreset(id, p, _fields, isVisible, rawPresets));
68429                         }
68430                     });
68431                 }
68432
68433                 if (d.categories) {
68434                     Object.keys(d.categories).forEach(function(id) {
68435                         var c = d.categories[id];
68436                         var existing = all.index(id);
68437                         if (existing !== -1) {
68438                             all.collection[existing] = presetCategory(id, c, all);
68439                         } else {
68440                             all.collection.push(presetCategory(id, c, all));
68441                         }
68442                     });
68443                 }
68444
68445                 var getItem = (all.item).bind(all);
68446                 if (_addablePresetIDs) {
68447                     ['area', 'line', 'point', 'vertex', 'relation'].forEach(function(geometry) {
68448                         _defaults[geometry] = presetCollection(_addablePresetIDs.map(getItem).filter(function(preset) {
68449                             return preset.geometry.indexOf(geometry) !== -1;
68450                         }));
68451                     });
68452                 } else if (d.defaults) {
68453                     _defaults = {
68454                         area: presetCollection(d.defaults.area.map(getItem)),
68455                         line: presetCollection(d.defaults.line.map(getItem)),
68456                         point: presetCollection(d.defaults.point.map(getItem)),
68457                         vertex: presetCollection(d.defaults.vertex.map(getItem)),
68458                         relation: presetCollection(d.defaults.relation.map(getItem))
68459                     };
68460                 }
68461
68462                 for (var i = 0; i < all.collection.length; i++) {
68463                     var preset = all.collection[i];
68464                     var geometry = preset.geometry;
68465
68466                     for (var j = 0; j < geometry.length; j++) {
68467                         var g = _index[geometry[j]];
68468                         for (var k in preset.tags) {
68469                             (g[k] = g[k] || []).push(preset);
68470                         }
68471                     }
68472                 }
68473                 return all;
68474             };
68475
68476             all.init = function(addablePresetIDs) {
68477                 all.collection = [];
68478                 _favorites = null;
68479                 _recents = null;
68480                 _addablePresetIDs = addablePresetIDs;
68481                 _fields = {};
68482                 _universal = [];
68483                 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
68484
68485                 var show = true;
68486                 if (addablePresetIDs) {
68487                     show = function(presetID) {
68488                         return addablePresetIDs.indexOf(presetID) !== -1;
68489                     };
68490                 }
68491
68492                 return all.build(data.presets, show);
68493             };
68494
68495
68496             all.reset = function() {
68497                 all.collection = [];
68498                 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
68499                 _fields = {};
68500                 _universal = [];
68501                 _favorites = null;
68502                 _recents = null;
68503
68504                 // Index of presets by (geometry, tag key).
68505                 _index = {
68506                     point: {},
68507                     vertex: {},
68508                     line: {},
68509                     area: {},
68510                     relation: {}
68511                 };
68512
68513                 return all;
68514             };
68515
68516             all.fromExternal = function(external, done) {
68517                 all.reset();
68518                 d3_json(external)
68519                     .then(function(externalPresets) {
68520                         all.build(data.presets, false);    // make default presets hidden to begin
68521                         all.build(externalPresets, true);  // make the external visible
68522                     })
68523                     .catch(function() {
68524                         all.init();
68525                     })
68526                     .finally(function() {
68527                         done(all);
68528                     });
68529             };
68530
68531             all.field = function(id) {
68532                 return _fields[id];
68533             };
68534
68535             all.universal = function() {
68536                 return _universal;
68537             };
68538
68539             all.defaults = function(geometry, n) {
68540                 var rec = [];
68541                 if (!context.inIntro()) {
68542                     rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
68543                 }
68544                 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
68545                 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
68546             };
68547
68548             all.recent = function() {
68549                 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
68550                     return d.preset;
68551                 })));
68552             };
68553
68554             function RibbonItem(preset, geometry, source) {
68555                 var item = {};
68556                 item.preset = preset;
68557                 item.geometry = geometry;
68558                 item.source = source;
68559
68560                 item.isFavorite = function() {
68561                     return item.source === 'favorite';
68562                 };
68563                 item.isRecent = function() {
68564                     return item.source === 'recent';
68565                 };
68566                 item.matches = function(preset, geometry) {
68567                     return item.preset.id === preset.id && item.geometry === geometry;
68568                 };
68569                 item.minified = function() {
68570                     return {
68571                         pID: item.preset.id,
68572                         geom: item.geometry
68573                     };
68574                 };
68575                 return item;
68576             }
68577
68578             function ribbonItemForMinified(d, source) {
68579                 if (d && d.pID && d.geom) {
68580                     var preset = all.item(d.pID);
68581                     if (!preset) return null;
68582
68583                     var geom = d.geom;
68584                     // treat point and vertex features as one geometry
68585                     if (geom === 'vertex') geom = 'point';
68586
68587                     // iD's presets could have changed since this was saved,
68588                     // so make sure it's still valid.
68589                     if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
68590                         return RibbonItem(preset, geom, source);
68591                     }
68592                 }
68593                 return null;
68594             }
68595
68596             function setFavorites(items) {
68597                 _favorites = items;
68598                 var minifiedItems = items.map(function(d) { return d.minified(); });
68599                 context.storage('preset_favorites', JSON.stringify(minifiedItems));
68600
68601                 // call update
68602                 dispatch$1.call('favoritePreset');
68603             }
68604
68605             all.getFavorites = function() {
68606                 if (!_favorites) {
68607                     // fetch from local storage
68608                     _favorites = (JSON.parse(context.storage('preset_favorites')) || [
68609                             // use the generic presets as the default favorites
68610                             { pID: 'point', geom: 'point'},
68611                             { pID: 'line', geom: 'line'},
68612                             { pID: 'area', geom: 'area'}
68613                         ]).reduce(function(output, d) {
68614                             var item = ribbonItemForMinified(d, 'favorite');
68615                             if (item) output.push(item);
68616                             return output;
68617                         }, []);
68618                 }
68619                 return _favorites;
68620             };
68621
68622             function setRecents(items) {
68623                 _recents = items;
68624                 var minifiedItems = items.map(function(d) { return d.minified(); });
68625                 context.storage('preset_recents', JSON.stringify(minifiedItems));
68626
68627                 dispatch$1.call('recentsChange');
68628             }
68629
68630             all.getRecents = function() {
68631                 if (!_recents) {
68632                     // fetch from local storage
68633                     _recents = (JSON.parse(context.storage('preset_recents')) || [])
68634                         .reduce(function(output, d) {
68635                             var item = ribbonItemForMinified(d, 'recent');
68636                             if (item) output.push(item);
68637                             return output;
68638                         }, []);
68639                 }
68640                 return _recents;
68641             };
68642
68643             all.toggleFavorite = function(preset, geometry) {
68644                 geometry = all.fallback(geometry).id;
68645                 var favs = all.getFavorites();
68646                 var favorite = all.favoriteMatching(preset, geometry);
68647                 if (favorite) {
68648                     favs.splice(favs.indexOf(favorite), 1);
68649                 } else {
68650                     // only allow 10 favorites
68651                     if (favs.length === 10) {
68652                         // remove the last favorite (last in, first out)
68653                         favs.pop();
68654                     }
68655                     // append array
68656                     favs.push(RibbonItem(preset, geometry, 'favorite'));
68657                 }
68658                 setFavorites(favs);
68659             };
68660
68661             all.removeFavorite = function(preset, geometry) {
68662                 geometry = all.fallback(geometry).id;
68663                 var item = all.favoriteMatching(preset, geometry);
68664                 if (item) {
68665                     var items = all.getFavorites();
68666                     items.splice(items.indexOf(item), 1);
68667                     setFavorites(items);
68668                 }
68669             };
68670
68671             all.removeRecent = function(preset, geometry) {
68672                 var item = all.recentMatching(preset, geometry);
68673                 if (item) {
68674                     var items = all.getRecents();
68675                     items.splice(items.indexOf(item), 1);
68676                     setRecents(items);
68677                 }
68678             };
68679
68680             all.favoriteMatching = function(preset, geometry) {
68681                 geometry = all.fallback(geometry).id;
68682                 var favs = all.getFavorites();
68683                 for (var index in favs) {
68684                     if (favs[index].matches(preset, geometry)) {
68685                         return favs[index];
68686                     }
68687                 }
68688                 return null;
68689             };
68690             all.recentMatching = function(preset, geometry) {
68691                 geometry = all.fallback(geometry).id;
68692                 var items = all.getRecents();
68693                 for (var index in items) {
68694                     if (items[index].matches(preset, geometry)) {
68695                         return items[index];
68696                     }
68697                 }
68698                 return null;
68699             };
68700
68701             all.moveItem = function(items, fromIndex, toIndex) {
68702                 if (fromIndex === toIndex ||
68703                     fromIndex < 0 || toIndex < 0 ||
68704                     fromIndex >= items.length || toIndex >= items.length) return null;
68705                 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
68706                 return items;
68707             };
68708
68709             all.moveFavorite = function(fromIndex, toIndex) {
68710                 var items = all.moveItem(all.getFavorites(), fromIndex, toIndex);
68711                 if (items) setFavorites(items);
68712             };
68713
68714             all.moveRecent = function(item, beforeItem) {
68715                 var recents = all.getRecents();
68716                 var fromIndex = recents.indexOf(item);
68717                 var toIndex = recents.indexOf(beforeItem);
68718                 var items = all.moveItem(recents, fromIndex, toIndex);
68719                 if (items) setRecents(items);
68720             };
68721
68722             all.setMostRecent = function(preset, geometry) {
68723                 if (context.inIntro()) return;
68724                 if (preset.searchable === false) return;
68725
68726                 geometry = all.fallback(geometry).id;
68727
68728                 var items = all.getRecents();
68729                 var item = all.recentMatching(preset, geometry);
68730                 if (item) {
68731                     items.splice(items.indexOf(item), 1);
68732                 } else {
68733                     item = RibbonItem(preset, geometry, 'recent');
68734                 }
68735                 // allow 30 recents
68736                 if (items.length === 30) {
68737                     // remove the last favorite (first in, first out)
68738                     items.pop();
68739                 }
68740                 // prepend array
68741                 items.unshift(item);
68742                 setRecents(items);
68743             };
68744
68745             return utilRebind(all, dispatch$1, 'on');
68746         }
68747
68748         function localeDateString(s) {
68749             if (!s) return null;
68750             var detected = utilDetect();
68751             var options = { day: 'numeric', month: 'short', year: 'numeric' };
68752             var d = new Date(s);
68753             if (isNaN(d.getTime())) return null;
68754             return d.toLocaleDateString(detected.locale, options);
68755         }
68756
68757         function vintageRange(vintage) {
68758             var s;
68759             if (vintage.start || vintage.end) {
68760                 s = (vintage.start || '?');
68761                 if (vintage.start !== vintage.end) {
68762                     s += ' - ' + (vintage.end || '?');
68763                 }
68764             }
68765             return s;
68766         }
68767
68768
68769         function rendererBackgroundSource(data) {
68770             var source = Object.assign({}, data);   // shallow copy
68771             var offset = [0, 0];
68772             var name = source.name;
68773             var description = source.description;
68774             var best = !!source.best;
68775             var template = source.template;
68776
68777             source.tileSize = data.tileSize || 256;
68778             source.zoomExtent = data.zoomExtent || [0, 22];
68779             source.overzoom = data.overzoom !== false;
68780
68781             source.offset = function(_) {
68782                 if (!arguments.length) return offset;
68783                 offset = _;
68784                 return source;
68785             };
68786
68787
68788             source.nudge = function(val, zoomlevel) {
68789                 offset[0] += val[0] / Math.pow(2, zoomlevel);
68790                 offset[1] += val[1] / Math.pow(2, zoomlevel);
68791                 return source;
68792             };
68793
68794
68795             source.name = function() {
68796                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68797                 return t('imagery.' + id_safe + '.name', { default: name });
68798             };
68799
68800
68801             source.description = function() {
68802                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
68803                 return t('imagery.' + id_safe + '.description', { default: description });
68804             };
68805
68806
68807             source.best = function() {
68808                 return best;
68809             };
68810
68811
68812             source.area = function() {
68813                 if (!data.polygon) return Number.MAX_VALUE;  // worldwide
68814                 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
68815                 return isNaN(area) ? 0 : area;
68816             };
68817
68818
68819             source.imageryUsed = function() {
68820                 return name || source.id;
68821             };
68822
68823
68824             source.template = function(_) {
68825                 if (!arguments.length) return template;
68826                 if (source.id === 'custom') template = _;
68827                 return source;
68828             };
68829
68830
68831             source.url = function(coord) {
68832                 if (this.type === 'wms') {
68833                     var tileToProjectedCoords = (function(x, y, z) {
68834                         //polyfill for IE11, PhantomJS
68835                         var sinh = Math.sinh || function(x) {
68836                             var y = Math.exp(x);
68837                             return (y - 1 / y) / 2;
68838                         };
68839
68840                         var zoomSize = Math.pow(2, z);
68841                         var lon = x / zoomSize * Math.PI * 2 - Math.PI;
68842                         var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
68843
68844                         switch (this.projection) {
68845                             case 'EPSG:4326':
68846                                 return {
68847                                     x: lon * 180 / Math.PI,
68848                                     y: lat * 180 / Math.PI
68849                                 };
68850                             default: // EPSG:3857 and synonyms
68851                                 var mercCoords = mercatorRaw(lon, lat);
68852                                 return {
68853                                     x: 20037508.34 / Math.PI * mercCoords[0],
68854                                     y: 20037508.34 / Math.PI * mercCoords[1]
68855                                 };
68856                         }
68857                     }).bind(this);
68858
68859                     var tileSize = this.tileSize;
68860                     var projection = this.projection;
68861                     var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
68862                     var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
68863                     return template.replace(/\{(\w+)\}/g, function (token, key) {
68864                       switch (key) {
68865                         case 'width':
68866                         case 'height':
68867                           return tileSize;
68868                         case 'proj':
68869                           return projection;
68870                         case 'wkid':
68871                           return projection.replace(/^EPSG:/, '');
68872                         case 'bbox':
68873                           return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
68874                         case 'w':
68875                           return minXmaxY.x;
68876                         case 's':
68877                           return maxXminY.y;
68878                         case 'n':
68879                           return maxXminY.x;
68880                         case 'e':
68881                           return minXmaxY.y;
68882                         default:
68883                           return token;
68884                       }
68885                     });
68886                 }
68887                 return template
68888                     .replace('{x}', coord[0])
68889                     .replace('{y}', coord[1])
68890                     // TMS-flipped y coordinate
68891                     .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
68892                     .replace(/\{z(oom)?\}/, coord[2])
68893                     .replace(/\{switch:([^}]+)\}/, function(s, r) {
68894                         var subdomains = r.split(',');
68895                         return subdomains[(coord[0] + coord[1]) % subdomains.length];
68896                     })
68897                     .replace('{u}', function() {
68898                         var u = '';
68899                         for (var zoom = coord[2]; zoom > 0; zoom--) {
68900                             var b = 0;
68901                             var mask = 1 << (zoom - 1);
68902                             if ((coord[0] & mask) !== 0) b++;
68903                             if ((coord[1] & mask) !== 0) b += 2;
68904                             u += b.toString();
68905                         }
68906                         return u;
68907                     });
68908             };
68909
68910
68911             source.validZoom = function(z) {
68912                 return source.zoomExtent[0] <= z &&
68913                     (source.overzoom || source.zoomExtent[1] > z);
68914             };
68915
68916
68917             source.isLocatorOverlay = function() {
68918                 return source.id === 'mapbox_locator_overlay';
68919             };
68920
68921
68922             /* hides a source from the list, but leaves it available for use */
68923             source.isHidden = function() {
68924                 return source.id === 'DigitalGlobe-Premium-vintage' ||
68925                     source.id === 'DigitalGlobe-Standard-vintage';
68926             };
68927
68928
68929             source.copyrightNotices = function() {};
68930
68931
68932             source.getMetadata = function(center, tileCoord, callback) {
68933                 var vintage = {
68934                     start: localeDateString(source.startDate),
68935                     end: localeDateString(source.endDate)
68936                 };
68937                 vintage.range = vintageRange(vintage);
68938
68939                 var metadata = { vintage: vintage };
68940                 callback(null, metadata);
68941             };
68942
68943
68944             return source;
68945         }
68946
68947
68948         rendererBackgroundSource.Bing = function(data, dispatch) {
68949             // http://msdn.microsoft.com/en-us/library/ff701716.aspx
68950             // http://msdn.microsoft.com/en-us/library/ff701701.aspx
68951
68952             data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
68953
68954             var bing = rendererBackgroundSource(data);
68955             // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
68956             var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q';    // iD
68957
68958
68959             var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
68960             var cache = {};
68961             var inflight = {};
68962             var providers = [];
68963
68964             d3_json(url)
68965                 .then(function(json) {
68966                     providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
68967                         return {
68968                             attribution: provider.attribution,
68969                             areas: provider.coverageAreas.map(function(area) {
68970                                 return {
68971                                     zoom: [area.zoomMin, area.zoomMax],
68972                                     extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
68973                                 };
68974                             })
68975                         };
68976                     });
68977                     dispatch.call('change');
68978                 })
68979                 .catch(function() {
68980                     /* ignore */
68981                 });
68982
68983
68984             bing.copyrightNotices = function(zoom, extent) {
68985                 zoom = Math.min(zoom, 21);
68986                 return providers.filter(function(provider) {
68987                     return provider.areas.some(function(area) {
68988                         return extent.intersects(area.extent) &&
68989                             area.zoom[0] <= zoom &&
68990                             area.zoom[1] >= zoom;
68991                     });
68992                 }).map(function(provider) {
68993                     return provider.attribution;
68994                 }).join(', ');
68995             };
68996
68997
68998             bing.getMetadata = function(center, tileCoord, callback) {
68999                 var tileID = tileCoord.slice(0, 3).join('/');
69000                 var zoom = Math.min(tileCoord[2], 21);
69001                 var centerPoint = center[1] + ',' + center[0];  // lat,lng
69002                 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
69003                         '?zl=' + zoom + '&key=' + key;
69004
69005                 if (inflight[tileID]) return;
69006
69007                 if (!cache[tileID]) {
69008                     cache[tileID] = {};
69009                 }
69010                 if (cache[tileID] && cache[tileID].metadata) {
69011                     return callback(null, cache[tileID].metadata);
69012                 }
69013
69014                 inflight[tileID] = true;
69015                 d3_json(url)
69016                     .then(function(result) {
69017                         delete inflight[tileID];
69018                         if (!result) {
69019                             throw new Error('Unknown Error');
69020                         }
69021                         var vintage = {
69022                             start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
69023                             end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
69024                         };
69025                         vintage.range = vintageRange(vintage);
69026
69027                         var metadata = { vintage: vintage };
69028                         cache[tileID].metadata = metadata;
69029                         if (callback) callback(null, metadata);
69030                     })
69031                     .catch(function(err) {
69032                         delete inflight[tileID];
69033                         if (callback) callback(err.message);
69034                     });
69035             };
69036
69037
69038             bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
69039
69040
69041             return bing;
69042         };
69043
69044
69045
69046         rendererBackgroundSource.Esri = function(data) {
69047             // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
69048             if (data.template.match(/blankTile/) === null) {
69049                 data.template = data.template + '?blankTile=false';
69050             }
69051
69052             var esri = rendererBackgroundSource(data);
69053             var cache = {};
69054             var inflight = {};
69055             var _prevCenter;
69056
69057             // use a tilemap service to set maximum zoom for esri tiles dynamically
69058             // https://developers.arcgis.com/documentation/tiled-elevation-service/
69059             esri.fetchTilemap = function(center) {
69060                 // skip if we have already fetched a tilemap within 5km
69061                 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) return;
69062                 _prevCenter = center;
69063
69064                 // tiles are available globally to zoom level 19, afterward they may or may not be present
69065                 var z = 20;
69066
69067                 // first generate a random url using the template
69068                 var dummyUrl = esri.url([1,2,3]);
69069
69070                 // calculate url z/y/x from the lat/long of the center of the map
69071                 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
69072                 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)));
69073
69074                 // fetch an 8x8 grid to leverage cache
69075                 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
69076
69077                 // make the request and introspect the response from the tilemap server
69078                 d3_json(tilemapUrl)
69079                     .then(function(tilemap) {
69080                         if (!tilemap) {
69081                             throw new Error('Unknown Error');
69082                         }
69083                         var hasTiles = true;
69084                         for (var i = 0; i < tilemap.data.length; i++) {
69085                             // 0 means an individual tile in the grid doesn't exist
69086                             if (!tilemap.data[i]) {
69087                                 hasTiles = false;
69088                                 break;
69089                             }
69090                         }
69091
69092                         // if any tiles are missing at level 20 we restrict maxZoom to 19
69093                         esri.zoomExtent[1] = (hasTiles ? 22 : 19);
69094                     })
69095                     .catch(function() {
69096                         /* ignore */
69097                     });
69098             };
69099
69100
69101             esri.getMetadata = function(center, tileCoord, callback) {
69102                 var tileID = tileCoord.slice(0, 3).join('/');
69103                 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
69104                 var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
69105                 var unknown = t('info_panels.background.unknown');
69106                 var metadataLayer;
69107                 var vintage = {};
69108                 var metadata = {};
69109
69110                 if (inflight[tileID]) return;
69111
69112                 switch (true) {
69113                     case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
69114                         metadataLayer = 4;
69115                         break;
69116                     case zoom >= 19:
69117                         metadataLayer = 3;
69118                         break;
69119                     case zoom >= 17:
69120                         metadataLayer = 2;
69121                         break;
69122                     case zoom >= 13:
69123                         metadataLayer = 0;
69124                         break;
69125                     default:
69126                         metadataLayer = 99;
69127                 }
69128
69129                 var url;
69130                 // build up query using the layer appropriate to the current zoom
69131                 if (esri.id === 'EsriWorldImagery') {
69132                     url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
69133                 } else if (esri.id === 'EsriWorldImageryClarity') {
69134                     url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
69135                 }
69136
69137                 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
69138
69139                 if (!cache[tileID]) {
69140                     cache[tileID] = {};
69141                 }
69142                 if (cache[tileID] && cache[tileID].metadata) {
69143                     return callback(null, cache[tileID].metadata);
69144                 }
69145
69146                 // accurate metadata is only available >= 13
69147                 if (metadataLayer === 99) {
69148                     vintage = {
69149                         start: null,
69150                         end: null,
69151                         range: null
69152                     };
69153                     metadata = {
69154                         vintage: null,
69155                         source: unknown,
69156                         description: unknown,
69157                         resolution: unknown,
69158                         accuracy: unknown
69159                     };
69160
69161                     callback(null, metadata);
69162
69163                 } else {
69164                     inflight[tileID] = true;
69165                     d3_json(url)
69166                         .then(function(result) {
69167                             delete inflight[tileID];
69168                             if (!result) {
69169                                 throw new Error('Unknown Error');
69170                             } else if (result.features && result.features.length < 1) {
69171                                 throw new Error('No Results');
69172                             } else if (result.error && result.error.message) {
69173                                 throw new Error(result.error.message);
69174                             }
69175
69176                             // pass through the discrete capture date from metadata
69177                             var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
69178                             vintage = {
69179                                 start: captureDate,
69180                                 end: captureDate,
69181                                 range: captureDate
69182                             };
69183                             metadata = {
69184                                 vintage: vintage,
69185                                 source: clean(result.features[0].attributes.NICE_NAME),
69186                                 description: clean(result.features[0].attributes.NICE_DESC),
69187                                 resolution: clean(result.features[0].attributes.SRC_RES),
69188                                 accuracy: clean(result.features[0].attributes.SRC_ACC)
69189                             };
69190
69191                             // append units - meters
69192                             if (isFinite(metadata.resolution)) {
69193                                 metadata.resolution += ' m';
69194                             }
69195                             if (isFinite(metadata.accuracy)) {
69196                                 metadata.accuracy += ' m';
69197                             }
69198
69199                             cache[tileID].metadata = metadata;
69200                             if (callback) callback(null, metadata);
69201                         })
69202                         .catch(function(err) {
69203                             delete inflight[tileID];
69204                             if (callback) callback(err.message);
69205                         });
69206                 }
69207
69208
69209                 function clean(val) {
69210                     return String(val).trim() || unknown;
69211                 }
69212             };
69213
69214             return esri;
69215         };
69216
69217
69218         rendererBackgroundSource.None = function() {
69219             var source = rendererBackgroundSource({ id: 'none', template: '' });
69220
69221
69222             source.name = function() {
69223                 return t('background.none');
69224             };
69225
69226
69227             source.imageryUsed = function() {
69228                 return null;
69229             };
69230
69231
69232             source.area = function() {
69233                 return -1;  // sources in background pane are sorted by area
69234             };
69235
69236
69237             return source;
69238         };
69239
69240
69241         rendererBackgroundSource.Custom = function(template) {
69242             var source = rendererBackgroundSource({ id: 'custom', template: template });
69243
69244
69245             source.name = function() {
69246                 return t('background.custom');
69247             };
69248
69249
69250             source.imageryUsed = function() {
69251                 return 'Custom (' + source.template() + ')';
69252             };
69253
69254
69255             source.area = function() {
69256                 return -2;  // sources in background pane are sorted by area
69257             };
69258
69259
69260             return source;
69261         };
69262
69263         function rendererTileLayer(context) {
69264             var transformProp = utilPrefixCSSProperty('Transform');
69265             var tiler = utilTiler();
69266
69267             var _tileSize = 256;
69268             var _projection;
69269             var _cache = {};
69270             var _tileOrigin;
69271             var _zoom;
69272             var _source;
69273
69274
69275             function tileSizeAtZoom(d, z) {
69276                 var EPSILON = 0.002;    // close seams
69277                 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
69278             }
69279
69280
69281             function atZoom(t, distance) {
69282                 var power = Math.pow(2, distance);
69283                 return [
69284                     Math.floor(t[0] * power),
69285                     Math.floor(t[1] * power),
69286                     t[2] + distance
69287                 ];
69288             }
69289
69290
69291             function lookUp(d) {
69292                 for (var up = -1; up > -d[2]; up--) {
69293                     var tile = atZoom(d, up);
69294                     if (_cache[_source.url(tile)] !== false) {
69295                         return tile;
69296                     }
69297                 }
69298             }
69299
69300
69301             function uniqueBy(a, n) {
69302                 var o = [];
69303                 var seen = {};
69304                 for (var i = 0; i < a.length; i++) {
69305                     if (seen[a[i][n]] === undefined) {
69306                         o.push(a[i]);
69307                         seen[a[i][n]] = true;
69308                     }
69309                 }
69310                 return o;
69311             }
69312
69313
69314             function addSource(d) {
69315                 d.push(_source.url(d));
69316                 return d;
69317             }
69318
69319
69320             // Update tiles based on current state of `projection`.
69321             function background(selection) {
69322                 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
69323
69324                 var pixelOffset;
69325                 if (_source) {
69326                     pixelOffset = [
69327                         _source.offset()[0] * Math.pow(2, _zoom),
69328                         _source.offset()[1] * Math.pow(2, _zoom)
69329                     ];
69330                 } else {
69331                     pixelOffset = [0, 0];
69332                 }
69333
69334                 var translate = [
69335                     _projection.translate()[0] + pixelOffset[0],
69336                     _projection.translate()[1] + pixelOffset[1]
69337                 ];
69338
69339                 tiler
69340                     .scale(_projection.scale() * 2 * Math.PI)
69341                     .translate(translate);
69342
69343                 _tileOrigin = [
69344                     _projection.scale() * Math.PI - translate[0],
69345                     _projection.scale() * Math.PI - translate[1]
69346                 ];
69347
69348                 render(selection);
69349             }
69350
69351
69352             // Derive the tiles onscreen, remove those offscreen and position them.
69353             // Important that this part not depend on `_projection` because it's
69354             // rentered when tiles load/error (see #644).
69355             function render(selection) {
69356                 if (!_source) return;
69357                 var requests = [];
69358                 var showDebug = context.getDebug('tile') && !_source.overlay;
69359
69360                 if (_source.validZoom(_zoom)) {
69361                     tiler.skipNullIsland(!!_source.overlay);
69362
69363                     tiler().forEach(function(d) {
69364                         addSource(d);
69365                         if (d[3] === '') return;
69366                         if (typeof d[3] !== 'string') return; // Workaround for #2295
69367                         requests.push(d);
69368                         if (_cache[d[3]] === false && lookUp(d)) {
69369                             requests.push(addSource(lookUp(d)));
69370                         }
69371                     });
69372
69373                     requests = uniqueBy(requests, 3).filter(function(r) {
69374                         // don't re-request tiles which have failed in the past
69375                         return _cache[r[3]] !== false;
69376                     });
69377                 }
69378
69379                 function load(d) {
69380                     _cache[d[3]] = true;
69381                     d3_select(this)
69382                         .on('error', null)
69383                         .on('load', null)
69384                         .classed('tile-loaded', true);
69385                     render(selection);
69386                 }
69387
69388                 function error(d) {
69389                     _cache[d[3]] = false;
69390                     d3_select(this)
69391                         .on('error', null)
69392                         .on('load', null)
69393                         .remove();
69394                     render(selection);
69395                 }
69396
69397                 function imageTransform(d) {
69398                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
69399                     var scale = tileSizeAtZoom(d, _zoom);
69400                     return 'translate(' +
69401                         ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
69402                         ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
69403                         'scale(' + scale + ',' + scale + ')';
69404                 }
69405
69406                 function tileCenter(d) {
69407                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
69408                     return [
69409                         ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
69410                         ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
69411                     ];
69412                 }
69413
69414                 function debugTransform(d) {
69415                     var coord = tileCenter(d);
69416                     return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
69417                 }
69418
69419
69420                 // Pick a representative tile near the center of the viewport
69421                 // (This is useful for sampling the imagery vintage)
69422                 var dims = tiler.size();
69423                 var mapCenter = [dims[0] / 2, dims[1] / 2];
69424                 var minDist = Math.max(dims[0], dims[1]);
69425                 var nearCenter;
69426
69427                 requests.forEach(function(d) {
69428                     var c = tileCenter(d);
69429                     var dist = geoVecLength(c, mapCenter);
69430                     if (dist < minDist) {
69431                         minDist = dist;
69432                         nearCenter = d;
69433                     }
69434                 });
69435
69436
69437                 var image = selection.selectAll('img')
69438                     .data(requests, function(d) { return d[3]; });
69439
69440                 image.exit()
69441                     .style(transformProp, imageTransform)
69442                     .classed('tile-removing', true)
69443                     .classed('tile-center', false)
69444                     .each(function() {
69445                         var tile = d3_select(this);
69446                         window.setTimeout(function() {
69447                             if (tile.classed('tile-removing')) {
69448                                 tile.remove();
69449                             }
69450                         }, 300);
69451                     });
69452
69453                 image.enter()
69454                   .append('img')
69455                     .attr('class', 'tile')
69456                     .attr('src', function(d) { return d[3]; })
69457                     .on('error', error)
69458                     .on('load', load)
69459                   .merge(image)
69460                     .style(transformProp, imageTransform)
69461                     .classed('tile-debug', showDebug)
69462                     .classed('tile-removing', false)
69463                     .classed('tile-center', function(d) { return d === nearCenter; });
69464
69465
69466
69467                 var debug = selection.selectAll('.tile-label-debug')
69468                     .data(showDebug ? requests : [], function(d) { return d[3]; });
69469
69470                 debug.exit()
69471                     .remove();
69472
69473                 if (showDebug) {
69474                     var debugEnter = debug.enter()
69475                         .append('div')
69476                         .attr('class', 'tile-label-debug');
69477
69478                     debugEnter
69479                         .append('div')
69480                         .attr('class', 'tile-label-debug-coord');
69481
69482                     debugEnter
69483                         .append('div')
69484                         .attr('class', 'tile-label-debug-vintage');
69485
69486                     debug = debug.merge(debugEnter);
69487
69488                     debug
69489                         .style(transformProp, debugTransform);
69490
69491                     debug
69492                         .selectAll('.tile-label-debug-coord')
69493                         .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
69494
69495                     debug
69496                         .selectAll('.tile-label-debug-vintage')
69497                         .each(function(d) {
69498                             var span = d3_select(this);
69499                             var center = context.projection.invert(tileCenter(d));
69500                             _source.getMetadata(center, d, function(err, result) {
69501                                 span.text((result && result.vintage && result.vintage.range) ||
69502                                     t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
69503                                 );
69504                             });
69505                         });
69506                 }
69507
69508             }
69509
69510
69511             background.projection = function(val) {
69512                 if (!arguments.length) return _projection;
69513                 _projection = val;
69514                 return background;
69515             };
69516
69517
69518             background.dimensions = function(val) {
69519                 if (!arguments.length) return tiler.size();
69520                 tiler.size(val);
69521                 return background;
69522             };
69523
69524
69525             background.source = function(val) {
69526                 if (!arguments.length) return _source;
69527                 _source = val;
69528                 _tileSize = _source.tileSize;
69529                 _cache = {};
69530                 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
69531                 return background;
69532             };
69533
69534
69535             return background;
69536         }
69537
69538         function rendererBackground(context) {
69539             var dispatch$1 = dispatch('change');
69540             var detected = utilDetect();
69541             var baseLayer = rendererTileLayer(context).projection(context.projection);
69542             var _isValid = true;
69543             var _overlayLayers = [];
69544             var _backgroundSources = [];
69545             var _brightness = 1;
69546             var _contrast = 1;
69547             var _saturation = 1;
69548             var _sharpness = 1;
69549
69550
69551             function background(selection) {
69552                 // If we are displaying an Esri basemap at high zoom,
69553                 // check its tilemap to see how high the zoom can go
69554                 if (context.map().zoom() > 18) {
69555                     var basemap = baseLayer.source();
69556                     if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
69557                         var center = context.map().center();
69558                         basemap.fetchTilemap(center);
69559                     }
69560                 }
69561
69562                 // Is the imagery valid here? - #4827
69563                 var sources = background.sources(context.map().extent());
69564                 var wasValid = _isValid;
69565                 _isValid = !!sources
69566                     .filter(function(d) { return d === baseLayer.source(); }).length;
69567
69568                 if (wasValid !== _isValid) {      // change in valid status
69569                     background.updateImagery();
69570                 }
69571
69572
69573                 var baseFilter = '';
69574                 if (detected.cssfilters) {
69575                     if (_brightness !== 1) {
69576                         baseFilter += 'brightness(' + _brightness + ')';
69577                     }
69578                     if (_contrast !== 1) {
69579                         baseFilter += 'contrast(' + _contrast + ')';
69580                     }
69581                     if (_saturation !== 1) {
69582                         baseFilter += 'saturate(' + _saturation + ')';
69583                     }
69584                     if (_sharpness < 1) {  // gaussian blur
69585                         var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
69586                         baseFilter += 'blur(' + blur + 'px)';
69587                     }
69588                 }
69589
69590                 var base = selection.selectAll('.layer-background')
69591                     .data([0]);
69592
69593                 base = base.enter()
69594                     .insert('div', '.layer-data')
69595                     .attr('class', 'layer layer-background')
69596                     .merge(base);
69597
69598                 if (detected.cssfilters) {
69599                     base.style('filter', baseFilter || null);
69600                 } else {
69601                     base.style('opacity', _brightness);
69602                 }
69603
69604
69605                 var imagery = base.selectAll('.layer-imagery')
69606                     .data([0]);
69607
69608                 imagery.enter()
69609                     .append('div')
69610                     .attr('class', 'layer layer-imagery')
69611                     .merge(imagery)
69612                     .call(baseLayer);
69613
69614
69615                 var maskFilter = '';
69616                 var mixBlendMode = '';
69617                 if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
69618                     mixBlendMode = 'overlay';
69619                     maskFilter = 'saturate(0) blur(3px) invert(1)';
69620
69621                     var contrast = _sharpness - 1;
69622                     maskFilter += ' contrast(' + contrast + ')';
69623
69624                     var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
69625                     maskFilter += ' brightness(' + brightness + ')';
69626                 }
69627
69628                 var mask = base.selectAll('.layer-unsharp-mask')
69629                     .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
69630
69631                 mask.exit()
69632                     .remove();
69633
69634                 mask.enter()
69635                     .append('div')
69636                     .attr('class', 'layer layer-mask layer-unsharp-mask')
69637                     .merge(mask)
69638                     .call(baseLayer)
69639                     .style('filter', maskFilter || null)
69640                     .style('mix-blend-mode', mixBlendMode || null);
69641
69642
69643                 var overlays = selection.selectAll('.layer-overlay')
69644                     .data(_overlayLayers, function(d) { return d.source().name(); });
69645
69646                 overlays.exit()
69647                     .remove();
69648
69649                 overlays.enter()
69650                     .insert('div', '.layer-data')
69651                     .attr('class', 'layer layer-overlay')
69652                     .merge(overlays)
69653                     .each(function(layer) { d3_select(this).call(layer); });
69654             }
69655
69656
69657             background.updateImagery = function() {
69658                 var b = baseLayer.source();
69659                 if (context.inIntro() || !b) return;
69660
69661                 var o = _overlayLayers
69662                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
69663                     .map(function (d) { return d.source().id; })
69664                     .join(',');
69665
69666                 var meters = geoOffsetToMeters(b.offset());
69667                 var epsilon = 0.01;
69668                 var x = +meters[0].toFixed(2);
69669                 var y = +meters[1].toFixed(2);
69670                 var q = utilStringQs(window.location.hash.substring(1));
69671
69672                 var id = b.id;
69673                 if (id === 'custom') {
69674                     id = 'custom:' + b.template();
69675                 }
69676
69677                 if (id) {
69678                     q.background = id;
69679                 } else {
69680                     delete q.background;
69681                 }
69682
69683                 if (o) {
69684                     q.overlays = o;
69685                 } else {
69686                     delete q.overlays;
69687                 }
69688
69689                 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
69690                     q.offset = x + ',' + y;
69691                 } else {
69692                     delete q.offset;
69693                 }
69694
69695                 if (!window.mocha) {
69696                     window.location.replace('#' + utilQsString(q, true));
69697                 }
69698
69699                 var imageryUsed = [];
69700                 var photoOverlaysUsed = [];
69701
69702                 var current = b.imageryUsed();
69703                 if (current && _isValid) {
69704                     imageryUsed.push(current);
69705                 }
69706
69707                 _overlayLayers
69708                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
69709                     .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
69710
69711                 var data = context.layers().layer('data');
69712                 if (data && data.enabled() && data.hasData()) {
69713                     imageryUsed.push(data.getSrc());
69714                 }
69715
69716                 var photoOverlayLayers = {
69717                     streetside: 'Bing Streetside',
69718                     mapillary: 'Mapillary Images',
69719                     'mapillary-map-features': 'Mapillary Map Features',
69720                     'mapillary-signs': 'Mapillary Signs',
69721                     openstreetcam: 'OpenStreetCam Images'
69722                 };
69723
69724                 for (var layerID in photoOverlayLayers) {
69725                     var layer = context.layers().layer(layerID);
69726                     if (layer && layer.enabled()) {
69727                         photoOverlaysUsed.push(layerID);
69728                         imageryUsed.push(photoOverlayLayers[layerID]);
69729                     }
69730                 }
69731
69732                 context.history().photoOverlaysUsed(photoOverlaysUsed);
69733                 context.history().imageryUsed(imageryUsed);
69734             };
69735
69736
69737             background.sources = function(extent) {
69738                 if (!data.imagery || !data.imagery.query) return [];   // called before init()?
69739
69740                 var matchIDs = {};
69741                 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
69742                 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
69743
69744                 return _backgroundSources.filter(function(source) {
69745                     return matchIDs[source.id] || !source.polygon;   // no polygon = worldwide
69746                 });
69747             };
69748
69749
69750             background.dimensions = function(d) {
69751                 if (!d) return;
69752                 baseLayer.dimensions(d);
69753
69754                 _overlayLayers.forEach(function(layer) {
69755                     layer.dimensions(d);
69756                 });
69757             };
69758
69759
69760             background.baseLayerSource = function(d) {
69761                 if (!arguments.length) return baseLayer.source();
69762
69763                 // test source against OSM imagery blacklists..
69764                 var osm = context.connection();
69765                 if (!osm) return background;
69766
69767                 var blacklists = context.connection().imageryBlacklists();
69768                 var template = d.template();
69769                 var fail = false;
69770                 var tested = 0;
69771                 var regex;
69772
69773                 for (var i = 0; i < blacklists.length; i++) {
69774                     try {
69775                         regex = new RegExp(blacklists[i]);
69776                         fail = regex.test(template);
69777                         tested++;
69778                         if (fail) break;
69779                     } catch (e) {
69780                         /* noop */
69781                     }
69782                 }
69783
69784                 // ensure at least one test was run.
69785                 if (!tested) {
69786                     regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
69787                     fail = regex.test(template);
69788                 }
69789
69790                 baseLayer.source(!fail ? d : background.findSource('none'));
69791                 dispatch$1.call('change');
69792                 background.updateImagery();
69793                 return background;
69794             };
69795
69796
69797             background.findSource = function(id) {
69798                 return _backgroundSources.find(function(d) {
69799                     return d.id && d.id === id;
69800                 });
69801             };
69802
69803
69804             background.bing = function() {
69805                 background.baseLayerSource(background.findSource('Bing'));
69806             };
69807
69808
69809             background.showsLayer = function(d) {
69810                 var baseSource = baseLayer.source();
69811                 if (!d || !baseSource) return false;
69812                 return d.id === baseSource.id ||
69813                     _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
69814             };
69815
69816
69817             background.overlayLayerSources = function() {
69818                 return _overlayLayers.map(function (l) { return l.source(); });
69819             };
69820
69821
69822             background.toggleOverlayLayer = function(d) {
69823                 var layer;
69824                 for (var i = 0; i < _overlayLayers.length; i++) {
69825                     layer = _overlayLayers[i];
69826                     if (layer.source() === d) {
69827                         _overlayLayers.splice(i, 1);
69828                         dispatch$1.call('change');
69829                         background.updateImagery();
69830                         return;
69831                     }
69832                 }
69833
69834                 layer = rendererTileLayer(context)
69835                     .source(d)
69836                     .projection(context.projection)
69837                     .dimensions(baseLayer.dimensions()
69838                 );
69839
69840                 _overlayLayers.push(layer);
69841                 dispatch$1.call('change');
69842                 background.updateImagery();
69843             };
69844
69845
69846             background.nudge = function(d, zoom) {
69847                 baseLayer.source().nudge(d, zoom);
69848                 dispatch$1.call('change');
69849                 background.updateImagery();
69850                 return background;
69851             };
69852
69853
69854             background.offset = function(d) {
69855                 if (!arguments.length) return baseLayer.source().offset();
69856                 baseLayer.source().offset(d);
69857                 dispatch$1.call('change');
69858                 background.updateImagery();
69859                 return background;
69860             };
69861
69862
69863             background.brightness = function(d) {
69864                 if (!arguments.length) return _brightness;
69865                 _brightness = d;
69866                 if (context.mode()) dispatch$1.call('change');
69867                 return background;
69868             };
69869
69870
69871             background.contrast = function(d) {
69872                 if (!arguments.length) return _contrast;
69873                 _contrast = d;
69874                 if (context.mode()) dispatch$1.call('change');
69875                 return background;
69876             };
69877
69878
69879             background.saturation = function(d) {
69880                 if (!arguments.length) return _saturation;
69881                 _saturation = d;
69882                 if (context.mode()) dispatch$1.call('change');
69883                 return background;
69884             };
69885
69886
69887             background.sharpness = function(d) {
69888                 if (!arguments.length) return _sharpness;
69889                 _sharpness = d;
69890                 if (context.mode()) dispatch$1.call('change');
69891                 return background;
69892             };
69893
69894
69895             background.init = function() {
69896                 function parseMap(qmap) {
69897                     if (!qmap) return false;
69898                     var args = qmap.split('/').map(Number);
69899                     if (args.length < 3 || args.some(isNaN)) return false;
69900                     return geoExtent([args[2], args[1]]);
69901                 }
69902
69903                 var q = utilStringQs(window.location.hash.substring(1));
69904                 var requested = q.background || q.layer;
69905                 var extent = parseMap(q.map);
69906                 var first;
69907                 var best;
69908
69909
69910                 data.imagery = data.imagery || [];
69911                 data.imagery.features = {};
69912
69913                 // build efficient index and querying for data.imagery
69914                 var features = data.imagery.map(function(source) {
69915                     if (!source.polygon) return null;
69916
69917                     // Add an extra array nest to each element in `source.polygon`
69918                     // so the rings are not treated as a bunch of holes:
69919                     // what we have: [ [[outer],[hole],[hole]] ]
69920                     // what we want: [ [[outer]],[[outer]],[[outer]] ]
69921                     var rings = source.polygon.map(function(ring) { return [ring]; });
69922
69923                     var feature = {
69924                         type: 'Feature',
69925                         properties: { id: source.id },
69926                         geometry: { type: 'MultiPolygon', coordinates: rings }
69927                     };
69928
69929                     data.imagery.features[source.id] = feature;
69930                     return feature;
69931
69932                 }).filter(Boolean);
69933
69934                 data.imagery.query = whichPolygon_1({
69935                     type: 'FeatureCollection',
69936                     features: features
69937                 });
69938
69939
69940                 // Add all the available imagery sources
69941                 _backgroundSources = data.imagery.map(function(source) {
69942                     if (source.type === 'bing') {
69943                         return rendererBackgroundSource.Bing(source, dispatch$1);
69944                     } else if (/^EsriWorldImagery/.test(source.id)) {
69945                         return rendererBackgroundSource.Esri(source);
69946                     } else {
69947                         return rendererBackgroundSource(source);
69948                     }
69949                 });
69950
69951                 first = _backgroundSources.length && _backgroundSources[0];
69952
69953                 // Add 'None'
69954                 _backgroundSources.unshift(rendererBackgroundSource.None());
69955
69956                 // Add 'Custom'
69957                 var template = context.storage('background-custom-template') || '';
69958                 var custom = rendererBackgroundSource.Custom(template);
69959                 _backgroundSources.unshift(custom);
69960
69961
69962                 // Decide which background layer to display
69963                 if (!requested && extent) {
69964                     best = this.sources(extent).find(function(s) { return s.best(); });
69965                 }
69966                 if (requested && requested.indexOf('custom:') === 0) {
69967                     template = requested.replace(/^custom:/, '');
69968                     background.baseLayerSource(custom.template(template));
69969                     context.storage('background-custom-template', template);
69970                 } else {
69971                     background.baseLayerSource(
69972                         background.findSource(requested) ||
69973                         best ||
69974                         background.findSource(context.storage('background-last-used')) ||
69975                         background.findSource('Bing') ||
69976                         first ||
69977                         background.findSource('none')
69978                     );
69979                 }
69980
69981                 var locator = _backgroundSources.find(function(d) {
69982                     return d.overlay && d.default;
69983                 });
69984
69985                 if (locator) {
69986                     background.toggleOverlayLayer(locator);
69987                 }
69988
69989                 var overlays = (q.overlays || '').split(',');
69990                 overlays.forEach(function(overlay) {
69991                     overlay = background.findSource(overlay);
69992                     if (overlay) {
69993                         background.toggleOverlayLayer(overlay);
69994                     }
69995                 });
69996
69997                 if (q.gpx) {
69998                     var gpx = context.layers().layer('data');
69999                     if (gpx) {
70000                         gpx.url(q.gpx, '.gpx');
70001                     }
70002                 }
70003
70004                 if (q.offset) {
70005                     var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
70006                         return !isNaN(n) && n;
70007                     });
70008
70009                     if (offset.length === 2) {
70010                         background.offset(geoMetersToOffset(offset));
70011                     }
70012                 }
70013             };
70014
70015
70016             return utilRebind(background, dispatch$1, 'on');
70017         }
70018
70019         function rendererFeatures(context) {
70020             var dispatch$1 = dispatch('change', 'redraw');
70021             var features = utilRebind({}, dispatch$1, 'on');
70022             var _deferred = new Set();
70023
70024             var traffic_roads = {
70025                 'motorway': true,
70026                 'motorway_link': true,
70027                 'trunk': true,
70028                 'trunk_link': true,
70029                 'primary': true,
70030                 'primary_link': true,
70031                 'secondary': true,
70032                 'secondary_link': true,
70033                 'tertiary': true,
70034                 'tertiary_link': true,
70035                 'residential': true,
70036                 'unclassified': true,
70037                 'living_street': true
70038             };
70039
70040             var service_roads = {
70041                 'service': true,
70042                 'road': true,
70043                 'track': true
70044             };
70045
70046             var paths = {
70047                 'path': true,
70048                 'footway': true,
70049                 'cycleway': true,
70050                 'bridleway': true,
70051                 'steps': true,
70052                 'pedestrian': true,
70053                 'corridor': true
70054             };
70055
70056             var past_futures = {
70057                 'proposed': true,
70058                 'construction': true,
70059                 'abandoned': true,
70060                 'dismantled': true,
70061                 'disused': true,
70062                 'razed': true,
70063                 'demolished': true,
70064                 'obliterated': true
70065             };
70066
70067             var _cullFactor = 1;
70068             var _cache = {};
70069             var _rules = {};
70070             var _stats = {};
70071             var _keys = [];
70072             var _hidden = [];
70073             var _forceVisible = {};
70074
70075
70076             function update() {
70077                 if (!window.mocha) {
70078                     var q = utilStringQs(window.location.hash.substring(1));
70079                     var disabled = features.disabled();
70080                     if (disabled.length) {
70081                         q.disable_features = disabled.join(',');
70082                     } else {
70083                         delete q.disable_features;
70084                     }
70085                     window.location.replace('#' + utilQsString(q, true));
70086                     context.storage('disabled-features', disabled.join(','));
70087                 }
70088                 _hidden = features.hidden();
70089                 dispatch$1.call('change');
70090                 dispatch$1.call('redraw');
70091             }
70092
70093
70094             function defineRule(k, filter, max) {
70095                 var isEnabled = true;
70096
70097                 _keys.push(k);
70098                 _rules[k] = {
70099                     filter: filter,
70100                     enabled: isEnabled,   // whether the user wants it enabled..
70101                     count: 0,
70102                     currentMax: (max || Infinity),
70103                     defaultMax: (max || Infinity),
70104                     enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
70105                     disable: function() { this.enabled = false; this.currentMax = 0; },
70106                     hidden: function() {
70107                         return !context.editable() ||
70108                             (this.count === 0 && !this.enabled) ||
70109                             this.count > this.currentMax * _cullFactor;
70110                     },
70111                     autoHidden: function() { return this.hidden() && this.currentMax > 0; }
70112                 };
70113             }
70114
70115
70116             defineRule('points', function isPoint(tags, geometry) {
70117                 return geometry === 'point';
70118             }, 200);
70119
70120             defineRule('traffic_roads', function isTrafficRoad(tags) {
70121                 return traffic_roads[tags.highway];
70122             });
70123
70124             defineRule('service_roads', function isServiceRoad(tags) {
70125                 return service_roads[tags.highway];
70126             });
70127
70128             defineRule('paths', function isPath(tags) {
70129                 return paths[tags.highway];
70130             });
70131
70132             defineRule('buildings', function isBuilding(tags) {
70133                 return (
70134                     (!!tags.building && tags.building !== 'no') ||
70135                     tags.parking === 'multi-storey' ||
70136                     tags.parking === 'sheds' ||
70137                     tags.parking === 'carports' ||
70138                     tags.parking === 'garage_boxes'
70139                 );
70140             }, 250);
70141
70142             defineRule('building_parts', function isBuildingPart(tags) {
70143                 return tags['building:part'];
70144             });
70145
70146             defineRule('indoor', function isIndoor(tags) {
70147                 return tags.indoor;
70148             });
70149
70150             defineRule('landuse', function isLanduse(tags, geometry) {
70151                 return geometry === 'area' &&
70152                     !_rules.buildings.filter(tags) &&
70153                     !_rules.building_parts.filter(tags) &&
70154                     !_rules.indoor.filter(tags) &&
70155                     !_rules.water.filter(tags) &&
70156                     !_rules.pistes.filter(tags);
70157             });
70158
70159             defineRule('boundaries', function isBoundary(tags) {
70160                 return (
70161                     !!tags.boundary
70162                 ) && !(
70163                     traffic_roads[tags.highway] ||
70164                     service_roads[tags.highway] ||
70165                     paths[tags.highway] ||
70166                     tags.waterway ||
70167                     tags.railway ||
70168                     tags.landuse ||
70169                     tags.natural ||
70170                     tags.building ||
70171                     tags.power
70172                 );
70173             });
70174
70175             defineRule('water', function isWater(tags) {
70176                 return (
70177                     !!tags.waterway ||
70178                     tags.natural === 'water' ||
70179                     tags.natural === 'coastline' ||
70180                     tags.natural === 'bay' ||
70181                     tags.landuse === 'pond' ||
70182                     tags.landuse === 'basin' ||
70183                     tags.landuse === 'reservoir' ||
70184                     tags.landuse === 'salt_pond'
70185                 );
70186             });
70187
70188             defineRule('rail', function isRail(tags) {
70189                 return (
70190                     !!tags.railway ||
70191                     tags.landuse === 'railway'
70192                 ) && !(
70193                     traffic_roads[tags.highway] ||
70194                     service_roads[tags.highway] ||
70195                     paths[tags.highway]
70196                 );
70197             });
70198
70199             defineRule('pistes', function isPiste(tags) {
70200                 return tags['piste:type'];
70201             });
70202
70203             defineRule('aerialways', function isPiste(tags) {
70204                 return tags.aerialway &&
70205                     tags.aerialway !== 'yes' &&
70206                     tags.aerialway !== 'station';
70207             });
70208
70209             defineRule('power', function isPower(tags) {
70210                 return !!tags.power;
70211             });
70212
70213             // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
70214             defineRule('past_future', function isPastFuture(tags) {
70215                 if (
70216                     traffic_roads[tags.highway] ||
70217                     service_roads[tags.highway] ||
70218                     paths[tags.highway]
70219                 ) { return false; }
70220
70221                 var strings = Object.keys(tags);
70222
70223                 for (var i = 0; i < strings.length; i++) {
70224                     var s = strings[i];
70225                     if (past_futures[s] || past_futures[tags[s]]) { return true; }
70226                 }
70227                 return false;
70228             });
70229
70230             // Lines or areas that don't match another feature filter.
70231             // IMPORTANT: The 'others' feature must be the last one defined,
70232             //   so that code in getMatches can skip this test if `hasMatch = true`
70233             defineRule('others', function isOther(tags, geometry) {
70234                 return (geometry === 'line' || geometry === 'area');
70235             });
70236
70237
70238
70239             features.features = function() {
70240                 return _rules;
70241             };
70242
70243
70244             features.keys = function() {
70245                 return _keys;
70246             };
70247
70248
70249             features.enabled = function(k) {
70250                 if (!arguments.length) {
70251                     return _keys.filter(function(k) { return _rules[k].enabled; });
70252                 }
70253                 return _rules[k] && _rules[k].enabled;
70254             };
70255
70256
70257             features.disabled = function(k) {
70258                 if (!arguments.length) {
70259                     return _keys.filter(function(k) { return !_rules[k].enabled; });
70260                 }
70261                 return _rules[k] && !_rules[k].enabled;
70262             };
70263
70264
70265             features.hidden = function(k) {
70266                 if (!arguments.length) {
70267                     return _keys.filter(function(k) { return _rules[k].hidden(); });
70268                 }
70269                 return _rules[k] && _rules[k].hidden();
70270             };
70271
70272
70273             features.autoHidden = function(k) {
70274                 if (!arguments.length) {
70275                     return _keys.filter(function(k) { return _rules[k].autoHidden(); });
70276                 }
70277                 return _rules[k] && _rules[k].autoHidden();
70278             };
70279
70280
70281             features.enable = function(k) {
70282                 if (_rules[k] && !_rules[k].enabled) {
70283                     _rules[k].enable();
70284                     update();
70285                 }
70286             };
70287
70288             features.enableAll = function() {
70289                 var didEnable = false;
70290                 for (var k in _rules) {
70291                     if (!_rules[k].enabled) {
70292                         didEnable = true;
70293                         _rules[k].enable();
70294                     }
70295                 }
70296                 if (didEnable) update();
70297             };
70298
70299
70300             features.disable = function(k) {
70301                 if (_rules[k] && _rules[k].enabled) {
70302                     _rules[k].disable();
70303                     update();
70304                 }
70305             };
70306
70307             features.disableAll = function() {
70308                 var didDisable = false;
70309                 for (var k in _rules) {
70310                     if (_rules[k].enabled) {
70311                         didDisable = true;
70312                         _rules[k].disable();
70313                     }
70314                 }
70315                 if (didDisable) update();
70316             };
70317
70318
70319             features.toggle = function(k) {
70320                 if (_rules[k]) {
70321                     (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
70322                     update();
70323                 }
70324             };
70325
70326
70327             features.resetStats = function() {
70328                 for (var i = 0; i < _keys.length; i++) {
70329                     _rules[_keys[i]].count = 0;
70330                 }
70331                 dispatch$1.call('change');
70332             };
70333
70334
70335             features.gatherStats = function(d, resolver, dimensions) {
70336                 var needsRedraw = false;
70337                 var types = utilArrayGroupBy(d, 'type');
70338                 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
70339                 var currHidden, geometry, matches, i, j;
70340
70341                 for (i = 0; i < _keys.length; i++) {
70342                     _rules[_keys[i]].count = 0;
70343                 }
70344
70345                 // adjust the threshold for point/building culling based on viewport size..
70346                 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
70347                 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
70348
70349                 for (i = 0; i < entities.length; i++) {
70350                     geometry = entities[i].geometry(resolver);
70351                     matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
70352                     for (j = 0; j < matches.length; j++) {
70353                         _rules[matches[j]].count++;
70354                     }
70355                 }
70356
70357                 currHidden = features.hidden();
70358                 if (currHidden !== _hidden) {
70359                     _hidden = currHidden;
70360                     needsRedraw = true;
70361                     dispatch$1.call('change');
70362                 }
70363
70364                 return needsRedraw;
70365             };
70366
70367
70368             features.stats = function() {
70369                 for (var i = 0; i < _keys.length; i++) {
70370                     _stats[_keys[i]] = _rules[_keys[i]].count;
70371                 }
70372
70373                 return _stats;
70374             };
70375
70376
70377             features.clear = function(d) {
70378                 for (var i = 0; i < d.length; i++) {
70379                     features.clearEntity(d[i]);
70380                 }
70381             };
70382
70383
70384             features.clearEntity = function(entity) {
70385                 delete _cache[osmEntity.key(entity)];
70386             };
70387
70388
70389             features.reset = function() {
70390                 Array.from(_deferred).forEach(function(handle) {
70391                     window.cancelIdleCallback(handle);
70392                     _deferred.delete(handle);
70393                 });
70394
70395                 _cache = {};
70396             };
70397
70398             // only certain relations are worth checking
70399             function relationShouldBeChecked(relation) {
70400                 // multipolygon features have `area` geometry and aren't checked here
70401                 return relation.tags.type === 'boundary';
70402             }
70403
70404             features.getMatches = function(entity, resolver, geometry) {
70405                 if (geometry === 'vertex' ||
70406                     (geometry === 'relation' && !relationShouldBeChecked(entity))) return {};
70407
70408                 var ent = osmEntity.key(entity);
70409                 if (!_cache[ent]) {
70410                     _cache[ent] = {};
70411                 }
70412
70413                 if (!_cache[ent].matches) {
70414                     var matches = {};
70415                     var hasMatch = false;
70416
70417                     for (var i = 0; i < _keys.length; i++) {
70418                         if (_keys[i] === 'others') {
70419                             if (hasMatch) continue;
70420
70421                             // If an entity...
70422                             //   1. is a way that hasn't matched other 'interesting' feature rules,
70423                             if (entity.type === 'way') {
70424                                 var parents = features.getParents(entity, resolver, geometry);
70425
70426                                 //   2a. belongs only to a single multipolygon relation
70427                                 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
70428                                     // 2b. or belongs only to boundary relations
70429                                     (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
70430
70431                                     // ...then match whatever feature rules the parent relation has matched.
70432                                     // see #2548, #2887
70433                                     //
70434                                     // IMPORTANT:
70435                                     // For this to work, getMatches must be called on relations before ways.
70436                                     //
70437                                     var pkey = osmEntity.key(parents[0]);
70438                                     if (_cache[pkey] && _cache[pkey].matches) {
70439                                         matches = Object.assign({}, _cache[pkey].matches);  // shallow copy
70440                                         continue;
70441                                     }
70442                                 }
70443                             }
70444                         }
70445
70446                         if (_rules[_keys[i]].filter(entity.tags, geometry)) {
70447                             matches[_keys[i]] = hasMatch = true;
70448                         }
70449                     }
70450                     _cache[ent].matches = matches;
70451                 }
70452
70453                 return _cache[ent].matches;
70454             };
70455
70456
70457             features.getParents = function(entity, resolver, geometry) {
70458                 if (geometry === 'point') return [];
70459
70460                 var ent = osmEntity.key(entity);
70461                 if (!_cache[ent]) {
70462                     _cache[ent] = {};
70463                 }
70464
70465                 if (!_cache[ent].parents) {
70466                     var parents = [];
70467                     if (geometry === 'vertex') {
70468                         parents = resolver.parentWays(entity);
70469                     } else {   // 'line', 'area', 'relation'
70470                         parents = resolver.parentRelations(entity);
70471                     }
70472                     _cache[ent].parents = parents;
70473                 }
70474                 return _cache[ent].parents;
70475             };
70476
70477
70478             features.isHiddenPreset = function(preset, geometry) {
70479                 if (!_hidden.length) return false;
70480                 if (!preset.tags) return false;
70481
70482                 var test = preset.setTags({}, geometry);
70483                 for (var key in _rules) {
70484                     if (_rules[key].filter(test, geometry)) {
70485                         if (_hidden.indexOf(key) !== -1) {
70486                             return key;
70487                         }
70488                         return false;
70489                     }
70490                 }
70491                 return false;
70492             };
70493
70494
70495             features.isHiddenFeature = function(entity, resolver, geometry) {
70496                 if (!_hidden.length) return false;
70497                 if (!entity.version) return false;
70498                 if (_forceVisible[entity.id]) return false;
70499
70500                 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
70501                 return matches.length && matches.every(function(k) { return features.hidden(k); });
70502             };
70503
70504
70505             features.isHiddenChild = function(entity, resolver, geometry) {
70506                 if (!_hidden.length) return false;
70507                 if (!entity.version || geometry === 'point') return false;
70508                 if (_forceVisible[entity.id]) return false;
70509
70510                 var parents = features.getParents(entity, resolver, geometry);
70511                 if (!parents.length) return false;
70512
70513                 for (var i = 0; i < parents.length; i++) {
70514                     if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
70515                         return false;
70516                     }
70517                 }
70518                 return true;
70519             };
70520
70521
70522             features.hasHiddenConnections = function(entity, resolver) {
70523                 if (!_hidden.length) return false;
70524
70525                 var childNodes, connections;
70526                 if (entity.type === 'midpoint') {
70527                     childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
70528                     connections = [];
70529                 } else {
70530                     childNodes = entity.nodes ? resolver.childNodes(entity) : [];
70531                     connections = features.getParents(entity, resolver, entity.geometry(resolver));
70532                 }
70533
70534                 // gather ways connected to child nodes..
70535                 connections = childNodes.reduce(function(result, e) {
70536                     return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
70537                 }, connections);
70538
70539                 return connections.some(function(e) {
70540                     return features.isHidden(e, resolver, e.geometry(resolver));
70541                 });
70542             };
70543
70544
70545             features.isHidden = function(entity, resolver, geometry) {
70546                 if (!_hidden.length) return false;
70547                 if (!entity.version) return false;
70548
70549                 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
70550                 return fn(entity, resolver, geometry);
70551             };
70552
70553
70554             features.filter = function(d, resolver) {
70555                 if (!_hidden.length) return d;
70556
70557                 var result = [];
70558                 for (var i = 0; i < d.length; i++) {
70559                     var entity = d[i];
70560                     if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
70561                         result.push(entity);
70562                     }
70563                 }
70564                 return result;
70565             };
70566
70567
70568             features.forceVisible = function(entityIDs) {
70569                 if (!arguments.length) return Object.keys(_forceVisible);
70570
70571                 _forceVisible = {};
70572                 for (var i = 0; i < entityIDs.length; i++) {
70573                     _forceVisible[entityIDs[i]] = true;
70574                     var entity = context.hasEntity(entityIDs[i]);
70575                     if (entity && entity.type === 'relation') {
70576                         // also show relation members (one level deep)
70577                         for (var j in entity.members) {
70578                             _forceVisible[entity.members[j].id] = true;
70579                         }
70580                     }
70581                 }
70582                 return features;
70583             };
70584
70585
70586             features.init = function() {
70587                 var storage = context.storage('disabled-features');
70588                 if (storage) {
70589                     var storageDisabled = storage.replace(/;/g, ',').split(',');
70590                     storageDisabled.forEach(features.disable);
70591                 }
70592
70593                 var q = utilStringQs(window.location.hash.substring(1));
70594                 if (q.disable_features) {
70595                     var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
70596                     hashDisabled.forEach(features.disable);
70597                 }
70598             };
70599
70600
70601             // warm up the feature matching cache upon merging fetched data
70602             context.history().on('merge.features', function(newEntities) {
70603                 if (!newEntities) return;
70604                 var handle = window.requestIdleCallback(function() {
70605                     var graph = context.graph();
70606                     var types = utilArrayGroupBy(newEntities, 'type');
70607                     // ensure that getMatches is called on relations before ways
70608                     var entities = [].concat(types.relation || [], types.way || [], types.node || []);
70609                     for (var i = 0; i < entities.length; i++) {
70610                         var geometry = entities[i].geometry(graph);
70611                         features.getMatches(entities[i], graph, geometry);
70612                     }
70613                 });
70614                 _deferred.add(handle);
70615             });
70616
70617
70618             return features;
70619         }
70620
70621         // Touch targets control which other vertices we can drag a vertex onto.
70622         //
70623         // - the activeID - nope
70624         // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
70625         // - 2 away from the activeID - nope (would create a self intersecting segment)
70626         // - all others on a linear way - yes
70627         // - all others on a closed way - nope (would create a self intersecting polygon)
70628         //
70629         // returns
70630         // 0 = active vertex - no touch/connect
70631         // 1 = passive vertex - yes touch/connect
70632         // 2 = adjacent vertex - yes but pay attention segmenting a line here
70633         //
70634         function svgPassiveVertex(node, graph, activeID) {
70635             if (!activeID) return 1;
70636             if (activeID === node.id) return 0;
70637
70638             var parents = graph.parentWays(node);
70639
70640             for (var i = 0; i < parents.length; i++) {
70641                 var nodes = parents[i].nodes;
70642                 var isClosed = parents[i].isClosed();
70643                 for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
70644                     if (nodes[j] === node.id) {
70645                         var ix1 = j - 2;
70646                         var ix2 = j - 1;
70647                         var ix3 = j + 1;
70648                         var ix4 = j + 2;
70649
70650                         if (isClosed) {  // wraparound if needed
70651                             var max = nodes.length - 1;
70652                             if (ix1 < 0)   ix1 = max + ix1;
70653                             if (ix2 < 0)   ix2 = max + ix2;
70654                             if (ix3 > max) ix3 = ix3 - max;
70655                             if (ix4 > max) ix4 = ix4 - max;
70656                         }
70657
70658                         if (nodes[ix1] === activeID) return 0;        // no - prevent self intersect
70659                         else if (nodes[ix2] === activeID) return 2;   // ok - adjacent
70660                         else if (nodes[ix3] === activeID) return 2;   // ok - adjacent
70661                         else if (nodes[ix4] === activeID) return 0;   // no - prevent self intersect
70662                         else if (isClosed && nodes.indexOf(activeID) !== -1) return 0;  // no - prevent self intersect
70663                     }
70664                 }
70665             }
70666
70667             return 1;   // ok
70668         }
70669
70670
70671         function svgMarkerSegments(projection, graph, dt,
70672                                           shouldReverse,
70673                                           bothDirections) {
70674             return function(entity) {
70675                 var i = 0;
70676                 var offset = dt;
70677                 var segments = [];
70678                 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
70679                 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
70680                 var a, b;
70681
70682                 if (shouldReverse(entity)) {
70683                     coordinates.reverse();
70684                 }
70685
70686                 d3_geoStream({
70687                     type: 'LineString',
70688                     coordinates: coordinates
70689                 }, projection.stream(clip({
70690                     lineStart: function() {},
70691                     lineEnd: function() { a = null; },
70692                     point: function(x, y) {
70693                         b = [x, y];
70694
70695                         if (a) {
70696                             var span = geoVecLength(a, b) - offset;
70697
70698                             if (span >= 0) {
70699                                 var heading = geoVecAngle(a, b);
70700                                 var dx = dt * Math.cos(heading);
70701                                 var dy = dt * Math.sin(heading);
70702                                 var p = [
70703                                     a[0] + offset * Math.cos(heading),
70704                                     a[1] + offset * Math.sin(heading)
70705                                 ];
70706
70707                                 // gather coordinates
70708                                 var coord = [a, p];
70709                                 for (span -= dt; span >= 0; span -= dt) {
70710                                     p = geoVecAdd(p, [dx, dy]);
70711                                     coord.push(p);
70712                                 }
70713                                 coord.push(b);
70714
70715                                 // generate svg paths
70716                                 var segment = '';
70717                                 var j;
70718
70719                                 for (j = 0; j < coord.length; j++) {
70720                                     segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70721                                 }
70722                                 segments.push({ id: entity.id, index: i++, d: segment });
70723
70724                                 if (bothDirections(entity)) {
70725                                     segment = '';
70726                                     for (j = coord.length - 1; j >= 0; j--) {
70727                                         segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
70728                                     }
70729                                     segments.push({ id: entity.id, index: i++, d: segment });
70730                                 }
70731                             }
70732
70733                             offset = -span;
70734                         }
70735
70736                         a = b;
70737                     }
70738                 })));
70739
70740                 return segments;
70741             };
70742         }
70743
70744
70745         function svgPath(projection, graph, isArea) {
70746
70747             // Explanation of magic numbers:
70748             // "padding" here allows space for strokes to extend beyond the viewport,
70749             // so that the stroke isn't drawn along the edge of the viewport when
70750             // the shape is clipped.
70751             //
70752             // When drawing lines, pad viewport by 5px.
70753             // When drawing areas, pad viewport by 65px in each direction to allow
70754             // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
70755
70756             var cache = {};
70757             var padding = isArea ? 65 : 5;
70758             var viewport = projection.clipExtent();
70759             var paddedExtent = [
70760                 [viewport[0][0] - padding, viewport[0][1] - padding],
70761                 [viewport[1][0] + padding, viewport[1][1] + padding]
70762             ];
70763             var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
70764             var project = projection.stream;
70765             var path = d3_geoPath()
70766                 .projection({stream: function(output) { return project(clip(output)); }});
70767
70768             var svgpath = function(entity) {
70769                 if (entity.id in cache) {
70770                     return cache[entity.id];
70771                 } else {
70772                     return cache[entity.id] = path(entity.asGeoJSON(graph));
70773                 }
70774             };
70775
70776             svgpath.geojson = function(d) {
70777                 if (d.__featurehash__ !== undefined) {
70778                     if (d.__featurehash__ in cache) {
70779                         return cache[d.__featurehash__];
70780                     } else {
70781                         return cache[d.__featurehash__] = path(d);
70782                     }
70783                 } else {
70784                     return path(d);
70785                 }
70786             };
70787
70788             return svgpath;
70789         }
70790
70791
70792         function svgPointTransform(projection) {
70793             var svgpoint = function(entity) {
70794                 // http://jsperf.com/short-array-join
70795                 var pt = projection(entity.loc);
70796                 return 'translate(' + pt[0] + ',' + pt[1] + ')';
70797             };
70798
70799             svgpoint.geojson = function(d) {
70800                 return svgpoint(d.properties.entity);
70801             };
70802
70803             return svgpoint;
70804         }
70805
70806
70807         function svgRelationMemberTags(graph) {
70808             return function(entity) {
70809                 var tags = entity.tags;
70810                 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
70811                 graph.parentRelations(entity).forEach(function(relation) {
70812                     var type = relation.tags.type;
70813                     if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
70814                         tags = Object.assign({}, relation.tags, tags);
70815                     }
70816                 });
70817                 return tags;
70818             };
70819         }
70820
70821
70822         function svgSegmentWay(way, graph, activeID) {
70823             // When there is no activeID, we can memoize this expensive computation
70824             if (activeID === undefined) {
70825                 return graph.transient(way, 'waySegments', getWaySegments);
70826             } else {
70827                 return getWaySegments();
70828             }
70829
70830             function getWaySegments() {
70831                 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
70832                 var features = { passive: [], active: [] };
70833                 var start = {};
70834                 var end = {};
70835                 var node, type;
70836
70837                 for (var i = 0; i < way.nodes.length; i++) {
70838                     node = graph.entity(way.nodes[i]);
70839                     type = svgPassiveVertex(node, graph, activeID);
70840                     end = { node: node, type: type };
70841
70842                     if (start.type !== undefined) {
70843                         if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
70844                             pushActive(start, end, i);
70845                         } else if (start.type === 0 && end.type === 0) {   // both active vertices
70846                             pushActive(start, end, i);
70847                         } else {
70848                             pushPassive(start, end, i);
70849                         }
70850                     }
70851
70852                     start = end;
70853                 }
70854
70855                 return features;
70856
70857                 function pushActive(start, end, index) {
70858                     features.active.push({
70859                         type: 'Feature',
70860                         id: way.id + '-' + index + '-nope',
70861                         properties: {
70862                             nope: true,
70863                             target: true,
70864                             entity: way,
70865                             nodes: [start.node, end.node],
70866                             index: index
70867                         },
70868                         geometry: {
70869                             type: 'LineString',
70870                             coordinates: [start.node.loc, end.node.loc]
70871                         }
70872                     });
70873                 }
70874
70875                 function pushPassive(start, end, index) {
70876                     features.passive.push({
70877                         type: 'Feature',
70878                         id: way.id + '-' + index,
70879                         properties: {
70880                             target: true,
70881                             entity: way,
70882                             nodes: [start.node, end.node],
70883                             index: index
70884                         },
70885                         geometry: {
70886                             type: 'LineString',
70887                             coordinates: [start.node.loc, end.node.loc]
70888                         }
70889                     });
70890                 }
70891             }
70892         }
70893
70894         function svgTagClasses() {
70895             var primaries = [
70896                 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
70897                 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
70898                 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
70899                 'building:part', 'indoor'
70900             ];
70901             var statuses = [
70902                 'proposed', 'construction', 'disused', 'abandoned', 'dismantled',
70903                 'razed', 'demolished', 'obliterated', 'intermittent'
70904             ];
70905             var secondaries = [
70906                 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
70907                 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
70908                 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
70909                 'man_made', 'indoor'
70910             ];
70911             var _tags = function(entity) { return entity.tags; };
70912
70913
70914             var tagClasses = function(selection) {
70915                 selection.each(function tagClassesEach(entity) {
70916                     var value = this.className;
70917
70918                     if (value.baseVal !== undefined) {
70919                         value = value.baseVal;
70920                     }
70921
70922                     var t = _tags(entity);
70923
70924                     var computed = tagClasses.getClassesString(t, value, entity);
70925
70926                     if (computed !== value) {
70927                         d3_select(this).attr('class', computed);
70928                     }
70929                 });
70930             };
70931
70932
70933             tagClasses.getClassesString = function(t, value, entity) {
70934                 var primary, status;
70935                 var i, k, v;
70936
70937                 // in some situations we want to render perimeter strokes a certain way
70938                 var overrideGeometry;
70939                 if (/\bstroke\b/.test(value)) {
70940                     if (!!t.barrier && t.barrier !== 'no') {
70941                         overrideGeometry = 'line';
70942                     } else if (t.type === 'multipolygon' && !entity.hasInterestingTags()) {
70943                         overrideGeometry = 'area';
70944                     }
70945                 }
70946
70947                 // preserve base classes (nothing with `tag-`)
70948                 var classes = value.trim().split(/\s+/)
70949                     .filter(function(klass) {
70950                         return klass.length && !/^tag-/.test(klass);
70951                     })
70952                     .map(function(klass) {  // special overrides for some perimeter strokes
70953                         return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
70954                     });
70955
70956                 // pick at most one primary classification tag..
70957                 for (i = 0; i < primaries.length; i++) {
70958                     k = primaries[i];
70959                     v = t[k];
70960                     if (!v || v === 'no') continue;
70961
70962                     if (k === 'piste:type') {  // avoid a ':' in the class name
70963                         k = 'piste';
70964                     } else if (k === 'building:part') {  // avoid a ':' in the class name
70965                         k = 'building_part';
70966                     }
70967
70968                     primary = k;
70969                     if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
70970                         status = v;
70971                         classes.push('tag-' + k);
70972                     } else {
70973                         classes.push('tag-' + k);
70974                         classes.push('tag-' + k + '-' + v);
70975                     }
70976
70977                     break;
70978                 }
70979
70980                 // add at most one status tag, only if relates to primary tag..
70981                 if (!status) {
70982                     for (i = 0; i < statuses.length; i++) {
70983                         k = statuses[i];
70984                         v = t[k];
70985                         if (!v || v === 'no') continue;
70986
70987                         if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
70988                             status = k;
70989                         }
70990                         else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
70991                             status = k;
70992                         } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
70993                             status = k;
70994                             primary = v;
70995                             classes.push('tag-' + v);
70996                         }  // else ignore e.g.  `highway=path + abandoned=railway`
70997
70998                         if (status) break;
70999                     }
71000                 }
71001
71002                 if (status) {
71003                     classes.push('tag-status');
71004                     classes.push('tag-status-' + status);
71005                 }
71006
71007                 // add any secondary tags
71008                 for (i = 0; i < secondaries.length; i++) {
71009                     k = secondaries[i];
71010                     v = t[k];
71011                     if (!v || v === 'no' || k === primary) continue;
71012                     classes.push('tag-' + k);
71013                     classes.push('tag-' + k + '-' + v);
71014                 }
71015
71016                 // For highways, look for surface tagging..
71017                 if (primary === 'highway' || primary === 'aeroway') {
71018                     var paved = (t.highway !== 'track');
71019                     for (k in t) {
71020                         v = t[k];
71021                         if (k in osmPavedTags) {
71022                             paved = !!osmPavedTags[k][v];
71023                             break;
71024                         }
71025                     }
71026                     if (!paved) {
71027                         classes.push('tag-unpaved');
71028                     }
71029                 }
71030
71031                 // If this is a wikidata-tagged item, add a class for that..
71032                 if (t.wikidata || t['brand:wikidata']) {
71033                     classes.push('tag-wikidata');
71034                 }
71035
71036                 return classes.join(' ').trim();
71037             };
71038
71039
71040             tagClasses.tags = function(val) {
71041                 if (!arguments.length) return _tags;
71042                 _tags = val;
71043                 return tagClasses;
71044             };
71045
71046             return tagClasses;
71047         }
71048
71049         // Patterns only work in Firefox when set directly on element.
71050         // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
71051         var patterns = {
71052             // tag - pattern name
71053             // -or-
71054             // tag - value - pattern name
71055             // -or-
71056             // tag - value - rules (optional tag-values, pattern name)
71057             // (matches earlier rules first, so fallback should be last entry)
71058             amenity: {
71059                 grave_yard: 'cemetery',
71060                 fountain: 'water_standing'
71061             },
71062             landuse: {
71063                 cemetery: [
71064                     { religion: 'christian', pattern: 'cemetery_christian' },
71065                     { religion: 'buddhist', pattern: 'cemetery_buddhist' },
71066                     { religion: 'muslim', pattern: 'cemetery_muslim' },
71067                     { religion: 'jewish', pattern: 'cemetery_jewish' },
71068                     { pattern: 'cemetery' }
71069                 ],
71070                 construction: 'construction',
71071                 farmland: 'farmland',
71072                 farmyard: 'farmyard',
71073                 forest: [
71074                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
71075                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
71076                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
71077                     { pattern: 'forest' } // same as 'leaf_type:mixed'
71078                 ],
71079                 grave_yard: 'cemetery',
71080                 grass: 'grass',
71081                 landfill: 'landfill',
71082                 meadow: 'meadow',
71083                 military: 'construction',
71084                 orchard: 'orchard',
71085                 quarry: 'quarry',
71086                 vineyard: 'vineyard'
71087             },
71088             natural: {
71089                 beach: 'beach',
71090                 grassland: 'grass',
71091                 sand: 'beach',
71092                 scrub: 'scrub',
71093                 water: [
71094                     { water: 'pond', pattern: 'pond' },
71095                     { water: 'reservoir', pattern: 'water_standing' },
71096                     { pattern: 'waves' }
71097                 ],
71098                 wetland: [
71099                     { wetland: 'marsh', pattern: 'wetland_marsh' },
71100                     { wetland: 'swamp', pattern: 'wetland_swamp' },
71101                     { wetland: 'bog', pattern: 'wetland_bog' },
71102                     { wetland: 'reedbed', pattern: 'wetland_reedbed' },
71103                     { pattern: 'wetland' }
71104                 ],
71105                 wood: [
71106                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
71107                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
71108                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
71109                     { pattern: 'forest' } // same as 'leaf_type:mixed'
71110                 ]
71111             },
71112             traffic_calming: {
71113                 island: [
71114                     { surface: 'grass', pattern: 'grass' },
71115                 ],
71116                 chicane: [
71117                     { surface: 'grass', pattern: 'grass' },
71118                 ],
71119                 choker: [
71120                     { surface: 'grass', pattern: 'grass' },
71121                 ]
71122             }
71123         };
71124
71125         function svgTagPattern(tags) {
71126             // Skip pattern filling if this is a building (buildings don't get patterns applied)
71127             if (tags.building && tags.building !== 'no') {
71128                 return null;
71129             }
71130
71131             for (var tag in patterns) {
71132                 var entityValue = tags[tag];
71133                 if (!entityValue) continue;
71134
71135                 if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
71136                     return 'pattern-' + patterns[tag];
71137                 } else {
71138                     var values = patterns[tag];
71139                     for (var value in values) {
71140                         if (entityValue !== value) continue;
71141
71142                         var rules = values[value];
71143                         if (typeof rules === 'string') { // short syntax - pattern name
71144                             return 'pattern-' + rules;
71145                         }
71146
71147                         // long syntax - rule array
71148                         for (var ruleKey in rules) {
71149                             var rule = rules[ruleKey];
71150
71151                             var pass = true;
71152                             for (var criterion in rule) {
71153                                 if (criterion !== 'pattern') { // reserved for pattern name
71154                                     // The only rule is a required tag-value pair
71155                                     var v = tags[criterion];
71156                                     if (!v || v !== rule[criterion]) {
71157                                         pass = false;
71158                                         break;
71159                                     }
71160                                 }
71161                             }
71162
71163                             if (pass) {
71164                                 return 'pattern-' + rule.pattern;
71165                             }
71166                         }
71167                     }
71168                 }
71169             }
71170
71171             return null;
71172         }
71173
71174         function svgAreas(projection, context) {
71175
71176
71177             function getPatternStyle(tags) {
71178                 var imageID = svgTagPattern(tags);
71179                 if (imageID) {
71180                     return 'url("#' + imageID + '")';
71181                 }
71182                 return '';
71183             }
71184
71185
71186             function drawTargets(selection, graph, entities, filter) {
71187                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
71188                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
71189                 var getPath = svgPath(projection).geojson;
71190                 var activeID = context.activeID();
71191                 var base = context.history().base();
71192
71193                 // The targets and nopes will be MultiLineString sub-segments of the ways
71194                 var data = { targets: [], nopes: [] };
71195
71196                 entities.forEach(function(way) {
71197                     var features = svgSegmentWay(way, graph, activeID);
71198                     data.targets.push.apply(data.targets, features.passive);
71199                     data.nopes.push.apply(data.nopes, features.active);
71200                 });
71201
71202
71203                 // Targets allow hover and vertex snapping
71204                 var targetData = data.targets.filter(getPath);
71205                 var targets = selection.selectAll('.area.target-allowed')
71206                     .filter(function(d) { return filter(d.properties.entity); })
71207                     .data(targetData, function key(d) { return d.id; });
71208
71209                 // exit
71210                 targets.exit()
71211                     .remove();
71212
71213                 var segmentWasEdited = function(d) {
71214                     var wayID = d.properties.entity.id;
71215                     // if the whole line was edited, don't draw segment changes
71216                     if (!base.entities[wayID] ||
71217                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
71218                         return false;
71219                     }
71220                     return d.properties.nodes.some(function(n) {
71221                         return !base.entities[n.id] ||
71222                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
71223                     });
71224                 };
71225
71226                 // enter/update
71227                 targets.enter()
71228                     .append('path')
71229                     .merge(targets)
71230                     .attr('d', getPath)
71231                     .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; })
71232                     .classed('segment-edited', segmentWasEdited);
71233
71234
71235                 // NOPE
71236                 var nopeData = data.nopes.filter(getPath);
71237                 var nopes = selection.selectAll('.area.target-nope')
71238                     .filter(function(d) { return filter(d.properties.entity); })
71239                     .data(nopeData, function key(d) { return d.id; });
71240
71241                 // exit
71242                 nopes.exit()
71243                     .remove();
71244
71245                 // enter/update
71246                 nopes.enter()
71247                     .append('path')
71248                     .merge(nopes)
71249                     .attr('d', getPath)
71250                     .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; })
71251                     .classed('segment-edited', segmentWasEdited);
71252             }
71253
71254
71255             function drawAreas(selection, graph, entities, filter) {
71256                 var path = svgPath(projection, graph, true);
71257                 var areas = {};
71258                 var multipolygon;
71259                 var base = context.history().base();
71260
71261                 for (var i = 0; i < entities.length; i++) {
71262                     var entity = entities[i];
71263                     if (entity.geometry(graph) !== 'area') continue;
71264
71265                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
71266                     if (multipolygon) {
71267                         areas[multipolygon.id] = {
71268                             entity: multipolygon.mergeTags(entity.tags),
71269                             area: Math.abs(entity.area(graph))
71270                         };
71271                     } else if (!areas[entity.id]) {
71272                         areas[entity.id] = {
71273                             entity: entity,
71274                             area: Math.abs(entity.area(graph))
71275                         };
71276                     }
71277                 }
71278
71279                 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
71280                 fills.sort(function areaSort(a, b) { return b.area - a.area; });
71281                 fills = fills.map(function(a) { return a.entity; });
71282
71283                 var strokes = fills.filter(function(area) { return area.type === 'way'; });
71284
71285                 var data = {
71286                     clip: fills,
71287                     shadow: strokes,
71288                     stroke: strokes,
71289                     fill: fills
71290                 };
71291
71292                 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
71293                    .filter(filter)
71294                    .data(data.clip, osmEntity.key);
71295
71296                 clipPaths.exit()
71297                    .remove();
71298
71299                 var clipPathsEnter = clipPaths.enter()
71300                    .append('clipPath')
71301                    .attr('class', 'clipPath-osm')
71302                    .attr('id', function(entity) { return entity.id + '-clippath'; });
71303
71304                 clipPathsEnter
71305                    .append('path');
71306
71307                 clipPaths.merge(clipPathsEnter)
71308                    .selectAll('path')
71309                    .attr('d', path);
71310
71311
71312                 var drawLayer = selection.selectAll('.layer-osm.areas');
71313                 var touchLayer = selection.selectAll('.layer-touch.areas');
71314
71315                 // Draw areas..
71316                 var areagroup = drawLayer
71317                     .selectAll('g.areagroup')
71318                     .data(['fill', 'shadow', 'stroke']);
71319
71320                 areagroup = areagroup.enter()
71321                     .append('g')
71322                     .attr('class', function(d) { return 'areagroup area-' + d; })
71323                     .merge(areagroup);
71324
71325                 var paths = areagroup
71326                     .selectAll('path')
71327                     .filter(filter)
71328                     .data(function(layer) { return data[layer]; }, osmEntity.key);
71329
71330                 paths.exit()
71331                     .remove();
71332
71333
71334                 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
71335                 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
71336
71337                 function sortedByArea(entity) {
71338                     if (this._parent.__data__ === 'fill') {
71339                         return fillpaths[bisect(fillpaths, -entity.area(graph))];
71340                     }
71341                 }
71342
71343                 paths = paths.enter()
71344                     .insert('path', sortedByArea)
71345                     .merge(paths)
71346                     .each(function(entity) {
71347                         var layer = this.parentNode.__data__;
71348                         this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
71349
71350                         if (layer === 'fill') {
71351                             this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
71352                             this.style.fill = this.style.stroke = getPatternStyle(entity.tags);
71353                         }
71354                     })
71355                     .classed('added', function(d) {
71356                         return !base.entities[d.id];
71357                     })
71358                     .classed('geometry-edited', function(d) {
71359                         return graph.entities[d.id] &&
71360                             base.entities[d.id] &&
71361                             !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
71362                     })
71363                     .classed('retagged', function(d) {
71364                         return graph.entities[d.id] &&
71365                             base.entities[d.id] &&
71366                             !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
71367                     })
71368                     .call(svgTagClasses())
71369                     .attr('d', path);
71370
71371
71372                 // Draw touch targets..
71373                 touchLayer
71374                     .call(drawTargets, graph, data.stroke, filter);
71375             }
71376
71377             return drawAreas;
71378         }
71379
71380         //[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]
71381         //[4a]          NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
71382         //[5]           Name       ::=          NameStartChar (NameChar)*
71383         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
71384         var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
71385         var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
71386         //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
71387         //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(',')
71388
71389         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
71390         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
71391         var S_TAG = 0;//tag name offerring
71392         var S_ATTR = 1;//attr name offerring 
71393         var S_ATTR_SPACE=2;//attr name end and space offer
71394         var S_EQ = 3;//=space?
71395         var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
71396         var S_ATTR_END = 5;//attr value end and no space(quot end)
71397         var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
71398         var S_TAG_CLOSE = 7;//closed el<el />
71399
71400         function XMLReader(){
71401                 
71402         }
71403
71404         XMLReader.prototype = {
71405                 parse:function(source,defaultNSMap,entityMap){
71406                         var domBuilder = this.domBuilder;
71407                         domBuilder.startDocument();
71408                         _copy(defaultNSMap ,defaultNSMap = {});
71409                         parse(source,defaultNSMap,entityMap,
71410                                         domBuilder,this.errorHandler);
71411                         domBuilder.endDocument();
71412                 }
71413         };
71414         function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
71415                 function fixedFromCharCode(code) {
71416                         // String.prototype.fromCharCode does not supports
71417                         // > 2 bytes unicode chars directly
71418                         if (code > 0xffff) {
71419                                 code -= 0x10000;
71420                                 var surrogate1 = 0xd800 + (code >> 10)
71421                                         , surrogate2 = 0xdc00 + (code & 0x3ff);
71422
71423                                 return String.fromCharCode(surrogate1, surrogate2);
71424                         } else {
71425                                 return String.fromCharCode(code);
71426                         }
71427                 }
71428                 function entityReplacer(a){
71429                         var k = a.slice(1,-1);
71430                         if(k in entityMap){
71431                                 return entityMap[k]; 
71432                         }else if(k.charAt(0) === '#'){
71433                                 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
71434                         }else{
71435                                 errorHandler.error('entity not found:'+a);
71436                                 return a;
71437                         }
71438                 }
71439                 function appendText(end){//has some bugs
71440                         if(end>start){
71441                                 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
71442                                 locator&&position(start);
71443                                 domBuilder.characters(xt,0,end-start);
71444                                 start = end;
71445                         }
71446                 }
71447                 function position(p,m){
71448                         while(p>=lineEnd && (m = linePattern.exec(source))){
71449                                 lineStart = m.index;
71450                                 lineEnd = lineStart + m[0].length;
71451                                 locator.lineNumber++;
71452                                 //console.log('line++:',locator,startPos,endPos)
71453                         }
71454                         locator.columnNumber = p-lineStart+1;
71455                 }
71456                 var lineStart = 0;
71457                 var lineEnd = 0;
71458                 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
71459                 var locator = domBuilder.locator;
71460                 
71461                 var parseStack = [{currentNSMap:defaultNSMapCopy}];
71462                 var closeMap = {};
71463                 var start = 0;
71464                 while(true){
71465                         try{
71466                                 var tagStart = source.indexOf('<',start);
71467                                 if(tagStart<0){
71468                                         if(!source.substr(start).match(/^\s*$/)){
71469                                                 var doc = domBuilder.doc;
71470                                         var text = doc.createTextNode(source.substr(start));
71471                                         doc.appendChild(text);
71472                                         domBuilder.currentElement = text;
71473                                         }
71474                                         return;
71475                                 }
71476                                 if(tagStart>start){
71477                                         appendText(tagStart);
71478                                 }
71479                                 switch(source.charAt(tagStart+1)){
71480                                 case '/':
71481                                         var end = source.indexOf('>',tagStart+3);
71482                                         var tagName = source.substring(tagStart+2,end);
71483                                         var config = parseStack.pop();
71484                                         if(end<0){
71485                                                 
71486                                         tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
71487                                         //console.error('#@@@@@@'+tagName)
71488                                         errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
71489                                         end = tagStart+1+tagName.length;
71490                                 }else if(tagName.match(/\s</)){
71491                                         tagName = tagName.replace(/[\s<].*/,'');
71492                                         errorHandler.error("end tag name: "+tagName+' maybe not complete');
71493                                         end = tagStart+1+tagName.length;
71494                                         }
71495                                         //console.error(parseStack.length,parseStack)
71496                                         //console.error(config);
71497                                         var localNSMap = config.localNSMap;
71498                                         var endMatch = config.tagName == tagName;
71499                                         var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
71500                                 if(endIgnoreCaseMach){
71501                                         domBuilder.endElement(config.uri,config.localName,tagName);
71502                                                 if(localNSMap){
71503                                                         for(var prefix in localNSMap){
71504                                                                 domBuilder.endPrefixMapping(prefix) ;
71505                                                         }
71506                                                 }
71507                                                 if(!endMatch){
71508                                         errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
71509                                                 }
71510                                 }else{
71511                                         parseStack.push(config);
71512                                 }
71513                                         
71514                                         end++;
71515                                         break;
71516                                         // end elment
71517                                 case '?':// <?...?>
71518                                         locator&&position(tagStart);
71519                                         end = parseInstruction(source,tagStart,domBuilder);
71520                                         break;
71521                                 case '!':// <!doctype,<![CDATA,<!--
71522                                         locator&&position(tagStart);
71523                                         end = parseDCC(source,tagStart,domBuilder,errorHandler);
71524                                         break;
71525                                 default:
71526                                         locator&&position(tagStart);
71527                                         var el = new ElementAttributes();
71528                                         var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
71529                                         //elStartEnd
71530                                         var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
71531                                         var len = el.length;
71532                                         
71533                                         
71534                                         if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
71535                                                 el.closed = true;
71536                                                 if(!entityMap.nbsp){
71537                                                         errorHandler.warning('unclosed xml attribute');
71538                                                 }
71539                                         }
71540                                         if(locator && len){
71541                                                 var locator2 = copyLocator(locator,{});
71542                                                 //try{//attribute position fixed
71543                                                 for(var i = 0;i<len;i++){
71544                                                         var a = el[i];
71545                                                         position(a.offset);
71546                                                         a.locator = copyLocator(locator,{});
71547                                                 }
71548                                                 //}catch(e){console.error('@@@@@'+e)}
71549                                                 domBuilder.locator = locator2;
71550                                                 if(appendElement(el,domBuilder,currentNSMap)){
71551                                                         parseStack.push(el);
71552                                                 }
71553                                                 domBuilder.locator = locator;
71554                                         }else{
71555                                                 if(appendElement(el,domBuilder,currentNSMap)){
71556                                                         parseStack.push(el);
71557                                                 }
71558                                         }
71559                                         
71560                                         
71561                                         
71562                                         if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
71563                                                 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
71564                                         }else{
71565                                                 end++;
71566                                         }
71567                                 }
71568                         }catch(e){
71569                                 errorHandler.error('element parse error: '+e);
71570                                 //errorHandler.error('element parse error: '+e);
71571                                 end = -1;
71572                                 //throw e;
71573                         }
71574                         if(end>start){
71575                                 start = end;
71576                         }else{
71577                                 //TODO: 这里有可能sax回退,有位置错误风险
71578                                 appendText(Math.max(tagStart,start)+1);
71579                         }
71580                 }
71581         }
71582         function copyLocator(f,t){
71583                 t.lineNumber = f.lineNumber;
71584                 t.columnNumber = f.columnNumber;
71585                 return t;
71586         }
71587
71588         /**
71589          * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
71590          * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
71591          */
71592         function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
71593                 var attrName;
71594                 var value;
71595                 var p = ++start;
71596                 var s = S_TAG;//status
71597                 while(true){
71598                         var c = source.charAt(p);
71599                         switch(c){
71600                         case '=':
71601                                 if(s === S_ATTR){//attrName
71602                                         attrName = source.slice(start,p);
71603                                         s = S_EQ;
71604                                 }else if(s === S_ATTR_SPACE){
71605                                         s = S_EQ;
71606                                 }else{
71607                                         //fatalError: equal must after attrName or space after attrName
71608                                         throw new Error('attribute equal must after attrName');
71609                                 }
71610                                 break;
71611                         case '\'':
71612                         case '"':
71613                                 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
71614                                         ){//equal
71615                                         if(s === S_ATTR){
71616                                                 errorHandler.warning('attribute value must after "="');
71617                                                 attrName = source.slice(start,p);
71618                                         }
71619                                         start = p+1;
71620                                         p = source.indexOf(c,start);
71621                                         if(p>0){
71622                                                 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71623                                                 el.add(attrName,value,start-1);
71624                                                 s = S_ATTR_END;
71625                                         }else{
71626                                                 //fatalError: no end quot match
71627                                                 throw new Error('attribute value no end \''+c+'\' match');
71628                                         }
71629                                 }else if(s == S_ATTR_NOQUOT_VALUE){
71630                                         value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71631                                         //console.log(attrName,value,start,p)
71632                                         el.add(attrName,value,start);
71633                                         //console.dir(el)
71634                                         errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
71635                                         start = p+1;
71636                                         s = S_ATTR_END;
71637                                 }else{
71638                                         //fatalError: no equal before
71639                                         throw new Error('attribute value must after "="');
71640                                 }
71641                                 break;
71642                         case '/':
71643                                 switch(s){
71644                                 case S_TAG:
71645                                         el.setTagName(source.slice(start,p));
71646                                 case S_ATTR_END:
71647                                 case S_TAG_SPACE:
71648                                 case S_TAG_CLOSE:
71649                                         s =S_TAG_CLOSE;
71650                                         el.closed = true;
71651                                 case S_ATTR_NOQUOT_VALUE:
71652                                 case S_ATTR:
71653                                 case S_ATTR_SPACE:
71654                                         break;
71655                                 //case S_EQ:
71656                                 default:
71657                                         throw new Error("attribute invalid close char('/')")
71658                                 }
71659                                 break;
71660                         case ''://end document
71661                                 //throw new Error('unexpected end of input')
71662                                 errorHandler.error('unexpected end of input');
71663                                 if(s == S_TAG){
71664                                         el.setTagName(source.slice(start,p));
71665                                 }
71666                                 return p;
71667                         case '>':
71668                                 switch(s){
71669                                 case S_TAG:
71670                                         el.setTagName(source.slice(start,p));
71671                                 case S_ATTR_END:
71672                                 case S_TAG_SPACE:
71673                                 case S_TAG_CLOSE:
71674                                         break;//normal
71675                                 case S_ATTR_NOQUOT_VALUE://Compatible state
71676                                 case S_ATTR:
71677                                         value = source.slice(start,p);
71678                                         if(value.slice(-1) === '/'){
71679                                                 el.closed  = true;
71680                                                 value = value.slice(0,-1);
71681                                         }
71682                                 case S_ATTR_SPACE:
71683                                         if(s === S_ATTR_SPACE){
71684                                                 value = attrName;
71685                                         }
71686                                         if(s == S_ATTR_NOQUOT_VALUE){
71687                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
71688                                                 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
71689                                         }else{
71690                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
71691                                                         errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
71692                                                 }
71693                                                 el.add(value,value,start);
71694                                         }
71695                                         break;
71696                                 case S_EQ:
71697                                         throw new Error('attribute value missed!!');
71698                                 }
71699         //                      console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
71700                                 return p;
71701                         /*xml space '\x20' | #x9 | #xD | #xA; */
71702                         case '\u0080':
71703                                 c = ' ';
71704                         default:
71705                                 if(c<= ' '){//space
71706                                         switch(s){
71707                                         case S_TAG:
71708                                                 el.setTagName(source.slice(start,p));//tagName
71709                                                 s = S_TAG_SPACE;
71710                                                 break;
71711                                         case S_ATTR:
71712                                                 attrName = source.slice(start,p);
71713                                                 s = S_ATTR_SPACE;
71714                                                 break;
71715                                         case S_ATTR_NOQUOT_VALUE:
71716                                                 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
71717                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
71718                                                 el.add(attrName,value,start);
71719                                         case S_ATTR_END:
71720                                                 s = S_TAG_SPACE;
71721                                                 break;
71722                                         //case S_TAG_SPACE:
71723                                         //case S_EQ:
71724                                         //case S_ATTR_SPACE:
71725                                         //      void();break;
71726                                         //case S_TAG_CLOSE:
71727                                                 //ignore warning
71728                                         }
71729                                 }else{//not space
71730         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
71731         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
71732                                         switch(s){
71733                                         //case S_TAG:void();break;
71734                                         //case S_ATTR:void();break;
71735                                         //case S_ATTR_NOQUOT_VALUE:void();break;
71736                                         case S_ATTR_SPACE:
71737                                                 var tagName =  el.tagName;
71738                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
71739                                                         errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
71740                                                 }
71741                                                 el.add(attrName,attrName,start);
71742                                                 start = p;
71743                                                 s = S_ATTR;
71744                                                 break;
71745                                         case S_ATTR_END:
71746                                                 errorHandler.warning('attribute space is required"'+attrName+'"!!');
71747                                         case S_TAG_SPACE:
71748                                                 s = S_ATTR;
71749                                                 start = p;
71750                                                 break;
71751                                         case S_EQ:
71752                                                 s = S_ATTR_NOQUOT_VALUE;
71753                                                 start = p;
71754                                                 break;
71755                                         case S_TAG_CLOSE:
71756                                                 throw new Error("elements closed character '/' and '>' must be connected to");
71757                                         }
71758                                 }
71759                         }//end outer switch
71760                         //console.log('p++',p)
71761                         p++;
71762                 }
71763         }
71764         /**
71765          * @return true if has new namespace define
71766          */
71767         function appendElement(el,domBuilder,currentNSMap){
71768                 var tagName = el.tagName;
71769                 var localNSMap = null;
71770                 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
71771                 var i = el.length;
71772                 while(i--){
71773                         var a = el[i];
71774                         var qName = a.qName;
71775                         var value = a.value;
71776                         var nsp = qName.indexOf(':');
71777                         if(nsp>0){
71778                                 var prefix = a.prefix = qName.slice(0,nsp);
71779                                 var localName = qName.slice(nsp+1);
71780                                 var nsPrefix = prefix === 'xmlns' && localName;
71781                         }else{
71782                                 localName = qName;
71783                                 prefix = null;
71784                                 nsPrefix = qName === 'xmlns' && '';
71785                         }
71786                         //can not set prefix,because prefix !== ''
71787                         a.localName = localName ;
71788                         //prefix == null for no ns prefix attribute 
71789                         if(nsPrefix !== false){//hack!!
71790                                 if(localNSMap == null){
71791                                         localNSMap = {};
71792                                         //console.log(currentNSMap,0)
71793                                         _copy(currentNSMap,currentNSMap={});
71794                                         //console.log(currentNSMap,1)
71795                                 }
71796                                 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
71797                                 a.uri = 'http://www.w3.org/2000/xmlns/';
71798                                 domBuilder.startPrefixMapping(nsPrefix, value); 
71799                         }
71800                 }
71801                 var i = el.length;
71802                 while(i--){
71803                         a = el[i];
71804                         var prefix = a.prefix;
71805                         if(prefix){//no prefix attribute has no namespace
71806                                 if(prefix === 'xml'){
71807                                         a.uri = 'http://www.w3.org/XML/1998/namespace';
71808                                 }if(prefix !== 'xmlns'){
71809                                         a.uri = currentNSMap[prefix || ''];
71810                                         
71811                                         //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
71812                                 }
71813                         }
71814                 }
71815                 var nsp = tagName.indexOf(':');
71816                 if(nsp>0){
71817                         prefix = el.prefix = tagName.slice(0,nsp);
71818                         localName = el.localName = tagName.slice(nsp+1);
71819                 }else{
71820                         prefix = null;//important!!
71821                         localName = el.localName = tagName;
71822                 }
71823                 //no prefix element has default namespace
71824                 var ns = el.uri = currentNSMap[prefix || ''];
71825                 domBuilder.startElement(ns,localName,tagName,el);
71826                 //endPrefixMapping and startPrefixMapping have not any help for dom builder
71827                 //localNSMap = null
71828                 if(el.closed){
71829                         domBuilder.endElement(ns,localName,tagName);
71830                         if(localNSMap){
71831                                 for(prefix in localNSMap){
71832                                         domBuilder.endPrefixMapping(prefix); 
71833                                 }
71834                         }
71835                 }else{
71836                         el.currentNSMap = currentNSMap;
71837                         el.localNSMap = localNSMap;
71838                         //parseStack.push(el);
71839                         return true;
71840                 }
71841         }
71842         function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
71843                 if(/^(?:script|textarea)$/i.test(tagName)){
71844                         var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
71845                         var text = source.substring(elStartEnd+1,elEndStart);
71846                         if(/[&<]/.test(text)){
71847                                 if(/^script$/i.test(tagName)){
71848                                         //if(!/\]\]>/.test(text)){
71849                                                 //lexHandler.startCDATA();
71850                                                 domBuilder.characters(text,0,text.length);
71851                                                 //lexHandler.endCDATA();
71852                                                 return elEndStart;
71853                                         //}
71854                                 }//}else{//text area
71855                                         text = text.replace(/&#?\w+;/g,entityReplacer);
71856                                         domBuilder.characters(text,0,text.length);
71857                                         return elEndStart;
71858                                 //}
71859                                 
71860                         }
71861                 }
71862                 return elStartEnd+1;
71863         }
71864         function fixSelfClosed(source,elStartEnd,tagName,closeMap){
71865                 //if(tagName in closeMap){
71866                 var pos = closeMap[tagName];
71867                 if(pos == null){
71868                         //console.log(tagName)
71869                         pos =  source.lastIndexOf('</'+tagName+'>');
71870                         if(pos<elStartEnd){//忘记闭合
71871                                 pos = source.lastIndexOf('</'+tagName);
71872                         }
71873                         closeMap[tagName] =pos;
71874                 }
71875                 return pos<elStartEnd;
71876                 //} 
71877         }
71878         function _copy(source,target){
71879                 for(var n in source){target[n] = source[n];}
71880         }
71881         function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
71882                 var next= source.charAt(start+2);
71883                 switch(next){
71884                 case '-':
71885                         if(source.charAt(start + 3) === '-'){
71886                                 var end = source.indexOf('-->',start+4);
71887                                 //append comment source.substring(4,end)//<!--
71888                                 if(end>start){
71889                                         domBuilder.comment(source,start+4,end-start-4);
71890                                         return end+3;
71891                                 }else{
71892                                         errorHandler.error("Unclosed comment");
71893                                         return -1;
71894                                 }
71895                         }else{
71896                                 //error
71897                                 return -1;
71898                         }
71899                 default:
71900                         if(source.substr(start+3,6) == 'CDATA['){
71901                                 var end = source.indexOf(']]>',start+9);
71902                                 domBuilder.startCDATA();
71903                                 domBuilder.characters(source,start+9,end-start-9);
71904                                 domBuilder.endCDATA(); 
71905                                 return end+3;
71906                         }
71907                         //<!DOCTYPE
71908                         //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
71909                         var matchs = split(source,start);
71910                         var len = matchs.length;
71911                         if(len>1 && /!doctype/i.test(matchs[0][0])){
71912                                 var name = matchs[1][0];
71913                                 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
71914                                 var sysid = len>4 && matchs[4][0];
71915                                 var lastMatch = matchs[len-1];
71916                                 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
71917                                                 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
71918                                 domBuilder.endDTD();
71919                                 
71920                                 return lastMatch.index+lastMatch[0].length
71921                         }
71922                 }
71923                 return -1;
71924         }
71925
71926
71927
71928         function parseInstruction(source,start,domBuilder){
71929                 var end = source.indexOf('?>',start);
71930                 if(end){
71931                         var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
71932                         if(match){
71933                                 var len = match[0].length;
71934                                 domBuilder.processingInstruction(match[1], match[2]) ;
71935                                 return end+2;
71936                         }else{//error
71937                                 return -1;
71938                         }
71939                 }
71940                 return -1;
71941         }
71942
71943         /**
71944          * @param source
71945          */
71946         function ElementAttributes(source){
71947                 
71948         }
71949         ElementAttributes.prototype = {
71950                 setTagName:function(tagName){
71951                         if(!tagNamePattern.test(tagName)){
71952                                 throw new Error('invalid tagName:'+tagName)
71953                         }
71954                         this.tagName = tagName;
71955                 },
71956                 add:function(qName,value,offset){
71957                         if(!tagNamePattern.test(qName)){
71958                                 throw new Error('invalid attribute:'+qName)
71959                         }
71960                         this[this.length++] = {qName:qName,value:value,offset:offset};
71961                 },
71962                 length:0,
71963                 getLocalName:function(i){return this[i].localName},
71964                 getLocator:function(i){return this[i].locator},
71965                 getQName:function(i){return this[i].qName},
71966                 getURI:function(i){return this[i].uri},
71967                 getValue:function(i){return this[i].value}
71968         //      ,getIndex:function(uri, localName)){
71969         //              if(localName){
71970         //                      
71971         //              }else{
71972         //                      var qName = uri
71973         //              }
71974         //      },
71975         //      getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
71976         //      getType:function(uri,localName){}
71977         //      getType:function(i){},
71978         };
71979
71980
71981
71982
71983         function _set_proto_(thiz,parent){
71984                 thiz.__proto__ = parent;
71985                 return thiz;
71986         }
71987         if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
71988                 _set_proto_ = function(thiz,parent){
71989                         function p(){}          p.prototype = parent;
71990                         p = new p();
71991                         for(parent in thiz){
71992                                 p[parent] = thiz[parent];
71993                         }
71994                         return p;
71995                 };
71996         }
71997
71998         function split(source,start){
71999                 var match;
72000                 var buf = [];
72001                 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
72002                 reg.lastIndex = start;
72003                 reg.exec(source);//skip <
72004                 while(match = reg.exec(source)){
72005                         buf.push(match);
72006                         if(match[1])return buf;
72007                 }
72008         }
72009
72010         var XMLReader_1 = XMLReader;
72011
72012         var sax = {
72013                 XMLReader: XMLReader_1
72014         };
72015
72016         /*
72017          * DOM Level 2
72018          * Object DOMException
72019          * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
72020          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
72021          */
72022
72023         function copy$3(src,dest){
72024                 for(var p in src){
72025                         dest[p] = src[p];
72026                 }
72027         }
72028         /**
72029         ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
72030         ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
72031          */
72032         function _extends(Class,Super){
72033                 var pt = Class.prototype;
72034                 if(Object.create){
72035                         var ppt = Object.create(Super.prototype);
72036                         pt.__proto__ = ppt;
72037                 }
72038                 if(!(pt instanceof Super)){
72039                         function t(){}          t.prototype = Super.prototype;
72040                         t = new t();
72041                         copy$3(pt,t);
72042                         Class.prototype = pt = t;
72043                 }
72044                 if(pt.constructor != Class){
72045                         if(typeof Class != 'function'){
72046                                 console.error("unknow Class:"+Class);
72047                         }
72048                         pt.constructor = Class;
72049                 }
72050         }
72051         var htmlns = 'http://www.w3.org/1999/xhtml' ;
72052         // Node Types
72053         var NodeType = {};
72054         var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
72055         var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
72056         var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
72057         var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
72058         var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
72059         var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
72060         var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
72061         var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
72062         var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
72063         var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
72064         var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
72065         var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
72066
72067         // ExceptionCode
72068         var ExceptionCode = {};
72069         var ExceptionMessage = {};
72070         var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
72071         var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
72072         var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
72073         var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
72074         var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
72075         var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
72076         var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
72077         var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
72078         var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
72079         var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
72080         //level2
72081         var INVALID_STATE_ERR           = ExceptionCode.INVALID_STATE_ERR               = ((ExceptionMessage[11]="Invalid state"),11);
72082         var SYNTAX_ERR                  = ExceptionCode.SYNTAX_ERR                      = ((ExceptionMessage[12]="Syntax error"),12);
72083         var INVALID_MODIFICATION_ERR    = ExceptionCode.INVALID_MODIFICATION_ERR        = ((ExceptionMessage[13]="Invalid modification"),13);
72084         var NAMESPACE_ERR               = ExceptionCode.NAMESPACE_ERR                   = ((ExceptionMessage[14]="Invalid namespace"),14);
72085         var INVALID_ACCESS_ERR          = ExceptionCode.INVALID_ACCESS_ERR              = ((ExceptionMessage[15]="Invalid access"),15);
72086
72087
72088         function DOMException$2(code, message) {
72089                 if(message instanceof Error){
72090                         var error = message;
72091                 }else{
72092                         error = this;
72093                         Error.call(this, ExceptionMessage[code]);
72094                         this.message = ExceptionMessage[code];
72095                         if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException$2);
72096                 }
72097                 error.code = code;
72098                 if(message) this.message = this.message + ": " + message;
72099                 return error;
72100         }DOMException$2.prototype = Error.prototype;
72101         copy$3(ExceptionCode,DOMException$2);
72102         /**
72103          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
72104          * 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.
72105          * The items in the NodeList are accessible via an integral index, starting from 0.
72106          */
72107         function NodeList() {
72108         }NodeList.prototype = {
72109                 /**
72110                  * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
72111                  * @standard level1
72112                  */
72113                 length:0, 
72114                 /**
72115                  * 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.
72116                  * @standard level1
72117                  * @param index  unsigned long 
72118                  *   Index into the collection.
72119                  * @return Node
72120                  *      The node at the indexth position in the NodeList, or null if that is not a valid index. 
72121                  */
72122                 item: function(index) {
72123                         return this[index] || null;
72124                 },
72125                 toString:function(isHTML,nodeFilter){
72126                         for(var buf = [], i = 0;i<this.length;i++){
72127                                 serializeToString(this[i],buf,isHTML,nodeFilter);
72128                         }
72129                         return buf.join('');
72130                 }
72131         };
72132         function LiveNodeList(node,refresh){
72133                 this._node = node;
72134                 this._refresh = refresh;
72135                 _updateLiveList(this);
72136         }
72137         function _updateLiveList(list){
72138                 var inc = list._node._inc || list._node.ownerDocument._inc;
72139                 if(list._inc != inc){
72140                         var ls = list._refresh(list._node);
72141                         //console.log(ls.length)
72142                         __set__(list,'length',ls.length);
72143                         copy$3(ls,list);
72144                         list._inc = inc;
72145                 }
72146         }
72147         LiveNodeList.prototype.item = function(i){
72148                 _updateLiveList(this);
72149                 return this[i];
72150         };
72151
72152         _extends(LiveNodeList,NodeList);
72153         /**
72154          * 
72155          * 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.
72156          * NamedNodeMap objects in the DOM are live.
72157          * used for attributes or DocumentType entities 
72158          */
72159         function NamedNodeMap() {
72160         }
72161         function _findNodeIndex(list,node){
72162                 var i = list.length;
72163                 while(i--){
72164                         if(list[i] === node){return i}
72165                 }
72166         }
72167
72168         function _addNamedNode(el,list,newAttr,oldAttr){
72169                 if(oldAttr){
72170                         list[_findNodeIndex(list,oldAttr)] = newAttr;
72171                 }else{
72172                         list[list.length++] = newAttr;
72173                 }
72174                 if(el){
72175                         newAttr.ownerElement = el;
72176                         var doc = el.ownerDocument;
72177                         if(doc){
72178                                 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
72179                                 _onAddAttribute(doc,el,newAttr);
72180                         }
72181                 }
72182         }
72183         function _removeNamedNode(el,list,attr){
72184                 //console.log('remove attr:'+attr)
72185                 var i = _findNodeIndex(list,attr);
72186                 if(i>=0){
72187                         var lastIndex = list.length-1;
72188                         while(i<lastIndex){
72189                                 list[i] = list[++i];
72190                         }
72191                         list.length = lastIndex;
72192                         if(el){
72193                                 var doc = el.ownerDocument;
72194                                 if(doc){
72195                                         _onRemoveAttribute(doc,el,attr);
72196                                         attr.ownerElement = null;
72197                                 }
72198                         }
72199                 }else{
72200                         throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
72201                 }
72202         }
72203         NamedNodeMap.prototype = {
72204                 length:0,
72205                 item:NodeList.prototype.item,
72206                 getNamedItem: function(key) {
72207         //              if(key.indexOf(':')>0 || key == 'xmlns'){
72208         //                      return null;
72209         //              }
72210                         //console.log()
72211                         var i = this.length;
72212                         while(i--){
72213                                 var attr = this[i];
72214                                 //console.log(attr.nodeName,key)
72215                                 if(attr.nodeName == key){
72216                                         return attr;
72217                                 }
72218                         }
72219                 },
72220                 setNamedItem: function(attr) {
72221                         var el = attr.ownerElement;
72222                         if(el && el!=this._ownerElement){
72223                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
72224                         }
72225                         var oldAttr = this.getNamedItem(attr.nodeName);
72226                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
72227                         return oldAttr;
72228                 },
72229                 /* returns Node */
72230                 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
72231                         var el = attr.ownerElement, oldAttr;
72232                         if(el && el!=this._ownerElement){
72233                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
72234                         }
72235                         oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
72236                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
72237                         return oldAttr;
72238                 },
72239
72240                 /* returns Node */
72241                 removeNamedItem: function(key) {
72242                         var attr = this.getNamedItem(key);
72243                         _removeNamedNode(this._ownerElement,this,attr);
72244                         return attr;
72245                         
72246                         
72247                 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
72248                 
72249                 //for level2
72250                 removeNamedItemNS:function(namespaceURI,localName){
72251                         var attr = this.getNamedItemNS(namespaceURI,localName);
72252                         _removeNamedNode(this._ownerElement,this,attr);
72253                         return attr;
72254                 },
72255                 getNamedItemNS: function(namespaceURI, localName) {
72256                         var i = this.length;
72257                         while(i--){
72258                                 var node = this[i];
72259                                 if(node.localName == localName && node.namespaceURI == namespaceURI){
72260                                         return node;
72261                                 }
72262                         }
72263                         return null;
72264                 }
72265         };
72266         /**
72267          * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
72268          */
72269         function DOMImplementation(/* Object */ features) {
72270                 this._features = {};
72271                 if (features) {
72272                         for (var feature in features) {
72273                                  this._features = features[feature];
72274                         }
72275                 }
72276         }
72277         DOMImplementation.prototype = {
72278                 hasFeature: function(/* string */ feature, /* string */ version) {
72279                         var versions = this._features[feature.toLowerCase()];
72280                         if (versions && (!version || version in versions)) {
72281                                 return true;
72282                         } else {
72283                                 return false;
72284                         }
72285                 },
72286                 // Introduced in DOM Level 2:
72287                 createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
72288                         var doc = new Document();
72289                         doc.implementation = this;
72290                         doc.childNodes = new NodeList();
72291                         doc.doctype = doctype;
72292                         if(doctype){
72293                                 doc.appendChild(doctype);
72294                         }
72295                         if(qualifiedName){
72296                                 var root = doc.createElementNS(namespaceURI,qualifiedName);
72297                                 doc.appendChild(root);
72298                         }
72299                         return doc;
72300                 },
72301                 // Introduced in DOM Level 2:
72302                 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
72303                         var node = new DocumentType();
72304                         node.name = qualifiedName;
72305                         node.nodeName = qualifiedName;
72306                         node.publicId = publicId;
72307                         node.systemId = systemId;
72308                         // Introduced in DOM Level 2:
72309                         //readonly attribute DOMString        internalSubset;
72310                         
72311                         //TODO:..
72312                         //  readonly attribute NamedNodeMap     entities;
72313                         //  readonly attribute NamedNodeMap     notations;
72314                         return node;
72315                 }
72316         };
72317
72318
72319         /**
72320          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
72321          */
72322
72323         function Node$2() {
72324         }
72325         Node$2.prototype = {
72326                 firstChild : null,
72327                 lastChild : null,
72328                 previousSibling : null,
72329                 nextSibling : null,
72330                 attributes : null,
72331                 parentNode : null,
72332                 childNodes : null,
72333                 ownerDocument : null,
72334                 nodeValue : null,
72335                 namespaceURI : null,
72336                 prefix : null,
72337                 localName : null,
72338                 // Modified in DOM Level 2:
72339                 insertBefore:function(newChild, refChild){//raises 
72340                         return _insertBefore(this,newChild,refChild);
72341                 },
72342                 replaceChild:function(newChild, oldChild){//raises 
72343                         this.insertBefore(newChild,oldChild);
72344                         if(oldChild){
72345                                 this.removeChild(oldChild);
72346                         }
72347                 },
72348                 removeChild:function(oldChild){
72349                         return _removeChild(this,oldChild);
72350                 },
72351                 appendChild:function(newChild){
72352                         return this.insertBefore(newChild,null);
72353                 },
72354                 hasChildNodes:function(){
72355                         return this.firstChild != null;
72356                 },
72357                 cloneNode:function(deep){
72358                         return cloneNode(this.ownerDocument||this,this,deep);
72359                 },
72360                 // Modified in DOM Level 2:
72361                 normalize:function(){
72362                         var child = this.firstChild;
72363                         while(child){
72364                                 var next = child.nextSibling;
72365                                 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
72366                                         this.removeChild(next);
72367                                         child.appendData(next.data);
72368                                 }else{
72369                                         child.normalize();
72370                                         child = next;
72371                                 }
72372                         }
72373                 },
72374                 // Introduced in DOM Level 2:
72375                 isSupported:function(feature, version){
72376                         return this.ownerDocument.implementation.hasFeature(feature,version);
72377                 },
72378             // Introduced in DOM Level 2:
72379             hasAttributes:function(){
72380                 return this.attributes.length>0;
72381             },
72382             lookupPrefix:function(namespaceURI){
72383                 var el = this;
72384                 while(el){
72385                         var map = el._nsMap;
72386                         //console.dir(map)
72387                         if(map){
72388                                 for(var n in map){
72389                                         if(map[n] == namespaceURI){
72390                                                 return n;
72391                                         }
72392                                 }
72393                         }
72394                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
72395                 }
72396                 return null;
72397             },
72398             // Introduced in DOM Level 3:
72399             lookupNamespaceURI:function(prefix){
72400                 var el = this;
72401                 while(el){
72402                         var map = el._nsMap;
72403                         //console.dir(map)
72404                         if(map){
72405                                 if(prefix in map){
72406                                         return map[prefix] ;
72407                                 }
72408                         }
72409                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
72410                 }
72411                 return null;
72412             },
72413             // Introduced in DOM Level 3:
72414             isDefaultNamespace:function(namespaceURI){
72415                 var prefix = this.lookupPrefix(namespaceURI);
72416                 return prefix == null;
72417             }
72418         };
72419
72420
72421         function _xmlEncoder(c){
72422                 return c == '<' && '&lt;' ||
72423                  c == '>' && '&gt;' ||
72424                  c == '&' && '&amp;' ||
72425                  c == '"' && '&quot;' ||
72426                  '&#'+c.charCodeAt()+';'
72427         }
72428
72429
72430         copy$3(NodeType,Node$2);
72431         copy$3(NodeType,Node$2.prototype);
72432
72433         /**
72434          * @param callback return true for continue,false for break
72435          * @return boolean true: break visit;
72436          */
72437         function _visitNode(node,callback){
72438                 if(callback(node)){
72439                         return true;
72440                 }
72441                 if(node = node.firstChild){
72442                         do{
72443                                 if(_visitNode(node,callback)){return true}
72444                 }while(node=node.nextSibling)
72445             }
72446         }
72447
72448
72449
72450         function Document(){
72451         }
72452         function _onAddAttribute(doc,el,newAttr){
72453                 doc && doc._inc++;
72454                 var ns = newAttr.namespaceURI ;
72455                 if(ns == 'http://www.w3.org/2000/xmlns/'){
72456                         //update namespace
72457                         el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
72458                 }
72459         }
72460         function _onRemoveAttribute(doc,el,newAttr,remove){
72461                 doc && doc._inc++;
72462                 var ns = newAttr.namespaceURI ;
72463                 if(ns == 'http://www.w3.org/2000/xmlns/'){
72464                         //update namespace
72465                         delete el._nsMap[newAttr.prefix?newAttr.localName:''];
72466                 }
72467         }
72468         function _onUpdateChild(doc,el,newChild){
72469                 if(doc && doc._inc){
72470                         doc._inc++;
72471                         //update childNodes
72472                         var cs = el.childNodes;
72473                         if(newChild){
72474                                 cs[cs.length++] = newChild;
72475                         }else{
72476                                 //console.log(1)
72477                                 var child = el.firstChild;
72478                                 var i = 0;
72479                                 while(child){
72480                                         cs[i++] = child;
72481                                         child =child.nextSibling;
72482                                 }
72483                                 cs.length = i;
72484                         }
72485                 }
72486         }
72487
72488         /**
72489          * attributes;
72490          * children;
72491          * 
72492          * writeable properties:
72493          * nodeValue,Attr:value,CharacterData:data
72494          * prefix
72495          */
72496         function _removeChild(parentNode,child){
72497                 var previous = child.previousSibling;
72498                 var next = child.nextSibling;
72499                 if(previous){
72500                         previous.nextSibling = next;
72501                 }else{
72502                         parentNode.firstChild = next;
72503                 }
72504                 if(next){
72505                         next.previousSibling = previous;
72506                 }else{
72507                         parentNode.lastChild = previous;
72508                 }
72509                 _onUpdateChild(parentNode.ownerDocument,parentNode);
72510                 return child;
72511         }
72512         /**
72513          * preformance key(refChild == null)
72514          */
72515         function _insertBefore(parentNode,newChild,nextChild){
72516                 var cp = newChild.parentNode;
72517                 if(cp){
72518                         cp.removeChild(newChild);//remove and update
72519                 }
72520                 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
72521                         var newFirst = newChild.firstChild;
72522                         if (newFirst == null) {
72523                                 return newChild;
72524                         }
72525                         var newLast = newChild.lastChild;
72526                 }else{
72527                         newFirst = newLast = newChild;
72528                 }
72529                 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
72530
72531                 newFirst.previousSibling = pre;
72532                 newLast.nextSibling = nextChild;
72533                 
72534                 
72535                 if(pre){
72536                         pre.nextSibling = newFirst;
72537                 }else{
72538                         parentNode.firstChild = newFirst;
72539                 }
72540                 if(nextChild == null){
72541                         parentNode.lastChild = newLast;
72542                 }else{
72543                         nextChild.previousSibling = newLast;
72544                 }
72545                 do{
72546                         newFirst.parentNode = parentNode;
72547                 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
72548                 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
72549                 //console.log(parentNode.lastChild.nextSibling == null)
72550                 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
72551                         newChild.firstChild = newChild.lastChild = null;
72552                 }
72553                 return newChild;
72554         }
72555         function _appendSingleChild(parentNode,newChild){
72556                 var cp = newChild.parentNode;
72557                 if(cp){
72558                         var pre = parentNode.lastChild;
72559                         cp.removeChild(newChild);//remove and update
72560                         var pre = parentNode.lastChild;
72561                 }
72562                 var pre = parentNode.lastChild;
72563                 newChild.parentNode = parentNode;
72564                 newChild.previousSibling = pre;
72565                 newChild.nextSibling = null;
72566                 if(pre){
72567                         pre.nextSibling = newChild;
72568                 }else{
72569                         parentNode.firstChild = newChild;
72570                 }
72571                 parentNode.lastChild = newChild;
72572                 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
72573                 return newChild;
72574                 //console.log("__aa",parentNode.lastChild.nextSibling == null)
72575         }
72576         Document.prototype = {
72577                 //implementation : null,
72578                 nodeName :  '#document',
72579                 nodeType :  DOCUMENT_NODE,
72580                 doctype :  null,
72581                 documentElement :  null,
72582                 _inc : 1,
72583                 
72584                 insertBefore :  function(newChild, refChild){//raises 
72585                         if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
72586                                 var child = newChild.firstChild;
72587                                 while(child){
72588                                         var next = child.nextSibling;
72589                                         this.insertBefore(child,refChild);
72590                                         child = next;
72591                                 }
72592                                 return newChild;
72593                         }
72594                         if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
72595                                 this.documentElement = newChild;
72596                         }
72597                         
72598                         return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
72599                 },
72600                 removeChild :  function(oldChild){
72601                         if(this.documentElement == oldChild){
72602                                 this.documentElement = null;
72603                         }
72604                         return _removeChild(this,oldChild);
72605                 },
72606                 // Introduced in DOM Level 2:
72607                 importNode : function(importedNode,deep){
72608                         return importNode(this,importedNode,deep);
72609                 },
72610                 // Introduced in DOM Level 2:
72611                 getElementById :        function(id){
72612                         var rtv = null;
72613                         _visitNode(this.documentElement,function(node){
72614                                 if(node.nodeType == ELEMENT_NODE){
72615                                         if(node.getAttribute('id') == id){
72616                                                 rtv = node;
72617                                                 return true;
72618                                         }
72619                                 }
72620                         });
72621                         return rtv;
72622                 },
72623                 
72624                 //document factory method:
72625                 createElement : function(tagName){
72626                         var node = new Element();
72627                         node.ownerDocument = this;
72628                         node.nodeName = tagName;
72629                         node.tagName = tagName;
72630                         node.childNodes = new NodeList();
72631                         var attrs       = node.attributes = new NamedNodeMap();
72632                         attrs._ownerElement = node;
72633                         return node;
72634                 },
72635                 createDocumentFragment :        function(){
72636                         var node = new DocumentFragment();
72637                         node.ownerDocument = this;
72638                         node.childNodes = new NodeList();
72639                         return node;
72640                 },
72641                 createTextNode :        function(data){
72642                         var node = new Text();
72643                         node.ownerDocument = this;
72644                         node.appendData(data);
72645                         return node;
72646                 },
72647                 createComment : function(data){
72648                         var node = new Comment();
72649                         node.ownerDocument = this;
72650                         node.appendData(data);
72651                         return node;
72652                 },
72653                 createCDATASection :    function(data){
72654                         var node = new CDATASection();
72655                         node.ownerDocument = this;
72656                         node.appendData(data);
72657                         return node;
72658                 },
72659                 createProcessingInstruction :   function(target,data){
72660                         var node = new ProcessingInstruction();
72661                         node.ownerDocument = this;
72662                         node.tagName = node.target = target;
72663                         node.nodeValue= node.data = data;
72664                         return node;
72665                 },
72666                 createAttribute :       function(name){
72667                         var node = new Attr();
72668                         node.ownerDocument      = this;
72669                         node.name = name;
72670                         node.nodeName   = name;
72671                         node.localName = name;
72672                         node.specified = true;
72673                         return node;
72674                 },
72675                 createEntityReference : function(name){
72676                         var node = new EntityReference();
72677                         node.ownerDocument      = this;
72678                         node.nodeName   = name;
72679                         return node;
72680                 },
72681                 // Introduced in DOM Level 2:
72682                 createElementNS :       function(namespaceURI,qualifiedName){
72683                         var node = new Element();
72684                         var pl = qualifiedName.split(':');
72685                         var attrs       = node.attributes = new NamedNodeMap();
72686                         node.childNodes = new NodeList();
72687                         node.ownerDocument = this;
72688                         node.nodeName = qualifiedName;
72689                         node.tagName = qualifiedName;
72690                         node.namespaceURI = namespaceURI;
72691                         if(pl.length == 2){
72692                                 node.prefix = pl[0];
72693                                 node.localName = pl[1];
72694                         }else{
72695                                 //el.prefix = null;
72696                                 node.localName = qualifiedName;
72697                         }
72698                         attrs._ownerElement = node;
72699                         return node;
72700                 },
72701                 // Introduced in DOM Level 2:
72702                 createAttributeNS :     function(namespaceURI,qualifiedName){
72703                         var node = new Attr();
72704                         var pl = qualifiedName.split(':');
72705                         node.ownerDocument = this;
72706                         node.nodeName = qualifiedName;
72707                         node.name = qualifiedName;
72708                         node.namespaceURI = namespaceURI;
72709                         node.specified = true;
72710                         if(pl.length == 2){
72711                                 node.prefix = pl[0];
72712                                 node.localName = pl[1];
72713                         }else{
72714                                 //el.prefix = null;
72715                                 node.localName = qualifiedName;
72716                         }
72717                         return node;
72718                 }
72719         };
72720         _extends(Document,Node$2);
72721
72722
72723         function Element() {
72724                 this._nsMap = {};
72725         }Element.prototype = {
72726                 nodeType : ELEMENT_NODE,
72727                 hasAttribute : function(name){
72728                         return this.getAttributeNode(name)!=null;
72729                 },
72730                 getAttribute : function(name){
72731                         var attr = this.getAttributeNode(name);
72732                         return attr && attr.value || '';
72733                 },
72734                 getAttributeNode : function(name){
72735                         return this.attributes.getNamedItem(name);
72736                 },
72737                 setAttribute : function(name, value){
72738                         var attr = this.ownerDocument.createAttribute(name);
72739                         attr.value = attr.nodeValue = "" + value;
72740                         this.setAttributeNode(attr);
72741                 },
72742                 removeAttribute : function(name){
72743                         var attr = this.getAttributeNode(name);
72744                         attr && this.removeAttributeNode(attr);
72745                 },
72746                 
72747                 //four real opeartion method
72748                 appendChild:function(newChild){
72749                         if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
72750                                 return this.insertBefore(newChild,null);
72751                         }else{
72752                                 return _appendSingleChild(this,newChild);
72753                         }
72754                 },
72755                 setAttributeNode : function(newAttr){
72756                         return this.attributes.setNamedItem(newAttr);
72757                 },
72758                 setAttributeNodeNS : function(newAttr){
72759                         return this.attributes.setNamedItemNS(newAttr);
72760                 },
72761                 removeAttributeNode : function(oldAttr){
72762                         //console.log(this == oldAttr.ownerElement)
72763                         return this.attributes.removeNamedItem(oldAttr.nodeName);
72764                 },
72765                 //get real attribute name,and remove it by removeAttributeNode
72766                 removeAttributeNS : function(namespaceURI, localName){
72767                         var old = this.getAttributeNodeNS(namespaceURI, localName);
72768                         old && this.removeAttributeNode(old);
72769                 },
72770                 
72771                 hasAttributeNS : function(namespaceURI, localName){
72772                         return this.getAttributeNodeNS(namespaceURI, localName)!=null;
72773                 },
72774                 getAttributeNS : function(namespaceURI, localName){
72775                         var attr = this.getAttributeNodeNS(namespaceURI, localName);
72776                         return attr && attr.value || '';
72777                 },
72778                 setAttributeNS : function(namespaceURI, qualifiedName, value){
72779                         var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
72780                         attr.value = attr.nodeValue = "" + value;
72781                         this.setAttributeNode(attr);
72782                 },
72783                 getAttributeNodeNS : function(namespaceURI, localName){
72784                         return this.attributes.getNamedItemNS(namespaceURI, localName);
72785                 },
72786                 
72787                 getElementsByTagName : function(tagName){
72788                         return new LiveNodeList(this,function(base){
72789                                 var ls = [];
72790                                 _visitNode(base,function(node){
72791                                         if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
72792                                                 ls.push(node);
72793                                         }
72794                                 });
72795                                 return ls;
72796                         });
72797                 },
72798                 getElementsByTagNameNS : function(namespaceURI, localName){
72799                         return new LiveNodeList(this,function(base){
72800                                 var ls = [];
72801                                 _visitNode(base,function(node){
72802                                         if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
72803                                                 ls.push(node);
72804                                         }
72805                                 });
72806                                 return ls;
72807                                 
72808                         });
72809                 }
72810         };
72811         Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
72812         Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
72813
72814
72815         _extends(Element,Node$2);
72816         function Attr() {
72817         }Attr.prototype.nodeType = ATTRIBUTE_NODE;
72818         _extends(Attr,Node$2);
72819
72820
72821         function CharacterData() {
72822         }CharacterData.prototype = {
72823                 data : '',
72824                 substringData : function(offset, count) {
72825                         return this.data.substring(offset, offset+count);
72826                 },
72827                 appendData: function(text) {
72828                         text = this.data+text;
72829                         this.nodeValue = this.data = text;
72830                         this.length = text.length;
72831                 },
72832                 insertData: function(offset,text) {
72833                         this.replaceData(offset,0,text);
72834                 
72835                 },
72836                 appendChild:function(newChild){
72837                         throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
72838                 },
72839                 deleteData: function(offset, count) {
72840                         this.replaceData(offset,count,"");
72841                 },
72842                 replaceData: function(offset, count, text) {
72843                         var start = this.data.substring(0,offset);
72844                         var end = this.data.substring(offset+count);
72845                         text = start + text + end;
72846                         this.nodeValue = this.data = text;
72847                         this.length = text.length;
72848                 }
72849         };
72850         _extends(CharacterData,Node$2);
72851         function Text() {
72852         }Text.prototype = {
72853                 nodeName : "#text",
72854                 nodeType : TEXT_NODE,
72855                 splitText : function(offset) {
72856                         var text = this.data;
72857                         var newText = text.substring(offset);
72858                         text = text.substring(0, offset);
72859                         this.data = this.nodeValue = text;
72860                         this.length = text.length;
72861                         var newNode = this.ownerDocument.createTextNode(newText);
72862                         if(this.parentNode){
72863                                 this.parentNode.insertBefore(newNode, this.nextSibling);
72864                         }
72865                         return newNode;
72866                 }
72867         };
72868         _extends(Text,CharacterData);
72869         function Comment() {
72870         }Comment.prototype = {
72871                 nodeName : "#comment",
72872                 nodeType : COMMENT_NODE
72873         };
72874         _extends(Comment,CharacterData);
72875
72876         function CDATASection() {
72877         }CDATASection.prototype = {
72878                 nodeName : "#cdata-section",
72879                 nodeType : CDATA_SECTION_NODE
72880         };
72881         _extends(CDATASection,CharacterData);
72882
72883
72884         function DocumentType() {
72885         }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
72886         _extends(DocumentType,Node$2);
72887
72888         function Notation() {
72889         }Notation.prototype.nodeType = NOTATION_NODE;
72890         _extends(Notation,Node$2);
72891
72892         function Entity() {
72893         }Entity.prototype.nodeType = ENTITY_NODE;
72894         _extends(Entity,Node$2);
72895
72896         function EntityReference() {
72897         }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
72898         _extends(EntityReference,Node$2);
72899
72900         function DocumentFragment() {
72901         }DocumentFragment.prototype.nodeName =  "#document-fragment";
72902         DocumentFragment.prototype.nodeType =   DOCUMENT_FRAGMENT_NODE;
72903         _extends(DocumentFragment,Node$2);
72904
72905
72906         function ProcessingInstruction() {
72907         }
72908         ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
72909         _extends(ProcessingInstruction,Node$2);
72910         function XMLSerializer$1(){}
72911         XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
72912                 return nodeSerializeToString.call(node,isHtml,nodeFilter);
72913         };
72914         Node$2.prototype.toString = nodeSerializeToString;
72915         function nodeSerializeToString(isHtml,nodeFilter){
72916                 var buf = [];
72917                 var refNode = this.nodeType == 9?this.documentElement:this;
72918                 var prefix = refNode.prefix;
72919                 var uri = refNode.namespaceURI;
72920                 
72921                 if(uri && prefix == null){
72922                         //console.log(prefix)
72923                         var prefix = refNode.lookupPrefix(uri);
72924                         if(prefix == null){
72925                                 //isHTML = true;
72926                                 var visibleNamespaces=[
72927                                 {namespace:uri,prefix:null}
72928                                 //{namespace:uri,prefix:''}
72929                                 ];
72930                         }
72931                 }
72932                 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
72933                 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
72934                 return buf.join('');
72935         }
72936         function needNamespaceDefine(node,isHTML, visibleNamespaces) {
72937                 var prefix = node.prefix||'';
72938                 var uri = node.namespaceURI;
72939                 if (!prefix && !uri){
72940                         return false;
72941                 }
72942                 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" 
72943                         || uri == 'http://www.w3.org/2000/xmlns/'){
72944                         return false;
72945                 }
72946                 
72947                 var i = visibleNamespaces.length; 
72948                 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
72949                 while (i--) {
72950                         var ns = visibleNamespaces[i];
72951                         // get namespace prefix
72952                         //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
72953                         if (ns.prefix == prefix){
72954                                 return ns.namespace != uri;
72955                         }
72956                 }
72957                 //console.log(isHTML,uri,prefix=='')
72958                 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
72959                 //      return false;
72960                 //}
72961                 //node.flag = '11111'
72962                 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
72963                 return true;
72964         }
72965         function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
72966                 if(nodeFilter){
72967                         node = nodeFilter(node);
72968                         if(node){
72969                                 if(typeof node == 'string'){
72970                                         buf.push(node);
72971                                         return;
72972                                 }
72973                         }else{
72974                                 return;
72975                         }
72976                         //buf.sort.apply(attrs, attributeSorter);
72977                 }
72978                 switch(node.nodeType){
72979                 case ELEMENT_NODE:
72980                         if (!visibleNamespaces) visibleNamespaces = [];
72981                         var startVisibleNamespaces = visibleNamespaces.length;
72982                         var attrs = node.attributes;
72983                         var len = attrs.length;
72984                         var child = node.firstChild;
72985                         var nodeName = node.tagName;
72986                         
72987                         isHTML =  (htmlns === node.namespaceURI) ||isHTML; 
72988                         buf.push('<',nodeName);
72989                         
72990                         
72991                         
72992                         for(var i=0;i<len;i++){
72993                                 // add namespaces for attributes
72994                                 var attr = attrs.item(i);
72995                                 if (attr.prefix == 'xmlns') {
72996                                         visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
72997                                 }else if(attr.nodeName == 'xmlns'){
72998                                         visibleNamespaces.push({ prefix: '', namespace: attr.value });
72999                                 }
73000                         }
73001                         for(var i=0;i<len;i++){
73002                                 var attr = attrs.item(i);
73003                                 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
73004                                         var prefix = attr.prefix||'';
73005                                         var uri = attr.namespaceURI;
73006                                         var ns = prefix ? ' xmlns:' + prefix : " xmlns";
73007                                         buf.push(ns, '="' , uri , '"');
73008                                         visibleNamespaces.push({ prefix: prefix, namespace:uri });
73009                                 }
73010                                 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
73011                         }
73012                         // add namespace for current node               
73013                         if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
73014                                 var prefix = node.prefix||'';
73015                                 var uri = node.namespaceURI;
73016                                 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
73017                                 buf.push(ns, '="' , uri , '"');
73018                                 visibleNamespaces.push({ prefix: prefix, namespace:uri });
73019                         }
73020                         
73021                         if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
73022                                 buf.push('>');
73023                                 //if is cdata child node
73024                                 if(isHTML && /^script$/i.test(nodeName)){
73025                                         while(child){
73026                                                 if(child.data){
73027                                                         buf.push(child.data);
73028                                                 }else{
73029                                                         serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
73030                                                 }
73031                                                 child = child.nextSibling;
73032                                         }
73033                                 }else
73034                                 {
73035                                         while(child){
73036                                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
73037                                                 child = child.nextSibling;
73038                                         }
73039                                 }
73040                                 buf.push('</',nodeName,'>');
73041                         }else{
73042                                 buf.push('/>');
73043                         }
73044                         // remove added visible namespaces
73045                         //visibleNamespaces.length = startVisibleNamespaces;
73046                         return;
73047                 case DOCUMENT_NODE:
73048                 case DOCUMENT_FRAGMENT_NODE:
73049                         var child = node.firstChild;
73050                         while(child){
73051                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
73052                                 child = child.nextSibling;
73053                         }
73054                         return;
73055                 case ATTRIBUTE_NODE:
73056                         return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
73057                 case TEXT_NODE:
73058                         return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
73059                 case CDATA_SECTION_NODE:
73060                         return buf.push( '<![CDATA[',node.data,']]>');
73061                 case COMMENT_NODE:
73062                         return buf.push( "<!--",node.data,"-->");
73063                 case DOCUMENT_TYPE_NODE:
73064                         var pubid = node.publicId;
73065                         var sysid = node.systemId;
73066                         buf.push('<!DOCTYPE ',node.name);
73067                         if(pubid){
73068                                 buf.push(' PUBLIC "',pubid);
73069                                 if (sysid && sysid!='.') {
73070                                         buf.push( '" "',sysid);
73071                                 }
73072                                 buf.push('">');
73073                         }else if(sysid && sysid!='.'){
73074                                 buf.push(' SYSTEM "',sysid,'">');
73075                         }else{
73076                                 var sub = node.internalSubset;
73077                                 if(sub){
73078                                         buf.push(" [",sub,"]");
73079                                 }
73080                                 buf.push(">");
73081                         }
73082                         return;
73083                 case PROCESSING_INSTRUCTION_NODE:
73084                         return buf.push( "<?",node.target," ",node.data,"?>");
73085                 case ENTITY_REFERENCE_NODE:
73086                         return buf.push( '&',node.nodeName,';');
73087                 //case ENTITY_NODE:
73088                 //case NOTATION_NODE:
73089                 default:
73090                         buf.push('??',node.nodeName);
73091                 }
73092         }
73093         function importNode(doc,node,deep){
73094                 var node2;
73095                 switch (node.nodeType) {
73096                 case ELEMENT_NODE:
73097                         node2 = node.cloneNode(false);
73098                         node2.ownerDocument = doc;
73099                         //var attrs = node2.attributes;
73100                         //var len = attrs.length;
73101                         //for(var i=0;i<len;i++){
73102                                 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
73103                         //}
73104                 case DOCUMENT_FRAGMENT_NODE:
73105                         break;
73106                 case ATTRIBUTE_NODE:
73107                         deep = true;
73108                         break;
73109                 //case ENTITY_REFERENCE_NODE:
73110                 //case PROCESSING_INSTRUCTION_NODE:
73111                 ////case TEXT_NODE:
73112                 //case CDATA_SECTION_NODE:
73113                 //case COMMENT_NODE:
73114                 //      deep = false;
73115                 //      break;
73116                 //case DOCUMENT_NODE:
73117                 //case DOCUMENT_TYPE_NODE:
73118                 //cannot be imported.
73119                 //case ENTITY_NODE:
73120                 //case NOTATION_NODE:
73121                 //can not hit in level3
73122                 //default:throw e;
73123                 }
73124                 if(!node2){
73125                         node2 = node.cloneNode(false);//false
73126                 }
73127                 node2.ownerDocument = doc;
73128                 node2.parentNode = null;
73129                 if(deep){
73130                         var child = node.firstChild;
73131                         while(child){
73132                                 node2.appendChild(importNode(doc,child,deep));
73133                                 child = child.nextSibling;
73134                         }
73135                 }
73136                 return node2;
73137         }
73138         //
73139         //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
73140         //                                      attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
73141         function cloneNode(doc,node,deep){
73142                 var node2 = new node.constructor();
73143                 for(var n in node){
73144                         var v = node[n];
73145                         if(typeof v != 'object' ){
73146                                 if(v != node2[n]){
73147                                         node2[n] = v;
73148                                 }
73149                         }
73150                 }
73151                 if(node.childNodes){
73152                         node2.childNodes = new NodeList();
73153                 }
73154                 node2.ownerDocument = doc;
73155                 switch (node2.nodeType) {
73156                 case ELEMENT_NODE:
73157                         var attrs       = node.attributes;
73158                         var attrs2      = node2.attributes = new NamedNodeMap();
73159                         var len = attrs.length;
73160                         attrs2._ownerElement = node2;
73161                         for(var i=0;i<len;i++){
73162                                 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
73163                         }
73164                         break;
73165                 case ATTRIBUTE_NODE:
73166                         deep = true;
73167                 }
73168                 if(deep){
73169                         var child = node.firstChild;
73170                         while(child){
73171                                 node2.appendChild(cloneNode(doc,child,deep));
73172                                 child = child.nextSibling;
73173                         }
73174                 }
73175                 return node2;
73176         }
73177
73178         function __set__(object,key,value){
73179                 object[key] = value;
73180         }
73181         //do dynamic
73182         try{
73183                 if(Object.defineProperty){
73184                         Object.defineProperty(LiveNodeList.prototype,'length',{
73185                                 get:function(){
73186                                         _updateLiveList(this);
73187                                         return this.$$length;
73188                                 }
73189                         });
73190                         Object.defineProperty(Node$2.prototype,'textContent',{
73191                                 get:function(){
73192                                         return getTextContent(this);
73193                                 },
73194                                 set:function(data){
73195                                         switch(this.nodeType){
73196                                         case ELEMENT_NODE:
73197                                         case DOCUMENT_FRAGMENT_NODE:
73198                                                 while(this.firstChild){
73199                                                         this.removeChild(this.firstChild);
73200                                                 }
73201                                                 if(data || String(data)){
73202                                                         this.appendChild(this.ownerDocument.createTextNode(data));
73203                                                 }
73204                                                 break;
73205                                         default:
73206                                                 //TODO:
73207                                                 this.data = data;
73208                                                 this.value = data;
73209                                                 this.nodeValue = data;
73210                                         }
73211                                 }
73212                         });
73213                         
73214                         function getTextContent(node){
73215                                 switch(node.nodeType){
73216                                 case ELEMENT_NODE:
73217                                 case DOCUMENT_FRAGMENT_NODE:
73218                                         var buf = [];
73219                                         node = node.firstChild;
73220                                         while(node){
73221                                                 if(node.nodeType!==7 && node.nodeType !==8){
73222                                                         buf.push(getTextContent(node));
73223                                                 }
73224                                                 node = node.nextSibling;
73225                                         }
73226                                         return buf.join('');
73227                                 default:
73228                                         return node.nodeValue;
73229                                 }
73230                         }
73231                         __set__ = function(object,key,value){
73232                                 //console.log(value)
73233                                 object['$$'+key] = value;
73234                         };
73235                 }
73236         }catch(e){//ie8
73237         }
73238
73239         //if(typeof require == 'function'){
73240                 var DOMImplementation_1 = DOMImplementation;
73241                 var XMLSerializer_1 = XMLSerializer$1;
73242         //}
73243
73244         var dom = {
73245                 DOMImplementation: DOMImplementation_1,
73246                 XMLSerializer: XMLSerializer_1
73247         };
73248
73249         var domParser = createCommonjsModule(function (module, exports) {
73250         function DOMParser(options){
73251                 this.options = options ||{locator:{}};
73252                 
73253         }
73254         DOMParser.prototype.parseFromString = function(source,mimeType){
73255                 var options = this.options;
73256                 var sax =  new XMLReader();
73257                 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
73258                 var errorHandler = options.errorHandler;
73259                 var locator = options.locator;
73260                 var defaultNSMap = options.xmlns||{};
73261                 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
73262                 if(locator){
73263                         domBuilder.setDocumentLocator(locator);
73264                 }
73265                 
73266                 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
73267                 sax.domBuilder = options.domBuilder || domBuilder;
73268                 if(/\/x?html?$/.test(mimeType)){
73269                         entityMap.nbsp = '\xa0';
73270                         entityMap.copy = '\xa9';
73271                         defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
73272                 }
73273                 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
73274                 if(source){
73275                         sax.parse(source,defaultNSMap,entityMap);
73276                 }else{
73277                         sax.errorHandler.error("invalid doc source");
73278                 }
73279                 return domBuilder.doc;
73280         };
73281         function buildErrorHandler(errorImpl,domBuilder,locator){
73282                 if(!errorImpl){
73283                         if(domBuilder instanceof DOMHandler){
73284                                 return domBuilder;
73285                         }
73286                         errorImpl = domBuilder ;
73287                 }
73288                 var errorHandler = {};
73289                 var isCallback = errorImpl instanceof Function;
73290                 locator = locator||{};
73291                 function build(key){
73292                         var fn = errorImpl[key];
73293                         if(!fn && isCallback){
73294                                 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
73295                         }
73296                         errorHandler[key] = fn && function(msg){
73297                                 fn('[xmldom '+key+']\t'+msg+_locator(locator));
73298                         }||function(){};
73299                 }
73300                 build('warning');
73301                 build('error');
73302                 build('fatalError');
73303                 return errorHandler;
73304         }
73305
73306         //console.log('#\n\n\n\n\n\n\n####')
73307         /**
73308          * +ContentHandler+ErrorHandler
73309          * +LexicalHandler+EntityResolver2
73310          * -DeclHandler-DTDHandler 
73311          * 
73312          * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
73313          * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
73314          * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
73315          */
73316         function DOMHandler() {
73317             this.cdata = false;
73318         }
73319         function position(locator,node){
73320                 node.lineNumber = locator.lineNumber;
73321                 node.columnNumber = locator.columnNumber;
73322         }
73323         /**
73324          * @see org.xml.sax.ContentHandler#startDocument
73325          * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
73326          */ 
73327         DOMHandler.prototype = {
73328                 startDocument : function() {
73329                 this.doc = new DOMImplementation().createDocument(null, null, null);
73330                 if (this.locator) {
73331                         this.doc.documentURI = this.locator.systemId;
73332                 }
73333                 },
73334                 startElement:function(namespaceURI, localName, qName, attrs) {
73335                         var doc = this.doc;
73336                     var el = doc.createElementNS(namespaceURI, qName||localName);
73337                     var len = attrs.length;
73338                     appendElement(this, el);
73339                     this.currentElement = el;
73340                     
73341                         this.locator && position(this.locator,el);
73342                     for (var i = 0 ; i < len; i++) {
73343                         var namespaceURI = attrs.getURI(i);
73344                         var value = attrs.getValue(i);
73345                         var qName = attrs.getQName(i);
73346                                 var attr = doc.createAttributeNS(namespaceURI, qName);
73347                                 this.locator &&position(attrs.getLocator(i),attr);
73348                                 attr.value = attr.nodeValue = value;
73349                                 el.setAttributeNode(attr);
73350                     }
73351                 },
73352                 endElement:function(namespaceURI, localName, qName) {
73353                         var current = this.currentElement;
73354                         var tagName = current.tagName;
73355                         this.currentElement = current.parentNode;
73356                 },
73357                 startPrefixMapping:function(prefix, uri) {
73358                 },
73359                 endPrefixMapping:function(prefix) {
73360                 },
73361                 processingInstruction:function(target, data) {
73362                     var ins = this.doc.createProcessingInstruction(target, data);
73363                     this.locator && position(this.locator,ins);
73364                     appendElement(this, ins);
73365                 },
73366                 ignorableWhitespace:function(ch, start, length) {
73367                 },
73368                 characters:function(chars, start, length) {
73369                         chars = _toString.apply(this,arguments);
73370                         //console.log(chars)
73371                         if(chars){
73372                                 if (this.cdata) {
73373                                         var charNode = this.doc.createCDATASection(chars);
73374                                 } else {
73375                                         var charNode = this.doc.createTextNode(chars);
73376                                 }
73377                                 if(this.currentElement){
73378                                         this.currentElement.appendChild(charNode);
73379                                 }else if(/^\s*$/.test(chars)){
73380                                         this.doc.appendChild(charNode);
73381                                         //process xml
73382                                 }
73383                                 this.locator && position(this.locator,charNode);
73384                         }
73385                 },
73386                 skippedEntity:function(name) {
73387                 },
73388                 endDocument:function() {
73389                         this.doc.normalize();
73390                 },
73391                 setDocumentLocator:function (locator) {
73392                     if(this.locator = locator){// && !('lineNumber' in locator)){
73393                         locator.lineNumber = 0;
73394                     }
73395                 },
73396                 //LexicalHandler
73397                 comment:function(chars, start, length) {
73398                         chars = _toString.apply(this,arguments);
73399                     var comm = this.doc.createComment(chars);
73400                     this.locator && position(this.locator,comm);
73401                     appendElement(this, comm);
73402                 },
73403                 
73404                 startCDATA:function() {
73405                     //used in characters() methods
73406                     this.cdata = true;
73407                 },
73408                 endCDATA:function() {
73409                     this.cdata = false;
73410                 },
73411                 
73412                 startDTD:function(name, publicId, systemId) {
73413                         var impl = this.doc.implementation;
73414                     if (impl && impl.createDocumentType) {
73415                         var dt = impl.createDocumentType(name, publicId, systemId);
73416                         this.locator && position(this.locator,dt);
73417                         appendElement(this, dt);
73418                     }
73419                 },
73420                 /**
73421                  * @see org.xml.sax.ErrorHandler
73422                  * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
73423                  */
73424                 warning:function(error) {
73425                         console.warn('[xmldom warning]\t'+error,_locator(this.locator));
73426                 },
73427                 error:function(error) {
73428                         console.error('[xmldom error]\t'+error,_locator(this.locator));
73429                 },
73430                 fatalError:function(error) {
73431                         console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
73432                     throw error;
73433                 }
73434         };
73435         function _locator(l){
73436                 if(l){
73437                         return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
73438                 }
73439         }
73440         function _toString(chars,start,length){
73441                 if(typeof chars == 'string'){
73442                         return chars.substr(start,length)
73443                 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
73444                         if(chars.length >= start+length || start){
73445                                 return new java.lang.String(chars,start,length)+'';
73446                         }
73447                         return chars;
73448                 }
73449         }
73450
73451         /*
73452          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
73453          * used method of org.xml.sax.ext.LexicalHandler:
73454          *  #comment(chars, start, length)
73455          *  #startCDATA()
73456          *  #endCDATA()
73457          *  #startDTD(name, publicId, systemId)
73458          *
73459          *
73460          * IGNORED method of org.xml.sax.ext.LexicalHandler:
73461          *  #endDTD()
73462          *  #startEntity(name)
73463          *  #endEntity(name)
73464          *
73465          *
73466          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
73467          * IGNORED method of org.xml.sax.ext.DeclHandler
73468          *      #attributeDecl(eName, aName, type, mode, value)
73469          *  #elementDecl(name, model)
73470          *  #externalEntityDecl(name, publicId, systemId)
73471          *  #internalEntityDecl(name, value)
73472          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
73473          * IGNORED method of org.xml.sax.EntityResolver2
73474          *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
73475          *  #resolveEntity(publicId, systemId)
73476          *  #getExternalSubset(name, baseURI)
73477          * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
73478          * IGNORED method of org.xml.sax.DTDHandler
73479          *  #notationDecl(name, publicId, systemId) {};
73480          *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
73481          */
73482         "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
73483                 DOMHandler.prototype[key] = function(){return null};
73484         });
73485
73486         /* 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 */
73487         function appendElement (hander,node) {
73488             if (!hander.currentElement) {
73489                 hander.doc.appendChild(node);
73490             } else {
73491                 hander.currentElement.appendChild(node);
73492             }
73493         }//appendChild and setAttributeNS are preformance key
73494
73495         //if(typeof require == 'function'){
73496                 var XMLReader = sax.XMLReader;
73497                 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
73498                 exports.XMLSerializer = dom.XMLSerializer ;
73499                 exports.DOMParser = DOMParser;
73500         //}
73501         });
73502         var domParser_1 = domParser.DOMImplementation;
73503         var domParser_2 = domParser.XMLSerializer;
73504         var domParser_3 = domParser.DOMParser;
73505
73506         var togeojson = createCommonjsModule(function (module, exports) {
73507         var toGeoJSON = (function() {
73508
73509             var removeSpace = /\s*/g,
73510                 trimSpace = /^\s*|\s*$/g,
73511                 splitSpace = /\s+/;
73512             // generate a short, numeric hash of a string
73513             function okhash(x) {
73514                 if (!x || !x.length) return 0;
73515                 for (var i = 0, h = 0; i < x.length; i++) {
73516                     h = ((h << 5) - h) + x.charCodeAt(i) | 0;
73517                 } return h;
73518             }
73519             // all Y children of X
73520             function get(x, y) { return x.getElementsByTagName(y); }
73521             function attr(x, y) { return x.getAttribute(y); }
73522             function attrf(x, y) { return parseFloat(attr(x, y)); }
73523             // one Y child of X, if any, otherwise null
73524             function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
73525             // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
73526             function norm(el) { if (el.normalize) { el.normalize(); } return el; }
73527             // cast array x into numbers
73528             function numarray(x) {
73529                 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
73530                 return o;
73531             }
73532             // get the content of a text node, if any
73533             function nodeVal(x) {
73534                 if (x) { norm(x); }
73535                 return (x && x.textContent) || '';
73536             }
73537             // get the contents of multiple text nodes, if present
73538             function getMulti(x, ys) {
73539                 var o = {}, n, k;
73540                 for (k = 0; k < ys.length; k++) {
73541                     n = get1(x, ys[k]);
73542                     if (n) o[ys[k]] = nodeVal(n);
73543                 }
73544                 return o;
73545             }
73546             // add properties of Y to X, overwriting if present in both
73547             function extend(x, y) { for (var k in y) x[k] = y[k]; }
73548             // get one coordinate from a coordinate array, if any
73549             function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
73550             // get all coordinates from a coordinate array as [[],[]]
73551             function coord(v) {
73552                 var coords = v.replace(trimSpace, '').split(splitSpace),
73553                     o = [];
73554                 for (var i = 0; i < coords.length; i++) {
73555                     o.push(coord1(coords[i]));
73556                 }
73557                 return o;
73558             }
73559             function coordPair(x) {
73560                 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
73561                     ele = get1(x, 'ele'),
73562                     // handle namespaced attribute in browser
73563                     heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
73564                     time = get1(x, 'time'),
73565                     e;
73566                 if (ele) {
73567                     e = parseFloat(nodeVal(ele));
73568                     if (!isNaN(e)) {
73569                         ll.push(e);
73570                     }
73571                 }
73572                 return {
73573                     coordinates: ll,
73574                     time: time ? nodeVal(time) : null,
73575                     heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
73576                 };
73577             }
73578
73579             // create a new feature collection parent object
73580             function fc() {
73581                 return {
73582                     type: 'FeatureCollection',
73583                     features: []
73584                 };
73585             }
73586
73587             var serializer;
73588             if (typeof XMLSerializer !== 'undefined') {
73589                 /* istanbul ignore next */
73590                 serializer = new XMLSerializer();
73591             // only require xmldom in a node environment
73592             } else if ( typeof process === 'object' && !process.browser) {
73593                 serializer = new (domParser.XMLSerializer)();
73594             }
73595             function xml2str(str) {
73596                 // IE9 will create a new XMLSerializer but it'll crash immediately.
73597                 // This line is ignored because we don't run coverage tests in IE9
73598                 /* istanbul ignore next */
73599                 if (str.xml !== undefined) return str.xml;
73600                 return serializer.serializeToString(str);
73601             }
73602
73603             var t = {
73604                 kml: function(doc) {
73605
73606                     var gj = fc(),
73607                         // styleindex keeps track of hashed styles in order to match features
73608                         styleIndex = {}, styleByHash = {},
73609                         // stylemapindex keeps track of style maps to expose in properties
73610                         styleMapIndex = {},
73611                         // atomic geospatial types supported by KML - MultiGeometry is
73612                         // handled separately
73613                         geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
73614                         // all root placemarks in the file
73615                         placemarks = get(doc, 'Placemark'),
73616                         styles = get(doc, 'Style'),
73617                         styleMaps = get(doc, 'StyleMap');
73618
73619                     for (var k = 0; k < styles.length; k++) {
73620                         var hash = okhash(xml2str(styles[k])).toString(16);
73621                         styleIndex['#' + attr(styles[k], 'id')] = hash;
73622                         styleByHash[hash] = styles[k];
73623                     }
73624                     for (var l = 0; l < styleMaps.length; l++) {
73625                         styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
73626                         var pairs = get(styleMaps[l], 'Pair');
73627                         var pairsMap = {};
73628                         for (var m = 0; m < pairs.length; m++) {
73629                             pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
73630                         }
73631                         styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
73632
73633                     }
73634                     for (var j = 0; j < placemarks.length; j++) {
73635                         gj.features = gj.features.concat(getPlacemark(placemarks[j]));
73636                     }
73637                     function kmlColor(v) {
73638                         var color, opacity;
73639                         v = v || '';
73640                         if (v.substr(0, 1) === '#') { v = v.substr(1); }
73641                         if (v.length === 6 || v.length === 3) { color = v; }
73642                         if (v.length === 8) {
73643                             opacity = parseInt(v.substr(0, 2), 16) / 255;
73644                             color = '#' + v.substr(6, 2) +
73645                                 v.substr(4, 2) +
73646                                 v.substr(2, 2);
73647                         }
73648                         return [color, isNaN(opacity) ? undefined : opacity];
73649                     }
73650                     function gxCoord(v) { return numarray(v.split(' ')); }
73651                     function gxCoords(root) {
73652                         var elems = get(root, 'coord'), coords = [], times = [];
73653                         if (elems.length === 0) elems = get(root, 'gx:coord');
73654                         for (var i = 0; i < elems.length; i++) coords.push(gxCoord(nodeVal(elems[i])));
73655                         var timeElems = get(root, 'when');
73656                         for (var j = 0; j < timeElems.length; j++) times.push(nodeVal(timeElems[j]));
73657                         return {
73658                             coords: coords,
73659                             times: times
73660                         };
73661                     }
73662                     function getGeometry(root) {
73663                         var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
73664                         if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
73665                         if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
73666                         if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
73667                         for (i = 0; i < geotypes.length; i++) {
73668                             geomNodes = get(root, geotypes[i]);
73669                             if (geomNodes) {
73670                                 for (j = 0; j < geomNodes.length; j++) {
73671                                     geomNode = geomNodes[j];
73672                                     if (geotypes[i] === 'Point') {
73673                                         geoms.push({
73674                                             type: 'Point',
73675                                             coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
73676                                         });
73677                                     } else if (geotypes[i] === 'LineString') {
73678                                         geoms.push({
73679                                             type: 'LineString',
73680                                             coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
73681                                         });
73682                                     } else if (geotypes[i] === 'Polygon') {
73683                                         var rings = get(geomNode, 'LinearRing'),
73684                                             coords = [];
73685                                         for (k = 0; k < rings.length; k++) {
73686                                             coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
73687                                         }
73688                                         geoms.push({
73689                                             type: 'Polygon',
73690                                             coordinates: coords
73691                                         });
73692                                     } else if (geotypes[i] === 'Track' ||
73693                                         geotypes[i] === 'gx:Track') {
73694                                         var track = gxCoords(geomNode);
73695                                         geoms.push({
73696                                             type: 'LineString',
73697                                             coordinates: track.coords
73698                                         });
73699                                         if (track.times.length) coordTimes.push(track.times);
73700                                     }
73701                                 }
73702                             }
73703                         }
73704                         return {
73705                             geoms: geoms,
73706                             coordTimes: coordTimes
73707                         };
73708                     }
73709                     function getPlacemark(root) {
73710                         var geomsAndTimes = getGeometry(root), i, properties = {},
73711                             name = nodeVal(get1(root, 'name')),
73712                             address = nodeVal(get1(root, 'address')),
73713                             styleUrl = nodeVal(get1(root, 'styleUrl')),
73714                             description = nodeVal(get1(root, 'description')),
73715                             timeSpan = get1(root, 'TimeSpan'),
73716                             timeStamp = get1(root, 'TimeStamp'),
73717                             extendedData = get1(root, 'ExtendedData'),
73718                             lineStyle = get1(root, 'LineStyle'),
73719                             polyStyle = get1(root, 'PolyStyle'),
73720                             visibility = get1(root, 'visibility');
73721
73722                         if (!geomsAndTimes.geoms.length) return [];
73723                         if (name) properties.name = name;
73724                         if (address) properties.address = address;
73725                         if (styleUrl) {
73726                             if (styleUrl[0] !== '#') {
73727                                 styleUrl = '#' + styleUrl;
73728                             }
73729
73730                             properties.styleUrl = styleUrl;
73731                             if (styleIndex[styleUrl]) {
73732                                 properties.styleHash = styleIndex[styleUrl];
73733                             }
73734                             if (styleMapIndex[styleUrl]) {
73735                                 properties.styleMapHash = styleMapIndex[styleUrl];
73736                                 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
73737                             }
73738                             // Try to populate the lineStyle or polyStyle since we got the style hash
73739                             var style = styleByHash[properties.styleHash];
73740                             if (style) {
73741                                 if (!lineStyle) lineStyle = get1(style, 'LineStyle');
73742                                 if (!polyStyle) polyStyle = get1(style, 'PolyStyle');
73743                             }
73744                         }
73745                         if (description) properties.description = description;
73746                         if (timeSpan) {
73747                             var begin = nodeVal(get1(timeSpan, 'begin'));
73748                             var end = nodeVal(get1(timeSpan, 'end'));
73749                             properties.timespan = { begin: begin, end: end };
73750                         }
73751                         if (timeStamp) {
73752                             properties.timestamp = nodeVal(get1(timeStamp, 'when'));
73753                         }
73754                         if (lineStyle) {
73755                             var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
73756                                 color = linestyles[0],
73757                                 opacity = linestyles[1],
73758                                 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73759                             if (color) properties.stroke = color;
73760                             if (!isNaN(opacity)) properties['stroke-opacity'] = opacity;
73761                             if (!isNaN(width)) properties['stroke-width'] = width;
73762                         }
73763                         if (polyStyle) {
73764                             var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
73765                                 pcolor = polystyles[0],
73766                                 popacity = polystyles[1],
73767                                 fill = nodeVal(get1(polyStyle, 'fill')),
73768                                 outline = nodeVal(get1(polyStyle, 'outline'));
73769                             if (pcolor) properties.fill = pcolor;
73770                             if (!isNaN(popacity)) properties['fill-opacity'] = popacity;
73771                             if (fill) properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0;
73772                             if (outline) properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0;
73773                         }
73774                         if (extendedData) {
73775                             var datas = get(extendedData, 'Data'),
73776                                 simpleDatas = get(extendedData, 'SimpleData');
73777
73778                             for (i = 0; i < datas.length; i++) {
73779                                 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
73780                             }
73781                             for (i = 0; i < simpleDatas.length; i++) {
73782                                 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
73783                             }
73784                         }
73785                         if (visibility) {
73786                             properties.visibility = nodeVal(visibility);
73787                         }
73788                         if (geomsAndTimes.coordTimes.length) {
73789                             properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
73790                                 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
73791                         }
73792                         var feature = {
73793                             type: 'Feature',
73794                             geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
73795                                 type: 'GeometryCollection',
73796                                 geometries: geomsAndTimes.geoms
73797                             },
73798                             properties: properties
73799                         };
73800                         if (attr(root, 'id')) feature.id = attr(root, 'id');
73801                         return [feature];
73802                     }
73803                     return gj;
73804                 },
73805                 gpx: function(doc) {
73806                     var i,
73807                         tracks = get(doc, 'trk'),
73808                         routes = get(doc, 'rte'),
73809                         waypoints = get(doc, 'wpt'),
73810                         // a feature collection
73811                         gj = fc(),
73812                         feature;
73813                     for (i = 0; i < tracks.length; i++) {
73814                         feature = getTrack(tracks[i]);
73815                         if (feature) gj.features.push(feature);
73816                     }
73817                     for (i = 0; i < routes.length; i++) {
73818                         feature = getRoute(routes[i]);
73819                         if (feature) gj.features.push(feature);
73820                     }
73821                     for (i = 0; i < waypoints.length; i++) {
73822                         gj.features.push(getPoint(waypoints[i]));
73823                     }
73824                     function getPoints(node, pointname) {
73825                         var pts = get(node, pointname),
73826                             line = [],
73827                             times = [],
73828                             heartRates = [],
73829                             l = pts.length;
73830                         if (l < 2) return {};  // Invalid line in GeoJSON
73831                         for (var i = 0; i < l; i++) {
73832                             var c = coordPair(pts[i]);
73833                             line.push(c.coordinates);
73834                             if (c.time) times.push(c.time);
73835                             if (c.heartRate) heartRates.push(c.heartRate);
73836                         }
73837                         return {
73838                             line: line,
73839                             times: times,
73840                             heartRates: heartRates
73841                         };
73842                     }
73843                     function getTrack(node) {
73844                         var segments = get(node, 'trkseg'),
73845                             track = [],
73846                             times = [],
73847                             heartRates = [],
73848                             line;
73849                         for (var i = 0; i < segments.length; i++) {
73850                             line = getPoints(segments[i], 'trkpt');
73851                             if (line) {
73852                                 if (line.line) track.push(line.line);
73853                                 if (line.times && line.times.length) times.push(line.times);
73854                                 if (line.heartRates && line.heartRates.length) heartRates.push(line.heartRates);
73855                             }
73856                         }
73857                         if (track.length === 0) return;
73858                         var properties = getProperties(node);
73859                         extend(properties, getLineStyle(get1(node, 'extensions')));
73860                         if (times.length) properties.coordTimes = track.length === 1 ? times[0] : times;
73861                         if (heartRates.length) properties.heartRates = track.length === 1 ? heartRates[0] : heartRates;
73862                         return {
73863                             type: 'Feature',
73864                             properties: properties,
73865                             geometry: {
73866                                 type: track.length === 1 ? 'LineString' : 'MultiLineString',
73867                                 coordinates: track.length === 1 ? track[0] : track
73868                             }
73869                         };
73870                     }
73871                     function getRoute(node) {
73872                         var line = getPoints(node, 'rtept');
73873                         if (!line.line) return;
73874                         var prop = getProperties(node);
73875                         extend(prop, getLineStyle(get1(node, 'extensions')));
73876                         var routeObj = {
73877                             type: 'Feature',
73878                             properties: prop,
73879                             geometry: {
73880                                 type: 'LineString',
73881                                 coordinates: line.line
73882                             }
73883                         };
73884                         return routeObj;
73885                     }
73886                     function getPoint(node) {
73887                         var prop = getProperties(node);
73888                         extend(prop, getMulti(node, ['sym']));
73889                         return {
73890                             type: 'Feature',
73891                             properties: prop,
73892                             geometry: {
73893                                 type: 'Point',
73894                                 coordinates: coordPair(node).coordinates
73895                             }
73896                         };
73897                     }
73898                     function getLineStyle(extensions) {
73899                         var style = {};
73900                         if (extensions) {
73901                             var lineStyle = get1(extensions, 'line');
73902                             if (lineStyle) {
73903                                 var color = nodeVal(get1(lineStyle, 'color')),
73904                                     opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
73905                                     width = parseFloat(nodeVal(get1(lineStyle, 'width')));
73906                                 if (color) style.stroke = color;
73907                                 if (!isNaN(opacity)) style['stroke-opacity'] = opacity;
73908                                 // GPX width is in mm, convert to px with 96 px per inch
73909                                 if (!isNaN(width)) style['stroke-width'] = width * 96 / 25.4;
73910                             }
73911                         }
73912                         return style;
73913                     }
73914                     function getProperties(node) {
73915                         var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
73916                             links = get(node, 'link');
73917                         if (links.length) prop.links = [];
73918                         for (var i = 0, link; i < links.length; i++) {
73919                             link = { href: attr(links[i], 'href') };
73920                             extend(link, getMulti(links[i], ['text', 'type']));
73921                             prop.links.push(link);
73922                         }
73923                         return prop;
73924                     }
73925                     return gj;
73926                 }
73927             };
73928             return t;
73929         })();
73930
73931         module.exports = toGeoJSON;
73932         });
73933
73934         var _initialized = false;
73935         var _enabled = false;
73936         var _geojson;
73937
73938
73939         function svgData(projection, context, dispatch) {
73940             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
73941             var _showLabels = true;
73942             var detected = utilDetect();
73943             var layer = d3_select(null);
73944             var _vtService;
73945             var _fileList;
73946             var _template;
73947             var _src;
73948
73949
73950             function init() {
73951                 if (_initialized) return;  // run once
73952
73953                 _geojson = {};
73954                 _enabled = true;
73955
73956                 function over() {
73957                     event.stopPropagation();
73958                     event.preventDefault();
73959                     event.dataTransfer.dropEffect = 'copy';
73960                 }
73961
73962                 d3_select('body')
73963                     .attr('dropzone', 'copy')
73964                     .on('drop.svgData', function() {
73965                         event.stopPropagation();
73966                         event.preventDefault();
73967                         if (!detected.filedrop) return;
73968                         drawData.fileList(event.dataTransfer.files);
73969                     })
73970                     .on('dragenter.svgData', over)
73971                     .on('dragexit.svgData', over)
73972                     .on('dragover.svgData', over);
73973
73974                 _initialized = true;
73975             }
73976
73977
73978             function getService() {
73979                 if (services$1.vectorTile && !_vtService) {
73980                     _vtService = services$1.vectorTile;
73981                     _vtService.event.on('loadedData', throttledRedraw);
73982                 } else if (!services$1.vectorTile && _vtService) {
73983                     _vtService = null;
73984                 }
73985
73986                 return _vtService;
73987             }
73988
73989
73990             function showLayer() {
73991                 layerOn();
73992
73993                 layer
73994                     .style('opacity', 0)
73995                     .transition()
73996                     .duration(250)
73997                     .style('opacity', 1)
73998                     .on('end', function () { dispatch.call('change'); });
73999             }
74000
74001
74002             function hideLayer() {
74003                 throttledRedraw.cancel();
74004
74005                 layer
74006                     .transition()
74007                     .duration(250)
74008                     .style('opacity', 0)
74009                     .on('end', layerOff);
74010             }
74011
74012
74013             function layerOn() {
74014                 layer.style('display', 'block');
74015             }
74016
74017
74018             function layerOff() {
74019                 layer.selectAll('.viewfield-group').remove();
74020                 layer.style('display', 'none');
74021             }
74022
74023
74024             // ensure that all geojson features in a collection have IDs
74025             function ensureIDs(gj) {
74026                 if (!gj) return null;
74027
74028                 if (gj.type === 'FeatureCollection') {
74029                     for (var i = 0; i < gj.features.length; i++) {
74030                         ensureFeatureID(gj.features[i]);
74031                     }
74032                 } else {
74033                     ensureFeatureID(gj);
74034                 }
74035                 return gj;
74036             }
74037
74038
74039             // ensure that each single Feature object has a unique ID
74040             function ensureFeatureID(feature) {
74041                 if (!feature) return;
74042                 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
74043                 return feature;
74044             }
74045
74046
74047             // Prefer an array of Features instead of a FeatureCollection
74048             function getFeatures(gj) {
74049                 if (!gj) return [];
74050
74051                 if (gj.type === 'FeatureCollection') {
74052                     return gj.features;
74053                 } else {
74054                     return [gj];
74055                 }
74056             }
74057
74058
74059             function featureKey(d) {
74060                 return d.__featurehash__;
74061             }
74062
74063
74064             function isPolygon(d) {
74065                 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
74066             }
74067
74068
74069             function clipPathID(d) {
74070                 return 'data-' + d.__featurehash__ + '-clippath';
74071             }
74072
74073
74074             function featureClasses(d) {
74075                 return [
74076                     'data' + d.__featurehash__,
74077                     d.geometry.type,
74078                     isPolygon(d) ? 'area' : '',
74079                     d.__layerID__ || ''
74080                 ].filter(Boolean).join(' ');
74081             }
74082
74083
74084             function drawData(selection) {
74085                 var vtService = getService();
74086                 var getPath = svgPath(projection).geojson;
74087                 var getAreaPath = svgPath(projection, null, true).geojson;
74088                 var hasData = drawData.hasData();
74089
74090                 layer = selection.selectAll('.layer-mapdata')
74091                     .data(_enabled && hasData ? [0] : []);
74092
74093                 layer.exit()
74094                     .remove();
74095
74096                 layer = layer.enter()
74097                     .append('g')
74098                     .attr('class', 'layer-mapdata')
74099                     .merge(layer);
74100
74101                 var surface = context.surface();
74102                 if (!surface || surface.empty()) return;  // not ready to draw yet, starting up
74103
74104
74105                 // Gather data
74106                 var geoData, polygonData;
74107                 if (_template && vtService) {   // fetch data from vector tile service
74108                     var sourceID = _template;
74109                     vtService.loadTiles(sourceID, _template, projection);
74110                     geoData = vtService.data(sourceID, projection);
74111                 } else {
74112                     geoData = getFeatures(_geojson);
74113                 }
74114                 geoData = geoData.filter(getPath);
74115                 polygonData = geoData.filter(isPolygon);
74116
74117
74118                 // Draw clip paths for polygons
74119                 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
74120                    .data(polygonData, featureKey);
74121
74122                 clipPaths.exit()
74123                    .remove();
74124
74125                 var clipPathsEnter = clipPaths.enter()
74126                    .append('clipPath')
74127                    .attr('class', 'clipPath-data')
74128                    .attr('id', clipPathID);
74129
74130                 clipPathsEnter
74131                    .append('path');
74132
74133                 clipPaths.merge(clipPathsEnter)
74134                    .selectAll('path')
74135                    .attr('d', getAreaPath);
74136
74137
74138                 // Draw fill, shadow, stroke layers
74139                 var datagroups = layer
74140                     .selectAll('g.datagroup')
74141                     .data(['fill', 'shadow', 'stroke']);
74142
74143                 datagroups = datagroups.enter()
74144                     .append('g')
74145                     .attr('class', function(d) { return 'datagroup datagroup-' + d; })
74146                     .merge(datagroups);
74147
74148
74149                 // Draw paths
74150                 var pathData = {
74151                     fill: polygonData,
74152                     shadow: geoData,
74153                     stroke: geoData
74154                 };
74155
74156                 var paths = datagroups
74157                     .selectAll('path')
74158                     .data(function(layer) { return pathData[layer]; }, featureKey);
74159
74160                 // exit
74161                 paths.exit()
74162                     .remove();
74163
74164                 // enter/update
74165                 paths = paths.enter()
74166                     .append('path')
74167                     .attr('class', function(d) {
74168                         var datagroup = this.parentNode.__data__;
74169                         return 'pathdata ' + datagroup + ' ' + featureClasses(d);
74170                     })
74171                     .attr('clip-path', function(d) {
74172                         var datagroup = this.parentNode.__data__;
74173                         return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
74174                     })
74175                     .merge(paths)
74176                     .attr('d', function(d) {
74177                         var datagroup = this.parentNode.__data__;
74178                         return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
74179                     });
74180
74181
74182                 // Draw labels
74183                 layer
74184                     .call(drawLabels, 'label-halo', geoData)
74185                     .call(drawLabels, 'label', geoData);
74186
74187
74188                 function drawLabels(selection, textClass, data) {
74189                     var labelPath = d3_geoPath(projection);
74190                     var labelData = data.filter(function(d) {
74191                         return _showLabels && d.properties && (d.properties.desc || d.properties.name);
74192                     });
74193
74194                     var labels = selection.selectAll('text.' + textClass)
74195                         .data(labelData, featureKey);
74196
74197                     // exit
74198                     labels.exit()
74199                         .remove();
74200
74201                     // enter/update
74202                     labels = labels.enter()
74203                         .append('text')
74204                         .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
74205                         .merge(labels)
74206                         .text(function(d) {
74207                             return d.properties.desc || d.properties.name;
74208                         })
74209                         .attr('x', function(d) {
74210                             var centroid = labelPath.centroid(d);
74211                             return centroid[0] + 11;
74212                         })
74213                         .attr('y', function(d) {
74214                             var centroid = labelPath.centroid(d);
74215                             return centroid[1];
74216                         });
74217                 }
74218             }
74219
74220
74221             function getExtension(fileName) {
74222                 if (!fileName) return;
74223
74224                 var re = /\.(gpx|kml|(geo)?json)$/i;
74225                 var match = fileName.toLowerCase().match(re);
74226                 return match && match.length && match[0];
74227             }
74228
74229
74230             function xmlToDom(textdata) {
74231                 return (new DOMParser()).parseFromString(textdata, 'text/xml');
74232             }
74233
74234
74235             drawData.setFile = function(extension, data) {
74236                 _template = null;
74237                 _fileList = null;
74238                 _geojson = null;
74239                 _src = null;
74240
74241                 var gj;
74242                 switch (extension) {
74243                     case '.gpx':
74244                         gj = togeojson.gpx(xmlToDom(data));
74245                         break;
74246                     case '.kml':
74247                         gj = togeojson.kml(xmlToDom(data));
74248                         break;
74249                     case '.geojson':
74250                     case '.json':
74251                         gj = JSON.parse(data);
74252                         break;
74253                 }
74254
74255                 gj = gj || {};
74256                 if (Object.keys(gj).length) {
74257                     _geojson = ensureIDs(gj);
74258                     _src = extension + ' data file';
74259                     this.fitZoom();
74260                 }
74261
74262                 dispatch.call('change');
74263                 return this;
74264             };
74265
74266
74267             drawData.showLabels = function(val) {
74268                 if (!arguments.length) return _showLabels;
74269
74270                 _showLabels = val;
74271                 return this;
74272             };
74273
74274
74275             drawData.enabled = function(val) {
74276                 if (!arguments.length) return _enabled;
74277
74278                 _enabled = val;
74279                 if (_enabled) {
74280                     showLayer();
74281                 } else {
74282                     hideLayer();
74283                 }
74284
74285                 dispatch.call('change');
74286                 return this;
74287             };
74288
74289
74290             drawData.hasData = function() {
74291                 var gj = _geojson || {};
74292                 return !!(_template || Object.keys(gj).length);
74293             };
74294
74295
74296             drawData.template = function(val, src) {
74297                 if (!arguments.length) return _template;
74298
74299                 // test source against OSM imagery blacklists..
74300                 var osm = context.connection();
74301                 if (osm) {
74302                     var blacklists = osm.imageryBlacklists();
74303                     var fail = false;
74304                     var tested = 0;
74305                     var regex;
74306
74307                     for (var i = 0; i < blacklists.length; i++) {
74308                         try {
74309                             regex = new RegExp(blacklists[i]);
74310                             fail = regex.test(val);
74311                             tested++;
74312                             if (fail) break;
74313                         } catch (e) {
74314                             /* noop */
74315                         }
74316                     }
74317
74318                     // ensure at least one test was run.
74319                     if (!tested) {
74320                         regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
74321                         fail = regex.test(val);
74322                     }
74323                 }
74324
74325                 _template = val;
74326                 _fileList = null;
74327                 _geojson = null;
74328
74329                 // strip off the querystring/hash from the template,
74330                 // it often includes the access token
74331                 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
74332
74333                 dispatch.call('change');
74334                 return this;
74335             };
74336
74337
74338             drawData.geojson = function(gj, src) {
74339                 if (!arguments.length) return _geojson;
74340
74341                 _template = null;
74342                 _fileList = null;
74343                 _geojson = null;
74344                 _src = null;
74345
74346                 gj = gj || {};
74347                 if (Object.keys(gj).length) {
74348                     _geojson = ensureIDs(gj);
74349                     _src = src || 'unknown.geojson';
74350                 }
74351
74352                 dispatch.call('change');
74353                 return this;
74354             };
74355
74356
74357             drawData.fileList = function(fileList) {
74358                 if (!arguments.length) return _fileList;
74359
74360                 _template = null;
74361                 _fileList = fileList;
74362                 _geojson = null;
74363                 _src = null;
74364
74365                 if (!fileList || !fileList.length) return this;
74366                 var f = fileList[0];
74367                 var extension = getExtension(f.name);
74368                 var reader = new FileReader();
74369                 reader.onload = (function() {
74370                     return function(e) {
74371                         drawData.setFile(extension, e.target.result);
74372                     };
74373                 })();
74374
74375                 reader.readAsText(f);
74376
74377                 return this;
74378             };
74379
74380
74381             drawData.url = function(url, defaultExtension) {
74382                 _template = null;
74383                 _fileList = null;
74384                 _geojson = null;
74385                 _src = null;
74386
74387                 // strip off any querystring/hash from the url before checking extension
74388                 var testUrl = url.split(/[?#]/)[0];
74389                 var extension = getExtension(testUrl) || defaultExtension;
74390                 if (extension) {
74391                     _template = null;
74392                     d3_text(url)
74393                         .then(function(data) {
74394                             drawData.setFile(extension, data);
74395                         })
74396                         .catch(function() {
74397                             /* ignore */
74398                         });
74399
74400                 } else {
74401                     drawData.template(url);
74402                 }
74403
74404                 return this;
74405             };
74406
74407
74408             drawData.getSrc = function() {
74409                 return _src || '';
74410             };
74411
74412
74413             drawData.fitZoom = function() {
74414                 var features = getFeatures(_geojson);
74415                 if (!features.length) return;
74416
74417                 var map = context.map();
74418                 var viewport = map.trimmedExtent().polygon();
74419                 var coords = features.reduce(function(coords, feature) {
74420                     var c = feature.geometry.coordinates;
74421
74422                     /* eslint-disable no-fallthrough */
74423                     switch (feature.geometry.type) {
74424                         case 'Point':
74425                             c = [c];
74426                         case 'MultiPoint':
74427                         case 'LineString':
74428                             break;
74429
74430                         case 'MultiPolygon':
74431                             c = utilArrayFlatten(c);
74432                         case 'Polygon':
74433                         case 'MultiLineString':
74434                             c = utilArrayFlatten(c);
74435                             break;
74436                     }
74437                     /* eslint-enable no-fallthrough */
74438
74439                     return utilArrayUnion(coords, c);
74440                 }, []);
74441
74442                 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
74443                     var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
74444                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
74445                 }
74446
74447                 return this;
74448             };
74449
74450
74451             init();
74452             return drawData;
74453         }
74454
74455         function svgDebug(projection, context) {
74456
74457             function drawDebug(selection) {
74458                 var showsTile = context.getDebug('tile');
74459                 var showsCollision = context.getDebug('collision');
74460                 var showsImagery = context.getDebug('imagery');
74461                 var showsCommunity = context.getDebug('community');
74462                 var showsImperial = context.getDebug('imperial');
74463                 var showsDriveLeft = context.getDebug('driveLeft');
74464                 var showsTouchTargets = context.getDebug('target');
74465                 var showsDownloaded = context.getDebug('downloaded');
74466
74467                 var debugData = [];
74468                 if (showsTile) {
74469                     debugData.push({ class: 'red', label: 'tile' });
74470                 }
74471                 if (showsCollision) {
74472                     debugData.push({ class: 'yellow', label: 'collision' });
74473                 }
74474                 if (showsImagery) {
74475                     debugData.push({ class: 'orange', label: 'imagery' });
74476                 }
74477                 if (showsCommunity) {
74478                     debugData.push({ class: 'blue', label: 'community' });
74479                 }
74480                 if (showsImperial) {
74481                     debugData.push({ class: 'cyan', label: 'imperial' });
74482                 }
74483                 if (showsDriveLeft) {
74484                     debugData.push({ class: 'green', label: 'driveLeft' });
74485                 }
74486                 if (showsTouchTargets) {
74487                     debugData.push({ class: 'pink', label: 'touchTargets' });
74488                 }
74489                 if (showsDownloaded) {
74490                     debugData.push({ class: 'purple', label: 'downloaded' });
74491                 }
74492
74493
74494                 var legend = d3_select('#content')
74495                     .selectAll('.debug-legend')
74496                     .data(debugData.length ? [0] : []);
74497
74498                 legend.exit()
74499                     .remove();
74500
74501                 legend = legend.enter()
74502                     .append('div')
74503                     .attr('class', 'fillD debug-legend')
74504                     .merge(legend);
74505
74506
74507                 var legendItems = legend.selectAll('.debug-legend-item')
74508                     .data(debugData, function(d) { return d.label; });
74509
74510                 legendItems.exit()
74511                     .remove();
74512
74513                 legendItems.enter()
74514                     .append('span')
74515                     .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
74516                     .text(function(d) { return d.label; });
74517
74518
74519                 var layer = selection.selectAll('.layer-debug')
74520                     .data(showsImagery || showsCommunity || showsImperial || showsDriveLeft || showsDownloaded ? [0] : []);
74521
74522                 layer.exit()
74523                     .remove();
74524
74525                 layer = layer.enter()
74526                     .append('g')
74527                     .attr('class', 'layer-debug')
74528                     .merge(layer);
74529
74530
74531                 // imagery
74532                 var extent = context.map().extent();
74533                 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
74534                 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
74535
74536                 var imagery = layer.selectAll('path.debug-imagery')
74537                     .data(features);
74538
74539                 imagery.exit()
74540                     .remove();
74541
74542                 imagery.enter()
74543                     .append('path')
74544                     .attr('class', 'debug-imagery debug orange');
74545
74546
74547                 // community index
74548                 var community = layer.selectAll('path.debug-community')
74549                     .data(showsCommunity ? Object.values(data.community.features) : []);
74550
74551                 community.exit()
74552                     .remove();
74553
74554                 community.enter()
74555                     .append('path')
74556                     .attr('class', 'debug-community debug blue');
74557
74558
74559                 // imperial
74560                 var imperial = layer
74561                     .selectAll('path.debug-imperial')
74562                     .data(showsImperial ? [dataImperial] : []);
74563
74564                 imperial.exit()
74565                     .remove();
74566
74567                 imperial.enter()
74568                     .append('path')
74569                     .attr('class', 'debug-imperial debug cyan');
74570
74571
74572                 // driveleft
74573                 var driveLeft = layer
74574                     .selectAll('path.debug-drive-left')
74575                     .data(showsDriveLeft ? [dataDriveLeft] : []);
74576
74577                 driveLeft.exit()
74578                     .remove();
74579
74580                 driveLeft.enter()
74581                     .append('path')
74582                     .attr('class', 'debug-drive-left debug green');
74583
74584
74585                 // downloaded
74586                 var osm = context.connection();
74587                 var dataDownloaded = [];
74588
74589                 if (osm) {
74590                     var rtree = osm.caches('get').tile.rtree;
74591                     dataDownloaded = rtree.all().map(function(bbox) {
74592                         return {
74593                             type: 'Feature',
74594                             properties: { id: bbox.id },
74595                             geometry: {
74596                                 type: 'Polygon',
74597                                 coordinates: [[
74598                                     [ bbox.minX, bbox.minY ],
74599                                     [ bbox.minX, bbox.maxY ],
74600                                     [ bbox.maxX, bbox.maxY ],
74601                                     [ bbox.maxX, bbox.minY ],
74602                                     [ bbox.minX, bbox.minY ]
74603                                 ]]
74604                             }
74605                         };
74606                     });
74607                 }
74608
74609
74610                 var downloaded = layer
74611                     .selectAll('path.debug-downloaded')
74612                     .data(showsDownloaded ? dataDownloaded : []);
74613
74614                 downloaded.exit()
74615                     .remove();
74616
74617                 downloaded.enter()
74618                     .append('path')
74619                     .attr('class', 'debug-downloaded debug purple');
74620
74621
74622                 // update
74623                 layer.selectAll('path')
74624                     .attr('d', svgPath(projection).geojson);
74625             }
74626
74627
74628             // This looks strange because `enabled` methods on other layers are
74629             // chainable getter/setters, and this one is just a getter.
74630             drawDebug.enabled = function() {
74631                 if (!arguments.length) {
74632                     return context.getDebug('tile') ||
74633                         context.getDebug('collision') ||
74634                         context.getDebug('imagery') ||
74635                         context.getDebug('imperial') ||
74636                         context.getDebug('driveLeft') ||
74637                         context.getDebug('target') ||
74638                         context.getDebug('downloaded');
74639                 } else {
74640                     return this;
74641                 }
74642             };
74643
74644
74645             return drawDebug;
74646         }
74647
74648         var _keepRightEnabled = false;
74649         var _keepRightService;
74650
74651
74652         function svgKeepRight(projection, context, dispatch) {
74653             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
74654             var minZoom = 12;
74655             var touchLayer = d3_select(null);
74656             var drawLayer = d3_select(null);
74657             var _keepRightVisible = false;
74658
74659
74660             function markerPath(selection, klass) {
74661                 selection
74662                     .attr('class', klass)
74663                     .attr('transform', 'translate(-4, -24)')
74664                     .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');
74665             }
74666
74667
74668             // Loosely-coupled keepRight service for fetching errors.
74669             function getService() {
74670                 if (services$1.keepRight && !_keepRightService) {
74671                     _keepRightService = services$1.keepRight;
74672                     _keepRightService.on('loaded', throttledRedraw);
74673                 } else if (!services$1.keepRight && _keepRightService) {
74674                     _keepRightService = null;
74675                 }
74676
74677                 return _keepRightService;
74678             }
74679
74680
74681             // Show the errors
74682             function editOn() {
74683                 if (!_keepRightVisible) {
74684                     _keepRightVisible = true;
74685                     drawLayer
74686                         .style('display', 'block');
74687                 }
74688             }
74689
74690
74691             // Immediately remove the errors and their touch targets
74692             function editOff() {
74693                 if (_keepRightVisible) {
74694                     _keepRightVisible = false;
74695                     drawLayer
74696                         .style('display', 'none');
74697                     drawLayer.selectAll('.qa_error.keepRight')
74698                         .remove();
74699                     touchLayer.selectAll('.qa_error.keepRight')
74700                         .remove();
74701                 }
74702             }
74703
74704
74705             // Enable the layer.  This shows the errors and transitions them to visible.
74706             function layerOn() {
74707                 editOn();
74708
74709                 drawLayer
74710                     .style('opacity', 0)
74711                     .transition()
74712                     .duration(250)
74713                     .style('opacity', 1)
74714                     .on('end interrupt', function () {
74715                         dispatch.call('change');
74716                     });
74717             }
74718
74719
74720             // Disable the layer.  This transitions the layer invisible and then hides the errors.
74721             function layerOff() {
74722                 throttledRedraw.cancel();
74723                 drawLayer.interrupt();
74724                 touchLayer.selectAll('.qa_error.keepRight')
74725                     .remove();
74726
74727                 drawLayer
74728                     .transition()
74729                     .duration(250)
74730                     .style('opacity', 0)
74731                     .on('end interrupt', function () {
74732                         editOff();
74733                         dispatch.call('change');
74734                     });
74735             }
74736
74737
74738             // Update the error markers
74739             function updateMarkers() {
74740                 if (!_keepRightVisible || !_keepRightEnabled) return;
74741
74742                 var service = getService();
74743                 var selectedID = context.selectedErrorID();
74744                 var data = (service ? service.getErrors(projection) : []);
74745                 var getTransform = svgPointTransform(projection);
74746
74747                 // Draw markers..
74748                 var markers = drawLayer.selectAll('.qa_error.keepRight')
74749                     .data(data, function(d) { return d.id; });
74750
74751                 // exit
74752                 markers.exit()
74753                     .remove();
74754
74755                 // enter
74756                 var markersEnter = markers.enter()
74757                     .append('g')
74758                     .attr('class', function(d) {
74759                         return [
74760                             'qa_error',
74761                             d.service,
74762                             'error_id-' + d.id,
74763                             'error_type-' + d.parent_error_type
74764                         ].join(' ');
74765                     });
74766
74767                 markersEnter
74768                     .append('ellipse')
74769                     .attr('cx', 0.5)
74770                     .attr('cy', 1)
74771                     .attr('rx', 6.5)
74772                     .attr('ry', 3)
74773                     .attr('class', 'stroke');
74774
74775                 markersEnter
74776                     .append('path')
74777                     .call(markerPath, 'shadow');
74778
74779                 markersEnter
74780                     .append('use')
74781                     .attr('class', 'qa_error-fill')
74782                     .attr('width', '20px')
74783                     .attr('height', '20px')
74784                     .attr('x', '-8px')
74785                     .attr('y', '-22px')
74786                     .attr('xlink:href', '#iD-icon-bolt');
74787
74788                 // update
74789                 markers
74790                     .merge(markersEnter)
74791                     .sort(sortY)
74792                     .classed('selected', function(d) { return d.id === selectedID; })
74793                     .attr('transform', getTransform);
74794
74795
74796                 // Draw targets..
74797                 if (touchLayer.empty()) return;
74798                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
74799
74800                 var targets = touchLayer.selectAll('.qa_error.keepRight')
74801                     .data(data, function(d) { return d.id; });
74802
74803                 // exit
74804                 targets.exit()
74805                     .remove();
74806
74807                 // enter/update
74808                 targets.enter()
74809                     .append('rect')
74810                     .attr('width', '20px')
74811                     .attr('height', '20px')
74812                     .attr('x', '-8px')
74813                     .attr('y', '-22px')
74814                     .merge(targets)
74815                     .sort(sortY)
74816                     .attr('class', function(d) {
74817                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
74818                     })
74819                     .attr('transform', getTransform);
74820
74821
74822                 function sortY(a, b) {
74823                     return (a.id === selectedID) ? 1
74824                         : (b.id === selectedID) ? -1
74825                         : (a.severity === 'error' && b.severity !== 'error') ? 1
74826                         : (b.severity === 'error' && a.severity !== 'error') ? -1
74827                         : b.loc[1] - a.loc[1];
74828                 }
74829             }
74830
74831
74832             // Draw the keepRight layer and schedule loading errors and updating markers.
74833             function drawKeepRight(selection) {
74834                 var service = getService();
74835
74836                 var surface = context.surface();
74837                 if (surface && !surface.empty()) {
74838                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
74839                 }
74840
74841                 drawLayer = selection.selectAll('.layer-keepRight')
74842                     .data(service ? [0] : []);
74843
74844                 drawLayer.exit()
74845                     .remove();
74846
74847                 drawLayer = drawLayer.enter()
74848                     .append('g')
74849                     .attr('class', 'layer-keepRight')
74850                     .style('display', _keepRightEnabled ? 'block' : 'none')
74851                     .merge(drawLayer);
74852
74853                 if (_keepRightEnabled) {
74854                     if (service && ~~context.map().zoom() >= minZoom) {
74855                         editOn();
74856                         service.loadErrors(projection);
74857                         updateMarkers();
74858                     } else {
74859                         editOff();
74860                     }
74861                 }
74862             }
74863
74864
74865             // Toggles the layer on and off
74866             drawKeepRight.enabled = function(val) {
74867                 if (!arguments.length) return _keepRightEnabled;
74868
74869                 _keepRightEnabled = val;
74870                 if (_keepRightEnabled) {
74871                     layerOn();
74872                 } else {
74873                     layerOff();
74874                     if (context.selectedErrorID()) {
74875                         context.enter(modeBrowse(context));
74876                     }
74877                 }
74878
74879                 dispatch.call('change');
74880                 return this;
74881             };
74882
74883
74884             drawKeepRight.supported = function() {
74885                 return !!getService();
74886             };
74887
74888
74889             return drawKeepRight;
74890         }
74891
74892         function svgGeolocate(projection) {
74893             var layer = d3_select(null);
74894             var _position;
74895
74896
74897             function init() {
74898                 if (svgGeolocate.initialized) return;  // run once
74899                 svgGeolocate.enabled = false;
74900                 svgGeolocate.initialized = true;
74901             }
74902
74903             function showLayer() {
74904                 layer.style('display', 'block');
74905             }
74906
74907
74908             function hideLayer() {
74909                 layer
74910                     .transition()
74911                     .duration(250)
74912                     .style('opacity', 0);
74913             }
74914
74915             function layerOn() {
74916                 layer
74917                     .style('opacity', 0)
74918                     .transition()
74919                     .duration(250)
74920                     .style('opacity', 1);
74921
74922             }
74923
74924             function layerOff() {
74925                 layer.style('display', 'none');
74926             }
74927
74928             function transform(d) {
74929                 return svgPointTransform(projection)(d);
74930             }
74931
74932             function accuracy(accuracy, loc) { // converts accuracy to pixels...
74933                 var degreesRadius = geoMetersToLat(accuracy),
74934                     tangentLoc = [loc[0], loc[1] + degreesRadius],
74935                     projectedTangent = projection(tangentLoc),
74936                     projectedLoc = projection([loc[0], loc[1]]);
74937
74938                 // southern most point will have higher pixel value...
74939                return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
74940             }
74941
74942             function update() {
74943                 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
74944
74945                 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
74946                     .data([geolocation]);
74947
74948                 groups.exit()
74949                     .remove();
74950
74951                 var pointsEnter = groups.enter()
74952                     .append('g')
74953                     .attr('class', 'geolocation');
74954
74955                 pointsEnter
74956                     .append('circle')
74957                     .attr('id', 'geolocate-radius')
74958                     .attr('dx', '0')
74959                     .attr('dy', '0')
74960                     .attr('fill', 'rgb(15,128,225)')
74961                     .attr('fill-opacity', '0.3')
74962                     .attr('r', '0');
74963
74964                 pointsEnter
74965                     .append('circle')
74966                     .attr('dx', '0')
74967                     .attr('dy', '0')
74968                     .attr('fill', 'rgb(15,128,225)')
74969                     .attr('stroke', 'white')
74970                     .attr('stroke-width', '1.5')
74971                     .attr('r', '6');
74972
74973                 groups.merge(pointsEnter)
74974                     .attr('transform', transform);
74975
74976                 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
74977             }
74978
74979             function drawLocation(selection) {
74980                 var enabled = svgGeolocate.enabled;
74981
74982                 layer = selection.selectAll('.layer-geolocate')
74983                     .data([0]);
74984
74985                 layer.exit()
74986                     .remove();
74987
74988                 var layerEnter = layer.enter()
74989                     .append('g')
74990                     .attr('class', 'layer-geolocate')
74991                     .style('display', enabled ? 'block' : 'none');
74992
74993                 layerEnter
74994                     .append('g')
74995                     .attr('class', 'geolocations');
74996
74997                 layer = layerEnter
74998                     .merge(layer);
74999
75000                 if (enabled) {
75001                     update();
75002                 } else {
75003                     layerOff();
75004                 }
75005             }
75006
75007             drawLocation.enabled = function (position, enabled) {
75008                 if (!arguments.length) return svgGeolocate.enabled;
75009                 _position = position;
75010                 svgGeolocate.enabled = enabled;
75011                 if (svgGeolocate.enabled) {
75012                     showLayer();
75013                     layerOn();
75014                 } else {
75015                     hideLayer();
75016                 }
75017                 return this;
75018             };
75019
75020             init();
75021             return drawLocation;
75022         }
75023
75024         function svgLabels(projection, context) {
75025             var path = d3_geoPath(projection);
75026             var detected = utilDetect();
75027             var baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge');
75028             var _rdrawn = rbush_1();
75029             var _rskipped = rbush_1();
75030             var _textWidthCache = {};
75031             var _entitybboxes = {};
75032
75033             // Listed from highest to lowest priority
75034             var labelStack = [
75035                 ['line', 'aeroway', '*', 12],
75036                 ['line', 'highway', 'motorway', 12],
75037                 ['line', 'highway', 'trunk', 12],
75038                 ['line', 'highway', 'primary', 12],
75039                 ['line', 'highway', 'secondary', 12],
75040                 ['line', 'highway', 'tertiary', 12],
75041                 ['line', 'highway', '*', 12],
75042                 ['line', 'railway', '*', 12],
75043                 ['line', 'waterway', '*', 12],
75044                 ['area', 'aeroway', '*', 12],
75045                 ['area', 'amenity', '*', 12],
75046                 ['area', 'building', '*', 12],
75047                 ['area', 'historic', '*', 12],
75048                 ['area', 'leisure', '*', 12],
75049                 ['area', 'man_made', '*', 12],
75050                 ['area', 'natural', '*', 12],
75051                 ['area', 'shop', '*', 12],
75052                 ['area', 'tourism', '*', 12],
75053                 ['area', 'camp_site', '*', 12],
75054                 ['point', 'aeroway', '*', 10],
75055                 ['point', 'amenity', '*', 10],
75056                 ['point', 'building', '*', 10],
75057                 ['point', 'historic', '*', 10],
75058                 ['point', 'leisure', '*', 10],
75059                 ['point', 'man_made', '*', 10],
75060                 ['point', 'natural', '*', 10],
75061                 ['point', 'shop', '*', 10],
75062                 ['point', 'tourism', '*', 10],
75063                 ['point', 'camp_site', '*', 10],
75064                 ['line', 'name', '*', 12],
75065                 ['area', 'name', '*', 12],
75066                 ['point', 'name', '*', 10]
75067             ];
75068
75069
75070             function blacklisted(preset) {
75071                 var noIcons = ['building', 'landuse', 'natural'];
75072                 return noIcons.some(function(s) {
75073                     return preset.id.indexOf(s) >= 0;
75074                 });
75075             }
75076
75077
75078             function get(array, prop) {
75079                 return function(d, i) { return array[i][prop]; };
75080             }
75081
75082
75083             function textWidth(text, size, elem) {
75084                 var c = _textWidthCache[size];
75085                 if (!c) c = _textWidthCache[size] = {};
75086
75087                 if (c[text]) {
75088                     return c[text];
75089
75090                 } else if (elem) {
75091                     c[text] = elem.getComputedTextLength();
75092                     return c[text];
75093
75094                 } else {
75095                     var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
75096                     if (str === null) {
75097                         return size / 3 * 2 * text.length;
75098                     } else {
75099                         return size / 3 * (2 * text.length + str.length);
75100                     }
75101                 }
75102             }
75103
75104
75105             function drawLinePaths(selection, entities, filter, classes, labels) {
75106                 var paths = selection.selectAll('path')
75107                     .filter(filter)
75108                     .data(entities, osmEntity.key);
75109
75110                 // exit
75111                 paths.exit()
75112                     .remove();
75113
75114                 // enter/update
75115                 paths.enter()
75116                     .append('path')
75117                     .style('stroke-width', get(labels, 'font-size'))
75118                     .attr('id', function(d) { return 'labelpath-' + d.id; })
75119                     .attr('class', classes)
75120                     .merge(paths)
75121                     .attr('d', get(labels, 'lineString'));
75122             }
75123
75124
75125             function drawLineLabels(selection, entities, filter, classes, labels) {
75126                 var texts = selection.selectAll('text.' + classes)
75127                     .filter(filter)
75128                     .data(entities, osmEntity.key);
75129
75130                 // exit
75131                 texts.exit()
75132                     .remove();
75133
75134                 // enter
75135                 texts.enter()
75136                     .append('text')
75137                     .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
75138                     .attr('dy', baselineHack ? '0.35em' : null)
75139                     .append('textPath')
75140                     .attr('class', 'textpath');
75141
75142                 // update
75143                 selection.selectAll('text.' + classes).selectAll('.textpath')
75144                     .filter(filter)
75145                     .data(entities, osmEntity.key)
75146                     .attr('startOffset', '50%')
75147                     .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
75148                     .text(utilDisplayNameForPath);
75149             }
75150
75151
75152             function drawPointLabels(selection, entities, filter, classes, labels) {
75153                 var texts = selection.selectAll('text.' + classes)
75154                     .filter(filter)
75155                     .data(entities, osmEntity.key);
75156
75157                 // exit
75158                 texts.exit()
75159                     .remove();
75160
75161                 // enter/update
75162                 texts.enter()
75163                     .append('text')
75164                     .attr('class', function(d, i) {
75165                         return classes + ' ' + labels[i].classes + ' ' + d.id;
75166                     })
75167                     .merge(texts)
75168                     .attr('x', get(labels, 'x'))
75169                     .attr('y', get(labels, 'y'))
75170                     .style('text-anchor', get(labels, 'textAnchor'))
75171                     .text(utilDisplayName)
75172                     .each(function(d, i) {
75173                         textWidth(utilDisplayName(d), labels[i].height, this);
75174                     });
75175             }
75176
75177
75178             function drawAreaLabels(selection, entities, filter, classes, labels) {
75179                 entities = entities.filter(hasText);
75180                 labels = labels.filter(hasText);
75181                 drawPointLabels(selection, entities, filter, classes, labels);
75182
75183                 function hasText(d, i) {
75184                     return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
75185                 }
75186             }
75187
75188
75189             function drawAreaIcons(selection, entities, filter, classes, labels) {
75190                 var icons = selection.selectAll('use.' + classes)
75191                     .filter(filter)
75192                     .data(entities, osmEntity.key);
75193
75194                 // exit
75195                 icons.exit()
75196                     .remove();
75197
75198                 // enter/update
75199                 icons.enter()
75200                     .append('use')
75201                     .attr('class', 'icon ' + classes)
75202                     .attr('width', '17px')
75203                     .attr('height', '17px')
75204                     .merge(icons)
75205                     .attr('transform', get(labels, 'transform'))
75206                     .attr('xlink:href', function(d) {
75207                         var preset = context.presets().match(d, context.graph());
75208                         var picon = preset && preset.icon;
75209
75210                         if (!picon) {
75211                             return '';
75212                         } else {
75213                             var isMaki = /^maki-/.test(picon);
75214                             return '#' + picon + (isMaki ? '-15' : '');
75215                         }
75216                     });
75217             }
75218
75219
75220             function drawCollisionBoxes(selection, rtree, which) {
75221                 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
75222
75223                 var gj = [];
75224                 if (context.getDebug('collision')) {
75225                     gj = rtree.all().map(function(d) {
75226                         return { type: 'Polygon', coordinates: [[
75227                             [d.minX, d.minY],
75228                             [d.maxX, d.minY],
75229                             [d.maxX, d.maxY],
75230                             [d.minX, d.maxY],
75231                             [d.minX, d.minY]
75232                         ]]};
75233                     });
75234                 }
75235
75236                 var boxes = selection.selectAll('.' + which)
75237                     .data(gj);
75238
75239                 // exit
75240                 boxes.exit()
75241                     .remove();
75242
75243                 // enter/update
75244                 boxes.enter()
75245                     .append('path')
75246                     .attr('class', classes)
75247                     .merge(boxes)
75248                     .attr('d', d3_geoPath());
75249             }
75250
75251
75252             function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
75253                 var wireframe = context.surface().classed('fill-wireframe');
75254                 var zoom = geoScaleToZoom(projection.scale());
75255
75256                 var labelable = [];
75257                 var renderNodeAs = {};
75258                 var i, j, k, entity, geometry;
75259
75260                 for (i = 0; i < labelStack.length; i++) {
75261                     labelable.push([]);
75262                 }
75263
75264                 if (fullRedraw) {
75265                     _rdrawn.clear();
75266                     _rskipped.clear();
75267                     _entitybboxes = {};
75268
75269                 } else {
75270                     for (i = 0; i < entities.length; i++) {
75271                         entity = entities[i];
75272                         var toRemove = []
75273                             .concat(_entitybboxes[entity.id] || [])
75274                             .concat(_entitybboxes[entity.id + 'I'] || []);
75275
75276                         for (j = 0; j < toRemove.length; j++) {
75277                             _rdrawn.remove(toRemove[j]);
75278                             _rskipped.remove(toRemove[j]);
75279                         }
75280                     }
75281                 }
75282
75283                 // Loop through all the entities to do some preprocessing
75284                 for (i = 0; i < entities.length; i++) {
75285                     entity = entities[i];
75286                     geometry = entity.geometry(graph);
75287
75288                     // Insert collision boxes around interesting points/vertices
75289                     if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
75290                         var hasDirections = entity.directions(graph, projection).length;
75291                         var markerPadding;
75292
75293                         if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
75294                             renderNodeAs[entity.id] = 'point';
75295                             markerPadding = 20;   // extra y for marker height
75296                         } else {
75297                             renderNodeAs[entity.id] = 'vertex';
75298                             markerPadding = 0;
75299                         }
75300
75301                         var coord = projection(entity.loc);
75302                         var nodePadding = 10;
75303                         var bbox = {
75304                             minX: coord[0] - nodePadding,
75305                             minY: coord[1] - nodePadding - markerPadding,
75306                             maxX: coord[0] + nodePadding,
75307                             maxY: coord[1] + nodePadding
75308                         };
75309
75310                         doInsert(bbox, entity.id + 'P');
75311                     }
75312
75313                     // From here on, treat vertices like points
75314                     if (geometry === 'vertex') {
75315                         geometry = 'point';
75316                     }
75317
75318                     // Determine which entities are label-able
75319                     var preset = geometry === 'area' && context.presets().match(entity, graph);
75320                     var icon = preset && !blacklisted(preset) && preset.icon;
75321
75322                     if (!icon && !utilDisplayName(entity))
75323                         continue;
75324
75325                     for (k = 0; k < labelStack.length; k++) {
75326                         var matchGeom = labelStack[k][0];
75327                         var matchKey = labelStack[k][1];
75328                         var matchVal = labelStack[k][2];
75329                         var hasVal = entity.tags[matchKey];
75330
75331                         if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
75332                             labelable[k].push(entity);
75333                             break;
75334                         }
75335                     }
75336                 }
75337
75338                 var positions = {
75339                     point: [],
75340                     line: [],
75341                     area: []
75342                 };
75343
75344                 var labelled = {
75345                     point: [],
75346                     line: [],
75347                     area: []
75348                 };
75349
75350                 // Try and find a valid label for labellable entities
75351                 for (k = 0; k < labelable.length; k++) {
75352                     var fontSize = labelStack[k][3];
75353
75354                     for (i = 0; i < labelable[k].length; i++) {
75355                         entity = labelable[k][i];
75356                         geometry = entity.geometry(graph);
75357
75358                         var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
75359                         var name = getName(entity);
75360                         var width = name && textWidth(name, fontSize);
75361                         var p = null;
75362
75363                         if (geometry === 'point' || geometry === 'vertex') {
75364                             // no point or vertex labels in wireframe mode
75365                             // no vertex labels at low zooms (vertices have no icons)
75366                             if (wireframe) continue;
75367                             var renderAs = renderNodeAs[entity.id];
75368                             if (renderAs === 'vertex' && zoom < 17) continue;
75369
75370                             p = getPointLabel(entity, width, fontSize, renderAs);
75371
75372                         } else if (geometry === 'line') {
75373                             p = getLineLabel(entity, width, fontSize);
75374
75375                         } else if (geometry === 'area') {
75376                             p = getAreaLabel(entity, width, fontSize);
75377                         }
75378
75379                         if (p) {
75380                             if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
75381                             p.classes = geometry + ' tag-' + labelStack[k][1];
75382                             positions[geometry].push(p);
75383                             labelled[geometry].push(entity);
75384                         }
75385                     }
75386                 }
75387
75388
75389                 function isInterestingVertex(entity) {
75390                     var selectedIDs = context.selectedIDs();
75391
75392                     return entity.hasInterestingTags() ||
75393                         entity.isEndpoint(graph) ||
75394                         entity.isConnected(graph) ||
75395                         selectedIDs.indexOf(entity.id) !== -1 ||
75396                         graph.parentWays(entity).some(function(parent) {
75397                             return selectedIDs.indexOf(parent.id) !== -1;
75398                         });
75399                 }
75400
75401
75402                 function getPointLabel(entity, width, height, geometry) {
75403                     var y = (geometry === 'point' ? -12 : 0);
75404                     var pointOffsets = {
75405                         ltr: [15, y, 'start'],
75406                         rtl: [-15, y, 'end']
75407                     };
75408
75409                     var coord = projection(entity.loc);
75410                     var textPadding = 2;
75411                     var offset = pointOffsets[textDirection];
75412                     var p = {
75413                         height: height,
75414                         width: width,
75415                         x: coord[0] + offset[0],
75416                         y: coord[1] + offset[1],
75417                         textAnchor: offset[2]
75418                     };
75419
75420                     // insert a collision box for the text label..
75421                     var bbox;
75422                     if (textDirection === 'rtl') {
75423                         bbox = {
75424                             minX: p.x - width - textPadding,
75425                             minY: p.y - (height / 2) - textPadding,
75426                             maxX: p.x + textPadding,
75427                             maxY: p.y + (height / 2) + textPadding
75428                         };
75429                     } else {
75430                         bbox = {
75431                             minX: p.x - textPadding,
75432                             minY: p.y - (height / 2) - textPadding,
75433                             maxX: p.x + width + textPadding,
75434                             maxY: p.y + (height / 2) + textPadding
75435                         };
75436                     }
75437
75438                     if (tryInsert([bbox], entity.id, true)) {
75439                         return p;
75440                     }
75441                 }
75442
75443
75444                 function getLineLabel(entity, width, height) {
75445                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
75446                     var points = graph.childNodes(entity)
75447                         .map(function(node) { return projection(node.loc); });
75448                     var length = geoPathLength(points);
75449
75450                     if (length < width + 20) return;
75451
75452                     // todo: properly clip points to viewport
75453
75454                     // % along the line to attempt to place the label
75455                     var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
75456                                        25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
75457                     var padding = 3;
75458
75459                     for (var i = 0; i < lineOffsets.length; i++) {
75460                         var offset = lineOffsets[i];
75461                         var middle = offset / 100 * length;
75462                         var start = middle - width / 2;
75463
75464                         if (start < 0 || start + width > length) continue;
75465
75466                         // generate subpath and ignore paths that are invalid or don't cross viewport.
75467                         var sub = subpath(points, start, start + width);
75468                         if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
75469                             continue;
75470                         }
75471
75472                         var isReverse = reverse(sub);
75473                         if (isReverse) {
75474                             sub = sub.reverse();
75475                         }
75476
75477                         var bboxes = [];
75478                         var boxsize = (height + 2) / 2;
75479
75480                         for (var j = 0; j < sub.length - 1; j++) {
75481                             var a = sub[j];
75482                             var b = sub[j + 1];
75483
75484                             // split up the text into small collision boxes
75485                             var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
75486
75487                             for (var box = 0; box < num; box++) {
75488                                 var p = geoVecInterp(a, b, box / num);
75489                                 var x0 = p[0] - boxsize - padding;
75490                                 var y0 = p[1] - boxsize - padding;
75491                                 var x1 = p[0] + boxsize + padding;
75492                                 var y1 = p[1] + boxsize + padding;
75493
75494                                 bboxes.push({
75495                                     minX: Math.min(x0, x1),
75496                                     minY: Math.min(y0, y1),
75497                                     maxX: Math.max(x0, x1),
75498                                     maxY: Math.max(y0, y1)
75499                                 });
75500                             }
75501                         }
75502
75503                         if (tryInsert(bboxes, entity.id, false)) {   // accept this one
75504                             return {
75505                                 'font-size': height + 2,
75506                                 lineString: lineString(sub),
75507                                 startOffset: offset + '%'
75508                             };
75509                         }
75510                     }
75511
75512                     function reverse(p) {
75513                         var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
75514                         return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
75515                     }
75516
75517                     function lineString(points) {
75518                         return 'M' + points.join('L');
75519                     }
75520
75521                     function subpath(points, from, to) {
75522                         var sofar = 0;
75523                         var start, end, i0, i1;
75524
75525                         for (var i = 0; i < points.length - 1; i++) {
75526                             var a = points[i];
75527                             var b = points[i + 1];
75528                             var current = geoVecLength(a, b);
75529                             var portion;
75530                             if (!start && sofar + current >= from) {
75531                                 portion = (from - sofar) / current;
75532                                 start = [
75533                                     a[0] + portion * (b[0] - a[0]),
75534                                     a[1] + portion * (b[1] - a[1])
75535                                 ];
75536                                 i0 = i + 1;
75537                             }
75538                             if (!end && sofar + current >= to) {
75539                                 portion = (to - sofar) / current;
75540                                 end = [
75541                                     a[0] + portion * (b[0] - a[0]),
75542                                     a[1] + portion * (b[1] - a[1])
75543                                 ];
75544                                 i1 = i + 1;
75545                             }
75546                             sofar += current;
75547                         }
75548
75549                         var result = points.slice(i0, i1);
75550                         result.unshift(start);
75551                         result.push(end);
75552                         return result;
75553                     }
75554                 }
75555
75556
75557                 function getAreaLabel(entity, width, height) {
75558                     var centroid = path.centroid(entity.asGeoJSON(graph, true));
75559                     var extent = entity.extent(graph);
75560                     var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
75561
75562                     if (isNaN(centroid[0]) || areaWidth < 20) return;
75563
75564                     var preset = context.presets().match(entity, context.graph());
75565                     var picon = preset && preset.icon;
75566                     var iconSize = 17;
75567                     var padding = 2;
75568                     var p = {};
75569
75570                     if (picon) {  // icon and label..
75571                         if (addIcon()) {
75572                             addLabel(iconSize + padding);
75573                             return p;
75574                         }
75575                     } else {   // label only..
75576                         if (addLabel(0)) {
75577                             return p;
75578                         }
75579                     }
75580
75581
75582                     function addIcon() {
75583                         var iconX = centroid[0] - (iconSize / 2);
75584                         var iconY = centroid[1] - (iconSize / 2);
75585                         var bbox = {
75586                             minX: iconX,
75587                             minY: iconY,
75588                             maxX: iconX + iconSize,
75589                             maxY: iconY + iconSize
75590                         };
75591
75592                         if (tryInsert([bbox], entity.id + 'I', true)) {
75593                             p.transform = 'translate(' + iconX + ',' + iconY + ')';
75594                             return true;
75595                         }
75596                         return false;
75597                     }
75598
75599                     function addLabel(yOffset) {
75600                         if (width && areaWidth >= width + 20) {
75601                             var labelX = centroid[0];
75602                             var labelY = centroid[1] + yOffset;
75603                             var bbox = {
75604                                 minX: labelX - (width / 2) - padding,
75605                                 minY: labelY - (height / 2) - padding,
75606                                 maxX: labelX + (width / 2) + padding,
75607                                 maxY: labelY + (height / 2) + padding
75608                             };
75609
75610                             if (tryInsert([bbox], entity.id, true)) {
75611                                 p.x = labelX;
75612                                 p.y = labelY;
75613                                 p.textAnchor = 'middle';
75614                                 p.height = height;
75615                                 return true;
75616                             }
75617                         }
75618                         return false;
75619                     }
75620                 }
75621
75622
75623                 // force insert a singular bounding box
75624                 // singular box only, no array, id better be unique
75625                 function doInsert(bbox, id) {
75626                     bbox.id = id;
75627
75628                     var oldbox = _entitybboxes[id];
75629                     if (oldbox) {
75630                         _rdrawn.remove(oldbox);
75631                     }
75632                     _entitybboxes[id] = bbox;
75633                     _rdrawn.insert(bbox);
75634                 }
75635
75636
75637                 function tryInsert(bboxes, id, saveSkipped) {
75638                     var skipped = false;
75639
75640                     for (var i = 0; i < bboxes.length; i++) {
75641                         var bbox = bboxes[i];
75642                         bbox.id = id;
75643
75644                         // Check that label is visible
75645                         if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
75646                             skipped = true;
75647                             break;
75648                         }
75649                         if (_rdrawn.collides(bbox)) {
75650                             skipped = true;
75651                             break;
75652                         }
75653                     }
75654
75655                     _entitybboxes[id] = bboxes;
75656
75657                     if (skipped) {
75658                         if (saveSkipped) {
75659                             _rskipped.load(bboxes);
75660                         }
75661                     } else {
75662                         _rdrawn.load(bboxes);
75663                     }
75664
75665                     return !skipped;
75666                 }
75667
75668
75669                 var layer = selection.selectAll('.layer-osm.labels');
75670                 layer.selectAll('.labels-group')
75671                     .data(['halo', 'label', 'debug'])
75672                     .enter()
75673                     .append('g')
75674                     .attr('class', function(d) { return 'labels-group ' + d; });
75675
75676                 var halo = layer.selectAll('.labels-group.halo');
75677                 var label = layer.selectAll('.labels-group.label');
75678                 var debug = layer.selectAll('.labels-group.debug');
75679
75680                 // points
75681                 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
75682                 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
75683
75684                 // lines
75685                 drawLinePaths(layer, labelled.line, filter, '', positions.line);
75686                 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
75687                 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
75688
75689                 // areas
75690                 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
75691                 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
75692                 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
75693                 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
75694
75695                 // debug
75696                 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
75697                 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
75698
75699                 layer.call(filterLabels);
75700             }
75701
75702
75703             function filterLabels(selection) {
75704                 var drawLayer = selection.selectAll('.layer-osm.labels');
75705                 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
75706
75707                 layers.selectAll('.nolabel')
75708                     .classed('nolabel', false);
75709
75710                 var mouse = context.mouse();
75711                 var graph = context.graph();
75712                 var selectedIDs = context.selectedIDs();
75713                 var ids = [];
75714                 var pad, bbox;
75715
75716                 // hide labels near the mouse
75717                 if (mouse) {
75718                     pad = 20;
75719                     bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
75720                     var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
75721                     ids.push.apply(ids, nearMouse);
75722                 }
75723
75724                 // hide labels on selected nodes (they look weird when dragging / haloed)
75725                 for (var i = 0; i < selectedIDs.length; i++) {
75726                     var entity = graph.hasEntity(selectedIDs[i]);
75727                     if (entity && entity.type === 'node') {
75728                         ids.push(selectedIDs[i]);
75729                     }
75730                 }
75731
75732                 layers.selectAll(utilEntitySelector(ids))
75733                     .classed('nolabel', true);
75734
75735
75736                 // draw the mouse bbox if debugging is on..
75737                 var debug = selection.selectAll('.labels-group.debug');
75738                 var gj = [];
75739                 if (context.getDebug('collision')) {
75740                     gj = bbox ? [{
75741                         type: 'Polygon',
75742                         coordinates: [[
75743                             [bbox.minX, bbox.minY],
75744                             [bbox.maxX, bbox.minY],
75745                             [bbox.maxX, bbox.maxY],
75746                             [bbox.minX, bbox.maxY],
75747                             [bbox.minX, bbox.minY]
75748                         ]]
75749                     }] : [];
75750                 }
75751
75752                 var box = debug.selectAll('.debug-mouse')
75753                     .data(gj);
75754
75755                 // exit
75756                 box.exit()
75757                     .remove();
75758
75759                 // enter/update
75760                 box.enter()
75761                     .append('path')
75762                     .attr('class', 'debug debug-mouse yellow')
75763                     .merge(box)
75764                     .attr('d', d3_geoPath());
75765             }
75766
75767
75768             var throttleFilterLabels = throttle(filterLabels, 100);
75769
75770
75771             drawLabels.observe = function(selection) {
75772                 var listener = function() { throttleFilterLabels(selection); };
75773                 selection.on('mousemove.hidelabels', listener);
75774                 context.on('enter.hidelabels', listener);
75775             };
75776
75777
75778             drawLabels.off = function(selection) {
75779                 throttleFilterLabels.cancel();
75780                 selection.on('mousemove.hidelabels', null);
75781                 context.on('enter.hidelabels', null);
75782             };
75783
75784
75785             return drawLabels;
75786         }
75787
75788         var _improveOsmEnabled = false;
75789         var _errorService;
75790
75791
75792         function svgImproveOSM(projection, context, dispatch) {
75793             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
75794             var minZoom = 12;
75795             var touchLayer = d3_select(null);
75796             var drawLayer = d3_select(null);
75797             var _improveOsmVisible = false;
75798
75799             function markerPath(selection, klass) {
75800                 selection
75801                     .attr('class', klass)
75802                     .attr('transform', 'translate(-10, -28)')
75803                     .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');
75804             }
75805
75806
75807             // Loosely-coupled improveOSM service for fetching errors.
75808             function getService() {
75809                 if (services$1.improveOSM && !_errorService) {
75810                     _errorService = services$1.improveOSM;
75811                     _errorService.on('loaded', throttledRedraw);
75812                 } else if (!services$1.improveOSM && _errorService) {
75813                     _errorService = null;
75814                 }
75815
75816                 return _errorService;
75817             }
75818
75819
75820             // Show the errors
75821             function editOn() {
75822                 if (!_improveOsmVisible) {
75823                     _improveOsmVisible = true;
75824                     drawLayer
75825                         .style('display', 'block');
75826                 }
75827             }
75828
75829
75830             // Immediately remove the errors and their touch targets
75831             function editOff() {
75832                 if (_improveOsmVisible) {
75833                     _improveOsmVisible = false;
75834                     drawLayer
75835                         .style('display', 'none');
75836                     drawLayer.selectAll('.qa_error.improveOSM')
75837                         .remove();
75838                     touchLayer.selectAll('.qa_error.improveOSM')
75839                         .remove();
75840                 }
75841             }
75842
75843
75844             // Enable the layer.  This shows the errors and transitions them to visible.
75845             function layerOn() {
75846                 editOn();
75847
75848                 drawLayer
75849                     .style('opacity', 0)
75850                     .transition()
75851                     .duration(250)
75852                     .style('opacity', 1)
75853                     .on('end interrupt', function () {
75854                         dispatch.call('change');
75855                     });
75856             }
75857
75858
75859             // Disable the layer.  This transitions the layer invisible and then hides the errors.
75860             function layerOff() {
75861                 throttledRedraw.cancel();
75862                 drawLayer.interrupt();
75863                 touchLayer.selectAll('.qa_error.improveOSM')
75864                     .remove();
75865
75866                 drawLayer
75867                     .transition()
75868                     .duration(250)
75869                     .style('opacity', 0)
75870                     .on('end interrupt', function () {
75871                         editOff();
75872                         dispatch.call('change');
75873                     });
75874             }
75875
75876
75877             // Update the error markers
75878             function updateMarkers() {
75879                 if (!_improveOsmVisible || !_improveOsmEnabled) return;
75880
75881                 var service = getService();
75882                 var selectedID = context.selectedErrorID();
75883                 var data = (service ? service.getErrors(projection) : []);
75884                 var getTransform = svgPointTransform(projection);
75885
75886                 // Draw markers..
75887                 var markers = drawLayer.selectAll('.qa_error.improveOSM')
75888                     .data(data, function(d) { return d.id; });
75889
75890                 // exit
75891                 markers.exit()
75892                     .remove();
75893
75894                 // enter
75895                 var markersEnter = markers.enter()
75896                     .append('g')
75897                     .attr('class', function(d) {
75898                         return [
75899                             'qa_error',
75900                             d.service,
75901                             'error_id-' + d.id,
75902                             'error_type-' + d.error_type,
75903                             'category-' + d.category
75904                         ].join(' ');
75905                     });
75906
75907                 markersEnter
75908                     .append('polygon')
75909                     .call(markerPath, 'shadow');
75910
75911                 markersEnter
75912                     .append('ellipse')
75913                     .attr('cx', 0)
75914                     .attr('cy', 0)
75915                     .attr('rx', 4.5)
75916                     .attr('ry', 2)
75917                     .attr('class', 'stroke');
75918
75919                 markersEnter
75920                     .append('polygon')
75921                     .attr('fill', 'currentColor')
75922                     .call(markerPath, 'qa_error-fill');
75923
75924                 markersEnter
75925                     .append('use')
75926                     .attr('transform', 'translate(-5.5, -21)')
75927                     .attr('class', 'icon-annotation')
75928                     .attr('width', '11px')
75929                     .attr('height', '11px')
75930                     .attr('xlink:href', function(d) {
75931                         var picon = d.icon;
75932
75933                         if (!picon) {
75934                             return '';
75935                         } else {
75936                             var isMaki = /^maki-/.test(picon);
75937                             return '#' + picon + (isMaki ? '-11' : '');
75938                         }
75939                     });
75940
75941                 // update
75942                 markers
75943                     .merge(markersEnter)
75944                     .sort(sortY)
75945                     .classed('selected', function(d) { return d.id === selectedID; })
75946                     .attr('transform', getTransform);
75947
75948
75949                 // Draw targets..
75950                 if (touchLayer.empty()) return;
75951                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
75952
75953                 var targets = touchLayer.selectAll('.qa_error.improveOSM')
75954                     .data(data, function(d) { return d.id; });
75955
75956                 // exit
75957                 targets.exit()
75958                     .remove();
75959
75960                 // enter/update
75961                 targets.enter()
75962                     .append('rect')
75963                     .attr('width', '20px')
75964                     .attr('height', '30px')
75965                     .attr('x', '-10px')
75966                     .attr('y', '-28px')
75967                     .merge(targets)
75968                     .sort(sortY)
75969                     .attr('class', function(d) {
75970                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
75971                     })
75972                     .attr('transform', getTransform);
75973
75974
75975                 function sortY(a, b) {
75976                     return (a.id === selectedID) ? 1
75977                         : (b.id === selectedID) ? -1
75978                         : b.loc[1] - a.loc[1];
75979                 }
75980             }
75981
75982
75983             // Draw the ImproveOSM layer and schedule loading errors and updating markers.
75984             function drawImproveOSM(selection) {
75985                 var service = getService();
75986
75987                 var surface = context.surface();
75988                 if (surface && !surface.empty()) {
75989                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
75990                 }
75991
75992                 drawLayer = selection.selectAll('.layer-improveOSM')
75993                     .data(service ? [0] : []);
75994
75995                 drawLayer.exit()
75996                     .remove();
75997
75998                 drawLayer = drawLayer.enter()
75999                     .append('g')
76000                     .attr('class', 'layer-improveOSM')
76001                     .style('display', _improveOsmEnabled ? 'block' : 'none')
76002                     .merge(drawLayer);
76003
76004                 if (_improveOsmEnabled) {
76005                     if (service && ~~context.map().zoom() >= minZoom) {
76006                         editOn();
76007                         service.loadErrors(projection);
76008                         updateMarkers();
76009                     } else {
76010                         editOff();
76011                     }
76012                 }
76013             }
76014
76015
76016             // Toggles the layer on and off
76017             drawImproveOSM.enabled = function(val) {
76018                 if (!arguments.length) return _improveOsmEnabled;
76019
76020                 _improveOsmEnabled = val;
76021                 if (_improveOsmEnabled) {
76022                     layerOn();
76023                 } else {
76024                     layerOff();
76025                     if (context.selectedErrorID()) {
76026                         context.enter(modeBrowse(context));
76027                     }
76028                 }
76029
76030                 dispatch.call('change');
76031                 return this;
76032             };
76033
76034
76035             drawImproveOSM.supported = function() {
76036                 return !!getService();
76037             };
76038
76039
76040             return drawImproveOSM;
76041         }
76042
76043         function svgStreetside(projection, context, dispatch) {
76044             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76045             var minZoom = 14;
76046             var minMarkerZoom = 16;
76047             var minViewfieldZoom = 18;
76048             var layer = d3_select(null);
76049             var _viewerYaw = 0;
76050             var _selectedSequence = null;
76051             var _streetside;
76052
76053             /**
76054              * init().
76055              */
76056             function init() {
76057                 if (svgStreetside.initialized) return;  // run once
76058                 svgStreetside.enabled = false;
76059                 svgStreetside.initialized = true;
76060             }
76061
76062             /**
76063              * getService().
76064              */
76065             function getService() {
76066                 if (services$1.streetside && !_streetside) {
76067                     _streetside = services$1.streetside;
76068                     _streetside.event
76069                         .on('viewerChanged', viewerChanged)
76070                         .on('loadedBubbles', throttledRedraw);
76071                 } else if (!services$1.streetside && _streetside) {
76072                     _streetside = null;
76073                 }
76074
76075                 return _streetside;
76076             }
76077
76078             /**
76079              * showLayer().
76080              */
76081             function showLayer() {
76082                 var service = getService();
76083                 if (!service) return;
76084
76085                 editOn();
76086
76087                 layer
76088                     .style('opacity', 0)
76089                     .transition()
76090                     .duration(250)
76091                     .style('opacity', 1)
76092                     .on('end', function () { dispatch.call('change'); });
76093             }
76094
76095             /**
76096              * hideLayer().
76097              */
76098             function hideLayer() {
76099                 throttledRedraw.cancel();
76100
76101                 layer
76102                     .transition()
76103                     .duration(250)
76104                     .style('opacity', 0)
76105                     .on('end', editOff);
76106             }
76107
76108             /**
76109              * editOn().
76110              */
76111             function editOn() {
76112                 layer.style('display', 'block');
76113             }
76114
76115             /**
76116              * editOff().
76117              */
76118             function editOff() {
76119                 layer.selectAll('.viewfield-group').remove();
76120                 layer.style('display', 'none');
76121             }
76122
76123             /**
76124              * click() Handles 'bubble' point click event.
76125              */
76126             function click(d) {
76127                 var service = getService();
76128                 if (!service) return;
76129
76130                 // try to preserve the viewer rotation when staying on the same sequence
76131                 if (d.sequenceKey !== _selectedSequence) {
76132                     _viewerYaw = 0;  // reset
76133                 }
76134                 _selectedSequence = d.sequenceKey;
76135
76136                 service
76137                     .selectImage(d)
76138                     .then(function(r) {
76139                         if (r.status === 'ok'){
76140                             service.showViewer(_viewerYaw);
76141                         }
76142                     });
76143
76144
76145                 context.map().centerEase(d.loc);
76146             }
76147
76148             /**
76149              * mouseover().
76150              */
76151             function mouseover(d) {
76152                 var service = getService();
76153                 if (service) service.setStyles(d);
76154             }
76155
76156             /**
76157              * mouseout().
76158              */
76159             function mouseout() {
76160                 var service = getService();
76161                 if (service) service.setStyles(null);
76162             }
76163
76164             /**
76165              * transform().
76166              */
76167             function transform(d) {
76168                 var t = svgPointTransform(projection)(d);
76169                 var rot = d.ca + _viewerYaw;
76170                 if (rot) {
76171                     t += ' rotate(' + Math.floor(rot) + ',0,0)';
76172                 }
76173                 return t;
76174             }
76175
76176
76177             function viewerChanged() {
76178                 var service = getService();
76179                 if (!service) return;
76180
76181                 var viewer = service.viewer();
76182                 if (!viewer) return;
76183
76184                 // update viewfield rotation
76185                 _viewerYaw = viewer.getYaw();
76186
76187                 // avoid updating if the map is currently transformed
76188                 // e.g. during drags or easing.
76189                 if (context.map().isTransformed()) return;
76190
76191                 layer.selectAll('.viewfield-group.currentView')
76192                     .attr('transform', transform);
76193             }
76194
76195
76196             context.photos().on('change.streetside', update);
76197
76198             /**
76199              * update().
76200              */
76201             function update() {
76202                 var viewer = d3_select('#photoviewer');
76203                 var selected = viewer.empty() ? undefined : viewer.datum();
76204                 var z = ~~context.map().zoom();
76205                 var showMarkers = (z >= minMarkerZoom);
76206                 var showViewfields = (z >= minViewfieldZoom);
76207                 var service = getService();
76208
76209                 var sequences = [];
76210                 var bubbles = [];
76211
76212                 if (context.photos().showsPanoramic()) {
76213                     sequences = (service ? service.sequences(projection) : []);
76214                     bubbles = (service && showMarkers ? service.bubbles(projection) : []);
76215                 }
76216
76217                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
76218                     .data(sequences, function(d) { return d.properties.key; });
76219
76220                 // exit
76221                 traces.exit()
76222                     .remove();
76223
76224                 // enter/update
76225                 traces = traces.enter()
76226                     .append('path')
76227                     .attr('class', 'sequence')
76228                     .merge(traces)
76229                     .attr('d', svgPath(projection).geojson);
76230
76231
76232                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
76233                     .data(bubbles, function(d) {
76234                         // force reenter once bubbles are attached to a sequence
76235                         return d.key + (d.sequenceKey ? 'v1' : 'v0');
76236                     });
76237
76238                 // exit
76239                 groups.exit()
76240                     .remove();
76241
76242                 // enter
76243                 var groupsEnter = groups.enter()
76244                     .append('g')
76245                     .attr('class', 'viewfield-group')
76246                     .on('mouseenter', mouseover)
76247                     .on('mouseleave', mouseout)
76248                     .on('click', click);
76249
76250                 groupsEnter
76251                     .append('g')
76252                     .attr('class', 'viewfield-scale');
76253
76254                 // update
76255                 var markers = groups
76256                     .merge(groupsEnter)
76257                     .sort(function(a, b) {
76258                         return (a === selected) ? 1
76259                             : (b === selected) ? -1
76260                             : b.loc[1] - a.loc[1];
76261                     })
76262                     .attr('transform', transform)
76263                     .select('.viewfield-scale');
76264
76265
76266                 markers.selectAll('circle')
76267                     .data([0])
76268                     .enter()
76269                     .append('circle')
76270                     .attr('dx', '0')
76271                     .attr('dy', '0')
76272                     .attr('r', '6');
76273
76274                 var viewfields = markers.selectAll('.viewfield')
76275                     .data(showViewfields ? [0] : []);
76276
76277                 viewfields.exit()
76278                     .remove();
76279
76280                 // viewfields may or may not be drawn...
76281                 // but if they are, draw below the circles
76282                 viewfields.enter()
76283                     .insert('path', 'circle')
76284                     .attr('class', 'viewfield')
76285                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
76286                     .attr('d', viewfieldPath);
76287
76288                 function viewfieldPath() {
76289                     var d = this.parentNode.__data__;
76290                     if (d.pano) {
76291                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
76292                     } else {
76293                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
76294                     }
76295                 }
76296
76297             }
76298
76299             /**
76300              * drawImages()
76301              * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
76302              * 'svgStreetside()' is called from index.js
76303              */
76304             function drawImages(selection) {
76305                 var enabled = svgStreetside.enabled;
76306                 var service = getService();
76307
76308                 layer = selection.selectAll('.layer-streetside-images')
76309                     .data(service ? [0] : []);
76310
76311                 layer.exit()
76312                     .remove();
76313
76314                 var layerEnter = layer.enter()
76315                     .append('g')
76316                     .attr('class', 'layer-streetside-images')
76317                     .style('display', enabled ? 'block' : 'none');
76318
76319                 layerEnter
76320                     .append('g')
76321                     .attr('class', 'sequences');
76322
76323                 layerEnter
76324                     .append('g')
76325                     .attr('class', 'markers');
76326
76327                 layer = layerEnter
76328                     .merge(layer);
76329
76330                 if (enabled) {
76331                     if (service && ~~context.map().zoom() >= minZoom) {
76332                         editOn();
76333                         update();
76334                         service.loadBubbles(projection);
76335                     } else {
76336                         editOff();
76337                     }
76338                 }
76339             }
76340
76341
76342             /**
76343              * drawImages.enabled().
76344              */
76345             drawImages.enabled = function(_) {
76346                 if (!arguments.length) return svgStreetside.enabled;
76347                 svgStreetside.enabled = _;
76348                 if (svgStreetside.enabled) {
76349                     showLayer();
76350                 } else {
76351                     hideLayer();
76352                 }
76353                 dispatch.call('change');
76354                 return this;
76355             };
76356
76357             /**
76358              * drawImages.supported().
76359              */
76360             drawImages.supported = function() {
76361                 return !!getService();
76362             };
76363
76364             init();
76365
76366             return drawImages;
76367         }
76368
76369         function svgMapillaryImages(projection, context, dispatch) {
76370             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76371             var minZoom = 12;
76372             var minMarkerZoom = 16;
76373             var minViewfieldZoom = 18;
76374             var layer = d3_select(null);
76375             var _mapillary;
76376             var viewerCompassAngle;
76377
76378
76379             function init() {
76380                 if (svgMapillaryImages.initialized) return;  // run once
76381                 svgMapillaryImages.enabled = false;
76382                 svgMapillaryImages.initialized = true;
76383             }
76384
76385
76386             function getService() {
76387                 if (services$1.mapillary && !_mapillary) {
76388                     _mapillary = services$1.mapillary;
76389                     _mapillary.event.on('loadedImages', throttledRedraw);
76390                     _mapillary.event.on('bearingChanged', function(e) {
76391                         viewerCompassAngle = e;
76392
76393                         // avoid updating if the map is currently transformed
76394                         // e.g. during drags or easing.
76395                         if (context.map().isTransformed()) return;
76396
76397                         layer.selectAll('.viewfield-group.currentView')
76398                             .filter(function(d) {
76399                                 return d.pano;
76400                             })
76401                             .attr('transform', transform);
76402                     });
76403                 } else if (!services$1.mapillary && _mapillary) {
76404                     _mapillary = null;
76405                 }
76406
76407                 return _mapillary;
76408             }
76409
76410
76411             function showLayer() {
76412                 var service = getService();
76413                 if (!service) return;
76414
76415                 editOn();
76416
76417                 layer
76418                     .style('opacity', 0)
76419                     .transition()
76420                     .duration(250)
76421                     .style('opacity', 1)
76422                     .on('end', function () { dispatch.call('change'); });
76423             }
76424
76425
76426             function hideLayer() {
76427                 throttledRedraw.cancel();
76428
76429                 layer
76430                     .transition()
76431                     .duration(250)
76432                     .style('opacity', 0)
76433                     .on('end', editOff);
76434             }
76435
76436
76437             function editOn() {
76438                 layer.style('display', 'block');
76439             }
76440
76441
76442             function editOff() {
76443                 layer.selectAll('.viewfield-group').remove();
76444                 layer.style('display', 'none');
76445             }
76446
76447
76448             function click(d) {
76449                 var service = getService();
76450                 if (!service) return;
76451
76452                 service
76453                     .selectImage(d)
76454                     .updateViewer(d.key, context)
76455                     .showViewer();
76456
76457                 context.map().centerEase(d.loc);
76458             }
76459
76460
76461             function mouseover(d) {
76462                 var service = getService();
76463                 if (service) service.setStyles(d);
76464             }
76465
76466
76467             function mouseout() {
76468                 var service = getService();
76469                 if (service) service.setStyles(null);
76470             }
76471
76472
76473             function transform(d) {
76474                 var t = svgPointTransform(projection)(d);
76475                 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
76476                     t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
76477                 } else if (d.ca) {
76478                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
76479                 }
76480                 return t;
76481             }
76482
76483             context.photos().on('change.mapillary_images', update);
76484
76485             function filterImages(images) {
76486                 var showsPano = context.photos().showsPanoramic();
76487                 var showsFlat = context.photos().showsFlat();
76488                 if (!showsPano || !showsFlat) {
76489                     images = images.filter(function(image) {
76490                         if (image.pano) return showsPano;
76491                         return showsFlat;
76492                     });
76493                 }
76494                 return images;
76495             }
76496
76497             function filterSequences(sequences, service) {
76498                 var showsPano = context.photos().showsPanoramic();
76499                 var showsFlat = context.photos().showsFlat();
76500                 if (!showsPano || !showsFlat) {
76501                     sequences = sequences.filter(function(sequence) {
76502                         if (sequence.properties.hasOwnProperty('pano')) {
76503                             if (sequence.properties.pano) return showsPano;
76504                             return showsFlat;
76505                         } else {
76506                             // if the sequence doesn't specify pano or not, search its images
76507                             var cProps = sequence.properties.coordinateProperties;
76508                             if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
76509                                 for (var index in cProps.image_keys) {
76510                                     var imageKey = cProps.image_keys[index];
76511                                     var image = service.cachedImage(imageKey);
76512                                     if (image && image.hasOwnProperty('pano')) {
76513                                         if (image.pano) return showsPano;
76514                                         return showsFlat;
76515                                     }
76516                                 }
76517                             }
76518                         }
76519                     });
76520                 }
76521                 return sequences;
76522             }
76523
76524             function update() {
76525                 var viewer = d3_select('#photoviewer');
76526                 var selected = viewer.empty() ? undefined : viewer.datum();
76527
76528                 var z = ~~context.map().zoom();
76529                 var showMarkers = (z >= minMarkerZoom);
76530                 var showViewfields = (z >= minViewfieldZoom);
76531
76532                 var service = getService();
76533                 var sequences = (service ? service.sequences(projection) : []);
76534                 var images = (service && showMarkers ? service.images(projection) : []);
76535
76536                 images = filterImages(images);
76537                 sequences = filterSequences(sequences, service);
76538
76539                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
76540                     .data(sequences, function(d) { return d.properties.key; });
76541
76542                 // exit
76543                 traces.exit()
76544                     .remove();
76545
76546                 // enter/update
76547                 traces = traces.enter()
76548                     .append('path')
76549                     .attr('class', 'sequence')
76550                     .merge(traces)
76551                     .attr('d', svgPath(projection).geojson);
76552
76553
76554                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
76555                     .data(images, function(d) { return d.key; });
76556
76557                 // exit
76558                 groups.exit()
76559                     .remove();
76560
76561                 // enter
76562                 var groupsEnter = groups.enter()
76563                     .append('g')
76564                     .attr('class', 'viewfield-group')
76565                     .on('mouseenter', mouseover)
76566                     .on('mouseleave', mouseout)
76567                     .on('click', click);
76568
76569                 groupsEnter
76570                     .append('g')
76571                     .attr('class', 'viewfield-scale');
76572
76573                 // update
76574                 var markers = groups
76575                     .merge(groupsEnter)
76576                     .sort(function(a, b) {
76577                         return (a === selected) ? 1
76578                             : (b === selected) ? -1
76579                             : b.loc[1] - a.loc[1];  // sort Y
76580                     })
76581                     .attr('transform', transform)
76582                     .select('.viewfield-scale');
76583
76584
76585                 markers.selectAll('circle')
76586                     .data([0])
76587                     .enter()
76588                     .append('circle')
76589                     .attr('dx', '0')
76590                     .attr('dy', '0')
76591                     .attr('r', '6');
76592
76593                 var viewfields = markers.selectAll('.viewfield')
76594                     .data(showViewfields ? [0] : []);
76595
76596                 viewfields.exit()
76597                     .remove();
76598
76599                 viewfields.enter()               // viewfields may or may not be drawn...
76600                     .insert('path', 'circle')    // but if they are, draw below the circles
76601                     .attr('class', 'viewfield')
76602                     .classed('pano', function() { return this.parentNode.__data__.pano; })
76603                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
76604                     .attr('d', viewfieldPath);
76605
76606                 function viewfieldPath() {
76607                     var d = this.parentNode.__data__;
76608                     if (d.pano) {
76609                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
76610                     } else {
76611                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
76612                     }
76613                 }
76614             }
76615
76616
76617             function drawImages(selection) {
76618                 var enabled = svgMapillaryImages.enabled;
76619                 var service = getService();
76620
76621                 layer = selection.selectAll('.layer-mapillary')
76622                     .data(service ? [0] : []);
76623
76624                 layer.exit()
76625                     .remove();
76626
76627                 var layerEnter = layer.enter()
76628                     .append('g')
76629                     .attr('class', 'layer-mapillary')
76630                     .style('display', enabled ? 'block' : 'none');
76631
76632                 layerEnter
76633                     .append('g')
76634                     .attr('class', 'sequences');
76635
76636                 layerEnter
76637                     .append('g')
76638                     .attr('class', 'markers');
76639
76640                 layer = layerEnter
76641                     .merge(layer);
76642
76643                 if (enabled) {
76644                     if (service && ~~context.map().zoom() >= minZoom) {
76645                         editOn();
76646                         update();
76647                         service.loadImages(projection);
76648                     } else {
76649                         editOff();
76650                     }
76651                 }
76652             }
76653
76654
76655             drawImages.enabled = function(_) {
76656                 if (!arguments.length) return svgMapillaryImages.enabled;
76657                 svgMapillaryImages.enabled = _;
76658                 if (svgMapillaryImages.enabled) {
76659                     showLayer();
76660                 } else {
76661                     hideLayer();
76662                 }
76663                 dispatch.call('change');
76664                 return this;
76665             };
76666
76667
76668             drawImages.supported = function() {
76669                 return !!getService();
76670             };
76671
76672
76673             init();
76674             return drawImages;
76675         }
76676
76677         function svgMapillarySigns(projection, context, dispatch) {
76678             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76679             var minZoom = 12;
76680             var layer = d3_select(null);
76681             var _mapillary;
76682
76683
76684             function init() {
76685                 if (svgMapillarySigns.initialized) return;  // run once
76686                 svgMapillarySigns.enabled = false;
76687                 svgMapillarySigns.initialized = true;
76688             }
76689
76690
76691             function getService() {
76692                 if (services$1.mapillary && !_mapillary) {
76693                     _mapillary = services$1.mapillary;
76694                     _mapillary.event.on('loadedSigns', throttledRedraw);
76695                 } else if (!services$1.mapillary && _mapillary) {
76696                     _mapillary = null;
76697                 }
76698                 return _mapillary;
76699             }
76700
76701
76702             function showLayer() {
76703                 var service = getService();
76704                 if (!service) return;
76705
76706                 editOn();
76707             }
76708
76709
76710             function hideLayer() {
76711                 throttledRedraw.cancel();
76712                 editOff();
76713             }
76714
76715
76716             function editOn() {
76717                 layer.style('display', 'block');
76718             }
76719
76720
76721             function editOff() {
76722                 layer.selectAll('.icon-sign').remove();
76723                 layer.style('display', 'none');
76724             }
76725
76726
76727             function click(d) {
76728                 var service = getService();
76729                 if (!service) return;
76730
76731                 context.map().centerEase(d.loc);
76732
76733                 var selected = service.getSelectedImage();
76734                 var selectedImageKey = selected && selected.key;
76735                 var imageKey;
76736
76737                 // Pick one of the images the sign was detected in,
76738                 // preference given to an image already selected.
76739                 d.detections.forEach(function(detection) {
76740                     if (!imageKey || selectedImageKey === detection.image_key) {
76741                         imageKey = detection.image_key;
76742                     }
76743                 });
76744
76745                 service
76746                     .selectImage(null, imageKey)
76747                     .updateViewer(imageKey, context)
76748                     .showViewer();
76749             }
76750
76751
76752             function update() {
76753                 var service = getService();
76754                 var data = (service ? service.signs(projection) : []);
76755                 var viewer = d3_select('#photoviewer');
76756                 var selected = viewer.empty() ? undefined : viewer.datum();
76757                 var selectedImageKey = selected && selected.key;
76758                 var transform = svgPointTransform(projection);
76759
76760                 var signs = layer.selectAll('.icon-sign')
76761                     .data(data, function(d) { return d.key; });
76762
76763                 // exit
76764                 signs.exit()
76765                     .remove();
76766
76767                 // enter
76768                 var enter = signs.enter()
76769                     .append('use')
76770                     .attr('class', 'icon-sign')
76771                     .attr('width', '24px')
76772                     .attr('height', '24px')
76773                     .attr('x', '-12px')
76774                     .attr('y', '-12px')
76775                     .attr('xlink:href', function(d) { return '#' + d.value; })
76776                     .classed('currentView', function(d) {
76777                         return d.detections.some(function(detection) {
76778                             return detection.image_key === selectedImageKey;
76779                         });
76780                     })
76781                     .on('click', click);
76782
76783                 // update
76784                 signs
76785                     .merge(enter)
76786                     .sort(function(a, b) {
76787                         return (a === selected) ? 1
76788                             : (b === selected) ? -1
76789                             : b.loc[1] - a.loc[1];  // sort Y
76790                     })
76791                     .attr('transform', transform);
76792             }
76793
76794
76795             function drawSigns(selection) {
76796                 var enabled = svgMapillarySigns.enabled;
76797                 var service = getService();
76798
76799                 layer = selection.selectAll('.layer-mapillary-signs')
76800                     .data(service ? [0] : []);
76801
76802                 layer.exit()
76803                     .remove();
76804
76805                 layer = layer.enter()
76806                     .append('g')
76807                     .attr('class', 'layer-mapillary-signs')
76808                     .style('display', enabled ? 'block' : 'none')
76809                     .merge(layer);
76810
76811                 if (enabled) {
76812                     if (service && ~~context.map().zoom() >= minZoom) {
76813                         editOn();
76814                         update();
76815                         service.loadSigns(projection);
76816                     } else {
76817                         editOff();
76818                     }
76819                 }
76820             }
76821
76822
76823             drawSigns.enabled = function(_) {
76824                 if (!arguments.length) return svgMapillarySigns.enabled;
76825                 svgMapillarySigns.enabled = _;
76826                 if (svgMapillarySigns.enabled) {
76827                     showLayer();
76828                 } else {
76829                     hideLayer();
76830                 }
76831                 dispatch.call('change');
76832                 return this;
76833             };
76834
76835
76836             drawSigns.supported = function() {
76837                 return !!getService();
76838             };
76839
76840
76841             init();
76842             return drawSigns;
76843         }
76844
76845         function svgMapillaryMapFeatures(projection, context, dispatch) {
76846             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
76847             var minZoom = 12;
76848             var layer = d3_select(null);
76849             var _mapillary;
76850
76851
76852             function init() {
76853                 if (svgMapillaryMapFeatures.initialized) return;  // run once
76854                 svgMapillaryMapFeatures.enabled = false;
76855                 svgMapillaryMapFeatures.initialized = true;
76856             }
76857
76858
76859             function getService() {
76860                 if (services$1.mapillary && !_mapillary) {
76861                     _mapillary = services$1.mapillary;
76862                     _mapillary.event.on('loadedMapFeatures', throttledRedraw);
76863                 } else if (!services$1.mapillary && _mapillary) {
76864                     _mapillary = null;
76865                 }
76866                 return _mapillary;
76867             }
76868
76869
76870             function showLayer() {
76871                 var service = getService();
76872                 if (!service) return;
76873
76874                 editOn();
76875             }
76876
76877
76878             function hideLayer() {
76879                 throttledRedraw.cancel();
76880                 editOff();
76881             }
76882
76883
76884             function editOn() {
76885                 layer.style('display', 'block');
76886             }
76887
76888
76889             function editOff() {
76890                 layer.selectAll('.icon-map-feature').remove();
76891                 layer.style('display', 'none');
76892             }
76893
76894
76895             function click(d) {
76896                 var service = getService();
76897                 if (!service) return;
76898
76899                 context.map().centerEase(d.loc);
76900
76901                 var selected = service.getSelectedImage();
76902                 var selectedImageKey = selected && selected.key;
76903                 var imageKey;
76904
76905                 // Pick one of the images the map feature was detected in,
76906                 // preference given to an image already selected.
76907                 d.detections.forEach(function(detection) {
76908                     if (!imageKey || selectedImageKey === detection.image_key) {
76909                         imageKey = detection.image_key;
76910                     }
76911                 });
76912
76913                 service
76914                     .selectImage(null, imageKey)
76915                     .updateViewer(imageKey, context)
76916                     .showViewer();
76917             }
76918
76919
76920             function update() {
76921                 var service = getService();
76922                 var data = (service ? service.mapFeatures(projection) : []);
76923                 var viewer = d3_select('#photoviewer');
76924                 var selected = viewer.empty() ? undefined : viewer.datum();
76925                 var selectedImageKey = selected && selected.key;
76926                 var transform = svgPointTransform(projection);
76927
76928                 var mapFeatures = layer.selectAll('.icon-map-feature')
76929                     .data(data, function(d) { return d.key; });
76930
76931                 // exit
76932                 mapFeatures.exit()
76933                     .remove();
76934
76935                 // enter
76936                 var enter = mapFeatures.enter()
76937                     .append('use')
76938                     .attr('class', 'icon-map-feature')
76939                     .attr('width', '24px')
76940                     .attr('height', '24px')
76941                     .attr('x', '-12px')
76942                     .attr('y', '-12px')
76943                     .attr('xlink:href', function(d) { return '#' + d.value; })
76944                     .classed('currentView', function(d) {
76945                         return d.detections.some(function(detection) {
76946                             return detection.image_key === selectedImageKey;
76947                         });
76948                     })
76949                     .on('click', click);
76950
76951                 // update
76952                 mapFeatures
76953                     .merge(enter)
76954                     .sort(function(a, b) {
76955                         return (a === selected) ? 1
76956                             : (b === selected) ? -1
76957                             : b.loc[1] - a.loc[1];  // sort Y
76958                     })
76959                     .attr('transform', transform);
76960             }
76961
76962
76963             function drawMapFeatures(selection) {
76964                 var enabled = svgMapillaryMapFeatures.enabled;
76965                 var service = getService();
76966
76967                 layer = selection.selectAll('.layer-mapillary-map-features')
76968                     .data(service ? [0] : []);
76969
76970                 layer.exit()
76971                     .remove();
76972
76973                 layer = layer.enter()
76974                     .append('g')
76975                     .attr('class', 'layer-mapillary-map-features')
76976                     .style('display', enabled ? 'block' : 'none')
76977                     .merge(layer);
76978
76979                 if (enabled) {
76980                     if (service && ~~context.map().zoom() >= minZoom) {
76981                         editOn();
76982                         update();
76983                         service.loadMapFeatures(projection);
76984                     } else {
76985                         editOff();
76986                     }
76987                 }
76988             }
76989
76990
76991             drawMapFeatures.enabled = function(_) {
76992                 if (!arguments.length) return svgMapillaryMapFeatures.enabled;
76993                 svgMapillaryMapFeatures.enabled = _;
76994                 if (svgMapillaryMapFeatures.enabled) {
76995                     showLayer();
76996                 } else {
76997                     hideLayer();
76998                 }
76999                 dispatch.call('change');
77000                 return this;
77001             };
77002
77003
77004             drawMapFeatures.supported = function() {
77005                 return !!getService();
77006             };
77007
77008
77009             init();
77010             return drawMapFeatures;
77011         }
77012
77013         function svgOpenstreetcamImages(projection, context, dispatch) {
77014             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
77015             var minZoom = 12;
77016             var minMarkerZoom = 16;
77017             var minViewfieldZoom = 18;
77018             var layer = d3_select(null);
77019             var _openstreetcam;
77020
77021
77022             function init() {
77023                 if (svgOpenstreetcamImages.initialized) return;  // run once
77024                 svgOpenstreetcamImages.enabled = false;
77025                 svgOpenstreetcamImages.initialized = true;
77026             }
77027
77028
77029             function getService() {
77030                 if (services$1.openstreetcam && !_openstreetcam) {
77031                     _openstreetcam = services$1.openstreetcam;
77032                     _openstreetcam.event.on('loadedImages', throttledRedraw);
77033                 } else if (!services$1.openstreetcam && _openstreetcam) {
77034                     _openstreetcam = null;
77035                 }
77036
77037                 return _openstreetcam;
77038             }
77039
77040
77041             function showLayer() {
77042                 var service = getService();
77043                 if (!service) return;
77044
77045                 editOn();
77046
77047                 layer
77048                     .style('opacity', 0)
77049                     .transition()
77050                     .duration(250)
77051                     .style('opacity', 1)
77052                     .on('end', function () { dispatch.call('change'); });
77053             }
77054
77055
77056             function hideLayer() {
77057                 throttledRedraw.cancel();
77058
77059                 layer
77060                     .transition()
77061                     .duration(250)
77062                     .style('opacity', 0)
77063                     .on('end', editOff);
77064             }
77065
77066
77067             function editOn() {
77068                 layer.style('display', 'block');
77069             }
77070
77071
77072             function editOff() {
77073                 layer.selectAll('.viewfield-group').remove();
77074                 layer.style('display', 'none');
77075             }
77076
77077
77078             function click(d) {
77079                 var service = getService();
77080                 if (!service) return;
77081
77082                 service
77083                     .selectImage(d)
77084                     .updateViewer(d)
77085                     .showViewer();
77086
77087                 context.map().centerEase(d.loc);
77088             }
77089
77090
77091             function mouseover(d) {
77092                 var service = getService();
77093                 if (service) service.setStyles(d);
77094             }
77095
77096
77097             function mouseout() {
77098                 var service = getService();
77099                 if (service) service.setStyles(null);
77100             }
77101
77102
77103             function transform(d) {
77104                 var t = svgPointTransform(projection)(d);
77105                 if (d.ca) {
77106                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
77107                 }
77108                 return t;
77109             }
77110
77111
77112             context.photos().on('change.openstreetcam_images', update);
77113
77114             function update() {
77115                 var viewer = d3_select('#photoviewer');
77116                 var selected = viewer.empty() ? undefined : viewer.datum();
77117
77118                 var z = ~~context.map().zoom();
77119                 var showMarkers = (z >= minMarkerZoom);
77120                 var showViewfields = (z >= minViewfieldZoom);
77121
77122                 var service = getService();
77123                 var sequences = [];
77124                 var images = [];
77125
77126                 if (context.photos().showsFlat()) {
77127                     sequences = (service ? service.sequences(projection) : []);
77128                     images = (service && showMarkers ? service.images(projection) : []);
77129                 }
77130
77131                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
77132                     .data(sequences, function(d) { return d.properties.key; });
77133
77134                 // exit
77135                 traces.exit()
77136                     .remove();
77137
77138                 // enter/update
77139                 traces = traces.enter()
77140                     .append('path')
77141                     .attr('class', 'sequence')
77142                     .merge(traces)
77143                     .attr('d', svgPath(projection).geojson);
77144
77145
77146                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
77147                     .data(images, function(d) { return d.key; });
77148
77149                 // exit
77150                 groups.exit()
77151                     .remove();
77152
77153                 // enter
77154                 var groupsEnter = groups.enter()
77155                     .append('g')
77156                     .attr('class', 'viewfield-group')
77157                     .on('mouseenter', mouseover)
77158                     .on('mouseleave', mouseout)
77159                     .on('click', click);
77160
77161                 groupsEnter
77162                     .append('g')
77163                     .attr('class', 'viewfield-scale');
77164
77165                 // update
77166                 var markers = groups
77167                     .merge(groupsEnter)
77168                     .sort(function(a, b) {
77169                         return (a === selected) ? 1
77170                             : (b === selected) ? -1
77171                             : b.loc[1] - a.loc[1];  // sort Y
77172                     })
77173                     .attr('transform', transform)
77174                     .select('.viewfield-scale');
77175
77176
77177                 markers.selectAll('circle')
77178                     .data([0])
77179                     .enter()
77180                     .append('circle')
77181                     .attr('dx', '0')
77182                     .attr('dy', '0')
77183                     .attr('r', '6');
77184
77185                 var viewfields = markers.selectAll('.viewfield')
77186                     .data(showViewfields ? [0] : []);
77187
77188                 viewfields.exit()
77189                     .remove();
77190
77191                 viewfields.enter()               // viewfields may or may not be drawn...
77192                     .insert('path', 'circle')    // but if they are, draw below the circles
77193                     .attr('class', 'viewfield')
77194                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
77195                     .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');
77196             }
77197
77198
77199             function drawImages(selection) {
77200                 var enabled = svgOpenstreetcamImages.enabled,
77201                     service = getService();
77202
77203                 layer = selection.selectAll('.layer-openstreetcam')
77204                     .data(service ? [0] : []);
77205
77206                 layer.exit()
77207                     .remove();
77208
77209                 var layerEnter = layer.enter()
77210                     .append('g')
77211                     .attr('class', 'layer-openstreetcam')
77212                     .style('display', enabled ? 'block' : 'none');
77213
77214                 layerEnter
77215                     .append('g')
77216                     .attr('class', 'sequences');
77217
77218                 layerEnter
77219                     .append('g')
77220                     .attr('class', 'markers');
77221
77222                 layer = layerEnter
77223                     .merge(layer);
77224
77225                 if (enabled) {
77226                     if (service && ~~context.map().zoom() >= minZoom) {
77227                         editOn();
77228                         update();
77229                         service.loadImages(projection);
77230                     } else {
77231                         editOff();
77232                     }
77233                 }
77234             }
77235
77236
77237             drawImages.enabled = function(_) {
77238                 if (!arguments.length) return svgOpenstreetcamImages.enabled;
77239                 svgOpenstreetcamImages.enabled = _;
77240                 if (svgOpenstreetcamImages.enabled) {
77241                     showLayer();
77242                 } else {
77243                     hideLayer();
77244                 }
77245                 dispatch.call('change');
77246                 return this;
77247             };
77248
77249
77250             drawImages.supported = function() {
77251                 return !!getService();
77252             };
77253
77254
77255             init();
77256             return drawImages;
77257         }
77258
77259         function svgOsm(projection, context, dispatch) {
77260             var enabled = true;
77261
77262
77263             function drawOsm(selection) {
77264                 selection.selectAll('.layer-osm')
77265                     .data(['covered', 'areas', 'lines', 'points', 'labels'])
77266                     .enter()
77267                     .append('g')
77268                     .attr('class', function(d) { return 'layer-osm ' + d; });
77269
77270                 selection.selectAll('.layer-osm.points').selectAll('.points-group')
77271                     .data(['points', 'midpoints', 'vertices', 'turns'])
77272                     .enter()
77273                     .append('g')
77274                     .attr('class', function(d) { return 'points-group ' + d; });
77275             }
77276
77277
77278             function showLayer() {
77279                 var layer = context.surface().selectAll('.data-layer.osm');
77280                 layer.interrupt();
77281
77282                 layer
77283                     .classed('disabled', false)
77284                     .style('opacity', 0)
77285                     .transition()
77286                     .duration(250)
77287                     .style('opacity', 1)
77288                     .on('end interrupt', function () {
77289                         dispatch.call('change');
77290                     });
77291             }
77292
77293
77294             function hideLayer() {
77295                 var layer = context.surface().selectAll('.data-layer.osm');
77296                 layer.interrupt();
77297
77298                 layer
77299                     .transition()
77300                     .duration(250)
77301                     .style('opacity', 0)
77302                     .on('end interrupt', function () {
77303                         layer.classed('disabled', true);
77304                         dispatch.call('change');
77305                     });
77306             }
77307
77308
77309             drawOsm.enabled = function(val) {
77310                 if (!arguments.length) return enabled;
77311                 enabled = val;
77312
77313                 if (enabled) {
77314                     showLayer();
77315                 } else {
77316                     hideLayer();
77317                 }
77318
77319                 dispatch.call('change');
77320                 return this;
77321             };
77322
77323
77324             return drawOsm;
77325         }
77326
77327         var _notesEnabled = false;
77328         var _osmService;
77329
77330
77331         function svgNotes(projection, context, dispatch$1) {
77332             if (!dispatch$1) { dispatch$1 = dispatch('change'); }
77333             var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
77334             var minZoom = 12;
77335             var touchLayer = d3_select(null);
77336             var drawLayer = d3_select(null);
77337             var _notesVisible = false;
77338
77339
77340             function markerPath(selection, klass) {
77341                 selection
77342                     .attr('class', klass)
77343                     .attr('transform', 'translate(-8, -22)')
77344                     .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');
77345             }
77346
77347
77348             // Loosely-coupled osm service for fetching notes.
77349             function getService() {
77350                 if (services$1.osm && !_osmService) {
77351                     _osmService = services$1.osm;
77352                     _osmService.on('loadedNotes', throttledRedraw);
77353                 } else if (!services$1.osm && _osmService) {
77354                     _osmService = null;
77355                 }
77356
77357                 return _osmService;
77358             }
77359
77360
77361             // Show the notes
77362             function editOn() {
77363                 if (!_notesVisible) {
77364                     _notesVisible = true;
77365                     drawLayer
77366                         .style('display', 'block');
77367                 }
77368             }
77369
77370
77371             // Immediately remove the notes and their touch targets
77372             function editOff() {
77373                 if (_notesVisible) {
77374                     _notesVisible = false;
77375                     drawLayer
77376                         .style('display', 'none');
77377                     drawLayer.selectAll('.note')
77378                         .remove();
77379                     touchLayer.selectAll('.note')
77380                         .remove();
77381                 }
77382             }
77383
77384
77385             // Enable the layer.  This shows the notes and transitions them to visible.
77386             function layerOn() {
77387                 editOn();
77388
77389                 drawLayer
77390                     .style('opacity', 0)
77391                     .transition()
77392                     .duration(250)
77393                     .style('opacity', 1)
77394                     .on('end interrupt', function () {
77395                         dispatch$1.call('change');
77396                     });
77397             }
77398
77399
77400             // Disable the layer.  This transitions the layer invisible and then hides the notes.
77401             function layerOff() {
77402                 throttledRedraw.cancel();
77403                 drawLayer.interrupt();
77404                 touchLayer.selectAll('.note')
77405                     .remove();
77406
77407                 drawLayer
77408                     .transition()
77409                     .duration(250)
77410                     .style('opacity', 0)
77411                     .on('end interrupt', function () {
77412                         editOff();
77413                         dispatch$1.call('change');
77414                     });
77415             }
77416
77417
77418             // Update the note markers
77419             function updateMarkers() {
77420                 if (!_notesVisible || !_notesEnabled) return;
77421
77422                 var service = getService();
77423                 var selectedID = context.selectedNoteID();
77424                 var data = (service ? service.notes(projection) : []);
77425                 var getTransform = svgPointTransform(projection);
77426
77427                 // Draw markers..
77428                 var notes = drawLayer.selectAll('.note')
77429                     .data(data, function(d) { return d.status + d.id; });
77430
77431                 // exit
77432                 notes.exit()
77433                     .remove();
77434
77435                 // enter
77436                 var notesEnter = notes.enter()
77437                     .append('g')
77438                     .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
77439                     .classed('new', function(d) { return d.id < 0; });
77440
77441                 notesEnter
77442                     .append('ellipse')
77443                     .attr('cx', 0.5)
77444                     .attr('cy', 1)
77445                     .attr('rx', 6.5)
77446                     .attr('ry', 3)
77447                     .attr('class', 'stroke');
77448
77449                 notesEnter
77450                     .append('path')
77451                     .call(markerPath, 'shadow');
77452
77453                 notesEnter
77454                     .append('use')
77455                     .attr('class', 'note-fill')
77456                     .attr('width', '20px')
77457                     .attr('height', '20px')
77458                     .attr('x', '-8px')
77459                     .attr('y', '-22px')
77460                     .attr('xlink:href', '#iD-icon-note');
77461
77462                 notesEnter.selectAll('.icon-annotation')
77463                     .data(function(d) { return [d]; })
77464                     .enter()
77465                     .append('use')
77466                     .attr('class', 'icon-annotation')
77467                     .attr('width', '10px')
77468                     .attr('height', '10px')
77469                     .attr('x', '-3px')
77470                     .attr('y', '-19px')
77471                     .attr('xlink:href', function(d) {
77472                         return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
77473                     });
77474
77475                 // update
77476                 notes
77477                     .merge(notesEnter)
77478                     .sort(sortY)
77479                     .classed('selected', function(d) {
77480                         var mode = context.mode();
77481                         var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
77482                         return !isMoving && d.id === selectedID;
77483                     })
77484                     .attr('transform', getTransform);
77485
77486
77487                 // Draw targets..
77488                 if (touchLayer.empty()) return;
77489                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77490
77491                 var targets = touchLayer.selectAll('.note')
77492                     .data(data, function(d) { return d.id; });
77493
77494                 // exit
77495                 targets.exit()
77496                     .remove();
77497
77498                 // enter/update
77499                 targets.enter()
77500                     .append('rect')
77501                     .attr('width', '20px')
77502                     .attr('height', '20px')
77503                     .attr('x', '-8px')
77504                     .attr('y', '-22px')
77505                     .merge(targets)
77506                     .sort(sortY)
77507                     .attr('class', function(d) {
77508                         var newClass = (d.id < 0 ? 'new' : '');
77509                         return 'note target note-' + d.id + ' ' + fillClass + newClass;
77510                     })
77511                     .attr('transform', getTransform);
77512
77513
77514                 function sortY(a, b) {
77515                     return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
77516                 }
77517             }
77518
77519
77520             // Draw the notes layer and schedule loading notes and updating markers.
77521             function drawNotes(selection) {
77522                 var service = getService();
77523
77524                 var surface = context.surface();
77525                 if (surface && !surface.empty()) {
77526                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
77527                 }
77528
77529                 drawLayer = selection.selectAll('.layer-notes')
77530                     .data(service ? [0] : []);
77531
77532                 drawLayer.exit()
77533                     .remove();
77534
77535                 drawLayer = drawLayer.enter()
77536                     .append('g')
77537                     .attr('class', 'layer-notes')
77538                     .style('display', _notesEnabled ? 'block' : 'none')
77539                     .merge(drawLayer);
77540
77541                 if (_notesEnabled) {
77542                     if (service && ~~context.map().zoom() >= minZoom) {
77543                         editOn();
77544                         service.loadNotes(projection);
77545                         updateMarkers();
77546                     } else {
77547                         editOff();
77548                     }
77549                 }
77550             }
77551
77552
77553             // Toggles the layer on and off
77554             drawNotes.enabled = function(val) {
77555                 if (!arguments.length) return _notesEnabled;
77556
77557                 _notesEnabled = val;
77558                 if (_notesEnabled) {
77559                     layerOn();
77560                 } else {
77561                     layerOff();
77562                     if (context.selectedNoteID()) {
77563                         context.enter(modeBrowse(context));
77564                     }
77565                 }
77566
77567                 dispatch$1.call('change');
77568                 return this;
77569             };
77570
77571
77572             return drawNotes;
77573         }
77574
77575         function svgTouch() {
77576
77577             function drawTouch(selection) {
77578                 selection.selectAll('.layer-touch')
77579                     .data(['areas', 'lines', 'points', 'turns', 'markers'])
77580                     .enter()
77581                     .append('g')
77582                     .attr('class', function(d) { return 'layer-touch ' + d; });
77583             }
77584
77585             return drawTouch;
77586         }
77587
77588         function svgLayers(projection, context) {
77589             var dispatch$1 = dispatch('change');
77590             var svg = d3_select(null);
77591             var _layers = [
77592                 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
77593                 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
77594                 { id: 'data', layer: svgData(projection, context, dispatch$1) },
77595                 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
77596                 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
77597                 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
77598                 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
77599                 { id: 'mapillary-map-features',  layer: svgMapillaryMapFeatures(projection, context, dispatch$1) },
77600                 { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
77601                 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
77602                 { id: 'debug', layer: svgDebug(projection, context) },
77603                 { id: 'geolocate', layer: svgGeolocate(projection) },
77604                 { id: 'touch', layer: svgTouch() }
77605             ];
77606
77607
77608             function drawLayers(selection) {
77609                 svg = selection.selectAll('.surface')
77610                     .data([0]);
77611
77612                 svg = svg.enter()
77613                     .append('svg')
77614                     .attr('class', 'surface')
77615                     .merge(svg);
77616
77617                 var defs = svg.selectAll('.surface-defs')
77618                     .data([0]);
77619
77620                 defs.enter()
77621                     .append('defs')
77622                     .attr('class', 'surface-defs');
77623
77624                 var groups = svg.selectAll('.data-layer')
77625                     .data(_layers);
77626
77627                 groups.exit()
77628                     .remove();
77629
77630                 groups.enter()
77631                     .append('g')
77632                     .attr('class', function(d) { return 'data-layer ' + d.id; })
77633                     .merge(groups)
77634                     .each(function(d) { d3_select(this).call(d.layer); });
77635             }
77636
77637
77638             drawLayers.all = function() {
77639                 return _layers;
77640             };
77641
77642
77643             drawLayers.layer = function(id) {
77644                 var obj = _layers.find(function(o) { return o.id === id; });
77645                 return obj && obj.layer;
77646             };
77647
77648
77649             drawLayers.only = function(what) {
77650                 var arr = [].concat(what);
77651                 var all = _layers.map(function(layer) { return layer.id; });
77652                 return drawLayers.remove(utilArrayDifference(all, arr));
77653             };
77654
77655
77656             drawLayers.remove = function(what) {
77657                 var arr = [].concat(what);
77658                 arr.forEach(function(id) {
77659                     _layers = _layers.filter(function(o) { return o.id !== id; });
77660                 });
77661                 dispatch$1.call('change');
77662                 return this;
77663             };
77664
77665
77666             drawLayers.add = function(what) {
77667                 var arr = [].concat(what);
77668                 arr.forEach(function(obj) {
77669                     if ('id' in obj && 'layer' in obj) {
77670                         _layers.push(obj);
77671                     }
77672                 });
77673                 dispatch$1.call('change');
77674                 return this;
77675             };
77676
77677
77678             drawLayers.dimensions = function(val) {
77679                 if (!arguments.length) return utilGetDimensions(svg);
77680                 utilSetDimensions(svg, val);
77681                 return this;
77682             };
77683
77684
77685             return utilRebind(drawLayers, dispatch$1, 'on');
77686         }
77687
77688         function svgLines(projection, context) {
77689             var detected = utilDetect();
77690
77691             var highway_stack = {
77692                 motorway: 0,
77693                 motorway_link: 1,
77694                 trunk: 2,
77695                 trunk_link: 3,
77696                 primary: 4,
77697                 primary_link: 5,
77698                 secondary: 6,
77699                 tertiary: 7,
77700                 unclassified: 8,
77701                 residential: 9,
77702                 service: 10,
77703                 footway: 11
77704             };
77705
77706
77707             function drawTargets(selection, graph, entities, filter) {
77708                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77709                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
77710                 var getPath = svgPath(projection).geojson;
77711                 var activeID = context.activeID();
77712                 var base = context.history().base();
77713
77714                 // The targets and nopes will be MultiLineString sub-segments of the ways
77715                 var data = { targets: [], nopes: [] };
77716
77717                 entities.forEach(function(way) {
77718                     var features = svgSegmentWay(way, graph, activeID);
77719                     data.targets.push.apply(data.targets, features.passive);
77720                     data.nopes.push.apply(data.nopes, features.active);
77721                 });
77722
77723
77724                 // Targets allow hover and vertex snapping
77725                 var targetData = data.targets.filter(getPath);
77726                 var targets = selection.selectAll('.line.target-allowed')
77727                     .filter(function(d) { return filter(d.properties.entity); })
77728                     .data(targetData, function key(d) { return d.id; });
77729
77730                 // exit
77731                 targets.exit()
77732                     .remove();
77733
77734                 var segmentWasEdited = function(d) {
77735                     var wayID = d.properties.entity.id;
77736                     // if the whole line was edited, don't draw segment changes
77737                     if (!base.entities[wayID] ||
77738                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
77739                         return false;
77740                     }
77741                     return d.properties.nodes.some(function(n) {
77742                         return !base.entities[n.id] ||
77743                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
77744                     });
77745                 };
77746
77747                 // enter/update
77748                 targets.enter()
77749                     .append('path')
77750                     .merge(targets)
77751                     .attr('d', getPath)
77752                     .attr('class', function(d) {
77753                         return 'way line target target-allowed ' + targetClass + d.id;
77754                     })
77755                     .classed('segment-edited', segmentWasEdited);
77756
77757                 // NOPE
77758                 var nopeData = data.nopes.filter(getPath);
77759                 var nopes = selection.selectAll('.line.target-nope')
77760                     .filter(function(d) { return filter(d.properties.entity); })
77761                     .data(nopeData, function key(d) { return d.id; });
77762
77763                 // exit
77764                 nopes.exit()
77765                     .remove();
77766
77767                 // enter/update
77768                 nopes.enter()
77769                     .append('path')
77770                     .merge(nopes)
77771                     .attr('d', getPath)
77772                     .attr('class', function(d) {
77773                         return 'way line target target-nope ' + nopeClass + d.id;
77774                     })
77775                     .classed('segment-edited', segmentWasEdited);
77776             }
77777
77778
77779             function drawLines(selection, graph, entities, filter) {
77780                 var base = context.history().base();
77781
77782                 function waystack(a, b) {
77783                     var selected = context.selectedIDs();
77784                     var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
77785                     var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
77786
77787                     if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
77788                     if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
77789                     return scoreA - scoreB;
77790                 }
77791
77792
77793                 function drawLineGroup(selection, klass, isSelected) {
77794                     // Note: Don't add `.selected` class in draw modes
77795                     var mode = context.mode();
77796                     var isDrawing = mode && /^draw/.test(mode.id);
77797                     var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
77798
77799                     var lines = selection
77800                         .selectAll('path')
77801                         .filter(filter)
77802                         .data(getPathData(isSelected), osmEntity.key);
77803
77804                     lines.exit()
77805                         .remove();
77806
77807                     // Optimization: Call expensive TagClasses only on enter selection. This
77808                     // works because osmEntity.key is defined to include the entity v attribute.
77809                     lines.enter()
77810                         .append('path')
77811                         .attr('class', function(d) {
77812
77813                             var prefix = 'way line';
77814                             if (!d.hasInterestingTags() && graph.parentMultipolygons(d).length > 0) {
77815                                 // fudge the classes to style multipolygon member lines as area edges
77816                                 prefix = 'relation area';
77817                             }
77818
77819                             var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
77820                             return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
77821                         })
77822                         .classed('added', function(d) {
77823                             return !base.entities[d.id];
77824                         })
77825                         .classed('geometry-edited', function(d) {
77826                             return graph.entities[d.id] &&
77827                                 base.entities[d.id] &&
77828                                 !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
77829                         })
77830                         .classed('retagged', function(d) {
77831                             return graph.entities[d.id] &&
77832                                 base.entities[d.id] &&
77833                                 !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
77834                         })
77835                         .call(svgTagClasses())
77836                         .merge(lines)
77837                         .sort(waystack)
77838                         .attr('d', getPath)
77839                         .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
77840
77841                     return selection;
77842                 }
77843
77844
77845                 function getPathData(isSelected) {
77846                     return function() {
77847                         var layer = this.parentNode.__data__;
77848                         var data = pathdata[layer] || [];
77849                         return data.filter(function(d) {
77850                             if (isSelected)
77851                                 return context.selectedIDs().indexOf(d.id) !== -1;
77852                             else
77853                                 return context.selectedIDs().indexOf(d.id) === -1;
77854                         });
77855                     };
77856                 }
77857
77858                 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
77859                     var markergroup = layergroup
77860                         .selectAll('g.' + groupclass)
77861                         .data([pathclass]);
77862
77863                     markergroup = markergroup.enter()
77864                         .append('g')
77865                         .attr('class', groupclass)
77866                         .merge(markergroup);
77867
77868                     var markers = markergroup
77869                         .selectAll('path')
77870                         .filter(filter)
77871                         .data(
77872                             function data() { return groupdata[this.parentNode.__data__] || []; },
77873                             function key(d) { return [d.id, d.index]; }
77874                         );
77875
77876                     markers.exit()
77877                         .remove();
77878
77879                     markers = markers.enter()
77880                         .append('path')
77881                         .attr('class', pathclass)
77882                         .merge(markers)
77883                         .attr('marker-mid', marker)
77884                         .attr('d', function(d) { return d.d; });
77885
77886                     if (detected.ie) {
77887                         markers.each(function() { this.parentNode.insertBefore(this, this); });
77888                     }
77889                 }
77890
77891
77892                 var getPath = svgPath(projection, graph);
77893                 var ways = [];
77894                 var onewaydata = {};
77895                 var sideddata = {};
77896                 var oldMultiPolygonOuters = {};
77897
77898                 for (var i = 0; i < entities.length; i++) {
77899                     var entity = entities[i];
77900                     var outer = osmOldMultipolygonOuterMember(entity, graph);
77901                     if (outer) {
77902                         ways.push(entity.mergeTags(outer.tags));
77903                         oldMultiPolygonOuters[outer.id] = true;
77904                     } else if (entity.geometry(graph) === 'line') {
77905                         ways.push(entity);
77906                     }
77907                 }
77908
77909                 ways = ways.filter(getPath);
77910                 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
77911
77912                 Object.keys(pathdata).forEach(function(k) {
77913                     var v = pathdata[k];
77914                     var onewayArr = v.filter(function(d) { return d.isOneWay(); });
77915                     var onewaySegments = svgMarkerSegments(
77916                         projection, graph, 35,
77917                         function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
77918                         function bothDirections(entity) {
77919                             return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
77920                         }
77921                     );
77922                     onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
77923
77924                     var sidedArr = v.filter(function(d) { return d.isSided(); });
77925                     var sidedSegments = svgMarkerSegments(
77926                         projection, graph, 30,
77927                         function shouldReverse() { return false; },
77928                         function bothDirections() { return false; }
77929                     );
77930                     sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
77931                 });
77932
77933
77934                 var covered = selection.selectAll('.layer-osm.covered');     // under areas
77935                 var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
77936                 var touchLayer = selection.selectAll('.layer-touch.lines');
77937
77938                 // Draw lines..
77939                 [covered, uncovered].forEach(function(selection) {
77940                     var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
77941                     var layergroup = selection
77942                         .selectAll('g.layergroup')
77943                         .data(range);
77944
77945                     layergroup = layergroup.enter()
77946                         .append('g')
77947                         .attr('class', function(d) { return 'layergroup layer' + String(d); })
77948                         .merge(layergroup);
77949
77950                     layergroup
77951                         .selectAll('g.linegroup')
77952                         .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
77953                         .enter()
77954                         .append('g')
77955                         .attr('class', function(d) { return 'linegroup line-' + d; });
77956
77957                     layergroup.selectAll('g.line-shadow')
77958                         .call(drawLineGroup, 'shadow', false);
77959                     layergroup.selectAll('g.line-casing')
77960                         .call(drawLineGroup, 'casing', false);
77961                     layergroup.selectAll('g.line-stroke')
77962                         .call(drawLineGroup, 'stroke', false);
77963
77964                     layergroup.selectAll('g.line-shadow-highlighted')
77965                         .call(drawLineGroup, 'shadow', true);
77966                     layergroup.selectAll('g.line-casing-highlighted')
77967                         .call(drawLineGroup, 'casing', true);
77968                     layergroup.selectAll('g.line-stroke-highlighted')
77969                         .call(drawLineGroup, 'stroke', true);
77970
77971                     addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
77972                     addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
77973                         function marker(d) {
77974                             var category = graph.entity(d.id).sidednessIdentifier();
77975                             return 'url(#sided-marker-' + category + ')';
77976                         }
77977                     );
77978                 });
77979
77980                 // Draw touch targets..
77981                 touchLayer
77982                     .call(drawTargets, graph, ways, filter);
77983             }
77984
77985
77986             return drawLines;
77987         }
77988
77989         function svgMidpoints(projection, context) {
77990             var targetRadius = 8;
77991
77992             function drawTargets(selection, graph, entities, filter) {
77993                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
77994                 var getTransform = svgPointTransform(projection).geojson;
77995
77996                 var data = entities.map(function(midpoint) {
77997                     return {
77998                         type: 'Feature',
77999                         id: midpoint.id,
78000                         properties: {
78001                             target: true,
78002                             entity: midpoint
78003                         },
78004                         geometry: {
78005                             type: 'Point',
78006                             coordinates: midpoint.loc
78007                         }
78008                     };
78009                 });
78010
78011                 var targets = selection.selectAll('.midpoint.target')
78012                     .filter(function(d) { return filter(d.properties.entity); })
78013                     .data(data, function key(d) { return d.id; });
78014
78015                 // exit
78016                 targets.exit()
78017                     .remove();
78018
78019                 // enter/update
78020                 targets.enter()
78021                     .append('circle')
78022                     .attr('r', targetRadius)
78023                     .merge(targets)
78024                     .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
78025                     .attr('transform', getTransform);
78026             }
78027
78028
78029             function drawMidpoints(selection, graph, entities, filter, extent) {
78030                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
78031                 var touchLayer = selection.selectAll('.layer-touch.points');
78032
78033                 var mode = context.mode();
78034                 if (mode && mode.id !== 'select') {
78035                     drawLayer.selectAll('.midpoint').remove();
78036                     touchLayer.selectAll('.midpoint.target').remove();
78037                     return;
78038                 }
78039
78040                 var poly = extent.polygon();
78041                 var midpoints = {};
78042
78043                 for (var i = 0; i < entities.length; i++) {
78044                     var entity = entities[i];
78045
78046                     if (entity.type !== 'way') continue;
78047                     if (!filter(entity)) continue;
78048                     if (context.selectedIDs().indexOf(entity.id) < 0) continue;
78049
78050                     var nodes = graph.childNodes(entity);
78051                     for (var j = 0; j < nodes.length - 1; j++) {
78052                         var a = nodes[j];
78053                         var b = nodes[j + 1];
78054                         var id = [a.id, b.id].sort().join('-');
78055
78056                         if (midpoints[id]) {
78057                             midpoints[id].parents.push(entity);
78058                         } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
78059                             var point = geoVecInterp(a.loc, b.loc, 0.5);
78060                             var loc = null;
78061
78062                             if (extent.intersects(point)) {
78063                                 loc = point;
78064                             } else {
78065                                 for (var k = 0; k < 4; k++) {
78066                                     point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
78067                                     if (point &&
78068                                         geoVecLength(projection(a.loc), projection(point)) > 20 &&
78069                                         geoVecLength(projection(b.loc), projection(point)) > 20)
78070                                     {
78071                                         loc = point;
78072                                         break;
78073                                     }
78074                                 }
78075                             }
78076
78077                             if (loc) {
78078                                 midpoints[id] = {
78079                                     type: 'midpoint',
78080                                     id: id,
78081                                     loc: loc,
78082                                     edge: [a.id, b.id],
78083                                     parents: [entity]
78084                                 };
78085                             }
78086                         }
78087                     }
78088                 }
78089
78090
78091                 function midpointFilter(d) {
78092                     if (midpoints[d.id])
78093                         return true;
78094
78095                     for (var i = 0; i < d.parents.length; i++) {
78096                         if (filter(d.parents[i])) {
78097                             return true;
78098                         }
78099                     }
78100
78101                     return false;
78102                 }
78103
78104
78105                 var groups = drawLayer.selectAll('.midpoint')
78106                     .filter(midpointFilter)
78107                     .data(Object.values(midpoints), function(d) { return d.id; });
78108
78109                 groups.exit()
78110                     .remove();
78111
78112                 var enter = groups.enter()
78113                     .insert('g', ':first-child')
78114                     .attr('class', 'midpoint');
78115
78116                 enter
78117                     .append('polygon')
78118                     .attr('points', '-6,8 10,0 -6,-8')
78119                     .attr('class', 'shadow');
78120
78121                 enter
78122                     .append('polygon')
78123                     .attr('points', '-3,4 5,0 -3,-4')
78124                     .attr('class', 'fill');
78125
78126                 groups = groups
78127                     .merge(enter)
78128                     .attr('transform', function(d) {
78129                         var translate = svgPointTransform(projection);
78130                         var a = graph.entity(d.edge[0]);
78131                         var b = graph.entity(d.edge[1]);
78132                         var angle = geoAngle(a, b, projection) * (180 / Math.PI);
78133                         return translate(d) + ' rotate(' + angle + ')';
78134                     })
78135                     .call(svgTagClasses().tags(
78136                         function(d) { return d.parents[0].tags; }
78137                     ));
78138
78139                 // Propagate data bindings.
78140                 groups.select('polygon.shadow');
78141                 groups.select('polygon.fill');
78142
78143
78144                 // Draw touch targets..
78145                 touchLayer
78146                     .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
78147             }
78148
78149             return drawMidpoints;
78150         }
78151
78152         function svgPoints(projection, context) {
78153
78154             function markerPath(selection, klass) {
78155                 selection
78156                     .attr('class', klass)
78157                     .attr('transform', 'translate(-8, -23)')
78158                     .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');
78159             }
78160
78161             function sortY(a, b) {
78162                 return b.loc[1] - a.loc[1];
78163             }
78164
78165
78166             // Avoid exit/enter if we're just moving stuff around.
78167             // The node will get a new version but we only need to run the update selection.
78168             function fastEntityKey(d) {
78169                 var mode = context.mode();
78170                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
78171                 return isMoving ? d.id : osmEntity.key(d);
78172             }
78173
78174
78175             function drawTargets(selection, graph, entities, filter) {
78176                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
78177                 var getTransform = svgPointTransform(projection).geojson;
78178                 var activeID = context.activeID();
78179                 var data = [];
78180
78181                 entities.forEach(function(node) {
78182                     if (activeID === node.id) return;   // draw no target on the activeID
78183
78184                     data.push({
78185                         type: 'Feature',
78186                         id: node.id,
78187                         properties: {
78188                             target: true,
78189                             entity: node
78190                         },
78191                         geometry: node.asGeoJSON()
78192                     });
78193                 });
78194
78195                 var targets = selection.selectAll('.point.target')
78196                     .filter(function(d) { return filter(d.properties.entity); })
78197                     .data(data, function key(d) { return d.id; });
78198
78199                 // exit
78200                 targets.exit()
78201                     .remove();
78202
78203                 // enter/update
78204                 targets.enter()
78205                     .append('rect')
78206                     .attr('x', -10)
78207                     .attr('y', -26)
78208                     .attr('width', 20)
78209                     .attr('height', 30)
78210                     .merge(targets)
78211                     .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
78212                     .attr('transform', getTransform);
78213             }
78214
78215
78216             function drawPoints(selection, graph, entities, filter) {
78217                 var wireframe = context.surface().classed('fill-wireframe');
78218                 var zoom = geoScaleToZoom(projection.scale());
78219                 var base = context.history().base();
78220
78221                 // Points with a direction will render as vertices at higher zooms..
78222                 function renderAsPoint(entity) {
78223                     return entity.geometry(graph) === 'point' &&
78224                         !(zoom >= 18 && entity.directions(graph, projection).length);
78225                 }
78226
78227                 // All points will render as vertices in wireframe mode too..
78228                 var points = wireframe ? [] : entities.filter(renderAsPoint);
78229                 points.sort(sortY);
78230
78231
78232                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
78233                 var touchLayer = selection.selectAll('.layer-touch.points');
78234
78235                 // Draw points..
78236                 var groups = drawLayer.selectAll('g.point')
78237                     .filter(filter)
78238                     .data(points, fastEntityKey);
78239
78240                 groups.exit()
78241                     .remove();
78242
78243                 var enter = groups.enter()
78244                     .append('g')
78245                     .attr('class', function(d) { return 'node point ' + d.id; })
78246                     .order();
78247
78248                 enter
78249                     .append('path')
78250                     .call(markerPath, 'shadow');
78251
78252                 enter
78253                     .append('ellipse')
78254                     .attr('cx', 0.5)
78255                     .attr('cy', 1)
78256                     .attr('rx', 6.5)
78257                     .attr('ry', 3)
78258                     .attr('class', 'stroke');
78259
78260                 enter
78261                     .append('path')
78262                     .call(markerPath, 'stroke');
78263
78264                 enter
78265                     .append('use')
78266                     .attr('transform', 'translate(-5, -19)')
78267                     .attr('class', 'icon')
78268                     .attr('width', '11px')
78269                     .attr('height', '11px');
78270
78271                 groups = groups
78272                     .merge(enter)
78273                     .attr('transform', svgPointTransform(projection))
78274                     .classed('added', function(d) {
78275                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
78276                     })
78277                     .classed('moved', function(d) {
78278                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
78279                     })
78280                     .classed('retagged', function(d) {
78281                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
78282                     })
78283                     .call(svgTagClasses());
78284
78285                 groups.select('.shadow');   // propagate bound data
78286                 groups.select('.stroke');   // propagate bound data
78287                 groups.select('.icon')      // propagate bound data
78288                     .attr('xlink:href', function(entity) {
78289                         var preset = context.presets().match(entity, graph);
78290                         var picon = preset && preset.icon;
78291
78292                         if (!picon) {
78293                             return '';
78294                         } else {
78295                             var isMaki = /^maki-/.test(picon);
78296                             return '#' + picon + (isMaki ? '-11' : '');
78297                         }
78298                     });
78299
78300
78301                 // Draw touch targets..
78302                 touchLayer
78303                     .call(drawTargets, graph, points, filter);
78304             }
78305
78306
78307             return drawPoints;
78308         }
78309
78310         function svgTurns(projection, context) {
78311
78312             function icon(turn) {
78313                 var u = turn.u ? '-u' : '';
78314                 if (turn.no) return '#iD-turn-no' + u;
78315                 if (turn.only) return '#iD-turn-only' + u;
78316                 return '#iD-turn-yes' + u;
78317             }
78318
78319             function drawTurns(selection, graph, turns) {
78320
78321                 function turnTransform(d) {
78322                     var pxRadius = 50;
78323                     var toWay = graph.entity(d.to.way);
78324                     var toPoints = graph.childNodes(toWay)
78325                         .map(function (n) { return n.loc; })
78326                         .map(projection);
78327                     var toLength = geoPathLength(toPoints);
78328                     var mid = toLength / 2;    // midpoint of destination way
78329
78330                     var toNode = graph.entity(d.to.node);
78331                     var toVertex = graph.entity(d.to.vertex);
78332                     var a = geoAngle(toVertex, toNode, projection);
78333                     var o = projection(toVertex.loc);
78334                     var r = d.u ? 0                  // u-turn: no radius
78335                         : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
78336                         : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
78337
78338                     return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
78339                         'rotate(' + a * 180 / Math.PI + ')';
78340                 }
78341
78342
78343                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
78344                 var touchLayer = selection.selectAll('.layer-touch.turns');
78345
78346                 // Draw turns..
78347                 var groups = drawLayer.selectAll('g.turn')
78348                     .data(turns, function(d) { return d.key; });
78349
78350                 // exit
78351                 groups.exit()
78352                     .remove();
78353
78354                 // enter
78355                 var groupsEnter = groups.enter()
78356                     .append('g')
78357                     .attr('class', function(d) { return 'turn ' + d.key; });
78358
78359                 var turnsEnter = groupsEnter
78360                     .filter(function(d) { return !d.u; });
78361
78362                 turnsEnter.append('rect')
78363                     .attr('transform', 'translate(-22, -12)')
78364                     .attr('width', '44')
78365                     .attr('height', '24');
78366
78367                 turnsEnter.append('use')
78368                     .attr('transform', 'translate(-22, -12)')
78369                     .attr('width', '44')
78370                     .attr('height', '24');
78371
78372                 var uEnter = groupsEnter
78373                     .filter(function(d) { return d.u; });
78374
78375                 uEnter.append('circle')
78376                     .attr('r', '16');
78377
78378                 uEnter.append('use')
78379                     .attr('transform', 'translate(-16, -16)')
78380                     .attr('width', '32')
78381                     .attr('height', '32');
78382
78383                 // update
78384                 groups = groups
78385                     .merge(groupsEnter)
78386                     .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
78387                     .attr('transform', turnTransform);
78388
78389                 groups.select('use')
78390                     .attr('xlink:href', icon);
78391
78392                 groups.select('rect');      // propagate bound data
78393                 groups.select('circle');    // propagate bound data
78394
78395
78396                 // Draw touch targets..
78397                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
78398                 groups = touchLayer.selectAll('g.turn')
78399                     .data(turns, function(d) { return d.key; });
78400
78401                 // exit
78402                 groups.exit()
78403                     .remove();
78404
78405                 // enter
78406                 groupsEnter = groups.enter()
78407                     .append('g')
78408                     .attr('class', function(d) { return 'turn ' + d.key; });
78409
78410                 turnsEnter = groupsEnter
78411                     .filter(function(d) { return !d.u; });
78412
78413                 turnsEnter.append('rect')
78414                     .attr('class', 'target ' + fillClass)
78415                     .attr('transform', 'translate(-22, -12)')
78416                     .attr('width', '44')
78417                     .attr('height', '24');
78418
78419                 uEnter = groupsEnter
78420                     .filter(function(d) { return d.u; });
78421
78422                 uEnter.append('circle')
78423                     .attr('class', 'target ' + fillClass)
78424                     .attr('r', '16');
78425
78426                 // update
78427                 groups = groups
78428                     .merge(groupsEnter)
78429                     .attr('transform', turnTransform);
78430
78431                 groups.select('rect');      // propagate bound data
78432                 groups.select('circle');    // propagate bound data
78433
78434
78435                 return this;
78436             }
78437
78438             return drawTurns;
78439         }
78440
78441         function svgVertices(projection, context) {
78442             var radiuses = {
78443                 //       z16-, z17,   z18+,  w/icon
78444                 shadow: [6,    7.5,   7.5,   12],
78445                 stroke: [2.5,  3.5,   3.5,   8],
78446                 fill:   [1,    1.5,   1.5,   1.5]
78447             };
78448
78449             var _currHoverTarget;
78450             var _currPersistent = {};
78451             var _currHover = {};
78452             var _prevHover = {};
78453             var _currSelected = {};
78454             var _prevSelected = {};
78455             var _radii = {};
78456
78457
78458             function sortY(a, b) {
78459                 return b.loc[1] - a.loc[1];
78460             }
78461
78462             // Avoid exit/enter if we're just moving stuff around.
78463             // The node will get a new version but we only need to run the update selection.
78464             function fastEntityKey(d) {
78465                 var mode = context.mode();
78466                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
78467                 return isMoving ? d.id : osmEntity.key(d);
78468             }
78469
78470
78471             function draw(selection, graph, vertices, sets, filter) {
78472                 sets = sets || { selected: {}, important: {}, hovered: {} };
78473
78474                 var icons = {};
78475                 var directions = {};
78476                 var wireframe = context.surface().classed('fill-wireframe');
78477                 var zoom = geoScaleToZoom(projection.scale());
78478                 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
78479                 var activeID = context.activeID();
78480                 var base = context.history().base();
78481
78482
78483                 function getIcon(d) {
78484                     // always check latest entity, as fastEntityKey avoids enter/exit now
78485                     var entity = graph.entity(d.id);
78486                     if (entity.id in icons) return icons[entity.id];
78487
78488                     icons[entity.id] =
78489                         entity.hasInterestingTags() &&
78490                         context.presets().match(entity, graph).icon;
78491
78492                     return icons[entity.id];
78493                 }
78494
78495
78496                 // memoize directions results, return false for empty arrays (for use in filter)
78497                 function getDirections(entity) {
78498                     if (entity.id in directions) return directions[entity.id];
78499
78500                     var angles = entity.directions(graph, projection);
78501                     directions[entity.id] = angles.length ? angles : false;
78502                     return angles;
78503                 }
78504
78505
78506                 function updateAttributes(selection) {
78507                     ['shadow', 'stroke', 'fill'].forEach(function(klass) {
78508                         var rads = radiuses[klass];
78509                         selection.selectAll('.' + klass)
78510                             .each(function(entity) {
78511                                 var i = z && getIcon(entity);
78512                                 var r = rads[i ? 3 : z];
78513
78514                                 // slightly increase the size of unconnected endpoints #3775
78515                                 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
78516                                     r += 1.5;
78517                                 }
78518
78519                                 if (klass === 'shadow') {   // remember this value, so we don't need to
78520                                     _radii[entity.id] = r;  // recompute it when we draw the touch targets
78521                                 }
78522
78523                                 d3_select(this)
78524                                     .attr('r', r)
78525                                     .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
78526                             });
78527                     });
78528                 }
78529
78530                 vertices.sort(sortY);
78531
78532                 var groups = selection.selectAll('g.vertex')
78533                     .filter(filter)
78534                     .data(vertices, fastEntityKey);
78535
78536                 // exit
78537                 groups.exit()
78538                     .remove();
78539
78540                 // enter
78541                 var enter = groups.enter()
78542                     .append('g')
78543                     .attr('class', function(d) { return 'node vertex ' + d.id; })
78544                     .order();
78545
78546                 enter
78547                     .append('circle')
78548                     .attr('class', 'shadow');
78549
78550                 enter
78551                     .append('circle')
78552                     .attr('class', 'stroke');
78553
78554                 // Vertices with tags get a fill.
78555                 enter.filter(function(d) { return d.hasInterestingTags(); })
78556                     .append('circle')
78557                     .attr('class', 'fill');
78558
78559                 // update
78560                 groups = groups
78561                     .merge(enter)
78562                     .attr('transform', svgPointTransform(projection))
78563                     .classed('sibling', function(d) { return d.id in sets.selected; })
78564                     .classed('shared', function(d) { return graph.isShared(d); })
78565                     .classed('endpoint', function(d) { return d.isEndpoint(graph); })
78566                     .classed('added', function(d) {
78567                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
78568                     })
78569                     .classed('moved', function(d) {
78570                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
78571                     })
78572                     .classed('retagged', function(d) {
78573                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
78574                     })
78575                     .call(updateAttributes);
78576
78577                 // Vertices with icons get a `use`.
78578                 var iconUse = groups
78579                     .selectAll('.icon')
78580                     .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
78581
78582                 // exit
78583                 iconUse.exit()
78584                     .remove();
78585
78586                 // enter
78587                 iconUse.enter()
78588                     .append('use')
78589                     .attr('class', 'icon')
78590                     .attr('width', '11px')
78591                     .attr('height', '11px')
78592                     .attr('transform', 'translate(-5.5, -5.5)')
78593                     .attr('xlink:href', function(d) {
78594                         var picon = getIcon(d);
78595                         var isMaki = /^maki-/.test(picon);
78596                         return '#' + picon + (isMaki ? '-11' : '');
78597                     });
78598
78599
78600                 // Vertices with directions get viewfields
78601                 var dgroups = groups
78602                     .selectAll('.viewfieldgroup')
78603                     .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
78604
78605                 // exit
78606                 dgroups.exit()
78607                     .remove();
78608
78609                 // enter/update
78610                 dgroups = dgroups.enter()
78611                     .insert('g', '.shadow')
78612                     .attr('class', 'viewfieldgroup')
78613                     .merge(dgroups);
78614
78615                 var viewfields = dgroups.selectAll('.viewfield')
78616                     .data(getDirections, function key(d) { return osmEntity.key(d); });
78617
78618                 // exit
78619                 viewfields.exit()
78620                     .remove();
78621
78622                 // enter/update
78623                 viewfields.enter()
78624                     .append('path')
78625                     .attr('class', 'viewfield')
78626                     .attr('d', 'M0,0H0')
78627                     .merge(viewfields)
78628                     .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
78629                     .attr('transform', function(d) { return 'rotate(' + d + ')'; });
78630             }
78631
78632
78633             function drawTargets(selection, graph, entities, filter) {
78634                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
78635                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
78636                 var getTransform = svgPointTransform(projection).geojson;
78637                 var activeID = context.activeID();
78638                 var data = { targets: [], nopes: [] };
78639
78640                 entities.forEach(function(node) {
78641                     if (activeID === node.id) return;   // draw no target on the activeID
78642
78643                     var vertexType = svgPassiveVertex(node, graph, activeID);
78644                     if (vertexType !== 0) {     // passive or adjacent - allow to connect
78645                         data.targets.push({
78646                             type: 'Feature',
78647                             id: node.id,
78648                             properties: {
78649                                 target: true,
78650                                 entity: node
78651                             },
78652                             geometry: node.asGeoJSON()
78653                         });
78654                     } else {
78655                         data.nopes.push({
78656                             type: 'Feature',
78657                             id: node.id + '-nope',
78658                             properties: {
78659                                 nope: true,
78660                                 target: true,
78661                                 entity: node
78662                             },
78663                             geometry: node.asGeoJSON()
78664                         });
78665                     }
78666                 });
78667
78668                 // Targets allow hover and vertex snapping
78669                 var targets = selection.selectAll('.vertex.target-allowed')
78670                     .filter(function(d) { return filter(d.properties.entity); })
78671                     .data(data.targets, function key(d) { return d.id; });
78672
78673                 // exit
78674                 targets.exit()
78675                     .remove();
78676
78677                 // enter/update
78678                 targets.enter()
78679                     .append('circle')
78680                     .attr('r', function(d) {
78681                         return _radii[d.id]
78682                           || radiuses.shadow[3];
78683                     })
78684                     .merge(targets)
78685                     .attr('class', function(d) {
78686                         return 'node vertex target target-allowed '
78687                         + targetClass + d.id;
78688                     })
78689                     .attr('transform', getTransform);
78690
78691
78692                 // NOPE
78693                 var nopes = selection.selectAll('.vertex.target-nope')
78694                     .filter(function(d) { return filter(d.properties.entity); })
78695                     .data(data.nopes, function key(d) { return d.id; });
78696
78697                 // exit
78698                 nopes.exit()
78699                     .remove();
78700
78701                 // enter/update
78702                 nopes.enter()
78703                     .append('circle')
78704                     .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
78705                     .merge(nopes)
78706                     .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
78707                     .attr('transform', getTransform);
78708             }
78709
78710
78711             // Points can also render as vertices:
78712             // 1. in wireframe mode or
78713             // 2. at higher zooms if they have a direction
78714             function renderAsVertex(entity, graph, wireframe, zoom) {
78715                 var geometry = entity.geometry(graph);
78716                 return geometry === 'vertex' || (geometry === 'point' && (
78717                     wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
78718                 ));
78719             }
78720
78721
78722             function isEditedNode(node, base, head) {
78723                 var baseNode = base.entities[node.id];
78724                 var headNode = head.entities[node.id];
78725                 return !headNode ||
78726                     !baseNode ||
78727                     !fastDeepEqual(headNode.tags, baseNode.tags) ||
78728                     !fastDeepEqual(headNode.loc, baseNode.loc);
78729             }
78730
78731
78732             function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
78733                 var results = {};
78734
78735                 function addChildVertices(entity) {
78736                     var geometry = entity.geometry(graph);
78737                     if (!context.features().isHiddenFeature(entity, graph, geometry)) {
78738                         var i;
78739                         if (entity.type === 'way') {
78740                             for (i = 0; i < entity.nodes.length; i++) {
78741                                 var child = graph.hasEntity(entity.nodes[i]);
78742                                 if (child) {
78743                                     addChildVertices(child);
78744                                 }
78745                             }
78746                         } else if (entity.type === 'relation') {
78747                             for (i = 0; i < entity.members.length; i++) {
78748                                 var member = graph.hasEntity(entity.members[i].id);
78749                                 if (member) {
78750                                     addChildVertices(member);
78751                                 }
78752                             }
78753                         } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
78754                             results[entity.id] = entity;
78755                         }
78756                     }
78757                 }
78758
78759                 ids.forEach(function(id) {
78760                     var entity = graph.hasEntity(id);
78761                     if (!entity) return;
78762
78763                     if (entity.type === 'node') {
78764                         if (renderAsVertex(entity, graph, wireframe, zoom)) {
78765                             results[entity.id] = entity;
78766                             graph.parentWays(entity).forEach(function(entity) {
78767                                 addChildVertices(entity);
78768                             });
78769                         }
78770                     } else {  // way, relation
78771                         addChildVertices(entity);
78772                     }
78773                 });
78774
78775                 return results;
78776             }
78777
78778
78779             function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
78780                 var wireframe = context.surface().classed('fill-wireframe');
78781                 var visualDiff = context.surface().classed('highlight-edited');
78782                 var zoom = geoScaleToZoom(projection.scale());
78783                 var mode = context.mode();
78784                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
78785                 var base = context.history().base();
78786
78787                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
78788                 var touchLayer = selection.selectAll('.layer-touch.points');
78789
78790                 if (fullRedraw) {
78791                     _currPersistent = {};
78792                     _radii = {};
78793                 }
78794
78795                 // Collect important vertices from the `entities` list..
78796                 // (during a paritial redraw, it will not contain everything)
78797                 for (var i = 0; i < entities.length; i++) {
78798                     var entity = entities[i];
78799                     var geometry = entity.geometry(graph);
78800                     var keep = false;
78801
78802                     // a point that looks like a vertex..
78803                     if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
78804                         _currPersistent[entity.id] = entity;
78805                         keep = true;
78806
78807                     // a vertex of some importance..
78808                     } else if (geometry === 'vertex' &&
78809                         (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph)
78810                         || (visualDiff && isEditedNode(entity, base, graph)))) {
78811                         _currPersistent[entity.id] = entity;
78812                         keep = true;
78813                     }
78814
78815                     // whatever this is, it's not a persistent vertex..
78816                     if (!keep && !fullRedraw) {
78817                         delete _currPersistent[entity.id];
78818                     }
78819                 }
78820
78821                 // 3 sets of vertices to consider:
78822                 var sets = {
78823                     persistent: _currPersistent,  // persistent = important vertices (render always)
78824                     selected: _currSelected,      // selected + siblings of selected (render always)
78825                     hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
78826                 };
78827
78828                 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
78829
78830                 // Draw the vertices..
78831                 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
78832                 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
78833                 var filterRendered = function(d) {
78834                     return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
78835                 };
78836                 drawLayer
78837                     .call(draw, graph, currentVisible(all), sets, filterRendered);
78838
78839                 // Draw touch targets..
78840                 // When drawing, render all targets (not just those affected by a partial redraw)
78841                 var filterTouch = function(d) {
78842                     return isMoving ? true : filterRendered(d);
78843                 };
78844                 touchLayer
78845                     .call(drawTargets, graph, currentVisible(all), filterTouch);
78846
78847
78848                 function currentVisible(which) {
78849                     return Object.keys(which)
78850                         .map(graph.hasEntity, graph)     // the current version of this entity
78851                         .filter(function (entity) { return entity && entity.intersects(extent, graph); });
78852                 }
78853             }
78854
78855
78856             // partial redraw - only update the selected items..
78857             drawVertices.drawSelected = function(selection, graph, extent) {
78858                 var wireframe = context.surface().classed('fill-wireframe');
78859                 var zoom = geoScaleToZoom(projection.scale());
78860
78861                 _prevSelected = _currSelected || {};
78862                 _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
78863
78864                 // note that drawVertices will add `_currSelected` automatically if needed..
78865                 var filter = function(d) { return d.id in _prevSelected; };
78866                 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
78867             };
78868
78869
78870             // partial redraw - only update the hovered items..
78871             drawVertices.drawHover = function(selection, graph, target, extent) {
78872                 if (target === _currHoverTarget) return;  // continue only if something changed
78873
78874                 var wireframe = context.surface().classed('fill-wireframe');
78875                 var zoom = geoScaleToZoom(projection.scale());
78876
78877                 _prevHover = _currHover || {};
78878                 _currHoverTarget = target;
78879                 var entity = target && target.properties && target.properties.entity;
78880
78881                 if (entity) {
78882                     _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
78883                 } else {
78884                     _currHover = {};
78885                 }
78886
78887                 // note that drawVertices will add `_currHover` automatically if needed..
78888                 var filter = function(d) { return d.id in _prevHover; };
78889                 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
78890             };
78891
78892             return drawVertices;
78893         }
78894
78895         function utilBindOnce(target, type, listener, capture) {
78896             var typeOnce = type + '.once';
78897             function one() {
78898                 target.on(typeOnce, null);
78899                 listener.apply(this, arguments);
78900             }
78901             target.on(typeOnce, one, capture);
78902             return this;
78903         }
78904
78905         // constants
78906         var TILESIZE = 256;
78907         var minZoom = 2;
78908         var maxZoom = 24;
78909         var kMin = geoZoomToScale(minZoom, TILESIZE);
78910         var kMax = geoZoomToScale(maxZoom, TILESIZE);
78911
78912         function clamp(num, min, max) {
78913             return Math.max(min, Math.min(num, max));
78914         }
78915
78916
78917         function rendererMap(context) {
78918             var dispatch$1 = dispatch('move', 'drawn');
78919             var projection = context.projection;
78920             var curtainProjection = context.curtainProjection;
78921             var drawLayers = svgLayers(projection, context);
78922             var drawPoints = svgPoints(projection, context);
78923             var drawVertices = svgVertices(projection, context);
78924             var drawLines = svgLines(projection, context);
78925             var drawAreas = svgAreas(projection, context);
78926             var drawMidpoints = svgMidpoints(projection, context);
78927             var drawLabels = svgLabels(projection, context);
78928
78929             var _selection = d3_select(null);
78930             var supersurface = d3_select(null);
78931             var wrapper = d3_select(null);
78932             var surface = d3_select(null);
78933
78934             var _dimensions = [1, 1];
78935             var _dblClickEnabled = true;
78936             var _redrawEnabled = true;
78937             var _gestureTransformStart;
78938             var _transformStart = projection.transform();
78939             var _transformLast;
78940             var _isTransformed = false;
78941             var _minzoom = 0;
78942             var _getMouseCoords;
78943             var _mouseEvent;
78944
78945             var zoom = d3_zoom()
78946                 .scaleExtent([kMin, kMax])
78947                 .interpolate(d3_interpolate)
78948                 .filter(zoomEventFilter)
78949                 .on('zoom', zoomPan);
78950
78951             var scheduleRedraw = throttle(redraw, 750);
78952             // var isRedrawScheduled = false;
78953             // var pendingRedrawCall;
78954             // function scheduleRedraw() {
78955             //     // Only schedule the redraw if one has not already been set.
78956             //     if (isRedrawScheduled) return;
78957             //     isRedrawScheduled = true;
78958             //     var that = this;
78959             //     var args = arguments;
78960             //     pendingRedrawCall = window.requestIdleCallback(function () {
78961             //         // Reset the boolean so future redraws can be set.
78962             //         isRedrawScheduled = false;
78963             //         redraw.apply(that, args);
78964             //     }, { timeout: 1400 });
78965             // }
78966
78967             function cancelPendingRedraw() {
78968                 scheduleRedraw.cancel();
78969                 // isRedrawScheduled = false;
78970                 // window.cancelIdleCallback(pendingRedrawCall);
78971             }
78972
78973
78974             function map(selection) {
78975                 _selection = selection;
78976
78977                 context
78978                     .on('change.map', immediateRedraw);
78979
78980                 var osm = context.connection();
78981                 if (osm) {
78982                     osm.on('change.map', immediateRedraw);
78983                 }
78984
78985                 function didUndoOrRedo(targetTransform) {
78986                     var mode = context.mode().id;
78987                     if (mode !== 'browse' && mode !== 'select') return;
78988                     if (targetTransform) {
78989                         map.transformEase(targetTransform);
78990                     }
78991                 }
78992
78993                 context.history()
78994                     .on('merge.map', function() { scheduleRedraw(); })
78995                     .on('change.map', immediateRedraw)
78996                     .on('undone.map', function(stack, fromStack) {
78997                         didUndoOrRedo(fromStack.transform);
78998                     })
78999                     .on('redone.map', function(stack) {
79000                         didUndoOrRedo(stack.transform);
79001                     });
79002
79003                 context.background()
79004                     .on('change.map', immediateRedraw);
79005
79006                 context.features()
79007                     .on('redraw.map', immediateRedraw);
79008
79009                 drawLayers
79010                     .on('change.map', function() {
79011                         context.background().updateImagery();
79012                         immediateRedraw();
79013                     });
79014
79015                 selection
79016                     .on('dblclick.map', dblClick)
79017                     .call(zoom)
79018                     .call(zoom.transform, projection.transform());
79019
79020                 supersurface = selection.append('div')
79021                     .attr('id', 'supersurface')
79022                     .call(utilSetTransform, 0, 0);
79023
79024                 // Need a wrapper div because Opera can't cope with an absolutely positioned
79025                 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
79026                 wrapper = supersurface
79027                     .append('div')
79028                     .attr('class', 'layer layer-data');
79029
79030                 map.surface = surface = wrapper
79031                     .call(drawLayers)
79032                     .selectAll('.surface')
79033                     .attr('id', 'surface');
79034
79035                 surface
79036                     .call(drawLabels.observe)
79037                     .on('gesturestart.surface', function() {
79038                         _gestureTransformStart = projection.transform();
79039                     })
79040                     .on('gesturechange.surface', gestureChange)
79041                     .on('mousedown.zoom', function() {
79042                         if (event.button === 2) {
79043                             event.stopPropagation();
79044                         }
79045                     }, true)
79046                     .on('mouseup.zoom', function() {
79047                         if (resetTransform()) {
79048                             immediateRedraw();
79049                         }
79050                     })
79051                     .on('mousemove.map', function() {
79052                         _mouseEvent = event;
79053                     })
79054                     .on('mouseover.vertices', function() {
79055                         if (map.editable() && !_isTransformed) {
79056                             var hover = event.target.__data__;
79057                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
79058                             dispatch$1.call('drawn', this, { full: false });
79059                         }
79060                     })
79061                     .on('mouseout.vertices', function() {
79062                         if (map.editable() && !_isTransformed) {
79063                             var hover = event.relatedTarget && event.relatedTarget.__data__;
79064                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
79065                             dispatch$1.call('drawn', this, { full: false });
79066                         }
79067                     });
79068
79069                 context.on('enter.map',  function() {
79070                     if (map.editable() && !_isTransformed) {
79071                         // redraw immediately any objects affected by a change in selectedIDs.
79072                         var graph = context.graph();
79073                         var selectedAndParents = {};
79074                         context.selectedIDs().forEach(function(id) {
79075                             var entity = graph.hasEntity(id);
79076                             if (entity) {
79077                                 selectedAndParents[entity.id] = entity;
79078                                 if (entity.type === 'node') {
79079                                     graph.parentWays(entity).forEach(function(parent) {
79080                                         selectedAndParents[parent.id] = parent;
79081                                     });
79082                                 }
79083                             }
79084                         });
79085                         var data = Object.values(selectedAndParents);
79086                         var filter = function(d) { return d.id in selectedAndParents; };
79087
79088                         data = context.features().filter(data, graph);
79089
79090                         surface
79091                             .call(drawVertices.drawSelected, graph, map.extent())
79092                             .call(drawLines, graph, data, filter)
79093                             .call(drawAreas, graph, data, filter)
79094                             .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
79095
79096                         dispatch$1.call('drawn', this, { full: false });
79097
79098                         // redraw everything else later
79099                         scheduleRedraw();
79100                     }
79101                 });
79102
79103                 map.dimensions(utilGetDimensions(selection));
79104             }
79105
79106
79107             function zoomEventFilter() {
79108                 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
79109                 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
79110                 // This can happen if a previous `mousedown` occurred without a `mouseup`.
79111                 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
79112                 // so that d3-zoom won't stop propagation of new `mousedown` events.
79113                 if (event.type === 'mousedown') {
79114                     var hasOrphan = false;
79115                     var listeners = window.__on;
79116                     for (var i = 0; i < listeners.length; i++) {
79117                         var listener = listeners[i];
79118                         if (listener.name === 'zoom' && listener.type === 'mouseup') {
79119                             hasOrphan = true;
79120                             break;
79121                         }
79122                     }
79123                     if (hasOrphan) {
79124                         var event$1 = window.CustomEvent;
79125                         if (event$1) {
79126                             event$1 = new event$1('mouseup');
79127                         } else {
79128                             event$1 = window.document.createEvent('Event');
79129                             event$1.initEvent('mouseup', false, false);
79130                         }
79131                         // Event needs to be dispatched with an event.view property.
79132                         event$1.view = window;
79133                         window.dispatchEvent(event$1);
79134                     }
79135                 }
79136
79137                 return event.button !== 2;   // ignore right clicks
79138             }
79139
79140
79141             function pxCenter() {
79142                 return [_dimensions[0] / 2, _dimensions[1] / 2];
79143             }
79144
79145
79146             function drawEditable(difference, extent) {
79147                 var mode = context.mode();
79148                 var graph = context.graph();
79149                 var features = context.features();
79150                 var all = context.intersects(map.extent());
79151                 var fullRedraw = false;
79152                 var data;
79153                 var set;
79154                 var filter;
79155
79156                 if (difference) {
79157                     var complete = difference.complete(map.extent());
79158                     data = Object.values(complete).filter(Boolean);
79159                     set = new Set(Object.keys(complete));
79160                     filter = function(d) { return set.has(d.id); };
79161                     features.clear(data);
79162
79163                 } else {
79164                     // force a full redraw if gatherStats detects that a feature
79165                     // should be auto-hidden (e.g. points or buildings)..
79166                     if (features.gatherStats(all, graph, _dimensions)) {
79167                         extent = undefined;
79168                     }
79169
79170                     if (extent) {
79171                         data = context.intersects(map.extent().intersection(extent));
79172                         set = new Set(data.map(function(entity) { return entity.id; }));
79173                         filter = function(d) { return set.has(d.id); };
79174
79175                     } else {
79176                         data = all;
79177                         fullRedraw = true;
79178                         filter = utilFunctor(true);
79179                     }
79180                 }
79181
79182                 data = features.filter(data, graph);
79183
79184                 if (mode && mode.id === 'select') {
79185                     // update selected vertices - the user might have just double-clicked a way,
79186                     // creating a new vertex, triggering a partial redraw without a mode change
79187                     surface.call(drawVertices.drawSelected, graph, map.extent());
79188                 }
79189
79190                 surface
79191                     .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
79192                     .call(drawLines, graph, data, filter)
79193                     .call(drawAreas, graph, data, filter)
79194                     .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
79195                     .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
79196                     .call(drawPoints, graph, data, filter);
79197
79198                 dispatch$1.call('drawn', this, {full: true});
79199             }
79200
79201
79202             function editOff() {
79203                 context.features().resetStats();
79204                 surface.selectAll('.layer-osm *').remove();
79205                 surface.selectAll('.layer-touch:not(.markers) *').remove();
79206
79207                 var allowed = {
79208                     'browse': true,
79209                     'save': true,
79210                     'select-note': true,
79211                     'select-data': true,
79212                     'select-error': true
79213                 };
79214
79215                 var mode = context.mode();
79216                 if (mode && !allowed[mode.id]) {
79217                     context.enter(modeBrowse(context));
79218                 }
79219
79220                 dispatch$1.call('drawn', this, {full: true});
79221             }
79222
79223
79224             function dblClick() {
79225                 if (!_dblClickEnabled) {
79226                     event.preventDefault();
79227                     event.stopImmediatePropagation();
79228                 }
79229             }
79230
79231
79232             function gestureChange() {
79233                 // Remap Safari gesture events to wheel events - #5492
79234                 // We want these disabled most places, but enabled for zoom/unzoom on map surface
79235                 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
79236                 var e = event;
79237                 e.preventDefault();
79238
79239                 var props = {
79240                     deltaMode: 0,    // dummy values to ignore in zoomPan
79241                     deltaY: 1,       // dummy values to ignore in zoomPan
79242                     clientX: e.clientX,
79243                     clientY: e.clientY,
79244                     screenX: e.screenX,
79245                     screenY: e.screenY,
79246                     x: e.x,
79247                     y: e.y
79248                 };
79249
79250                 var e2 = new WheelEvent('wheel', props);
79251                 e2._scale = e.scale;         // preserve the original scale
79252                 e2._rotation = e.rotation;   // preserve the original rotation
79253
79254                 _selection.node().dispatchEvent(e2);
79255             }
79256
79257
79258             function zoomPan(manualEvent) {
79259                 var event$1 = (manualEvent || event);
79260                 var source = event$1.sourceEvent;
79261                 var eventTransform = event$1.transform;
79262                 var x = eventTransform.x;
79263                 var y = eventTransform.y;
79264                 var k = eventTransform.k;
79265
79266                 if (_transformStart.x === x &&
79267                     _transformStart.y === y &&
79268                     _transformStart.k === k) {
79269                     return;  // no change
79270                 }
79271
79272                 // Special handling of 'wheel' events:
79273                 // They might be triggered by the user scrolling the mouse wheel,
79274                 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
79275                 if (source && source.type === 'wheel') {
79276                     var detected = utilDetect();
79277                     var dX = source.deltaX;
79278                     var dY = source.deltaY;
79279                     var x2 = x;
79280                     var y2 = y;
79281                     var k2 = k;
79282                     var t0, p0, p1;
79283
79284                     // Normalize mousewheel scroll speed (Firefox) - #3029
79285                     // If wheel delta is provided in LINE units, recalculate it in PIXEL units
79286                     // We are essentially redoing the calculations that occur here:
79287                     //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
79288                     // See this for more info:
79289                     //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
79290                     if (source.deltaMode === 1 /* LINE */) {
79291                         // Convert from lines to pixels, more if the user is scrolling fast.
79292                         // (I made up the exp function to roughly match Firefox to what Chrome does)
79293                         // These numbers should be floats, because integers are treated as pan gesture below.
79294                         var lines = Math.abs(source.deltaY);
79295                         var sign = (source.deltaY > 0) ? 1 : -1;
79296                         dY = sign * clamp(
79297                             Math.exp((lines - 1) * 0.75) * 4.000244140625,
79298                             4.000244140625,    // min
79299                             350.000244140625   // max
79300                         );
79301
79302                         // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
79303                         // There doesn't seem to be any scroll accelleration.
79304                         // This multiplier increases the speed a little bit - #5512
79305                         if (detected.os !== 'mac') {
79306                             dY *= 5;
79307                         }
79308
79309                         // recalculate x2,y2,k2
79310                         t0 = _isTransformed ? _transformLast : _transformStart;
79311                         p0 = _getMouseCoords(source);
79312                         p1 = t0.invert(p0);
79313                         k2 = t0.k * Math.pow(2, -dY / 500);
79314                         k2 = clamp(k2, kMin, kMax);
79315                         x2 = p0[0] - p1[0] * k2;
79316                         y2 = p0[1] - p1[1] * k2;
79317
79318                     // 2 finger map pinch zooming (Safari) - #5492
79319                     // These are fake `wheel` events we made from Safari `gesturechange` events..
79320                     } else if (source._scale) {
79321                         // recalculate x2,y2,k2
79322                         t0 = _gestureTransformStart;
79323                         p0 = _getMouseCoords(source);
79324                         p1 = t0.invert(p0);
79325                         k2 = t0.k * source._scale;
79326                         k2 = clamp(k2, kMin, kMax);
79327                         x2 = p0[0] - p1[0] * k2;
79328                         y2 = p0[1] - p1[1] * k2;
79329
79330                     // 2 finger map pinch zooming (all browsers except Safari) - #5492
79331                     // Pinch zooming via the `wheel` event will always have:
79332                     // - `ctrlKey = true`
79333                     // - `deltaY` is not round integer pixels (ignore `deltaX`)
79334                     } else if (source.ctrlKey && !isInteger(dY)) {
79335                         dY *= 6;   // slightly scale up whatever the browser gave us
79336
79337                         // recalculate x2,y2,k2
79338                         t0 = _isTransformed ? _transformLast : _transformStart;
79339                         p0 = _getMouseCoords(source);
79340                         p1 = t0.invert(p0);
79341                         k2 = t0.k * Math.pow(2, -dY / 500);
79342                         k2 = clamp(k2, kMin, kMax);
79343                         x2 = p0[0] - p1[0] * k2;
79344                         y2 = p0[1] - p1[1] * k2;
79345
79346                     // Trackpad scroll zooming with shift or alt/option key down
79347                     } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
79348                         // recalculate x2,y2,k2
79349                         t0 = _isTransformed ? _transformLast : _transformStart;
79350                         p0 = _getMouseCoords(source);
79351                         p1 = t0.invert(p0);
79352                         k2 = t0.k * Math.pow(2, -dY / 500);
79353                         k2 = clamp(k2, kMin, kMax);
79354                         x2 = p0[0] - p1[0] * k2;
79355                         y2 = p0[1] - p1[1] * k2;
79356
79357                     // 2 finger map panning (Mac only, all browsers) - #5492, #5512
79358                     // Panning via the `wheel` event will always have:
79359                     // - `ctrlKey = false`
79360                     // - `deltaX`,`deltaY` are round integer pixels
79361                     } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
79362                         p1 = projection.translate();
79363                         x2 = p1[0] - dX;
79364                         y2 = p1[1] - dY;
79365                         k2 = projection.scale();
79366                         k2 = clamp(k2, kMin, kMax);
79367                     }
79368
79369                     // something changed - replace the event transform
79370                     if (x2 !== x || y2 !== y || k2 !== k) {
79371                         x = x2;
79372                         y = y2;
79373                         k = k2;
79374                         eventTransform = identity$8.translate(x2, y2).scale(k2);
79375                         _selection.node().__zoom = eventTransform;
79376                     }
79377
79378                 }
79379
79380                 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
79381                     surface.interrupt();
79382                     uiFlash().text(t('cannot_zoom'))();
79383                     setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
79384                     scheduleRedraw();
79385                     dispatch$1.call('move', this, map);
79386                     return;
79387                 }
79388
79389                 projection.transform(eventTransform);
79390
79391                 var scale = k / _transformStart.k;
79392                 var tX = (x / scale - _transformStart.x) * scale;
79393                 var tY = (y / scale - _transformStart.y) * scale;
79394
79395                 if (context.inIntro()) {
79396                     curtainProjection.transform({
79397                         x: x - tX,
79398                         y: y - tY,
79399                         k: k
79400                     });
79401                 }
79402
79403                 if (source) {
79404                     _mouseEvent = event$1;
79405                 }
79406                 _isTransformed = true;
79407                 _transformLast = eventTransform;
79408                 utilSetTransform(supersurface, tX, tY, scale);
79409                 scheduleRedraw();
79410
79411                 dispatch$1.call('move', this, map);
79412
79413
79414                 function isInteger(val) {
79415                     return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
79416                 }
79417             }
79418
79419
79420             function resetTransform() {
79421                 if (!_isTransformed) return false;
79422
79423                 // deprecation warning - Radial Menu to be removed in iD v3
79424                 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
79425                 utilSetTransform(supersurface, 0, 0);
79426                 _isTransformed = false;
79427                 if (context.inIntro()) {
79428                     curtainProjection.transform(projection.transform());
79429                 }
79430                 return true;
79431             }
79432
79433
79434             function redraw(difference, extent) {
79435                 if (surface.empty() || !_redrawEnabled) return;
79436
79437                 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
79438                 // It would result in artifacts where differenced entities are redrawn with
79439                 // one transform and unchanged entities with another.
79440                 if (resetTransform()) {
79441                     difference = extent = undefined;
79442                 }
79443
79444                 var zoom = map.zoom();
79445                 var z = String(~~zoom);
79446
79447                 if (surface.attr('data-zoom') !== z) {
79448                     surface.attr('data-zoom', z);
79449                 }
79450
79451                 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
79452                 var lat = map.center()[1];
79453                 var lowzoom = linear$2()
79454                     .domain([-60, 0, 60])
79455                     .range([17, 18.5, 17])
79456                     .clamp(true);
79457
79458                 surface
79459                     .classed('low-zoom', zoom <= lowzoom(lat));
79460
79461
79462                 if (!difference) {
79463                     supersurface.call(context.background());
79464                     wrapper.call(drawLayers);
79465                 }
79466
79467                 // OSM
79468                 if (map.editable()) {
79469                     context.loadTiles(projection);
79470                     drawEditable(difference, extent);
79471                 } else {
79472                     editOff();
79473                 }
79474
79475                 _transformStart = projection.transform();
79476
79477                 return map;
79478             }
79479
79480
79481
79482             var immediateRedraw = function(difference, extent) {
79483                 if (!difference && !extent) cancelPendingRedraw();
79484                 redraw(difference, extent);
79485             };
79486
79487
79488             map.mouse = function() {
79489                 var event$1 = _mouseEvent || event;
79490                 if (event$1) {
79491                     var s;
79492                     while ((s = event$1.sourceEvent)) { event$1 = s; }
79493                     return _getMouseCoords(event$1);
79494                 }
79495                 return null;
79496             };
79497
79498
79499             // returns Lng/Lat
79500             map.mouseCoordinates = function() {
79501                 var coord = map.mouse() || pxCenter();
79502                 return projection.invert(coord);
79503             };
79504
79505
79506             map.dblclickEnable = function(val) {
79507                 if (!arguments.length) return _dblClickEnabled;
79508                 _dblClickEnabled = val;
79509                 return map;
79510             };
79511
79512
79513             map.redrawEnable = function(val) {
79514                 if (!arguments.length) return _redrawEnabled;
79515                 _redrawEnabled = val;
79516                 return map;
79517             };
79518
79519
79520             map.isTransformed = function() {
79521                 return _isTransformed;
79522             };
79523
79524
79525             function setTransform(t2, duration, force) {
79526                 var t = projection.transform();
79527                 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) return false;
79528
79529                 if (duration) {
79530                     _selection
79531                         .transition()
79532                         .duration(duration)
79533                         .on('start', function() { map.startEase(); })
79534                         .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
79535                 } else {
79536                     projection.transform(t2);
79537                     _transformStart = t2;
79538                     _selection.call(zoom.transform, _transformStart);
79539                 }
79540
79541                 return true;
79542             }
79543
79544
79545             function setCenterZoom(loc2, z2, duration, force) {
79546                 var c = map.center();
79547                 var z = map.zoom();
79548                 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) return false;
79549
79550                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
79551
79552                 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
79553                 proj.scale(k2);
79554
79555                 var t = proj.translate();
79556                 var point = proj(loc2);
79557
79558                 var center = pxCenter();
79559                 t[0] += center[0] - point[0];
79560                 t[1] += center[1] - point[1];
79561
79562                 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
79563             }
79564
79565
79566             map.pan = function(delta, duration) {
79567                 var t = projection.translate();
79568                 var k = projection.scale();
79569
79570                 t[0] += delta[0];
79571                 t[1] += delta[1];
79572
79573                 if (duration) {
79574                     _selection
79575                         .transition()
79576                         .duration(duration)
79577                         .on('start', function() { map.startEase(); })
79578                         .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
79579                 } else {
79580                     projection.translate(t);
79581                     _transformStart = projection.transform();
79582                     _selection.call(zoom.transform, _transformStart);
79583                     dispatch$1.call('move', this, map);
79584                     immediateRedraw();
79585                 }
79586
79587                 return map;
79588             };
79589
79590
79591             map.dimensions = function(val) {
79592                 if (!arguments.length) return _dimensions;
79593
79594                 _dimensions = val;
79595                 drawLayers.dimensions(_dimensions);
79596                 context.background().dimensions(_dimensions);
79597                 projection.clipExtent([[0, 0], _dimensions]);
79598                 _getMouseCoords = utilFastMouse(supersurface.node());
79599
79600                 scheduleRedraw();
79601                 return map;
79602             };
79603
79604
79605             function zoomIn(delta) {
79606                 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
79607             }
79608
79609             function zoomOut(delta) {
79610                 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
79611             }
79612
79613             map.zoomIn = function() { zoomIn(1); };
79614             map.zoomInFurther = function() { zoomIn(4); };
79615             map.canZoomIn = function() { return map.zoom() < maxZoom; };
79616
79617             map.zoomOut = function() { zoomOut(1); };
79618             map.zoomOutFurther = function() { zoomOut(4); };
79619             map.canZoomOut = function() { return map.zoom() > minZoom; };
79620
79621             map.center = function(loc2) {
79622                 if (!arguments.length) {
79623                     return projection.invert(pxCenter());
79624                 }
79625
79626                 if (setCenterZoom(loc2, map.zoom())) {
79627                     dispatch$1.call('move', this, map);
79628                 }
79629
79630                 scheduleRedraw();
79631                 return map;
79632             };
79633
79634             map.unobscuredCenterZoomEase = function(loc, zoom) {
79635                 var offset = map.unobscuredOffsetPx();
79636
79637                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
79638                 // use the target zoom to calculate the offset center
79639                 proj.scale(geoZoomToScale(zoom, TILESIZE));
79640
79641                 var locPx = proj(loc);
79642                 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
79643                 var offsetLoc = proj.invert(offsetLocPx);
79644
79645                 map.centerZoomEase(offsetLoc, zoom);
79646             };
79647
79648             map.unobscuredOffsetPx = function() {
79649                 var openPane = d3_select('.map-panes .map-pane.shown');
79650                 if (!openPane.empty()) {
79651                     return [openPane.node().offsetWidth/2, 0];
79652                 }
79653                 return [0, 0];
79654             };
79655
79656             map.zoom = function(z2) {
79657                 if (!arguments.length) {
79658                     return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
79659                 }
79660
79661                 if (z2 < _minzoom) {
79662                     surface.interrupt();
79663                     uiFlash().text(t('cannot_zoom'))();
79664                     z2 = context.minEditableZoom();
79665                 }
79666
79667                 if (setCenterZoom(map.center(), z2)) {
79668                     dispatch$1.call('move', this, map);
79669                 }
79670
79671                 scheduleRedraw();
79672                 return map;
79673             };
79674
79675
79676             map.centerZoom = function(loc2, z2) {
79677                 if (setCenterZoom(loc2, z2)) {
79678                     dispatch$1.call('move', this, map);
79679                 }
79680
79681                 scheduleRedraw();
79682                 return map;
79683             };
79684
79685
79686             map.zoomTo = function(entity) {
79687                 var extent = entity.extent(context.graph());
79688                 if (!isFinite(extent.area())) return map;
79689
79690                 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
79691                 return map.centerZoom(extent.center(), z2);
79692             };
79693
79694
79695             map.centerEase = function(loc2, duration) {
79696                 duration = duration || 250;
79697                 setCenterZoom(loc2, map.zoom(), duration);
79698                 return map;
79699             };
79700
79701
79702             map.zoomEase = function(z2, duration) {
79703                 duration = duration || 250;
79704                 setCenterZoom(map.center(), z2, duration, false);
79705                 return map;
79706             };
79707
79708
79709             map.centerZoomEase = function(loc2, z2, duration) {
79710                 duration = duration || 250;
79711                 setCenterZoom(loc2, z2, duration, false);
79712                 return map;
79713             };
79714
79715
79716             map.transformEase = function(t2, duration) {
79717                 duration = duration || 250;
79718                 setTransform(t2, duration, false);
79719                 return map;
79720             };
79721
79722
79723             map.zoomToEase = function(entity, duration) {
79724                 var extent = entity.extent(context.graph());
79725                 if (!isFinite(extent.area())) return map;
79726
79727                 var z2 = clamp(map.trimmedExtentZoom(extent), context.minEditableZoom(), 20);
79728                 return map.centerZoomEase(extent.center(), z2, duration);
79729             };
79730
79731
79732             map.startEase = function() {
79733                 utilBindOnce(surface, 'mousedown.ease', function() {
79734                     map.cancelEase();
79735                 });
79736                 return map;
79737             };
79738
79739
79740             map.cancelEase = function() {
79741                 _selection.interrupt();
79742                 return map;
79743             };
79744
79745
79746             map.extent = function(val) {
79747                 if (!arguments.length) {
79748                     return new geoExtent(
79749                         projection.invert([0, _dimensions[1]]),
79750                         projection.invert([_dimensions[0], 0])
79751                     );
79752                 } else {
79753                     var extent = geoExtent(val);
79754                     map.centerZoom(extent.center(), map.extentZoom(extent));
79755                 }
79756             };
79757
79758
79759             map.trimmedExtent = function(val) {
79760                 if (!arguments.length) {
79761                     var headerY = 60;
79762                     var footerY = 30;
79763                     var pad = 10;
79764                     return new geoExtent(
79765                         projection.invert([pad, _dimensions[1] - footerY - pad]),
79766                         projection.invert([_dimensions[0] - pad, headerY + pad])
79767                     );
79768                 } else {
79769                     var extent = geoExtent(val);
79770                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
79771                 }
79772             };
79773
79774
79775             function calcExtentZoom(extent, dim) {
79776                 var tl = projection([extent[0][0], extent[1][1]]);
79777                 var br = projection([extent[1][0], extent[0][1]]);
79778
79779                 // Calculate maximum zoom that fits extent
79780                 var hFactor = (br[0] - tl[0]) / dim[0];
79781                 var vFactor = (br[1] - tl[1]) / dim[1];
79782                 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
79783                 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
79784                 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
79785
79786                 return newZoom;
79787             }
79788
79789
79790             map.extentZoom = function(val) {
79791                 return calcExtentZoom(geoExtent(val), _dimensions);
79792             };
79793
79794
79795             map.trimmedExtentZoom = function(val) {
79796                 var trimY = 120;
79797                 var trimX = 40;
79798                 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
79799                 return calcExtentZoom(geoExtent(val), trimmed);
79800             };
79801
79802
79803             map.editable = function() {
79804                 var layer = context.layers().layer('osm');
79805                 if (!layer || !layer.enabled()) return false;
79806
79807                 return map.zoom() >= context.minEditableZoom();
79808             };
79809
79810
79811             map.notesEditable = function() {
79812                 var layer = context.layers().layer('notes');
79813                 if (!layer || !layer.enabled()) return false;
79814
79815                 return map.zoom() >= context.minEditableZoom();
79816             };
79817
79818
79819             map.minzoom = function(val) {
79820                 if (!arguments.length) return _minzoom;
79821                 _minzoom = val;
79822                 return map;
79823             };
79824
79825
79826             map.layers = drawLayers;
79827
79828
79829             return utilRebind(map, dispatch$1, 'on');
79830         }
79831
79832         function rendererPhotos(context) {
79833             var dispatch$1 = dispatch('change');
79834             var _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'openstreetcam'];
79835             var _allPhotoTypes = ['flat', 'panoramic'];
79836             var _shownPhotoTypes = _allPhotoTypes.slice();   // shallow copy
79837
79838             function photos() {}
79839
79840             function updateStorage() {
79841                 if (window.mocha) return;
79842
79843                 var q = utilStringQs(window.location.hash.substring(1));
79844                 var enabled = context.layers().all().filter(function(d) {
79845                     return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
79846                 }).map(function(d) {
79847                     return d.id;
79848                 });
79849                 if (enabled.length) {
79850                     q.photo_overlay = enabled.join(',');
79851                 } else {
79852                     delete q.photo_overlay;
79853                 }
79854                 window.location.replace('#' + utilQsString(q, true));
79855             }
79856
79857             photos.overlayLayerIDs = function() {
79858                 return _layerIDs;
79859             };
79860
79861             photos.allPhotoTypes = function() {
79862                 return _allPhotoTypes;
79863             };
79864
79865             function showsLayer(id) {
79866                 var layer = context.layers().layer(id);
79867                 return layer && layer.supported() && layer.enabled();
79868             }
79869
79870             photos.shouldFilterByPhotoType = function() {
79871                 return showsLayer('mapillary') ||
79872                     (showsLayer('streetside') && showsLayer('openstreetcam'));
79873             };
79874
79875             photos.showsPhotoType = function(val) {
79876                 if (!photos.shouldFilterByPhotoType()) return true;
79877
79878                 return _shownPhotoTypes.indexOf(val) !== -1;
79879             };
79880
79881             photos.showsFlat = function() {
79882                 return photos.showsPhotoType('flat');
79883             };
79884
79885             photos.showsPanoramic = function() {
79886                 return photos.showsPhotoType('panoramic');
79887             };
79888
79889             photos.togglePhotoType = function(val) {
79890                 var index = _shownPhotoTypes.indexOf(val);
79891                 if (index !== -1) {
79892                     _shownPhotoTypes.splice(index, 1);
79893                 } else {
79894                     _shownPhotoTypes.push(val);
79895                 }
79896                 dispatch$1.call('change', this);
79897                 return photos;
79898             };
79899
79900             photos.init = function() {
79901                 var q = utilStringQs(window.location.hash.substring(1));
79902                 if (q.photo_overlay) {
79903                     var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
79904                     hashOverlayIDs.forEach(function(id) {
79905                         var layer = context.layers().layer(id);
79906                         if (layer) layer.enabled(true);
79907                     });
79908                 }
79909
79910                 context.layers().on('change.rendererPhotos', updateStorage);
79911             };
79912
79913             return utilRebind(photos, dispatch$1, 'on');
79914         }
79915
79916         function uiAccount(context) {
79917             var osm = context.connection();
79918
79919
79920             function update(selection) {
79921                 if (!osm) return;
79922
79923                 if (!osm.authenticated()) {
79924                     selection.selectAll('#userLink, #logoutLink')
79925                         .classed('hide', true);
79926                     return;
79927                 }
79928
79929                 osm.userDetails(function(err, details) {
79930                     var userLink = selection.select('#userLink'),
79931                         logoutLink = selection.select('#logoutLink');
79932
79933                     userLink.html('');
79934                     logoutLink.html('');
79935
79936                     if (err) return;
79937
79938                     selection.selectAll('#userLink, #logoutLink')
79939                         .classed('hide', false);
79940
79941                     // Link
79942                     userLink.append('a')
79943                         .attr('href', osm.userURL(details.display_name))
79944                         .attr('target', '_blank');
79945
79946                     // Add thumbnail or dont
79947                     if (details.image_url) {
79948                         userLink.append('img')
79949                             .attr('class', 'icon pre-text user-icon')
79950                             .attr('src', details.image_url);
79951                     } else {
79952                         userLink
79953                             .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
79954                     }
79955
79956                     // Add user name
79957                     userLink.append('span')
79958                         .attr('class', 'label')
79959                         .text(details.display_name);
79960
79961                     logoutLink.append('a')
79962                         .attr('class', 'logout')
79963                         .attr('href', '#')
79964                         .text(t('logout'))
79965                         .on('click.logout', function() {
79966                             event.preventDefault();
79967                             osm.logout();
79968                         });
79969                 });
79970             }
79971
79972
79973             return function(selection) {
79974                 selection.append('li')
79975                     .attr('id', 'logoutLink')
79976                     .classed('hide', true);
79977
79978                 selection.append('li')
79979                     .attr('id', 'userLink')
79980                     .classed('hide', true);
79981
79982                 if (osm) {
79983                     osm.on('change.account', function() { update(selection); });
79984                     update(selection);
79985                 }
79986             };
79987         }
79988
79989         function uiAttribution(context) {
79990             var selection;
79991
79992
79993             function attribution(data, klass) {
79994                 var div = selection.selectAll('.' + klass)
79995                     .data([0]);
79996
79997                 div = div.enter()
79998                     .append('div')
79999                     .attr('class', klass)
80000                     .merge(div);
80001
80002
80003                 var background = div.selectAll('.attribution')
80004                     .data(data, function(d) { return d.name(); });
80005
80006                 background.exit()
80007                     .remove();
80008
80009                 background = background.enter()
80010                     .append('span')
80011                     .attr('class', 'attribution')
80012                     .each(function(d) {
80013                         if (d.terms_html) {
80014                             d3_select(this)
80015                                 .html(d.terms_html);
80016                             return;
80017                         }
80018
80019                         var selection;
80020                         if (d.terms_url) {
80021                             selection = d3_select(this)
80022                                 .append('a')
80023                                 .attr('href', d.terms_url)
80024                                 .attr('target', '_blank');
80025                         } else {
80026                             selection = d3_select(this);
80027                         }
80028
80029
80030                         var id_safe = d.id.replace(/\./g, '<TX_DOT>');
80031                         var terms_text = t('imagery.' + id_safe + '.attribution.text',
80032                             { default: d.terms_text || d.id || d.name() }
80033                         );
80034
80035                         if (d.icon && !d.overlay) {
80036                             selection
80037                                 .append('img')
80038                                 .attr('class', 'source-image')
80039                                 .attr('src', d.icon);
80040                         }
80041
80042                         selection
80043                             .append('span')
80044                             .attr('class', 'attribution-text')
80045                             .text(terms_text);
80046                     })
80047                     .merge(background);
80048
80049
80050                 var copyright = background.selectAll('.copyright-notice')
80051                     .data(function(d) {
80052                         var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
80053                         return notice ? [notice] : [];
80054                     });
80055
80056                 copyright.exit()
80057                     .remove();
80058
80059                 copyright = copyright.enter()
80060                     .append('span')
80061                     .attr('class', 'copyright-notice')
80062                     .merge(copyright);
80063
80064                 copyright
80065                     .text(String);
80066             }
80067
80068
80069             function update() {
80070                 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
80071                 attribution(context.background().overlayLayerSources().filter(function (s) {
80072                     return s.validZoom(context.map().zoom());
80073                 }), 'overlay-layer-attribution');
80074             }
80075
80076
80077             return function(select) {
80078                 selection = select;
80079
80080                 context.background()
80081                     .on('change.attribution', update);
80082
80083                 context.map()
80084                     .on('move.attribution', throttle(update, 400, {leading: false}));
80085
80086                 update();
80087             };
80088         }
80089
80090         function uiBackgroundDisplayOptions(context) {
80091             var detected = utilDetect();
80092             var storedOpacity = context.storage('background-opacity');
80093             var minVal = 0.25;
80094             var maxVal = detected.cssfilters ? 2 : 1;
80095
80096             var sliders = detected.cssfilters
80097                 ? ['brightness', 'contrast', 'saturation', 'sharpness']
80098                 : ['brightness'];
80099
80100             var _options = {
80101                 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
80102                 contrast: 1,
80103                 saturation: 1,
80104                 sharpness: 1
80105             };
80106
80107             var _selection = d3_select(null);
80108
80109
80110             function clamp(x, min, max) {
80111                 return Math.max(min, Math.min(x, max));
80112             }
80113
80114
80115             function updateValue(d, val) {
80116                 if (!val && event && event.target) {
80117                     val = event.target.value;
80118                 }
80119
80120                 val = clamp(val, minVal, maxVal);
80121
80122                 _options[d] = val;
80123                 context.background()[d](val);
80124
80125                 if (d === 'brightness') {
80126                     context.storage('background-opacity', val);
80127                 }
80128
80129                 _selection
80130                     .call(render);
80131             }
80132
80133
80134             function render(selection) {
80135                 var container = selection.selectAll('.display-options-container')
80136                     .data([0]);
80137
80138                 var containerEnter = container.enter()
80139                     .append('div')
80140                     .attr('class', 'display-options-container controls-list');
80141
80142                 // add slider controls
80143                 var slidersEnter = containerEnter.selectAll('.display-control')
80144                     .data(sliders)
80145                     .enter()
80146                     .append('div')
80147                     .attr('class', function(d) { return 'display-control display-control-' + d; });
80148
80149                 slidersEnter
80150                     .append('h5')
80151                     .text(function(d) { return t('background.' + d); })
80152                     .append('span')
80153                     .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
80154
80155                 slidersEnter
80156                     .append('input')
80157                     .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
80158                     .attr('type', 'range')
80159                     .attr('min', minVal)
80160                     .attr('max', maxVal)
80161                     .attr('step', '0.05')
80162                     .on('input', function(d) {
80163                         var val = d3_select(this).property('value');
80164                         updateValue(d, val);
80165                     });
80166
80167                 slidersEnter
80168                     .append('button')
80169                     .attr('title', t('background.reset'))
80170                     .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
80171                     .on('click', function(d) {
80172                         if (event.button !== 0) return;
80173                         updateValue(d, 1);
80174                     })
80175                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
80176
80177                 // reset all button
80178                 containerEnter
80179                     .append('a')
80180                     .attr('class', 'display-option-resetlink')
80181                     .attr('href', '#')
80182                     .text(t('background.reset_all'))
80183                     .on('click', function() {
80184                         for (var i = 0; i < sliders.length; i++) {
80185                             updateValue(sliders[i],1);
80186                         }
80187                     });
80188
80189                 // update
80190                 container = containerEnter
80191                     .merge(container);
80192
80193                 container.selectAll('.display-option-input')
80194                     .property('value', function(d) { return _options[d]; });
80195
80196                 container.selectAll('.display-option-value')
80197                     .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
80198
80199                 container.selectAll('.display-option-reset')
80200                     .classed('disabled', function(d) { return _options[d] === 1; });
80201
80202                 // first time only, set brightness if needed
80203                 if (containerEnter.size() && _options.brightness !== 1) {
80204                     context.background().brightness(_options.brightness);
80205                 }
80206             }
80207
80208
80209             function backgroundDisplayOptions(selection) {
80210                 _selection = selection;
80211
80212                 selection
80213                     .call(uiDisclosure(context, 'background_display_options', true)
80214                         .title(t('background.display_options'))
80215                         .content(render)
80216                     );
80217             }
80218
80219
80220             return backgroundDisplayOptions;
80221         }
80222
80223         function uiBackgroundOffset(context) {
80224             var directions = [
80225                 ['right', [0.5, 0]],
80226                 ['top', [0, -0.5]],
80227                 ['left', [-0.5, 0]],
80228                 ['bottom', [0, 0.5]]
80229             ];
80230
80231
80232             function d3_eventCancel() {
80233                 event.stopPropagation();
80234                 event.preventDefault();
80235             }
80236
80237
80238             function updateValue() {
80239                 var meters = geoOffsetToMeters(context.background().offset());
80240                 var x = +meters[0].toFixed(2);
80241                 var y = +meters[1].toFixed(2);
80242
80243                 d3_selectAll('.nudge-inner-rect')
80244                     .select('input')
80245                     .classed('error', false)
80246                     .property('value', x + ', ' + y);
80247
80248                 d3_selectAll('.nudge-reset')
80249                     .classed('disabled', function() {
80250                         return (x === 0 && y === 0);
80251                     });
80252             }
80253
80254
80255             function resetOffset() {
80256                 context.background().offset([0, 0]);
80257                 updateValue();
80258             }
80259
80260
80261             function nudge(d) {
80262                 context.background().nudge(d, context.map().zoom());
80263                 updateValue();
80264             }
80265
80266
80267             function clickNudgeButton(d) {
80268                 var interval;
80269                 var timeout = window.setTimeout(function() {
80270                         interval = window.setInterval(nudge.bind(null, d), 100);
80271                     }, 500);
80272
80273                 function doneNudge() {
80274                     window.clearTimeout(timeout);
80275                     window.clearInterval(interval);
80276                     d3_select(window)
80277                         .on('mouseup.buttonoffset', null, true)
80278                         .on('mousedown.buttonoffset', null, true);
80279                 }
80280
80281                 d3_select(window)
80282                     .on('mouseup.buttonoffset', doneNudge, true)
80283                     .on('mousedown.buttonoffset', doneNudge, true);
80284
80285                 nudge(d);
80286             }
80287
80288
80289             function inputOffset() {
80290                 var input = d3_select(this);
80291                 var d = input.node().value;
80292
80293                 if (d === '') return resetOffset();
80294
80295                 d = d.replace(/;/g, ',').split(',').map(function(n) {
80296                     // if n is NaN, it will always get mapped to false.
80297                     return !isNaN(n) && n;
80298                 });
80299
80300                 if (d.length !== 2 || !d[0] || !d[1]) {
80301                     input.classed('error', true);
80302                     return;
80303                 }
80304
80305                 context.background().offset(geoMetersToOffset(d));
80306                 updateValue();
80307             }
80308
80309
80310             function dragOffset() {
80311                 if (event.button !== 0) return;
80312
80313                 var origin = [event.clientX, event.clientY];
80314
80315                 context.container()
80316                     .append('div')
80317                     .attr('class', 'nudge-surface');
80318
80319                 d3_select(window)
80320                     .on('mousemove.offset', function() {
80321                         var latest = [event.clientX, event.clientY];
80322                         var d = [
80323                             -(origin[0] - latest[0]) / 4,
80324                             -(origin[1] - latest[1]) / 4
80325                         ];
80326
80327                         origin = latest;
80328                         nudge(d);
80329                     })
80330                     .on('mouseup.offset', function() {
80331                         if (event.button !== 0) return;
80332                         d3_selectAll('.nudge-surface')
80333                             .remove();
80334
80335                         d3_select(window)
80336                             .on('mousemove.offset', null)
80337                             .on('mouseup.offset', null);
80338                     });
80339             }
80340
80341
80342             function render(selection) {
80343                 var container = selection.selectAll('.nudge-container')
80344                     .data([0]);
80345
80346                 var containerEnter = container.enter()
80347                     .append('div')
80348                     .attr('class', 'nudge-container cf');
80349
80350                 containerEnter
80351                     .append('div')
80352                     .attr('class', 'nudge-instructions')
80353                     .text(t('background.offset'));
80354
80355                 var nudgeEnter = containerEnter
80356                     .append('div')
80357                     .attr('class', 'nudge-outer-rect')
80358                     .on('mousedown', dragOffset);
80359
80360                 nudgeEnter
80361                     .append('div')
80362                     .attr('class', 'nudge-inner-rect')
80363                     .append('input')
80364                     .on('change', inputOffset);
80365
80366                 containerEnter
80367                     .append('div')
80368                     .selectAll('button')
80369                     .data(directions).enter()
80370                     .append('button')
80371                     .attr('class', function(d) { return d[0] + ' nudge'; })
80372                     .on('contextmenu', d3_eventCancel)
80373                     .on('mousedown', function(d) {
80374                         if (event.button !== 0) return;
80375                         clickNudgeButton(d[1]);
80376                     });
80377
80378                 containerEnter
80379                     .append('button')
80380                     .attr('title', t('background.reset'))
80381                     .attr('class', 'nudge-reset disabled')
80382                     .on('contextmenu', d3_eventCancel)
80383                     .on('click', function() {
80384                         if (event.button !== 0) return;
80385                         resetOffset();
80386                     })
80387                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
80388
80389                 updateValue();
80390             }
80391
80392
80393             function backgroundOffset(selection) {
80394                 selection
80395                     .call(uiDisclosure(context, 'background_offset', false)
80396                         .title(t('background.fix_misalignment'))
80397                         .content(render)
80398                     );
80399             }
80400
80401
80402             context.background()
80403                 .on('change.backgroundOffset-update', updateValue);
80404
80405             return backgroundOffset;
80406         }
80407
80408         // import { utilGetDimensions } from '../util/dimensions';
80409
80410
80411         function uiMapInMap(context) {
80412
80413             function mapInMap(selection) {
80414                 var backgroundLayer = rendererTileLayer(context);
80415                 var overlayLayers = {};
80416                 var projection = geoRawMercator();
80417                 var dataLayer = svgData(projection, context).showLabels(false);
80418                 var debugLayer = svgDebug(projection, context);
80419                 var zoom = d3_zoom()
80420                     .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
80421                     .on('start', zoomStarted)
80422                     .on('zoom', zoomed)
80423                     .on('end', zoomEnded);
80424
80425                 var wrap = d3_select(null);
80426                 var tiles = d3_select(null);
80427                 var viewport = d3_select(null);
80428
80429                 var _isTransformed = false;
80430                 var _isHidden = true;
80431                 var _skipEvents = false;
80432                 var _gesture = null;
80433                 var _zDiff = 6;    // by default, minimap renders at (main zoom - 6)
80434                 var _dMini;        // dimensions of minimap
80435                 var _cMini;        // center pixel of minimap
80436                 var _tStart;       // transform at start of gesture
80437                 var _tCurr;        // transform at most recent event
80438                 var _timeoutID;
80439
80440
80441                 function zoomStarted() {
80442                     if (_skipEvents) return;
80443                     _tStart = _tCurr = projection.transform();
80444                     _gesture = null;
80445                 }
80446
80447
80448                 function zoomed() {
80449                     if (_skipEvents) return;
80450
80451                     var x = event.transform.x;
80452                     var y = event.transform.y;
80453                     var k = event.transform.k;
80454                     var isZooming = (k !== _tStart.k);
80455                     var isPanning = (x !== _tStart.x || y !== _tStart.y);
80456
80457                     if (!isZooming && !isPanning) {
80458                         return;  // no change
80459                     }
80460
80461                     // lock in either zooming or panning, don't allow both in minimap.
80462                     if (!_gesture) {
80463                         _gesture = isZooming ? 'zoom' : 'pan';
80464                     }
80465
80466                     var tMini = projection.transform();
80467                     var tX, tY, scale;
80468
80469                     if (_gesture === 'zoom') {
80470                         scale = k / tMini.k;
80471                         tX = (_cMini[0] / scale - _cMini[0]) * scale;
80472                         tY = (_cMini[1] / scale - _cMini[1]) * scale;
80473                     } else {
80474                         k = tMini.k;
80475                         scale = 1;
80476                         tX = x - tMini.x;
80477                         tY = y - tMini.y;
80478                     }
80479
80480                     utilSetTransform(tiles, tX, tY, scale);
80481                     utilSetTransform(viewport, 0, 0, scale);
80482                     _isTransformed = true;
80483                     _tCurr = identity$8.translate(x, y).scale(k);
80484
80485                     var zMain = geoScaleToZoom(context.projection.scale());
80486                     var zMini = geoScaleToZoom(k);
80487
80488                     _zDiff = zMain - zMini;
80489
80490                     queueRedraw();
80491                 }
80492
80493
80494                 function zoomEnded() {
80495                     if (_skipEvents) return;
80496                     if (_gesture !== 'pan') return;
80497
80498                     updateProjection();
80499                     _gesture = null;
80500                     context.map().center(projection.invert(_cMini));   // recenter main map..
80501                 }
80502
80503
80504                 function updateProjection() {
80505                     var loc = context.map().center();
80506                     var tMain = context.projection.transform();
80507                     var zMain = geoScaleToZoom(tMain.k);
80508                     var zMini = Math.max(zMain - _zDiff, 0.5);
80509                     var kMini = geoZoomToScale(zMini);
80510
80511                     projection
80512                         .translate([tMain.x, tMain.y])
80513                         .scale(kMini);
80514
80515                     var point = projection(loc);
80516                     var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
80517                     var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
80518                     var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
80519
80520                     projection
80521                         .translate([xMini, yMini])
80522                         .clipExtent([[0, 0], _dMini]);
80523
80524                     _tCurr = projection.transform();
80525
80526                     if (_isTransformed) {
80527                         utilSetTransform(tiles, 0, 0);
80528                         utilSetTransform(viewport, 0, 0);
80529                         _isTransformed = false;
80530                     }
80531
80532                     zoom
80533                         .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
80534
80535                     _skipEvents = true;
80536                     wrap.call(zoom.transform, _tCurr);
80537                     _skipEvents = false;
80538                 }
80539
80540
80541                 function redraw() {
80542                     clearTimeout(_timeoutID);
80543                     if (_isHidden) return;
80544
80545                     updateProjection();
80546                     var zMini = geoScaleToZoom(projection.scale());
80547
80548                     // setup tile container
80549                     tiles = wrap
80550                         .selectAll('.map-in-map-tiles')
80551                         .data([0]);
80552
80553                     tiles = tiles.enter()
80554                         .append('div')
80555                         .attr('class', 'map-in-map-tiles')
80556                         .merge(tiles);
80557
80558                     // redraw background
80559                     backgroundLayer
80560                         .source(context.background().baseLayerSource())
80561                         .projection(projection)
80562                         .dimensions(_dMini);
80563
80564                     var background = tiles
80565                         .selectAll('.map-in-map-background')
80566                         .data([0]);
80567
80568                     background.enter()
80569                         .append('div')
80570                         .attr('class', 'map-in-map-background')
80571                         .merge(background)
80572                         .call(backgroundLayer);
80573
80574
80575                     // redraw overlay
80576                     var overlaySources = context.background().overlayLayerSources();
80577                     var activeOverlayLayers = [];
80578                     for (var i = 0; i < overlaySources.length; i++) {
80579                         if (overlaySources[i].validZoom(zMini)) {
80580                             if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
80581                             activeOverlayLayers.push(overlayLayers[i]
80582                                 .source(overlaySources[i])
80583                                 .projection(projection)
80584                                 .dimensions(_dMini));
80585                         }
80586                     }
80587
80588                     var overlay = tiles
80589                         .selectAll('.map-in-map-overlay')
80590                         .data([0]);
80591
80592                     overlay = overlay.enter()
80593                         .append('div')
80594                         .attr('class', 'map-in-map-overlay')
80595                         .merge(overlay);
80596
80597
80598                     var overlays = overlay
80599                         .selectAll('div')
80600                         .data(activeOverlayLayers, function(d) { return d.source().name(); });
80601
80602                     overlays.exit()
80603                         .remove();
80604
80605                     overlays = overlays.enter()
80606                         .append('div')
80607                         .merge(overlays)
80608                         .each(function(layer) { d3_select(this).call(layer); });
80609
80610
80611                     var dataLayers = tiles
80612                         .selectAll('.map-in-map-data')
80613                         .data([0]);
80614
80615                     dataLayers.exit()
80616                         .remove();
80617
80618                     dataLayers = dataLayers.enter()
80619                         .append('svg')
80620                         .attr('class', 'map-in-map-data')
80621                         .merge(dataLayers)
80622                         .call(dataLayer)
80623                         .call(debugLayer);
80624
80625
80626                     // redraw viewport bounding box
80627                     if (_gesture !== 'pan') {
80628                         var getPath = d3_geoPath(projection);
80629                         var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
80630
80631                         viewport = wrap.selectAll('.map-in-map-viewport')
80632                             .data([0]);
80633
80634                         viewport = viewport.enter()
80635                             .append('svg')
80636                             .attr('class', 'map-in-map-viewport')
80637                             .merge(viewport);
80638
80639
80640                         var path = viewport.selectAll('.map-in-map-bbox')
80641                             .data([bbox]);
80642
80643                         path.enter()
80644                             .append('path')
80645                             .attr('class', 'map-in-map-bbox')
80646                             .merge(path)
80647                             .attr('d', getPath)
80648                             .classed('thick', function(d) { return getPath.area(d) < 30; });
80649                     }
80650                 }
80651
80652
80653                 function queueRedraw() {
80654                     clearTimeout(_timeoutID);
80655                     _timeoutID = setTimeout(function() { redraw(); }, 750);
80656                 }
80657
80658
80659                 function toggle() {
80660                     if (event) event.preventDefault();
80661
80662                     _isHidden = !_isHidden;
80663
80664                     d3_select('.minimap-toggle-item')
80665                         .classed('active', !_isHidden)
80666                         .select('input')
80667                         .property('checked', !_isHidden);
80668
80669                     if (_isHidden) {
80670                         wrap
80671                             .style('display', 'block')
80672                             .style('opacity', '1')
80673                             .transition()
80674                             .duration(200)
80675                             .style('opacity', '0')
80676                             .on('end', function() {
80677                                 selection.selectAll('.map-in-map')
80678                                     .style('display', 'none');
80679                             });
80680                     } else {
80681                         wrap
80682                             .style('display', 'block')
80683                             .style('opacity', '0')
80684                             .transition()
80685                             .duration(200)
80686                             .style('opacity', '1')
80687                             .on('end', function() {
80688                                 redraw();
80689                             });
80690                     }
80691                 }
80692
80693
80694                 uiMapInMap.toggle = toggle;
80695
80696                 wrap = selection.selectAll('.map-in-map')
80697                     .data([0]);
80698
80699                 wrap = wrap.enter()
80700                     .append('div')
80701                     .attr('class', 'map-in-map')
80702                     .style('display', (_isHidden ? 'none' : 'block'))
80703                     .call(zoom)
80704                     .on('dblclick.zoom', null)
80705                     .merge(wrap);
80706
80707                 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
80708                 _dMini = [200,150]; //utilGetDimensions(wrap);
80709                 _cMini = geoVecScale(_dMini, 0.5);
80710
80711                 context.map()
80712                     .on('drawn.map-in-map', function(drawn) {
80713                         if (drawn.full === true) {
80714                             redraw();
80715                         }
80716                     });
80717
80718                 redraw();
80719
80720                 context.keybinding()
80721                     .on(t('background.minimap.key'), toggle);
80722             }
80723
80724             return mapInMap;
80725         }
80726
80727         function uiConfirm(selection) {
80728             var modalSelection = uiModal(selection);
80729
80730             modalSelection.select('.modal')
80731                 .classed('modal-alert', true);
80732
80733             var section = modalSelection.select('.content');
80734
80735             section.append('div')
80736                 .attr('class', 'modal-section header');
80737
80738             section.append('div')
80739                 .attr('class', 'modal-section message-text');
80740
80741             var buttons = section.append('div')
80742                 .attr('class', 'modal-section buttons cf');
80743
80744
80745             modalSelection.okButton = function() {
80746                 buttons
80747                     .append('button')
80748                     .attr('class', 'button ok-button action')
80749                     .on('click.confirm', function() {
80750                         modalSelection.remove();
80751                     })
80752                     .text(t('confirm.okay'))
80753                     .node()
80754                     .focus();
80755
80756                 return modalSelection;
80757             };
80758
80759
80760             return modalSelection;
80761         }
80762
80763         function uiSettingsCustomBackground(context) {
80764             var dispatch$1 = dispatch('change');
80765
80766             function render(selection) {
80767                 // keep separate copies of original and current settings
80768                 var _origSettings = {
80769                     template: context.storage('background-custom-template')
80770                 };
80771                 var _currSettings = {
80772                     template: context.storage('background-custom-template')
80773                 };
80774
80775                 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
80776                 var modal = uiConfirm(selection).okButton();
80777
80778                 modal
80779                     .classed('settings-modal settings-custom-background', true);
80780
80781                 modal.select('.modal-section.header')
80782                     .append('h3')
80783                     .text(t('settings.custom_background.header'));
80784
80785
80786                 var textSection = modal.select('.modal-section.message-text');
80787
80788                 textSection
80789                     .append('pre')
80790                     .attr('class', 'instructions-template')
80791                     .text(t('settings.custom_background.instructions', { example: example }));
80792
80793                 textSection
80794                     .append('textarea')
80795                     .attr('class', 'field-template')
80796                     .attr('placeholder', t('settings.custom_background.template.placeholder'))
80797                     .call(utilNoAuto)
80798                     .property('value', _currSettings.template);
80799
80800
80801                 // insert a cancel button
80802                 var buttonSection = modal.select('.modal-section.buttons');
80803
80804                 buttonSection
80805                     .insert('button', '.ok-button')
80806                     .attr('class', 'button cancel-button secondary-action')
80807                     .text(t('confirm.cancel'));
80808
80809
80810                 buttonSection.select('.cancel-button')
80811                     .on('click.cancel', clickCancel);
80812
80813                 buttonSection.select('.ok-button')
80814                     .attr('disabled', isSaveDisabled)
80815                     .on('click.save', clickSave);
80816
80817
80818                 function isSaveDisabled() {
80819                     return null;
80820                 }
80821
80822
80823                 // restore the original template
80824                 function clickCancel() {
80825                     textSection.select('.field-template').property('value', _origSettings.template);
80826                     context.storage('background-custom-template', _origSettings.template);
80827                     this.blur();
80828                     modal.close();
80829                 }
80830
80831                 // accept the current template
80832                 function clickSave() {
80833                     _currSettings.template = textSection.select('.field-template').property('value');
80834                     context.storage('background-custom-template', _currSettings.template);
80835                     this.blur();
80836                     modal.close();
80837                     dispatch$1.call('change', this, _currSettings);
80838                 }
80839             }
80840
80841             return utilRebind(render, dispatch$1, 'on');
80842         }
80843
80844         function uiBackground(context) {
80845             var key = t('background.key');
80846
80847             var _pane = d3_select(null), _toggleButton = d3_select(null);
80848
80849             var _customSource = context.background().findSource('custom');
80850             var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
80851
80852             var _backgroundList = d3_select(null);
80853             var _overlayList = d3_select(null);
80854             var _displayOptionsContainer = d3_select(null);
80855             var _offsetContainer = d3_select(null);
80856
80857             var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
80858             var backgroundOffset = uiBackgroundOffset(context);
80859
80860             var settingsCustomBackground = uiSettingsCustomBackground(context)
80861                 .on('change', customChanged);
80862
80863
80864             function setTooltips(selection) {
80865                 selection.each(function(d, i, nodes) {
80866                     var item = d3_select(this).select('label');
80867                     var span = item.select('span');
80868                     var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
80869                     var description = d.description();
80870                     var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
80871
80872                     item.call(tooltip().destroyAny);
80873
80874                     if (d === _previousBackground) {
80875                         item.call(tooltip()
80876                             .placement(placement)
80877                             .html(true)
80878                             .title(function() {
80879                                 var tip = '<div>' + t('background.switch') + '</div>';
80880                                 return uiTooltipHtml(tip, uiCmd('⌘' + key));
80881                             })
80882                         );
80883                     } else if (description || isOverflowing) {
80884                         item.call(tooltip()
80885                             .placement(placement)
80886                             .title(description || d.name())
80887                         );
80888                     }
80889                 });
80890             }
80891
80892
80893             function updateLayerSelections(selection) {
80894                 function active(d) {
80895                     return context.background().showsLayer(d);
80896                 }
80897
80898                 selection.selectAll('li')
80899                     .classed('active', active)
80900                     .classed('switch', function(d) { return d === _previousBackground; })
80901                     .call(setTooltips)
80902                     .selectAll('input')
80903                     .property('checked', active);
80904             }
80905
80906
80907             function chooseBackground(d) {
80908                 if (d.id === 'custom' && !d.template()) {
80909                     return editCustom();
80910                 }
80911
80912                 event.preventDefault();
80913                 _previousBackground = context.background().baseLayerSource();
80914                 context.storage('background-last-used-toggle', _previousBackground.id);
80915                 context.storage('background-last-used', d.id);
80916                 context.background().baseLayerSource(d);
80917                 _backgroundList.call(updateLayerSelections);
80918                 document.activeElement.blur();
80919             }
80920
80921
80922             function customChanged(d) {
80923                 if (d && d.template) {
80924                     _customSource.template(d.template);
80925                     chooseBackground(_customSource);
80926                 } else {
80927                     _customSource.template('');
80928                     chooseBackground(context.background().findSource('none'));
80929                 }
80930             }
80931
80932
80933             function editCustom() {
80934                 event.preventDefault();
80935                 context.container()
80936                     .call(settingsCustomBackground);
80937             }
80938
80939
80940             function chooseOverlay(d) {
80941                 event.preventDefault();
80942                 context.background().toggleOverlayLayer(d);
80943                 _overlayList.call(updateLayerSelections);
80944                 document.activeElement.blur();
80945             }
80946
80947
80948             function drawListItems(layerList, type, change, filter) {
80949                 var sources = context.background()
80950                     .sources(context.map().extent())
80951                     .filter(filter);
80952
80953                 var layerLinks = layerList.selectAll('li')
80954                     .data(sources, function(d) { return d.name(); });
80955
80956                 layerLinks.exit()
80957                     .remove();
80958
80959                 var enter = layerLinks.enter()
80960                     .append('li')
80961                     .classed('layer-custom', function(d) { return d.id === 'custom'; })
80962                     .classed('best', function(d) { return d.best(); });
80963
80964                 var label = enter
80965                     .append('label');
80966
80967                 label
80968                     .append('input')
80969                     .attr('type', type)
80970                     .attr('name', 'layers')
80971                     .on('change', change);
80972
80973                 label
80974                     .append('span')
80975                     .text(function(d) { return d.name(); });
80976
80977                 enter.filter(function(d) { return d.id === 'custom'; })
80978                     .append('button')
80979                     .attr('class', 'layer-browse')
80980                     .call(tooltip()
80981                         .title(t('settings.custom_background.tooltip'))
80982                         .placement((textDirection === 'rtl') ? 'right' : 'left')
80983                     )
80984                     .on('click', editCustom)
80985                     .call(svgIcon('#iD-icon-more'));
80986
80987                 enter.filter(function(d) { return d.best(); })
80988                     .append('div')
80989                     .attr('class', 'best')
80990                     .call(tooltip()
80991                         .title(t('background.best_imagery'))
80992                         .placement((textDirection === 'rtl') ? 'right' : 'left')
80993                     )
80994                     .append('span')
80995                     .html('&#9733;');
80996
80997
80998                 layerList.selectAll('li')
80999                     .sort(sortSources);
81000
81001                 layerList
81002                     .call(updateLayerSelections);
81003
81004
81005                 function sortSources(a, b) {
81006                     return a.best() && !b.best() ? -1
81007                         : b.best() && !a.best() ? 1
81008                         : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
81009                 }
81010             }
81011
81012
81013             function renderBackgroundList(selection) {
81014
81015                 // the background list
81016                 var container = selection.selectAll('.layer-background-list')
81017                     .data([0]);
81018
81019                 _backgroundList = container.enter()
81020                     .append('ul')
81021                     .attr('class', 'layer-list layer-background-list')
81022                     .attr('dir', 'auto')
81023                     .merge(container);
81024
81025
81026                 // add minimap toggle below list
81027                 var bgExtrasListEnter = selection.selectAll('.bg-extras-list')
81028                     .data([0])
81029                     .enter()
81030                     .append('ul')
81031                     .attr('class', 'layer-list bg-extras-list');
81032
81033                 var minimapLabelEnter = bgExtrasListEnter
81034                     .append('li')
81035                     .attr('class', 'minimap-toggle-item')
81036                     .append('label')
81037                     .call(tooltip()
81038                         .html(true)
81039                         .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
81040                         .placement('top')
81041                     );
81042
81043                 minimapLabelEnter
81044                     .append('input')
81045                     .attr('type', 'checkbox')
81046                     .on('change', function() {
81047                         event.preventDefault();
81048                         uiMapInMap.toggle();
81049                     });
81050
81051                 minimapLabelEnter
81052                     .append('span')
81053                     .text(t('background.minimap.description'));
81054
81055
81056                 var panelLabelEnter = bgExtrasListEnter
81057                     .append('li')
81058                     .attr('class', 'background-panel-toggle-item')
81059                     .append('label')
81060                     .call(tooltip()
81061                         .html(true)
81062                         .title(uiTooltipHtml(t('background.panel.tooltip'), uiCmd('⌘⇧' + t('info_panels.background.key'))))
81063                         .placement('top')
81064                     );
81065
81066                 panelLabelEnter
81067                     .append('input')
81068                     .attr('type', 'checkbox')
81069                     .on('change', function() {
81070                         event.preventDefault();
81071                         context.ui().info.toggle('background');
81072                     });
81073
81074                 panelLabelEnter
81075                     .append('span')
81076                     .text(t('background.panel.description'));
81077
81078
81079                 // "Info / Report a Problem" link
81080                 selection.selectAll('.imagery-faq')
81081                     .data([0])
81082                     .enter()
81083                     .append('div')
81084                     .attr('class', 'imagery-faq')
81085                     .append('a')
81086                     .attr('target', '_blank')
81087                     .call(svgIcon('#iD-icon-out-link', 'inline'))
81088                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
81089                     .append('span')
81090                     .text(t('background.imagery_problem_faq'));
81091
81092                 updateBackgroundList();
81093             }
81094
81095
81096             function renderOverlayList(selection) {
81097                 var container = selection.selectAll('.layer-overlay-list')
81098                     .data([0]);
81099
81100                 _overlayList = container.enter()
81101                     .append('ul')
81102                     .attr('class', 'layer-list layer-overlay-list')
81103                     .attr('dir', 'auto')
81104                     .merge(container);
81105
81106                 updateOverlayList();
81107             }
81108
81109             function updateBackgroundList() {
81110                 _backgroundList
81111                     .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
81112             }
81113
81114             function updateOverlayList() {
81115                 _overlayList
81116                     .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
81117             }
81118
81119
81120             function update() {
81121                 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
81122                     updateBackgroundList();
81123                 }
81124
81125                 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
81126                     updateOverlayList();
81127                 }
81128
81129                 _displayOptionsContainer
81130                     .call(backgroundDisplayOptions);
81131
81132                 _offsetContainer
81133                     .call(backgroundOffset);
81134             }
81135
81136
81137             function quickSwitch() {
81138                 if (event) {
81139                     event.stopImmediatePropagation();
81140                     event.preventDefault();
81141                 }
81142                 if (_previousBackground) {
81143                     chooseBackground(_previousBackground);
81144                 }
81145             }
81146
81147             var paneTooltip = tooltip()
81148                 .placement((textDirection === 'rtl') ? 'right' : 'left')
81149                 .html(true)
81150                 .title(uiTooltipHtml(t('background.description'), key));
81151
81152             uiBackground.togglePane = function() {
81153                 if (event) event.preventDefault();
81154                 paneTooltip.hide(_toggleButton);
81155                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
81156             };
81157
81158             function hidePane() {
81159                 context.ui().togglePanes();
81160             }
81161
81162             uiBackground.renderToggleButton = function(selection) {
81163
81164                 _toggleButton = selection
81165                     .append('button')
81166                     .on('click', uiBackground.togglePane)
81167                     .call(svgIcon('#iD-icon-layers', 'light'))
81168                     .call(paneTooltip);
81169             };
81170
81171             uiBackground.renderPane = function(selection) {
81172
81173                 _pane = selection
81174                     .append('div')
81175                     .attr('class', 'fillL map-pane background-pane hide')
81176                     .attr('pane', 'background');
81177
81178
81179                 var heading = _pane
81180                     .append('div')
81181                     .attr('class', 'pane-heading');
81182
81183                 heading
81184                     .append('h2')
81185                     .text(t('background.title'));
81186
81187                 heading
81188                     .append('button')
81189                     .on('click', hidePane)
81190                     .call(svgIcon('#iD-icon-close'));
81191
81192
81193                 var content = _pane
81194                     .append('div')
81195                     .attr('class', 'pane-content');
81196
81197                 // background list
81198                 content
81199                     .append('div')
81200                     .attr('class', 'background-background-list-container')
81201                     .call(uiDisclosure(context, 'background_list', true)
81202                         .title(t('background.backgrounds'))
81203                         .content(renderBackgroundList)
81204                     );
81205
81206                 // overlay list
81207                 content
81208                     .append('div')
81209                     .attr('class', 'background-overlay-list-container')
81210                     .call(uiDisclosure(context, 'overlay_list', true)
81211                         .title(t('background.overlays'))
81212                         .content(renderOverlayList)
81213                     );
81214
81215                 // display options
81216                 _displayOptionsContainer = content
81217                     .append('div')
81218                     .attr('class', 'background-display-options');
81219
81220                 // offset controls
81221                 _offsetContainer = content
81222                     .append('div')
81223                     .attr('class', 'background-offset');
81224
81225
81226                 // add listeners
81227                 context.map()
81228                     .on('move.background-update',
81229                         debounce(function() { window.requestIdleCallback(update); }, 1000)
81230                     );
81231
81232
81233                 context.background()
81234                     .on('change.background-update', update);
81235
81236
81237                 update();
81238
81239                 context.keybinding()
81240                     .on(key, uiBackground.togglePane)
81241                     .on(uiCmd('⌘' + key), quickSwitch);
81242             };
81243
81244             return uiBackground;
81245         }
81246
81247         function uiContributors(context) {
81248             var osm = context.connection(),
81249                 debouncedUpdate = debounce(function() { update(); }, 1000),
81250                 limit = 4,
81251                 hidden = false,
81252                 wrap = d3_select(null);
81253
81254
81255             function update() {
81256                 if (!osm) return;
81257
81258                 var users = {},
81259                     entities = context.intersects(context.map().extent());
81260
81261                 entities.forEach(function(entity) {
81262                     if (entity && entity.user) users[entity.user] = true;
81263                 });
81264
81265                 var u = Object.keys(users),
81266                     subset = u.slice(0, u.length > limit ? limit - 1 : limit);
81267
81268                 wrap.html('')
81269                     .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
81270
81271                 var userList = d3_select(document.createElement('span'));
81272
81273                 userList.selectAll()
81274                     .data(subset)
81275                     .enter()
81276                     .append('a')
81277                     .attr('class', 'user-link')
81278                     .attr('href', function(d) { return osm.userURL(d); })
81279                     .attr('target', '_blank')
81280                     .text(String);
81281
81282                 if (u.length > limit) {
81283                     var count = d3_select(document.createElement('span'));
81284
81285                     count.append('a')
81286                         .attr('target', '_blank')
81287                         .attr('href', function() {
81288                             return osm.changesetsURL(context.map().center(), context.map().zoom());
81289                         })
81290                         .text(u.length - limit + 1);
81291
81292                     wrap.append('span')
81293                         .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
81294
81295                 } else {
81296                     wrap.append('span')
81297                         .html(t('contributors.list', { users: userList.html() }));
81298                 }
81299
81300                 if (!u.length) {
81301                     hidden = true;
81302                     wrap
81303                         .transition()
81304                         .style('opacity', 0);
81305
81306                 } else if (hidden) {
81307                     wrap
81308                         .transition()
81309                         .style('opacity', 1);
81310                 }
81311             }
81312
81313
81314             return function(selection) {
81315                 if (!osm) return;
81316                 wrap = selection;
81317                 update();
81318
81319                 osm.on('loaded.contributors', debouncedUpdate);
81320                 context.map().on('move.contributors', debouncedUpdate);
81321             };
81322         }
81323
81324         function uiFeatureInfo(context) {
81325             function update(selection) {
81326                 var features = context.features();
81327                 var stats = features.stats();
81328                 var count = 0;
81329                 var hiddenList = features.hidden().map(function(k) {
81330                     if (stats[k]) {
81331                         count += stats[k];
81332                         return String(stats[k]) + ' ' + t('feature.' + k + '.description');
81333                     }
81334                 }).filter(Boolean);
81335
81336                 selection.html('');
81337
81338                 if (hiddenList.length) {
81339                     var tooltipBehavior = tooltip()
81340                         .placement('top')
81341                         .html(true)
81342                         .title(function() {
81343                             return uiTooltipHtml(hiddenList.join('<br/>'));
81344                         });
81345
81346                     var warning = selection.append('a')
81347                         .attr('class', 'chip')
81348                         .attr('href', '#')
81349                         .attr('tabindex', -1)
81350                         .html(t('feature_info.hidden_warning', { count: count }))
81351                         .call(tooltipBehavior)
81352                         .on('click', function() {
81353                             event.preventDefault();
81354
81355                             tooltipBehavior.hide(warning);
81356                             // open the Map Data pane
81357                             context.ui().togglePanes(d3_select('.map-panes .map-data-pane'));
81358                         });
81359                 }
81360
81361                 selection
81362                     .classed('hide', !hiddenList.length);
81363             }
81364
81365
81366             return function(selection) {
81367                 update(selection);
81368
81369                 context.features().on('change.feature_info', function() {
81370                     update(selection);
81371                 });
81372             };
81373         }
81374
81375         function uiFullScreen(context) {
81376             var element = context.container().node();
81377             // var button = d3_select(null);
81378
81379
81380             function getFullScreenFn() {
81381                 if (element.requestFullscreen) {
81382                     return element.requestFullscreen;
81383                 } else if (element.msRequestFullscreen) {
81384                     return element.msRequestFullscreen;
81385                 } else if (element.mozRequestFullScreen) {
81386                     return element.mozRequestFullScreen;
81387                 } else if (element.webkitRequestFullscreen) {
81388                     return element.webkitRequestFullscreen;
81389                 }
81390             }
81391
81392
81393             function getExitFullScreenFn() {
81394                 if (document.exitFullscreen) {
81395                     return document.exitFullscreen;
81396                 } else if (document.msExitFullscreen) {
81397                     return document.msExitFullscreen;
81398                 } else if (document.mozCancelFullScreen) {
81399                     return document.mozCancelFullScreen;
81400                 } else if (document.webkitExitFullscreen) {
81401                     return document.webkitExitFullscreen;
81402                 }
81403             }
81404
81405
81406             function isFullScreen() {
81407                 return document.fullscreenElement ||
81408                     document.mozFullScreenElement ||
81409                     document.webkitFullscreenElement ||
81410                     document.msFullscreenElement;
81411             }
81412
81413
81414             function isSupported() {
81415                 return !!getFullScreenFn();
81416             }
81417
81418
81419             function fullScreen() {
81420                 event.preventDefault();
81421                 if (!isFullScreen()) {
81422                     // button.classed('active', true);
81423                     getFullScreenFn().apply(element);
81424                 } else {
81425                     // button.classed('active', false);
81426                     getExitFullScreenFn().apply(document);
81427                 }
81428             }
81429
81430
81431             return function() { // selection) {
81432                 if (!isSupported()) return;
81433
81434                 // button = selection.append('button')
81435                 //     .attr('title', t('full_screen'))
81436                 //     .attr('tabindex', -1)
81437                 //     .on('click', fullScreen)
81438                 //     .call(tooltip);
81439
81440                 // button.append('span')
81441                 //     .attr('class', 'icon full-screen');
81442
81443                 var detected = utilDetect();
81444                 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
81445                 context.keybinding().on(keys, fullScreen);
81446             };
81447         }
81448
81449         function uiGeolocate(context) {
81450             var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
81451             var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
81452             var layer = context.layers().layer('geolocate');
81453             var _position;
81454             var _extent;
81455             var _timeoutID;
81456
81457
81458             function click() {
81459                 if (context.inIntro()) return;
81460                 context.enter(modeBrowse(context));
81461                 if (!layer.enabled()) {
81462                     if (!_position) {
81463                         context.container().call(locating);
81464                         navigator.geolocation.getCurrentPosition(success, error, geoOptions);
81465                     } else {
81466                         zoomTo();
81467                     }
81468                 } else {
81469                     layer.enabled(null, false);
81470                 }
81471                 // This timeout ensures that we still call finish() even if
81472                 // the user declines to share their location in Firefox
81473                 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
81474             }
81475
81476             function zoomTo() {
81477                 var map = context.map();
81478                 layer.enabled(_position, true);
81479                 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
81480             }
81481
81482
81483             function success(geolocation) {
81484                 _position = geolocation;
81485                 var coords = _position.coords;
81486                 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
81487                 zoomTo();
81488                 finish();
81489             }
81490
81491
81492             function error() {
81493                 finish();
81494             }
81495
81496
81497             function finish() {
81498                 locating.close();  // unblock ui
81499                 if (_timeoutID) { clearTimeout(_timeoutID); }
81500                 _timeoutID = undefined;
81501             }
81502
81503
81504             return function(selection) {
81505                 if (!navigator.geolocation) return;
81506
81507                 selection
81508                     .append('button')
81509                     .attr('title', t('geolocate.title'))
81510                     .on('click', click)
81511                     .call(svgIcon('#iD-icon-geolocate', 'light'))
81512                     .call(tooltip()
81513                         .placement((textDirection === 'rtl') ? 'right' : 'left'));
81514             };
81515         }
81516
81517         var marked = createCommonjsModule(function (module, exports) {
81518         (function(root) {
81519
81520         /**
81521          * Block-Level Grammar
81522          */
81523
81524         var block = {
81525           newline: /^\n+/,
81526           code: /^( {4}[^\n]+\n*)+/,
81527           fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
81528           hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
81529           heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
81530           blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
81531           list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
81532           html: '^ {0,3}(?:' // optional indentation
81533             + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
81534             + '|comment[^\\n]*(\\n+|$)' // (2)
81535             + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
81536             + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
81537             + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
81538             + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
81539             + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
81540             + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
81541             + ')',
81542           def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
81543           nptable: noop,
81544           table: noop,
81545           lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
81546           // regex template, placeholders will be replaced according to different paragraph
81547           // interruption rules of commonmark and the original markdown spec:
81548           _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
81549           text: /^[^\n]+/
81550         };
81551
81552         block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
81553         block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
81554         block.def = edit(block.def)
81555           .replace('label', block._label)
81556           .replace('title', block._title)
81557           .getRegex();
81558
81559         block.bullet = /(?:[*+-]|\d{1,9}\.)/;
81560         block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
81561         block.item = edit(block.item, 'gm')
81562           .replace(/bull/g, block.bullet)
81563           .getRegex();
81564
81565         block.list = edit(block.list)
81566           .replace(/bull/g, block.bullet)
81567           .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
81568           .replace('def', '\\n+(?=' + block.def.source + ')')
81569           .getRegex();
81570
81571         block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
81572           + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
81573           + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
81574           + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
81575           + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
81576           + '|track|ul';
81577         block._comment = /<!--(?!-?>)[\s\S]*?-->/;
81578         block.html = edit(block.html, 'i')
81579           .replace('comment', block._comment)
81580           .replace('tag', block._tag)
81581           .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
81582           .getRegex();
81583
81584         block.paragraph = edit(block._paragraph)
81585           .replace('hr', block.hr)
81586           .replace('heading', ' {0,3}#{1,6} +')
81587           .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
81588           .replace('blockquote', ' {0,3}>')
81589           .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
81590           .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
81591           .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
81592           .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
81593           .getRegex();
81594
81595         block.blockquote = edit(block.blockquote)
81596           .replace('paragraph', block.paragraph)
81597           .getRegex();
81598
81599         /**
81600          * Normal Block Grammar
81601          */
81602
81603         block.normal = merge({}, block);
81604
81605         /**
81606          * GFM Block Grammar
81607          */
81608
81609         block.gfm = merge({}, block.normal, {
81610           nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
81611           table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
81612         });
81613
81614         /**
81615          * Pedantic grammar (original John Gruber's loose markdown specification)
81616          */
81617
81618         block.pedantic = merge({}, block.normal, {
81619           html: edit(
81620             '^ *(?:comment *(?:\\n|\\s*$)'
81621             + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
81622             + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
81623             .replace('comment', block._comment)
81624             .replace(/tag/g, '(?!(?:'
81625               + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
81626               + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
81627               + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
81628             .getRegex(),
81629           def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
81630           heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
81631           fences: noop, // fences not supported
81632           paragraph: edit(block.normal._paragraph)
81633             .replace('hr', block.hr)
81634             .replace('heading', ' *#{1,6} *[^\n]')
81635             .replace('lheading', block.lheading)
81636             .replace('blockquote', ' {0,3}>')
81637             .replace('|fences', '')
81638             .replace('|list', '')
81639             .replace('|html', '')
81640             .getRegex()
81641         });
81642
81643         /**
81644          * Block Lexer
81645          */
81646
81647         function Lexer(options) {
81648           this.tokens = [];
81649           this.tokens.links = Object.create(null);
81650           this.options = options || marked.defaults;
81651           this.rules = block.normal;
81652
81653           if (this.options.pedantic) {
81654             this.rules = block.pedantic;
81655           } else if (this.options.gfm) {
81656             this.rules = block.gfm;
81657           }
81658         }
81659
81660         /**
81661          * Expose Block Rules
81662          */
81663
81664         Lexer.rules = block;
81665
81666         /**
81667          * Static Lex Method
81668          */
81669
81670         Lexer.lex = function(src, options) {
81671           var lexer = new Lexer(options);
81672           return lexer.lex(src);
81673         };
81674
81675         /**
81676          * Preprocessing
81677          */
81678
81679         Lexer.prototype.lex = function(src) {
81680           src = src
81681             .replace(/\r\n|\r/g, '\n')
81682             .replace(/\t/g, '    ')
81683             .replace(/\u00a0/g, ' ')
81684             .replace(/\u2424/g, '\n');
81685
81686           return this.token(src, true);
81687         };
81688
81689         /**
81690          * Lexing
81691          */
81692
81693         Lexer.prototype.token = function(src, top) {
81694           src = src.replace(/^ +$/gm, '');
81695           var next,
81696               loose,
81697               cap,
81698               bull,
81699               b,
81700               item,
81701               listStart,
81702               listItems,
81703               t,
81704               space,
81705               i,
81706               tag,
81707               l,
81708               isordered,
81709               istask,
81710               ischecked;
81711
81712           while (src) {
81713             // newline
81714             if (cap = this.rules.newline.exec(src)) {
81715               src = src.substring(cap[0].length);
81716               if (cap[0].length > 1) {
81717                 this.tokens.push({
81718                   type: 'space'
81719                 });
81720               }
81721             }
81722
81723             // code
81724             if (cap = this.rules.code.exec(src)) {
81725               var lastToken = this.tokens[this.tokens.length - 1];
81726               src = src.substring(cap[0].length);
81727               // An indented code block cannot interrupt a paragraph.
81728               if (lastToken && lastToken.type === 'paragraph') {
81729                 lastToken.text += '\n' + cap[0].trimRight();
81730               } else {
81731                 cap = cap[0].replace(/^ {4}/gm, '');
81732                 this.tokens.push({
81733                   type: 'code',
81734                   codeBlockStyle: 'indented',
81735                   text: !this.options.pedantic
81736                     ? rtrim(cap, '\n')
81737                     : cap
81738                 });
81739               }
81740               continue;
81741             }
81742
81743             // fences
81744             if (cap = this.rules.fences.exec(src)) {
81745               src = src.substring(cap[0].length);
81746               this.tokens.push({
81747                 type: 'code',
81748                 lang: cap[2] ? cap[2].trim() : cap[2],
81749                 text: cap[3] || ''
81750               });
81751               continue;
81752             }
81753
81754             // heading
81755             if (cap = this.rules.heading.exec(src)) {
81756               src = src.substring(cap[0].length);
81757               this.tokens.push({
81758                 type: 'heading',
81759                 depth: cap[1].length,
81760                 text: cap[2]
81761               });
81762               continue;
81763             }
81764
81765             // table no leading pipe (gfm)
81766             if (cap = this.rules.nptable.exec(src)) {
81767               item = {
81768                 type: 'table',
81769                 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
81770                 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
81771                 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
81772               };
81773
81774               if (item.header.length === item.align.length) {
81775                 src = src.substring(cap[0].length);
81776
81777                 for (i = 0; i < item.align.length; i++) {
81778                   if (/^ *-+: *$/.test(item.align[i])) {
81779                     item.align[i] = 'right';
81780                   } else if (/^ *:-+: *$/.test(item.align[i])) {
81781                     item.align[i] = 'center';
81782                   } else if (/^ *:-+ *$/.test(item.align[i])) {
81783                     item.align[i] = 'left';
81784                   } else {
81785                     item.align[i] = null;
81786                   }
81787                 }
81788
81789                 for (i = 0; i < item.cells.length; i++) {
81790                   item.cells[i] = splitCells(item.cells[i], item.header.length);
81791                 }
81792
81793                 this.tokens.push(item);
81794
81795                 continue;
81796               }
81797             }
81798
81799             // hr
81800             if (cap = this.rules.hr.exec(src)) {
81801               src = src.substring(cap[0].length);
81802               this.tokens.push({
81803                 type: 'hr'
81804               });
81805               continue;
81806             }
81807
81808             // blockquote
81809             if (cap = this.rules.blockquote.exec(src)) {
81810               src = src.substring(cap[0].length);
81811
81812               this.tokens.push({
81813                 type: 'blockquote_start'
81814               });
81815
81816               cap = cap[0].replace(/^ *> ?/gm, '');
81817
81818               // Pass `top` to keep the current
81819               // "toplevel" state. This is exactly
81820               // how markdown.pl works.
81821               this.token(cap, top);
81822
81823               this.tokens.push({
81824                 type: 'blockquote_end'
81825               });
81826
81827               continue;
81828             }
81829
81830             // list
81831             if (cap = this.rules.list.exec(src)) {
81832               src = src.substring(cap[0].length);
81833               bull = cap[2];
81834               isordered = bull.length > 1;
81835
81836               listStart = {
81837                 type: 'list_start',
81838                 ordered: isordered,
81839                 start: isordered ? +bull : '',
81840                 loose: false
81841               };
81842
81843               this.tokens.push(listStart);
81844
81845               // Get each top-level item.
81846               cap = cap[0].match(this.rules.item);
81847
81848               listItems = [];
81849               next = false;
81850               l = cap.length;
81851               i = 0;
81852
81853               for (; i < l; i++) {
81854                 item = cap[i];
81855
81856                 // Remove the list item's bullet
81857                 // so it is seen as the next token.
81858                 space = item.length;
81859                 item = item.replace(/^ *([*+-]|\d+\.) */, '');
81860
81861                 // Outdent whatever the
81862                 // list item contains. Hacky.
81863                 if (~item.indexOf('\n ')) {
81864                   space -= item.length;
81865                   item = !this.options.pedantic
81866                     ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
81867                     : item.replace(/^ {1,4}/gm, '');
81868                 }
81869
81870                 // Determine whether the next list item belongs here.
81871                 // Backpedal if it does not belong in this list.
81872                 if (i !== l - 1) {
81873                   b = block.bullet.exec(cap[i + 1])[0];
81874                   if (bull.length > 1 ? b.length === 1
81875                     : (b.length > 1 || (this.options.smartLists && b !== bull))) {
81876                     src = cap.slice(i + 1).join('\n') + src;
81877                     i = l - 1;
81878                   }
81879                 }
81880
81881                 // Determine whether item is loose or not.
81882                 // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
81883                 // for discount behavior.
81884                 loose = next || /\n\n(?!\s*$)/.test(item);
81885                 if (i !== l - 1) {
81886                   next = item.charAt(item.length - 1) === '\n';
81887                   if (!loose) loose = next;
81888                 }
81889
81890                 if (loose) {
81891                   listStart.loose = true;
81892                 }
81893
81894                 // Check for task list items
81895                 istask = /^\[[ xX]\] /.test(item);
81896                 ischecked = undefined;
81897                 if (istask) {
81898                   ischecked = item[1] !== ' ';
81899                   item = item.replace(/^\[[ xX]\] +/, '');
81900                 }
81901
81902                 t = {
81903                   type: 'list_item_start',
81904                   task: istask,
81905                   checked: ischecked,
81906                   loose: loose
81907                 };
81908
81909                 listItems.push(t);
81910                 this.tokens.push(t);
81911
81912                 // Recurse.
81913                 this.token(item, false);
81914
81915                 this.tokens.push({
81916                   type: 'list_item_end'
81917                 });
81918               }
81919
81920               if (listStart.loose) {
81921                 l = listItems.length;
81922                 i = 0;
81923                 for (; i < l; i++) {
81924                   listItems[i].loose = true;
81925                 }
81926               }
81927
81928               this.tokens.push({
81929                 type: 'list_end'
81930               });
81931
81932               continue;
81933             }
81934
81935             // html
81936             if (cap = this.rules.html.exec(src)) {
81937               src = src.substring(cap[0].length);
81938               this.tokens.push({
81939                 type: this.options.sanitize
81940                   ? 'paragraph'
81941                   : 'html',
81942                 pre: !this.options.sanitizer
81943                   && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
81944                 text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]
81945               });
81946               continue;
81947             }
81948
81949             // def
81950             if (top && (cap = this.rules.def.exec(src))) {
81951               src = src.substring(cap[0].length);
81952               if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
81953               tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
81954               if (!this.tokens.links[tag]) {
81955                 this.tokens.links[tag] = {
81956                   href: cap[2],
81957                   title: cap[3]
81958                 };
81959               }
81960               continue;
81961             }
81962
81963             // table (gfm)
81964             if (cap = this.rules.table.exec(src)) {
81965               item = {
81966                 type: 'table',
81967                 header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
81968                 align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
81969                 cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
81970               };
81971
81972               if (item.header.length === item.align.length) {
81973                 src = src.substring(cap[0].length);
81974
81975                 for (i = 0; i < item.align.length; i++) {
81976                   if (/^ *-+: *$/.test(item.align[i])) {
81977                     item.align[i] = 'right';
81978                   } else if (/^ *:-+: *$/.test(item.align[i])) {
81979                     item.align[i] = 'center';
81980                   } else if (/^ *:-+ *$/.test(item.align[i])) {
81981                     item.align[i] = 'left';
81982                   } else {
81983                     item.align[i] = null;
81984                   }
81985                 }
81986
81987                 for (i = 0; i < item.cells.length; i++) {
81988                   item.cells[i] = splitCells(
81989                     item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
81990                     item.header.length);
81991                 }
81992
81993                 this.tokens.push(item);
81994
81995                 continue;
81996               }
81997             }
81998
81999             // lheading
82000             if (cap = this.rules.lheading.exec(src)) {
82001               src = src.substring(cap[0].length);
82002               this.tokens.push({
82003                 type: 'heading',
82004                 depth: cap[2].charAt(0) === '=' ? 1 : 2,
82005                 text: cap[1]
82006               });
82007               continue;
82008             }
82009
82010             // top-level paragraph
82011             if (top && (cap = this.rules.paragraph.exec(src))) {
82012               src = src.substring(cap[0].length);
82013               this.tokens.push({
82014                 type: 'paragraph',
82015                 text: cap[1].charAt(cap[1].length - 1) === '\n'
82016                   ? cap[1].slice(0, -1)
82017                   : cap[1]
82018               });
82019               continue;
82020             }
82021
82022             // text
82023             if (cap = this.rules.text.exec(src)) {
82024               // Top-level should never reach here.
82025               src = src.substring(cap[0].length);
82026               this.tokens.push({
82027                 type: 'text',
82028                 text: cap[0]
82029               });
82030               continue;
82031             }
82032
82033             if (src) {
82034               throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
82035             }
82036           }
82037
82038           return this.tokens;
82039         };
82040
82041         /**
82042          * Inline-Level Grammar
82043          */
82044
82045         var inline = {
82046           escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
82047           autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
82048           url: noop,
82049           tag: '^comment'
82050             + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
82051             + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
82052             + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
82053             + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
82054             + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
82055           link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
82056           reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
82057           nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
82058           strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
82059           em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
82060           code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
82061           br: /^( {2,}|\\)\n(?!\s*$)/,
82062           del: noop,
82063           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
82064         };
82065
82066         // list of punctuation marks from common mark spec
82067         // without ` and ] to workaround Rule 17 (inline code blocks/links)
82068         inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
82069         inline.em = edit(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
82070
82071         inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
82072
82073         inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
82074         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])?)+(?![-_])/;
82075         inline.autolink = edit(inline.autolink)
82076           .replace('scheme', inline._scheme)
82077           .replace('email', inline._email)
82078           .getRegex();
82079
82080         inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
82081
82082         inline.tag = edit(inline.tag)
82083           .replace('comment', block._comment)
82084           .replace('attribute', inline._attribute)
82085           .getRegex();
82086
82087         inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
82088         inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
82089         inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
82090
82091         inline.link = edit(inline.link)
82092           .replace('label', inline._label)
82093           .replace('href', inline._href)
82094           .replace('title', inline._title)
82095           .getRegex();
82096
82097         inline.reflink = edit(inline.reflink)
82098           .replace('label', inline._label)
82099           .getRegex();
82100
82101         /**
82102          * Normal Inline Grammar
82103          */
82104
82105         inline.normal = merge({}, inline);
82106
82107         /**
82108          * Pedantic Inline Grammar
82109          */
82110
82111         inline.pedantic = merge({}, inline.normal, {
82112           strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
82113           em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
82114           link: edit(/^!?\[(label)\]\((.*?)\)/)
82115             .replace('label', inline._label)
82116             .getRegex(),
82117           reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
82118             .replace('label', inline._label)
82119             .getRegex()
82120         });
82121
82122         /**
82123          * GFM Inline Grammar
82124          */
82125
82126         inline.gfm = merge({}, inline.normal, {
82127           escape: edit(inline.escape).replace('])', '~|])').getRegex(),
82128           _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
82129           url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
82130           _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
82131           del: /^~+(?=\S)([\s\S]*?\S)~+/,
82132           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
82133         });
82134
82135         inline.gfm.url = edit(inline.gfm.url, 'i')
82136           .replace('email', inline.gfm._extended_email)
82137           .getRegex();
82138         /**
82139          * GFM + Line Breaks Inline Grammar
82140          */
82141
82142         inline.breaks = merge({}, inline.gfm, {
82143           br: edit(inline.br).replace('{2,}', '*').getRegex(),
82144           text: edit(inline.gfm.text)
82145             .replace('\\b_', '\\b_| {2,}\\n')
82146             .replace(/\{2,\}/g, '*')
82147             .getRegex()
82148         });
82149
82150         /**
82151          * Inline Lexer & Compiler
82152          */
82153
82154         function InlineLexer(links, options) {
82155           this.options = options || marked.defaults;
82156           this.links = links;
82157           this.rules = inline.normal;
82158           this.renderer = this.options.renderer || new Renderer();
82159           this.renderer.options = this.options;
82160
82161           if (!this.links) {
82162             throw new Error('Tokens array requires a `links` property.');
82163           }
82164
82165           if (this.options.pedantic) {
82166             this.rules = inline.pedantic;
82167           } else if (this.options.gfm) {
82168             if (this.options.breaks) {
82169               this.rules = inline.breaks;
82170             } else {
82171               this.rules = inline.gfm;
82172             }
82173           }
82174         }
82175
82176         /**
82177          * Expose Inline Rules
82178          */
82179
82180         InlineLexer.rules = inline;
82181
82182         /**
82183          * Static Lexing/Compiling Method
82184          */
82185
82186         InlineLexer.output = function(src, links, options) {
82187           var inline = new InlineLexer(links, options);
82188           return inline.output(src);
82189         };
82190
82191         /**
82192          * Lexing/Compiling
82193          */
82194
82195         InlineLexer.prototype.output = function(src) {
82196           var out = '',
82197               link,
82198               text,
82199               href,
82200               title,
82201               cap,
82202               prevCapZero;
82203
82204           while (src) {
82205             // escape
82206             if (cap = this.rules.escape.exec(src)) {
82207               src = src.substring(cap[0].length);
82208               out += escape(cap[1]);
82209               continue;
82210             }
82211
82212             // tag
82213             if (cap = this.rules.tag.exec(src)) {
82214               if (!this.inLink && /^<a /i.test(cap[0])) {
82215                 this.inLink = true;
82216               } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
82217                 this.inLink = false;
82218               }
82219               if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
82220                 this.inRawBlock = true;
82221               } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
82222                 this.inRawBlock = false;
82223               }
82224
82225               src = src.substring(cap[0].length);
82226               out += this.options.sanitize
82227                 ? this.options.sanitizer
82228                   ? this.options.sanitizer(cap[0])
82229                   : escape(cap[0])
82230                 : cap[0];
82231               continue;
82232             }
82233
82234             // link
82235             if (cap = this.rules.link.exec(src)) {
82236               var lastParenIndex = findClosingBracket(cap[2], '()');
82237               if (lastParenIndex > -1) {
82238                 var linkLen = 4 + cap[1].length + lastParenIndex;
82239                 cap[2] = cap[2].substring(0, lastParenIndex);
82240                 cap[0] = cap[0].substring(0, linkLen).trim();
82241                 cap[3] = '';
82242               }
82243               src = src.substring(cap[0].length);
82244               this.inLink = true;
82245               href = cap[2];
82246               if (this.options.pedantic) {
82247                 link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
82248
82249                 if (link) {
82250                   href = link[1];
82251                   title = link[3];
82252                 } else {
82253                   title = '';
82254                 }
82255               } else {
82256                 title = cap[3] ? cap[3].slice(1, -1) : '';
82257               }
82258               href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
82259               out += this.outputLink(cap, {
82260                 href: InlineLexer.escapes(href),
82261                 title: InlineLexer.escapes(title)
82262               });
82263               this.inLink = false;
82264               continue;
82265             }
82266
82267             // reflink, nolink
82268             if ((cap = this.rules.reflink.exec(src))
82269                 || (cap = this.rules.nolink.exec(src))) {
82270               src = src.substring(cap[0].length);
82271               link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
82272               link = this.links[link.toLowerCase()];
82273               if (!link || !link.href) {
82274                 out += cap[0].charAt(0);
82275                 src = cap[0].substring(1) + src;
82276                 continue;
82277               }
82278               this.inLink = true;
82279               out += this.outputLink(cap, link);
82280               this.inLink = false;
82281               continue;
82282             }
82283
82284             // strong
82285             if (cap = this.rules.strong.exec(src)) {
82286               src = src.substring(cap[0].length);
82287               out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
82288               continue;
82289             }
82290
82291             // em
82292             if (cap = this.rules.em.exec(src)) {
82293               src = src.substring(cap[0].length);
82294               out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
82295               continue;
82296             }
82297
82298             // code
82299             if (cap = this.rules.code.exec(src)) {
82300               src = src.substring(cap[0].length);
82301               out += this.renderer.codespan(escape(cap[2].trim(), true));
82302               continue;
82303             }
82304
82305             // br
82306             if (cap = this.rules.br.exec(src)) {
82307               src = src.substring(cap[0].length);
82308               out += this.renderer.br();
82309               continue;
82310             }
82311
82312             // del (gfm)
82313             if (cap = this.rules.del.exec(src)) {
82314               src = src.substring(cap[0].length);
82315               out += this.renderer.del(this.output(cap[1]));
82316               continue;
82317             }
82318
82319             // autolink
82320             if (cap = this.rules.autolink.exec(src)) {
82321               src = src.substring(cap[0].length);
82322               if (cap[2] === '@') {
82323                 text = escape(this.mangle(cap[1]));
82324                 href = 'mailto:' + text;
82325               } else {
82326                 text = escape(cap[1]);
82327                 href = text;
82328               }
82329               out += this.renderer.link(href, null, text);
82330               continue;
82331             }
82332
82333             // url (gfm)
82334             if (!this.inLink && (cap = this.rules.url.exec(src))) {
82335               if (cap[2] === '@') {
82336                 text = escape(cap[0]);
82337                 href = 'mailto:' + text;
82338               } else {
82339                 // do extended autolink path validation
82340                 do {
82341                   prevCapZero = cap[0];
82342                   cap[0] = this.rules._backpedal.exec(cap[0])[0];
82343                 } while (prevCapZero !== cap[0]);
82344                 text = escape(cap[0]);
82345                 if (cap[1] === 'www.') {
82346                   href = 'http://' + text;
82347                 } else {
82348                   href = text;
82349                 }
82350               }
82351               src = src.substring(cap[0].length);
82352               out += this.renderer.link(href, null, text);
82353               continue;
82354             }
82355
82356             // text
82357             if (cap = this.rules.text.exec(src)) {
82358               src = src.substring(cap[0].length);
82359               if (this.inRawBlock) {
82360                 out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]);
82361               } else {
82362                 out += this.renderer.text(escape(this.smartypants(cap[0])));
82363               }
82364               continue;
82365             }
82366
82367             if (src) {
82368               throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
82369             }
82370           }
82371
82372           return out;
82373         };
82374
82375         InlineLexer.escapes = function(text) {
82376           return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
82377         };
82378
82379         /**
82380          * Compile Link
82381          */
82382
82383         InlineLexer.prototype.outputLink = function(cap, link) {
82384           var href = link.href,
82385               title = link.title ? escape(link.title) : null;
82386
82387           return cap[0].charAt(0) !== '!'
82388             ? this.renderer.link(href, title, this.output(cap[1]))
82389             : this.renderer.image(href, title, escape(cap[1]));
82390         };
82391
82392         /**
82393          * Smartypants Transformations
82394          */
82395
82396         InlineLexer.prototype.smartypants = function(text) {
82397           if (!this.options.smartypants) return text;
82398           return text
82399             // em-dashes
82400             .replace(/---/g, '\u2014')
82401             // en-dashes
82402             .replace(/--/g, '\u2013')
82403             // opening singles
82404             .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
82405             // closing singles & apostrophes
82406             .replace(/'/g, '\u2019')
82407             // opening doubles
82408             .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
82409             // closing doubles
82410             .replace(/"/g, '\u201d')
82411             // ellipses
82412             .replace(/\.{3}/g, '\u2026');
82413         };
82414
82415         /**
82416          * Mangle Links
82417          */
82418
82419         InlineLexer.prototype.mangle = function(text) {
82420           if (!this.options.mangle) return text;
82421           var out = '',
82422               l = text.length,
82423               i = 0,
82424               ch;
82425
82426           for (; i < l; i++) {
82427             ch = text.charCodeAt(i);
82428             if (Math.random() > 0.5) {
82429               ch = 'x' + ch.toString(16);
82430             }
82431             out += '&#' + ch + ';';
82432           }
82433
82434           return out;
82435         };
82436
82437         /**
82438          * Renderer
82439          */
82440
82441         function Renderer(options) {
82442           this.options = options || marked.defaults;
82443         }
82444
82445         Renderer.prototype.code = function(code, infostring, escaped) {
82446           var lang = (infostring || '').match(/\S*/)[0];
82447           if (this.options.highlight) {
82448             var out = this.options.highlight(code, lang);
82449             if (out != null && out !== code) {
82450               escaped = true;
82451               code = out;
82452             }
82453           }
82454
82455           if (!lang) {
82456             return '<pre><code>'
82457               + (escaped ? code : escape(code, true))
82458               + '</code></pre>';
82459           }
82460
82461           return '<pre><code class="'
82462             + this.options.langPrefix
82463             + escape(lang, true)
82464             + '">'
82465             + (escaped ? code : escape(code, true))
82466             + '</code></pre>\n';
82467         };
82468
82469         Renderer.prototype.blockquote = function(quote) {
82470           return '<blockquote>\n' + quote + '</blockquote>\n';
82471         };
82472
82473         Renderer.prototype.html = function(html) {
82474           return html;
82475         };
82476
82477         Renderer.prototype.heading = function(text, level, raw, slugger) {
82478           if (this.options.headerIds) {
82479             return '<h'
82480               + level
82481               + ' id="'
82482               + this.options.headerPrefix
82483               + slugger.slug(raw)
82484               + '">'
82485               + text
82486               + '</h'
82487               + level
82488               + '>\n';
82489           }
82490           // ignore IDs
82491           return '<h' + level + '>' + text + '</h' + level + '>\n';
82492         };
82493
82494         Renderer.prototype.hr = function() {
82495           return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
82496         };
82497
82498         Renderer.prototype.list = function(body, ordered, start) {
82499           var type = ordered ? 'ol' : 'ul',
82500               startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
82501           return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
82502         };
82503
82504         Renderer.prototype.listitem = function(text) {
82505           return '<li>' + text + '</li>\n';
82506         };
82507
82508         Renderer.prototype.checkbox = function(checked) {
82509           return '<input '
82510             + (checked ? 'checked="" ' : '')
82511             + 'disabled="" type="checkbox"'
82512             + (this.options.xhtml ? ' /' : '')
82513             + '> ';
82514         };
82515
82516         Renderer.prototype.paragraph = function(text) {
82517           return '<p>' + text + '</p>\n';
82518         };
82519
82520         Renderer.prototype.table = function(header, body) {
82521           if (body) body = '<tbody>' + body + '</tbody>';
82522
82523           return '<table>\n'
82524             + '<thead>\n'
82525             + header
82526             + '</thead>\n'
82527             + body
82528             + '</table>\n';
82529         };
82530
82531         Renderer.prototype.tablerow = function(content) {
82532           return '<tr>\n' + content + '</tr>\n';
82533         };
82534
82535         Renderer.prototype.tablecell = function(content, flags) {
82536           var type = flags.header ? 'th' : 'td';
82537           var tag = flags.align
82538             ? '<' + type + ' align="' + flags.align + '">'
82539             : '<' + type + '>';
82540           return tag + content + '</' + type + '>\n';
82541         };
82542
82543         // span level renderer
82544         Renderer.prototype.strong = function(text) {
82545           return '<strong>' + text + '</strong>';
82546         };
82547
82548         Renderer.prototype.em = function(text) {
82549           return '<em>' + text + '</em>';
82550         };
82551
82552         Renderer.prototype.codespan = function(text) {
82553           return '<code>' + text + '</code>';
82554         };
82555
82556         Renderer.prototype.br = function() {
82557           return this.options.xhtml ? '<br/>' : '<br>';
82558         };
82559
82560         Renderer.prototype.del = function(text) {
82561           return '<del>' + text + '</del>';
82562         };
82563
82564         Renderer.prototype.link = function(href, title, text) {
82565           href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
82566           if (href === null) {
82567             return text;
82568           }
82569           var out = '<a href="' + escape(href) + '"';
82570           if (title) {
82571             out += ' title="' + title + '"';
82572           }
82573           out += '>' + text + '</a>';
82574           return out;
82575         };
82576
82577         Renderer.prototype.image = function(href, title, text) {
82578           href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
82579           if (href === null) {
82580             return text;
82581           }
82582
82583           var out = '<img src="' + href + '" alt="' + text + '"';
82584           if (title) {
82585             out += ' title="' + title + '"';
82586           }
82587           out += this.options.xhtml ? '/>' : '>';
82588           return out;
82589         };
82590
82591         Renderer.prototype.text = function(text) {
82592           return text;
82593         };
82594
82595         /**
82596          * TextRenderer
82597          * returns only the textual part of the token
82598          */
82599
82600         function TextRenderer() {}
82601
82602         // no need for block level renderers
82603
82604         TextRenderer.prototype.strong =
82605         TextRenderer.prototype.em =
82606         TextRenderer.prototype.codespan =
82607         TextRenderer.prototype.del =
82608         TextRenderer.prototype.text = function(text) {
82609           return text;
82610         };
82611
82612         TextRenderer.prototype.link =
82613         TextRenderer.prototype.image = function(href, title, text) {
82614           return '' + text;
82615         };
82616
82617         TextRenderer.prototype.br = function() {
82618           return '';
82619         };
82620
82621         /**
82622          * Parsing & Compiling
82623          */
82624
82625         function Parser(options) {
82626           this.tokens = [];
82627           this.token = null;
82628           this.options = options || marked.defaults;
82629           this.options.renderer = this.options.renderer || new Renderer();
82630           this.renderer = this.options.renderer;
82631           this.renderer.options = this.options;
82632           this.slugger = new Slugger();
82633         }
82634
82635         /**
82636          * Static Parse Method
82637          */
82638
82639         Parser.parse = function(src, options) {
82640           var parser = new Parser(options);
82641           return parser.parse(src);
82642         };
82643
82644         /**
82645          * Parse Loop
82646          */
82647
82648         Parser.prototype.parse = function(src) {
82649           this.inline = new InlineLexer(src.links, this.options);
82650           // use an InlineLexer with a TextRenderer to extract pure text
82651           this.inlineText = new InlineLexer(
82652             src.links,
82653             merge({}, this.options, { renderer: new TextRenderer() })
82654           );
82655           this.tokens = src.reverse();
82656
82657           var out = '';
82658           while (this.next()) {
82659             out += this.tok();
82660           }
82661
82662           return out;
82663         };
82664
82665         /**
82666          * Next Token
82667          */
82668
82669         Parser.prototype.next = function() {
82670           this.token = this.tokens.pop();
82671           return this.token;
82672         };
82673
82674         /**
82675          * Preview Next Token
82676          */
82677
82678         Parser.prototype.peek = function() {
82679           return this.tokens[this.tokens.length - 1] || 0;
82680         };
82681
82682         /**
82683          * Parse Text Tokens
82684          */
82685
82686         Parser.prototype.parseText = function() {
82687           var body = this.token.text;
82688
82689           while (this.peek().type === 'text') {
82690             body += '\n' + this.next().text;
82691           }
82692
82693           return this.inline.output(body);
82694         };
82695
82696         /**
82697          * Parse Current Token
82698          */
82699
82700         Parser.prototype.tok = function() {
82701           switch (this.token.type) {
82702             case 'space': {
82703               return '';
82704             }
82705             case 'hr': {
82706               return this.renderer.hr();
82707             }
82708             case 'heading': {
82709               return this.renderer.heading(
82710                 this.inline.output(this.token.text),
82711                 this.token.depth,
82712                 unescape(this.inlineText.output(this.token.text)),
82713                 this.slugger);
82714             }
82715             case 'code': {
82716               return this.renderer.code(this.token.text,
82717                 this.token.lang,
82718                 this.token.escaped);
82719             }
82720             case 'table': {
82721               var header = '',
82722                   body = '',
82723                   i,
82724                   row,
82725                   cell,
82726                   j;
82727
82728               // header
82729               cell = '';
82730               for (i = 0; i < this.token.header.length; i++) {
82731                 cell += this.renderer.tablecell(
82732                   this.inline.output(this.token.header[i]),
82733                   { header: true, align: this.token.align[i] }
82734                 );
82735               }
82736               header += this.renderer.tablerow(cell);
82737
82738               for (i = 0; i < this.token.cells.length; i++) {
82739                 row = this.token.cells[i];
82740
82741                 cell = '';
82742                 for (j = 0; j < row.length; j++) {
82743                   cell += this.renderer.tablecell(
82744                     this.inline.output(row[j]),
82745                     { header: false, align: this.token.align[j] }
82746                   );
82747                 }
82748
82749                 body += this.renderer.tablerow(cell);
82750               }
82751               return this.renderer.table(header, body);
82752             }
82753             case 'blockquote_start': {
82754               body = '';
82755
82756               while (this.next().type !== 'blockquote_end') {
82757                 body += this.tok();
82758               }
82759
82760               return this.renderer.blockquote(body);
82761             }
82762             case 'list_start': {
82763               body = '';
82764               var ordered = this.token.ordered,
82765                   start = this.token.start;
82766
82767               while (this.next().type !== 'list_end') {
82768                 body += this.tok();
82769               }
82770
82771               return this.renderer.list(body, ordered, start);
82772             }
82773             case 'list_item_start': {
82774               body = '';
82775               var loose = this.token.loose;
82776               var checked = this.token.checked;
82777               var task = this.token.task;
82778
82779               if (this.token.task) {
82780                 body += this.renderer.checkbox(checked);
82781               }
82782
82783               while (this.next().type !== 'list_item_end') {
82784                 body += !loose && this.token.type === 'text'
82785                   ? this.parseText()
82786                   : this.tok();
82787               }
82788               return this.renderer.listitem(body, task, checked);
82789             }
82790             case 'html': {
82791               // TODO parse inline content if parameter markdown=1
82792               return this.renderer.html(this.token.text);
82793             }
82794             case 'paragraph': {
82795               return this.renderer.paragraph(this.inline.output(this.token.text));
82796             }
82797             case 'text': {
82798               return this.renderer.paragraph(this.parseText());
82799             }
82800             default: {
82801               var errMsg = 'Token with "' + this.token.type + '" type was not found.';
82802               if (this.options.silent) {
82803                 console.log(errMsg);
82804               } else {
82805                 throw new Error(errMsg);
82806               }
82807             }
82808           }
82809         };
82810
82811         /**
82812          * Slugger generates header id
82813          */
82814
82815         function Slugger() {
82816           this.seen = {};
82817         }
82818
82819         /**
82820          * Convert string to unique id
82821          */
82822
82823         Slugger.prototype.slug = function(value) {
82824           var slug = value
82825             .toLowerCase()
82826             .trim()
82827             .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
82828             .replace(/\s/g, '-');
82829
82830           if (this.seen.hasOwnProperty(slug)) {
82831             var originalSlug = slug;
82832             do {
82833               this.seen[originalSlug]++;
82834               slug = originalSlug + '-' + this.seen[originalSlug];
82835             } while (this.seen.hasOwnProperty(slug));
82836           }
82837           this.seen[slug] = 0;
82838
82839           return slug;
82840         };
82841
82842         /**
82843          * Helpers
82844          */
82845
82846         function escape(html, encode) {
82847           if (encode) {
82848             if (escape.escapeTest.test(html)) {
82849               return html.replace(escape.escapeReplace, function(ch) { return escape.replacements[ch]; });
82850             }
82851           } else {
82852             if (escape.escapeTestNoEncode.test(html)) {
82853               return html.replace(escape.escapeReplaceNoEncode, function(ch) { return escape.replacements[ch]; });
82854             }
82855           }
82856
82857           return html;
82858         }
82859
82860         escape.escapeTest = /[&<>"']/;
82861         escape.escapeReplace = /[&<>"']/g;
82862         escape.replacements = {
82863           '&': '&amp;',
82864           '<': '&lt;',
82865           '>': '&gt;',
82866           '"': '&quot;',
82867           "'": '&#39;'
82868         };
82869
82870         escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
82871         escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
82872
82873         function unescape(html) {
82874           // explicitly match decimal, hex, and named HTML entities
82875           return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
82876             n = n.toLowerCase();
82877             if (n === 'colon') return ':';
82878             if (n.charAt(0) === '#') {
82879               return n.charAt(1) === 'x'
82880                 ? String.fromCharCode(parseInt(n.substring(2), 16))
82881                 : String.fromCharCode(+n.substring(1));
82882             }
82883             return '';
82884           });
82885         }
82886
82887         function edit(regex, opt) {
82888           regex = regex.source || regex;
82889           opt = opt || '';
82890           return {
82891             replace: function(name, val) {
82892               val = val.source || val;
82893               val = val.replace(/(^|[^\[])\^/g, '$1');
82894               regex = regex.replace(name, val);
82895               return this;
82896             },
82897             getRegex: function() {
82898               return new RegExp(regex, opt);
82899             }
82900           };
82901         }
82902
82903         function cleanUrl(sanitize, base, href) {
82904           if (sanitize) {
82905             try {
82906               var prot = decodeURIComponent(unescape(href))
82907                 .replace(/[^\w:]/g, '')
82908                 .toLowerCase();
82909             } catch (e) {
82910               return null;
82911             }
82912             if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
82913               return null;
82914             }
82915           }
82916           if (base && !originIndependentUrl.test(href)) {
82917             href = resolveUrl(base, href);
82918           }
82919           try {
82920             href = encodeURI(href).replace(/%25/g, '%');
82921           } catch (e) {
82922             return null;
82923           }
82924           return href;
82925         }
82926
82927         function resolveUrl(base, href) {
82928           if (!baseUrls[' ' + base]) {
82929             // we can ignore everything in base after the last slash of its path component,
82930             // but we might need to add _that_
82931             // https://tools.ietf.org/html/rfc3986#section-3
82932             if (/^[^:]+:\/*[^/]*$/.test(base)) {
82933               baseUrls[' ' + base] = base + '/';
82934             } else {
82935               baseUrls[' ' + base] = rtrim(base, '/', true);
82936             }
82937           }
82938           base = baseUrls[' ' + base];
82939
82940           if (href.slice(0, 2) === '//') {
82941             return base.replace(/:[\s\S]*/, ':') + href;
82942           } else if (href.charAt(0) === '/') {
82943             return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
82944           } else {
82945             return base + href;
82946           }
82947         }
82948         var baseUrls = {};
82949         var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
82950
82951         function noop() {}
82952         noop.exec = noop;
82953
82954         function merge(obj) {
82955           var i = 1,
82956               target,
82957               key;
82958
82959           for (; i < arguments.length; i++) {
82960             target = arguments[i];
82961             for (key in target) {
82962               if (Object.prototype.hasOwnProperty.call(target, key)) {
82963                 obj[key] = target[key];
82964               }
82965             }
82966           }
82967
82968           return obj;
82969         }
82970
82971         function splitCells(tableRow, count) {
82972           // ensure that every cell-delimiting pipe has a space
82973           // before it to distinguish it from an escaped pipe
82974           var row = tableRow.replace(/\|/g, function(match, offset, str) {
82975                 var escaped = false,
82976                     curr = offset;
82977                 while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
82978                 if (escaped) {
82979                   // odd number of slashes means | is escaped
82980                   // so we leave it alone
82981                   return '|';
82982                 } else {
82983                   // add space before unescaped |
82984                   return ' |';
82985                 }
82986               }),
82987               cells = row.split(/ \|/),
82988               i = 0;
82989
82990           if (cells.length > count) {
82991             cells.splice(count);
82992           } else {
82993             while (cells.length < count) cells.push('');
82994           }
82995
82996           for (; i < cells.length; i++) {
82997             // leading or trailing whitespace is ignored per the gfm spec
82998             cells[i] = cells[i].trim().replace(/\\\|/g, '|');
82999           }
83000           return cells;
83001         }
83002
83003         // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
83004         // /c*$/ is vulnerable to REDOS.
83005         // invert: Remove suffix of non-c chars instead. Default falsey.
83006         function rtrim(str, c, invert) {
83007           if (str.length === 0) {
83008             return '';
83009           }
83010
83011           // Length of suffix matching the invert condition.
83012           var suffLen = 0;
83013
83014           // Step left until we fail to match the invert condition.
83015           while (suffLen < str.length) {
83016             var currChar = str.charAt(str.length - suffLen - 1);
83017             if (currChar === c && !invert) {
83018               suffLen++;
83019             } else if (currChar !== c && invert) {
83020               suffLen++;
83021             } else {
83022               break;
83023             }
83024           }
83025
83026           return str.substr(0, str.length - suffLen);
83027         }
83028
83029         function findClosingBracket(str, b) {
83030           if (str.indexOf(b[1]) === -1) {
83031             return -1;
83032           }
83033           var level = 0;
83034           for (var i = 0; i < str.length; i++) {
83035             if (str[i] === '\\') {
83036               i++;
83037             } else if (str[i] === b[0]) {
83038               level++;
83039             } else if (str[i] === b[1]) {
83040               level--;
83041               if (level < 0) {
83042                 return i;
83043               }
83044             }
83045           }
83046           return -1;
83047         }
83048
83049         function checkSanitizeDeprecation(opt) {
83050           if (opt && opt.sanitize && !opt.silent) {
83051             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');
83052           }
83053         }
83054
83055         /**
83056          * Marked
83057          */
83058
83059         function marked(src, opt, callback) {
83060           // throw error in case of non string input
83061           if (typeof src === 'undefined' || src === null) {
83062             throw new Error('marked(): input parameter is undefined or null');
83063           }
83064           if (typeof src !== 'string') {
83065             throw new Error('marked(): input parameter is of type '
83066               + Object.prototype.toString.call(src) + ', string expected');
83067           }
83068
83069           if (callback || typeof opt === 'function') {
83070             if (!callback) {
83071               callback = opt;
83072               opt = null;
83073             }
83074
83075             opt = merge({}, marked.defaults, opt || {});
83076             checkSanitizeDeprecation(opt);
83077
83078             var highlight = opt.highlight,
83079                 tokens,
83080                 pending,
83081                 i = 0;
83082
83083             try {
83084               tokens = Lexer.lex(src, opt);
83085             } catch (e) {
83086               return callback(e);
83087             }
83088
83089             pending = tokens.length;
83090
83091             var done = function(err) {
83092               if (err) {
83093                 opt.highlight = highlight;
83094                 return callback(err);
83095               }
83096
83097               var out;
83098
83099               try {
83100                 out = Parser.parse(tokens, opt);
83101               } catch (e) {
83102                 err = e;
83103               }
83104
83105               opt.highlight = highlight;
83106
83107               return err
83108                 ? callback(err)
83109                 : callback(null, out);
83110             };
83111
83112             if (!highlight || highlight.length < 3) {
83113               return done();
83114             }
83115
83116             delete opt.highlight;
83117
83118             if (!pending) return done();
83119
83120             for (; i < tokens.length; i++) {
83121               (function(token) {
83122                 if (token.type !== 'code') {
83123                   return --pending || done();
83124                 }
83125                 return highlight(token.text, token.lang, function(err, code) {
83126                   if (err) return done(err);
83127                   if (code == null || code === token.text) {
83128                     return --pending || done();
83129                   }
83130                   token.text = code;
83131                   token.escaped = true;
83132                   --pending || done();
83133                 });
83134               })(tokens[i]);
83135             }
83136
83137             return;
83138           }
83139           try {
83140             if (opt) opt = merge({}, marked.defaults, opt);
83141             checkSanitizeDeprecation(opt);
83142             return Parser.parse(Lexer.lex(src, opt), opt);
83143           } catch (e) {
83144             e.message += '\nPlease report this to https://github.com/markedjs/marked.';
83145             if ((opt || marked.defaults).silent) {
83146               return '<p>An error occurred:</p><pre>'
83147                 + escape(e.message + '', true)
83148                 + '</pre>';
83149             }
83150             throw e;
83151           }
83152         }
83153
83154         /**
83155          * Options
83156          */
83157
83158         marked.options =
83159         marked.setOptions = function(opt) {
83160           merge(marked.defaults, opt);
83161           return marked;
83162         };
83163
83164         marked.getDefaults = function() {
83165           return {
83166             baseUrl: null,
83167             breaks: false,
83168             gfm: true,
83169             headerIds: true,
83170             headerPrefix: '',
83171             highlight: null,
83172             langPrefix: 'language-',
83173             mangle: true,
83174             pedantic: false,
83175             renderer: new Renderer(),
83176             sanitize: false,
83177             sanitizer: null,
83178             silent: false,
83179             smartLists: false,
83180             smartypants: false,
83181             xhtml: false
83182           };
83183         };
83184
83185         marked.defaults = marked.getDefaults();
83186
83187         /**
83188          * Expose
83189          */
83190
83191         marked.Parser = Parser;
83192         marked.parser = Parser.parse;
83193
83194         marked.Renderer = Renderer;
83195         marked.TextRenderer = TextRenderer;
83196
83197         marked.Lexer = Lexer;
83198         marked.lexer = Lexer.lex;
83199
83200         marked.InlineLexer = InlineLexer;
83201         marked.inlineLexer = InlineLexer.output;
83202
83203         marked.Slugger = Slugger;
83204
83205         marked.parse = marked;
83206
83207         {
83208           module.exports = marked;
83209         }
83210         })();
83211         });
83212
83213         function pointBox(loc, context) {
83214             var rect = context.surfaceRect();
83215             var point = context.curtainProjection(loc);
83216             return {
83217                 left: point[0] + rect.left - 40,
83218                 top: point[1] + rect.top - 60,
83219                 width: 80,
83220                 height: 90
83221             };
83222         }
83223
83224
83225         function pad$2(locOrBox, padding, context) {
83226             var box;
83227             if (locOrBox instanceof Array) {
83228                 var rect = context.surfaceRect();
83229                 var point = context.curtainProjection(locOrBox);
83230                 box = {
83231                     left: point[0] + rect.left,
83232                     top: point[1] + rect.top
83233                 };
83234             } else {
83235                 box = locOrBox;
83236             }
83237
83238             return {
83239                 left: box.left - padding,
83240                 top: box.top - padding,
83241                 width: (box.width || 0) + 2 * padding,
83242                 height: (box.width || 0) + 2 * padding
83243             };
83244         }
83245
83246
83247         function icon(name, svgklass, useklass) {
83248             return '<svg class="icon ' + (svgklass || '') + '">' +
83249                  '<use xlink:href="' + name + '"' +
83250                  (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
83251         }
83252
83253
83254         function slugify(text) {
83255             return text.toString().toLowerCase()
83256                 .replace(/\s+/g, '-')           // Replace spaces with -
83257                 .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
83258                 .replace(/\-\-+/g, '-')         // Replace multiple - with single -
83259                 .replace(/^-+/, '')             // Trim - from start of text
83260                 .replace(/-+$/, '');            // Trim - from end of text
83261         }
83262
83263
83264         // console warning for missing walkthrough names
83265         var missingStrings = {};
83266         function checkKey(key, text) {
83267             if (t(key, { default: undefined}) === undefined) {
83268                 if (missingStrings.hasOwnProperty(key)) return;  // warn once
83269                 missingStrings[key] = text;
83270                 var missing = key + ': ' + text;
83271                 if (typeof console !== 'undefined') console.log(missing); // eslint-disable-line
83272             }
83273         }
83274
83275
83276         function localize(obj) {
83277             var key;
83278
83279             // Assign name if entity has one..
83280             var name = obj.tags && obj.tags.name;
83281             if (name) {
83282                 key = 'intro.graph.name.' + slugify(name);
83283                 obj.tags.name = t(key, { default: name });
83284                 checkKey(key, name);
83285             }
83286
83287             // Assign street name if entity has one..
83288             var street = obj.tags && obj.tags['addr:street'];
83289             if (street) {
83290                 key = 'intro.graph.name.' + slugify(street);
83291                 obj.tags['addr:street'] = t(key, { default: street });
83292                 checkKey(key, street);
83293
83294                 // Add address details common across walkthrough..
83295                 var addrTags = [
83296                     'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
83297                     'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
83298                 ];
83299                 addrTags.forEach(function(k) {
83300                     var key = 'intro.graph.' + k;
83301                     var tag = 'addr:' + k;
83302                     var val = obj.tags && obj.tags[tag];
83303                     var str = t(key, { default: val });
83304
83305                     if (str) {
83306                         if (str.match(/^<.*>$/) !== null) {
83307                             delete obj.tags[tag];
83308                         } else {
83309                             obj.tags[tag] = str;
83310                         }
83311                     }
83312                 });
83313             }
83314
83315             return obj;
83316         }
83317
83318
83319         // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
83320         function isMostlySquare(points) {
83321             // note: uses 15 here instead of the 12 from actionOrthogonalize because
83322             // actionOrthogonalize can actually straighten some larger angles as it iterates
83323             var threshold = 15; // degrees within right or straight
83324             var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
83325             var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
83326
83327             for (var i = 0; i < points.length; i++) {
83328                 var a = points[(i - 1 + points.length) % points.length];
83329                 var origin = points[i];
83330                 var b = points[(i + 1) % points.length];
83331
83332                 var dotp = geoVecNormalizedDot(a, b, origin);
83333                 var mag = Math.abs(dotp);
83334                 if (mag > lowerBound && mag < upperBound) {
83335                     return false;
83336                 }
83337             }
83338
83339             return true;
83340         }
83341
83342
83343         function selectMenuItem(operation) {
83344             var selector = '.edit-menu .edit-menu-item-' + operation +
83345                 ', .radial-menu .radial-menu-item-' + operation;
83346             return d3_select(selector);
83347         }
83348
83349
83350         function transitionTime(point1, point2) {
83351             var distance = geoSphericalDistance(point1, point2);
83352             if (distance === 0)
83353                 return 0;
83354             else if (distance < 80)
83355                 return 500;
83356             else
83357                 return 1000;
83358         }
83359
83360         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]}};
83361
83362         // Tooltips and svg mask used to highlight certain features
83363         function uiCurtain() {
83364
83365             var surface = d3_select(null),
83366                 tooltip = d3_select(null),
83367                 darkness = d3_select(null);
83368
83369             function curtain(selection) {
83370                 surface = selection
83371                     .append('svg')
83372                     .attr('id', 'curtain')
83373                     .style('z-index', 1000)
83374                     .style('pointer-events', 'none')
83375                     .style('position', 'absolute')
83376                     .style('top', 0)
83377                     .style('left', 0);
83378
83379                 darkness = surface.append('path')
83380                     .attr('x', 0)
83381                     .attr('y', 0)
83382                     .attr('class', 'curtain-darkness');
83383
83384                 d3_select(window).on('resize.curtain', resize);
83385
83386                 tooltip = selection.append('div')
83387                     .attr('class', 'tooltip')
83388                     .style('z-index', 1002);
83389
83390                 tooltip
83391                     .append('div')
83392                     .attr('class', 'tooltip-arrow');
83393
83394                 tooltip
83395                     .append('div')
83396                     .attr('class', 'tooltip-inner');
83397
83398                 resize();
83399
83400
83401                 function resize() {
83402                     surface
83403                         .attr('width', window.innerWidth)
83404                         .attr('height', window.innerHeight);
83405                     curtain.cut(darkness.datum());
83406                 }
83407             }
83408
83409
83410             /**
83411              * Reveal cuts the curtain to highlight the given box,
83412              * and shows a tooltip with instructions next to the box.
83413              *
83414              * @param  {String|ClientRect} [box]   box used to cut the curtain
83415              * @param  {String}    [text]          text for a tooltip
83416              * @param  {Object}    [options]
83417              * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
83418              * @param  {integer}   [options.duration]        transition time in milliseconds
83419              * @param  {string}    [options.buttonText]      if set, create a button with this text label
83420              * @param  {function}  [options.buttonCallback]  if set, the callback for the button
83421              * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
83422              */
83423             curtain.reveal = function(box, text, options) {
83424                 if (typeof box === 'string') {
83425                     box = d3_select(box).node();
83426                 }
83427                 if (box && box.getBoundingClientRect) {
83428                     box = copyBox(box.getBoundingClientRect());
83429                 }
83430
83431                 options = options || {};
83432
83433                 var tooltipBox;
83434                 if (options.tooltipBox) {
83435                     tooltipBox = options.tooltipBox;
83436                     if (typeof tooltipBox === 'string') {
83437                         tooltipBox = d3_select(tooltipBox).node();
83438                     }
83439                     if (tooltipBox && tooltipBox.getBoundingClientRect) {
83440                         tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
83441                     }
83442                 } else {
83443                     tooltipBox = box;
83444                 }
83445
83446                 if (tooltipBox && text) {
83447                     // pseudo markdown bold text for the instruction section..
83448                     var parts = text.split('**');
83449                     var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
83450                     if (parts[1]) {
83451                         html += '<span class="instruction">' + parts[1] + '</span>';
83452                     }
83453
83454                     html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
83455                     html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
83456
83457                     if (options.buttonText && options.buttonCallback) {
83458                         html += '<div class="button-section">' +
83459                             '<button href="#" class="button action">' + options.buttonText + '</button></div>';
83460                     }
83461
83462                     var classes = 'curtain-tooltip tooltip in ' + (options.tooltipClass || '');
83463                     tooltip
83464                         .classed(classes, true)
83465                         .selectAll('.tooltip-inner')
83466                         .html(html);
83467
83468                     if (options.buttonText && options.buttonCallback) {
83469                         var button = tooltip.selectAll('.button-section .button.action');
83470                         button
83471                             .on('click', function() {
83472                                 event.preventDefault();
83473                                 options.buttonCallback();
83474                             });
83475                     }
83476
83477                     var tip = copyBox(tooltip.node().getBoundingClientRect()),
83478                         w = window.innerWidth,
83479                         h = window.innerHeight,
83480                         tooltipWidth = 200,
83481                         tooltipArrow = 5,
83482                         side, pos;
83483
83484
83485                     // hack: this will have bottom placement,
83486                     // so need to reserve extra space for the tooltip illustration.
83487                     if (options.tooltipClass === 'intro-mouse') {
83488                         tip.height += 80;
83489                     }
83490
83491                     // trim box dimensions to just the portion that fits in the window..
83492                     if (tooltipBox.top + tooltipBox.height > h) {
83493                         tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
83494                     }
83495                     if (tooltipBox.left + tooltipBox.width > w) {
83496                         tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
83497                     }
83498
83499                     // determine tooltip placement..
83500
83501                     if (tooltipBox.top + tooltipBox.height < 100) {
83502                         // tooltip below box..
83503                         side = 'bottom';
83504                         pos = [
83505                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
83506                             tooltipBox.top + tooltipBox.height
83507                         ];
83508
83509                     } else if (tooltipBox.top > h - 140) {
83510                         // tooltip above box..
83511                         side = 'top';
83512                         pos = [
83513                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
83514                             tooltipBox.top - tip.height
83515                         ];
83516
83517                     } else {
83518                         // tooltip to the side of the tooltipBox..
83519                         var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
83520
83521                         if (textDirection === 'rtl') {
83522                             if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
83523                                 side = 'right';
83524                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
83525
83526                             } else {
83527                                 side = 'left';
83528                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
83529                             }
83530
83531                         } else {
83532                             if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
83533                                 side = 'left';
83534                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
83535                             }
83536                             else {
83537                                 side = 'right';
83538                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
83539                             }
83540                         }
83541                     }
83542
83543                     if (options.duration !== 0 || !tooltip.classed(side)) {
83544                         tooltip.call(uiToggle(true));
83545                     }
83546
83547                     tooltip
83548                         .style('top', pos[1] + 'px')
83549                         .style('left', pos[0] + 'px')
83550                         .attr('class', classes + ' ' + side);
83551
83552
83553                     // shift tooltip-inner if it is very close to the top or bottom edge
83554                     // (doesn't affect the placement of the tooltip-arrow)
83555                     var shiftY = 0;
83556                     if (side === 'left' || side === 'right') {
83557                         if (pos[1] < 60) {
83558                             shiftY = 60 - pos[1];
83559                         }
83560                         else if (pos[1] + tip.height > h - 100) {
83561                             shiftY = h - pos[1] - tip.height - 100;
83562                         }
83563                     }
83564                     tooltip.selectAll('.tooltip-inner')
83565                         .style('top', shiftY + 'px');
83566
83567                 } else {
83568                     tooltip
83569                         .classed('in', false)
83570                         .call(uiToggle(false));
83571                 }
83572
83573                 curtain.cut(box, options.duration);
83574
83575                 return tooltip;
83576             };
83577
83578
83579             curtain.cut = function(datum, duration) {
83580                 darkness.datum(datum)
83581                     .interrupt();
83582
83583                 var selection;
83584                 if (duration === 0) {
83585                     selection = darkness;
83586                 } else {
83587                     selection = darkness
83588                         .transition()
83589                         .duration(duration || 600)
83590                         .ease(linear$1);
83591                 }
83592
83593                 selection
83594                     .attr('d', function(d) {
83595                         var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
83596                             window.innerWidth + ',' + window.innerHeight + 'L' +
83597                             window.innerWidth + ',0 Z';
83598
83599                         if (!d) return string;
83600                         return string + 'M' +
83601                             d.left + ',' + d.top + 'L' +
83602                             d.left + ',' + (d.top + d.height) + 'L' +
83603                             (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
83604                             (d.left + d.width) + ',' + (d.top) + 'Z';
83605
83606                     });
83607             };
83608
83609
83610             curtain.remove = function() {
83611                 surface.remove();
83612                 tooltip.remove();
83613                 d3_select(window).on('resize.curtain', null);
83614             };
83615
83616
83617             // ClientRects are immutable, so copy them to an object,
83618             // in case we need to trim the height/width.
83619             function copyBox(src) {
83620                 return {
83621                     top: src.top,
83622                     right: src.right,
83623                     bottom: src.bottom,
83624                     left: src.left,
83625                     width: src.width,
83626                     height: src.height
83627                 };
83628             }
83629
83630
83631             return curtain;
83632         }
83633
83634         function uiIntroWelcome(context, reveal) {
83635             var dispatch$1 = dispatch('done');
83636             var listener = clickListener();
83637
83638             var chapter = {
83639                 title: 'intro.welcome.title'
83640             };
83641
83642
83643             function welcome() {
83644                 context.map().centerZoom([-85.63591, 41.94285], 19);
83645                 reveal('.intro-nav-wrap .chapter-welcome',
83646                     t('intro.welcome.welcome'),
83647                     { buttonText: t('intro.ok'), buttonCallback: practice }
83648                 );
83649             }
83650
83651             function practice() {
83652                 reveal('.intro-nav-wrap .chapter-welcome',
83653                     t('intro.welcome.practice'),
83654                     { buttonText: t('intro.ok'), buttonCallback: words }
83655                 );
83656             }
83657
83658             function words() {
83659                 reveal('.intro-nav-wrap .chapter-welcome',
83660                     t('intro.welcome.words'),
83661                     { buttonText: t('intro.ok'), buttonCallback: mouse }
83662                 );
83663             }
83664
83665
83666             function mouse() {
83667                 reveal('.intro-nav-wrap .chapter-welcome',
83668                     t('intro.welcome.mouse'),
83669                     { buttonText: t('intro.ok'), buttonCallback: leftClick }
83670                 );
83671             }
83672
83673
83674             function leftClick() {
83675                 var counter = 0;
83676                 var times = 5;
83677
83678                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
83679                     t('intro.welcome.leftclick', { num: times }),
83680                     { tooltipClass: 'intro-mouse' }
83681                 );
83682
83683                 tooltip.selectAll('.tooltip-inner')
83684                     .insert('svg', 'span')
83685                     .attr('class', 'tooltip-illustration')
83686                     .append('use')
83687                     .attr('xlink:href', '#iD-walkthrough-mouse');
83688
83689                 tooltip
83690                     .append('div')
83691                     .attr('class', 'counter');
83692
83693                 tooltip.call(listener);
83694
83695                 listener.on('click', function(which) {
83696                     if (which === 'left') {
83697                         d3_select('.curtain-tooltip.intro-mouse .counter')
83698                             .text(String(++counter));
83699
83700                         if (counter === times) {
83701                             window.setTimeout(function() { continueTo(rightClick); }, 1000);
83702                         }
83703                     }
83704                 });
83705
83706                 function continueTo(nextStep) {
83707                     listener.on('click', null);
83708                     tooltip.call(listener.off);
83709                     tooltip.select('.counter').remove();
83710                     nextStep();
83711                 }
83712             }
83713
83714
83715             function rightClick() {
83716                 var counter = 0;
83717                 var times = 5;
83718
83719                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
83720                     t('intro.welcome.rightclick', { num: times }),
83721                     { tooltipClass: 'intro-mouse' }
83722                 );
83723
83724                 tooltip.selectAll('.tooltip-inner')
83725                     .insert('svg', 'span')
83726                     .attr('class', 'tooltip-illustration')
83727                     .append('use')
83728                     .attr('xlink:href', '#iD-walkthrough-mouse');
83729
83730                 tooltip
83731                     .append('div')
83732                     .attr('class', 'counter');
83733
83734                 tooltip.call(listener);
83735
83736                 listener.on('click', function(which) {
83737                     if (which === 'right') {
83738                         d3_select('.curtain-tooltip.intro-mouse .counter')
83739                             .text(String(++counter));
83740
83741                         if (counter === times) {
83742                             window.setTimeout(function() { continueTo(chapters); }, 1000);
83743                         }
83744                     }
83745                 });
83746
83747                 function continueTo(nextStep) {
83748                     listener.on('click', null);
83749                     tooltip.call(listener.off);
83750                     tooltip.select('.counter').remove();
83751                     nextStep();
83752                 }
83753             }
83754
83755
83756             function chapters() {
83757                 dispatch$1.call('done');
83758                 reveal('.intro-nav-wrap .chapter-navigation',
83759                     t('intro.welcome.chapters', { next: t('intro.navigation.title') })
83760                 );
83761             }
83762
83763
83764             chapter.enter = function() {
83765                 welcome();
83766             };
83767
83768
83769             chapter.exit = function() {
83770                 listener.off();
83771                 d3_select('.curtain-tooltip.intro-mouse')
83772                     .selectAll('.counter')
83773                     .remove();
83774             };
83775
83776
83777             chapter.restart = function() {
83778                 chapter.exit();
83779                 chapter.enter();
83780             };
83781
83782
83783             return utilRebind(chapter, dispatch$1, 'on');
83784         }
83785
83786
83787
83788         function clickListener() {
83789             var dispatch$1 = dispatch('click');
83790             var minTime = 120;
83791             var tooltip = d3_select(null);
83792             var down = {};
83793
83794             // `down` keeps track of which buttons/keys are down.
83795             // Setting a property in `down` happens immediately.
83796             // Unsetting a property in `down` is delayed because
83797             //   on Windows a contextmenu event happens after keyup/mouseup
83798
83799             function keydown() {
83800                 if (event.keyCode === 93)  {   // context menu
83801                     event.preventDefault();
83802                     event.stopPropagation();
83803                     down.menu = event.timeStamp;
83804                     tooltip.classed('rightclick', true);
83805                 }
83806             }
83807
83808
83809             function keyup() {
83810                 if (event.keyCode === 93)  {   // context menu
83811                     event.preventDefault();
83812                     event.stopPropagation();
83813                     var endTime = event.timeStamp;
83814                     var startTime = down.menu || endTime;
83815                     var delay = (endTime - startTime < minTime) ? minTime : 0;
83816
83817                     window.setTimeout(function() {
83818                         tooltip.classed('rightclick', false);
83819                         down.menu = undefined;  // delayed, for Windows
83820                     }, delay);
83821
83822                     dispatch$1.call('click', this, 'right');
83823                 }
83824             }
83825
83826
83827             function mousedown() {
83828                 var button = event.button;
83829                 if (button === 0 && !event.ctrlKey) {
83830                     tooltip.classed('leftclick', true);
83831                 } else if (button === 2) {
83832                     tooltip.classed('rightclick', true);
83833                 }
83834                 down[button] = event.timeStamp;
83835             }
83836
83837
83838             function mouseup() {
83839                 var button = event.button;
83840                 var endTime = event.timeStamp;
83841                 var startTime = down[button] || endTime;
83842                 var delay = (endTime - startTime < minTime) ? minTime : 0;
83843
83844                 if (button === 0 && !event.ctrlKey) {
83845                     window.setTimeout(function() {
83846                         tooltip.classed('leftclick', false);
83847                         down[button] = undefined;  // delayed, for Windows
83848                     }, delay);
83849
83850                     dispatch$1.call('click', this, 'left');
83851
83852                 } else if (button === 2) {
83853                     window.setTimeout(function() {
83854                         tooltip.classed('rightclick', false);
83855                         down[button] = undefined;  // delayed, for Windows
83856                     }, delay);
83857
83858                     dispatch$1.call('click', this, 'right');
83859
83860                 } else {
83861                     window.setTimeout(function() {
83862                         down[button] = undefined;  // delayed, for Windows
83863                     }, delay);
83864                 }
83865             }
83866
83867
83868             function contextmenu() {
83869                 event.preventDefault();
83870                 event.stopPropagation();
83871                 if (!down[2] && !down.menu) {
83872                     tooltip.classed('rightclick', true);
83873                     window.setTimeout(function() {
83874                         tooltip.classed('rightclick', false);
83875                     }, minTime);
83876                     dispatch$1.call('click', this, 'right');
83877                 }
83878             }
83879
83880
83881             var behavior = function(selection) {
83882                 tooltip = selection;
83883                 down = {};
83884
83885                 d3_select(window)
83886                     .on('keydown.intro', keydown)
83887                     .on('keyup.intro', keyup)
83888                     .on('mousedown.intro', mousedown)
83889                     .on('mouseup.intro', mouseup)
83890                     .on('contextmenu.intro', contextmenu);
83891             };
83892
83893
83894             behavior.off = function() {
83895                 d3_select(window)
83896                     .on('keydown.intro', null)
83897                     .on('keyup.intro', null)
83898                     .on('mousedown.intro', null)
83899                     .on('mouseup.intro', null)
83900                     .on('contextmenu.intro', null);
83901
83902                 tooltip
83903                     .classed('leftclick', false)
83904                     .classed('rightclick', false);
83905             };
83906
83907             return utilRebind(behavior, dispatch$1, 'on');
83908         }
83909
83910         function uiIntroNavigation(context, reveal) {
83911             var dispatch$1 = dispatch('done');
83912             var timeouts = [];
83913             var hallId = 'n2061';
83914             var townHall = [-85.63591, 41.94285];
83915             var springStreetId = 'w397';
83916             var springStreetEndId = 'n1834';
83917             var springStreet = [-85.63582, 41.94255];
83918             var onewayField = context.presets().field('oneway');
83919             var maxspeedField = context.presets().field('maxspeed');
83920
83921
83922             var chapter = {
83923                 title: 'intro.navigation.title'
83924             };
83925
83926
83927             function timeout(f, t) {
83928                 timeouts.push(window.setTimeout(f, t));
83929             }
83930
83931
83932             function eventCancel() {
83933                 event.stopPropagation();
83934                 event.preventDefault();
83935             }
83936
83937
83938             function isTownHallSelected() {
83939                 var ids = context.selectedIDs();
83940                 return ids.length === 1 && ids[0] === hallId;
83941             }
83942
83943
83944             function dragMap() {
83945                 context.enter(modeBrowse(context));
83946                 context.history().reset('initial');
83947
83948                 var msec = transitionTime(townHall, context.map().center());
83949                 if (msec) { reveal(null, null, { duration: 0 }); }
83950                 context.map().centerZoomEase(townHall, 19, msec);
83951
83952                 timeout(function() {
83953                     var centerStart = context.map().center();
83954
83955                     reveal('#surface', t('intro.navigation.drag'));
83956                     context.map().on('drawn.intro', function() {
83957                         reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
83958                     });
83959
83960                     context.map().on('move.intro', function() {
83961                         var centerNow = context.map().center();
83962                         if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
83963                             context.map().on('move.intro', null);
83964                             timeout(function() { continueTo(zoomMap); }, 3000);
83965                         }
83966                     });
83967
83968                 }, msec + 100);
83969
83970                 function continueTo(nextStep) {
83971                     context.map().on('move.intro drawn.intro', null);
83972                     nextStep();
83973                 }
83974             }
83975
83976
83977             function zoomMap() {
83978                 var zoomStart = context.map().zoom();
83979
83980                 reveal('#surface',
83981                     t('intro.navigation.zoom', {
83982                         plus: icon('#iD-icon-plus', 'pre-text'),
83983                         minus: icon('#iD-icon-minus', 'pre-text')
83984                     })
83985                 );
83986
83987                 context.map().on('drawn.intro', function() {
83988                     reveal('#surface',
83989                         t('intro.navigation.zoom', {
83990                             plus: icon('#iD-icon-plus', 'pre-text'),
83991                             minus: icon('#iD-icon-minus', 'pre-text')
83992                         }), { duration: 0 }
83993                     );
83994                 });
83995
83996                 context.map().on('move.intro', function() {
83997                     if (context.map().zoom() !== zoomStart) {
83998                         context.map().on('move.intro', null);
83999                         timeout(function() { continueTo(features); }, 3000);
84000                     }
84001                 });
84002
84003                 function continueTo(nextStep) {
84004                     context.map().on('move.intro drawn.intro', null);
84005                     nextStep();
84006                 }
84007             }
84008
84009
84010             function features() {
84011                 var onClick = function() { continueTo(pointsLinesAreas); };
84012
84013                 reveal('#surface', t('intro.navigation.features'),
84014                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84015                 );
84016
84017                 context.map().on('drawn.intro', function() {
84018                     reveal('#surface', t('intro.navigation.features'),
84019                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
84020                     );
84021                 });
84022
84023                 function continueTo(nextStep) {
84024                     context.map().on('drawn.intro', null);
84025                     nextStep();
84026                 }
84027             }
84028
84029             function pointsLinesAreas() {
84030                 var onClick = function() { continueTo(nodesWays); };
84031
84032                 reveal('#surface', t('intro.navigation.points_lines_areas'),
84033                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84034                 );
84035
84036                 context.map().on('drawn.intro', function() {
84037                     reveal('#surface', t('intro.navigation.points_lines_areas'),
84038                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
84039                     );
84040                 });
84041
84042                 function continueTo(nextStep) {
84043                     context.map().on('drawn.intro', null);
84044                     nextStep();
84045                 }
84046             }
84047
84048             function nodesWays() {
84049                 var onClick = function() { continueTo(clickTownHall); };
84050
84051                 reveal('#surface', t('intro.navigation.nodes_ways'),
84052                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84053                 );
84054
84055                 context.map().on('drawn.intro', function() {
84056                     reveal('#surface', t('intro.navigation.nodes_ways'),
84057                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
84058                     );
84059                 });
84060
84061                 function continueTo(nextStep) {
84062                     context.map().on('drawn.intro', null);
84063                     nextStep();
84064                 }
84065             }
84066
84067             function clickTownHall() {
84068                 context.enter(modeBrowse(context));
84069                 context.history().reset('initial');
84070
84071                 var entity = context.hasEntity(hallId);
84072                 if (!entity) return;
84073                 reveal(null, null, { duration: 0 });
84074                 context.map().centerZoomEase(entity.loc, 19, 500);
84075
84076                 timeout(function() {
84077                     var entity = context.hasEntity(hallId);
84078                     if (!entity) return;
84079                     var box = pointBox(entity.loc, context);
84080                     reveal(box, t('intro.navigation.click_townhall'));
84081
84082                     context.map().on('move.intro drawn.intro', function() {
84083                         var entity = context.hasEntity(hallId);
84084                         if (!entity) return;
84085                         var box = pointBox(entity.loc, context);
84086                         reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
84087                     });
84088
84089                     context.on('enter.intro', function() {
84090                         if (isTownHallSelected()) continueTo(selectedTownHall);
84091                     });
84092
84093                 }, 550);  // after centerZoomEase
84094
84095                 context.history().on('change.intro', function() {
84096                     if (!context.hasEntity(hallId)) {
84097                         continueTo(clickTownHall);
84098                     }
84099                 });
84100
84101                 function continueTo(nextStep) {
84102                     context.on('enter.intro', null);
84103                     context.map().on('move.intro drawn.intro', null);
84104                     context.history().on('change.intro', null);
84105                     nextStep();
84106                 }
84107             }
84108
84109
84110             function selectedTownHall() {
84111                 if (!isTownHallSelected()) return clickTownHall();
84112
84113                 var entity = context.hasEntity(hallId);
84114                 if (!entity) return clickTownHall();
84115
84116                 var box = pointBox(entity.loc, context);
84117                 var onClick = function() { continueTo(editorTownHall); };
84118
84119                 reveal(box, t('intro.navigation.selected_townhall'),
84120                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84121                 );
84122
84123                 context.map().on('move.intro drawn.intro', function() {
84124                     var entity = context.hasEntity(hallId);
84125                     if (!entity) return;
84126                     var box = pointBox(entity.loc, context);
84127                     reveal(box, t('intro.navigation.selected_townhall'),
84128                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
84129                     );
84130                 });
84131
84132                 context.history().on('change.intro', function() {
84133                     if (!context.hasEntity(hallId)) {
84134                         continueTo(clickTownHall);
84135                     }
84136                 });
84137
84138                 function continueTo(nextStep) {
84139                     context.map().on('move.intro drawn.intro', null);
84140                     context.history().on('change.intro', null);
84141                     nextStep();
84142                 }
84143             }
84144
84145
84146             function editorTownHall() {
84147                 if (!isTownHallSelected()) return clickTownHall();
84148
84149                 // disallow scrolling
84150                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84151
84152                 var onClick = function() { continueTo(presetTownHall); };
84153
84154                 reveal('.entity-editor-pane',
84155                     t('intro.navigation.editor_townhall'),
84156                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84157                 );
84158
84159                 context.on('exit.intro', function() {
84160                     continueTo(clickTownHall);
84161                 });
84162
84163                 context.history().on('change.intro', function() {
84164                     if (!context.hasEntity(hallId)) {
84165                         continueTo(clickTownHall);
84166                     }
84167                 });
84168
84169                 function continueTo(nextStep) {
84170                     context.on('exit.intro', null);
84171                     context.history().on('change.intro', null);
84172                     d3_select('.inspector-wrap').on('wheel.intro', null);
84173                     nextStep();
84174                 }
84175             }
84176
84177
84178             function presetTownHall() {
84179                 if (!isTownHallSelected()) return clickTownHall();
84180
84181                 // reset pane, in case user happened to change it..
84182                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84183                 // disallow scrolling
84184                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84185
84186                 // preset match, in case the user happened to change it.
84187                 var entity = context.entity(context.selectedIDs()[0]);
84188                 var preset = context.presets().match(entity, context.graph());
84189
84190                 var onClick = function() { continueTo(fieldsTownHall); };
84191
84192                 context.on('exit.intro', function() {
84193                     continueTo(clickTownHall);
84194                 });
84195
84196                 context.history().on('change.intro', function() {
84197                     if (!context.hasEntity(hallId)) {
84198                         continueTo(clickTownHall);
84199                     }
84200                 });
84201
84202                 reveal('.inspector-body .preset-list-item.inspector-inner',
84203                     t('intro.navigation.preset_townhall', { preset: preset.name() }),
84204                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84205                 );
84206
84207                 function continueTo(nextStep) {
84208                     context.on('exit.intro', null);
84209                     context.history().on('change.intro', null);
84210                     d3_select('.inspector-wrap').on('wheel.intro', null);
84211                     nextStep();
84212                 }
84213             }
84214
84215
84216             function fieldsTownHall() {
84217                 if (!isTownHallSelected()) return clickTownHall();
84218
84219                 // reset pane, in case user happened to change it..
84220                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84221                 // disallow scrolling
84222                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84223
84224                 var onClick = function() { continueTo(closeTownHall); };
84225
84226                 reveal('.inspector-body .preset-editor',
84227                     t('intro.navigation.fields_townhall'),
84228                     { buttonText: t('intro.ok'), buttonCallback: onClick }
84229                 );
84230
84231                 context.on('exit.intro', function() {
84232                     continueTo(clickTownHall);
84233                 });
84234
84235                 context.history().on('change.intro', function() {
84236                     if (!context.hasEntity(hallId)) {
84237                         continueTo(clickTownHall);
84238                     }
84239                 });
84240
84241                 function continueTo(nextStep) {
84242                     context.on('exit.intro', null);
84243                     context.history().on('change.intro', null);
84244                     d3_select('.inspector-wrap').on('wheel.intro', null);
84245                     nextStep();
84246                 }
84247             }
84248
84249
84250             function closeTownHall() {
84251                 if (!isTownHallSelected()) return clickTownHall();
84252
84253                 var selector = '.entity-editor-pane button.preset-close svg use';
84254                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
84255
84256                 reveal('.entity-editor-pane',
84257                     t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
84258                 );
84259
84260                 context.on('exit.intro', function() {
84261                     continueTo(searchStreet);
84262                 });
84263
84264                 context.history().on('change.intro', function() {
84265                     // update the close icon in the tooltip if the user edits something.
84266                     var selector = '.entity-editor-pane button.preset-close svg use';
84267                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
84268
84269                     reveal('.entity-editor-pane',
84270                         t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
84271                         { duration: 0 }
84272                     );
84273                 });
84274
84275                 function continueTo(nextStep) {
84276                     context.on('exit.intro', null);
84277                     context.history().on('change.intro', null);
84278                     nextStep();
84279                 }
84280             }
84281
84282
84283             function searchStreet() {
84284                 context.enter(modeBrowse(context));
84285                 context.history().reset('initial');  // ensure spring street exists
84286
84287                 var msec = transitionTime(springStreet, context.map().center());
84288                 if (msec) { reveal(null, null, { duration: 0 }); }
84289                 context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
84290
84291                 timeout(function() {
84292                     reveal('.search-header input',
84293                         t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
84294                     );
84295
84296                     d3_select('.search-header input')
84297                         .on('keyup.intro', checkSearchResult);
84298                 }, msec + 100);
84299             }
84300
84301
84302             function checkSearchResult() {
84303                 var first = d3_select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
84304                 var firstName = first.select('.entity-name');
84305                 var name = t('intro.graph.name.spring-street');
84306
84307                 if (!firstName.empty() && firstName.text() === name) {
84308                     reveal(first.node(),
84309                         t('intro.navigation.choose_street', { name: name }),
84310                         { duration: 300 }
84311                     );
84312
84313                     context.on('exit.intro', function() {
84314                         continueTo(selectedStreet);
84315                     });
84316
84317                     d3_select('.search-header input')
84318                         .on('keydown.intro', eventCancel, true)
84319                         .on('keyup.intro', null);
84320                 }
84321
84322                 function continueTo(nextStep) {
84323                     context.on('exit.intro', null);
84324                     d3_select('.search-header input')
84325                         .on('keydown.intro', null)
84326                         .on('keyup.intro', null);
84327                     nextStep();
84328                 }
84329             }
84330
84331
84332             function selectedStreet() {
84333                 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
84334                     return searchStreet();
84335                 }
84336
84337                 var onClick = function() { continueTo(editorStreet); };
84338                 var entity = context.entity(springStreetEndId);
84339                 var box = pointBox(entity.loc, context);
84340                 box.height = 500;
84341
84342                 reveal(box,
84343                     t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
84344                     { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
84345                 );
84346
84347                 timeout(function() {
84348                     context.map().on('move.intro drawn.intro', function() {
84349                         var entity = context.hasEntity(springStreetEndId);
84350                         if (!entity) return;
84351                         var box = pointBox(entity.loc, context);
84352                         box.height = 500;
84353                         reveal(box,
84354                             t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
84355                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
84356                         );
84357                     });
84358                 }, 600);  // after reveal.
84359
84360                 context.on('enter.intro', function(mode) {
84361                     if (!context.hasEntity(springStreetId)) {
84362                         return continueTo(searchStreet);
84363                     }
84364                     var ids = context.selectedIDs();
84365                     if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
84366                         // keep Spring Street selected..
84367                         context.enter(modeSelect(context, [springStreetId]));
84368                     }
84369                 });
84370
84371                 context.history().on('change.intro', function() {
84372                     if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
84373                         timeout(function() {
84374                             continueTo(searchStreet);
84375                         }, 300);  // after any transition (e.g. if user deleted intersection)
84376                     }
84377                 });
84378
84379                 function continueTo(nextStep) {
84380                     context.map().on('move.intro drawn.intro', null);
84381                     context.on('enter.intro', null);
84382                     context.history().on('change.intro', null);
84383                     nextStep();
84384                 }
84385             }
84386
84387
84388             function editorStreet() {
84389                 var selector = '.entity-editor-pane button.preset-close svg use';
84390                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
84391
84392                 reveal('.entity-editor-pane',
84393                     t('intro.navigation.editor_street', {
84394                         button: icon(href, 'pre-text'),
84395                         field1: onewayField.label(),
84396                         field2: maxspeedField.label()
84397                     })
84398                 );
84399
84400                 context.on('exit.intro', function() {
84401                     continueTo(play);
84402                 });
84403
84404                 context.history().on('change.intro', function() {
84405                     // update the close icon in the tooltip if the user edits something.
84406                     var selector = '.entity-editor-pane button.preset-close svg use';
84407                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
84408
84409                     reveal('.entity-editor-pane',
84410                         t('intro.navigation.editor_street', {
84411                             button: icon(href, 'pre-text'),
84412                             field1: onewayField.label().toLowerCase(),
84413                             field2: maxspeedField.label().toLowerCase()
84414                         }), { duration: 0 }
84415                     );
84416                 });
84417
84418                 function continueTo(nextStep) {
84419                     context.on('exit.intro', null);
84420                     context.history().on('change.intro', null);
84421                     nextStep();
84422                 }
84423             }
84424
84425
84426             function play() {
84427                 dispatch$1.call('done');
84428                 reveal('#id-container',
84429                     t('intro.navigation.play', { next: t('intro.points.title') }), {
84430                         tooltipBox: '.intro-nav-wrap .chapter-point',
84431                         buttonText: t('intro.ok'),
84432                         buttonCallback: function() { reveal('#id-container'); }
84433                     }
84434                 );
84435             }
84436
84437
84438             chapter.enter = function() {
84439                 dragMap();
84440             };
84441
84442
84443             chapter.exit = function() {
84444                 timeouts.forEach(window.clearTimeout);
84445                 context.on('enter.intro exit.intro', null);
84446                 context.map().on('move.intro drawn.intro', null);
84447                 context.history().on('change.intro', null);
84448                 d3_select('.inspector-wrap').on('wheel.intro', null);
84449                 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
84450             };
84451
84452
84453             chapter.restart = function() {
84454                 chapter.exit();
84455                 chapter.enter();
84456             };
84457
84458
84459             return utilRebind(chapter, dispatch$1, 'on');
84460         }
84461
84462         function uiIntroPoint(context, reveal) {
84463             var dispatch$1 = dispatch('done');
84464             var timeouts = [];
84465             var intersection = [-85.63279, 41.94394];
84466             var building = [-85.632422, 41.944045];
84467             var cafePreset = context.presets().item('amenity/cafe');
84468             var _pointID = null;
84469
84470
84471             var chapter = {
84472                 title: 'intro.points.title'
84473             };
84474
84475
84476             function timeout(f, t) {
84477                 timeouts.push(window.setTimeout(f, t));
84478             }
84479
84480
84481             function revealEditMenu(loc, text, options) {
84482                 var rect = context.surfaceRect();
84483                 var point = context.curtainProjection(loc);
84484                 var pad = 40;
84485                 var width = 250 + (2 * pad);
84486                 var height = 250;
84487                 var startX = rect.left + point[0];
84488                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
84489                 var box = {
84490                     left: left,
84491                     top: point[1] + rect.top - 60,
84492                     width: width,
84493                     height: height
84494                 };
84495                 reveal(box, text, options);
84496             }
84497
84498
84499             function eventCancel() {
84500                 event.stopPropagation();
84501                 event.preventDefault();
84502             }
84503
84504
84505             function addPoint() {
84506                 context.enter(modeBrowse(context));
84507                 context.history().reset('initial');
84508
84509                 var msec = transitionTime(intersection, context.map().center());
84510                 if (msec) { reveal(null, null, { duration: 0 }); }
84511                 context.map().centerZoomEase(intersection, 19, msec);
84512
84513                 timeout(function() {
84514                     var tooltip = reveal('button.add-point',
84515                         t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
84516
84517                     _pointID = null;
84518
84519                     tooltip.selectAll('.tooltip-inner')
84520                         .insert('svg', 'span')
84521                         .attr('class', 'tooltip-illustration')
84522                         .append('use')
84523                         .attr('xlink:href', '#iD-graphic-points');
84524
84525                     context.on('enter.intro', function(mode) {
84526                         if (mode.id !== 'add-point') return;
84527                         continueTo(placePoint);
84528                     });
84529                 }, msec + 100);
84530
84531                 function continueTo(nextStep) {
84532                     context.on('enter.intro', null);
84533                     nextStep();
84534                 }
84535             }
84536
84537
84538             function placePoint() {
84539                 if (context.mode().id !== 'add-point') {
84540                     return chapter.restart();
84541                 }
84542
84543                 var pointBox = pad$2(building, 150, context);
84544                 reveal(pointBox, t('intro.points.place_point'));
84545
84546                 context.map().on('move.intro drawn.intro', function() {
84547                     pointBox = pad$2(building, 150, context);
84548                     reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
84549                 });
84550
84551                 context.on('enter.intro', function(mode) {
84552                     if (mode.id !== 'select') return chapter.restart();
84553                     _pointID = context.mode().selectedIDs()[0];
84554                     continueTo(searchPreset);
84555                 });
84556
84557                 function continueTo(nextStep) {
84558                     context.map().on('move.intro drawn.intro', null);
84559                     context.on('enter.intro', null);
84560                     nextStep();
84561                 }
84562             }
84563
84564
84565             function searchPreset() {
84566                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84567                     return addPoint();
84568                 }
84569
84570                 // disallow scrolling
84571                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84572
84573                 d3_select('.preset-search-input')
84574                     .on('keydown.intro', null)
84575                     .on('keyup.intro', checkPresetSearch);
84576
84577                 reveal('.preset-search-input',
84578                     t('intro.points.search_cafe', { preset: cafePreset.name() })
84579                 );
84580
84581                 context.on('enter.intro', function(mode) {
84582                     if (!_pointID || !context.hasEntity(_pointID)) {
84583                         return continueTo(addPoint);
84584                     }
84585
84586                     var ids = context.selectedIDs();
84587                     if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
84588                         // keep the user's point selected..
84589                         context.enter(modeSelect(context, [_pointID]));
84590
84591                         // disallow scrolling
84592                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84593
84594                         d3_select('.preset-search-input')
84595                             .on('keydown.intro', null)
84596                             .on('keyup.intro', checkPresetSearch);
84597
84598                         reveal('.preset-search-input',
84599                             t('intro.points.search_cafe', { preset: cafePreset.name() })
84600                         );
84601
84602                         context.history().on('change.intro', null);
84603                     }
84604                 });
84605
84606
84607                 function checkPresetSearch() {
84608                     var first = d3_select('.preset-list-item:first-child');
84609
84610                     if (first.classed('preset-amenity-cafe')) {
84611                         d3_select('.preset-search-input')
84612                             .on('keydown.intro', eventCancel, true)
84613                             .on('keyup.intro', null);
84614
84615                         reveal(first.select('.preset-list-button').node(),
84616                             t('intro.points.choose_cafe', { preset: cafePreset.name() }),
84617                             { duration: 300 }
84618                         );
84619
84620                         context.history().on('change.intro', function() {
84621                             continueTo(aboutFeatureEditor);
84622                         });
84623                     }
84624                 }
84625
84626                 function continueTo(nextStep) {
84627                     context.on('enter.intro', null);
84628                     context.history().on('change.intro', null);
84629                     d3_select('.inspector-wrap').on('wheel.intro', null);
84630                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84631                     nextStep();
84632                 }
84633             }
84634
84635
84636             function aboutFeatureEditor() {
84637                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84638                     return addPoint();
84639                 }
84640
84641                 timeout(function() {
84642                     reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
84643                         tooltipClass: 'intro-points-describe',
84644                         buttonText: t('intro.ok'),
84645                         buttonCallback: function() { continueTo(addName); }
84646                     });
84647                 }, 400);
84648
84649                 context.on('exit.intro', function() {
84650                     // if user leaves select mode here, just continue with the tutorial.
84651                     continueTo(reselectPoint);
84652                 });
84653
84654                 function continueTo(nextStep) {
84655                     context.on('exit.intro', null);
84656                     nextStep();
84657                 }
84658             }
84659
84660
84661             function addName() {
84662                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84663                     return addPoint();
84664                 }
84665
84666                 // reset pane, in case user happened to change it..
84667                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84668
84669                 timeout(function() {
84670                     // It's possible for the user to add a name in a previous step..
84671                     // If so, don't tell them to add the name in this step.
84672                     // Give them an OK button instead.
84673                     var entity = context.entity(_pointID);
84674                     if (entity.tags.name) {
84675                         var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
84676                             tooltipClass: 'intro-points-describe',
84677                             buttonText: t('intro.ok'),
84678                             buttonCallback: function() { continueTo(addCloseEditor); }
84679                         });
84680                         tooltip.select('.instruction').style('display', 'none');
84681
84682                     } else {
84683                         reveal('.entity-editor-pane', t('intro.points.add_name'),
84684                             { tooltipClass: 'intro-points-describe' }
84685                         );
84686                     }
84687                 }, 400);
84688
84689                 context.history().on('change.intro', function() {
84690                     continueTo(addCloseEditor);
84691                 });
84692
84693                 context.on('exit.intro', function() {
84694                     // if user leaves select mode here, just continue with the tutorial.
84695                     continueTo(reselectPoint);
84696                 });
84697
84698                 function continueTo(nextStep) {
84699                     context.on('exit.intro', null);
84700                     context.history().on('change.intro', null);
84701                     nextStep();
84702                 }
84703             }
84704
84705
84706             function addCloseEditor() {
84707                 // reset pane, in case user happened to change it..
84708                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84709
84710                 var selector = '.entity-editor-pane button.preset-close svg use';
84711                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
84712
84713                 context.on('exit.intro', function() {
84714                     continueTo(reselectPoint);
84715                 });
84716
84717                 reveal('.entity-editor-pane',
84718                     t('intro.points.add_close', { button: icon(href, 'pre-text') })
84719                 );
84720
84721                 function continueTo(nextStep) {
84722                     context.on('exit.intro', null);
84723                     nextStep();
84724                 }
84725             }
84726
84727
84728             function reselectPoint() {
84729                 if (!_pointID) return chapter.restart();
84730                 var entity = context.hasEntity(_pointID);
84731                 if (!entity) return chapter.restart();
84732
84733                 // make sure it's still a cafe, in case user somehow changed it..
84734                 var oldPreset = context.presets().match(entity, context.graph());
84735                 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
84736
84737                 context.enter(modeBrowse(context));
84738
84739                 var msec = transitionTime(entity.loc, context.map().center());
84740                 if (msec) { reveal(null, null, { duration: 0 }); }
84741                 context.map().centerEase(entity.loc, msec);
84742
84743                 timeout(function() {
84744                     var box = pointBox(entity.loc, context);
84745                     reveal(box, t('intro.points.reselect'), { duration: 600 });
84746
84747                     timeout(function() {
84748                         context.map().on('move.intro drawn.intro', function() {
84749                             var entity = context.hasEntity(_pointID);
84750                             if (!entity) return chapter.restart();
84751                             var box = pointBox(entity.loc, context);
84752                             reveal(box, t('intro.points.reselect'), { duration: 0 });
84753                         });
84754                     }, 600); // after reveal..
84755
84756                     context.on('enter.intro', function(mode) {
84757                         if (mode.id !== 'select') return;
84758                         continueTo(updatePoint);
84759                     });
84760
84761                 }, msec + 100);
84762
84763                 function continueTo(nextStep) {
84764                     context.map().on('move.intro drawn.intro', null);
84765                     context.on('enter.intro', null);
84766                     nextStep();
84767                 }
84768             }
84769
84770
84771             function updatePoint() {
84772                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84773                     return continueTo(reselectPoint);
84774                 }
84775
84776                 // reset pane, in case user happened to untag the point..
84777                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84778
84779                 context.on('exit.intro', function() {
84780                     continueTo(reselectPoint);
84781                 });
84782
84783                 context.history().on('change.intro', function() {
84784                     continueTo(updateCloseEditor);
84785                 });
84786
84787                 timeout(function() {
84788                     reveal('.entity-editor-pane', t('intro.points.update'),
84789                         { tooltipClass: 'intro-points-describe' }
84790                     );
84791                 }, 400);
84792
84793                 function continueTo(nextStep) {
84794                     context.on('exit.intro', null);
84795                     context.history().on('change.intro', null);
84796                     nextStep();
84797                 }
84798             }
84799
84800
84801             function updateCloseEditor() {
84802                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
84803                     return continueTo(reselectPoint);
84804                 }
84805
84806                 // reset pane, in case user happened to change it..
84807                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
84808
84809                 context.on('exit.intro', function() {
84810                     continueTo(rightClickPoint);
84811                 });
84812
84813                 timeout(function() {
84814                     reveal('.entity-editor-pane',
84815                         t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
84816                     );
84817                 }, 500);
84818
84819                 function continueTo(nextStep) {
84820                     context.on('exit.intro', null);
84821                     nextStep();
84822                 }
84823             }
84824
84825
84826             function rightClickPoint() {
84827                 if (!_pointID) return chapter.restart();
84828                 var entity = context.hasEntity(_pointID);
84829                 if (!entity) return chapter.restart();
84830
84831                 context.enter(modeBrowse(context));
84832
84833                 var box = pointBox(entity.loc, context);
84834                 reveal(box, t('intro.points.rightclick'), { duration: 600 });
84835
84836                 timeout(function() {
84837                     context.map().on('move.intro drawn.intro', function() {
84838                         var entity = context.hasEntity(_pointID);
84839                         if (!entity) return chapter.restart();
84840                         var box = pointBox(entity.loc, context);
84841                         reveal(box, t('intro.points.rightclick'), { duration: 0 });
84842                     });
84843                 }, 600); // after reveal
84844
84845                 context.on('enter.intro', function(mode) {
84846                     if (mode.id !== 'select') return;
84847                     var ids = context.selectedIDs();
84848                     if (ids.length !== 1 || ids[0] !== _pointID) return;
84849
84850                     timeout(function() {
84851                         var node = selectMenuItem('delete').node();
84852                         if (!node) return;
84853                         continueTo(enterDelete);
84854                     }, 300);  // after menu visible
84855                 });
84856
84857                 function continueTo(nextStep) {
84858                     context.on('enter.intro', null);
84859                     context.map().on('move.intro drawn.intro', null);
84860                     nextStep();
84861                 }
84862             }
84863
84864
84865             function enterDelete() {
84866                 if (!_pointID) return chapter.restart();
84867                 var entity = context.hasEntity(_pointID);
84868                 if (!entity) return chapter.restart();
84869
84870                 var node = selectMenuItem('delete').node();
84871                 if (!node) { return continueTo(rightClickPoint); }
84872
84873                 revealEditMenu(entity.loc,
84874                     t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
84875                 );
84876
84877                 timeout(function() {
84878                     context.map().on('move.intro drawn.intro', function() {
84879                         revealEditMenu(entity.loc,
84880                             t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
84881                             { duration: 0}
84882                         );
84883                     });
84884                 }, 300); // after menu visible
84885
84886                 context.on('exit.intro', function() {
84887                     if (!_pointID) return chapter.restart();
84888                     var entity = context.hasEntity(_pointID);
84889                     if (entity) return continueTo(rightClickPoint);  // point still exists
84890                 });
84891
84892                 context.history().on('change.intro', function(changed) {
84893                     if (changed.deleted().length) {
84894                         continueTo(undo);
84895                     }
84896                 });
84897
84898                 function continueTo(nextStep) {
84899                     context.map().on('move.intro drawn.intro', null);
84900                     context.history().on('change.intro', null);
84901                     context.on('exit.intro', null);
84902                     nextStep();
84903                 }
84904             }
84905
84906
84907             function undo() {
84908                 context.history().on('change.intro', function() {
84909                     continueTo(play);
84910                 });
84911
84912                 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
84913                 reveal('#bar button.undo-button',
84914                     t('intro.points.undo', { button: icon(iconName, 'pre-text') })
84915                 );
84916
84917                 function continueTo(nextStep) {
84918                     context.history().on('change.intro', null);
84919                     nextStep();
84920                 }
84921             }
84922
84923
84924             function play() {
84925                 dispatch$1.call('done');
84926                 reveal('#id-container',
84927                     t('intro.points.play', { next: t('intro.areas.title') }), {
84928                         tooltipBox: '.intro-nav-wrap .chapter-area',
84929                         buttonText: t('intro.ok'),
84930                         buttonCallback: function() { reveal('#id-container'); }
84931                     }
84932                 );
84933             }
84934
84935
84936             chapter.enter = function() {
84937                 addPoint();
84938             };
84939
84940
84941             chapter.exit = function() {
84942                 timeouts.forEach(window.clearTimeout);
84943                 context.on('enter.intro exit.intro', null);
84944                 context.map().on('move.intro drawn.intro', null);
84945                 context.history().on('change.intro', null);
84946                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
84947                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
84948             };
84949
84950
84951             chapter.restart = function() {
84952                 chapter.exit();
84953                 chapter.enter();
84954             };
84955
84956
84957             return utilRebind(chapter, dispatch$1, 'on');
84958         }
84959
84960         function uiIntroArea(context, reveal) {
84961             var dispatch$1 = dispatch('done');
84962             var playground = [-85.63552, 41.94159];
84963             var playgroundPreset = context.presets().item('leisure/playground');
84964             var descriptionField = context.presets().field('description');
84965             var timeouts = [];
84966             var _areaID;
84967
84968
84969             var chapter = {
84970                 title: 'intro.areas.title'
84971             };
84972
84973
84974             function timeout(f, t) {
84975                 timeouts.push(window.setTimeout(f, t));
84976             }
84977
84978
84979             function eventCancel() {
84980                 event.stopPropagation();
84981                 event.preventDefault();
84982             }
84983
84984
84985             function revealPlayground(center, text, options) {
84986                 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
84987                 var box = pad$2(center, padding, context);
84988                 reveal(box, text, options);
84989             }
84990
84991
84992             function addArea() {
84993                 context.enter(modeBrowse(context));
84994                 context.history().reset('initial');
84995                 _areaID = null;
84996
84997                 var msec = transitionTime(playground, context.map().center());
84998                 if (msec) { reveal(null, null, { duration: 0 }); }
84999                 context.map().centerZoomEase(playground, 19, msec);
85000
85001                 timeout(function() {
85002                     var tooltip = reveal('button.add-area',
85003                         t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
85004
85005                     tooltip.selectAll('.tooltip-inner')
85006                         .insert('svg', 'span')
85007                         .attr('class', 'tooltip-illustration')
85008                         .append('use')
85009                         .attr('xlink:href', '#iD-graphic-areas');
85010
85011                     context.on('enter.intro', function(mode) {
85012                         if (mode.id !== 'add-area') return;
85013                         continueTo(startPlayground);
85014                     });
85015                 }, msec + 100);
85016
85017                 function continueTo(nextStep) {
85018                     context.on('enter.intro', null);
85019                     nextStep();
85020                 }
85021             }
85022
85023
85024             function startPlayground() {
85025                 if (context.mode().id !== 'add-area') {
85026                     return chapter.restart();
85027                 }
85028
85029                 _areaID = null;
85030                 context.map().zoomEase(19.5, 500);
85031
85032                 timeout(function() {
85033                     revealPlayground(playground,
85034                         t('intro.areas.start_playground'), { duration: 250 }
85035                     );
85036
85037                     timeout(function() {
85038                         context.map().on('move.intro drawn.intro', function() {
85039                             revealPlayground(playground,
85040                                 t('intro.areas.start_playground'), { duration: 0 }
85041                             );
85042                         });
85043                         context.on('enter.intro', function(mode) {
85044                             if (mode.id !== 'draw-area') return chapter.restart();
85045                             continueTo(continuePlayground);
85046                         });
85047                     }, 250);  // after reveal
85048
85049                 }, 550);  // after easing
85050
85051                 function continueTo(nextStep) {
85052                     context.map().on('move.intro drawn.intro', null);
85053                     context.on('enter.intro', null);
85054                     nextStep();
85055                 }
85056             }
85057
85058
85059             function continuePlayground() {
85060                 if (context.mode().id !== 'draw-area') {
85061                     return chapter.restart();
85062                 }
85063
85064                 _areaID = null;
85065                 revealPlayground(playground,
85066                     t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
85067                     { duration: 250 }
85068                 );
85069
85070                 timeout(function() {
85071                     context.map().on('move.intro drawn.intro', function() {
85072                         revealPlayground(playground,
85073                             t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
85074                             { duration: 0 }
85075                         );
85076                     });
85077                 }, 250);  // after reveal
85078
85079                 context.on('enter.intro', function(mode) {
85080                     if (mode.id === 'draw-area') {
85081                         var entity = context.hasEntity(context.selectedIDs()[0]);
85082                         if (entity && entity.nodes.length >= 6) {
85083                             return continueTo(finishPlayground);
85084                         } else {
85085                             return;
85086                         }
85087                     } else if (mode.id === 'select') {
85088                         _areaID = context.selectedIDs()[0];
85089                         return continueTo(searchPresets);
85090                     } else {
85091                         return chapter.restart();
85092                     }
85093                 });
85094
85095                 function continueTo(nextStep) {
85096                     context.map().on('move.intro drawn.intro', null);
85097                     context.on('enter.intro', null);
85098                     nextStep();
85099                 }
85100             }
85101
85102
85103             function finishPlayground() {
85104                 if (context.mode().id !== 'draw-area') {
85105                     return chapter.restart();
85106                 }
85107
85108                 _areaID = null;
85109                 revealPlayground(playground,
85110                     t('intro.areas.finish_playground'), { duration: 250 }
85111                 );
85112
85113                 timeout(function() {
85114                     context.map().on('move.intro drawn.intro', function() {
85115                         revealPlayground(playground,
85116                             t('intro.areas.finish_playground'), { duration: 0 }
85117                         );
85118                     });
85119                 }, 250);  // after reveal
85120
85121                 context.on('enter.intro', function(mode) {
85122                     if (mode.id === 'draw-area') {
85123                         return;
85124                     } else if (mode.id === 'select') {
85125                         _areaID = context.selectedIDs()[0];
85126                         return continueTo(searchPresets);
85127                     } else {
85128                         return chapter.restart();
85129                     }
85130                 });
85131
85132                 function continueTo(nextStep) {
85133                     context.map().on('move.intro drawn.intro', null);
85134                     context.on('enter.intro', null);
85135                     nextStep();
85136                 }
85137             }
85138
85139
85140             function searchPresets() {
85141                 if (!_areaID || !context.hasEntity(_areaID)) {
85142                     return addArea();
85143                 }
85144                 var ids = context.selectedIDs();
85145                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
85146                     context.enter(modeSelect(context, [_areaID]));
85147                 }
85148
85149                 // disallow scrolling
85150                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85151
85152                 timeout(function() {
85153                     // reset pane, in case user somehow happened to change it..
85154                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
85155
85156                     d3_select('.preset-search-input')
85157                         .on('keydown.intro', null)
85158                         .on('keyup.intro', checkPresetSearch);
85159
85160                     reveal('.preset-search-input',
85161                         t('intro.areas.search_playground', { preset: playgroundPreset.name() })
85162                     );
85163                 }, 400);  // after preset list pane visible..
85164
85165                 context.on('enter.intro', function(mode) {
85166                     if (!_areaID || !context.hasEntity(_areaID)) {
85167                         return continueTo(addArea);
85168                     }
85169
85170                     var ids = context.selectedIDs();
85171                     if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
85172                         // keep the user's area selected..
85173                         context.enter(modeSelect(context, [_areaID]));
85174
85175                         // reset pane, in case user somehow happened to change it..
85176                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
85177                         // disallow scrolling
85178                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85179
85180                         d3_select('.preset-search-input')
85181                             .on('keydown.intro', null)
85182                             .on('keyup.intro', checkPresetSearch);
85183
85184                         reveal('.preset-search-input',
85185                             t('intro.areas.search_playground', { preset: playgroundPreset.name() })
85186                         );
85187
85188                         context.history().on('change.intro', null);
85189                     }
85190                 });
85191
85192                 function checkPresetSearch() {
85193                     var first = d3_select('.preset-list-item:first-child');
85194
85195                     if (first.classed('preset-leisure-playground')) {
85196                         reveal(first.select('.preset-list-button').node(),
85197                             t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
85198                             { duration: 300 }
85199                         );
85200
85201                         d3_select('.preset-search-input')
85202                             .on('keydown.intro', eventCancel, true)
85203                             .on('keyup.intro', null);
85204
85205                         context.history().on('change.intro', function() {
85206                             continueTo(clickAddField);
85207                         });
85208                     }
85209                 }
85210
85211                 function continueTo(nextStep) {
85212                     d3_select('.inspector-wrap').on('wheel.intro', null);
85213                     context.on('enter.intro', null);
85214                     context.history().on('change.intro', null);
85215                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
85216                     nextStep();
85217                 }
85218             }
85219
85220
85221             function clickAddField() {
85222                 if (!_areaID || !context.hasEntity(_areaID)) {
85223                     return addArea();
85224                 }
85225                 var ids = context.selectedIDs();
85226                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
85227                     return searchPresets();
85228                 }
85229
85230                 if (!d3_select('.form-field-description').empty()) {
85231                     return continueTo(describePlayground);
85232                 }
85233
85234                 // disallow scrolling
85235                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85236
85237                 timeout(function() {
85238                     // reset pane, in case user somehow happened to change it..
85239                     d3_select('.inspector-wrap .panewrap').style('right', '0%');
85240
85241                     // It's possible for the user to add a description in a previous step..
85242                     // If they did this already, just continue to next step.
85243                     var entity = context.entity(_areaID);
85244                     if (entity.tags.description) {
85245                         return continueTo(play);
85246                     }
85247
85248                     // scroll "Add field" into view
85249                     var box = d3_select('.more-fields').node().getBoundingClientRect();
85250                     if (box.top > 300) {
85251                         var pane = d3_select('.entity-editor-pane .inspector-body');
85252                         var start = pane.node().scrollTop;
85253                         var end = start + (box.top - 300);
85254
85255                         pane
85256                             .transition()
85257                             .duration(250)
85258                             .tween('scroll.inspector', function() {
85259                                 var node = this;
85260                                 var i = d3_interpolateNumber(start, end);
85261                                 return function(t) {
85262                                     node.scrollTop = i(t);
85263                                 };
85264                             });
85265                     }
85266
85267                     timeout(function() {
85268                         reveal('.more-fields .combobox-input',
85269                             t('intro.areas.add_field'),
85270                             { duration: 300 }
85271                         );
85272
85273                         d3_select('.more-fields .combobox-input')
85274                             .on('click.intro', function() {
85275                                 // Watch for the combobox to appear...
85276                                 var watcher;
85277                                 watcher = window.setInterval(function() {
85278                                     if (!d3_select('div.combobox').empty()) {
85279                                         window.clearInterval(watcher);
85280                                         continueTo(chooseDescriptionField);
85281                                     }
85282                                 }, 300);
85283                             });
85284                     }, 300);  // after "Add Field" visible
85285
85286                 }, 400);  // after editor pane visible
85287
85288                 context.on('exit.intro', function() {
85289                     return continueTo(searchPresets);
85290                 });
85291
85292                 function continueTo(nextStep) {
85293                     d3_select('.inspector-wrap').on('wheel.intro', null);
85294                     d3_select('.more-fields .combobox-input').on('click.intro', null);
85295                     context.on('exit.intro', null);
85296                     nextStep();
85297                 }
85298             }
85299
85300
85301             function chooseDescriptionField() {
85302                 if (!_areaID || !context.hasEntity(_areaID)) {
85303                     return addArea();
85304                 }
85305                 var ids = context.selectedIDs();
85306                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
85307                     return searchPresets();
85308                 }
85309
85310                 if (!d3_select('.form-field-description').empty()) {
85311                     return continueTo(describePlayground);
85312                 }
85313
85314                 // Make sure combobox is ready..
85315                 if (d3_select('div.combobox').empty()) {
85316                     return continueTo(clickAddField);
85317                 }
85318                 // Watch for the combobox to go away..
85319                 var watcher;
85320                 watcher = window.setInterval(function() {
85321                     if (d3_select('div.combobox').empty()) {
85322                         window.clearInterval(watcher);
85323                         timeout(function() {
85324                             if (d3_select('.form-field-description').empty()) {
85325                                 continueTo(retryChooseDescription);
85326                             } else {
85327                                 continueTo(describePlayground);
85328                             }
85329                         }, 300);  // after description field added.
85330                     }
85331                 }, 300);
85332
85333                 reveal('div.combobox',
85334                     t('intro.areas.choose_field', { field: descriptionField.label() }),
85335                     { duration: 300 }
85336                 );
85337
85338                 context.on('exit.intro', function() {
85339                     return continueTo(searchPresets);
85340                 });
85341
85342                 function continueTo(nextStep) {
85343                     if (watcher) window.clearInterval(watcher);
85344                     context.on('exit.intro', null);
85345                     nextStep();
85346                 }
85347             }
85348
85349
85350             function describePlayground() {
85351                 if (!_areaID || !context.hasEntity(_areaID)) {
85352                     return addArea();
85353                 }
85354                 var ids = context.selectedIDs();
85355                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
85356                     return searchPresets();
85357                 }
85358
85359                 // reset pane, in case user happened to change it..
85360                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
85361
85362                 if (d3_select('.form-field-description').empty()) {
85363                     return continueTo(retryChooseDescription);
85364                 }
85365
85366                 context.on('exit.intro', function() {
85367                     continueTo(play);
85368                 });
85369
85370                 reveal('.entity-editor-pane',
85371                     t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
85372                     { duration: 300 }
85373                 );
85374
85375                 function continueTo(nextStep) {
85376                     context.on('exit.intro', null);
85377                     nextStep();
85378                 }
85379             }
85380
85381
85382             function retryChooseDescription() {
85383                 if (!_areaID || !context.hasEntity(_areaID)) {
85384                     return addArea();
85385                 }
85386                 var ids = context.selectedIDs();
85387                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
85388                     return searchPresets();
85389                 }
85390
85391                 // reset pane, in case user happened to change it..
85392                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
85393
85394                 reveal('.entity-editor-pane',
85395                     t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
85396                     buttonText: t('intro.ok'),
85397                     buttonCallback: function() { continueTo(clickAddField); }
85398                 });
85399
85400                 context.on('exit.intro', function() {
85401                     return continueTo(searchPresets);
85402                 });
85403
85404                 function continueTo(nextStep) {
85405                     context.on('exit.intro', null);
85406                     nextStep();
85407                 }
85408             }
85409
85410
85411             function play() {
85412                 dispatch$1.call('done');
85413                 reveal('#id-container',
85414                     t('intro.areas.play', { next: t('intro.lines.title') }), {
85415                         tooltipBox: '.intro-nav-wrap .chapter-line',
85416                         buttonText: t('intro.ok'),
85417                         buttonCallback: function() { reveal('#id-container'); }
85418                     }
85419                 );
85420             }
85421
85422
85423             chapter.enter = function() {
85424                 addArea();
85425             };
85426
85427
85428             chapter.exit = function() {
85429                 timeouts.forEach(window.clearTimeout);
85430                 context.on('enter.intro exit.intro', null);
85431                 context.map().on('move.intro drawn.intro', null);
85432                 context.history().on('change.intro', null);
85433                 d3_select('.inspector-wrap').on('wheel.intro', null);
85434                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
85435                 d3_select('.more-fields .combobox-input').on('click.intro', null);
85436             };
85437
85438
85439             chapter.restart = function() {
85440                 chapter.exit();
85441                 chapter.enter();
85442             };
85443
85444
85445             return utilRebind(chapter, dispatch$1, 'on');
85446         }
85447
85448         function uiIntroLine(context, reveal) {
85449             var dispatch$1 = dispatch('done');
85450             var timeouts = [];
85451             var _tulipRoadID = null;
85452             var flowerRoadID = 'w646';
85453             var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
85454             var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
85455             var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
85456             var roadCategory = context.presets().item('category-road_minor');
85457             var residentialPreset = context.presets().item('highway/residential');
85458             var woodRoadID = 'w525';
85459             var woodRoadEndID = 'n2862';
85460             var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
85461             var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
85462             var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
85463             var washingtonStreetID = 'w522';
85464             var twelfthAvenueID = 'w1';
85465             var eleventhAvenueEndID = 'n3550';
85466             var twelfthAvenueEndID = 'n5';
85467             var _washingtonSegmentID = null;
85468             var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
85469             var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
85470             var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
85471             var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
85472
85473
85474             var chapter = {
85475                 title: 'intro.lines.title'
85476             };
85477
85478
85479             function timeout(f, t) {
85480                 timeouts.push(window.setTimeout(f, t));
85481             }
85482
85483
85484             function eventCancel() {
85485                 event.stopPropagation();
85486                 event.preventDefault();
85487             }
85488
85489
85490             function revealEditMenu(loc, text, options) {
85491                 var rect = context.surfaceRect();
85492                 var point = context.curtainProjection(loc);
85493                 var pad = 40;
85494                 var width = 250 + (2 * pad);
85495                 var height = 350;
85496                 var startX = rect.left + point[0];
85497                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
85498                 var box = {
85499                     left: left,
85500                     top: point[1] + rect.top - 60,
85501                     width: width,
85502                     height: height
85503                 };
85504                 reveal(box, text, options);
85505             }
85506
85507
85508             function addLine() {
85509                 context.enter(modeBrowse(context));
85510                 context.history().reset('initial');
85511
85512                 var msec = transitionTime(tulipRoadStart, context.map().center());
85513                 if (msec) { reveal(null, null, { duration: 0 }); }
85514                 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
85515
85516                 timeout(function() {
85517                     var tooltip = reveal('button.add-line',
85518                         t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
85519
85520                     tooltip.selectAll('.tooltip-inner')
85521                         .insert('svg', 'span')
85522                         .attr('class', 'tooltip-illustration')
85523                         .append('use')
85524                         .attr('xlink:href', '#iD-graphic-lines');
85525
85526                     context.on('enter.intro', function(mode) {
85527                         if (mode.id !== 'add-line') return;
85528                         continueTo(startLine);
85529                     });
85530                 }, msec + 100);
85531
85532                 function continueTo(nextStep) {
85533                     context.on('enter.intro', null);
85534                     nextStep();
85535                 }
85536             }
85537
85538
85539             function startLine() {
85540                 if (context.mode().id !== 'add-line') return chapter.restart();
85541
85542                 _tulipRoadID = null;
85543
85544                 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
85545                 var box = pad$2(tulipRoadStart, padding, context);
85546                 box.height = box.height + 100;
85547                 reveal(box, t('intro.lines.start_line'));
85548
85549                 context.map().on('move.intro drawn.intro', function() {
85550                     padding = 70 * Math.pow(2, context.map().zoom() - 18);
85551                     box = pad$2(tulipRoadStart, padding, context);
85552                     box.height = box.height + 100;
85553                     reveal(box, t('intro.lines.start_line'), { duration: 0 });
85554                 });
85555
85556                 context.on('enter.intro', function(mode) {
85557                     if (mode.id !== 'draw-line') return chapter.restart();
85558                     continueTo(drawLine);
85559                 });
85560
85561                 function continueTo(nextStep) {
85562                     context.map().on('move.intro drawn.intro', null);
85563                     context.on('enter.intro', null);
85564                     nextStep();
85565                 }
85566             }
85567
85568
85569             function drawLine() {
85570                 if (context.mode().id !== 'draw-line') return chapter.restart();
85571
85572                 _tulipRoadID = context.mode().selectedIDs()[0];
85573                 context.map().centerEase(tulipRoadMidpoint, 500);
85574
85575                 timeout(function() {
85576                     var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
85577                     var box = pad$2(tulipRoadMidpoint, padding, context);
85578                     box.height = box.height * 2;
85579                     reveal(box,
85580                         t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
85581                     );
85582
85583                     context.map().on('move.intro drawn.intro', function() {
85584                         padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
85585                         box = pad$2(tulipRoadMidpoint, padding, context);
85586                         box.height = box.height * 2;
85587                         reveal(box,
85588                             t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
85589                             { duration: 0 }
85590                         );
85591                     });
85592                 }, 550);  // after easing..
85593
85594                 context.history().on('change.intro', function() {
85595                     if (isLineConnected()) {
85596                         continueTo(continueLine);
85597                     }
85598                 });
85599
85600                 context.on('enter.intro', function(mode) {
85601                     if (mode.id === 'draw-line') {
85602                         return;
85603                     } else if (mode.id === 'select') {
85604                         continueTo(retryIntersect);
85605                         return;
85606                     } else {
85607                         return chapter.restart();
85608                     }
85609                 });
85610
85611                 function continueTo(nextStep) {
85612                     context.map().on('move.intro drawn.intro', null);
85613                     context.history().on('change.intro', null);
85614                     context.on('enter.intro', null);
85615                     nextStep();
85616                 }
85617             }
85618
85619
85620             function isLineConnected() {
85621                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
85622                 if (!entity) return false;
85623
85624                 var drawNodes = context.graph().childNodes(entity);
85625                 return drawNodes.some(function(node) {
85626                     return context.graph().parentWays(node).some(function(parent) {
85627                         return parent.id === flowerRoadID;
85628                     });
85629                 });
85630             }
85631
85632
85633             function retryIntersect() {
85634                 d3_select(window).on('mousedown.intro', eventCancel, true);
85635
85636                 var box = pad$2(tulipRoadIntersection, 80, context);
85637                 reveal(box,
85638                     t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
85639                 );
85640
85641                 timeout(chapter.restart, 3000);
85642             }
85643
85644
85645             function continueLine() {
85646                 if (context.mode().id !== 'draw-line') return chapter.restart();
85647                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
85648                 if (!entity) return chapter.restart();
85649
85650                 context.map().centerEase(tulipRoadIntersection, 500);
85651
85652                 reveal('#surface', t('intro.lines.continue_line'));
85653
85654                 context.on('enter.intro', function(mode) {
85655                     if (mode.id === 'draw-line')
85656                         return;
85657                     else if (mode.id === 'select')
85658                         return continueTo(chooseCategoryRoad);
85659                     else
85660                         return chapter.restart();
85661                 });
85662
85663                 function continueTo(nextStep) {
85664                     context.on('enter.intro', null);
85665                     nextStep();
85666                 }
85667             }
85668
85669
85670             function chooseCategoryRoad() {
85671                 if (context.mode().id !== 'select') return chapter.restart();
85672
85673                 context.on('exit.intro', function() {
85674                     return chapter.restart();
85675                 });
85676
85677                 var button = d3_select('.preset-category-road_minor .preset-list-button');
85678                 if (button.empty()) return chapter.restart();
85679
85680                 // disallow scrolling
85681                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85682
85683                 timeout(function() {
85684                     // reset pane, in case user somehow happened to change it..
85685                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
85686
85687                     reveal(button.node(),
85688                         t('intro.lines.choose_category_road', { category: roadCategory.name() })
85689                     );
85690
85691                     button.on('click.intro', function() {
85692                         continueTo(choosePresetResidential);
85693                     });
85694
85695                 }, 400);  // after editor pane visible
85696
85697                 function continueTo(nextStep) {
85698                     d3_select('.inspector-wrap').on('wheel.intro', null);
85699                     d3_select('.preset-list-button').on('click.intro', null);
85700                     context.on('exit.intro', null);
85701                     nextStep();
85702                 }
85703             }
85704
85705
85706             function choosePresetResidential() {
85707                 if (context.mode().id !== 'select') return chapter.restart();
85708
85709                 context.on('exit.intro', function() {
85710                     return chapter.restart();
85711                 });
85712
85713                 var subgrid = d3_select('.preset-category-road_minor .subgrid');
85714                 if (subgrid.empty()) return chapter.restart();
85715
85716                 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
85717                     .on('click.intro', function() {
85718                         continueTo(retryPresetResidential);
85719                     });
85720
85721                 subgrid.selectAll('.preset-highway-residential .preset-list-button')
85722                     .on('click.intro', function() {
85723                         continueTo(nameRoad);
85724                     });
85725
85726                 timeout(function() {
85727                     reveal(subgrid.node(),
85728                         t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
85729                         { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
85730                     );
85731                 }, 300);
85732
85733                 function continueTo(nextStep) {
85734                     d3_select('.preset-list-button').on('click.intro', null);
85735                     context.on('exit.intro', null);
85736                     nextStep();
85737                 }
85738             }
85739
85740
85741             // selected wrong road type
85742             function retryPresetResidential() {
85743                 if (context.mode().id !== 'select') return chapter.restart();
85744
85745                 context.on('exit.intro', function() {
85746                     return chapter.restart();
85747                 });
85748
85749                 // disallow scrolling
85750                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
85751
85752                 timeout(function() {
85753                     var button = d3_select('.entity-editor-pane .preset-list-button');
85754
85755                     reveal(button.node(),
85756                         t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
85757                     );
85758
85759                     button.on('click.intro', function() {
85760                         continueTo(chooseCategoryRoad);
85761                     });
85762
85763                 }, 500);
85764
85765                 function continueTo(nextStep) {
85766                     d3_select('.inspector-wrap').on('wheel.intro', null);
85767                     d3_select('.preset-list-button').on('click.intro', null);
85768                     context.on('exit.intro', null);
85769                     nextStep();
85770                 }
85771             }
85772
85773
85774             function nameRoad() {
85775                 context.on('exit.intro', function() {
85776                     continueTo(didNameRoad);
85777                 });
85778
85779                 timeout(function() {
85780                     reveal('.entity-editor-pane',
85781                         t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
85782                         { tooltipClass: 'intro-lines-name_road' }
85783                     );
85784                 }, 500);
85785
85786                 function continueTo(nextStep) {
85787                     context.on('exit.intro', null);
85788                     nextStep();
85789                 }
85790             }
85791
85792
85793             function didNameRoad() {
85794                 context.history().checkpoint('doneAddLine');
85795
85796                 timeout(function() {
85797                     reveal('#surface', t('intro.lines.did_name_road'), {
85798                         buttonText: t('intro.ok'),
85799                         buttonCallback: function() { continueTo(updateLine); }
85800                     });
85801                 }, 500);
85802
85803                 function continueTo(nextStep) {
85804                     nextStep();
85805                 }
85806             }
85807
85808
85809             function updateLine() {
85810                 context.history().reset('doneAddLine');
85811                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85812                     return chapter.restart();
85813                 }
85814
85815                 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
85816                 if (msec) { reveal(null, null, { duration: 0 }); }
85817                 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
85818
85819                 timeout(function() {
85820                     var padding = 250 * Math.pow(2, context.map().zoom() - 19);
85821                     var box = pad$2(woodRoadDragMidpoint, padding, context);
85822                     var advance = function() { continueTo(addNode); };
85823
85824                     reveal(box, t('intro.lines.update_line'),
85825                         { buttonText: t('intro.ok'), buttonCallback: advance }
85826                     );
85827
85828                     context.map().on('move.intro drawn.intro', function() {
85829                         var padding = 250 * Math.pow(2, context.map().zoom() - 19);
85830                         var box = pad$2(woodRoadDragMidpoint, padding, context);
85831                         reveal(box, t('intro.lines.update_line'),
85832                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
85833                         );
85834                     });
85835                 }, msec + 100);
85836
85837                 function continueTo(nextStep) {
85838                     context.map().on('move.intro drawn.intro', null);
85839                     nextStep();
85840                 }
85841             }
85842
85843
85844             function addNode() {
85845                 context.history().reset('doneAddLine');
85846                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85847                     return chapter.restart();
85848                 }
85849
85850                 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
85851                 var box = pad$2(woodRoadAddNode, padding, context);
85852                 reveal(box, t('intro.lines.add_node'));
85853
85854                 context.map().on('move.intro drawn.intro', function() {
85855                     var padding = 40 * Math.pow(2, context.map().zoom() - 19);
85856                     var box = pad$2(woodRoadAddNode, padding, context);
85857                     reveal(box, t('intro.lines.add_node'), { duration: 0 });
85858                 });
85859
85860                 context.history().on('change.intro', function(changed) {
85861                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85862                         return continueTo(updateLine);
85863                     }
85864                     if (changed.created().length === 1) {
85865                         timeout(function() { continueTo(startDragEndpoint); }, 500);
85866                     }
85867                 });
85868
85869                 context.on('enter.intro', function(mode) {
85870                     if (mode.id !== 'select') {
85871                         continueTo(updateLine);
85872                     }
85873                 });
85874
85875                 function continueTo(nextStep) {
85876                     context.map().on('move.intro drawn.intro', null);
85877                     context.history().on('change.intro', null);
85878                     context.on('enter.intro', null);
85879                     nextStep();
85880                 }
85881             }
85882
85883
85884             function startDragEndpoint() {
85885                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85886                     return continueTo(updateLine);
85887                 }
85888                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85889                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85890                 reveal(box, t('intro.lines.start_drag_endpoint'));
85891
85892                 context.map().on('move.intro drawn.intro', function() {
85893                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85894                         return continueTo(updateLine);
85895                     }
85896                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85897                     var box = pad$2(woodRoadDragEndpoint, padding, context);
85898                     reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
85899
85900                     var entity = context.entity(woodRoadEndID);
85901                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
85902                         continueTo(finishDragEndpoint);
85903                     }
85904                 });
85905
85906                 function continueTo(nextStep) {
85907                     context.map().on('move.intro drawn.intro', null);
85908                     nextStep();
85909                 }
85910             }
85911
85912
85913             function finishDragEndpoint() {
85914                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85915                     return continueTo(updateLine);
85916                 }
85917
85918                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85919                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85920                 reveal(box, t('intro.lines.finish_drag_endpoint'));
85921
85922                 context.map().on('move.intro drawn.intro', function() {
85923                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85924                         return continueTo(updateLine);
85925                     }
85926                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85927                     var box = pad$2(woodRoadDragEndpoint, padding, context);
85928                     reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
85929
85930                     var entity = context.entity(woodRoadEndID);
85931                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
85932                         continueTo(startDragEndpoint);
85933                     }
85934                 });
85935
85936                 context.on('enter.intro', function() {
85937                     continueTo(startDragMidpoint);
85938                 });
85939
85940                 function continueTo(nextStep) {
85941                     context.map().on('move.intro drawn.intro', null);
85942                     context.on('enter.intro', null);
85943                     nextStep();
85944                 }
85945             }
85946
85947
85948             function startDragMidpoint() {
85949                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85950                     return continueTo(updateLine);
85951                 }
85952                 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
85953                     context.enter(modeSelect(context, [woodRoadID]));
85954                 }
85955
85956                 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
85957                 var box = pad$2(woodRoadDragMidpoint, padding, context);
85958                 reveal(box, t('intro.lines.start_drag_midpoint'));
85959
85960                 context.map().on('move.intro drawn.intro', function() {
85961                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85962                         return continueTo(updateLine);
85963                     }
85964                     var padding = 80 * Math.pow(2, context.map().zoom() - 19);
85965                     var box = pad$2(woodRoadDragMidpoint, padding, context);
85966                     reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
85967                 });
85968
85969                 context.history().on('change.intro', function(changed) {
85970                     if (changed.created().length === 1) {
85971                         continueTo(continueDragMidpoint);
85972                     }
85973                 });
85974
85975                 context.on('enter.intro', function(mode) {
85976                     if (mode.id !== 'select') {
85977                         // keep Wood Road selected so midpoint triangles are drawn..
85978                         context.enter(modeSelect(context, [woodRoadID]));
85979                     }
85980                 });
85981
85982                 function continueTo(nextStep) {
85983                     context.map().on('move.intro drawn.intro', null);
85984                     context.history().on('change.intro', null);
85985                     context.on('enter.intro', null);
85986                     nextStep();
85987                 }
85988             }
85989
85990
85991             function continueDragMidpoint() {
85992                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
85993                     return continueTo(updateLine);
85994                 }
85995
85996                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
85997                 var box = pad$2(woodRoadDragEndpoint, padding, context);
85998                 box.height += 400;
85999
86000                 var advance = function() {
86001                     context.history().checkpoint('doneUpdateLine');
86002                     continueTo(deleteLines);
86003                 };
86004
86005                 reveal(box, t('intro.lines.continue_drag_midpoint'),
86006                     { buttonText: t('intro.ok'), buttonCallback: advance }
86007                 );
86008
86009                 context.map().on('move.intro drawn.intro', function() {
86010                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
86011                         return continueTo(updateLine);
86012                     }
86013                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
86014                     var box = pad$2(woodRoadDragEndpoint, padding, context);
86015                     box.height += 400;
86016                     reveal(box, t('intro.lines.continue_drag_midpoint'),
86017                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
86018                     );
86019                 });
86020
86021                 function continueTo(nextStep) {
86022                     context.map().on('move.intro drawn.intro', null);
86023                     nextStep();
86024                 }
86025             }
86026
86027
86028             function deleteLines() {
86029                 context.history().reset('doneUpdateLine');
86030                 context.enter(modeBrowse(context));
86031
86032                 if (!context.hasEntity(washingtonStreetID) ||
86033                     !context.hasEntity(twelfthAvenueID) ||
86034                     !context.hasEntity(eleventhAvenueEndID)) {
86035                     return chapter.restart();
86036                 }
86037
86038                 var msec = transitionTime(deleteLinesLoc, context.map().center());
86039                 if (msec) { reveal(null, null, { duration: 0 }); }
86040                 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
86041
86042                 timeout(function() {
86043                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86044                     var box = pad$2(deleteLinesLoc, padding, context);
86045                     box.top -= 200;
86046                     box.height += 400;
86047                     var advance = function() { continueTo(rightClickIntersection); };
86048
86049                     reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
86050                         { buttonText: t('intro.ok'), buttonCallback: advance }
86051                     );
86052
86053                     context.map().on('move.intro drawn.intro', function() {
86054                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86055                         var box = pad$2(deleteLinesLoc, padding, context);
86056                         box.top -= 200;
86057                         box.height += 400;
86058                         reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
86059                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
86060                         );
86061                     });
86062
86063                     context.history().on('change.intro', function() {
86064                         timeout(function() {
86065                             continueTo(deleteLines);
86066                         }, 500);  // after any transition (e.g. if user deleted intersection)
86067                     });
86068
86069                 }, msec + 100);
86070
86071                 function continueTo(nextStep) {
86072                     context.map().on('move.intro drawn.intro', null);
86073                     context.history().on('change.intro', null);
86074                     nextStep();
86075                 }
86076             }
86077
86078
86079             function rightClickIntersection() {
86080                 context.history().reset('doneUpdateLine');
86081                 context.enter(modeBrowse(context));
86082
86083                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
86084
86085                 timeout(function() {
86086                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
86087                     var box = pad$2(eleventhAvenueEnd, padding, context);
86088                     reveal(box, t('intro.lines.rightclick_intersection',
86089                         { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
86090                     );
86091
86092                     context.map().on('move.intro drawn.intro', function() {
86093                         var padding = 60 * Math.pow(2, context.map().zoom() - 18);
86094                         var box = pad$2(eleventhAvenueEnd, padding, context);
86095                         reveal(box, t('intro.lines.rightclick_intersection',
86096                             { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
86097                             { duration: 0 }
86098                         );
86099                     });
86100
86101                     context.on('enter.intro', function(mode) {
86102                         if (mode.id !== 'select') return;
86103                         var ids = context.selectedIDs();
86104                         if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) return;
86105
86106                         timeout(function() {
86107                             var node = selectMenuItem('split').node();
86108                             if (!node) return;
86109                             continueTo(splitIntersection);
86110                         }, 300);  // after menu visible
86111                     });
86112
86113                     context.history().on('change.intro', function() {
86114                         timeout(function() {
86115                             continueTo(deleteLines);
86116                         }, 300);  // after any transition (e.g. if user deleted intersection)
86117                     });
86118
86119                 }, 600);
86120
86121                 function continueTo(nextStep) {
86122                     context.map().on('move.intro drawn.intro', null);
86123                     context.on('enter.intro', null);
86124                     context.history().on('change.intro', null);
86125                     nextStep();
86126                 }
86127             }
86128
86129
86130             function splitIntersection() {
86131                 if (!context.hasEntity(washingtonStreetID) ||
86132                     !context.hasEntity(twelfthAvenueID) ||
86133                     !context.hasEntity(eleventhAvenueEndID)) {
86134                     return continueTo(deleteLines);
86135                 }
86136
86137                 var node = selectMenuItem('split').node();
86138                 if (!node) { return continueTo(rightClickIntersection); }
86139
86140                 var wasChanged = false;
86141                 var menuCoords = context.map().mouseCoordinates();
86142                 _washingtonSegmentID = null;
86143
86144                 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
86145                     { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
86146                 );
86147
86148                 context.map().on('move.intro drawn.intro', function() {
86149                     var node = selectMenuItem('split').node();
86150                     if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
86151
86152                     revealEditMenu(menuCoords, t('intro.lines.split_intersection',
86153                         { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
86154                         { duration: 0 }
86155                     );
86156                 });
86157
86158                 context.history().on('change.intro', function(changed) {
86159                     wasChanged = true;
86160                     timeout(function() {
86161                         if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
86162                             _washingtonSegmentID = changed.created()[0].id;
86163                             continueTo(didSplit);
86164                         } else {
86165                             _washingtonSegmentID = null;
86166                             continueTo(retrySplit);
86167                         }
86168                     }, 300);  // after any transition (e.g. if user deleted intersection)
86169                 });
86170
86171                 function continueTo(nextStep) {
86172                     context.map().on('move.intro drawn.intro', null);
86173                     context.history().on('change.intro', null);
86174                     nextStep();
86175                 }
86176             }
86177
86178
86179             function retrySplit() {
86180                 context.enter(modeBrowse(context));
86181                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
86182                 var advance = function() { continueTo(rightClickIntersection); };
86183
86184                 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
86185                 var box = pad$2(eleventhAvenueEnd, padding, context);
86186                 reveal(box, t('intro.lines.retry_split'),
86187                     { buttonText: t('intro.ok'), buttonCallback: advance }
86188                 );
86189
86190                 context.map().on('move.intro drawn.intro', function() {
86191                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
86192                     var box = pad$2(eleventhAvenueEnd, padding, context);
86193                     reveal(box, t('intro.lines.retry_split'),
86194                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
86195                     );
86196                 });
86197
86198                 function continueTo(nextStep) {
86199                     context.map().on('move.intro drawn.intro', null);
86200                     nextStep();
86201                 }
86202             }
86203
86204
86205             function didSplit() {
86206                 if (!_washingtonSegmentID ||
86207                     !context.hasEntity(_washingtonSegmentID) ||
86208                     !context.hasEntity(washingtonStreetID) ||
86209                     !context.hasEntity(twelfthAvenueID) ||
86210                     !context.hasEntity(eleventhAvenueEndID)) {
86211                     return continueTo(rightClickIntersection);
86212                 }
86213
86214                 var ids = context.selectedIDs();
86215                 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
86216                 var street = t('intro.graph.name.washington-street');
86217
86218                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86219                 var box = pad$2(twelfthAvenue, padding, context);
86220                 box.width = box.width / 2;
86221                 reveal(box, t(string, { street1: street, street2: street }),
86222                     { duration: 500 }
86223                 );
86224
86225                 timeout(function() {
86226                     context.map().centerZoomEase(twelfthAvenue, 18, 500);
86227
86228                     context.map().on('move.intro drawn.intro', function() {
86229                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86230                         var box = pad$2(twelfthAvenue, padding, context);
86231                         box.width = box.width / 2;
86232                         reveal(box, t(string, { street1: street, street2: street }),
86233                             { duration: 0 }
86234                         );
86235                     });
86236                 }, 600);  // after initial reveal and curtain cut
86237
86238                 context.on('enter.intro', function() {
86239                     var ids = context.selectedIDs();
86240                     if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
86241                         continueTo(multiSelect);
86242                     }
86243                 });
86244
86245                 context.history().on('change.intro', function() {
86246                     if (!_washingtonSegmentID ||
86247                         !context.hasEntity(_washingtonSegmentID) ||
86248                         !context.hasEntity(washingtonStreetID) ||
86249                         !context.hasEntity(twelfthAvenueID) ||
86250                         !context.hasEntity(eleventhAvenueEndID)) {
86251                         return continueTo(rightClickIntersection);
86252                     }
86253                 });
86254
86255                 function continueTo(nextStep) {
86256                     context.map().on('move.intro drawn.intro', null);
86257                     context.on('enter.intro', null);
86258                     context.history().on('change.intro', null);
86259                     nextStep();
86260                 }
86261             }
86262
86263
86264             function multiSelect() {
86265                 if (!_washingtonSegmentID ||
86266                     !context.hasEntity(_washingtonSegmentID) ||
86267                     !context.hasEntity(washingtonStreetID) ||
86268                     !context.hasEntity(twelfthAvenueID) ||
86269                     !context.hasEntity(eleventhAvenueEndID)) {
86270                     return continueTo(rightClickIntersection);
86271                 }
86272
86273                 var ids = context.selectedIDs();
86274                 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
86275                 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
86276
86277                 if (hasWashington && hasTwelfth) {
86278                     return continueTo(multiRightClick);
86279                 } else if (!hasWashington && !hasTwelfth) {
86280                     return continueTo(didSplit);
86281                 }
86282
86283                 context.map().centerZoomEase(twelfthAvenue, 18, 500);
86284
86285                 timeout(function() {
86286                     var selected, other, padding, box;
86287                     if (hasWashington) {
86288                         selected = t('intro.graph.name.washington-street');
86289                         other = t('intro.graph.name.12th-avenue');
86290                         padding = 60 * Math.pow(2, context.map().zoom() - 18);
86291                         box = pad$2(twelfthAvenueEnd, padding, context);
86292                         box.width *= 3;
86293                     } else {
86294                         selected = t('intro.graph.name.12th-avenue');
86295                         other = t('intro.graph.name.washington-street');
86296                         padding = 200 * Math.pow(2, context.map().zoom() - 18);
86297                         box = pad$2(twelfthAvenue, padding, context);
86298                         box.width /= 2;
86299                     }
86300
86301                     reveal(box,
86302                         t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
86303                     );
86304
86305                     context.map().on('move.intro drawn.intro', function() {
86306                         if (hasWashington) {
86307                             selected = t('intro.graph.name.washington-street');
86308                             other = t('intro.graph.name.12th-avenue');
86309                             padding = 60 * Math.pow(2, context.map().zoom() - 18);
86310                             box = pad$2(twelfthAvenueEnd, padding, context);
86311                             box.width *= 3;
86312                         } else {
86313                             selected = t('intro.graph.name.12th-avenue');
86314                             other = t('intro.graph.name.washington-street');
86315                             padding = 200 * Math.pow(2, context.map().zoom() - 18);
86316                             box = pad$2(twelfthAvenue, padding, context);
86317                             box.width /= 2;
86318                         }
86319
86320                         reveal(box,
86321                             t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
86322                             { duration: 0 }
86323                         );
86324                     });
86325
86326                     context.on('enter.intro', function() {
86327                         continueTo(multiSelect);
86328                     });
86329
86330                     context.history().on('change.intro', function() {
86331                         if (!_washingtonSegmentID ||
86332                             !context.hasEntity(_washingtonSegmentID) ||
86333                             !context.hasEntity(washingtonStreetID) ||
86334                             !context.hasEntity(twelfthAvenueID) ||
86335                             !context.hasEntity(eleventhAvenueEndID)) {
86336                             return continueTo(rightClickIntersection);
86337                         }
86338                     });
86339                 }, 600);
86340
86341                 function continueTo(nextStep) {
86342                     context.map().on('move.intro drawn.intro', null);
86343                     context.on('enter.intro', null);
86344                     context.history().on('change.intro', null);
86345                     nextStep();
86346                 }
86347             }
86348
86349
86350             function multiRightClick() {
86351                 if (!_washingtonSegmentID ||
86352                     !context.hasEntity(_washingtonSegmentID) ||
86353                     !context.hasEntity(washingtonStreetID) ||
86354                     !context.hasEntity(twelfthAvenueID) ||
86355                     !context.hasEntity(eleventhAvenueEndID)) {
86356                     return continueTo(rightClickIntersection);
86357                 }
86358
86359                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86360                 var box = pad$2(twelfthAvenue, padding, context);
86361                 reveal(box, t('intro.lines.multi_rightclick'));
86362
86363                 context.map().on('move.intro drawn.intro', function() {
86364                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86365                     var box = pad$2(twelfthAvenue, padding, context);
86366                     reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
86367                 });
86368
86369                 d3_select(window).on('click.intro contextmenu.intro', function() {
86370                     timeout(function() {
86371                         var ids = context.selectedIDs();
86372                         if (ids.length === 2 &&
86373                             ids.indexOf(twelfthAvenueID) !== -1 &&
86374                             ids.indexOf(_washingtonSegmentID) !== -1) {
86375                                 var node = selectMenuItem('delete').node();
86376                                 if (!node) return;
86377                                 continueTo(multiDelete);
86378                         } else if (ids.length === 1 &&
86379                             ids.indexOf(_washingtonSegmentID) !== -1) {
86380                             return continueTo(multiSelect);
86381                         } else {
86382                             return continueTo(didSplit);
86383                         }
86384                     }, 300);  // after edit menu visible
86385                 }, true);
86386
86387                 context.history().on('change.intro', function() {
86388                     if (!_washingtonSegmentID ||
86389                         !context.hasEntity(_washingtonSegmentID) ||
86390                         !context.hasEntity(washingtonStreetID) ||
86391                         !context.hasEntity(twelfthAvenueID) ||
86392                         !context.hasEntity(eleventhAvenueEndID)) {
86393                         return continueTo(rightClickIntersection);
86394                     }
86395                 });
86396
86397                 function continueTo(nextStep) {
86398                     context.map().on('move.intro drawn.intro', null);
86399                     d3_select(window).on('click.intro contextmenu.intro', null, true);
86400                     context.history().on('change.intro', null);
86401                     nextStep();
86402                 }
86403             }
86404
86405
86406             function multiDelete() {
86407                 if (!_washingtonSegmentID ||
86408                     !context.hasEntity(_washingtonSegmentID) ||
86409                     !context.hasEntity(washingtonStreetID) ||
86410                     !context.hasEntity(twelfthAvenueID) ||
86411                     !context.hasEntity(eleventhAvenueEndID)) {
86412                     return continueTo(rightClickIntersection);
86413                 }
86414
86415                 var node = selectMenuItem('delete').node();
86416                 if (!node) return continueTo(multiRightClick);
86417
86418                 var menuCoords = context.map().mouseCoordinates();
86419                 revealEditMenu(menuCoords,
86420                     t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
86421                 );
86422
86423                 context.map().on('move.intro drawn.intro', function() {
86424                     revealEditMenu(menuCoords,
86425                         t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
86426                         { duration: 0 }
86427                     );
86428                 });
86429
86430                 context.on('exit.intro', function() {
86431                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
86432                         return continueTo(multiSelect);  // left select mode but roads still exist
86433                     }
86434                 });
86435
86436                 context.history().on('change.intro', function() {
86437                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
86438                         continueTo(retryDelete);         // changed something but roads still exist
86439                     } else {
86440                         continueTo(play);
86441                     }
86442                 });
86443
86444                 function continueTo(nextStep) {
86445                     context.map().on('move.intro drawn.intro', null);
86446                     context.on('exit.intro', null);
86447                     context.history().on('change.intro', null);
86448                     nextStep();
86449                 }
86450             }
86451
86452
86453             function retryDelete() {
86454                 context.enter(modeBrowse(context));
86455
86456                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
86457                 var box = pad$2(twelfthAvenue, padding, context);
86458                 reveal(box, t('intro.lines.retry_delete'), {
86459                     buttonText: t('intro.ok'),
86460                     buttonCallback: function() { continueTo(multiSelect); }
86461                 });
86462
86463                 function continueTo(nextStep) {
86464                     nextStep();
86465                 }
86466             }
86467
86468
86469             function play() {
86470                 dispatch$1.call('done');
86471                 reveal('#id-container',
86472                     t('intro.lines.play', { next: t('intro.buildings.title') }), {
86473                         tooltipBox: '.intro-nav-wrap .chapter-building',
86474                         buttonText: t('intro.ok'),
86475                         buttonCallback: function() { reveal('#id-container'); }
86476                     }
86477                 );
86478            }
86479
86480
86481             chapter.enter = function() {
86482                 addLine();
86483             };
86484
86485
86486             chapter.exit = function() {
86487                 timeouts.forEach(window.clearTimeout);
86488                 d3_select(window).on('mousedown.intro', null, true);
86489                 context.on('enter.intro exit.intro', null);
86490                 context.map().on('move.intro drawn.intro', null);
86491                 context.history().on('change.intro', null);
86492                 d3_select('.inspector-wrap').on('wheel.intro', null);
86493                 d3_select('.preset-list-button').on('click.intro', null);
86494             };
86495
86496
86497             chapter.restart = function() {
86498                 chapter.exit();
86499                 chapter.enter();
86500             };
86501
86502
86503             return utilRebind(chapter, dispatch$1, 'on');
86504         }
86505
86506         function uiIntroBuilding(context, reveal) {
86507             var dispatch$1 = dispatch('done');
86508             var house = [-85.62815, 41.95638];
86509             var tank = [-85.62732, 41.95347];
86510             var buildingCatetory = context.presets().item('category-building');
86511             var housePreset = context.presets().item('building/house');
86512             var tankPreset = context.presets().item('man_made/storage_tank');
86513             var timeouts = [];
86514             var _houseID = null;
86515             var _tankID = null;
86516
86517
86518             var chapter = {
86519                 title: 'intro.buildings.title'
86520             };
86521
86522
86523             function timeout(f, t) {
86524                 timeouts.push(window.setTimeout(f, t));
86525             }
86526
86527
86528             function eventCancel() {
86529                 event.stopPropagation();
86530                 event.preventDefault();
86531             }
86532
86533
86534             function revealHouse(center, text, options) {
86535                 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
86536                 var box = pad$2(center, padding, context);
86537                 reveal(box, text, options);
86538             }
86539
86540
86541             function revealTank(center, text, options) {
86542                 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
86543                 var box = pad$2(center, padding, context);
86544                 reveal(box, text, options);
86545             }
86546
86547
86548             function revealEditMenu(loc, text, options) {
86549                 var rect = context.surfaceRect();
86550                 var point = context.curtainProjection(loc);
86551                 var pad = 40;
86552                 var width = 250 + (2 * pad);
86553                 var height = 350;
86554                 var startX = rect.left + point[0];
86555                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
86556                 var box = {
86557                     left: left,
86558                     top: point[1] + rect.top - 60,
86559                     width: width,
86560                     height: height
86561                 };
86562                 reveal(box, text, options);
86563             }
86564
86565
86566             function addHouse() {
86567                 context.enter(modeBrowse(context));
86568                 context.history().reset('initial');
86569                 _houseID = null;
86570
86571                 var msec = transitionTime(house, context.map().center());
86572                 if (msec) { reveal(null, null, { duration: 0 }); }
86573                 context.map().centerZoomEase(house, 19, msec);
86574
86575                 timeout(function() {
86576                     var tooltip = reveal('button.add-area',
86577                         t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
86578
86579                     tooltip.selectAll('.tooltip-inner')
86580                         .insert('svg', 'span')
86581                         .attr('class', 'tooltip-illustration')
86582                         .append('use')
86583                         .attr('xlink:href', '#iD-graphic-buildings');
86584
86585                     context.on('enter.intro', function(mode) {
86586                         if (mode.id !== 'add-area') return;
86587                         continueTo(startHouse);
86588                     });
86589                 }, msec + 100);
86590
86591                 function continueTo(nextStep) {
86592                     context.on('enter.intro', null);
86593                     nextStep();
86594                 }
86595             }
86596
86597
86598             function startHouse() {
86599                 if (context.mode().id !== 'add-area') {
86600                     return continueTo(addHouse);
86601                 }
86602
86603                 _houseID = null;
86604                 context.map().zoomEase(20, 500);
86605
86606                 timeout(function() {
86607                     revealHouse(house, t('intro.buildings.start_building'));
86608
86609                     context.map().on('move.intro drawn.intro', function() {
86610                         revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
86611                     });
86612
86613                     context.on('enter.intro', function(mode) {
86614                         if (mode.id !== 'draw-area') return chapter.restart();
86615                         continueTo(continueHouse);
86616                     });
86617
86618                 }, 550);  // after easing
86619
86620                 function continueTo(nextStep) {
86621                     context.map().on('move.intro drawn.intro', null);
86622                     context.on('enter.intro', null);
86623                     nextStep();
86624                 }
86625             }
86626
86627
86628             function continueHouse() {
86629                 if (context.mode().id !== 'draw-area') {
86630                     return continueTo(addHouse);
86631                 }
86632
86633                 _houseID = null;
86634
86635                 revealHouse(house, t('intro.buildings.continue_building'));
86636
86637                 context.map().on('move.intro drawn.intro', function() {
86638                     revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
86639                 });
86640
86641                 context.on('enter.intro', function(mode) {
86642                     if (mode.id === 'draw-area') {
86643                         return;
86644                     } else if (mode.id === 'select') {
86645                         var graph = context.graph();
86646                         var way = context.entity(context.selectedIDs()[0]);
86647                         var nodes = graph.childNodes(way);
86648                         var points = utilArrayUniq(nodes)
86649                             .map(function(n) { return context.projection(n.loc); });
86650
86651                         if (isMostlySquare(points)) {
86652                             _houseID = way.id;
86653                             return continueTo(chooseCategoryBuilding);
86654                         } else {
86655                             return continueTo(retryHouse);
86656                         }
86657
86658                     } else {
86659                         return chapter.restart();
86660                     }
86661                 });
86662
86663                 function continueTo(nextStep) {
86664                     context.map().on('move.intro drawn.intro', null);
86665                     context.on('enter.intro', null);
86666                     nextStep();
86667                 }
86668             }
86669
86670
86671             function retryHouse() {
86672                 var onClick = function() { continueTo(addHouse); };
86673
86674                 revealHouse(house, t('intro.buildings.retry_building'),
86675                     { buttonText: t('intro.ok'), buttonCallback: onClick }
86676                 );
86677
86678                 context.map().on('move.intro drawn.intro', function() {
86679                     revealHouse(house, t('intro.buildings.retry_building'),
86680                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
86681                     );
86682                 });
86683
86684                 function continueTo(nextStep) {
86685                     context.map().on('move.intro drawn.intro', null);
86686                     nextStep();
86687                 }
86688             }
86689
86690
86691             function chooseCategoryBuilding() {
86692                 if (!_houseID || !context.hasEntity(_houseID)) {
86693                     return addHouse();
86694                 }
86695                 var ids = context.selectedIDs();
86696                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
86697                     context.enter(modeSelect(context, [_houseID]));
86698                 }
86699
86700                 // disallow scrolling
86701                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86702
86703                 timeout(function() {
86704                     // reset pane, in case user somehow happened to change it..
86705                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86706
86707                     var button = d3_select('.preset-category-building .preset-list-button');
86708
86709                     reveal(button.node(),
86710                         t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
86711                     );
86712
86713                     button.on('click.intro', function() {
86714                         button.on('click.intro', null);
86715                         continueTo(choosePresetHouse);
86716                     });
86717
86718                 }, 400);  // after preset list pane visible..
86719
86720
86721                 context.on('enter.intro', function(mode) {
86722                     if (!_houseID || !context.hasEntity(_houseID)) {
86723                         return continueTo(addHouse);
86724                     }
86725                     var ids = context.selectedIDs();
86726                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
86727                         return continueTo(chooseCategoryBuilding);
86728                     }
86729                 });
86730
86731                 function continueTo(nextStep) {
86732                     d3_select('.inspector-wrap').on('wheel.intro', null);
86733                     d3_select('.preset-list-button').on('click.intro', null);
86734                     context.on('enter.intro', null);
86735                     nextStep();
86736                 }
86737             }
86738
86739
86740             function choosePresetHouse() {
86741                 if (!_houseID || !context.hasEntity(_houseID)) {
86742                     return addHouse();
86743                 }
86744                 var ids = context.selectedIDs();
86745                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
86746                     context.enter(modeSelect(context, [_houseID]));
86747                 }
86748
86749                 // disallow scrolling
86750                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
86751
86752                 timeout(function() {
86753                     // reset pane, in case user somehow happened to change it..
86754                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
86755
86756                     var button = d3_select('.preset-building-house .preset-list-button');
86757
86758                     reveal(button.node(),
86759                         t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
86760                         { duration: 300 }
86761                     );
86762
86763                     button.on('click.intro', function() {
86764                         button.on('click.intro', null);
86765                         continueTo(closeEditorHouse);
86766                     });
86767
86768                 }, 400);  // after preset list pane visible..
86769
86770                 context.on('enter.intro', function(mode) {
86771                     if (!_houseID || !context.hasEntity(_houseID)) {
86772                         return continueTo(addHouse);
86773                     }
86774                     var ids = context.selectedIDs();
86775                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
86776                         return continueTo(chooseCategoryBuilding);
86777                     }
86778                 });
86779
86780                 function continueTo(nextStep) {
86781                     d3_select('.inspector-wrap').on('wheel.intro', null);
86782                     d3_select('.preset-list-button').on('click.intro', null);
86783                     context.on('enter.intro', null);
86784                     nextStep();
86785                 }
86786             }
86787
86788
86789             function closeEditorHouse() {
86790                 if (!_houseID || !context.hasEntity(_houseID)) {
86791                     return addHouse();
86792                 }
86793                 var ids = context.selectedIDs();
86794                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
86795                     context.enter(modeSelect(context, [_houseID]));
86796                 }
86797
86798                 context.history().checkpoint('hasHouse');
86799
86800                 context.on('exit.intro', function() {
86801                     continueTo(rightClickHouse);
86802                 });
86803
86804                 timeout(function() {
86805                     reveal('.entity-editor-pane',
86806                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
86807                     );
86808                 }, 500);
86809
86810                 function continueTo(nextStep) {
86811                     context.on('exit.intro', null);
86812                     nextStep();
86813                 }
86814             }
86815
86816
86817             function rightClickHouse() {
86818                 if (!_houseID) return chapter.restart();
86819
86820                 context.enter(modeBrowse(context));
86821                 context.history().reset('hasHouse');
86822                 var zoom = context.map().zoom();
86823                 if (zoom < 20) {
86824                     zoom = 20;
86825                 }
86826                 context.map().centerZoomEase(house, zoom, 500);
86827
86828                 context.on('enter.intro', function(mode) {
86829                     if (mode.id !== 'select') return;
86830                     var ids = context.selectedIDs();
86831                     if (ids.length !== 1 || ids[0] !== _houseID) return;
86832
86833                     timeout(function() {
86834                         var node = selectMenuItem('orthogonalize').node();
86835                         if (!node) return;
86836                         continueTo(clickSquare);
86837                     }, 300);  // after menu visible
86838                 });
86839
86840                 context.map().on('move.intro drawn.intro', function() {
86841                     revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
86842                 });
86843
86844                 context.history().on('change.intro', function() {
86845                     continueTo(rightClickHouse);
86846                 });
86847
86848                 function continueTo(nextStep) {
86849                     context.on('enter.intro', null);
86850                     context.map().on('move.intro drawn.intro', null);
86851                     context.history().on('change.intro', null);
86852                     nextStep();
86853                 }
86854             }
86855
86856
86857             function clickSquare() {
86858                 if (!_houseID) return chapter.restart();
86859                 var entity = context.hasEntity(_houseID);
86860                 if (!entity) return continueTo(rightClickHouse);
86861
86862                 var node = selectMenuItem('orthogonalize').node();
86863                 if (!node) { return continueTo(rightClickHouse); }
86864
86865                 var wasChanged = false;
86866                 var menuCoords = context.map().mouseCoordinates();
86867
86868                 revealEditMenu(menuCoords,
86869                     t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
86870                 );
86871
86872                 context.on('enter.intro', function(mode) {
86873                     if (mode.id === 'browse') {
86874                         continueTo(rightClickHouse);
86875                     } else if (mode.id === 'move' || mode.id === 'rotate') {
86876                         continueTo(retryClickSquare);
86877                     }
86878                 });
86879
86880                 context.map().on('move.intro drawn.intro', function() {
86881                     var node = selectMenuItem('orthogonalize').node();
86882                     if (!wasChanged && !node) { return continueTo(rightClickHouse); }
86883
86884                     revealEditMenu(menuCoords,
86885                         t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
86886                         { duration: 0 }
86887                     );
86888                 });
86889
86890                 context.history().on('change.intro', function() {
86891                     wasChanged = true;
86892                     context.history().on('change.intro', null);
86893
86894                     // Something changed.  Wait for transition to complete and check undo annotation.
86895                     timeout(function() {
86896                         if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
86897                             continueTo(doneSquare);
86898                         } else {
86899                             continueTo(retryClickSquare);
86900                         }
86901                     }, 500);  // after transitioned actions
86902                 });
86903
86904                 function continueTo(nextStep) {
86905                     context.on('enter.intro', null);
86906                     context.map().on('move.intro drawn.intro', null);
86907                     context.history().on('change.intro', null);
86908                     nextStep();
86909                 }
86910             }
86911
86912
86913             function retryClickSquare() {
86914                 context.enter(modeBrowse(context));
86915
86916                 revealHouse(house, t('intro.buildings.retry_square'), {
86917                     buttonText: t('intro.ok'),
86918                     buttonCallback: function() { continueTo(rightClickHouse); }
86919                 });
86920
86921                 function continueTo(nextStep) {
86922                     nextStep();
86923                 }
86924             }
86925
86926
86927             function doneSquare() {
86928                 context.history().checkpoint('doneSquare');
86929
86930                 revealHouse(house, t('intro.buildings.done_square'), {
86931                     buttonText: t('intro.ok'),
86932                     buttonCallback: function() { continueTo(addTank); }
86933                 });
86934
86935                 function continueTo(nextStep) {
86936                     nextStep();
86937                 }
86938             }
86939
86940
86941             function addTank() {
86942                 context.enter(modeBrowse(context));
86943                 context.history().reset('doneSquare');
86944                 _tankID = null;
86945
86946                 var msec = transitionTime(tank, context.map().center());
86947                 if (msec) { reveal(null, null, { duration: 0 }); }
86948                 context.map().centerZoomEase(tank, 19.5, msec);
86949
86950                 timeout(function() {
86951                     reveal('button.add-area',
86952                         t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
86953                     );
86954
86955                     context.on('enter.intro', function(mode) {
86956                         if (mode.id !== 'add-area') return;
86957                         continueTo(startTank);
86958                     });
86959                 }, msec + 100);
86960
86961                 function continueTo(nextStep) {
86962                     context.on('enter.intro', null);
86963                     nextStep();
86964                 }
86965             }
86966
86967
86968             function startTank() {
86969                 if (context.mode().id !== 'add-area') {
86970                     return continueTo(addTank);
86971                 }
86972
86973                 _tankID = null;
86974
86975                 timeout(function() {
86976                     revealTank(tank, t('intro.buildings.start_tank'));
86977
86978                     context.map().on('move.intro drawn.intro', function() {
86979                         revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
86980                     });
86981
86982                     context.on('enter.intro', function(mode) {
86983                         if (mode.id !== 'draw-area') return chapter.restart();
86984                         continueTo(continueTank);
86985                     });
86986
86987                 }, 550);  // after easing
86988
86989                 function continueTo(nextStep) {
86990                     context.map().on('move.intro drawn.intro', null);
86991                     context.on('enter.intro', null);
86992                     nextStep();
86993                 }
86994             }
86995
86996
86997             function continueTank() {
86998                 if (context.mode().id !== 'draw-area') {
86999                     return continueTo(addTank);
87000                 }
87001
87002                 _tankID = null;
87003
87004                 revealTank(tank, t('intro.buildings.continue_tank'));
87005
87006                 context.map().on('move.intro drawn.intro', function() {
87007                     revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
87008                 });
87009
87010                 context.on('enter.intro', function(mode) {
87011                     if (mode.id === 'draw-area') {
87012                         return;
87013                     } else if (mode.id === 'select') {
87014                         _tankID = context.selectedIDs()[0];
87015                         return continueTo(searchPresetTank);
87016                     } else {
87017                         return continueTo(addTank);
87018                     }
87019                 });
87020
87021                 function continueTo(nextStep) {
87022                     context.map().on('move.intro drawn.intro', null);
87023                     context.on('enter.intro', null);
87024                     nextStep();
87025                 }
87026             }
87027
87028
87029             function searchPresetTank() {
87030                 if (!_tankID || !context.hasEntity(_tankID)) {
87031                     return addTank();
87032                 }
87033                 var ids = context.selectedIDs();
87034                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
87035                     context.enter(modeSelect(context, [_tankID]));
87036                 }
87037
87038                 // disallow scrolling
87039                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
87040
87041                 timeout(function() {
87042                     // reset pane, in case user somehow happened to change it..
87043                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
87044
87045                     d3_select('.preset-search-input')
87046                         .on('keydown.intro', null)
87047                         .on('keyup.intro', checkPresetSearch);
87048
87049                     reveal('.preset-search-input',
87050                         t('intro.buildings.search_tank', { preset: tankPreset.name() })
87051                     );
87052                 }, 400);  // after preset list pane visible..
87053
87054                 context.on('enter.intro', function(mode) {
87055                     if (!_tankID || !context.hasEntity(_tankID)) {
87056                         return continueTo(addTank);
87057                     }
87058
87059                     var ids = context.selectedIDs();
87060                     if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
87061                         // keep the user's area selected..
87062                         context.enter(modeSelect(context, [_tankID]));
87063
87064                         // reset pane, in case user somehow happened to change it..
87065                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
87066                         // disallow scrolling
87067                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
87068
87069                         d3_select('.preset-search-input')
87070                             .on('keydown.intro', null)
87071                             .on('keyup.intro', checkPresetSearch);
87072
87073                         reveal('.preset-search-input',
87074                             t('intro.buildings.search_tank', { preset: tankPreset.name() })
87075                         );
87076
87077                         context.history().on('change.intro', null);
87078                     }
87079                 });
87080
87081                 function checkPresetSearch() {
87082                     var first = d3_select('.preset-list-item:first-child');
87083
87084                     if (first.classed('preset-man_made-storage_tank')) {
87085                         reveal(first.select('.preset-list-button').node(),
87086                             t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
87087                             { duration: 300 }
87088                         );
87089
87090                         d3_select('.preset-search-input')
87091                             .on('keydown.intro', eventCancel, true)
87092                             .on('keyup.intro', null);
87093
87094                         context.history().on('change.intro', function() {
87095                             continueTo(closeEditorTank);
87096                         });
87097                     }
87098                 }
87099
87100                 function continueTo(nextStep) {
87101                     d3_select('.inspector-wrap').on('wheel.intro', null);
87102                     context.on('enter.intro', null);
87103                     context.history().on('change.intro', null);
87104                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
87105                     nextStep();
87106                 }
87107             }
87108
87109
87110             function closeEditorTank() {
87111                 if (!_tankID || !context.hasEntity(_tankID)) {
87112                     return addTank();
87113                 }
87114                 var ids = context.selectedIDs();
87115                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
87116                     context.enter(modeSelect(context, [_tankID]));
87117                 }
87118
87119                 context.history().checkpoint('hasTank');
87120
87121                 context.on('exit.intro', function() {
87122                     continueTo(rightClickTank);
87123                 });
87124
87125                 timeout(function() {
87126                     reveal('.entity-editor-pane',
87127                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
87128                     );
87129                 }, 500);
87130
87131                 function continueTo(nextStep) {
87132                     context.on('exit.intro', null);
87133                     nextStep();
87134                 }
87135             }
87136
87137
87138             function rightClickTank() {
87139                 if (!_tankID) return continueTo(addTank);
87140
87141                 context.enter(modeBrowse(context));
87142                 context.history().reset('hasTank');
87143                 context.map().centerEase(tank, 500);
87144
87145                 timeout(function() {
87146                     context.on('enter.intro', function(mode) {
87147                         if (mode.id !== 'select') return;
87148                         var ids = context.selectedIDs();
87149                         if (ids.length !== 1 || ids[0] !== _tankID) return;
87150
87151                         timeout(function() {
87152                             var node = selectMenuItem('circularize').node();
87153                             if (!node) return;
87154                             continueTo(clickCircle);
87155                         }, 300);  // after menu visible
87156                     });
87157
87158                     revealTank(tank, t('intro.buildings.rightclick_tank'));
87159
87160                     context.map().on('move.intro drawn.intro', function() {
87161                         revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
87162                     });
87163
87164                     context.history().on('change.intro', function() {
87165                         continueTo(rightClickTank);
87166                     });
87167
87168                 }, 600);
87169
87170                 function continueTo(nextStep) {
87171                     context.on('enter.intro', null);
87172                     context.map().on('move.intro drawn.intro', null);
87173                     context.history().on('change.intro', null);
87174                     nextStep();
87175                 }
87176             }
87177
87178
87179             function clickCircle() {
87180                 if (!_tankID) return chapter.restart();
87181                 var entity = context.hasEntity(_tankID);
87182                 if (!entity) return continueTo(rightClickTank);
87183
87184                 var node = selectMenuItem('circularize').node();
87185                 if (!node) { return continueTo(rightClickTank); }
87186
87187                 var wasChanged = false;
87188                 var menuCoords = context.map().mouseCoordinates();
87189
87190                 revealEditMenu(menuCoords,
87191                     t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
87192                 );
87193
87194                 context.on('enter.intro', function(mode) {
87195                     if (mode.id === 'browse') {
87196                         continueTo(rightClickTank);
87197                     } else if (mode.id === 'move' || mode.id === 'rotate') {
87198                         continueTo(retryClickCircle);
87199                     }
87200                 });
87201
87202                 context.map().on('move.intro drawn.intro', function() {
87203                     var node = selectMenuItem('circularize').node();
87204                     if (!wasChanged && !node) { return continueTo(rightClickTank); }
87205
87206                     revealEditMenu(menuCoords,
87207                         t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
87208                         { duration: 0 }
87209                     );
87210                 });
87211
87212                 context.history().on('change.intro', function() {
87213                     wasChanged = true;
87214                     context.history().on('change.intro', null);
87215
87216                     // Something changed.  Wait for transition to complete and check undo annotation.
87217                     timeout(function() {
87218                         if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
87219                             continueTo(play);
87220                         } else {
87221                             continueTo(retryClickCircle);
87222                         }
87223                     }, 500);  // after transitioned actions
87224                 });
87225
87226                 function continueTo(nextStep) {
87227                     context.on('enter.intro', null);
87228                     context.map().on('move.intro drawn.intro', null);
87229                     context.history().on('change.intro', null);
87230                     nextStep();
87231                 }
87232             }
87233
87234
87235             function retryClickCircle() {
87236                 context.enter(modeBrowse(context));
87237
87238                 revealTank(tank, t('intro.buildings.retry_circle'), {
87239                     buttonText: t('intro.ok'),
87240                     buttonCallback: function() { continueTo(rightClickTank); }
87241                 });
87242
87243                 function continueTo(nextStep) {
87244                     nextStep();
87245                 }
87246             }
87247
87248
87249             function play() {
87250                 dispatch$1.call('done');
87251                 reveal('#id-container',
87252                     t('intro.buildings.play', { next: t('intro.startediting.title') }), {
87253                         tooltipBox: '.intro-nav-wrap .chapter-startEditing',
87254                         buttonText: t('intro.ok'),
87255                         buttonCallback: function() { reveal('#id-container'); }
87256                     }
87257                 );
87258             }
87259
87260
87261             chapter.enter = function() {
87262                 addHouse();
87263             };
87264
87265
87266             chapter.exit = function() {
87267                 timeouts.forEach(window.clearTimeout);
87268                 context.on('enter.intro exit.intro', null);
87269                 context.map().on('move.intro drawn.intro', null);
87270                 context.history().on('change.intro', null);
87271                 d3_select('.inspector-wrap').on('wheel.intro', null);
87272                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
87273                 d3_select('.more-fields .combobox-input').on('click.intro', null);
87274             };
87275
87276
87277             chapter.restart = function() {
87278                 chapter.exit();
87279                 chapter.enter();
87280             };
87281
87282
87283             return utilRebind(chapter, dispatch$1, 'on');
87284         }
87285
87286         function uiIntroStartEditing(context, reveal) {
87287             var dispatch$1 = dispatch('done', 'startEditing');
87288             var modalSelection = d3_select(null);
87289
87290
87291             var chapter = {
87292                 title: 'intro.startediting.title'
87293             };
87294
87295             function showHelp() {
87296                 reveal('.map-control.help-control',
87297                     t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
87298                         buttonText: t('intro.ok'),
87299                         buttonCallback: function() { shortcuts(); }
87300                     }
87301                 );
87302             }
87303
87304             function shortcuts() {
87305                 reveal('.map-control.help-control',
87306                     t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
87307                         buttonText: t('intro.ok'),
87308                         buttonCallback: function() { showSave(); }
87309                     }
87310                 );
87311             }
87312
87313             function showSave() {
87314                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
87315                 reveal('#bar button.save',
87316                     t('intro.startediting.save'), {
87317                         buttonText: t('intro.ok'),
87318                         buttonCallback: function() { showStart(); }
87319                     }
87320                 );
87321             }
87322
87323             function showStart() {
87324                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
87325
87326                 modalSelection = uiModal(context.container());
87327
87328                 modalSelection.select('.modal')
87329                     .attr('class', 'modal-splash modal col6');
87330
87331                 modalSelection.selectAll('.close').remove();
87332
87333                 var startbutton = modalSelection.select('.content')
87334                     .attr('class', 'fillL')
87335                     .append('button')
87336                         .attr('class', 'modal-section huge-modal-button')
87337                         .on('click', function() {
87338                             modalSelection.remove();
87339                         });
87340
87341                     startbutton
87342                         .append('svg')
87343                         .attr('class', 'illustration')
87344                         .append('use')
87345                         .attr('xlink:href', '#iD-logo-walkthrough');
87346
87347                     startbutton
87348                         .append('h2')
87349                         .text(t('intro.startediting.start'));
87350
87351                 dispatch$1.call('startEditing');
87352             }
87353
87354
87355             chapter.enter = function() {
87356                 showHelp();
87357             };
87358
87359
87360             chapter.exit = function() {
87361                 modalSelection.remove();
87362                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
87363             };
87364
87365
87366             return utilRebind(chapter, dispatch$1, 'on');
87367         }
87368
87369         var chapterUi = {
87370             welcome: uiIntroWelcome,
87371             navigation: uiIntroNavigation,
87372             point: uiIntroPoint,
87373             area: uiIntroArea,
87374             line: uiIntroLine,
87375             building: uiIntroBuilding,
87376             startEditing: uiIntroStartEditing
87377         };
87378
87379         var chapterFlow = [
87380             'welcome',
87381             'navigation',
87382             'point',
87383             'area',
87384             'line',
87385             'building',
87386             'startEditing'
87387         ];
87388
87389
87390         function uiIntro(context) {
87391             var INTRO_IMAGERY = 'EsriWorldImageryClarity';
87392             var introGraph = {};
87393             var _currChapter;
87394
87395             // create entities for intro graph and localize names
87396             for (var id in dataIntroGraph) {
87397                 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
87398             }
87399
87400
87401             function intro(selection) {
87402                 context.enter(modeBrowse(context));
87403
87404                 // Save current map state
87405                 var osm = context.connection();
87406                 var history = context.history().toJSON();
87407                 var hash = window.location.hash;
87408                 var center = context.map().center();
87409                 var zoom = context.map().zoom();
87410                 var background = context.background().baseLayerSource();
87411                 var overlays = context.background().overlayLayerSources();
87412                 var opacity = d3_selectAll('#map .layer-background').style('opacity');
87413                 var caches = osm && osm.caches();
87414                 var baseEntities = context.history().graph().base().entities;
87415                 var countryCode = services$1.geocoder.countryCode;
87416
87417                 // Show sidebar and disable the sidebar resizing button
87418                 // (this needs to be before `context.inIntro(true)`)
87419                 context.ui().sidebar.expand();
87420                 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
87421
87422                 // Block saving
87423                 context.inIntro(true);
87424
87425                 // Load semi-real data used in intro
87426                 if (osm) { osm.toggle(false).reset(); }
87427                 context.history().reset();
87428                 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
87429                 context.history().checkpoint('initial');
87430
87431                 // Setup imagery
87432                 var imagery = context.background().findSource(INTRO_IMAGERY);
87433                 if (imagery) {
87434                     context.background().baseLayerSource(imagery);
87435                 } else {
87436                     context.background().bing();
87437                 }
87438                 overlays.forEach(function(d) {
87439                     context.background().toggleOverlayLayer(d);
87440                 });
87441
87442                 // Setup data layers (only OSM)
87443                 var layers = context.layers();
87444                 layers.all().forEach(function(item) {
87445                     // if the layer has the function `enabled`
87446                     if (typeof item.layer.enabled === 'function') {
87447                         item.layer.enabled(item.id === 'osm');
87448                     }
87449                 });
87450
87451                 // Mock geocoder
87452                 services$1.geocoder.countryCode = function(location, callback) {
87453                     callback(null, t('intro.graph.countrycode'));
87454                 };
87455
87456
87457                 d3_selectAll('#map .layer-background').style('opacity', 1);
87458
87459                 var curtain = uiCurtain();
87460                 selection.call(curtain);
87461
87462                 // Store that the user started the walkthrough..
87463                 context.storage('walkthrough_started', 'yes');
87464
87465                 // Restore previous walkthrough progress..
87466                 var storedProgress = context.storage('walkthrough_progress') || '';
87467                 var progress = storedProgress.split(';').filter(Boolean);
87468
87469                 var chapters = chapterFlow.map(function(chapter, i) {
87470                     var s = chapterUi[chapter](context, curtain.reveal)
87471                         .on('done', function() {
87472                             context.presets().init();  // clear away "recent" presets
87473
87474                             buttons.filter(function(d) {
87475                                 return d.title === s.title;
87476                             }).classed('finished', true);
87477
87478                             if (i < chapterFlow.length - 1) {
87479                                 var next = chapterFlow[i + 1];
87480                                 d3_select('button.chapter-' + next)
87481                                     .classed('next', true);
87482                             }
87483
87484                             // Store walkthrough progress..
87485                             progress.push(chapter);
87486                             context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
87487                         });
87488                     return s;
87489                 });
87490
87491                 chapters[chapters.length - 1].on('startEditing', function() {
87492                     // Store walkthrough progress..
87493                     progress.push('startEditing');
87494                     context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
87495
87496                     // Store if walkthrough is completed..
87497                     var incomplete = utilArrayDifference(chapterFlow, progress);
87498                     if (!incomplete.length) {
87499                         context.storage('walkthrough_completed', 'yes');
87500                     }
87501
87502                     curtain.remove();
87503                     navwrap.remove();
87504                     d3_selectAll('#map .layer-background').style('opacity', opacity);
87505                     d3_selectAll('button.sidebar-toggle').classed('disabled', false);
87506                     if (osm) { osm.toggle(true).reset().caches(caches); }
87507                     context.history().reset().merge(Object.values(baseEntities));
87508                     context.background().baseLayerSource(background);
87509                     overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
87510                     if (history) { context.history().fromJSON(history, false); }
87511                     context.map().centerZoom(center, zoom);
87512                     window.location.replace(hash);
87513                     services$1.geocoder.countryCode = countryCode;
87514                     context.inIntro(false);
87515                 });
87516
87517                 var navwrap = selection
87518                     .append('div')
87519                     .attr('class', 'intro-nav-wrap fillD');
87520
87521                 navwrap
87522                     .append('svg')
87523                     .attr('class', 'intro-nav-wrap-logo')
87524                     .append('use')
87525                     .attr('xlink:href', '#iD-logo-walkthrough');
87526
87527                 var buttonwrap = navwrap
87528                     .append('div')
87529                     .attr('class', 'joined')
87530                     .selectAll('button.chapter');
87531
87532                 var buttons = buttonwrap
87533                     .data(chapters)
87534                     .enter()
87535                     .append('button')
87536                     .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
87537                     .on('click', enterChapter);
87538
87539                 buttons
87540                     .append('span')
87541                     .text(function(d) { return t(d.title); });
87542
87543                 buttons
87544                     .append('span')
87545                     .attr('class', 'status')
87546                     .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
87547
87548                 enterChapter(chapters[0]);
87549
87550
87551                 function enterChapter(newChapter) {
87552                     if (_currChapter) { _currChapter.exit(); }
87553                     context.enter(modeBrowse(context));
87554
87555                     _currChapter = newChapter;
87556                     _currChapter.enter();
87557
87558                     buttons
87559                         .classed('next', false)
87560                         .classed('active', function(d) {
87561                             return d.title === _currChapter.title;
87562                         });
87563                 }
87564             }
87565
87566
87567             return intro;
87568         }
87569
87570         function uiShortcuts(context) {
87571             var detected = utilDetect();
87572             var _activeTab = 0;
87573             var _modalSelection;
87574             var _selection = d3_select(null);
87575
87576
87577             context.keybinding()
87578                 .on([t('shortcuts.toggle.key'), '?'], function () {
87579                     if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
87580                         if (_modalSelection) {
87581                             _modalSelection.close();
87582                             _modalSelection = null;
87583                         }
87584                     } else {
87585                         _modalSelection = uiModal(_selection);
87586                         shortcutsModal(_modalSelection);
87587                     }
87588                 });
87589
87590
87591             function shortcutsModal(_modalSelection) {
87592                 _modalSelection.select('.modal')
87593                     .classed('modal-shortcuts', true);
87594
87595                 var shortcutsModal = _modalSelection.select('.content');
87596
87597                 shortcutsModal
87598                     .append('div')
87599                     .attr('class', 'modal-section')
87600                     .append('h3')
87601                     .text(t('shortcuts.title'));
87602
87603                 shortcutsModal
87604                     .call(render);
87605             }
87606
87607
87608             function render(selection) {
87609                 var wrapper = selection
87610                     .selectAll('.wrapper')
87611                     .data([0]);
87612
87613                 var wrapperEnter = wrapper
87614                     .enter()
87615                     .append('div')
87616                     .attr('class', 'wrapper modal-section');
87617
87618                 var tabsBar = wrapperEnter
87619                     .append('div')
87620                     .attr('class', 'tabs-bar');
87621
87622                 var shortcutsList = wrapperEnter
87623                     .append('div')
87624                     .attr('class', 'shortcuts-list');
87625
87626                 wrapper = wrapper.merge(wrapperEnter);
87627
87628                 var tabs = tabsBar
87629                     .selectAll('.tab')
87630                     .data(dataShortcuts);
87631
87632                 var tabsEnter = tabs
87633                     .enter()
87634                     .append('div')
87635                     .attr('class', 'tab')
87636                     .on('click', function (d, i) {
87637                         _activeTab = i;
87638                         render(selection);
87639                     });
87640
87641                 tabsEnter
87642                     .append('span')
87643                     .text(function (d) { return t(d.text); });
87644
87645                 tabs = tabs
87646                     .merge(tabsEnter);
87647
87648                 // Update
87649                 wrapper.selectAll('.tab')
87650                     .classed('active', function (d, i) {
87651                         return i === _activeTab;
87652                     });
87653
87654
87655                 var shortcuts = shortcutsList
87656                     .selectAll('.shortcut-tab')
87657                     .data(dataShortcuts);
87658
87659                 var shortcutsEnter = shortcuts
87660                     .enter()
87661                     .append('div')
87662                     .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
87663
87664                 var columnsEnter = shortcutsEnter
87665                     .selectAll('.shortcut-column')
87666                     .data(function (d) { return d.columns; })
87667                     .enter()
87668                     .append('table')
87669                     .attr('class', 'shortcut-column');
87670
87671                 var rowsEnter = columnsEnter
87672                     .selectAll('.shortcut-row')
87673                     .data(function (d) { return d.rows; })
87674                     .enter()
87675                     .append('tr')
87676                     .attr('class', 'shortcut-row');
87677
87678
87679                 var sectionRows = rowsEnter
87680                     .filter(function (d) { return !d.shortcuts; });
87681
87682                 sectionRows
87683                     .append('td');
87684
87685                 sectionRows
87686                     .append('td')
87687                     .attr('class', 'shortcut-section')
87688                     .append('h3')
87689                     .text(function (d) { return t(d.text); });
87690
87691
87692                 var shortcutRows = rowsEnter
87693                     .filter(function (d) { return d.shortcuts; });
87694
87695                 var shortcutKeys = shortcutRows
87696                     .append('td')
87697                     .attr('class', 'shortcut-keys');
87698
87699                 var modifierKeys = shortcutKeys
87700                     .filter(function (d) { return d.modifiers; });
87701
87702                 modifierKeys
87703                     .selectAll('kbd.modifier')
87704                     .data(function (d) {
87705                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
87706                             return ['⌘'];
87707                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
87708                             return [];
87709                         } else {
87710                             return d.modifiers;
87711                         }
87712                     })
87713                     .enter()
87714                     .each(function () {
87715                         var selection = d3_select(this);
87716
87717                         selection
87718                             .append('kbd')
87719                             .attr('class', 'modifier')
87720                             .text(function (d) { return uiCmd.display(d); });
87721
87722                         selection
87723                             .append('span')
87724                             .text('+');
87725                     });
87726
87727
87728                 shortcutKeys
87729                     .selectAll('kbd.shortcut')
87730                     .data(function (d) {
87731                         var arr = d.shortcuts;
87732                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
87733                             arr = ['Y'];
87734                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
87735                             arr = ['F11'];
87736                         }
87737
87738                         // replace translations
87739                         arr = arr.map(function(s) {
87740                             return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
87741                         });
87742
87743                         return utilArrayUniq(arr).map(function(s) {
87744                             return {
87745                                 shortcut: s,
87746                                 separator: d.separator,
87747                                 suffix: d.suffix
87748                             };
87749                         });
87750                     })
87751                     .enter()
87752                     .each(function (d, i, nodes) {
87753                         var selection = d3_select(this);
87754                         var click = d.shortcut.toLowerCase().match(/(.*).click/);
87755
87756                         if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
87757                             selection
87758                                 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
87759                         } else {
87760                             selection
87761                                 .append('kbd')
87762                                 .attr('class', 'shortcut')
87763                                 .text(function (d) { return d.shortcut; });
87764                         }
87765
87766                         if (i < nodes.length - 1) {
87767                             selection
87768                                 .append('span')
87769                                 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
87770                         } else if (i === nodes.length - 1 && d.suffix) {
87771                             selection
87772                                 .append('span')
87773                                 .text(d.suffix);
87774                         }
87775                     });
87776
87777
87778                 shortcutKeys
87779                     .filter(function(d) { return d.gesture; })
87780                     .each(function () {
87781                         var selection = d3_select(this);
87782
87783                         selection
87784                             .append('span')
87785                             .text('+');
87786
87787                         selection
87788                             .append('span')
87789                             .attr('class', 'gesture')
87790                             .text(function (d) { return t(d.gesture); });
87791                     });
87792
87793
87794                 shortcutRows
87795                     .append('td')
87796                     .attr('class', 'shortcut-desc')
87797                     .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
87798
87799
87800                 shortcuts = shortcuts
87801                     .merge(shortcutsEnter);
87802
87803                 // Update
87804                 wrapper.selectAll('.shortcut-tab')
87805                     .style('display', function (d, i) {
87806                         return i === _activeTab ? 'flex' : 'none';
87807                     });
87808             }
87809
87810
87811             return function(selection, show) {
87812                 _selection = selection;
87813                 if (show) {
87814                     _modalSelection = uiModal(selection);
87815                     shortcutsModal(_modalSelection);
87816                 }
87817             };
87818         }
87819
87820         function uiHelp(context) {
87821             var key = t('help.key');
87822
87823             var _pane = d3_select(null), _toggleButton = d3_select(null);
87824
87825             var docKeys = [
87826                 ['help', [
87827                     'welcome',
87828                     'open_data_h',
87829                     'open_data',
87830                     'before_start_h',
87831                     'before_start',
87832                     'open_source_h',
87833                     'open_source',
87834                     'open_source_help'
87835                 ]],
87836                 ['overview', [
87837                     'navigation_h',
87838                     'navigation_drag',
87839                     'navigation_zoom',
87840                     'features_h',
87841                     'features',
87842                     'nodes_ways'
87843                 ]],
87844                 ['editing', [
87845                     'select_h',
87846                     'select_left_click',
87847                     'select_right_click',
87848                     'multiselect_h',
87849                     'multiselect_shift_click',
87850                     'multiselect_lasso',
87851                     'undo_redo_h',
87852                     'undo_redo',
87853                     'save_h',
87854                     'save',
87855                     'save_validation',
87856                     'upload_h',
87857                     'upload',
87858                     'backups_h',
87859                     'backups',
87860                     'keyboard_h',
87861                     'keyboard'
87862                 ]],
87863                 ['feature_editor', [
87864                     'intro',
87865                     'definitions',
87866                     'type_h',
87867                     'type',
87868                     'type_picker',
87869                     'fields_h',
87870                     'fields_all_fields',
87871                     'fields_example',
87872                     'fields_add_field',
87873                     'tags_h',
87874                     'tags_all_tags',
87875                     'tags_resources'
87876                 ]],
87877                 ['points', [
87878                     'intro',
87879                     'add_point_h',
87880                     'add_point',
87881                     'add_point_finish',
87882                     'move_point_h',
87883                     'move_point',
87884                     'delete_point_h',
87885                     'delete_point',
87886                     'delete_point_command'
87887                 ]],
87888                 ['lines', [
87889                     'intro',
87890                     'add_line_h',
87891                     'add_line',
87892                     'add_line_draw',
87893                     'add_line_finish',
87894                     'modify_line_h',
87895                     'modify_line_dragnode',
87896                     'modify_line_addnode',
87897                     'connect_line_h',
87898                     'connect_line',
87899                     'connect_line_display',
87900                     'connect_line_drag',
87901                     'connect_line_tag',
87902                     'disconnect_line_h',
87903                     'disconnect_line_command',
87904                     'move_line_h',
87905                     'move_line_command',
87906                     'move_line_connected',
87907                     'delete_line_h',
87908                     'delete_line',
87909                     'delete_line_command'
87910                 ]],
87911                 ['areas', [
87912                     'intro',
87913                     'point_or_area_h',
87914                     'point_or_area',
87915                     'add_area_h',
87916                     'add_area_command',
87917                     'add_area_draw',
87918                     'add_area_finish',
87919                     'square_area_h',
87920                     'square_area_command',
87921                     'modify_area_h',
87922                     'modify_area_dragnode',
87923                     'modify_area_addnode',
87924                     'delete_area_h',
87925                     'delete_area',
87926                     'delete_area_command'
87927                 ]],
87928                 ['relations', [
87929                     'intro',
87930                     'edit_relation_h',
87931                     'edit_relation',
87932                     'edit_relation_add',
87933                     'edit_relation_delete',
87934                     'maintain_relation_h',
87935                     'maintain_relation',
87936                     'relation_types_h',
87937                     'multipolygon_h',
87938                     'multipolygon',
87939                     'multipolygon_create',
87940                     'multipolygon_merge',
87941                     'turn_restriction_h',
87942                     'turn_restriction',
87943                     'turn_restriction_field',
87944                     'turn_restriction_editing',
87945                     'route_h',
87946                     'route',
87947                     'route_add',
87948                     'boundary_h',
87949                     'boundary',
87950                     'boundary_add'
87951                 ]],
87952                 ['notes', [
87953                     'intro',
87954                     'add_note_h',
87955                     'add_note',
87956                     'move_note',
87957                     'update_note_h',
87958                     'update_note',
87959                     'save_note_h',
87960                     'save_note'
87961                 ]],
87962
87963                 ['imagery', [
87964                     'intro',
87965                     'sources_h',
87966                     'choosing',
87967                     'sources',
87968                     'offsets_h',
87969                     'offset',
87970                     'offset_change'
87971                 ]],
87972                 ['streetlevel', [
87973                     'intro',
87974                     'using_h',
87975                     'using',
87976                     'photos',
87977                     'viewer'
87978                 ]],
87979                 ['gps', [
87980                     'intro',
87981                     'survey',
87982                     'using_h',
87983                     'using',
87984                     'tracing',
87985                     'upload'
87986                 ]],
87987                 ['qa', [
87988                     'intro',
87989                     'tools_h',
87990                     'tools',
87991                     'issues_h',
87992                     'issues'
87993                 ]]
87994             ];
87995
87996             var headings = {
87997                 'help.help.open_data_h': 3,
87998                 'help.help.before_start_h': 3,
87999                 'help.help.open_source_h': 3,
88000                 'help.overview.navigation_h': 3,
88001                 'help.overview.features_h': 3,
88002                 'help.editing.select_h': 3,
88003                 'help.editing.multiselect_h': 3,
88004                 'help.editing.undo_redo_h': 3,
88005                 'help.editing.save_h': 3,
88006                 'help.editing.upload_h': 3,
88007                 'help.editing.backups_h': 3,
88008                 'help.editing.keyboard_h': 3,
88009                 'help.feature_editor.type_h': 3,
88010                 'help.feature_editor.fields_h': 3,
88011                 'help.feature_editor.tags_h': 3,
88012                 'help.points.add_point_h': 3,
88013                 'help.points.move_point_h': 3,
88014                 'help.points.delete_point_h': 3,
88015                 'help.lines.add_line_h': 3,
88016                 'help.lines.modify_line_h': 3,
88017                 'help.lines.connect_line_h': 3,
88018                 'help.lines.disconnect_line_h': 3,
88019                 'help.lines.move_line_h': 3,
88020                 'help.lines.delete_line_h': 3,
88021                 'help.areas.point_or_area_h': 3,
88022                 'help.areas.add_area_h': 3,
88023                 'help.areas.square_area_h': 3,
88024                 'help.areas.modify_area_h': 3,
88025                 'help.areas.delete_area_h': 3,
88026                 'help.relations.edit_relation_h': 3,
88027                 'help.relations.maintain_relation_h': 3,
88028                 'help.relations.relation_types_h': 2,
88029                 'help.relations.multipolygon_h': 3,
88030                 'help.relations.turn_restriction_h': 3,
88031                 'help.relations.route_h': 3,
88032                 'help.relations.boundary_h': 3,
88033                 'help.notes.add_note_h': 3,
88034                 'help.notes.update_note_h': 3,
88035                 'help.notes.save_note_h': 3,
88036                 'help.imagery.sources_h': 3,
88037                 'help.imagery.offsets_h': 3,
88038                 'help.streetlevel.using_h': 3,
88039                 'help.gps.using_h': 3,
88040                 'help.qa.tools_h': 3,
88041                 'help.qa.issues_h': 3
88042             };
88043
88044             var replacements = {
88045                 point: icon('#iD-icon-point', 'pre-text'),
88046                 line: icon('#iD-icon-line', 'pre-text'),
88047                 area: icon('#iD-icon-area', 'pre-text'),
88048                 note: icon('#iD-icon-note', 'pre-text add-note'),
88049                 plus: icon('#iD-icon-plus', 'pre-text'),
88050                 minus: icon('#iD-icon-minus', 'pre-text'),
88051                 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
88052                 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
88053                 layers: icon('#iD-icon-layers', 'pre-text'),
88054                 data: icon('#iD-icon-data', 'pre-text'),
88055                 inspect: icon('#iD-icon-inspect', 'pre-text'),
88056                 move: icon('#iD-operation-move', 'pre-text'),
88057                 merge: icon('#iD-operation-merge', 'pre-text'),
88058                 delete: icon('#iD-operation-delete', 'pre-text'),
88059                 close: icon('#iD-icon-close', 'pre-text'),
88060                 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
88061                 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
88062                 save: icon('#iD-icon-save', 'pre-text'),
88063                 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
88064                 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
88065                 shift: uiCmd.display('⇧'),
88066                 alt: uiCmd.display('⌥'),
88067                 return: uiCmd.display('↵'),
88068                 version: context.version
88069             };
88070
88071             // For each section, squash all the texts into a single markdown document
88072             var docs = docKeys.map(function(key) {
88073                 var helpkey = 'help.' + key[0];
88074                 var text = key[1].reduce(function(all, part) {
88075                     var subkey = helpkey + '.' + part;
88076                     var depth = headings[subkey];                              // is this subkey a heading?
88077                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
88078                     return all + hhh + t(subkey, replacements) + '\n\n';
88079                 }, '');
88080
88081                 return {
88082                     title: t(helpkey + '.title'),
88083                     html: marked(text.trim())
88084                 };
88085             });
88086
88087             var paneTooltip = tooltip()
88088                 .placement((textDirection === 'rtl') ? 'right' : 'left')
88089                 .html(true)
88090                 .title(uiTooltipHtml(t('help.title'), key));
88091
88092             function hidePane() {
88093                 context.ui().togglePanes();
88094             }
88095
88096             uiHelp.togglePane = function() {
88097                 if (event) event.preventDefault();
88098                 paneTooltip.hide(_toggleButton);
88099                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
88100             };
88101
88102             uiHelp.renderToggleButton = function(selection) {
88103
88104                 _toggleButton = selection.append('button')
88105                     .on('click', uiHelp.togglePane)
88106                     .call(svgIcon('#iD-icon-help', 'light'))
88107                     .call(paneTooltip);
88108             };
88109
88110
88111             uiHelp.renderPane = function(selection) {
88112
88113                 function clickHelp(d, i) {
88114                     var rtl = (textDirection === 'rtl');
88115                     content.property('scrollTop', 0);
88116                     doctitle.html(d.title);
88117
88118                     body.html(d.html);
88119                     body.selectAll('a')
88120                         .attr('target', '_blank');
88121                     menuItems.classed('selected', function(m) {
88122                         return m.title === d.title;
88123                     });
88124
88125                     nav.html('');
88126                     if (rtl) {
88127                         nav.call(drawNext).call(drawPrevious);
88128                     } else {
88129                         nav.call(drawPrevious).call(drawNext);
88130                     }
88131
88132
88133                     function drawNext(selection) {
88134                         if (i < docs.length - 1) {
88135                             var nextLink = selection
88136                                 .append('a')
88137                                 .attr('class', 'next')
88138                                 .on('click', function() {
88139                                     clickHelp(docs[i + 1], i + 1);
88140                                 });
88141
88142                             nextLink
88143                                 .append('span')
88144                                 .text(docs[i + 1].title)
88145                                 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
88146                         }
88147                     }
88148
88149
88150                     function drawPrevious(selection) {
88151                         if (i > 0) {
88152                             var prevLink = selection
88153                                 .append('a')
88154                                 .attr('class', 'previous')
88155                                 .on('click', function() {
88156                                     clickHelp(docs[i - 1], i - 1);
88157                                 });
88158
88159                             prevLink
88160                                 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
88161                                 .append('span')
88162                                 .text(docs[i - 1].title);
88163                         }
88164                     }
88165                 }
88166
88167
88168                 function clickWalkthrough() {
88169                     if (context.inIntro()) return;
88170                     context.container().call(uiIntro(context));
88171                     context.ui().togglePanes();
88172                 }
88173
88174
88175                 function clickShortcuts() {
88176                     context.container().call(uiShortcuts(context), true);
88177                 }
88178
88179
88180                 _pane = selection.append('div')
88181                     .attr('class', 'help-wrap map-pane fillL hide')
88182                     .attr('pane', 'help');
88183
88184                 var heading = _pane
88185                     .append('div')
88186                     .attr('class', 'pane-heading');
88187
88188                 var doctitle = heading
88189                     .append('h2')
88190                     .text(t('help.title'));
88191
88192                 heading
88193                     .append('button')
88194                     .on('click', hidePane)
88195                     .call(svgIcon('#iD-icon-close'));
88196
88197
88198                 var content = _pane
88199                     .append('div')
88200                     .attr('class', 'pane-content');
88201
88202                 var toc = content
88203                     .append('ul')
88204                     .attr('class', 'toc');
88205
88206                 var menuItems = toc.selectAll('li')
88207                     .data(docs)
88208                     .enter()
88209                     .append('li')
88210                     .append('a')
88211                     .html(function(d) { return d.title; })
88212                     .on('click', clickHelp);
88213
88214                 var shortcuts = toc
88215                     .append('li')
88216                     .attr('class', 'shortcuts')
88217                     .call(tooltip()
88218                         .html(true)
88219                         .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
88220                         .placement('top')
88221                     )
88222                     .append('a')
88223                     .on('click', clickShortcuts);
88224
88225                 shortcuts
88226                     .append('div')
88227                     .text(t('shortcuts.title'));
88228
88229                 var walkthrough = toc
88230                     .append('li')
88231                     .attr('class', 'walkthrough')
88232                     .append('a')
88233                     .on('click', clickWalkthrough);
88234
88235                 walkthrough
88236                     .append('svg')
88237                     .attr('class', 'logo logo-walkthrough')
88238                     .append('use')
88239                     .attr('xlink:href', '#iD-logo-walkthrough');
88240
88241                 walkthrough
88242                     .append('div')
88243                     .text(t('splash.walkthrough'));
88244
88245
88246                 var helpContent = content
88247                     .append('div')
88248                     .attr('class', 'left-content');
88249
88250                 var body = helpContent
88251                     .append('div')
88252                     .attr('class', 'body');
88253
88254                 var nav = helpContent
88255                     .append('div')
88256                     .attr('class', 'nav');
88257
88258                 clickHelp(docs[0], 0);
88259
88260                 context.keybinding()
88261                     .on(key, uiHelp.togglePane);
88262
88263             };
88264
88265             return uiHelp;
88266         }
88267
88268         function uiPanelBackground(context) {
88269             var background = context.background();
88270             var currSourceName = null;
88271             var metadata = {};
88272             var metadataKeys = [
88273                 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
88274             ];
88275
88276             var debouncedRedraw = debounce(redraw, 250);
88277
88278             function redraw(selection) {
88279                 var source = background.baseLayerSource();
88280                 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
88281
88282                 if (currSourceName !== source.name()) {
88283                     currSourceName = source.name();
88284                     metadata = {};
88285                 }
88286
88287                 selection.html('');
88288
88289                 var list = selection
88290                     .append('ul')
88291                     .attr('class', 'background-info');
88292
88293                 list
88294                     .append('li')
88295                     .text(currSourceName);
88296
88297                 metadataKeys.forEach(function(k) {
88298                     // DigitalGlobe vintage is available in raster layers for now.
88299                     if (isDG && k === 'vintage') return;
88300
88301                     list
88302                         .append('li')
88303                         .attr('class', 'background-info-list-' + k)
88304                         .classed('hide', !metadata[k])
88305                         .text(t('info_panels.background.' + k) + ':')
88306                         .append('span')
88307                         .attr('class', 'background-info-span-' + k)
88308                         .text(metadata[k]);
88309                 });
88310
88311                 debouncedGetMetadata(selection);
88312
88313                 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
88314
88315                 selection
88316                     .append('a')
88317                     .text(t('info_panels.background.' + toggleTiles))
88318                     .attr('href', '#')
88319                     .attr('class', 'button button-toggle-tiles')
88320                     .on('click', function() {
88321                         event.preventDefault();
88322                         context.setDebug('tile', !context.getDebug('tile'));
88323                         selection.call(redraw);
88324                     });
88325
88326                 if (isDG) {
88327                     var key = source.id + '-vintage';
88328                     var sourceVintage = context.background().findSource(key);
88329                     var showsVintage = context.background().showsLayer(sourceVintage);
88330                     var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
88331                     selection
88332                         .append('a')
88333                         .text(t('info_panels.background.' + toggleVintage))
88334                         .attr('href', '#')
88335                         .attr('class', 'button button-toggle-vintage')
88336                         .on('click', function() {
88337                             event.preventDefault();
88338                             context.background().toggleOverlayLayer(sourceVintage);
88339                             selection.call(redraw);
88340                         });
88341                 }
88342
88343                 // disable if necessary
88344                 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
88345                     if (source.id !== layerId) {
88346                         var key = layerId + '-vintage';
88347                         var sourceVintage = context.background().findSource(key);
88348                         if (context.background().showsLayer(sourceVintage)) {
88349                             context.background().toggleOverlayLayer(sourceVintage);
88350                         }
88351                     }
88352                 });
88353             }
88354
88355
88356             var debouncedGetMetadata = debounce(getMetadata, 250);
88357
88358             function getMetadata(selection) {
88359                 var tile = d3_select('.layer-background img.tile-center');   // tile near viewport center
88360                 if (tile.empty()) return;
88361
88362                 var sourceName = currSourceName;
88363                 var d = tile.datum();
88364                 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
88365                 var center = context.map().center();
88366
88367                 // update zoom
88368                 metadata.zoom = String(zoom);
88369                 selection.selectAll('.background-info-list-zoom')
88370                     .classed('hide', false)
88371                     .selectAll('.background-info-span-zoom')
88372                     .text(metadata.zoom);
88373
88374                 if (!d || !d.length >= 3) return;
88375
88376                 background.baseLayerSource().getMetadata(center, d, function(err, result) {
88377                     if (err || currSourceName !== sourceName) return;
88378
88379                     // update vintage
88380                     var vintage = result.vintage;
88381                     metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
88382                     selection.selectAll('.background-info-list-vintage')
88383                         .classed('hide', false)
88384                         .selectAll('.background-info-span-vintage')
88385                         .text(metadata.vintage);
88386
88387                     // update other metdata
88388                     metadataKeys.forEach(function(k) {
88389                         if (k === 'zoom' || k === 'vintage') return;  // done already
88390                         var val = result[k];
88391                         metadata[k] = val;
88392                         selection.selectAll('.background-info-list-' + k)
88393                             .classed('hide', !val)
88394                             .selectAll('.background-info-span-' + k)
88395                             .text(val);
88396                     });
88397                 });
88398             }
88399
88400
88401             var panel = function(selection) {
88402                 selection.call(redraw);
88403
88404                 context.map()
88405                     .on('drawn.info-background', function() {
88406                         selection.call(debouncedRedraw);
88407                     })
88408                     .on('move.info-background', function() {
88409                         selection.call(debouncedGetMetadata);
88410                     });
88411
88412             };
88413
88414             panel.off = function() {
88415                 context.map()
88416                     .on('drawn.info-background', null)
88417                     .on('move.info-background', null);
88418             };
88419
88420             panel.id = 'background';
88421             panel.title = t('info_panels.background.title');
88422             panel.key = t('info_panels.background.key');
88423
88424
88425             return panel;
88426         }
88427
88428         function uiPanelHistory(context) {
88429             var osm;
88430
88431             function displayTimestamp(timestamp) {
88432                 if (!timestamp) return t('info_panels.history.unknown');
88433                 var detected = utilDetect();
88434                 var options = {
88435                     day: 'numeric', month: 'short', year: 'numeric',
88436                     hour: 'numeric', minute: 'numeric', second: 'numeric'
88437                 };
88438                 var d = new Date(timestamp);
88439                 if (isNaN(d.getTime())) return t('info_panels.history.unknown');
88440                 return d.toLocaleString(detected.locale, options);
88441             }
88442
88443
88444             function displayUser(selection, userName) {
88445                 if (!userName) {
88446                     selection
88447                         .append('span')
88448                         .text(t('info_panels.history.unknown'));
88449                     return;
88450                 }
88451
88452                 selection
88453                     .append('span')
88454                     .attr('class', 'user-name')
88455                     .text(userName);
88456
88457                 var links = selection
88458                     .append('div')
88459                     .attr('class', 'links');
88460
88461                 if (osm) {
88462                     links
88463                         .append('a')
88464                         .attr('class', 'user-osm-link')
88465                         .attr('href', osm.userURL(userName))
88466                         .attr('target', '_blank')
88467                         .attr('tabindex', -1)
88468                         .text('OSM');
88469                 }
88470
88471                 links
88472                     .append('a')
88473                     .attr('class', 'user-hdyc-link')
88474                     .attr('href', 'https://hdyc.neis-one.org/?' + userName)
88475                     .attr('target', '_blank')
88476                     .attr('tabindex', -1)
88477                     .text('HDYC');
88478             }
88479
88480
88481             function displayChangeset(selection, changeset) {
88482                 if (!changeset) {
88483                     selection
88484                         .append('span')
88485                         .text(t('info_panels.history.unknown'));
88486                     return;
88487                 }
88488
88489                 selection
88490                     .append('span')
88491                     .attr('class', 'changeset-id')
88492                     .text(changeset);
88493
88494                 var links = selection
88495                     .append('div')
88496                     .attr('class', 'links');
88497
88498                 if (osm) {
88499                     links
88500                         .append('a')
88501                         .attr('class', 'changeset-osm-link')
88502                         .attr('href', osm.changesetURL(changeset))
88503                         .attr('target', '_blank')
88504                         .attr('tabindex', -1)
88505                         .text('OSM');
88506                 }
88507
88508                 links
88509                     .append('a')
88510                     .attr('class', 'changeset-osmcha-link')
88511                     .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
88512                     .attr('target', '_blank')
88513                     .attr('tabindex', -1)
88514                     .text('OSMCha');
88515
88516                 links
88517                     .append('a')
88518                     .attr('class', 'changeset-achavi-link')
88519                     .attr('href', 'https://overpass-api.de/achavi/?changeset=' + changeset)
88520                     .attr('target', '_blank')
88521                     .attr('tabindex', -1)
88522                     .text('Achavi');
88523             }
88524
88525
88526             function redraw(selection) {
88527                 var selectedNoteID = context.selectedNoteID();
88528                 osm = context.connection();
88529
88530                 var selected, note, entity;
88531                 if (selectedNoteID && osm) {       // selected 1 note
88532                     selected = [ t('note.note') + ' ' + selectedNoteID ];
88533                     note = osm.getNote(selectedNoteID);
88534                 } else {                           // selected 1..n entities
88535                     selected = context.selectedIDs()
88536                         .filter(function(e) { return context.hasEntity(e); });
88537                     if (selected.length) {
88538                         entity = context.entity(selected[0]);
88539                     }
88540                 }
88541
88542                 var singular = selected.length === 1 ? selected[0] : null;
88543
88544                 selection.html('');
88545
88546                 selection
88547                     .append('h4')
88548                     .attr('class', 'history-heading')
88549                     .text(singular || t('info_panels.history.selected', { n: selected.length }));
88550
88551                 if (!singular) return;
88552
88553                 if (entity) {
88554                     selection.call(redrawEntity, entity);
88555                 } else if (note) {
88556                     selection.call(redrawNote, note);
88557                 }
88558             }
88559
88560
88561             function redrawNote(selection, note) {
88562                 if (!note || note.isNew()) {
88563                     selection
88564                         .append('div')
88565                         .text(t('info_panels.history.note_no_history'));
88566                     return;
88567                 }
88568
88569                 var list = selection
88570                     .append('ul');
88571
88572                 list
88573                     .append('li')
88574                     .text(t('info_panels.history.note_comments') + ':')
88575                     .append('span')
88576                     .text(note.comments.length);
88577
88578                 if (note.comments.length) {
88579                     list
88580                         .append('li')
88581                         .text(t('info_panels.history.note_created_date') + ':')
88582                         .append('span')
88583                         .text(displayTimestamp(note.comments[0].date));
88584
88585                     list
88586                         .append('li')
88587                         .text(t('info_panels.history.note_created_user') + ':')
88588                         .call(displayUser, note.comments[0].user);
88589                 }
88590
88591                 if (osm) {
88592                     selection
88593                         .append('a')
88594                         .attr('class', 'view-history-on-osm')
88595                         .attr('target', '_blank')
88596                         .attr('tabindex', -1)
88597                         .attr('href', osm.noteURL(note))
88598                         .call(svgIcon('#iD-icon-out-link', 'inline'))
88599                         .append('span')
88600                         .text(t('info_panels.history.note_link_text'));
88601                 }
88602             }
88603
88604
88605             function redrawEntity(selection, entity) {
88606                 if (!entity || entity.isNew()) {
88607                     selection
88608                         .append('div')
88609                         .text(t('info_panels.history.no_history'));
88610                     return;
88611                 }
88612
88613                 var links = selection
88614                     .append('div')
88615                     .attr('class', 'links');
88616
88617                 if (osm) {
88618                     links
88619                         .append('a')
88620                         .attr('class', 'view-history-on-osm')
88621                         .attr('href', osm.historyURL(entity))
88622                         .attr('target', '_blank')
88623                         .attr('tabindex', -1)
88624                         .attr('title', t('info_panels.history.link_text'))
88625                         .text('OSM');
88626                 }
88627                 links
88628                     .append('a')
88629                     .attr('class', 'pewu-history-viewer-link')
88630                     .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
88631                     .attr('target', '_blank')
88632                     .attr('tabindex', -1)
88633                     .text('PeWu');
88634
88635                 var list = selection
88636                     .append('ul');
88637
88638                 list
88639                     .append('li')
88640                     .text(t('info_panels.history.version') + ':')
88641                     .append('span')
88642                     .text(entity.version);
88643
88644                 list
88645                     .append('li')
88646                     .text(t('info_panels.history.last_edit') + ':')
88647                     .append('span')
88648                     .text(displayTimestamp(entity.timestamp));
88649
88650                 list
88651                     .append('li')
88652                     .text(t('info_panels.history.edited_by') + ':')
88653                     .call(displayUser, entity.user);
88654
88655                 list
88656                     .append('li')
88657                     .text(t('info_panels.history.changeset') + ':')
88658                     .call(displayChangeset, entity.changeset);
88659             }
88660
88661
88662             var panel = function(selection) {
88663                 selection.call(redraw);
88664
88665                 context.map()
88666                     .on('drawn.info-history', function() {
88667                         selection.call(redraw);
88668                     });
88669
88670                 context
88671                     .on('enter.info-history', function() {
88672                         selection.call(redraw);
88673                     });
88674             };
88675
88676             panel.off = function() {
88677                 context.map().on('drawn.info-history', null);
88678                 context.on('enter.info-history', null);
88679             };
88680
88681             panel.id = 'history';
88682             panel.title = t('info_panels.history.title');
88683             panel.key = t('info_panels.history.key');
88684
88685
88686             return panel;
88687         }
88688
88689         var OSM_PRECISION = 7;
88690         var locale$2 = utilDetect().locale;
88691
88692         /**
88693          * Returns a localized representation of the given length measurement.
88694          *
88695          * @param {Number} m area in meters
88696          * @param {Boolean} isImperial true for U.S. customary units; false for metric
88697          */
88698         function displayLength(m, isImperial) {
88699             var d = m * (isImperial ? 3.28084 : 1);
88700             var unit;
88701
88702             if (isImperial) {
88703                 if (d >= 5280) {
88704                     d /= 5280;
88705                     unit = 'miles';
88706                 } else {
88707                     unit = 'feet';
88708                 }
88709             } else {
88710                 if (d >= 1000) {
88711                     d /= 1000;
88712                     unit = 'kilometers';
88713                 } else {
88714                     unit = 'meters';
88715                 }
88716             }
88717
88718             return t('units.' + unit, {
88719                 quantity: d.toLocaleString(locale$2, {
88720                     maximumSignificantDigits: 4
88721                 })
88722             });
88723         }
88724
88725         /**
88726          * Returns a localized representation of the given area measurement.
88727          *
88728          * @param {Number} m2 area in square meters
88729          * @param {Boolean} isImperial true for U.S. customary units; false for metric
88730          */
88731         function displayArea(m2, isImperial) {
88732             var d = m2 * (isImperial ? 10.7639111056 : 1);
88733             var d1, d2, area;
88734             var unit1 = '';
88735             var unit2 = '';
88736
88737             if (isImperial) {
88738                 if (d >= 6969600) { // > 0.25mi² show mi²
88739                     d1 = d / 27878400;
88740                     unit1 = 'square_miles';
88741                 } else {
88742                     d1 = d;
88743                     unit1 = 'square_feet';
88744                 }
88745
88746                 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
88747                     d2 = d / 43560;
88748                     unit2 = 'acres';
88749                 }
88750
88751             } else {
88752                 if (d >= 250000) { // > 0.25km² show km²
88753                     d1 = d / 1000000;
88754                     unit1 = 'square_kilometers';
88755                 } else {
88756                     d1 = d;
88757                     unit1 = 'square_meters';
88758                 }
88759
88760                 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
88761                     d2 = d / 10000;
88762                     unit2 = 'hectares';
88763                 }
88764             }
88765
88766             area = t('units.' + unit1, {
88767                 quantity: d1.toLocaleString(locale$2, {
88768                     maximumSignificantDigits: 4
88769                 })
88770             });
88771
88772             if (d2) {
88773                 return t('units.area_pair', {
88774                     area1: area,
88775                     area2: t('units.' + unit2, {
88776                         quantity: d2.toLocaleString(locale$2, {
88777                             maximumSignificantDigits: 2
88778                         })
88779                     })
88780                 });
88781             } else {
88782                 return area;
88783             }
88784         }
88785
88786         function wrap(x, min, max) {
88787             var d = max - min;
88788             return ((x - min) % d + d) % d + min;
88789         }
88790
88791         function clamp$1(x, min, max) {
88792             return Math.max(min, Math.min(x, max));
88793         }
88794
88795         function displayCoordinate(deg, pos, neg) {
88796             var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
88797             var sec = (min - Math.floor(min)) * 60;
88798             var displayDegrees = t('units.arcdegrees', {
88799                 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
88800             });
88801             var displayCoordinate;
88802
88803             if (Math.floor(sec) > 0) {
88804                 displayCoordinate = displayDegrees +
88805                     t('units.arcminutes', {
88806                         quantity: Math.floor(min).toLocaleString(locale$2)
88807                     }) +
88808                     t('units.arcseconds', {
88809                         quantity: Math.round(sec).toLocaleString(locale$2)
88810                     });
88811             } else if (Math.floor(min) > 0) {
88812                 displayCoordinate = displayDegrees +
88813                     t('units.arcminutes', {
88814                         quantity: Math.round(min).toLocaleString(locale$2)
88815                     });
88816             } else {
88817                 displayCoordinate = t('units.arcdegrees', {
88818                     quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
88819                 });
88820             }
88821
88822             if (deg === 0) {
88823                 return displayCoordinate;
88824             } else {
88825                 return t('units.coordinate', {
88826                     coordinate: displayCoordinate,
88827                     direction: t('units.' + (deg > 0 ? pos : neg))
88828                 });
88829             }
88830         }
88831
88832         /**
88833          * Returns given coordinate pair in degree-minute-second format.
88834          *
88835          * @param {Array<Number>} coord longitude and latitude
88836          */
88837         function dmsCoordinatePair(coord) {
88838             return t('units.coordinate_pair', {
88839                 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
88840                 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
88841             });
88842         }
88843
88844         /**
88845          * Returns the given coordinate pair in decimal format.
88846          * note: unlocalized to avoid comma ambiguity - see #4765
88847          *
88848          * @param {Array<Number>} coord longitude and latitude
88849          */
88850         function decimalCoordinatePair(coord) {
88851             return t('units.coordinate_pair', {
88852                 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
88853                 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
88854             });
88855         }
88856
88857         function uiPanelLocation(context) {
88858             var currLocation = '';
88859
88860
88861             function redraw(selection) {
88862                 selection.html('');
88863
88864                 var list = selection
88865                     .append('ul');
88866
88867                 // Mouse coordinates
88868                 var coord = context.map().mouseCoordinates();
88869                 if (coord.some(isNaN)) {
88870                     coord = context.map().center();
88871                 }
88872
88873                 list
88874                     .append('li')
88875                     .text(dmsCoordinatePair(coord))
88876                     .append('li')
88877                     .text(decimalCoordinatePair(coord));
88878
88879                 // Location Info
88880                 selection
88881                     .append('div')
88882                     .attr('class', 'location-info')
88883                     .text(currLocation || ' ');
88884
88885                 debouncedGetLocation(selection, coord);
88886             }
88887
88888
88889             var debouncedGetLocation = debounce(getLocation, 250);
88890             function getLocation(selection, coord) {
88891                 if (!services$1.geocoder) {
88892                     currLocation = t('info_panels.location.unknown_location');
88893                     selection.selectAll('.location-info')
88894                         .text(currLocation);
88895                 } else {
88896                     services$1.geocoder.reverse(coord, function(err, result) {
88897                         currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
88898                         selection.selectAll('.location-info')
88899                             .text(currLocation);
88900                     });
88901                 }
88902             }
88903
88904
88905             var panel = function(selection) {
88906                 selection.call(redraw);
88907
88908                 context.surface()
88909                     .on('mousemove.info-location', function() {
88910                         selection.call(redraw);
88911                     });
88912             };
88913
88914             panel.off = function() {
88915                 context.surface()
88916                     .on('mousemove.info-location', null);
88917             };
88918
88919             panel.id = 'location';
88920             panel.title = t('info_panels.location.title');
88921             panel.key = t('info_panels.location.key');
88922
88923
88924             return panel;
88925         }
88926
88927         function uiPanelMeasurement(context) {
88928             var locale = utilDetect().locale;
88929             var isImperial = (locale.toLowerCase() === 'en-us');
88930
88931
88932             function radiansToMeters(r) {
88933                 // using WGS84 authalic radius (6371007.1809 m)
88934                 return r * 6371007.1809;
88935             }
88936
88937             function steradiansToSqmeters(r) {
88938                 // http://gis.stackexchange.com/a/124857/40446
88939                 return r / (4 * Math.PI) * 510065621724000;
88940             }
88941
88942
88943             function toLineString(feature) {
88944                 if (feature.type === 'LineString') return feature;
88945
88946                 var result = { type: 'LineString', coordinates: [] };
88947                 if (feature.type === 'Polygon') {
88948                     result.coordinates = feature.coordinates[0];
88949                 } else if (feature.type === 'MultiPolygon') {
88950                     result.coordinates = feature.coordinates[0][0];
88951                 }
88952
88953                 return result;
88954             }
88955
88956
88957             function nodeCount(feature) {
88958               if (feature.type === 'LineString') return feature.coordinates.length;
88959               if (feature.type === 'Polygon') return feature.coordinates[0].length - 1;
88960             }
88961
88962
88963             function redraw(selection) {
88964                 var resolver = context.graph();
88965                 var selectedNoteID = context.selectedNoteID();
88966                 var osm = services$1.osm;
88967
88968                 var selected, center, entity, note, geometry;
88969
88970                 if (selectedNoteID && osm) {       // selected 1 note
88971                     selected = [ t('note.note') + ' ' + selectedNoteID ];
88972                     note = osm.getNote(selectedNoteID);
88973                     center = note.loc;
88974                     geometry = 'note';
88975
88976                 } else {                           // selected 1..n entities
88977                     var extent = geoExtent();
88978                     selected = context.selectedIDs()
88979                         .filter(function(e) { return context.hasEntity(e); });
88980                     if (selected.length) {
88981                         for (var i = 0; i < selected.length; i++) {
88982                             entity = context.entity(selected[i]);
88983                             extent._extend(entity.extent(resolver));
88984                         }
88985                         center = extent.center();
88986                         geometry = entity.geometry(resolver);
88987                     }
88988                 }
88989
88990                 var singular = selected.length === 1 ? selected[0] : null;
88991
88992                 selection.html('');
88993
88994                 selection
88995                     .append('h4')
88996                     .attr('class', 'measurement-heading')
88997                     .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
88998
88999                 if (!selected.length) return;
89000
89001
89002                 var list = selection
89003                     .append('ul');
89004                 var coordItem;
89005
89006                 // multiple selected features, just display extent center..
89007                 if (!singular) {
89008                     coordItem = list
89009                         .append('li')
89010                         .text(t('info_panels.measurement.center') + ':');
89011                     coordItem.append('span')
89012                         .text(dmsCoordinatePair(center));
89013                     coordItem.append('span')
89014                         .text(decimalCoordinatePair(center));
89015                     return;
89016                 }
89017
89018                 // single selected feature, display details..
89019                 if (geometry === 'line' || geometry === 'area') {
89020                     var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
89021                     var feature = entity.asGeoJSON(resolver);
89022                     var length = radiansToMeters(d3_geoLength(toLineString(feature)));
89023                     var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
89024                     var centroid = d3_geoCentroid(feature);
89025
89026                     list
89027                         .append('li')
89028                         .text(t('info_panels.measurement.geometry') + ':')
89029                         .append('span')
89030                         .text(
89031                             closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
89032                         );
89033
89034                     if (entity.type !== 'relation') {
89035                         list
89036                             .append('li')
89037                             .text(t('info_panels.measurement.node_count') + ':')
89038                             .append('span')
89039                             .text(nodeCount(feature).toLocaleString(locale));
89040                     }
89041
89042                     if (closed) {
89043                         var area = steradiansToSqmeters(entity.area(resolver));
89044                         list
89045                             .append('li')
89046                             .text(t('info_panels.measurement.area') + ':')
89047                             .append('span')
89048                             .text(displayArea(area, isImperial));
89049                     }
89050
89051
89052                     list
89053                         .append('li')
89054                         .text(lengthLabel + ':')
89055                         .append('span')
89056                         .text(displayLength(length, isImperial));
89057
89058                     coordItem = list
89059                         .append('li')
89060                         .text(t('info_panels.measurement.centroid') + ':');
89061                     coordItem.append('span')
89062                         .text(dmsCoordinatePair(centroid));
89063                     coordItem.append('span')
89064                         .text(decimalCoordinatePair(centroid));
89065
89066                     var toggle  = isImperial ? 'imperial' : 'metric';
89067
89068                     selection
89069                         .append('a')
89070                         .text(t('info_panels.measurement.' + toggle))
89071                         .attr('href', '#')
89072                         .attr('class', 'button button-toggle-units')
89073                         .on('click', function() {
89074                             event.preventDefault();
89075                             isImperial = !isImperial;
89076                             selection.call(redraw);
89077                         });
89078
89079                 } else {
89080                     var centerLabel = t('info_panels.measurement.' +
89081                         (note || entity.type === 'node' ? 'location' : 'center'));
89082
89083                     list
89084                         .append('li')
89085                         .text(t('info_panels.measurement.geometry') + ':')
89086                         .append('span')
89087                         .text(t('geometry.' + geometry));
89088
89089                     coordItem = list
89090                         .append('li')
89091                         .text(centerLabel + ':');
89092                     coordItem.append('span')
89093                         .text(dmsCoordinatePair(center));
89094                     coordItem.append('span')
89095                         .text(decimalCoordinatePair(center));
89096                 }
89097             }
89098
89099
89100             var panel = function(selection) {
89101                 selection.call(redraw);
89102
89103                 context.map()
89104                     .on('drawn.info-measurement', function() {
89105                         selection.call(redraw);
89106                     });
89107
89108                 context
89109                     .on('enter.info-measurement', function() {
89110                         selection.call(redraw);
89111                     });
89112             };
89113
89114             panel.off = function() {
89115                 context.map().on('drawn.info-measurement', null);
89116                 context.on('enter.info-measurement', null);
89117             };
89118
89119             panel.id = 'measurement';
89120             panel.title = t('info_panels.measurement.title');
89121             panel.key = t('info_panels.measurement.key');
89122
89123
89124             return panel;
89125         }
89126
89127         var uiInfoPanels = {
89128             background: uiPanelBackground,
89129             history: uiPanelHistory,
89130             location: uiPanelLocation,
89131             measurement: uiPanelMeasurement,
89132         };
89133
89134         function uiInfo(context) {
89135             var ids = Object.keys(uiInfoPanels);
89136             var wasActive = ['measurement'];
89137             var panels = {};
89138             var active = {};
89139
89140             // create panels
89141             ids.forEach(function(k) {
89142                 if (!panels[k]) {
89143                     panels[k] = uiInfoPanels[k](context);
89144                     active[k] = false;
89145                 }
89146             });
89147
89148
89149             function info(selection) {
89150
89151                 function redraw() {
89152                     var activeids = ids.filter(function(k) { return active[k]; }).sort();
89153
89154                     var containers = infoPanels.selectAll('.panel-container')
89155                         .data(activeids, function(k) { return k; });
89156
89157                     containers.exit()
89158                         .style('opacity', 1)
89159                         .transition()
89160                         .duration(200)
89161                         .style('opacity', 0)
89162                         .on('end', function(d) {
89163                             d3_select(this)
89164                                 .call(panels[d].off)
89165                                 .remove();
89166                         });
89167
89168                     var enter = containers.enter()
89169                         .append('div')
89170                         .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
89171
89172                     enter
89173                         .style('opacity', 0)
89174                         .transition()
89175                         .duration(200)
89176                         .style('opacity', 1);
89177
89178                     var title = enter
89179                         .append('div')
89180                         .attr('class', 'panel-title fillD2');
89181
89182                     title
89183                         .append('h3')
89184                         .text(function(d) { return panels[d].title; });
89185
89186                     title
89187                         .append('button')
89188                         .attr('class', 'close')
89189                         .on('click', function (d) { info.toggle(d); })
89190                         .call(svgIcon('#iD-icon-close'));
89191
89192                     enter
89193                         .append('div')
89194                         .attr('class', function(d) { return 'panel-content panel-content-' + d; });
89195
89196
89197                     // redraw the panels
89198                     infoPanels.selectAll('.panel-content')
89199                         .each(function(d) {
89200                             d3_select(this).call(panels[d]);
89201                         });
89202                 }
89203
89204
89205                 info.toggle = function(which) {
89206                     if (event) {
89207                         event.stopImmediatePropagation();
89208                         event.preventDefault();
89209                     }
89210
89211                     var activeids = ids.filter(function(k) { return active[k]; });
89212
89213                     if (which) {  // toggle one
89214                         active[which] = !active[which];
89215                         if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
89216                             wasActive = [which];
89217                         }
89218
89219                         d3_select('.' + which + '-panel-toggle-item')
89220                             .classed('active', active[which])
89221                             .select('input')
89222                             .property('checked', active[which]);
89223
89224                     } else {      // toggle all
89225                         if (activeids.length) {
89226                             wasActive = activeids;
89227                             activeids.forEach(function(k) { active[k] = false; });
89228                         } else {
89229                             wasActive.forEach(function(k) { active[k] = true; });
89230                         }
89231                     }
89232
89233                     redraw();
89234                 };
89235
89236
89237                 var infoPanels = selection.selectAll('.info-panels')
89238                     .data([0]);
89239
89240                 infoPanels = infoPanels.enter()
89241                     .append('div')
89242                     .attr('class', 'info-panels')
89243                     .merge(infoPanels);
89244
89245                 redraw();
89246
89247                 context.keybinding()
89248                     .on(uiCmd('⌘' + t('info_panels.key')), info.toggle);
89249
89250                 ids.forEach(function(k) {
89251                     var key = t('info_panels.' + k + '.key', { default: null });
89252                     if (!key) return;
89253                     context.keybinding()
89254                         .on(uiCmd('⌘⇧' + key), function() { info.toggle(k); });
89255                 });
89256             }
89257
89258             return info;
89259         }
89260
89261         function uiIssues(context) {
89262             var key = t('issues.key');
89263
89264             var MINSQUARE = 0;
89265             var MAXSQUARE = 20;
89266             var DEFAULTSQUARE = 5;  // see also unsquare_way.js
89267
89268             var _errorsSelection = d3_select(null);
89269             var _warningsSelection = d3_select(null);
89270             var _rulesList = d3_select(null);
89271             var _pane = d3_select(null);
89272             var _toggleButton = d3_select(null);
89273
89274             var _errors = [];
89275             var _warnings = [];
89276             var _options = {
89277                 what: context.storage('validate-what') || 'edited',    // 'all', 'edited'
89278                 where: context.storage('validate-where') || 'all'  // 'all', 'visible'
89279             };
89280
89281             // listeners
89282             context.validator().on('validated.uiIssues',
89283                 function() { window.requestIdleCallback(update); }
89284             );
89285             context.map().on('move.uiIssues',
89286                 debounce(function() { window.requestIdleCallback(update); }, 1000)
89287             );
89288
89289
89290             function addNotificationBadge(selection) {
89291                 var d = 10;
89292                 selection.selectAll('svg.notification-badge')
89293                     .data([0])
89294                     .enter()
89295                     .append('svg')
89296                     .attr('viewbox', '0 0 ' + d + ' ' + d)
89297                     .attr('class', 'notification-badge hide')
89298                     .append('circle')
89299                     .attr('cx', d / 2)
89300                     .attr('cy', d / 2)
89301                     .attr('r', (d / 2) - 1)
89302                     .attr('fill', 'currentColor');
89303             }
89304
89305
89306             function renderErrorsList(selection) {
89307                 _errorsSelection = selection
89308                     .call(drawIssuesList, 'errors', _errors);
89309             }
89310
89311
89312             function renderWarningsList(selection) {
89313                 _warningsSelection = selection
89314                     .call(drawIssuesList, 'warnings', _warnings);
89315             }
89316
89317
89318             function drawIssuesList(selection, which, issues) {
89319                 var list = selection.selectAll('.issues-list')
89320                     .data([0]);
89321
89322                 list = list.enter()
89323                     .append('ul')
89324                     .attr('class', 'layer-list issues-list ' + which + '-list')
89325                     .merge(list);
89326
89327
89328                 var items = list.selectAll('li')
89329                     .data(issues, function(d) { return d.id; });
89330
89331                 // Exit
89332                 items.exit()
89333                     .remove();
89334
89335                 // Enter
89336                 var itemsEnter = items.enter()
89337                     .append('li')
89338                     .attr('class', function (d) { return 'issue severity-' + d.severity; })
89339                     .on('click', function(d) {
89340                         context.validator().focusIssue(d);
89341                     })
89342                     .on('mouseover', function(d) {
89343                         utilHighlightEntities(d.entityIds, true, context);
89344                     })
89345                     .on('mouseout', function(d) {
89346                         utilHighlightEntities(d.entityIds, false, context);
89347                     });
89348
89349
89350                 var labelsEnter = itemsEnter
89351                     .append('div')
89352                     .attr('class', 'issue-label');
89353
89354                 var textEnter = labelsEnter
89355                     .append('span')
89356                     .attr('class', 'issue-text');
89357
89358                 textEnter
89359                     .append('span')
89360                     .attr('class', 'issue-icon')
89361                     .each(function(d) {
89362                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
89363                         d3_select(this)
89364                             .call(svgIcon(iconName));
89365                     });
89366
89367                 textEnter
89368                     .append('span')
89369                     .attr('class', 'issue-message');
89370
89371                 /*
89372                 labelsEnter
89373                     .append('span')
89374                     .attr('class', 'issue-autofix')
89375                     .each(function(d) {
89376                         if (!d.autoFix) return;
89377
89378                         d3_select(this)
89379                             .append('button')
89380                             .attr('title', t('issues.fix_one.title'))
89381                             .datum(d.autoFix)  // set button datum to the autofix
89382                             .attr('class', 'autofix action')
89383                             .on('click', function(d) {
89384                                 d3_event.preventDefault();
89385                                 d3_event.stopPropagation();
89386
89387                                 var issuesEntityIDs = d.issue.entityIds;
89388                                 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
89389
89390                                 context.perform.apply(context, d.autoArgs);
89391                                 context.validator().validate();
89392                             })
89393                             .call(svgIcon('#iD-icon-wrench'));
89394                     });
89395                 */
89396
89397                 // Update
89398                 items = items
89399                     .merge(itemsEnter)
89400                     .order();
89401
89402                 items.selectAll('.issue-message')
89403                     .text(function(d) {
89404                         return d.message(context);
89405                     });
89406
89407                 /*
89408                 // autofix
89409                 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
89410
89411                 var autoFixAll = selection.selectAll('.autofix-all')
89412                     .data(canAutoFix.length ? [0] : []);
89413
89414                 // exit
89415                 autoFixAll.exit()
89416                     .remove();
89417
89418                 // enter
89419                 var autoFixAllEnter = autoFixAll.enter()
89420                     .insert('div', '.issues-list')
89421                     .attr('class', 'autofix-all');
89422
89423                 var linkEnter = autoFixAllEnter
89424                     .append('a')
89425                     .attr('class', 'autofix-all-link')
89426                     .attr('href', '#');
89427
89428                 linkEnter
89429                     .append('span')
89430                     .attr('class', 'autofix-all-link-text')
89431                     .text(t('issues.fix_all.title'));
89432
89433                 linkEnter
89434                     .append('span')
89435                     .attr('class', 'autofix-all-link-icon')
89436                     .call(svgIcon('#iD-icon-wrench'));
89437
89438                 if (which === 'warnings') {
89439                     renderIgnoredIssuesReset(selection);
89440                 }
89441
89442                 // update
89443                 autoFixAll = autoFixAll
89444                     .merge(autoFixAllEnter);
89445
89446                 autoFixAll.selectAll('.autofix-all-link')
89447                     .on('click', function() {
89448                         context.pauseChangeDispatch();
89449                         context.perform(actionNoop());
89450                         canAutoFix.forEach(function(issue) {
89451                             var args = issue.autoFix.autoArgs.slice();  // copy
89452                             if (typeof args[args.length - 1] !== 'function') {
89453                                 args.pop();
89454                             }
89455                             args.push(t('issues.fix_all.annotation'));
89456                             context.replace.apply(context, args);
89457                         });
89458                         context.resumeChangeDispatch();
89459                         context.validator().validate();
89460                     });
89461                 */
89462             }
89463
89464
89465             function updateOptionValue(d, val) {
89466                 if (!val && event && event.target) {
89467                     val = event.target.value;
89468                 }
89469
89470                 _options[d] = val;
89471                 context.storage('validate-' + d, val);
89472                 context.validator().validate();
89473             }
89474
89475
89476             function renderIssuesOptions(selection) {
89477                 var container = selection.selectAll('.issues-options-container')
89478                     .data([0]);
89479
89480                 container = container.enter()
89481                     .append('div')
89482                     .attr('class', 'issues-options-container')
89483                     .merge(container);
89484
89485                 var data = [
89486                     { key: 'what', values: ['edited', 'all'] },
89487                     { key: 'where', values: ['visible', 'all'] }
89488                 ];
89489
89490                 var options = container.selectAll('.issues-option')
89491                     .data(data, function(d) { return d.key; });
89492
89493                 var optionsEnter = options.enter()
89494                     .append('div')
89495                     .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
89496
89497                 optionsEnter
89498                     .append('div')
89499                     .attr('class', 'issues-option-title')
89500                     .text(function(d) { return t('issues.options.' + d.key + '.title'); });
89501
89502                 var valuesEnter = optionsEnter.selectAll('label')
89503                     .data(function(d) {
89504                         return d.values.map(function(val) { return { value: val, key: d.key }; });
89505                     })
89506                     .enter()
89507                     .append('label');
89508
89509                 valuesEnter
89510                     .append('input')
89511                     .attr('type', 'radio')
89512                     .attr('name', function(d) { return 'issues-option-' + d.key; })
89513                     .attr('value', function(d) { return d.value; })
89514                     .property('checked', function(d) { return _options[d.key] === d.value; })
89515                     .on('change', function(d) { updateOptionValue(d.key, d.value); });
89516
89517                 valuesEnter
89518                     .append('span')
89519                     .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
89520             }
89521
89522
89523             function renderNoIssuesBox(selection) {
89524
89525                 var box = selection.append('div')
89526                     .attr('class', 'box');
89527
89528                 box
89529                     .append('div')
89530                     .call(svgIcon('#iD-icon-apply', 'pre-text'));
89531
89532                 var noIssuesMessage = box
89533                     .append('span');
89534
89535                 noIssuesMessage
89536                     .append('strong')
89537                     .attr('class', 'message');
89538
89539                 noIssuesMessage
89540                     .append('br');
89541
89542                 noIssuesMessage
89543                     .append('span')
89544                     .attr('class', 'details');
89545             }
89546
89547             function renderIgnoredIssuesReset(selection) {
89548
89549                 var ignoredIssues = context.validator()
89550                     .getIssues({ what: 'all', where: 'all', includeDisabledRules: true, includeIgnored: 'only' });
89551
89552                 var resetIgnored = selection.selectAll('.reset-ignored')
89553                     .data(ignoredIssues.length ? [0] : []);
89554
89555                 // exit
89556                 resetIgnored.exit()
89557                     .remove();
89558
89559                 // enter
89560                 var resetIgnoredEnter = resetIgnored.enter()
89561                     .append('div')
89562                     .attr('class', 'reset-ignored section-footer');
89563
89564                 resetIgnoredEnter
89565                     .append('a')
89566                     .attr('href', '#');
89567
89568                 // update
89569                 resetIgnored = resetIgnored
89570                     .merge(resetIgnoredEnter);
89571
89572                 resetIgnored.select('a')
89573                     .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
89574
89575                 resetIgnored.on('click', function() {
89576                     context.validator().resetIgnoredIssues();
89577                 });
89578             }
89579
89580
89581             function renderRulesList(selection) {
89582                 var container = selection.selectAll('.issues-rulelist-container')
89583                     .data([0]);
89584
89585                 var containerEnter = container.enter()
89586                     .append('div')
89587                     .attr('class', 'issues-rulelist-container');
89588
89589                 containerEnter
89590                     .append('ul')
89591                     .attr('class', 'layer-list issue-rules-list');
89592
89593                 var ruleLinks = containerEnter
89594                     .append('div')
89595                     .attr('class', 'issue-rules-links section-footer');
89596
89597                 ruleLinks
89598                     .append('a')
89599                     .attr('class', 'issue-rules-link')
89600                     .attr('href', '#')
89601                     .text(t('issues.enable_all'))
89602                     .on('click', function() {
89603                         context.validator().disableRules([]);
89604                     });
89605
89606                 ruleLinks
89607                     .append('a')
89608                     .attr('class', 'issue-rules-link')
89609                     .attr('href', '#')
89610                     .text(t('issues.disable_all'))
89611                     .on('click', function() {
89612                         var keys = context.validator().getRuleKeys();
89613                         context.validator().disableRules(keys);
89614                     });
89615
89616
89617                 // Update
89618                 container = container
89619                     .merge(containerEnter);
89620
89621                 _rulesList = container.selectAll('.issue-rules-list');
89622
89623                 updateRulesList();
89624             }
89625
89626
89627             function updateRulesList() {
89628                 var ruleKeys = context.validator().getRuleKeys();
89629                 _rulesList
89630                     .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
89631             }
89632
89633
89634             function isRuleEnabled(d) {
89635                 return context.validator().isRuleEnabled(d);
89636             }
89637
89638
89639             function toggleRule(d) {
89640                 context.validator().toggleRule(d);
89641             }
89642
89643             function setNoIssuesText() {
89644
89645                 function checkForHiddenIssues(cases) {
89646                     for (var type in cases) {
89647                         var opts = cases[type];
89648                         var hiddenIssues = context.validator().getIssues(opts);
89649                         if (hiddenIssues.length) {
89650                             _pane.select('.issues-none .details')
89651                                 .text(t(
89652                                     'issues.no_issues.hidden_issues.' + type,
89653                                     { count: hiddenIssues.length.toString() }
89654                                 ));
89655                             return;
89656                         }
89657                     }
89658                     _pane.select('.issues-none .details')
89659                         .text(t('issues.no_issues.hidden_issues.none'));
89660                 }
89661
89662                 var messageType;
89663
89664                 if (_options.what === 'edited' && _options.where === 'visible') {
89665
89666                     messageType = 'edits_in_view';
89667
89668                     checkForHiddenIssues({
89669                         elsewhere: { what: 'edited', where: 'all' },
89670                         everything_else: { what: 'all', where: 'visible' },
89671                         disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
89672                         everything_else_elsewhere: { what: 'all', where: 'all' },
89673                         disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
89674                         ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
89675                         ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
89676                     });
89677
89678                 } else if (_options.what === 'edited' && _options.where === 'all') {
89679
89680                     messageType = 'edits';
89681
89682                     checkForHiddenIssues({
89683                         everything_else: { what: 'all', where: 'all' },
89684                         disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
89685                         ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
89686                     });
89687
89688                 } else if (_options.what === 'all' && _options.where === 'visible') {
89689
89690                     messageType = 'everything_in_view';
89691
89692                     checkForHiddenIssues({
89693                         elsewhere: { what: 'all', where: 'all' },
89694                         disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
89695                         disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
89696                         ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
89697                         ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
89698                     });
89699                 } else if (_options.what === 'all' && _options.where === 'all') {
89700
89701                     messageType = 'everything';
89702
89703                     checkForHiddenIssues({
89704                         disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
89705                         ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
89706                     });
89707                 }
89708
89709                 if (_options.what === 'edited' && context.history().difference().summary().length === 0) {
89710                     messageType = 'no_edits';
89711                 }
89712
89713                 _pane.select('.issues-none .message')
89714                     .text(t('issues.no_issues.message.' + messageType));
89715
89716             }
89717
89718
89719             function update() {
89720                 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
89721
89722                 // sort issues by distance away from the center of the map
89723                 var center = context.map().center();
89724                 var graph = context.graph();
89725                 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
89726                 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
89727
89728                 // cut off at 1000
89729                 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
89730                 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
89731                 _errors = _errors.slice(0, 1000);
89732                 _warnings = _warnings.slice(0, 1000);
89733
89734
89735                 _toggleButton.selectAll('.notification-badge')
89736                     .classed('error', (_errors.length > 0))
89737                     .classed('warning', (_errors.length === 0 && _warnings.length > 0))
89738                     .classed('hide', (_errors.length === 0 && _warnings.length === 0));
89739
89740
89741                 _pane.selectAll('.issues-errors')
89742                     .classed('hide', _errors.length === 0);
89743
89744                 if (_errors.length > 0) {
89745                     _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
89746                         .text(t('issues.errors.list_title', { count: errorCount }));
89747                     if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
89748                         _errorsSelection
89749                             .call(drawIssuesList, 'errors', _errors);
89750                     }
89751                 }
89752
89753                 _pane.selectAll('.issues-warnings')
89754                     .classed('hide', _warnings.length === 0);
89755
89756                 if (_warnings.length > 0) {
89757                     _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
89758                         .text(t('issues.warnings.list_title', { count: warningCount }));
89759                     if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
89760                         _warningsSelection
89761                             .call(drawIssuesList, 'warnings', _warnings);
89762                         renderIgnoredIssuesReset(_warningsSelection);
89763                     }
89764                 }
89765
89766                 var hasIssues = _warnings.length > 0 || _errors.length > 0;
89767
89768                 var issuesNone = _pane.select('.issues-none');
89769                 issuesNone.classed('hide', hasIssues);
89770                 if (!hasIssues) {
89771                     renderIgnoredIssuesReset(issuesNone);
89772                     setNoIssuesText();
89773                 }
89774
89775                 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
89776                     updateRulesList();
89777                 }
89778
89779
89780                 function byDistance(a, b) {
89781                     return a.dist - b.dist;
89782                 }
89783
89784                 function withDistance(issue) {
89785                     var extent = issue.extent(graph);
89786                     var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
89787                     return Object.assign(issue, { dist: dist });
89788                 }
89789             }
89790
89791
89792             function drawListItems(selection, data, type, name, change, active) {
89793                 var items = selection.selectAll('li')
89794                     .data(data);
89795
89796                 // Exit
89797                 items.exit()
89798                     .remove();
89799
89800                 // Enter
89801                 var enter = items.enter()
89802                     .append('li');
89803
89804                 if (name === 'rule') {
89805                     enter
89806                         .call(tooltip()
89807                             .title(function(d) { return t('issues.' + d + '.tip'); })
89808                             .placement('top')
89809                         );
89810                 }
89811
89812                 var label = enter
89813                     .append('label');
89814
89815                 label
89816                     .append('input')
89817                     .attr('type', type)
89818                     .attr('name', name)
89819                     .on('change', change);
89820
89821                 label
89822                     .append('span')
89823                     .html(function(d) {
89824                         var params = {};
89825                         if (d === 'unsquare_way') {
89826                             params.val = '<span class="square-degrees"></span>';
89827                         }
89828                         return t('issues.' + d + '.title', params);
89829                     });
89830
89831                 // Update
89832                 items = items
89833                     .merge(enter);
89834
89835                 items
89836                     .classed('active', active)
89837                     .selectAll('input')
89838                     .property('checked', active)
89839                     .property('indeterminate', false);
89840
89841
89842                 // user-configurable square threshold
89843                 var degStr = context.storage('validate-square-degrees');
89844                 if (degStr === null) {
89845                     degStr = '' + DEFAULTSQUARE;
89846                 }
89847
89848                 var span = items.selectAll('.square-degrees');
89849                 var input = span.selectAll('.square-degrees-input')
89850                     .data([0]);
89851
89852                 // enter / update
89853                 input.enter()
89854                     .append('input')
89855                     .attr('type', 'number')
89856                     .attr('min', '' + MINSQUARE)
89857                     .attr('max', '' + MAXSQUARE)
89858                     .attr('step', '0.5')
89859                     .attr('class', 'square-degrees-input')
89860                     .call(utilNoAuto)
89861                     .on('input', function() {
89862                         this.style.width = (this.value.length + 2.5) + 'ch';   // resize
89863                     })
89864                     .on('click', function () {
89865                         event.preventDefault();
89866                         event.stopPropagation();
89867                         this.select();
89868                     })
89869                     .on('keyup', function () {
89870                         if (event.keyCode === 13) { // enter
89871                             this.blur();
89872                             this.select();
89873                         }
89874                     })
89875                     .on('blur', changeSquare)
89876                     .merge(input)
89877                     .property('value', degStr)
89878                     .style('width', (degStr.length + 2.5) + 'ch');   // resize
89879             }
89880
89881
89882             function changeSquare() {
89883                 var input = d3_select(this);
89884                 var degStr = utilGetSetValue(input).trim();
89885                 var degNum = parseFloat(degStr, 10);
89886
89887                 if (!isFinite(degNum)) {
89888                     degNum = DEFAULTSQUARE;
89889                 } else if (degNum > MAXSQUARE) {
89890                     degNum = MAXSQUARE;
89891                 } else if (degNum < MINSQUARE) {
89892                     degNum = MINSQUARE;
89893                 }
89894
89895                 degNum = Math.round(degNum * 10 ) / 10;   // round to 1 decimal
89896                 degStr = '' + degNum;
89897
89898                 input
89899                     .property('value', degStr)
89900                     .style('width', (degStr.length + 2.5) + 'ch');   // resize
89901
89902                 context.storage('validate-square-degrees', degStr);
89903                 context.validator().changeSquareThreshold(degNum);
89904             }
89905
89906
89907             function hidePane() {
89908                 context.ui().togglePanes();
89909             }
89910
89911
89912
89913             var paneTooltip = tooltip()
89914                 .placement((textDirection === 'rtl') ? 'right' : 'left')
89915                 .html(true)
89916                 .title(uiTooltipHtml(t('issues.title'), key));
89917
89918
89919
89920             uiIssues.togglePane = function() {
89921                 if (event) event.preventDefault();
89922                 paneTooltip.hide(_toggleButton);
89923                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
89924             };
89925
89926
89927             uiIssues.renderToggleButton = function(selection) {
89928                 _toggleButton = selection
89929                     .append('button')
89930                     .on('click', uiIssues.togglePane)
89931                     .call(svgIcon('#iD-icon-alert', 'light'))
89932                     .call(addNotificationBadge)
89933                     .call(paneTooltip);
89934             };
89935
89936
89937             uiIssues.renderPane = function(selection) {
89938                 _pane = selection
89939                     .append('div')
89940                     .attr('class', 'fillL map-pane issues-pane hide')
89941                     .attr('pane', 'map-issues');
89942
89943                 var heading = _pane
89944                     .append('div')
89945                     .attr('class', 'pane-heading');
89946
89947                 heading
89948                     .append('h2')
89949                     .text(t('issues.title'));
89950
89951                 heading
89952                     .append('button')
89953                     .on('click', hidePane)
89954                     .call(svgIcon('#iD-icon-close'));
89955
89956                 var content = _pane
89957                     .append('div')
89958                     .attr('class', 'pane-content');
89959
89960                 content
89961                     .append('div')
89962                     .attr('class', 'issues-options')
89963                     .call(renderIssuesOptions);
89964
89965                 content
89966                     .append('div')
89967                     .attr('class', 'issues-none')
89968                     .call(renderNoIssuesBox);
89969
89970                 // errors
89971                 content
89972                     .append('div')
89973                     .attr('class', 'issues-errors')
89974                     .call(uiDisclosure(context, 'issues_errors', true)
89975                         .content(renderErrorsList)
89976                     );
89977
89978                 // warnings
89979                 content
89980                     .append('div')
89981                     .attr('class', 'issues-warnings')
89982                     .call(uiDisclosure(context, 'issues_warnings', true)
89983                         .content(renderWarningsList)
89984                     );
89985
89986                 // rules
89987                 content
89988                     .append('div')
89989                     .attr('class', 'issues-rules')
89990                     .call(uiDisclosure(context, 'issues_rules', false)
89991                         .title(t('issues.rules.title'))
89992                         .content(renderRulesList)
89993                     );
89994
89995                 // update();
89996
89997                 context.keybinding()
89998                     .on(key, uiIssues.togglePane);
89999             };
90000
90001             return uiIssues;
90002         }
90003
90004         function uiIssuesInfo(context) {
90005
90006             var warningsItem = {
90007                 id: 'warnings',
90008                 count: 0,
90009                 iconID: 'iD-icon-alert',
90010                 descriptionID: 'issues.warnings_and_errors'
90011             };
90012
90013             var resolvedItem = {
90014                 id: 'resolved',
90015                 count: 0,
90016                 iconID: 'iD-icon-apply',
90017                 descriptionID: 'issues.user_resolved_issues'
90018             };
90019
90020             function update(selection) {
90021
90022                 var shownItems = [];
90023
90024                 if (context.storage('validate-what') === 'all') {
90025
90026                     var liveIssues = context.validator().getIssues({
90027                         what: context.storage('validate-what') || 'edited',
90028                         where: context.storage('validate-where') || 'all'
90029                     });
90030                     if (liveIssues.length) {
90031                         warningsItem.count = liveIssues.length;
90032                         shownItems.push(warningsItem);
90033                     }
90034
90035                     var resolvedIssues = context.validator().getResolvedIssues();
90036                     if (resolvedIssues.length) {
90037                         resolvedItem.count = resolvedIssues.length;
90038                         shownItems.push(resolvedItem);
90039                     }
90040                 }
90041
90042                 var chips = selection.selectAll('.chip')
90043                     .data(shownItems, function(d) {
90044                         return d.id;
90045                     });
90046
90047                 chips.exit().remove();
90048
90049                 var enter = chips.enter()
90050                     .append('a')
90051                     .attr('class', function(d) {
90052                         return 'chip ' + d.id + '-count';
90053                     })
90054                     .attr('href', '#')
90055                     .attr('tabindex', -1)
90056                     .each(function(d) {
90057
90058                         var chipSelection = d3_select(this);
90059
90060                         var tooltipBehavior = tooltip()
90061                             .placement('top')
90062                             .title(t(d.descriptionID));
90063
90064                         chipSelection
90065                             .call(tooltipBehavior)
90066                             .on('click', function() {
90067                                 event.preventDefault();
90068
90069                                 tooltipBehavior.hide(d3_select(this));
90070                                 // open the Issues pane
90071                                 context.ui().togglePanes(d3_select('.map-panes .issues-pane'));
90072                             });
90073
90074                         chipSelection.call(svgIcon('#' + d.iconID));
90075
90076                     });
90077
90078                 enter.append('span')
90079                     .attr('class', 'count');
90080
90081                 enter.merge(chips)
90082                     .selectAll('span.count')
90083                     .text(function(d) {
90084                         return d.count.toString();
90085                     });
90086             }
90087
90088
90089             return function(selection) {
90090                 update(selection);
90091
90092                 context.validator().on('validated.infobox', function() {
90093                     update(selection);
90094                 });
90095             };
90096         }
90097
90098         function uiSettingsCustomData(context) {
90099             var dispatch$1 = dispatch('change');
90100
90101             function render(selection) {
90102                 var dataLayer = context.layers().layer('data');
90103
90104                 // keep separate copies of original and current settings
90105                 var _origSettings = {
90106                     fileList: (dataLayer && dataLayer.fileList()) || null,
90107                     url: context.storage('settings-custom-data-url')
90108                 };
90109                 var _currSettings = {
90110                     fileList: (dataLayer && dataLayer.fileList()) || null,
90111                     url: context.storage('settings-custom-data-url')
90112                 };
90113
90114                 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
90115                 var modal = uiConfirm(selection).okButton();
90116
90117                 modal
90118                     .classed('settings-modal settings-custom-data', true);
90119
90120                 modal.select('.modal-section.header')
90121                     .append('h3')
90122                     .text(t('settings.custom_data.header'));
90123
90124
90125                 var textSection = modal.select('.modal-section.message-text');
90126
90127                 textSection
90128                     .append('pre')
90129                     .attr('class', 'instructions-file')
90130                     .text(t('settings.custom_data.file.instructions'));
90131
90132                 textSection
90133                     .append('input')
90134                     .attr('class', 'field-file')
90135                     .attr('type', 'file')
90136                     .property('files', _currSettings.fileList)  // works for all except IE11
90137                     .on('change', function() {
90138                         var files = event.target.files;
90139                         if (files && files.length) {
90140                             _currSettings.url = '';
90141                             textSection.select('.field-url').property('value', '');
90142                             _currSettings.fileList = files;
90143                         } else {
90144                             _currSettings.fileList = null;
90145                         }
90146                     });
90147
90148                 textSection
90149                     .append('h4')
90150                     .text(t('settings.custom_data.or'));
90151
90152                 textSection
90153                     .append('pre')
90154                     .attr('class', 'instructions-url')
90155                     .text(t('settings.custom_data.url.instructions'));
90156
90157                 textSection
90158                     .append('textarea')
90159                     .attr('class', 'field-url')
90160                     .attr('placeholder', t('settings.custom_data.url.placeholder'))
90161                     .call(utilNoAuto)
90162                     .property('value', _currSettings.url);
90163
90164
90165                 // insert a cancel button
90166                 var buttonSection = modal.select('.modal-section.buttons');
90167
90168                 buttonSection
90169                     .insert('button', '.ok-button')
90170                     .attr('class', 'button cancel-button secondary-action')
90171                     .text(t('confirm.cancel'));
90172
90173
90174                 buttonSection.select('.cancel-button')
90175                     .on('click.cancel', clickCancel);
90176
90177                 buttonSection.select('.ok-button')
90178                     .attr('disabled', isSaveDisabled)
90179                     .on('click.save', clickSave);
90180
90181
90182                 function isSaveDisabled() {
90183                     return null;
90184                 }
90185
90186
90187                 // restore the original url
90188                 function clickCancel() {
90189                     textSection.select('.field-url').property('value', _origSettings.url);
90190                     context.storage('settings-custom-data-url', _origSettings.url);
90191                     this.blur();
90192                     modal.close();
90193                 }
90194
90195                 // accept the current url
90196                 function clickSave() {
90197                     _currSettings.url = textSection.select('.field-url').property('value').trim();
90198
90199                     // one or the other but not both
90200                     if (_currSettings.url) { _currSettings.fileList = null; }
90201                     if (_currSettings.fileList) { _currSettings.url = ''; }
90202
90203                     context.storage('settings-custom-data-url', _currSettings.url);
90204                     this.blur();
90205                     modal.close();
90206                     dispatch$1.call('change', this, _currSettings);
90207                 }
90208             }
90209
90210             return utilRebind(render, dispatch$1, 'on');
90211         }
90212
90213         function uiMapData(context) {
90214             var key = t('map_data.key');
90215             var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
90216             var features = context.features().keys();
90217             var layers = context.layers();
90218             var fills = ['wireframe', 'partial', 'full'];
90219
90220             var settingsCustomData = uiSettingsCustomData(context)
90221                 .on('change', customChanged);
90222
90223             var _pane = d3_select(null), _toggleButton = d3_select(null);
90224
90225             var _fillSelected = context.storage('area-fill') || 'partial';
90226             var _dataLayerContainer = d3_select(null);
90227             var _photoOverlayContainer = d3_select(null);
90228             var _fillList = d3_select(null);
90229             var _featureList = d3_select(null);
90230             var _visualDiffList = d3_select(null);
90231             var _QAList = d3_select(null);
90232
90233
90234             function showsFeature(d) {
90235                 return context.features().enabled(d);
90236             }
90237
90238
90239             function autoHiddenFeature(d) {
90240                 if (d.type === 'kr_error') return context.errors().autoHidden(d);
90241                 return context.features().autoHidden(d);
90242             }
90243
90244
90245             function clickFeature(d) {
90246                 context.features().toggle(d);
90247                 update();
90248             }
90249
90250
90251             function showsQA(d) {
90252                 var QAKeys = [d];
90253                 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
90254                 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
90255
90256                 function layerSupported(d) {
90257                     return d.layer && d.layer.supported();
90258                 }
90259                 function layerEnabled(d) {
90260                     return layerSupported(d) && d.layer.enabled();
90261                 }
90262
90263                 return layerEnabled(data[0]);
90264             }
90265
90266
90267             function showsFill(d) {
90268                 return _fillSelected === d;
90269             }
90270
90271
90272             function setFill(d) {
90273                 fills.forEach(function(opt) {
90274                     context.surface().classed('fill-' + opt, Boolean(opt === d));
90275                 });
90276
90277                 _fillSelected = d;
90278                 context.storage('area-fill', d);
90279                 if (d !== 'wireframe') {
90280                     context.storage('area-fill-toggle', d);
90281                 }
90282                 update();
90283             }
90284
90285
90286             function toggleHighlightEdited() {
90287                 event.preventDefault();
90288                 var surface = context.surface();
90289                 surface.classed('highlight-edited', !surface.classed('highlight-edited'));
90290                 updateVisualDiffList();
90291
90292                 context.map().pan([0,0]);  // trigger a redraw
90293             }
90294
90295
90296             function showsLayer(which) {
90297                 var layer = layers.layer(which);
90298                 if (layer) {
90299                     return layer.enabled();
90300                 }
90301                 return false;
90302             }
90303
90304
90305             function setLayer(which, enabled) {
90306                 // Don't allow layer changes while drawing - #6584
90307                 var mode = context.mode();
90308                 if (mode && /^draw/.test(mode.id)) return;
90309
90310                 var layer = layers.layer(which);
90311                 if (layer) {
90312                     layer.enabled(enabled);
90313
90314                     if (!enabled && (which === 'osm' || which === 'notes')) {
90315                         context.enter(modeBrowse(context));
90316                     }
90317
90318                     update();
90319                 }
90320             }
90321
90322
90323             function toggleLayer(which) {
90324                 setLayer(which, !showsLayer(which));
90325             }
90326
90327
90328             function drawPhotoItems(selection) {
90329                 var photoKeys = context.photos().overlayLayerIDs();
90330                 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
90331                 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
90332
90333                 function layerSupported(d) {
90334                     return d.layer && d.layer.supported();
90335                 }
90336                 function layerEnabled(d) {
90337                     return layerSupported(d) && d.layer.enabled();
90338                 }
90339
90340                 var ul = selection
90341                     .selectAll('.layer-list-photos')
90342                     .data([0]);
90343
90344                 ul = ul.enter()
90345                     .append('ul')
90346                     .attr('class', 'layer-list layer-list-photos')
90347                     .merge(ul);
90348
90349                 var li = ul.selectAll('.list-item-photos')
90350                     .data(data);
90351
90352                 li.exit()
90353                     .remove();
90354
90355                 var liEnter = li.enter()
90356                     .append('li')
90357                     .attr('class', function(d) {
90358                         var classes = 'list-item-photos list-item-' + d.id;
90359                         if (d.id === 'mapillary-signs' || d.id === 'mapillary-map-features') {
90360                             classes += ' indented';
90361                         }
90362                         return classes;
90363                     });
90364
90365                 var labelEnter = liEnter
90366                     .append('label')
90367                     .each(function(d) {
90368                         var titleID;
90369                         if (d.id === 'mapillary-signs') titleID = 'mapillary.signs.tooltip';
90370                         else if (d.id === 'mapillary') titleID = 'mapillary_images.tooltip';
90371                         else if (d.id === 'openstreetcam') titleID = 'openstreetcam_images.tooltip';
90372                         else titleID = d.id.replace(/-/g, '_') + '.tooltip';
90373                         d3_select(this)
90374                             .call(tooltip()
90375                                 .title(t(titleID))
90376                                 .placement('top')
90377                             );
90378                     });
90379
90380                 labelEnter
90381                     .append('input')
90382                     .attr('type', 'checkbox')
90383                     .on('change', function(d) { toggleLayer(d.id); });
90384
90385                 labelEnter
90386                     .append('span')
90387                     .text(function(d) {
90388                         var id = d.id;
90389                         if (id === 'mapillary-signs') id = 'photo_overlays.traffic_signs';
90390                         return t(id.replace(/-/g, '_') + '.title');
90391                     });
90392
90393                 labelEnter
90394                     .filter(function(d) { return d.id === 'mapillary-map-features'; })
90395                     .append('a')
90396                     .attr('class', 'request-data-link')
90397                     .attr('target', '_blank')
90398                     .attr('tabindex', -1)
90399                     .call(svgIcon('#iD-icon-out-link', 'inline'))
90400                     .attr('href', 'https://mapillary.github.io/mapillary_solutions/data-request')
90401                     .append('span')
90402                     .text(t('mapillary_map_features.request_data'));
90403
90404
90405                 // Update
90406                 li
90407                     .merge(liEnter)
90408                     .classed('active', layerEnabled)
90409                     .selectAll('input')
90410                     .property('checked', layerEnabled);
90411             }
90412
90413             function drawPhotoTypeItems(selection) {
90414                 var data = context.photos().allPhotoTypes();
90415
90416                 function typeEnabled(d) {
90417                     return context.photos().showsPhotoType(d);
90418                 }
90419
90420                 var ul = selection
90421                     .selectAll('.layer-list-photo-types')
90422                     .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
90423
90424                 ul.exit()
90425                     .remove();
90426
90427                 ul = ul.enter()
90428                     .append('ul')
90429                     .attr('class', 'layer-list layer-list-photo-types')
90430                     .merge(ul);
90431
90432                 var li = ul.selectAll('.list-item-photo-types')
90433                     .data(data);
90434
90435                 li.exit()
90436                     .remove();
90437
90438                 var liEnter = li.enter()
90439                     .append('li')
90440                     .attr('class', function(d) {
90441                         return 'list-item-photo-types list-item-' + d;
90442                     });
90443
90444                 var labelEnter = liEnter
90445                     .append('label')
90446                     .each(function(d) {
90447                         d3_select(this)
90448                             .call(tooltip()
90449                                 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
90450                                 .placement('top')
90451                             );
90452                     });
90453
90454                 labelEnter
90455                     .append('input')
90456                     .attr('type', 'checkbox')
90457                     .on('change', function(d) {
90458                         context.photos().togglePhotoType(d);
90459                         update();
90460                     });
90461
90462                 labelEnter
90463                     .append('span')
90464                     .text(function(d) {
90465                         return t('photo_overlays.photo_type.' + d + '.title');
90466                     });
90467
90468
90469                 // Update
90470                 li
90471                     .merge(liEnter)
90472                     .classed('active', typeEnabled)
90473                     .selectAll('input')
90474                     .property('checked', typeEnabled);
90475             }
90476
90477
90478             function drawOsmItems(selection) {
90479                 var osmKeys = ['osm', 'notes'];
90480                 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
90481
90482                 var ul = selection
90483                     .selectAll('.layer-list-osm')
90484                     .data([0]);
90485
90486                 ul = ul.enter()
90487                     .append('ul')
90488                     .attr('class', 'layer-list layer-list-osm')
90489                     .merge(ul);
90490
90491                 var li = ul.selectAll('.list-item')
90492                     .data(osmLayers);
90493
90494                 li.exit()
90495                     .remove();
90496
90497                 var liEnter = li.enter()
90498                     .append('li')
90499                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
90500
90501                 var labelEnter = liEnter
90502                     .append('label')
90503                     .each(function(d) {
90504                         if (d.id === 'osm') {
90505                             d3_select(this)
90506                                 .call(tooltip()
90507                                     .html(true)
90508                                     .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
90509                                     .placement('bottom')
90510                                 );
90511                         } else {
90512                             d3_select(this)
90513                                 .call(tooltip()
90514                                     .title(t('map_data.layers.' + d.id + '.tooltip'))
90515                                     .placement('bottom')
90516                                 );
90517                         }
90518                     });
90519
90520                 labelEnter
90521                     .append('input')
90522                     .attr('type', 'checkbox')
90523                     .on('change', function(d) { toggleLayer(d.id); });
90524
90525                 labelEnter
90526                     .append('span')
90527                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
90528
90529
90530                 // Update
90531                 li
90532                     .merge(liEnter)
90533                     .classed('active', function (d) { return d.layer.enabled(); })
90534                     .selectAll('input')
90535                     .property('checked', function (d) { return d.layer.enabled(); });
90536             }
90537
90538
90539             function drawQAItems(selection) {
90540                 var qaKeys = ['keepRight', 'improveOSM'];
90541                 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
90542
90543                 var ul = selection
90544                     .selectAll('.layer-list-qa')
90545                     .data([0]);
90546
90547                 ul = ul.enter()
90548                     .append('ul')
90549                     .attr('class', 'layer-list layer-list-qa')
90550                     .merge(ul);
90551
90552                 var li = ul.selectAll('.list-item')
90553                     .data(qaLayers);
90554
90555                 li.exit()
90556                     .remove();
90557
90558                 var liEnter = li.enter()
90559                     .append('li')
90560                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
90561
90562                 var labelEnter = liEnter
90563                     .append('label')
90564                     .each(function(d) {
90565                         d3_select(this)
90566                             .call(tooltip()
90567                                 .title(t('map_data.layers.' + d.id + '.tooltip'))
90568                                 .placement('bottom')
90569                             );
90570                     });
90571
90572                 labelEnter
90573                     .append('input')
90574                     .attr('type', 'checkbox')
90575                     .on('change', function(d) { toggleLayer(d.id); });
90576
90577                 labelEnter
90578                     .append('span')
90579                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
90580
90581
90582                 // Update
90583                 li
90584                     .merge(liEnter)
90585                     .classed('active', function (d) { return d.layer.enabled(); })
90586                     .selectAll('input')
90587                     .property('checked', function (d) { return d.layer.enabled(); });
90588             }
90589
90590
90591             // Beta feature - sample vector layers to support Detroit Mapping Challenge
90592             // https://github.com/osmus/detroit-mapping-challenge
90593             function drawVectorItems(selection) {
90594                 var dataLayer = layers.layer('data');
90595                 var vtData = [
90596                     {
90597                         name: 'Detroit Neighborhoods/Parks',
90598                         src: 'neighborhoods-parks',
90599                         tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
90600                         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'
90601                     }, {
90602                         name: 'Detroit Composite POIs',
90603                         src: 'composite-poi',
90604                         tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
90605                         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'
90606                     }, {
90607                         name: 'Detroit All-The-Places POIs',
90608                         src: 'alltheplaces-poi',
90609                         tooltip: 'Public domain business location data created by web scrapers.',
90610                         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'
90611                     }
90612                 ];
90613
90614                 // Only show this if the map is around Detroit..
90615                 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
90616                 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
90617
90618                 var container = selection.selectAll('.vectortile-container')
90619                     .data(showVectorItems ? [0] : []);
90620
90621                 container.exit()
90622                     .remove();
90623
90624                 var containerEnter = container.enter()
90625                     .append('div')
90626                     .attr('class', 'vectortile-container');
90627
90628                 containerEnter
90629                     .append('h4')
90630                     .attr('class', 'vectortile-header')
90631                     .text('Detroit Vector Tiles (Beta)');
90632
90633                 containerEnter
90634                     .append('ul')
90635                     .attr('class', 'layer-list layer-list-vectortile');
90636
90637                 containerEnter
90638                     .append('div')
90639                     .attr('class', 'vectortile-footer')
90640                     .append('a')
90641                     .attr('target', '_blank')
90642                     .attr('tabindex', -1)
90643                     .call(svgIcon('#iD-icon-out-link', 'inline'))
90644                     .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
90645                     .append('span')
90646                     .text('About these layers');
90647
90648                 container = container
90649                     .merge(containerEnter);
90650
90651
90652                 var ul = container.selectAll('.layer-list-vectortile');
90653
90654                 var li = ul.selectAll('.list-item')
90655                     .data(vtData);
90656
90657                 li.exit()
90658                     .remove();
90659
90660                 var liEnter = li.enter()
90661                     .append('li')
90662                     .attr('class', function(d) { return 'list-item list-item-' + d.src; });
90663
90664                 var labelEnter = liEnter
90665                     .append('label')
90666                     .each(function(d) {
90667                         d3_select(this).call(
90668                             tooltip().title(d.tooltip).placement('top')
90669                         );
90670                     });
90671
90672                 labelEnter
90673                     .append('input')
90674                     .attr('type', 'radio')
90675                     .attr('name', 'vectortile')
90676                     .on('change', selectVTLayer);
90677
90678                 labelEnter
90679                     .append('span')
90680                     .text(function(d) { return d.name; });
90681
90682                 // Update
90683                 li
90684                     .merge(liEnter)
90685                     .classed('active', isVTLayerSelected)
90686                     .selectAll('input')
90687                     .property('checked', isVTLayerSelected);
90688
90689
90690                 function isVTLayerSelected(d) {
90691                     return dataLayer && dataLayer.template() === d.template;
90692                 }
90693
90694                 function selectVTLayer(d) {
90695                     context.storage('settings-custom-data-url', d.template);
90696                     if (dataLayer) {
90697                         dataLayer.template(d.template, d.src);
90698                         dataLayer.enabled(true);
90699                     }
90700                 }
90701             }
90702
90703
90704             function drawCustomDataItems(selection) {
90705                 var dataLayer = layers.layer('data');
90706                 var hasData = dataLayer && dataLayer.hasData();
90707                 var showsData = hasData && dataLayer.enabled();
90708
90709                 var ul = selection
90710                     .selectAll('.layer-list-data')
90711                     .data(dataLayer ? [0] : []);
90712
90713                 // Exit
90714                 ul.exit()
90715                     .remove();
90716
90717                 // Enter
90718                 var ulEnter = ul.enter()
90719                     .append('ul')
90720                     .attr('class', 'layer-list layer-list-data');
90721
90722                 var liEnter = ulEnter
90723                     .append('li')
90724                     .attr('class', 'list-item-data');
90725
90726                 var labelEnter = liEnter
90727                     .append('label')
90728                     .call(tooltip()
90729                         .title(t('map_data.layers.custom.tooltip'))
90730                         .placement('top')
90731                     );
90732
90733                 labelEnter
90734                     .append('input')
90735                     .attr('type', 'checkbox')
90736                     .on('change', function() { toggleLayer('data'); });
90737
90738                 labelEnter
90739                     .append('span')
90740                     .text(t('map_data.layers.custom.title'));
90741
90742                 liEnter
90743                     .append('button')
90744                     .call(tooltip()
90745                         .title(t('settings.custom_data.tooltip'))
90746                         .placement((textDirection === 'rtl') ? 'right' : 'left')
90747                     )
90748                     .on('click', editCustom)
90749                     .call(svgIcon('#iD-icon-more'));
90750
90751                 liEnter
90752                     .append('button')
90753                     .call(tooltip()
90754                         .title(t('map_data.layers.custom.zoom'))
90755                         .placement((textDirection === 'rtl') ? 'right' : 'left')
90756                     )
90757                     .on('click', function() {
90758                         event.preventDefault();
90759                         event.stopPropagation();
90760                         dataLayer.fitZoom();
90761                     })
90762                     .call(svgIcon('#iD-icon-search'));
90763
90764                 // Update
90765                 ul = ul
90766                     .merge(ulEnter);
90767
90768                 ul.selectAll('.list-item-data')
90769                     .classed('active', showsData)
90770                     .selectAll('label')
90771                     .classed('deemphasize', !hasData)
90772                     .selectAll('input')
90773                     .property('disabled', !hasData)
90774                     .property('checked', showsData);
90775             }
90776
90777
90778             function editCustom() {
90779                 event.preventDefault();
90780                 context.container()
90781                     .call(settingsCustomData);
90782             }
90783
90784
90785             function customChanged(d) {
90786                 var dataLayer = layers.layer('data');
90787
90788                 if (d && d.url) {
90789                     dataLayer.url(d.url);
90790                 } else if (d && d.fileList) {
90791                     dataLayer.fileList(d.fileList);
90792                 }
90793             }
90794
90795
90796             function drawListItems(selection, data, type, name, change, active) {
90797                 var items = selection.selectAll('li')
90798                     .data(data);
90799
90800                 // Exit
90801                 items.exit()
90802                     .remove();
90803
90804                 // Enter
90805                 var enter = items.enter()
90806                     .append('li')
90807                     .call(tooltip()
90808                         .html(true)
90809                         .title(function(d) {
90810                             var tip = t(name + '.' + d + '.tooltip');
90811                             var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
90812                             if (d === 'highlight_edits') key = t('map_data.highlight_edits.key');
90813
90814                             if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
90815                                 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
90816                                 tip += '<div>' + msg + '</div>';
90817                             }
90818                             return uiTooltipHtml(tip, key);
90819                         })
90820                         .placement('top')
90821                     );
90822
90823                 var label = enter
90824                     .append('label');
90825
90826                 label
90827                     .append('input')
90828                     .attr('type', type)
90829                     .attr('name', name)
90830                     .on('change', change);
90831
90832                 label
90833                     .append('span')
90834                     .text(function(d) { return t(name + '.' + d + '.description'); });
90835
90836                 // Update
90837                 items = items
90838                     .merge(enter);
90839
90840                 items
90841                     .classed('active', active)
90842                     .selectAll('input')
90843                     .property('checked', active)
90844                     .property('indeterminate', function(d) {
90845                         return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
90846                     });
90847             }
90848
90849
90850             function renderDataLayers(selection) {
90851                 var container = selection.selectAll('.data-layer-container')
90852                     .data([0]);
90853
90854                 _dataLayerContainer = container.enter()
90855                     .append('div')
90856                     .attr('class', 'data-layer-container')
90857                     .merge(container);
90858
90859                 updateDataLayers();
90860             }
90861
90862             function renderPhotoOverlays(selection) {
90863                 var container = selection.selectAll('.photo-overlay-container')
90864                     .data([0]);
90865
90866                 _photoOverlayContainer = container.enter()
90867                     .append('div')
90868                     .attr('class', 'photo-overlay-container')
90869                     .merge(container);
90870
90871                 updatePhotoOverlays();
90872             }
90873
90874
90875             function renderStyleOptions(selection) {
90876                 var container = selection.selectAll('.layer-fill-list')
90877                     .data([0]);
90878
90879                 _fillList = container.enter()
90880                     .append('ul')
90881                     .attr('class', 'layer-list layer-fill-list')
90882                     .merge(container);
90883
90884                 updateFillList();
90885
90886                 var container2 = selection.selectAll('.layer-visual-diff-list')
90887                     .data([0]);
90888
90889                 _visualDiffList = container2.enter()
90890                     .append('ul')
90891                     .attr('class', 'layer-list layer-visual-diff-list')
90892                     .merge(container2);
90893
90894                 updateVisualDiffList();
90895             }
90896
90897
90898             function renderFeatureList(selection) {
90899                 var container = selection.selectAll('.layer-feature-list-container')
90900                     .data([0]);
90901
90902                 var containerEnter = container.enter()
90903                     .append('div')
90904                     .attr('class', 'layer-feature-list-container');
90905
90906                 containerEnter
90907                     .append('ul')
90908                     .attr('class', 'layer-list layer-feature-list');
90909
90910                 var footer = containerEnter
90911                     .append('div')
90912                     .attr('class', 'feature-list-links section-footer');
90913
90914                 footer
90915                     .append('a')
90916                     .attr('class', 'feature-list-link')
90917                     .attr('href', '#')
90918                     .text(t('issues.enable_all'))
90919                     .on('click', function() {
90920                         context.features().enableAll();
90921                     });
90922
90923                 footer
90924                     .append('a')
90925                     .attr('class', 'feature-list-link')
90926                     .attr('href', '#')
90927                     .text(t('issues.disable_all'))
90928                     .on('click', function() {
90929                         context.features().disableAll();
90930                     });
90931
90932                 // Update
90933                 container = container
90934                     .merge(containerEnter);
90935
90936                 _featureList = container.selectAll('.layer-feature-list');
90937
90938                 updateFeatureList();
90939             }
90940
90941             function updatePhotoOverlays() {
90942                 _photoOverlayContainer
90943                     .call(drawPhotoItems)
90944                     .call(drawPhotoTypeItems);
90945             }
90946
90947             function updateDataLayers() {
90948                 _dataLayerContainer
90949                     .call(drawOsmItems)
90950                     .call(drawQAItems)
90951                     .call(drawCustomDataItems)
90952                     .call(drawVectorItems);      // Beta - Detroit mapping challenge
90953             }
90954
90955             function updateFillList() {
90956                 _fillList
90957                     .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
90958             }
90959
90960             function updateVisualDiffList() {
90961                 _visualDiffList
90962                     .call(drawListItems, ['highlight_edits'], 'checkbox', 'visual_diff', toggleHighlightEdited, function() {
90963                         return context.surface().classed('highlight-edited');
90964                     });
90965             }
90966
90967             function updateFeatureList() {
90968                 _featureList
90969                     .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
90970             }
90971
90972             function update() {
90973
90974                 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
90975                     updateDataLayers();
90976                 }
90977                 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
90978                     updatePhotoOverlays();
90979                 }
90980                 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
90981                     updateFillList();
90982                 }
90983                 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
90984                     updateFeatureList();
90985                 }
90986
90987                 _QAList
90988                     .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
90989             }
90990
90991
90992             function toggleWireframe() {
90993                 if (event) {
90994                     event.preventDefault();
90995                     event.stopPropagation();
90996                 }
90997
90998                 if (_fillSelected === 'wireframe') {
90999                     _fillSelected = context.storage('area-fill-toggle') || 'partial';
91000                 } else {
91001                     _fillSelected = 'wireframe';
91002                 }
91003
91004                 setFill(_fillSelected);
91005                 context.map().pan([0,0]);  // trigger a redraw
91006             }
91007
91008             var paneTooltip = tooltip()
91009                 .placement((textDirection === 'rtl') ? 'right' : 'left')
91010                 .html(true)
91011                 .title(uiTooltipHtml(t('map_data.description'), key));
91012
91013             function hidePane() {
91014                 context.ui().togglePanes();
91015             }
91016
91017             uiMapData.togglePane = function() {
91018                 if (event) event.preventDefault();
91019                 paneTooltip.hide(_toggleButton);
91020                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
91021             };
91022
91023             uiMapData.renderToggleButton = function(selection) {
91024
91025                 _toggleButton = selection
91026                     .append('button')
91027                     .on('click', uiMapData.togglePane)
91028                     .call(svgIcon('#iD-icon-data', 'light'))
91029                     .call(paneTooltip);
91030             };
91031
91032
91033             uiMapData.renderPane = function(selection) {
91034
91035                 _pane = selection
91036                     .append('div')
91037                     .attr('class', 'fillL map-pane map-data-pane hide')
91038                     .attr('pane', 'map-data');
91039
91040                 var heading = _pane
91041                     .append('div')
91042                     .attr('class', 'pane-heading');
91043
91044                 heading
91045                     .append('h2')
91046                     .text(t('map_data.title'));
91047
91048                 heading
91049                     .append('button')
91050                     .on('click', hidePane)
91051                     .call(svgIcon('#iD-icon-close'));
91052
91053
91054                 var content = _pane
91055                     .append('div')
91056                     .attr('class', 'pane-content');
91057
91058
91059                 // data layers
91060                 content
91061                     .append('div')
91062                     .attr('class', 'map-data-data-layers')
91063                     .call(uiDisclosure(context, 'data_layers', true)
91064                         .title(t('map_data.data_layers'))
91065                         .content(renderDataLayers)
91066                     );
91067
91068                 // photo overlays
91069                 content
91070                     .append('div')
91071                     .attr('class', 'map-data-photo-overlays')
91072                     .call(uiDisclosure(context, 'photo_overlays', false)
91073                         .title(t('photo_overlays.title'))
91074                         .content(renderPhotoOverlays)
91075                     );
91076
91077                 // area fills
91078                 content
91079                     .append('div')
91080                     .attr('class', 'map-data-area-fills')
91081                     .call(uiDisclosure(context, 'fill_area', false)
91082                         .title(t('map_data.style_options'))
91083                         .content(renderStyleOptions)
91084                     );
91085
91086                 // feature filters
91087                 content
91088                     .append('div')
91089                     .attr('class', 'map-data-feature-filters')
91090                     .call(uiDisclosure(context, 'map_features', false)
91091                         .title(t('map_data.map_features'))
91092                         .content(renderFeatureList)
91093                     );
91094
91095
91096                 // add listeners
91097                 context.features()
91098                     .on('change.map_data-update', update);
91099
91100                 update();
91101                 setFill(_fillSelected);
91102
91103                 context.keybinding()
91104                     .on(key, uiMapData.togglePane)
91105                     .on(t('area_fill.wireframe.key'), toggleWireframe)
91106                     .on(osmDataToggleKey, function() {
91107                         event.preventDefault();
91108                         event.stopPropagation();
91109                         toggleLayer('osm');
91110                     })
91111                     .on(t('map_data.highlight_edits.key'), toggleHighlightEdited);
91112             };
91113
91114             return uiMapData;
91115         }
91116
91117         function uiNotice(context) {
91118
91119             return function(selection) {
91120                 var div = selection
91121                     .append('div')
91122                     .attr('class', 'notice');
91123
91124                 var button = div
91125                     .append('button')
91126                     .attr('class', 'zoom-to notice fillD')
91127                     .on('click', function() {
91128                         context.map().zoomEase(context.minEditableZoom());
91129                     })
91130                     .on('wheel', function() {   // let wheel events pass through #4482
91131                         var e2 = new WheelEvent(event.type, event);
91132                         context.surface().node().dispatchEvent(e2);
91133                     });
91134
91135                 button
91136                     .call(svgIcon('#iD-icon-plus', 'pre-text'))
91137                     .append('span')
91138                     .attr('class', 'label')
91139                     .text(t('zoom_in_edit'));
91140
91141
91142                 function disableTooHigh() {
91143                     var canEdit = context.map().zoom() >= context.minEditableZoom();
91144                     div.style('display', canEdit ? 'none' : 'block');
91145                 }
91146
91147                 context.map()
91148                     .on('move.notice', debounce(disableTooHigh, 500));
91149
91150                 disableTooHigh();
91151             };
91152         }
91153
91154         function uiPhotoviewer(context) {
91155
91156             var dispatch$1 = dispatch('resize');
91157
91158             function photoviewer(selection) {
91159                 selection
91160                     .append('button')
91161                     .attr('class', 'thumb-hide')
91162                     .on('click', function () {
91163                         if (services$1.streetside) { services$1.streetside.hideViewer(); }
91164                         if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
91165                         if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
91166                     })
91167                     .append('div')
91168                     .call(svgIcon('#iD-icon-close'));
91169
91170                 selection
91171                     .append('button')
91172                     .attr('class', 'resize-handle-xy')
91173                     .on(
91174                         'mousedown',
91175                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
91176                     );
91177
91178                 selection
91179                     .append('button')
91180                     .attr('class', 'resize-handle-x')
91181                     .on(
91182                         'mousedown',
91183                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
91184                     );
91185
91186                 selection
91187                     .append('button')
91188                     .attr('class', 'resize-handle-y')
91189                     .on(
91190                         'mousedown',
91191                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
91192                     );
91193
91194                 services$1.streetside.loadViewer(context);
91195                 services$1.mapillary.loadViewer(context);
91196                 services$1.openstreetcam.loadViewer(context);
91197
91198                 function buildResizeListener(target, eventName, dispatch, options) {
91199                     var resizeOnX = !!options.resizeOnX;
91200                     var resizeOnY = !!options.resizeOnY;
91201                     var minHeight = options.minHeight || 240;
91202                     var minWidth = options.minWidth || 320;
91203                     var startX;
91204                     var startY;
91205                     var startWidth;
91206                     var startHeight;
91207
91208                     function startResize() {
91209                         var mapSize = context.map().dimensions();
91210
91211                         if (resizeOnX) {
91212                             var maxWidth = mapSize[0];
91213                             var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
91214                             target.style('width', newWidth + 'px');
91215                         }
91216
91217                         if (resizeOnY) {
91218                             var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
91219                             var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
91220                             target.style('height', newHeight + 'px');
91221                         }
91222
91223                         dispatch.call(eventName, target, utilGetDimensions(target, true));
91224                     }
91225
91226                     function clamp(num, min, max) {
91227                         return Math.max(min, Math.min(num, max));
91228                     }
91229
91230                     function stopResize() {
91231                         d3_select(window)
91232                             .on('.' + eventName, null);
91233                     }
91234
91235                     return function initResize() {
91236                         startX = event.clientX;
91237                         startY = event.clientY;
91238                         startWidth = target.node().getBoundingClientRect().width;
91239                         startHeight = target.node().getBoundingClientRect().height;
91240
91241                         d3_select(window)
91242                             .on('mousemove.' + eventName, startResize, false)
91243                             .on('mouseup.' + eventName, stopResize, false);
91244                     };
91245                 }
91246             }
91247
91248             photoviewer.onMapResize = function() {
91249                 var photoviewer = d3_select('#photoviewer');
91250                 var content = d3_select('#content');
91251                 var mapDimensions = utilGetDimensions(content, true);
91252                 // shrink photo viewer if it is too big
91253                 // (-90 preserves space at top and bottom of map used by menus)
91254                 var photoDimensions = utilGetDimensions(photoviewer, true);
91255                 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
91256                     var setPhotoDimensions = [
91257                         Math.min(photoDimensions[0], mapDimensions[0]),
91258                         Math.min(photoDimensions[1], mapDimensions[1] - 90),
91259                     ];
91260
91261                     photoviewer
91262                         .style('width', setPhotoDimensions[0] + 'px')
91263                         .style('height', setPhotoDimensions[1] + 'px');
91264
91265                     dispatch$1.call('resize', photoviewer, setPhotoDimensions);
91266                 }
91267             };
91268
91269             return utilRebind(photoviewer, dispatch$1, 'on');
91270         }
91271
91272         function uiRestore(context) {
91273
91274             return function(selection) {
91275                 if (!context.history().lock() || !context.history().restorableChanges())
91276                     return;
91277
91278                 var modalSelection = uiModal(selection, true);
91279
91280                 modalSelection.select('.modal')
91281                     .attr('class', 'modal fillL');
91282
91283                 var introModal = modalSelection.select('.content');
91284
91285                 introModal
91286                     .append('div')
91287                     .attr('class', 'modal-section')
91288                     .append('h3')
91289                     .text(t('restore.heading'));
91290
91291                 introModal
91292                     .append('div')
91293                     .attr('class','modal-section')
91294                     .append('p')
91295                     .text(t('restore.description'));
91296
91297                 var buttonWrap = introModal
91298                     .append('div')
91299                     .attr('class', 'modal-actions');
91300
91301                 var restore = buttonWrap
91302                     .append('button')
91303                     .attr('class', 'restore')
91304                     .on('click', function() {
91305                         context.history().restore();
91306                         modalSelection.remove();
91307                     });
91308
91309                 restore
91310                     .append('svg')
91311                     .attr('class', 'logo logo-restore')
91312                     .append('use')
91313                     .attr('xlink:href', '#iD-logo-restore');
91314
91315                 restore
91316                     .append('div')
91317                     .text(t('restore.restore'));
91318
91319                 var reset = buttonWrap
91320                     .append('button')
91321                     .attr('class', 'reset')
91322                     .on('click', function() {
91323                         context.history().clearSaved();
91324                         modalSelection.remove();
91325                     });
91326
91327                 reset
91328                     .append('svg')
91329                     .attr('class', 'logo logo-reset')
91330                     .append('use')
91331                     .attr('xlink:href', '#iD-logo-reset');
91332
91333                 reset
91334                     .append('div')
91335                     .text(t('restore.reset'));
91336
91337                 restore.node().focus();
91338             };
91339         }
91340
91341         function uiScale(context) {
91342             var projection = context.projection,
91343                 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
91344                 maxLength = 180,
91345                 tickHeight = 8;
91346
91347
91348             function scaleDefs(loc1, loc2) {
91349                 var lat = (loc2[1] + loc1[1]) / 2,
91350                     conversion = (isImperial ? 3.28084 : 1),
91351                     dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
91352                     scale = { dist: 0, px: 0, text: '' },
91353                     buckets, i, val, dLon;
91354
91355                 if (isImperial) {
91356                     buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
91357                 } else {
91358                     buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
91359                 }
91360
91361                 // determine a user-friendly endpoint for the scale
91362                 for (i = 0; i < buckets.length; i++) {
91363                     val = buckets[i];
91364                     if (dist >= val) {
91365                         scale.dist = Math.floor(dist / val) * val;
91366                         break;
91367                     } else {
91368                         scale.dist = +dist.toFixed(2);
91369                     }
91370                 }
91371
91372                 dLon = geoMetersToLon(scale.dist / conversion, lat);
91373                 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
91374
91375                 scale.text = displayLength(scale.dist / conversion, isImperial);
91376
91377                 return scale;
91378             }
91379
91380
91381             function update(selection) {
91382                 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
91383                 var dims = context.map().dimensions(),
91384                     loc1 = projection.invert([0, dims[1]]),
91385                     loc2 = projection.invert([maxLength, dims[1]]),
91386                     scale = scaleDefs(loc1, loc2);
91387
91388                 selection.select('#scale-path')
91389                     .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
91390
91391                 selection.select('#scale-textgroup')
91392                     .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
91393
91394                 selection.select('#scale-text')
91395                     .text(scale.text);
91396             }
91397
91398
91399             return function(selection) {
91400                 function switchUnits() {
91401                     isImperial = !isImperial;
91402                     selection.call(update);
91403                 }
91404
91405                 var scalegroup = selection.append('svg')
91406                     .attr('id', 'scale')
91407                     .on('click', switchUnits)
91408                     .append('g')
91409                     .attr('transform', 'translate(10,11)');
91410
91411                 scalegroup
91412                     .append('path')
91413                     .attr('id', 'scale-path');
91414
91415                 scalegroup
91416                     .append('g')
91417                     .attr('id', 'scale-textgroup')
91418                     .append('text')
91419                     .attr('id', 'scale-text');
91420
91421                 selection.call(update);
91422
91423                 context.map().on('move.scale', function() {
91424                     update(selection);
91425                 });
91426             };
91427         }
91428
91429         var pair_1 = pair$1;
91430
91431
91432         function search(input, dims) {
91433           if (!dims) dims = 'NSEW';
91434           if (typeof input !== 'string') return null;
91435
91436           input = input.toUpperCase();
91437           var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
91438
91439           var m = input.match(regex);
91440           if (!m) return null;  // no match
91441
91442           var matched = m[0];
91443
91444           // extract dimension.. m[1] = leading, m[5] = trailing
91445           var dim;
91446           if (m[1] && m[5]) {                 // if matched both..
91447             dim = m[1];                       // keep leading
91448             matched = matched.slice(0, -1);   // remove trailing dimension from match
91449           } else {
91450             dim = m[1] || m[5];
91451           }
91452
91453           // if unrecognized dimension
91454           if (dim && dims.indexOf(dim) === -1) return null;
91455
91456           // extract DMS
91457           var deg = m[2] ? parseFloat(m[2]) : 0;
91458           var min = m[3] ? parseFloat(m[3]) / 60 : 0;
91459           var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
91460           var sign = (deg < 0) ? -1 : 1;
91461           if (dim === 'S' || dim === 'W') sign *= -1;
91462
91463           return {
91464             val: (Math.abs(deg) + min + sec) * sign,
91465             dim: dim,
91466             matched: matched,
91467             remain: input.slice(matched.length)
91468           };
91469         }
91470
91471
91472         function pair$1(input, dims) {
91473           input = input.trim();
91474           var one = search(input, dims);
91475           if (!one) return null;
91476
91477           input = one.remain.trim();
91478           var two = search(input, dims);
91479           if (!two || two.remain) return null;
91480
91481           if (one.dim) {
91482             return swapdim(one.val, two.val, one.dim);
91483           } else {
91484             return [one.val, two.val];
91485           }
91486         }
91487
91488
91489         function swapdim(a, b, dim) {
91490           if (dim === 'N' || dim === 'S') return [a, b];
91491           if (dim === 'W' || dim === 'E') return [b, a];
91492         }
91493
91494         function uiFeatureList(context) {
91495             var _geocodeResults;
91496
91497
91498             function featureList(selection) {
91499                 var header = selection
91500                     .append('div')
91501                     .attr('class', 'header fillL cf');
91502
91503                 header
91504                     .append('h3')
91505                     .text(t('inspector.feature_list'));
91506
91507                 var searchWrap = selection
91508                     .append('div')
91509                     .attr('class', 'search-header');
91510
91511                 var search = searchWrap
91512                     .append('input')
91513                     .attr('placeholder', t('inspector.search'))
91514                     .attr('type', 'search')
91515                     .call(utilNoAuto)
91516                     .on('keypress', keypress)
91517                     .on('keydown', keydown)
91518                     .on('input', inputevent);
91519
91520                 searchWrap
91521                     .call(svgIcon('#iD-icon-search', 'pre-text'));
91522
91523                 var listWrap = selection
91524                     .append('div')
91525                     .attr('class', 'inspector-body');
91526
91527                 var list = listWrap
91528                     .append('div')
91529                     .attr('class', 'feature-list cf');
91530
91531                 context
91532                     .on('exit.feature-list', clearSearch);
91533                 context.map()
91534                     .on('drawn.feature-list', mapDrawn);
91535
91536                 context.keybinding()
91537                     .on(uiCmd('⌘F'), focusSearch);
91538
91539
91540                 function focusSearch() {
91541                     var mode = context.mode() && context.mode().id;
91542                     if (mode !== 'browse') return;
91543
91544                     event.preventDefault();
91545                     search.node().focus();
91546                 }
91547
91548
91549                 function keydown() {
91550                     if (event.keyCode === 27) {  // escape
91551                         search.node().blur();
91552                     }
91553                 }
91554
91555
91556                 function keypress() {
91557                     var q = search.property('value'),
91558                         items = list.selectAll('.feature-list-item');
91559                     if (event.keyCode === 13 && q.length && items.size()) {  // return
91560                         click(items.datum());
91561                     }
91562                 }
91563
91564
91565                 function inputevent() {
91566                     _geocodeResults = undefined;
91567                     drawList();
91568                 }
91569
91570
91571                 function clearSearch() {
91572                     search.property('value', '');
91573                     drawList();
91574                 }
91575
91576
91577                 function mapDrawn(e) {
91578                     if (e.full) {
91579                         drawList();
91580                     }
91581                 }
91582
91583
91584                 function features() {
91585                     var entities = {};
91586                     var result = [];
91587                     var graph = context.graph();
91588                     var q = search.property('value').toLowerCase();
91589
91590                     if (!q) return result;
91591
91592                     var idMatch = q.match(/^([nwr])([0-9]+)$/);
91593
91594                     if (idMatch) {
91595                         result.push({
91596                             id: idMatch[0],
91597                             geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
91598                             type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
91599                             name: idMatch[2]
91600                         });
91601                     }
91602
91603                     var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
91604
91605                     if (locationMatch) {
91606                         var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
91607                         result.push({
91608                             id: -1,
91609                             geometry: 'point',
91610                             type: t('inspector.location'),
91611                             name: dmsCoordinatePair([loc[1], loc[0]]),
91612                             location: loc
91613                         });
91614                     }
91615
91616                     function addEntity(entity) {
91617                         if (entity.id in entities || result.length > 200)
91618                             return;
91619
91620                         entities[entity.id] = true;
91621
91622                         var name = utilDisplayName(entity) || '';
91623                         if (name.toLowerCase().indexOf(q) >= 0) {
91624                             var matched = context.presets().match(entity, graph);
91625                             var type = (matched && matched.name()) || utilDisplayType(entity.id);
91626
91627                             result.push({
91628                                 id: entity.id,
91629                                 entity: entity,
91630                                 geometry: context.geometry(entity.id),
91631                                 type: type,
91632                                 name: name
91633                             });
91634                         }
91635
91636                         graph.parentRelations(entity).forEach(function(parent) {
91637                             addEntity(parent);
91638                         });
91639                     }
91640
91641                     var visible = context.surface().selectAll('.point, .line, .area').nodes();
91642                     for (var i = 0; i < visible.length && result.length <= 200; i++) {
91643                         var datum = visible[i].__data__;
91644                         var entity = datum && datum.properties && datum.properties.entity;
91645                         if (entity) { addEntity(entity); }
91646                     }
91647
91648                     (_geocodeResults || []).forEach(function(d) {
91649                         if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
91650
91651                             // Make a temporary osmEntity so we can preset match
91652                             // and better localize the search result - #4725
91653                             var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
91654                             var tags = {};
91655                             tags[d.class] = d.type;
91656
91657                             var attrs = { id: id, type: d.osm_type, tags: tags };
91658                             if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
91659                                 attrs.nodes = ['a','a'];  // so that geometry area is possible
91660                             }
91661
91662                             var tempEntity = osmEntity(attrs);
91663                             var tempGraph = coreGraph([tempEntity]);
91664                             var matched = context.presets().match(tempEntity, tempGraph);
91665                             var type = (matched && matched.name()) || utilDisplayType(id);
91666
91667                             result.push({
91668                                 id: tempEntity.id,
91669                                 geometry: tempEntity.geometry(tempGraph),
91670                                 type: type,
91671                                 name: d.display_name,
91672                                 extent: new geoExtent(
91673                                     [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
91674                                     [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
91675                             });
91676                         }
91677                     });
91678
91679                     return result;
91680                 }
91681
91682
91683                 function drawList() {
91684                     var value = search.property('value');
91685                     var results = features();
91686
91687                     list.classed('filtered', value.length);
91688
91689                     var noResultsWorldwide = _geocodeResults && _geocodeResults.length === 0;
91690
91691                     var resultsIndicator = list.selectAll('.no-results-item')
91692                         .data([0])
91693                         .enter()
91694                         .append('button')
91695                         .property('disabled', true)
91696                         .attr('class', 'no-results-item')
91697                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
91698
91699                     resultsIndicator.append('span')
91700                         .attr('class', 'entity-name');
91701
91702                     list.selectAll('.no-results-item .entity-name')
91703                         .text(noResultsWorldwide ? t('geocoder.no_results_worldwide') : t('geocoder.no_results_visible'));
91704
91705                     if (services$1.geocoder) {
91706                       list.selectAll('.geocode-item')
91707                           .data([0])
91708                           .enter()
91709                           .append('button')
91710                           .attr('class', 'geocode-item')
91711                           .on('click', geocoderSearch)
91712                           .append('div')
91713                           .attr('class', 'label')
91714                           .append('span')
91715                           .attr('class', 'entity-name')
91716                           .text(t('geocoder.search'));
91717                     }
91718
91719                     list.selectAll('.no-results-item')
91720                         .style('display', (value.length && !results.length) ? 'block' : 'none');
91721
91722                     list.selectAll('.geocode-item')
91723                         .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
91724
91725                     list.selectAll('.feature-list-item')
91726                         .data([-1])
91727                         .remove();
91728
91729                     var items = list.selectAll('.feature-list-item')
91730                         .data(results, function(d) { return d.id; });
91731
91732                     var enter = items.enter()
91733                         .insert('button', '.geocode-item')
91734                         .attr('class', 'feature-list-item')
91735                         .on('mouseover', mouseover)
91736                         .on('mouseout', mouseout)
91737                         .on('click', click);
91738
91739                     var label = enter
91740                         .append('div')
91741                         .attr('class', 'label');
91742
91743                     label
91744                         .each(function(d) {
91745                             d3_select(this)
91746                                 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
91747                         });
91748
91749                     label
91750                         .append('span')
91751                         .attr('class', 'entity-type')
91752                         .text(function(d) { return d.type; });
91753
91754                     label
91755                         .append('span')
91756                         .attr('class', 'entity-name')
91757                         .text(function(d) { return d.name; });
91758
91759                     enter
91760                         .style('opacity', 0)
91761                         .transition()
91762                         .style('opacity', 1);
91763
91764                     items.order();
91765
91766                     items.exit()
91767                         .remove();
91768                 }
91769
91770
91771                 function mouseover(d) {
91772                     if (d.id === -1) return;
91773
91774                     context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
91775                         .classed('hover', true);
91776                 }
91777
91778
91779                 function mouseout() {
91780                     context.surface().selectAll('.hover')
91781                         .classed('hover', false);
91782                 }
91783
91784
91785                 function click(d) {
91786                     event.preventDefault();
91787                     if (d.location) {
91788                         context.map().centerZoomEase([d.location[1], d.location[0]], 19);
91789                     }
91790                     else if (d.entity) {
91791                         if (d.entity.type === 'node') {
91792                             context.map().center(d.entity.loc);
91793                         } else if (d.entity.type === 'way') {
91794                             var center = context.projection(context.map().center());
91795                             var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
91796                             context.map().center(edge.loc);
91797                         }
91798                         context.enter(modeSelect(context, [d.entity.id]));
91799                     } else {
91800                         context.zoomToEntity(d.id);
91801                     }
91802                 }
91803
91804
91805                 function geocoderSearch() {
91806                     services$1.geocoder.search(search.property('value'), function (err, resp) {
91807                         _geocodeResults = resp || [];
91808                         drawList();
91809                     });
91810                 }
91811             }
91812
91813
91814             return featureList;
91815         }
91816
91817         function uiPresetFavoriteButton(preset, geom, context, klass) {
91818
91819             geom = context.presets().fallback(geom).id;
91820
91821             var presetFavorite = {};
91822
91823             var _button = d3_select(null);
91824
91825
91826             presetFavorite.button = function(selection) {
91827
91828                 _button = selection.selectAll('.preset-favorite-button')
91829                     .data( []);
91830
91831                 _button.exit().remove();
91832
91833                 _button = _button.enter()
91834                     .insert('button', '.tag-reference-button')
91835                     .attr('class', 'preset-favorite-button ' + klass)
91836                     .attr('title', t('icons.favorite'))
91837                     .attr('tabindex', -1)
91838                     .call(svgIcon('#iD-icon-favorite'))
91839                     .merge(_button);
91840
91841                 _button
91842                     .on('click', function () {
91843                         event.stopPropagation();
91844                         event.preventDefault();
91845
91846                         context.presets().toggleFavorite(preset, geom);
91847
91848                         update();
91849                     });
91850
91851                 update();
91852             };
91853
91854             function update() {
91855                 _button
91856                     .classed('active', context.presets().favoriteMatching(preset, geom));
91857             }
91858
91859             context.presets().on('favoritePreset.button-' + preset.id.replace(/[^a-zA-Z\d:]/g, '-') + '-' + geom, update);
91860
91861             return presetFavorite;
91862         }
91863
91864         function uiPresetIcon(context) {
91865             var preset, geometry, sizeClass = 'medium';
91866
91867             function isSmall() {
91868                 return sizeClass === 'small';
91869             }
91870
91871
91872             function presetIcon(selection) {
91873                 selection.each(render);
91874             }
91875
91876
91877             function getIcon(p, geom) {
91878                 if (isSmall() && p.isFallback && p.isFallback())
91879                     return 'iD-icon-' + p.id;
91880                 else if (p.icon)
91881                     return p.icon;
91882                 else if (geom === 'line')
91883                     return 'iD-other-line';
91884                 else if (geom === 'vertex')
91885                     return p.isFallback() ? '' : 'temaki-vertex';
91886                 else if (isSmall() && geom === 'point')
91887                     return '';
91888                 else
91889                     return 'maki-marker-stroked';
91890             }
91891
91892             function renderPointBorder(enter) {
91893                 var w = 40, h = 40;
91894                 enter = enter
91895                     .append('svg')
91896                     .attr('class', 'preset-icon-fill preset-icon-point-border')
91897                     .attr('width', w)
91898                     .attr('height', h)
91899                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91900
91901                 enter.append('path')
91902                     .attr('transform', 'translate(11.5, 8)')
91903                     .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');
91904             }
91905
91906             function renderCircleFill(fillEnter) {
91907                 var w = 60, h = 60, d = 40;
91908                 fillEnter = fillEnter
91909                     .append('svg')
91910                     .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
91911                     .attr('width', w)
91912                     .attr('height', h)
91913                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91914
91915                 fillEnter.append('circle')
91916                     .attr('cx', w/2)
91917                     .attr('cy', h/2)
91918                     .attr('r', d/2);
91919             }
91920
91921             function renderSquareFill(fillEnter) {
91922                 var d = isSmall() ? 40 : 60;
91923                 var w = d, h = d, l = d*2/3, c1 = (w-l)/2, c2 = c1 + l;
91924                 fillEnter = fillEnter
91925                     .append('svg')
91926                     .attr('class', 'preset-icon-fill preset-icon-fill-area')
91927                     .attr('width', w)
91928                     .attr('height', h)
91929                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91930
91931                 var data = 'M' + c1 + ' ' + c1 + ' L' + c1 + ' ' + c2 + ' L' + c2 + ' ' + c2 + ' L' + c2 + ' ' + c1 + ' Z';
91932
91933                 fillEnter.append('path')
91934                     .attr('d', data)
91935                     .attr('class', 'line area fill');
91936
91937                 fillEnter.append('path')
91938                     .attr('d', data)
91939                     .attr('class', 'line area stroke');
91940
91941                 var r = 2.5;
91942                 var coordinates = [c1, c2];
91943                 for (var xIndex in coordinates) {
91944                     for (var yIndex in coordinates) {
91945                         fillEnter.append('circle')
91946                             .attr('class', 'vertex')
91947                             .attr('cx', coordinates[xIndex])
91948                             .attr('cy', coordinates[yIndex])
91949                             .attr('r', r);
91950                     }
91951                 }
91952
91953                 if (!isSmall()) {
91954                     var midCoordinates = [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]];
91955                     for (var index in midCoordinates) {
91956                         var loc = midCoordinates[index];
91957                         fillEnter.append('circle')
91958                             .attr('class', 'midpoint')
91959                             .attr('cx', loc[0])
91960                             .attr('cy', loc[1])
91961                             .attr('r', 1.25);
91962                     }
91963                 }
91964
91965             }
91966
91967             function renderLine(lineEnter) {
91968                 var d = isSmall() ? 40 : 60;
91969                 // draw the line parametrically
91970                 var w = d, h = d, y = Math.round(d*0.72), l = Math.round(d*0.6), r = 2.5;
91971                 var x1 = (w - l)/2, x2 = x1 + l;
91972
91973                 lineEnter = lineEnter
91974                     .append('svg')
91975                     .attr('class', 'preset-icon-line')
91976                     .attr('width', w)
91977                     .attr('height', h)
91978                     .attr('viewBox', '0 0 ' + w + ' ' + h);
91979
91980                 ['casing', 'stroke'].forEach(function(klass) {
91981                     lineEnter.append('path')
91982                         .attr('d', 'M' + x1 + ' ' + y + ' L' + x2 + ' ' + y)
91983                         .attr('class', 'line ' + klass);
91984                 });
91985
91986                 [[x1 - 1, y], [x2 + 1, y]].forEach(function(loc) {
91987                     lineEnter.append('circle')
91988                         .attr('class', 'vertex')
91989                         .attr('cx', loc[0])
91990                         .attr('cy', loc[1])
91991                         .attr('r', r);
91992                 });
91993             }
91994
91995             function renderRoute(routeEnter) {
91996                 var d = isSmall() ? 40 : 60;
91997                 // draw the route parametrically
91998                 var w = d,
91999                     h = d,
92000                     y1 = Math.round(d*0.80),
92001                     y2 = Math.round(d*0.68),
92002                     l = Math.round(d*0.6),
92003                     r = 2;
92004                 var x1 = (w - l)/2, x2 = x1 + l/3, x3 = x2 + l/3, x4 = x3 + l/3;
92005
92006                 routeEnter = routeEnter
92007                     .append('svg')
92008                     .attr('class', 'preset-icon-route')
92009                     .attr('width', w)
92010                     .attr('height', h)
92011                     .attr('viewBox', '0 0 ' + w + ' ' + h);
92012
92013                 ['casing', 'stroke'].forEach(function(klass) {
92014                     routeEnter.append('path')
92015                         .attr('d', 'M' + x1 + ' ' + y1 + ' L' + x2 + ' ' + y2)
92016                         .attr('class', 'segment0 line ' + klass);
92017                     routeEnter.append('path')
92018                         .attr('d', 'M' + x2 + ' ' + y2 + ' L' + x3 + ' ' + y1)
92019                         .attr('class', 'segment1 line ' + klass);
92020                     routeEnter.append('path')
92021                         .attr('d', 'M' + x3 + ' ' + y1 + ' L' + x4 + ' ' + y2)
92022                         .attr('class', 'segment2 line ' + klass);
92023                 });
92024
92025                 [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function(loc) {
92026                     routeEnter.append('circle')
92027                         .attr('class', 'vertex')
92028                         .attr('cx', loc[0])
92029                         .attr('cy', loc[1])
92030                         .attr('r', r);
92031                 });
92032             }
92033
92034             var routeSegements = {
92035                 bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
92036                 bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
92037                 detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
92038                 ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
92039                 foot: ['highway/footway', 'highway/footway', 'highway/footway'],
92040                 hiking: ['highway/path', 'highway/path', 'highway/path'],
92041                 horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
92042                 light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
92043                 monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
92044                 pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
92045                 piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
92046                 power: ['power/line', 'power/line', 'power/line'],
92047                 road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
92048                 subway: ['railway/subway', 'railway/subway', 'railway/subway'],
92049                 train: ['railway/rail', 'railway/rail', 'railway/rail'],
92050                 tram: ['railway/tram', 'railway/tram', 'railway/tram'],
92051                 waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
92052             };
92053
92054             function render() {
92055
92056                 var p = preset.apply(this, arguments);
92057                 var isFallback = isSmall() && p.isFallback && p.isFallback();
92058                 var geom = geometry ? geometry.apply(this, arguments) : null;
92059                 if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegements[p.tags.route]) || p.tags.type === 'waterway')) {
92060                     geom = 'route';
92061                 }
92062                 var imageURL = p.imageURL;
92063                 var picon = imageURL ? null : getIcon(p, geom);
92064                 var isMaki = picon && /^maki-/.test(picon);
92065                 var isTemaki = picon && /^temaki-/.test(picon);
92066                 var isFa = picon && /^fa[srb]-/.test(picon);
92067                 var isTnp = picon && /^tnp-/.test(picon);
92068                 var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
92069                 var isCategory = !p.setTags;
92070                 var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
92071                 var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
92072                 var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
92073                 var drawArea = picon && geom === 'area' && !isFallback;
92074                 var drawRoute = picon && geom === 'route';
92075                 var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
92076
92077                 var tags = !isCategory ? p.setTags({}, geom) : {};
92078                 for (var k in tags) {
92079                     if (tags[k] === '*') {
92080                         tags[k] = 'yes';
92081                     }
92082                 }
92083                 var tagClasses = svgTagClasses().getClassesString(tags, '');
92084
92085                 var selection = d3_select(this);
92086
92087                 var container = selection.selectAll('.preset-icon-container')
92088                     .data([0]);
92089
92090                 container = container.enter()
92091                     .append('div')
92092                     .attr('class', 'preset-icon-container ' + sizeClass)
92093                     .merge(container);
92094
92095                 container.classed('fallback', isFallback);
92096
92097                 var imageIcon = container.selectAll('img.image-icon')
92098                     .data(imageURL ? [0] : []);
92099
92100                 imageIcon.exit()
92101                     .remove();
92102
92103                 imageIcon = imageIcon.enter()
92104                     .append('img')
92105                     .attr('class', 'image-icon')
92106                     .merge(imageIcon);
92107
92108                 imageIcon
92109                     .attr('src', imageURL);
92110
92111                 var pointBorder = container.selectAll('.preset-icon-point-border')
92112                     .data(drawPoint ? [0] : []);
92113
92114                 pointBorder.exit()
92115                     .remove();
92116
92117                 var pointBorderEnter = pointBorder.enter();
92118                 renderPointBorder(pointBorderEnter);
92119                 pointBorder = pointBorderEnter.merge(pointBorder);
92120
92121
92122                 var vertexFill = container.selectAll('.preset-icon-fill-vertex')
92123                     .data(drawVertex ? [0] : []);
92124
92125                 vertexFill.exit()
92126                     .remove();
92127
92128                 var vertexFillEnter = vertexFill.enter();
92129                 renderCircleFill(vertexFillEnter);
92130                 vertexFill = vertexFillEnter.merge(vertexFill);
92131
92132
92133                 var fill = container.selectAll('.preset-icon-fill-area')
92134                     .data(drawArea ? [0] : []);
92135
92136                 fill.exit()
92137                     .remove();
92138
92139                 var fillEnter = fill.enter();
92140                 renderSquareFill(fillEnter);
92141                 fill = fillEnter.merge(fill);
92142
92143                 fill.selectAll('path.stroke')
92144                     .attr('class', 'area stroke ' + tagClasses);
92145                 fill.selectAll('path.fill')
92146                     .attr('class', 'area fill ' + tagClasses);
92147
92148
92149                 var line = container.selectAll('.preset-icon-line')
92150                     .data(drawLine ? [0] : []);
92151
92152                 line.exit()
92153                     .remove();
92154
92155                 var lineEnter = line.enter();
92156                 renderLine(lineEnter);
92157
92158                 line = lineEnter.merge(line);
92159
92160                 line.selectAll('path.stroke')
92161                     .attr('class', 'line stroke ' + tagClasses);
92162                 line.selectAll('path.casing')
92163                     .attr('class', 'line casing ' + tagClasses);
92164
92165                 var route = container.selectAll('.preset-icon-route')
92166                     .data(drawRoute ? [0] : []);
92167
92168                 route.exit()
92169                     .remove();
92170
92171                 var routeEnter = route.enter();
92172                 renderRoute(routeEnter);
92173
92174                 route = routeEnter.merge(route);
92175
92176                 if (drawRoute) {
92177                     var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
92178                     var segmentPresetIDs = routeSegements[routeType];
92179                     for (var segmentIndex in segmentPresetIDs) {
92180                         var segmentPreset = context.presets().item(segmentPresetIDs[segmentIndex]);
92181                         var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
92182                         route.selectAll('path.stroke.segment' + segmentIndex)
92183                             .attr('class', 'segment' + segmentIndex + ' line stroke ' + segmentTagClasses);
92184                         route.selectAll('path.casing.segment' + segmentIndex)
92185                             .attr('class', 'segment' + segmentIndex + ' line casing ' + segmentTagClasses);
92186                     }
92187
92188                 }
92189
92190
92191                 var icon = container.selectAll('.preset-icon')
92192                     .data(picon ? [0] : []);
92193
92194                 icon.exit()
92195                     .remove();
92196
92197                 icon = icon.enter()
92198                     .append('div')
92199                     .attr('class', 'preset-icon')
92200                     .call(svgIcon(''))
92201                     .merge(icon);
92202
92203                 icon
92204                     .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
92205                     .classed('framed', isFramed)
92206                     .classed('preset-icon-iD', isiDIcon);
92207
92208                 icon.selectAll('svg')
92209                     .attr('class', function() {
92210                         return 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line'  ? '' : tagClasses);
92211                     });
92212
92213                 icon.selectAll('use')
92214                     .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
92215
92216             }
92217
92218
92219             presetIcon.preset = function(val) {
92220                 if (!arguments.length) return preset;
92221                 preset = utilFunctor(val);
92222                 return presetIcon;
92223             };
92224
92225
92226             presetIcon.geometry = function(val) {
92227                 if (!arguments.length) return geometry;
92228                 geometry = utilFunctor(val);
92229                 return presetIcon;
92230             };
92231
92232
92233             presetIcon.sizeClass = function(val) {
92234                 if (!arguments.length) return sizeClass;
92235                 sizeClass = val;
92236                 return presetIcon;
92237             };
92238
92239             return presetIcon;
92240         }
92241
92242         function uiRawMemberEditor(context) {
92243             var taginfo = services$1.taginfo;
92244             var _entityID;
92245             var _contentSelection = d3_select(null);
92246             var _maxMembers = 1000;
92247
92248             function downloadMember(d) {
92249                 event.preventDefault();
92250
92251                 // display the loading indicator
92252                 d3_select(this.parentNode).classed('tag-reference-loading', true);
92253                 context.loadEntity(d.id, function() {
92254                     updateDisclosureContent(_contentSelection);
92255                 });
92256             }
92257
92258             function zoomToMember(d) {
92259                 event.preventDefault();
92260
92261                 var entity = context.entity(d.id);
92262                 context.map().zoomTo(entity);
92263
92264                 // highlight the feature in case it wasn't previously on-screen
92265                 utilHighlightEntities([d.id], true, context);
92266             }
92267
92268
92269             function selectMember(d) {
92270                 event.preventDefault();
92271
92272                 // remove the hover-highlight styling
92273                 utilHighlightEntities([d.id], false, context);
92274
92275                 var entity = context.entity(d.id);
92276                 var mapExtent = context.map().extent();
92277                 if (!entity.intersects(mapExtent, context.graph())) {
92278                     // zoom to the entity if its extent is not visible now
92279                     context.map().zoomToEase(entity);
92280                 }
92281
92282                 context.enter(modeSelect(context, [d.id]));
92283             }
92284
92285
92286             function changeRole(d) {
92287                 var oldRole = d.role;
92288                 var newRole = d3_select(this).property('value');
92289
92290                 if (oldRole !== newRole) {
92291                     var member = { id: d.id, type: d.type, role: newRole };
92292                     context.perform(
92293                         actionChangeMember(d.relation.id, member, d.index),
92294                         t('operations.change_role.annotation')
92295                     );
92296                 }
92297             }
92298
92299
92300             function deleteMember(d) {
92301
92302                 // remove the hover-highlight styling
92303                 utilHighlightEntities([d.id], false, context);
92304
92305                 context.perform(
92306                     actionDeleteMember(d.relation.id, d.index),
92307                     t('operations.delete_member.annotation')
92308                 );
92309
92310                 if (!context.hasEntity(d.relation.id)) {
92311                     context.enter(modeBrowse(context));
92312                 }
92313             }
92314
92315             function updateDisclosureContent(selection) {
92316                 _contentSelection = selection;
92317
92318                 var memberships = [];
92319                 var entity = context.entity(_entityID);
92320                 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
92321                     memberships.push({
92322                         index: index,
92323                         id: member.id,
92324                         type: member.type,
92325                         role: member.role,
92326                         relation: entity,
92327                         member: context.hasEntity(member.id)
92328                     });
92329                 });
92330
92331                 var list = selection.selectAll('.member-list')
92332                     .data([0]);
92333
92334                 list = list.enter()
92335                     .append('ul')
92336                     .attr('class', 'member-list')
92337                     .merge(list);
92338
92339
92340                 var items = list.selectAll('li')
92341                     .data(memberships, function(d) {
92342                         return osmEntity.key(d.relation) + ',' + d.index + ',' +
92343                             (d.member ? osmEntity.key(d.member) : 'incomplete');
92344                     });
92345
92346                 items.exit()
92347                     .each(unbind)
92348                     .remove();
92349
92350                 var itemsEnter = items.enter()
92351                     .append('li')
92352                     .attr('class', 'member-row form-field')
92353                     .classed('member-incomplete', function(d) { return !d.member; });
92354
92355                 itemsEnter
92356                     .each(function(d) {
92357                         var item = d3_select(this);
92358
92359                         var label = item
92360                             .append('label')
92361                             .attr('class', 'field-label');
92362
92363                         if (d.member) {
92364                             // highlight the member feature in the map while hovering on the list item
92365                             item
92366                                 .on('mouseover', function() {
92367                                     utilHighlightEntities([d.id], true, context);
92368                                 })
92369                                 .on('mouseout', function() {
92370                                     utilHighlightEntities([d.id], false, context);
92371                                 });
92372
92373                             var labelLink = label
92374                                 .append('span')
92375                                 .attr('class', 'label-text')
92376                                 .append('a')
92377                                 .attr('href', '#')
92378                                 .on('click', selectMember);
92379
92380                             labelLink
92381                                 .append('span')
92382                                 .attr('class', 'member-entity-type')
92383                                 .text(function(d) {
92384                                     var matched = context.presets().match(d.member, context.graph());
92385                                     return (matched && matched.name()) || utilDisplayType(d.member.id);
92386                                 });
92387
92388                             labelLink
92389                                 .append('span')
92390                                 .attr('class', 'member-entity-name')
92391                                 .text(function(d) { return utilDisplayName(d.member); });
92392
92393                             label
92394                                 .append('button')
92395                                 .attr('class', 'member-zoom')
92396                                 .attr('title', t('icons.zoom_to'))
92397                                 .call(svgIcon('#iD-icon-geolocate'))
92398                                 .on('click', zoomToMember);
92399
92400                         } else {
92401                             var labelText = label
92402                                 .append('span')
92403                                 .attr('class', 'label-text');
92404
92405                             labelText
92406                                 .append('span')
92407                                 .attr('class', 'member-entity-type')
92408                                 .text(t('inspector.' + d.type, { id: d.id }));
92409
92410                             labelText
92411                                 .append('span')
92412                                 .attr('class', 'member-entity-name')
92413                                 .text(t('inspector.incomplete', { id: d.id }));
92414
92415                             label
92416                                 .append('button')
92417                                 .attr('class', 'member-download')
92418                                 .attr('title', t('icons.download'))
92419                                 .attr('tabindex', -1)
92420                                 .call(svgIcon('#iD-icon-load'))
92421                                 .on('click', downloadMember);
92422                         }
92423                     });
92424
92425                 var wrapEnter = itemsEnter
92426                     .append('div')
92427                     .attr('class', 'form-field-input-wrap form-field-input-member');
92428
92429                 wrapEnter
92430                     .append('input')
92431                     .attr('class', 'member-role')
92432                     .property('type', 'text')
92433                     .attr('maxlength', 255)
92434                     .attr('placeholder', t('inspector.role'))
92435                     .call(utilNoAuto);
92436
92437                 wrapEnter
92438                     .append('button')
92439                     .attr('tabindex', -1)
92440                     .attr('title', t('icons.remove'))
92441                     .attr('class', 'remove form-field-button member-delete')
92442                     .call(svgIcon('#iD-operation-delete'));
92443
92444                 if (taginfo) {
92445                     wrapEnter.each(bindTypeahead);
92446                 }
92447
92448                 var dragOrigin, targetIndex;
92449
92450                 itemsEnter.call(d3_drag()
92451                     .on('start', function() {
92452                         dragOrigin = {
92453                             x: event.x,
92454                             y: event.y
92455                         };
92456                         targetIndex = null;
92457                     })
92458                     .on('drag', function(d, index) {
92459                         var x = event.x - dragOrigin.x,
92460                             y = event.y - dragOrigin.y;
92461
92462                         if (!d3_select(this).classed('dragging') &&
92463                             // don't display drag until dragging beyond a distance threshold
92464                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) return;
92465
92466                         d3_select(this)
92467                             .classed('dragging', true);
92468
92469                         targetIndex = null;
92470
92471                         selection.selectAll('li.member-row')
92472                             .style('transform', function(d2, index2) {
92473                                 var node = d3_select(this).node();
92474                                 if (index === index2) {
92475                                     return 'translate(' + x + 'px, ' + y + 'px)';
92476                                 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
92477                                     if (targetIndex === null || index2 > targetIndex) {
92478                                         targetIndex = index2;
92479                                     }
92480                                     return 'translateY(-100%)';
92481                                 } else if (index2 < index && event.y < node.offsetTop) {
92482                                     if (targetIndex === null || index2 < targetIndex) {
92483                                         targetIndex = index2;
92484                                     }
92485                                     return 'translateY(100%)';
92486                                 }
92487                                 return null;
92488                             });
92489                     })
92490                     .on('end', function(d, index) {
92491
92492                         if (!d3_select(this).classed('dragging')) {
92493                             return;
92494                         }
92495
92496                         d3_select(this)
92497                             .classed('dragging', false);
92498
92499                         selection.selectAll('li.member-row')
92500                             .style('transform', null);
92501
92502                         if (targetIndex !== null) {
92503                             // dragged to a new position, reorder
92504                             context.perform(
92505                                 actionMoveMember(d.relation.id, index, targetIndex),
92506                                 t('operations.reorder_members.annotation')
92507                             );
92508                         }
92509                     })
92510                 );
92511
92512
92513                 // update
92514                 items = items
92515                     .merge(itemsEnter);
92516
92517                 items.select('input.member-role')
92518                     .property('value', function(d) { return d.role; })
92519                     .on('blur', changeRole)
92520                     .on('change', changeRole);
92521
92522                 items.select('button.member-delete')
92523                     .on('click', deleteMember);
92524
92525
92526
92527                 function bindTypeahead(d) {
92528                     var row = d3_select(this);
92529                     var role = row.selectAll('input.member-role');
92530                     var origValue = role.property('value');
92531
92532                     function sort(value, data) {
92533                         var sameletter = [];
92534                         var other = [];
92535                         for (var i = 0; i < data.length; i++) {
92536                             if (data[i].value.substring(0, value.length) === value) {
92537                                 sameletter.push(data[i]);
92538                             } else {
92539                                 other.push(data[i]);
92540                             }
92541                         }
92542                         return sameletter.concat(other);
92543                     }
92544
92545                     role.call(uiCombobox(context, 'member-role')
92546                         .fetcher(function(role, callback) {
92547                             // The `geometry` param is used in the `taginfo.js` interface for
92548                             // filtering results, as a key into the `tag_members_fractions`
92549                             // object.  If we don't know the geometry because the member is
92550                             // not yet downloaded, it's ok to guess based on type.
92551                             var geometry;
92552                             if (d.member) {
92553                                 geometry = context.geometry(d.member.id);
92554                             } else if (d.type === 'relation') {
92555                                 geometry = 'relation';
92556                             } else if (d.type === 'way') {
92557                                 geometry = 'line';
92558                             } else {
92559                                 geometry = 'point';
92560                             }
92561
92562                             var rtype = entity.tags.type;
92563                             taginfo.roles({
92564                                 debounce: true,
92565                                 rtype: rtype || '',
92566                                 geometry: geometry,
92567                                 query: role
92568                             }, function(err, data) {
92569                                 if (!err) callback(sort(role, data));
92570                             });
92571                         })
92572                         .on('cancel', function() {
92573                             role.property('value', origValue);
92574                         })
92575                     );
92576                 }
92577
92578
92579                 function unbind() {
92580                     var row = d3_select(this);
92581
92582                     row.selectAll('input.member-role')
92583                         .call(uiCombobox.off);
92584                 }
92585             }
92586
92587             function rawMemberEditor(selection) {
92588                 var entity = context.entity(_entityID);
92589
92590                 var gt = entity.members.length > _maxMembers ? '>' : '';
92591                 selection.call(uiDisclosure(context, 'raw_member_editor', true)
92592                     .title(t('inspector.all_members') + ' (' + gt + entity.members.slice(0, _maxMembers).length + ')')
92593                     .expanded(true)
92594                     .updatePreference(false)
92595                     .on('toggled', function(expanded) {
92596                         if (expanded) {
92597                             selection.node().parentNode.scrollTop += 200;
92598                         }
92599                     })
92600                     .content(updateDisclosureContent)
92601                 );
92602             }
92603
92604             rawMemberEditor.entityID = function(val) {
92605                 if (!arguments.length) return _entityID;
92606                 _entityID = val;
92607                 return rawMemberEditor;
92608             };
92609
92610
92611             return rawMemberEditor;
92612         }
92613
92614         function uiRawMembershipEditor(context) {
92615             var taginfo = services$1.taginfo;
92616             var nearbyCombo = uiCombobox(context, 'parent-relation')
92617                 .minItems(1)
92618                 .fetcher(fetchNearbyRelations)
92619                 .itemsMouseEnter(function(d) {
92620                     if (d.relation) utilHighlightEntities([d.relation.id], true, context);
92621                 })
92622                 .itemsMouseLeave(function(d) {
92623                     if (d.relation) utilHighlightEntities([d.relation.id], false, context);
92624                 });
92625             var _inChange = false;
92626             var _entityID;
92627             var _showBlank;
92628
92629
92630             function selectRelation(d) {
92631                 event.preventDefault();
92632
92633                 // remove the hover-highlight styling
92634                 utilHighlightEntities([d.relation.id], false, context);
92635
92636                 context.enter(modeSelect(context, [d.relation.id]));
92637             }
92638
92639
92640             function changeRole(d) {
92641                 if (d === 0) return;    // called on newrow (shoudn't happen)
92642                 if (_inChange) return;  // avoid accidental recursive call #5731
92643
92644                 var oldRole = d.member.role;
92645                 var newRole = d3_select(this).property('value');
92646
92647                 if (oldRole !== newRole) {
92648                     _inChange = true;
92649                     context.perform(
92650                         actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
92651                         t('operations.change_role.annotation')
92652                     );
92653                 }
92654                 _inChange = false;
92655             }
92656
92657
92658             function addMembership(d, role) {
92659                 this.blur();           // avoid keeping focus on the button
92660                 _showBlank = false;
92661
92662                 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
92663
92664                 if (d.relation) {
92665                     context.perform(
92666                         actionAddMember(d.relation.id, member),
92667                         t('operations.add_member.annotation')
92668                     );
92669
92670                 } else {
92671                     var relation = osmRelation();
92672                     context.perform(
92673                         actionAddEntity(relation),
92674                         actionAddMember(relation.id, member),
92675                         t('operations.add.annotation.relation')
92676                     );
92677
92678                     context.enter(modeSelect(context, [relation.id]).newFeature(true));
92679                 }
92680             }
92681
92682
92683             function deleteMembership(d) {
92684                 this.blur();           // avoid keeping focus on the button
92685                 if (d === 0) return;   // called on newrow (shoudn't happen)
92686
92687                 // remove the hover-highlight styling
92688                 utilHighlightEntities([d.relation.id], false, context);
92689
92690                 context.perform(
92691                     actionDeleteMember(d.relation.id, d.index),
92692                     t('operations.delete_member.annotation')
92693                 );
92694             }
92695
92696
92697             function fetchNearbyRelations(q, callback) {
92698                 var newRelation = { relation: null, value: t('inspector.new_relation') };
92699
92700                 var result = [];
92701
92702                 var graph = context.graph();
92703
92704                 function baseDisplayLabel(entity) {
92705                     var matched = context.presets().match(entity, graph);
92706                     var presetName = (matched && matched.name()) || t('inspector.relation');
92707                     var entityName = utilDisplayName(entity) || '';
92708
92709                     return presetName + ' ' + entityName;
92710                 }
92711
92712                 var explicitRelation = q && context.hasEntity(q.toLowerCase());
92713                 if (explicitRelation && explicitRelation.type === 'relation' && explicitRelation.id !== _entityID) {
92714                     // loaded relation is specified explicitly, only show that
92715
92716                     result.push({
92717                         relation: explicitRelation,
92718                         value: baseDisplayLabel(explicitRelation) + ' ' + explicitRelation.id
92719                     });
92720                 } else {
92721
92722                     context.intersects(context.extent()).forEach(function(entity) {
92723                         if (entity.type !== 'relation' || entity.id === _entityID) return;
92724
92725                         var value = baseDisplayLabel(entity);
92726                         if (q && (value + ' ' + entity.id).toLowerCase().indexOf(q.toLowerCase()) === -1) return;
92727
92728                         result.push({ relation: entity, value: value });
92729                     });
92730
92731                     result.sort(function(a, b) {
92732                         return osmRelation.creationOrder(a.relation, b.relation);
92733                     });
92734
92735                     // Dedupe identical names by appending relation id - see #2891
92736                     var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
92737                         .filter(function(v) { return v.length > 1; });
92738
92739                     dupeGroups.forEach(function(group) {
92740                         group.forEach(function(obj) {
92741                             obj.value += ' ' + obj.relation.id;
92742                         });
92743                     });
92744                 }
92745
92746                 result.forEach(function(obj) {
92747                     obj.title = obj.value;
92748                 });
92749
92750                 result.unshift(newRelation);
92751                 callback(result);
92752             }
92753
92754
92755             function rawMembershipEditor(selection) {
92756                 var entity = context.entity(_entityID);
92757                 var parents = context.graph().parentRelations(entity);
92758                 var memberships = [];
92759
92760                 parents.slice(0, 1000).forEach(function(relation) {
92761                     relation.members.forEach(function(member, index) {
92762                         if (member.id === entity.id) {
92763                             memberships.push({ relation: relation, member: member, index: index });
92764                         }
92765                     });
92766                 });
92767
92768                 var gt = parents.length > 1000 ? '>' : '';
92769                 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
92770                     .title(t('inspector.all_relations') + ' (' + gt + memberships.length + ')')
92771                     .expanded(true)
92772                     .updatePreference(false)
92773                     .on('toggled', function(expanded) {
92774                         if (expanded) { selection.node().parentNode.scrollTop += 200; }
92775                     })
92776                     .content(content)
92777                 );
92778
92779
92780                 function content(selection) {
92781                     var list = selection.selectAll('.member-list')
92782                         .data([0]);
92783
92784                     list = list.enter()
92785                         .append('ul')
92786                         .attr('class', 'member-list')
92787                         .merge(list);
92788
92789
92790                     var items = list.selectAll('li.member-row-normal')
92791                         .data(memberships, function(d) {
92792                             return osmEntity.key(d.relation) + ',' + d.index;
92793                         });
92794
92795                     items.exit()
92796                         .each(unbind)
92797                         .remove();
92798
92799                     // Enter
92800                     var itemsEnter = items.enter()
92801                         .append('li')
92802                         .attr('class', 'member-row member-row-normal form-field');
92803
92804                     // highlight the relation in the map while hovering on the list item
92805                     itemsEnter.on('mouseover', function(d) {
92806                             utilHighlightEntities([d.relation.id], true, context);
92807                         })
92808                         .on('mouseout', function(d) {
92809                             utilHighlightEntities([d.relation.id], false, context);
92810                         });
92811
92812                     var labelEnter = itemsEnter
92813                         .append('label')
92814                         .attr('class', 'field-label')
92815                         .append('span')
92816                         .attr('class', 'label-text')
92817                         .append('a')
92818                         .attr('href', '#')
92819                         .on('click', selectRelation);
92820
92821                     labelEnter
92822                         .append('span')
92823                         .attr('class', 'member-entity-type')
92824                         .text(function(d) {
92825                             var matched = context.presets().match(d.relation, context.graph());
92826                             return (matched && matched.name()) || t('inspector.relation');
92827                         });
92828
92829                     labelEnter
92830                         .append('span')
92831                         .attr('class', 'member-entity-name')
92832                         .text(function(d) { return utilDisplayName(d.relation); });
92833
92834                     var wrapEnter = itemsEnter
92835                         .append('div')
92836                         .attr('class', 'form-field-input-wrap form-field-input-member');
92837
92838                     wrapEnter
92839                         .append('input')
92840                         .attr('class', 'member-role')
92841                         .property('type', 'text')
92842                         .attr('maxlength', 255)
92843                         .attr('placeholder', t('inspector.role'))
92844                         .call(utilNoAuto)
92845                         .property('value', function(d) { return d.member.role; })
92846                         .on('blur', changeRole)
92847                         .on('change', changeRole);
92848
92849                     wrapEnter
92850                         .append('button')
92851                         .attr('tabindex', -1)
92852                         .attr('class', 'remove form-field-button member-delete')
92853                         .call(svgIcon('#iD-operation-delete'))
92854                         .on('click', deleteMembership);
92855
92856                     if (taginfo) {
92857                         wrapEnter.each(bindTypeahead);
92858                     }
92859
92860
92861                     var newMembership = list.selectAll('.member-row-new')
92862                         .data(_showBlank ? [0] : []);
92863
92864                     // Exit
92865                     newMembership.exit()
92866                         .remove();
92867
92868                     // Enter
92869                     var newMembershipEnter = newMembership.enter()
92870                         .append('li')
92871                         .attr('class', 'member-row member-row-new form-field');
92872
92873                     newMembershipEnter
92874                         .append('label')
92875                         .attr('class', 'field-label')
92876                         .append('input')
92877                         .attr('placeholder', t('inspector.choose_relation'))
92878                         .attr('type', 'text')
92879                         .attr('class', 'member-entity-input')
92880                         .call(utilNoAuto);
92881
92882                     var newWrapEnter = newMembershipEnter
92883                         .append('div')
92884                         .attr('class', 'form-field-input-wrap form-field-input-member');
92885
92886                     newWrapEnter
92887                         .append('input')
92888                         .attr('class', 'member-role')
92889                         .property('type', 'text')
92890                         .attr('maxlength', 255)
92891                         .attr('placeholder', t('inspector.role'))
92892                         .call(utilNoAuto);
92893
92894                     newWrapEnter
92895                         .append('button')
92896                         .attr('tabindex', -1)
92897                         .attr('class', 'remove form-field-button member-delete')
92898                         .call(svgIcon('#iD-operation-delete'))
92899                         .on('click', function() {
92900                             list.selectAll('.member-row-new')
92901                                 .remove();
92902                         });
92903
92904                     // Update
92905                     newMembership = newMembership
92906                         .merge(newMembershipEnter);
92907
92908                     newMembership.selectAll('.member-entity-input')
92909                         .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
92910                         .call(nearbyCombo
92911                             .on('accept', acceptEntity)
92912                             .on('cancel', cancelEntity)
92913                         );
92914
92915
92916                     // Container for the Add button
92917                     var addRow = selection.selectAll('.add-row')
92918                         .data([0]);
92919
92920                     // enter
92921                     var addRowEnter = addRow.enter()
92922                         .append('div')
92923                         .attr('class', 'add-row');
92924
92925                     var addRelationButton = addRowEnter
92926                         .append('button')
92927                         .attr('class', 'add-relation');
92928
92929                     addRelationButton
92930                         .call(svgIcon('#iD-icon-plus', 'light'));
92931                     addRelationButton
92932                         .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
92933
92934                     addRowEnter
92935                         .append('div')
92936                         .attr('class', 'space-value');   // preserve space
92937
92938                     addRowEnter
92939                         .append('div')
92940                         .attr('class', 'space-buttons');  // preserve space
92941
92942                     // update
92943                     addRow = addRow
92944                         .merge(addRowEnter);
92945
92946                     addRow.select('.add-relation')
92947                         .on('click', function() {
92948                             _showBlank = true;
92949                             content(selection);
92950                             list.selectAll('.member-entity-input').node().focus();
92951                         });
92952
92953
92954                     function acceptEntity(d) {
92955                         if (!d) {
92956                             cancelEntity();
92957                             return;
92958                         }
92959                         // remove hover-higlighting
92960                         if (d.relation) utilHighlightEntities([d.relation.id], false, context);
92961
92962                         var role = list.selectAll('.member-row-new .member-role').property('value');
92963                         addMembership(d, role);
92964                     }
92965
92966
92967                     function cancelEntity() {
92968                         var input = newMembership.selectAll('.member-entity-input');
92969                         input.property('value', '');
92970
92971                         // remove hover-higlighting
92972                         context.surface().selectAll('.highlighted')
92973                             .classed('highlighted', false);
92974                     }
92975
92976
92977                     function bindTypeahead(d) {
92978                         var row = d3_select(this);
92979                         var role = row.selectAll('input.member-role');
92980                         var origValue = role.property('value');
92981
92982                         function sort(value, data) {
92983                             var sameletter = [];
92984                             var other = [];
92985                             for (var i = 0; i < data.length; i++) {
92986                                 if (data[i].value.substring(0, value.length) === value) {
92987                                     sameletter.push(data[i]);
92988                                 } else {
92989                                     other.push(data[i]);
92990                                 }
92991                             }
92992                             return sameletter.concat(other);
92993                         }
92994
92995                         role.call(uiCombobox(context, 'member-role')
92996                             .fetcher(function(role, callback) {
92997                                 var rtype = d.relation.tags.type;
92998                                 taginfo.roles({
92999                                     debounce: true,
93000                                     rtype: rtype || '',
93001                                     geometry: context.geometry(_entityID),
93002                                     query: role
93003                                 }, function(err, data) {
93004                                     if (!err) callback(sort(role, data));
93005                                 });
93006                             })
93007                             .on('cancel', function() {
93008                                 role.property('value', origValue);
93009                             })
93010                         );
93011                     }
93012
93013
93014                     function unbind() {
93015                         var row = d3_select(this);
93016
93017                         row.selectAll('input.member-role')
93018                             .call(uiCombobox.off);
93019                     }
93020                 }
93021             }
93022
93023
93024             rawMembershipEditor.entityID = function(val) {
93025                 if (!arguments.length) return _entityID;
93026                 _entityID = val;
93027                 _showBlank = false;
93028                 return rawMembershipEditor;
93029             };
93030
93031
93032             return rawMembershipEditor;
93033         }
93034
93035         // This currently only works with the 'restrictions' field
93036         // It borrows some code from uiHelp
93037
93038         function uiFieldHelp(context, fieldName) {
93039             var fieldHelp = {};
93040             var _inspector = d3_select(null);
93041             var _wrap = d3_select(null);
93042             var _body = d3_select(null);
93043
93044             var fieldHelpKeys = {
93045                 restrictions: [
93046                     ['about',[
93047                         'about',
93048                         'from_via_to',
93049                         'maxdist',
93050                         'maxvia'
93051                     ]],
93052                     ['inspecting',[
93053                         'about',
93054                         'from_shadow',
93055                         'allow_shadow',
93056                         'restrict_shadow',
93057                         'only_shadow',
93058                         'restricted',
93059                         'only'
93060                     ]],
93061                     ['modifying',[
93062                         'about',
93063                         'indicators',
93064                         'allow_turn',
93065                         'restrict_turn',
93066                         'only_turn'
93067                     ]],
93068                     ['tips',[
93069                         'simple',
93070                         'simple_example',
93071                         'indirect',
93072                         'indirect_example',
93073                         'indirect_noedit'
93074                     ]]
93075                 ]
93076             };
93077
93078             var fieldHelpHeadings = {};
93079
93080             var replacements = {
93081                 distField: t('restriction.controls.distance'),
93082                 viaField: t('restriction.controls.via'),
93083                 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
93084                 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
93085                 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
93086                 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
93087                 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
93088                 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
93089                 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
93090             };
93091
93092
93093             // For each section, squash all the texts into a single markdown document
93094             var docs = fieldHelpKeys[fieldName].map(function(key) {
93095                 var helpkey = 'help.field.' + fieldName + '.' + key[0];
93096                 var text = key[1].reduce(function(all, part) {
93097                     var subkey = helpkey + '.' + part;
93098                     var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
93099                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
93100                     return all + hhh + t(subkey, replacements) + '\n\n';
93101                 }, '');
93102
93103                 return {
93104                     key: helpkey,
93105                     title: t(helpkey + '.title'),
93106                     html: marked(text.trim())
93107                 };
93108             });
93109
93110
93111             function show() {
93112                 updatePosition();
93113
93114                 _body
93115                     .classed('hide', false)
93116                     .style('opacity', '0')
93117                     .transition()
93118                     .duration(200)
93119                     .style('opacity', '1');
93120             }
93121
93122
93123             function hide() {
93124                 _body
93125                     .classed('hide', true)
93126                     .transition()
93127                     .duration(200)
93128                     .style('opacity', '0')
93129                     .on('end', function () {
93130                         _body.classed('hide', true);
93131                     });
93132             }
93133
93134
93135             function clickHelp(index) {
93136                 var d = docs[index];
93137                 var tkeys = fieldHelpKeys[fieldName][index][1];
93138
93139                 _body.selectAll('.field-help-nav-item')
93140                     .classed('active', function(d, i) { return i === index; });
93141
93142                 var content = _body.selectAll('.field-help-content')
93143                     .html(d.html);
93144
93145                 // class the paragraphs so we can find and style them
93146                 content.selectAll('p')
93147                     .attr('class', function(d, i) { return tkeys[i]; });
93148
93149                 // insert special content for certain help sections
93150                 if (d.key === 'help.field.restrictions.inspecting') {
93151                     content
93152                         .insert('img', 'p.from_shadow')
93153                         .attr('class', 'field-help-image cf')
93154                         .attr('src', context.imagePath('tr_inspect.gif'));
93155
93156                 } else if (d.key === 'help.field.restrictions.modifying') {
93157                     content
93158                         .insert('img', 'p.allow_turn')
93159                         .attr('class', 'field-help-image cf')
93160                         .attr('src', context.imagePath('tr_modify.gif'));
93161                 }
93162             }
93163
93164
93165             fieldHelp.button = function(selection) {
93166                 if (_body.empty()) return;
93167
93168                 var button = selection.selectAll('.field-help-button')
93169                     .data([0]);
93170
93171                 // enter/update
93172                 button.enter()
93173                     .append('button')
93174                     .attr('class', 'field-help-button')
93175                     .attr('tabindex', -1)
93176                     .call(svgIcon('#iD-icon-help'))
93177                     .merge(button)
93178                     .on('click', function () {
93179                         event.stopPropagation();
93180                         event.preventDefault();
93181                         if (_body.classed('hide')) {
93182                             show();
93183                         } else {
93184                             hide();
93185                         }
93186                     });
93187             };
93188
93189
93190             function updatePosition() {
93191                 var wrap = _wrap.node();
93192                 var inspector = _inspector.node();
93193                 var wRect = wrap.getBoundingClientRect();
93194                 var iRect = inspector.getBoundingClientRect();
93195
93196                 _body
93197                     .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
93198             }
93199
93200
93201             fieldHelp.body = function(selection) {
93202                 // This control expects the field to have a form-field-input-wrap div
93203                 _wrap = selection.selectAll('.form-field-input-wrap');
93204                 if (_wrap.empty()) return;
93205
93206                 // absolute position relative to the inspector, so it "floats" above the fields
93207                 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
93208                 if (_inspector.empty()) return;
93209
93210                 _body = _inspector.selectAll('.field-help-body')
93211                     .data([0]);
93212
93213                 var enter = _body.enter()
93214                     .append('div')
93215                     .attr('class', 'field-help-body hide');   // initially hidden
93216
93217                 var titleEnter = enter
93218                     .append('div')
93219                     .attr('class', 'field-help-title cf');
93220
93221                 titleEnter
93222                     .append('h2')
93223                     .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
93224                     .text(t('help.field.' + fieldName + '.title'));
93225
93226                 titleEnter
93227                     .append('button')
93228                     .attr('class', 'fr close')
93229                     .on('click', function() {
93230                         event.stopPropagation();
93231                         event.preventDefault();
93232                         hide();
93233                     })
93234                     .call(svgIcon('#iD-icon-close'));
93235
93236                 var navEnter = enter
93237                     .append('div')
93238                     .attr('class', 'field-help-nav cf');
93239
93240                 var titles = docs.map(function(d) { return d.title; });
93241                 navEnter.selectAll('.field-help-nav-item')
93242                     .data(titles)
93243                     .enter()
93244                     .append('div')
93245                     .attr('class', 'field-help-nav-item')
93246                     .text(function(d) { return d; })
93247                     .on('click', function(d, i) {
93248                         event.stopPropagation();
93249                         event.preventDefault();
93250                         clickHelp(i);
93251                     });
93252
93253                 enter
93254                     .append('div')
93255                     .attr('class', 'field-help-content');
93256
93257                 _body = _body
93258                     .merge(enter);
93259
93260                 clickHelp(0);
93261             };
93262
93263
93264             return fieldHelp;
93265         }
93266
93267         function uiFieldCheck(field, context) {
93268             var dispatch$1 = dispatch('change');
93269             var options = field.strings && field.strings.options;
93270             var values = [];
93271             var texts = [];
93272
93273             var input = d3_select(null);
93274             var text = d3_select(null);
93275             var label = d3_select(null);
93276             var reverser = d3_select(null);
93277
93278             var _impliedYes;
93279             var _entityID;
93280             var _value;
93281
93282
93283             if (options) {
93284                 for (var k in options) {
93285                     values.push(k === 'undefined' ? undefined : k);
93286                     texts.push(field.t('options.' + k, { 'default': options[k] }));
93287                 }
93288             } else {
93289                 values = [undefined, 'yes'];
93290                 texts = [t('inspector.unknown'), t('inspector.check.yes')];
93291                 if (field.type !== 'defaultCheck') {
93292                     values.push('no');
93293                     texts.push(t('inspector.check.no'));
93294                 }
93295             }
93296
93297
93298             // Checks tags to see whether an undefined value is "Assumed to be Yes"
93299             function checkImpliedYes() {
93300                 _impliedYes = (field.id === 'oneway_yes');
93301
93302                 // hack: pretend `oneway` field is a `oneway_yes` field
93303                 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
93304                 if (field.id === 'oneway') {
93305                     var entity = context.entity(_entityID);
93306                     for (var key in entity.tags) {
93307                         if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
93308                             _impliedYes = true;
93309                             texts[0] = t('presets.fields.oneway_yes.options.undefined');
93310                             break;
93311                         }
93312                     }
93313                 }
93314             }
93315
93316
93317             function reverserHidden() {
93318                 if (!d3_select('div.inspector-hover').empty()) return true;
93319                 return !(_value === 'yes' || (_impliedYes && !_value));
93320             }
93321
93322
93323             function reverserSetText(selection) {
93324                 var entity = context.hasEntity(_entityID);
93325                 if (reverserHidden() || !entity) return selection;
93326
93327                 var first = entity.first();
93328                 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
93329                 var pseudoDirection = first < last;
93330                 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
93331
93332                 selection.selectAll('.reverser-span')
93333                     .text(t('inspector.check.reverser'))
93334                     .call(svgIcon(icon, 'inline'));
93335
93336                 return selection;
93337             }
93338
93339
93340             var check = function(selection) {
93341                 checkImpliedYes();
93342
93343                 label = selection.selectAll('.form-field-input-wrap')
93344                     .data([0]);
93345
93346                 var enter = label.enter()
93347                     .append('label')
93348                     .attr('class', 'form-field-input-wrap form-field-input-check');
93349
93350                 enter
93351                     .append('input')
93352                     .property('indeterminate', field.type !== 'defaultCheck')
93353                     .attr('type', 'checkbox')
93354                     .attr('id', 'preset-input-' + field.safeid);
93355
93356                 enter
93357                     .append('span')
93358                     .text(texts[0])
93359                     .attr('class', 'value');
93360
93361                 if (field.type === 'onewayCheck') {
93362                     enter
93363                         .append('a')
93364                         .attr('id', 'preset-input-' + field.safeid + '-reverser')
93365                         .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
93366                         .attr('href', '#')
93367                         .append('span')
93368                         .attr('class', 'reverser-span');
93369                 }
93370
93371                 label = label.merge(enter);
93372                 input = label.selectAll('input');
93373                 text = label.selectAll('span.value');
93374
93375                 input
93376                     .on('click', function() {
93377                         event.stopPropagation();
93378                         var t = {};
93379                         t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
93380
93381                         // Don't cycle through `alternating` or `reversible` states - #4970
93382                         // (They are supported as translated strings, but should not toggle with clicks)
93383                         if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
93384                             t[field.key] = values[0];
93385                         }
93386
93387                         dispatch$1.call('change', this, t);
93388                     });
93389
93390                 if (field.type === 'onewayCheck') {
93391                     reverser = label.selectAll('.reverser');
93392
93393                     reverser
93394                         .call(reverserSetText)
93395                         .on('click', function() {
93396                             event.preventDefault();
93397                             event.stopPropagation();
93398                             context.perform(
93399                                 actionReverse(_entityID),
93400                                 t('operations.reverse.annotation')
93401                             );
93402                             d3_select(this)
93403                                 .call(reverserSetText);
93404                         });
93405                 }
93406             };
93407
93408
93409             check.entity = function(_) {
93410                 if (!arguments.length) return context.hasEntity(_entityID);
93411                 _entityID = _.id;
93412                 return check;
93413             };
93414
93415
93416             check.tags = function(tags) {
93417
93418                 function isChecked(val) {
93419                     return val !== 'no' && val !== '' && val !== undefined && val !== null;
93420                 }
93421
93422                 function textFor(val) {
93423                     if (val === '') val = undefined;
93424                     var index = values.indexOf(val);
93425                     return (index !== -1 ? texts[index] : ('"' + val + '"'));
93426                 }
93427
93428                 checkImpliedYes();
93429                 _value = tags[field.key] && tags[field.key].toLowerCase();
93430
93431                 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
93432                     _value = 'yes';
93433                 }
93434
93435                 input
93436                     .property('indeterminate', field.type !== 'defaultCheck' && !_value)
93437                     .property('checked', isChecked(_value));
93438
93439                 text
93440                     .text(textFor(_value));
93441
93442                 label
93443                     .classed('set', !!_value);
93444
93445                 if (field.type === 'onewayCheck') {
93446                     reverser
93447                         .classed('hide', reverserHidden())
93448                         .call(reverserSetText);
93449                 }
93450             };
93451
93452
93453             check.focus = function() {
93454                 input.node().focus();
93455             };
93456
93457             return utilRebind(check, dispatch$1, 'on');
93458         }
93459
93460         function uiFieldCombo(field, context) {
93461             var dispatch$1 = dispatch('change');
93462             var nominatim = services$1.geocoder;
93463             var taginfo = services$1.taginfo;
93464             var isMulti = (field.type === 'multiCombo');
93465             var isNetwork = (field.type === 'networkCombo');
93466             var isSemi = (field.type === 'semiCombo');
93467             var optstrings = field.strings && field.strings.options;
93468             var optarray = field.options;
93469             var snake_case = (field.snake_case || (field.snake_case === undefined));
93470             var caseSensitive = field.caseSensitive;
93471             var combobox = uiCombobox(context, 'combo-' + field.safeid)
93472                 .caseSensitive(caseSensitive)
93473                 .minItems(isMulti || isSemi ? 1 : 2);
93474             var container = d3_select(null);
93475             var inputWrap = d3_select(null);
93476             var input = d3_select(null);
93477             var _comboData = [];
93478             var _multiData = [];
93479             var _entity;
93480             var _country;
93481
93482             // ensure multiCombo field.key ends with a ':'
93483             if (isMulti && /[^:]$/.test(field.key)) {
93484                 field.key += ':';
93485             }
93486
93487
93488             function snake(s) {
93489                 return s.replace(/\s+/g, '_');
93490             }
93491
93492             function unsnake(s) {
93493                 return s.replace(/_+/g, ' ');
93494             }
93495
93496             function clean(s) {
93497                 return s.split(';')
93498                     .map(function(s) { return s.trim(); })
93499                     .join(';');
93500             }
93501
93502
93503             // returns the tag value for a display value
93504             // (for multiCombo, dval should be the key suffix, not the entire key)
93505             function tagValue(dval) {
93506                 dval = clean(dval || '');
93507
93508                 if (optstrings) {
93509                     var found = _comboData.find(function(o) {
93510                         return o.key && clean(o.value) === dval;
93511                     });
93512                     if (found) {
93513                         return found.key;
93514                     }
93515                 }
93516
93517                 if (field.type === 'typeCombo' && !dval) {
93518                     return 'yes';
93519                 }
93520
93521                 return (snake_case ? snake(dval) : dval) || undefined;
93522             }
93523
93524
93525             // returns the display value for a tag value
93526             // (for multiCombo, tval should be the key suffix, not the entire key)
93527             function displayValue(tval) {
93528                 tval = tval || '';
93529
93530                 if (optstrings) {
93531                     var found = _comboData.find(function(o) {
93532                         return o.key === tval && o.value;
93533                     });
93534                     if (found) {
93535                         return found.value;
93536                     }
93537                 }
93538
93539                 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
93540                     return '';
93541                 }
93542
93543                 return snake_case ? unsnake(tval) : tval;
93544             }
93545
93546
93547             // Compute the difference between arrays of objects by `value` property
93548             //
93549             // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
93550             // > [{value:1}, {value:3}]
93551             //
93552             function objectDifference(a, b) {
93553                 return a.filter(function(d1) {
93554                     return !b.some(function(d2) { return d1.value === d2.value; });
93555                 });
93556             }
93557
93558
93559             function initCombo(selection, attachTo) {
93560                 if (optstrings) {
93561                     selection.attr('readonly', 'readonly');
93562                     selection.call(combobox, attachTo);
93563                     setStaticValues(setPlaceholder);
93564
93565                 } else if (optarray) {
93566                     selection.call(combobox, attachTo);
93567                     setStaticValues(setPlaceholder);
93568
93569                 } else if (taginfo) {
93570                     selection.call(combobox.fetcher(setTaginfoValues), attachTo);
93571                     setTaginfoValues('', setPlaceholder);
93572                 }
93573             }
93574
93575
93576             function setStaticValues(callback) {
93577                 if (!(optstrings || optarray)) return;
93578
93579                 if (optstrings) {
93580                     _comboData = Object.keys(optstrings).map(function(k) {
93581                         var v = field.t('options.' + k, { 'default': optstrings[k] });
93582                         return {
93583                             key: k,
93584                             value: v,
93585                             title: v
93586                         };
93587                     });
93588
93589                 } else if (optarray) {
93590                     _comboData = optarray.map(function(k) {
93591                         var v = snake_case ? unsnake(k) : k;
93592                         return {
93593                             key: k,
93594                             value: v,
93595                             title: v
93596                         };
93597                     });
93598                 }
93599
93600                 combobox.data(objectDifference(_comboData, _multiData));
93601                 if (callback) callback(_comboData);
93602             }
93603
93604
93605             function setTaginfoValues(q, callback) {
93606                 var fn = isMulti ? 'multikeys' : 'values';
93607                 var query = (isMulti ? field.key : '') + q;
93608                 var hasCountryPrefix = isNetwork && _country && _country.indexOf(q.toLowerCase()) === 0;
93609                 if (hasCountryPrefix) {
93610                     query = _country + ':';
93611                 }
93612
93613                 var params = {
93614                     debounce: (q !== ''),
93615                     key: field.key,
93616                     query: query
93617                 };
93618
93619                 if (_entity) {
93620                     params.geometry = context.geometry(_entity.id);
93621                 }
93622
93623                 taginfo[fn](params, function(err, data) {
93624                     if (err) return;
93625
93626                     var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
93627                     if (deprecatedValues) {
93628                         // don't suggest deprecated tag values
93629                         data = data.filter(function(d) {
93630                             return deprecatedValues.indexOf(d.value) === -1;
93631                         });
93632                     }
93633
93634                     if (hasCountryPrefix) {
93635                         data = data.filter(function(d) {
93636                             return d.value.toLowerCase().indexOf(_country + ':') === 0;
93637                         });
93638                     }
93639
93640                     // hide the caret if there are no suggestions
93641                     container.classed('empty-combobox', data.length === 0);
93642
93643                     _comboData = data.map(function(d) {
93644                         var k = d.value;
93645                         if (isMulti) k = k.replace(field.key, '');
93646                         var v = snake_case ? unsnake(k) : k;
93647                         return {
93648                             key: k,
93649                             value: v,
93650                             title: isMulti ? v : d.title
93651                         };
93652                     });
93653
93654                     _comboData = objectDifference(_comboData, _multiData);
93655                     if (callback) callback(_comboData);
93656                 });
93657             }
93658
93659
93660             function setPlaceholder(values) {
93661                 var ph;
93662
93663                 if (isMulti || isSemi) {
93664                     ph = field.placeholder() || t('inspector.add');
93665                 } else {
93666                     var vals = values
93667                         .map(function(d) { return d.value; })
93668                         .filter(function(s) { return s.length < 20; });
93669
93670                     var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
93671                     ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
93672                 }
93673
93674                 if (!/(…|\.\.\.)$/.test(ph)) {
93675                     ph += '…';
93676                 }
93677
93678                 container.selectAll('input')
93679                     .attr('placeholder', ph);
93680             }
93681
93682
93683             function change() {
93684                 var t = {};
93685                 var val;
93686
93687                 if (isMulti || isSemi) {
93688                     val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
93689                     container.classed('active', false);
93690                     utilGetSetValue(input, '');
93691
93692                     var vals = val.split(';').filter(Boolean);
93693                     if (!vals.length) return;
93694
93695                     if (isMulti) {
93696                         utilArrayUniq(vals).forEach(function(v) {
93697                             var key = field.key + v;
93698                             if (_entity) {
93699                                 // don't set a multicombo value to 'yes' if it already has a non-'no' value
93700                                 // e.g. `language:de=main`
93701                                 var old = _entity.tags[key] || '';
93702                                 if (old && old.toLowerCase() !== 'no') return;
93703                             }
93704                             field.keys.push(key);
93705                             t[key] = 'yes';
93706                         });
93707
93708                     } else if (isSemi) {
93709                         var arr = _multiData.map(function(d) { return d.key; });
93710                         arr = arr.concat(vals);
93711                         t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
93712                     }
93713
93714                     window.setTimeout(function() { input.node().focus(); }, 10);
93715
93716                 } else {
93717                     val = tagValue(utilGetSetValue(input));
93718                     t[field.key] = val;
93719                 }
93720
93721                 dispatch$1.call('change', this, t);
93722             }
93723
93724
93725             function removeMultikey(d) {
93726                 event.stopPropagation();
93727                 var t = {};
93728                 if (isMulti) {
93729                     t[d.key] = undefined;
93730                 } else if (isSemi) {
93731                     var arr = _multiData.map(function(md) {
93732                         return md.key === d.key ? null : md.key;
93733                     }).filter(Boolean);
93734
93735                     arr = utilArrayUniq(arr);
93736                     t[field.key] = arr.length ? arr.join(';') : undefined;
93737                 }
93738                 dispatch$1.call('change', this, t);
93739             }
93740
93741
93742             function combo(selection) {
93743                 container = selection.selectAll('.form-field-input-wrap')
93744                     .data([0]);
93745
93746                 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
93747                 container = container.enter()
93748                     .append('div')
93749                     .attr('class', 'form-field-input-wrap form-field-input-' + type)
93750                     .merge(container);
93751
93752                 if (isMulti || isSemi) {
93753                     container = container.selectAll('.chiplist')
93754                         .data([0]);
93755
93756                     var listClass = 'chiplist';
93757
93758                     // Use a separate line for each value in the Destinations field
93759                     // to mimic highway exit signs
93760                     if (field.id === 'destination_oneway') {
93761                         listClass += ' full-line-chips';
93762                     }
93763
93764                     container = container.enter()
93765                         .append('ul')
93766                         .attr('class', listClass)
93767                         .on('click', function() {
93768                             window.setTimeout(function() { input.node().focus(); }, 10);
93769                         })
93770                         .merge(container);
93771
93772
93773                     inputWrap = container.selectAll('.input-wrap')
93774                         .data([0]);
93775
93776                     inputWrap = inputWrap.enter()
93777                         .append('li')
93778                         .attr('class', 'input-wrap')
93779                         .merge(inputWrap);
93780
93781                     input = inputWrap.selectAll('input')
93782                         .data([0]);
93783                 } else {
93784                     input = container.selectAll('input')
93785                         .data([0]);
93786                 }
93787
93788                 input = input.enter()
93789                     .append('input')
93790                     .attr('type', 'text')
93791                     .attr('id', 'preset-input-' + field.safeid)
93792                     .call(utilNoAuto)
93793                     .call(initCombo, selection)
93794                     .merge(input);
93795
93796                 if (isNetwork && nominatim && _entity) {
93797                     var center = _entity.extent(context.graph()).center();
93798                     nominatim.countryCode(center, function (err, code) {
93799                         _country = code;
93800                     });
93801                 }
93802
93803                 input
93804                     .on('change', change)
93805                     .on('blur', change);
93806
93807                 input
93808                     .on('keydown.field', function() {
93809                         switch (event.keyCode) {
93810                             case 13: // ↩ Return
93811                                 input.node().blur(); // blurring also enters the value
93812                                 event.stopPropagation();
93813                                 break;
93814                         }
93815                     });
93816
93817                 if (isMulti || isSemi) {
93818                     combobox
93819                         .on('accept', function() {
93820                             input.node().blur();
93821                             input.node().focus();
93822                         });
93823
93824                     input
93825                         .on('focus', function() { container.classed('active', true); });
93826                 }
93827             }
93828
93829
93830             combo.tags = function(tags) {
93831                 if (isMulti || isSemi) {
93832                     _multiData = [];
93833
93834                     if (isMulti) {
93835                         // Build _multiData array containing keys already set..
93836                         for (var k in tags) {
93837                             if (k.indexOf(field.key) !== 0) continue;
93838                             var v = (tags[k] || '').toLowerCase();
93839                             if (v === '' || v === 'no') continue;
93840
93841                             var suffix = k.substring(field.key.length);
93842                             _multiData.push({
93843                                 key: k,
93844                                 value: displayValue(suffix)
93845                             });
93846                         }
93847
93848                         // Set keys for form-field modified (needed for undo and reset buttons)..
93849                         field.keys = _multiData.map(function(d) { return d.key; });
93850
93851                     } else if (isSemi) {
93852                         var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
93853                         _multiData = arr.map(function(k) {
93854                             return {
93855                                 key: k,
93856                                 value: displayValue(k)
93857                             };
93858                         });
93859                     }
93860
93861                     // Exclude existing multikeys from combo options..
93862                     var available = objectDifference(_comboData, _multiData);
93863                     combobox.data(available);
93864
93865                     // Hide 'Add' button if this field uses fixed set of
93866                     // translateable optstrings and they're all currently used..
93867                     container.selectAll('.combobox-input, .combobox-caret')
93868                         .classed('hide', optstrings && !available.length);
93869
93870
93871                     // Render chips
93872                     var chips = container.selectAll('.chips')
93873                         .data(_multiData);
93874
93875                     chips.exit()
93876                         .remove();
93877
93878                     var enter = chips.enter()
93879                         .insert('li', '.input-wrap')
93880                         .attr('class', 'chips');
93881
93882                     enter.append('span');
93883                     enter.append('a');
93884
93885                     chips = chips.merge(enter);
93886
93887                     chips.select('span')
93888                         .text(function(d) { return d.value; });
93889
93890                     chips.select('a')
93891                         .on('click', removeMultikey)
93892                         .attr('class', 'remove')
93893                         .text('×');
93894
93895                 } else {
93896                     utilGetSetValue(input, displayValue(tags[field.key]));
93897                 }
93898             };
93899
93900
93901             combo.focus = function() {
93902                 input.node().focus();
93903             };
93904
93905
93906             combo.entity = function(val) {
93907                 if (!arguments.length) return _entity;
93908                 _entity = val;
93909                 return combo;
93910             };
93911
93912
93913             return utilRebind(combo, dispatch$1, 'on');
93914         }
93915
93916         function uiFieldText(field, context) {
93917             var dispatch$1 = dispatch('change');
93918             var nominatim = services$1.geocoder;
93919             var input = d3_select(null);
93920             var _entity;
93921
93922             function i(selection) {
93923                 var preset = _entity && context.presets().match(_entity, context.graph());
93924                 var isLocked = preset && preset.suggestion && field.id === 'brand';
93925                 field.locked(isLocked);
93926
93927                 var wrap = selection.selectAll('.form-field-input-wrap')
93928                     .data([0]);
93929
93930                 wrap = wrap.enter()
93931                     .append('div')
93932                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
93933                     .merge(wrap);
93934
93935                 var fieldID = 'preset-input-' + field.safeid;
93936
93937                 input = wrap.selectAll('input')
93938                     .data([0]);
93939
93940                 input = input.enter()
93941                     .append('input')
93942                     .attr('type', field.type)
93943                     .attr('id', fieldID)
93944                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
93945                     .classed(field.type, true)
93946                     .call(utilNoAuto)
93947                     .merge(input);
93948
93949                 input
93950                     .classed('disabled', !!isLocked)
93951                     .attr('readonly', isLocked || null)
93952                     .on('input', change(true))
93953                     .on('blur', change())
93954                     .on('change', change());
93955
93956
93957                 if (field.type === 'tel' && nominatim && _entity) {
93958                     var center = _entity.extent(context.graph()).center();
93959                     nominatim.countryCode(center, function (err, countryCode) {
93960                         if (err || !dataPhoneFormats[countryCode]) return;
93961                         wrap.selectAll('#' + fieldID)
93962                             .attr('placeholder', dataPhoneFormats[countryCode]);
93963                     });
93964
93965                 } else if (field.type === 'number') {
93966                     var rtl = (textDirection === 'rtl');
93967
93968                     input.attr('type', 'text');
93969
93970                     var buttons = wrap.selectAll('.increment, .decrement')
93971                         .data(rtl ? [1, -1] : [-1, 1]);
93972
93973                     buttons.enter()
93974                         .append('button')
93975                         .attr('tabindex', -1)
93976                         .attr('class', function(d) {
93977                             var which = (d === 1 ? 'increment' : 'decrement');
93978                             return 'form-field-button ' + which;
93979                         })
93980                         .merge(buttons)
93981                         .on('click', function(d) {
93982                             event.preventDefault();
93983                             var raw_vals = input.node().value || '0';
93984                             var vals = raw_vals.split(';');
93985                             vals = vals.map(function(v) {
93986                                 var num = parseFloat(v.trim(), 10);
93987                                 return isFinite(num) ? clamped(num + d) : v.trim();
93988                             });
93989                             input.node().value = vals.join(';');
93990                             change()();
93991                         });
93992                 }
93993             }
93994
93995
93996             // clamp number to min/max
93997             function clamped(num) {
93998                 if (field.minValue !== undefined) {
93999                     num = Math.max(num, field.minValue);
94000                 }
94001                 if (field.maxValue !== undefined) {
94002                     num = Math.min(num, field.maxValue);
94003                 }
94004                 return num;
94005             }
94006
94007
94008             function change(onInput) {
94009                 return function() {
94010                     var t = {};
94011                     var val = utilGetSetValue(input).trim() || undefined;
94012
94013                     if (!onInput) {
94014                         if (field.type === 'number' && val !== undefined) {
94015                             var vals = val.split(';');
94016                             vals = vals.map(function(v) {
94017                                 var num = parseFloat(v.trim(), 10);
94018                                 return isFinite(num) ? clamped(num) : v.trim();
94019                             });
94020                             val = vals.join(';');
94021                         }
94022                         utilGetSetValue(input, val || '');
94023                     }
94024                     t[field.key] = val;
94025                     dispatch$1.call('change', this, t, onInput);
94026                 };
94027             }
94028
94029
94030             i.entity = function(val) {
94031                 if (!arguments.length) return _entity;
94032                 _entity = val;
94033                 return i;
94034             };
94035
94036
94037             i.tags = function(tags) {
94038                 utilGetSetValue(input, tags[field.key] || '');
94039             };
94040
94041
94042             i.focus = function() {
94043                 var node = input.node();
94044                 if (node) node.focus();
94045             };
94046
94047             return utilRebind(i, dispatch$1, 'on');
94048         }
94049
94050         function uiFieldAccess(field, context) {
94051             var dispatch$1 = dispatch('change');
94052             var items = d3_select(null);
94053
94054             function access(selection) {
94055                 var wrap = selection.selectAll('.form-field-input-wrap')
94056                     .data([0]);
94057
94058                 wrap = wrap.enter()
94059                     .append('div')
94060                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94061                     .merge(wrap);
94062
94063                 var list = wrap.selectAll('ul')
94064                     .data([0]);
94065
94066                 list = list.enter()
94067                     .append('ul')
94068                     .attr('class', 'rows')
94069                     .merge(list);
94070
94071
94072                 items = list.selectAll('li')
94073                     .data(field.keys);
94074
94075                 // Enter
94076                 var enter = items.enter()
94077                     .append('li')
94078                     .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
94079
94080                 enter
94081                     .append('span')
94082                     .attr('class', 'label preset-label-access')
94083                     .attr('for', function(d) { return 'preset-input-access-' + d; })
94084                     .text(function(d) { return field.t('types.' + d); });
94085
94086                 enter
94087                     .append('div')
94088                     .attr('class', 'preset-input-access-wrap')
94089                     .append('input')
94090                     .attr('type', 'text')
94091                     .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
94092                     .call(utilNoAuto)
94093                     .each(function(d) {
94094                         d3_select(this)
94095                             .call(uiCombobox(context, 'access-' + d)
94096                                 .data(access.options(d))
94097                             );
94098                     });
94099
94100
94101                 // Update
94102                 items = items.merge(enter);
94103
94104                 wrap.selectAll('.preset-input-access')
94105                     .on('change', change)
94106                     .on('blur', change);
94107             }
94108
94109
94110             function change(d) {
94111                 var tag = {};
94112                 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
94113                 dispatch$1.call('change', this, tag);
94114             }
94115
94116
94117             access.options = function(type) {
94118                 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
94119
94120                 if (type !== 'access') {
94121                     options.unshift('yes');
94122                     options.push('designated');
94123
94124                     if (type === 'bicycle') {
94125                         options.push('dismount');
94126                     }
94127                 }
94128
94129                 return options.map(function(option) {
94130                     return {
94131                         title: field.t('options.' + option + '.description'),
94132                         value: option
94133                     };
94134                 });
94135             };
94136
94137
94138             var placeholders = {
94139                 footway: {
94140                     foot: 'designated',
94141                     motor_vehicle: 'no'
94142                 },
94143                 steps: {
94144                     foot: 'yes',
94145                     motor_vehicle: 'no',
94146                     bicycle: 'no',
94147                     horse: 'no'
94148                 },
94149                 pedestrian: {
94150                     foot: 'yes',
94151                     motor_vehicle: 'no'
94152                 },
94153                 cycleway: {
94154                     motor_vehicle: 'no',
94155                     bicycle: 'designated'
94156                 },
94157                 bridleway: {
94158                     motor_vehicle: 'no',
94159                     horse: 'designated'
94160                 },
94161                 path: {
94162                     foot: 'yes',
94163                     motor_vehicle: 'no',
94164                     bicycle: 'yes',
94165                     horse: 'yes'
94166                 },
94167                 motorway: {
94168                     foot: 'no',
94169                     motor_vehicle: 'yes',
94170                     bicycle: 'no',
94171                     horse: 'no'
94172                 },
94173                 trunk: {
94174                     motor_vehicle: 'yes'
94175                 },
94176                 primary: {
94177                     foot: 'yes',
94178                     motor_vehicle: 'yes',
94179                     bicycle: 'yes',
94180                     horse: 'yes'
94181                 },
94182                 secondary: {
94183                     foot: 'yes',
94184                     motor_vehicle: 'yes',
94185                     bicycle: 'yes',
94186                     horse: 'yes'
94187                 },
94188                 tertiary: {
94189                     foot: 'yes',
94190                     motor_vehicle: 'yes',
94191                     bicycle: 'yes',
94192                     horse: 'yes'
94193                 },
94194                 residential: {
94195                     foot: 'yes',
94196                     motor_vehicle: 'yes',
94197                     bicycle: 'yes',
94198                     horse: 'yes'
94199                 },
94200                 unclassified: {
94201                     foot: 'yes',
94202                     motor_vehicle: 'yes',
94203                     bicycle: 'yes',
94204                     horse: 'yes'
94205                 },
94206                 service: {
94207                     foot: 'yes',
94208                     motor_vehicle: 'yes',
94209                     bicycle: 'yes',
94210                     horse: 'yes'
94211                 },
94212                 motorway_link: {
94213                     foot: 'no',
94214                     motor_vehicle: 'yes',
94215                     bicycle: 'no',
94216                     horse: 'no'
94217                 },
94218                 trunk_link: {
94219                     motor_vehicle: 'yes'
94220                 },
94221                 primary_link: {
94222                     foot: 'yes',
94223                     motor_vehicle: 'yes',
94224                     bicycle: 'yes',
94225                     horse: 'yes'
94226                 },
94227                 secondary_link: {
94228                     foot: 'yes',
94229                     motor_vehicle: 'yes',
94230                     bicycle: 'yes',
94231                     horse: 'yes'
94232                 },
94233                 tertiary_link: {
94234                     foot: 'yes',
94235                     motor_vehicle: 'yes',
94236                     bicycle: 'yes',
94237                     horse: 'yes'
94238                 }
94239             };
94240
94241
94242             access.tags = function(tags) {
94243                 utilGetSetValue(items.selectAll('.preset-input-access'),
94244                     function(d) { return tags[d] || ''; })
94245                     .attr('placeholder', function() {
94246                         return tags.access ? tags.access : field.placeholder();
94247                     });
94248
94249                 items.selectAll('.preset-input-access-access')
94250                     .attr('placeholder', 'yes');
94251
94252                 var which = tags.highway;
94253                 if (!placeholders[which]) return;
94254
94255                 var keys = Object.keys(placeholders[which]);
94256                 keys.forEach(function(k) {
94257                     var v = placeholders[which][k];
94258                     items.selectAll('.preset-input-access-' + k)
94259                         .attr('placeholder', tags.access || v);
94260                 });
94261             };
94262
94263
94264             access.focus = function() {
94265                 items.selectAll('.preset-input-access')
94266                     .node().focus();
94267             };
94268
94269
94270             return utilRebind(access, dispatch$1, 'on');
94271         }
94272
94273         function uiFieldAddress(field, context) {
94274             var dispatch$1 = dispatch('init', 'change');
94275             var nominatim = services$1.geocoder;
94276             var wrap = d3_select(null);
94277             var _isInitialized = false;
94278             var _entity;
94279             // needed for placeholder strings
94280             var addrField = context.presets().field('address');
94281
94282             function getNearStreets() {
94283                 var extent = _entity.extent(context.graph());
94284                 var l = extent.center();
94285                 var box = geoExtent(l).padByMeters(200);
94286
94287                 var streets = context.intersects(box)
94288                     .filter(isAddressable)
94289                     .map(function(d) {
94290                         var loc = context.projection([
94291                             (extent[0][0] + extent[1][0]) / 2,
94292                             (extent[0][1] + extent[1][1]) / 2
94293                         ]);
94294                         var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
94295
94296                         return {
94297                             title: d.tags.name,
94298                             value: d.tags.name,
94299                             dist: choice.distance
94300                         };
94301                     })
94302                     .sort(function(a, b) {
94303                         return a.dist - b.dist;
94304                     });
94305
94306                 return utilArrayUniqBy(streets, 'value');
94307
94308                 function isAddressable(d) {
94309                     return d.tags.highway && d.tags.name && d.type === 'way';
94310                 }
94311             }
94312
94313
94314             function getNearCities() {
94315                 var extent = _entity.extent(context.graph());
94316                 var l = extent.center();
94317                 var box = geoExtent(l).padByMeters(200);
94318
94319                 var cities = context.intersects(box)
94320                     .filter(isAddressable)
94321                     .map(function(d) {
94322                         return {
94323                             title: d.tags['addr:city'] || d.tags.name,
94324                             value: d.tags['addr:city'] || d.tags.name,
94325                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
94326                         };
94327                     })
94328                     .sort(function(a, b) {
94329                         return a.dist - b.dist;
94330                     });
94331
94332                 return utilArrayUniqBy(cities, 'value');
94333
94334
94335                 function isAddressable(d) {
94336                     if (d.tags.name) {
94337                         if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
94338                             return true;
94339                         if (d.tags.border_type === 'city')
94340                             return true;
94341                         if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
94342                             return true;
94343                     }
94344
94345                     if (d.tags['addr:city'])
94346                         return true;
94347
94348                     return false;
94349                 }
94350             }
94351
94352             function getNearValues(key) {
94353                 var extent = _entity.extent(context.graph());
94354                 var l = extent.center();
94355                 var box = geoExtent(l).padByMeters(200);
94356
94357                 var results = context.intersects(box)
94358                     .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
94359                     .map(function(d) {
94360                         return {
94361                             title: d.tags[key],
94362                             value: d.tags[key],
94363                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
94364                         };
94365                     })
94366                     .sort(function(a, b) {
94367                         return a.dist - b.dist;
94368                     });
94369
94370                 return utilArrayUniqBy(results, 'value');
94371             }
94372
94373
94374             function countryCallback(err, countryCode) {
94375                 if (err) return;
94376                 countryCode = countryCode.toLowerCase();
94377
94378                 var addressFormat;
94379                 for (var i = 0; i < dataAddressFormats.length; i++) {
94380                     var format = dataAddressFormats[i];
94381                     if (!format.countryCodes) {
94382                         addressFormat = format;   // choose the default format, keep going
94383                     } else if (format.countryCodes.indexOf(countryCode) !== -1) {
94384                         addressFormat = format;   // choose the country format, stop here
94385                         break;
94386                     }
94387                 }
94388
94389                 var dropdowns = addressFormat.dropdowns || [
94390                     'city', 'county', 'country', 'district', 'hamlet',
94391                     'neighbourhood', 'place', 'postcode', 'province',
94392                     'quarter', 'state', 'street', 'subdistrict', 'suburb'
94393                 ];
94394
94395                 var widths = addressFormat.widths || {
94396                     housenumber: 1/3, street: 2/3,
94397                     city: 2/3, state: 1/4, postcode: 1/3
94398                 };
94399
94400                 function row(r) {
94401                     // Normalize widths.
94402                     var total = r.reduce(function(sum, key) {
94403                         return sum + (widths[key] || 0.5);
94404                     }, 0);
94405
94406                     return r.map(function(key) {
94407                         return {
94408                             id: key,
94409                             width: (widths[key] || 0.5) / total
94410                         };
94411                     });
94412                 }
94413
94414                 wrap.selectAll('.addr-row')
94415                     .data(addressFormat.format)
94416                     .enter()
94417                     .append('div')
94418                     .attr('class', 'addr-row')
94419                     .selectAll('input')
94420                     .data(row)
94421                     .enter()
94422                     .append('input')
94423                     .property('type', 'text')
94424                     .attr('placeholder', function (d) {
94425                         var localkey = d.id + '!' + countryCode;
94426                         var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id;
94427                         return addrField.t('placeholders.' + tkey);
94428                     })
94429                     .attr('class', function (d) { return 'addr-' + d.id; })
94430                     .call(utilNoAuto)
94431                     .each(addDropdown)
94432                     .style('width', function (d) { return d.width * 100 + '%'; });
94433
94434
94435                 function addDropdown(d) {
94436                     if (dropdowns.indexOf(d.id) === -1) return;  // not a dropdown
94437
94438                     var nearValues = (d.id === 'street') ? getNearStreets
94439                         : (d.id === 'city') ? getNearCities
94440                         : getNearValues;
94441
94442                     d3_select(this)
94443                         .call(uiCombobox(context, 'address-' + d.id)
94444                             .minItems(1)
94445                             .caseSensitive(true)
94446                             .fetcher(function(value, callback) {
94447                                 callback(nearValues('addr:' + d.id));
94448                             })
94449                         );
94450                 }
94451
94452                 wrap.selectAll('input')
94453                     .on('blur', change())
94454                     .on('change', change());
94455
94456                 wrap.selectAll('input:not(.combobox-input)')
94457                     .on('input', change(true));
94458
94459                 dispatch$1.call('init');
94460                 _isInitialized = true;
94461             }
94462
94463
94464             function address(selection) {
94465                 _isInitialized = false;
94466
94467                 wrap = selection.selectAll('.form-field-input-wrap')
94468                     .data([0]);
94469
94470                 wrap = wrap.enter()
94471                     .append('div')
94472                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94473                     .merge(wrap);
94474
94475                 if (nominatim && _entity) {
94476                     var center = _entity.extent(context.graph()).center();
94477                     nominatim.countryCode(center, countryCallback);
94478                 }
94479             }
94480
94481
94482             function change(onInput) {
94483                 return function() {
94484                     var tags = {};
94485
94486                     wrap.selectAll('input')
94487                         .each(function (subfield) {
94488                             tags[field.key + ':' + subfield.id] = this.value || undefined;
94489                         });
94490
94491                     dispatch$1.call('change', this, tags, onInput);
94492                 };
94493             }
94494
94495
94496             function updateTags(tags) {
94497                 utilGetSetValue(wrap.selectAll('input'), function (subfield) {
94498                     return tags[field.key + ':' + subfield.id] || '';
94499                 });
94500             }
94501
94502
94503             address.entity = function(val) {
94504                 if (!arguments.length) return _entity;
94505                 _entity = val;
94506                 return address;
94507             };
94508
94509
94510             address.tags = function(tags) {
94511                 if (_isInitialized) {
94512                     updateTags(tags);
94513                 } else {
94514                     dispatch$1.on('init', function () {
94515                         dispatch$1.on('init', null);
94516                         updateTags(tags);
94517                     });
94518                 }
94519             };
94520
94521
94522             address.focus = function() {
94523                 var node = wrap.selectAll('input').node();
94524                 if (node) node.focus();
94525             };
94526
94527
94528             return utilRebind(address, dispatch$1, 'on');
94529         }
94530
94531         function uiFieldCycleway(field, context) {
94532             var dispatch$1 = dispatch('change');
94533             var items = d3_select(null);
94534             var wrap = d3_select(null);
94535
94536             function cycleway(selection) {
94537
94538                 function stripcolon(s) {
94539                     return s.replace(':', '');
94540                 }
94541
94542
94543                 wrap = selection.selectAll('.form-field-input-wrap')
94544                     .data([0]);
94545
94546                 wrap = wrap.enter()
94547                     .append('div')
94548                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94549                     .merge(wrap);
94550
94551
94552                 var div = wrap.selectAll('ul')
94553                     .data([0]);
94554
94555                 div = div.enter()
94556                     .append('ul')
94557                     .attr('class', 'rows')
94558                     .merge(div);
94559
94560                 var keys = ['cycleway:left', 'cycleway:right'];
94561
94562                 items = div.selectAll('li')
94563                     .data(keys);
94564
94565                 var enter = items.enter()
94566                     .append('li')
94567                     .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
94568
94569                 enter
94570                     .append('span')
94571                     .attr('class', 'label preset-label-cycleway')
94572                     .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
94573                     .text(function(d) { return field.t('types.' + d); });
94574
94575                 enter
94576                     .append('div')
94577                     .attr('class', 'preset-input-cycleway-wrap')
94578                     .append('input')
94579                     .attr('type', 'text')
94580                     .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
94581                     .call(utilNoAuto)
94582                     .each(function(d) {
94583                         d3_select(this)
94584                             .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
94585                                 .data(cycleway.options(d))
94586                             );
94587                     });
94588
94589                 items = items.merge(enter);
94590
94591                 // Update
94592                 wrap.selectAll('.preset-input-cycleway')
94593                     .on('change', change)
94594                     .on('blur', change);
94595             }
94596
94597
94598             function change() {
94599                 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
94600                 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
94601                 var tag = {};
94602
94603                 if (left === 'none' || left === '') { left = undefined; }
94604                 if (right === 'none' || right === '') { right = undefined; }
94605
94606                 // Always set both left and right as changing one can affect the other
94607                 tag = {
94608                     cycleway: undefined,
94609                     'cycleway:left': left,
94610                     'cycleway:right': right
94611                 };
94612
94613                 // If the left and right tags match, use the cycleway tag to tag both
94614                 // sides the same way
94615                 if (left === right) {
94616                     tag = {
94617                         cycleway: left,
94618                         'cycleway:left': undefined,
94619                         'cycleway:right': undefined
94620                     };
94621                 }
94622
94623                 dispatch$1.call('change', this, tag);
94624             }
94625
94626
94627             cycleway.options = function() {
94628                 return Object.keys(field.strings.options).map(function(option) {
94629                     return {
94630                         title: field.t('options.' + option + '.description'),
94631                         value: option
94632                     };
94633                 });
94634             };
94635
94636
94637             cycleway.tags = function(tags) {
94638                 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
94639                         // If cycleway is set, always return that
94640                         if (tags.cycleway) {
94641                             return tags.cycleway;
94642                         }
94643                         return tags[d] || '';
94644                     })
94645                     .attr('placeholder', field.placeholder());
94646             };
94647
94648
94649             cycleway.focus = function() {
94650                 var node = wrap.selectAll('input').node();
94651                 if (node) node.focus();
94652             };
94653
94654
94655             return utilRebind(cycleway, dispatch$1, 'on');
94656         }
94657
94658         function uiFieldLanes(field, context) {
94659             var dispatch$1 = dispatch('change');
94660             var LANE_WIDTH = 40;
94661             var LANE_HEIGHT = 200;
94662             var _entityID;
94663
94664             function lanes(selection) {
94665                 var lanesData = context.entity(_entityID).lanes();
94666
94667                 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
94668                     selection.call(lanes.off);
94669                     return;
94670                 }
94671
94672                 var wrap = selection.selectAll('.form-field-input-wrap')
94673                     .data([0]);
94674
94675                 wrap = wrap.enter()
94676                     .append('div')
94677                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94678                     .merge(wrap);
94679
94680                 var surface =  wrap.selectAll('.surface')
94681                     .data([0]);
94682
94683                 var d = utilGetDimensions(wrap);
94684                 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
94685
94686                 surface = surface.enter()
94687                     .append('svg')
94688                     .attr('width', d[0])
94689                     .attr('height', 300)
94690                     .attr('class', 'surface')
94691                     .merge(surface);
94692
94693
94694                 var lanesSelection = surface.selectAll('.lanes')
94695                     .data([0]);
94696
94697                 lanesSelection = lanesSelection.enter()
94698                     .append('g')
94699                     .attr('class', 'lanes')
94700                     .merge(lanesSelection);
94701
94702                 lanesSelection
94703                     .attr('transform', function () {
94704                         return 'translate(' + (freeSpace / 2) + ', 0)';
94705                     });
94706
94707
94708                 var lane = lanesSelection.selectAll('.lane')
94709                    .data(lanesData.lanes);
94710
94711                 lane.exit()
94712                     .remove();
94713
94714                 var enter = lane.enter()
94715                     .append('g')
94716                     .attr('class', 'lane');
94717
94718                 enter
94719                     .append('g')
94720                     .append('rect')
94721                     .attr('y', 50)
94722                     .attr('width', LANE_WIDTH)
94723                     .attr('height', LANE_HEIGHT);
94724
94725                 enter
94726                     .append('g')
94727                     .attr('class', 'forward')
94728                     .append('text')
94729                     .attr('y', 40)
94730                     .attr('x', 14)
94731                     .text('▲');
94732
94733                 enter
94734                     .append('g')
94735                     .attr('class', 'bothways')
94736                     .append('text')
94737                     .attr('y', 40)
94738                     .attr('x', 14)
94739                     .text('▲▼');
94740
94741                 enter
94742                     .append('g')
94743                     .attr('class', 'backward')
94744                     .append('text')
94745                     .attr('y', 40)
94746                     .attr('x', 14)
94747                     .text('▼');
94748
94749
94750                 lane = lane
94751                     .merge(enter);
94752
94753                 lane
94754                     .attr('transform', function(d) {
94755                         return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
94756                     });
94757
94758                 lane.select('.forward')
94759                     .style('visibility', function(d) {
94760                         return d.direction === 'forward' ? 'visible' : 'hidden';
94761                     });
94762
94763                 lane.select('.bothways')
94764                     .style('visibility', function(d) {
94765                         return d.direction === 'bothways' ? 'visible' : 'hidden';
94766                     });
94767
94768                 lane.select('.backward')
94769                     .style('visibility', function(d) {
94770                         return d.direction === 'backward' ? 'visible' : 'hidden';
94771                     });
94772             }
94773
94774
94775             lanes.entity = function(val) {
94776                 if (!_entityID || _entityID !== val.id) {
94777                     _entityID = val.id;
94778                 }
94779             };
94780
94781             lanes.tags = function() {};
94782             lanes.focus = function() {};
94783             lanes.off = function() {};
94784
94785             return utilRebind(lanes, dispatch$1, 'on');
94786         }
94787
94788         var languagesArray = [];
94789         function loadLanguagesArray() {
94790             if (languagesArray.length !== 0) return;
94791
94792             // some conversion is needed to ensure correct OSM tags are used
94793             var replacements = {
94794                 sr: 'sr-Cyrl',      // in OSM, `sr` implies Cyrillic
94795                 'sr-Cyrl': false    // `sr-Cyrl` isn't used in OSM
94796             };
94797
94798             for (var code in dataLanguages) {
94799                 if (replacements[code] === false) continue;
94800                 var metaCode = code;
94801                 if (replacements[code]) metaCode = replacements[code];
94802
94803                 languagesArray.push({
94804                     localName: languageName(metaCode, { localOnly: true }),
94805                     nativeName: dataLanguages[metaCode].nativeName,
94806                     code: code,
94807                     label: languageName(metaCode)
94808                 });
94809             }
94810         }
94811
94812
94813         function uiFieldLocalized(field, context) {
94814             var dispatch$1 = dispatch('change', 'input');
94815             var wikipedia = services$1.wikipedia;
94816             var input = d3_select(null);
94817             var localizedInputs = d3_select(null);
94818             var _countryCode;
94819
94820             var allSuggestions = context.presets().collection.filter(function(p) {
94821                 return p.suggestion === true;
94822             });
94823
94824             // reuse these combos
94825             var langCombo = uiCombobox(context, 'localized-lang')
94826                 .fetcher(fetchLanguages)
94827                 .minItems(0);
94828
94829             var brandCombo = uiCombobox(context, 'localized-brand')
94830                 .canAutocomplete(false)
94831                 .minItems(1);
94832
94833             var _selection = d3_select(null);
94834             var _multilingual = [];
94835             var _buttonTip = tooltip()
94836                 .title(t('translate.translate'))
94837                 .placement('left');
94838             var _wikiTitles;
94839             var _entity;
94840
94841
94842             function calcLocked() {
94843                 if (!_entity) {    // the original entity
94844                     field.locked(false);
94845                     return;
94846                 }
94847
94848                 var latest = context.hasEntity(_entity.id);
94849                 if (!latest) {    // get current entity, possibly edited
94850                     field.locked(false);
94851                     return;
94852                 }
94853
94854                 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
94855                 var hasWikidata = latest.tags.wikidata || latest.tags['name:etymology:wikidata'];
94856                 var preset = context.presets().match(latest, context.graph());
94857                 var isSuggestion = preset && preset.suggestion;
94858                 var showsBrand = preset && preset.fields
94859                     .filter(function(d) { return d.id === 'brand'; }).length;
94860
94861                 var isLocked = !!(field.id === 'name' && hasOriginalName &&
94862                     (hasWikidata || (isSuggestion && !showsBrand)));
94863
94864                 field.locked(isLocked);
94865             }
94866
94867             // update _multilingual, maintaining the existing order
94868             function calcMultilingual(tags) {
94869                 var existingLangsOrdered = _multilingual.map(function(item) {
94870                     return item.lang;
94871                 });
94872                 var existingLangs = new Set(existingLangsOrdered.filter(Boolean));
94873
94874                 for (var k in tags) {
94875                     var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
94876                     if (m && m[1] === field.key && m[2]) {
94877                         var item = { lang: m[2], value: tags[k] };
94878                         if (existingLangs.has(item.lang)) {
94879                             // update the value
94880                             _multilingual[existingLangsOrdered.indexOf(item.lang)].value = item.value;
94881                             existingLangs.delete(item.lang);
94882                         } else {
94883                             _multilingual.push(item);
94884                         }
94885                     }
94886                 }
94887
94888                 _multilingual = _multilingual.filter(function(item) {
94889                     return !item.lang || !existingLangs.has(item.lang);
94890                 });
94891             }
94892
94893
94894             function localized(selection) {
94895                 // load if needed
94896                 loadLanguagesArray();
94897
94898                 _selection = selection;
94899                 calcLocked();
94900                 var isLocked = field.locked();
94901                 var entity = _entity && context.hasEntity(_entity.id);  // get latest
94902                 var preset = entity && context.presets().match(entity, context.graph());
94903
94904                 var wrap = selection.selectAll('.form-field-input-wrap')
94905                     .data([0]);
94906
94907                 // enter/update
94908                 wrap = wrap.enter()
94909                     .append('div')
94910                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
94911                     .merge(wrap);
94912
94913                 input = wrap.selectAll('.localized-main')
94914                     .data([0]);
94915
94916                 // enter/update
94917                 input = input.enter()
94918                     .append('input')
94919                     .attr('type', 'text')
94920                     .attr('id', 'preset-input-' + field.safeid)
94921                     .attr('class', 'localized-main')
94922                     .attr('placeholder', field.placeholder())
94923                     .call(utilNoAuto)
94924                     .merge(input);
94925
94926                 if (preset && field.id === 'name') {
94927                     var pTag = preset.id.split('/', 2);
94928                     var pKey = pTag[0];
94929                     var pValue = pTag[1];
94930
94931                     if (!preset.suggestion) {
94932                         // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
94933                         // This code attempts to determine if the matched preset is the
94934                         // kind of preset that even can benefit from name suggestions..
94935                         // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
94936                         // - false = churches, parks, hospitals, etc. (things not in the index)
94937                         var isFallback = preset.isFallback();
94938                         var goodSuggestions = allSuggestions.filter(function(s) {
94939                             if (isFallback) return true;
94940                             var sTag = s.id.split('/', 2);
94941                             var sKey = sTag[0];
94942                             var sValue = sTag[1];
94943                             return pKey === sKey && (!pValue || pValue === sValue);
94944                         });
94945
94946                         // Show the suggestions.. If the user picks one, change the tags..
94947                         if (allSuggestions.length && goodSuggestions.length) {
94948                             input
94949                                 .on('blur.localized', checkBrandOnBlur)
94950                                 .call(brandCombo
94951                                     .fetcher(fetchBrandNames(preset, allSuggestions))
94952                                     .on('accept', acceptBrand)
94953                                     .on('cancel', cancelBrand)
94954                                 );
94955                         }
94956                     }
94957                 }
94958
94959                 input
94960                     .classed('disabled', !!isLocked)
94961                     .attr('readonly', isLocked || null)
94962                     .on('input', change(true))
94963                     .on('blur', change())
94964                     .on('change', change());
94965
94966
94967                 var translateButton = wrap.selectAll('.localized-add')
94968                     .data([0]);
94969
94970                 translateButton = translateButton.enter()
94971                     .append('button')
94972                     .attr('class', 'localized-add form-field-button')
94973                     .attr('tabindex', -1)
94974                     .call(svgIcon('#iD-icon-plus'))
94975                     .merge(translateButton);
94976
94977                 translateButton
94978                     .classed('disabled', !!isLocked)
94979                     .call(isLocked ? _buttonTip.destroy : _buttonTip)
94980                     .on('click', addNew);
94981
94982
94983                 if (entity && !_multilingual.length) {
94984                     calcMultilingual(entity.tags);
94985                 }
94986
94987                 localizedInputs = selection.selectAll('.localized-multilingual')
94988                     .data([0]);
94989
94990                 localizedInputs = localizedInputs.enter()
94991                     .append('div')
94992                     .attr('class', 'localized-multilingual')
94993                     .merge(localizedInputs);
94994
94995                 localizedInputs
94996                     .call(renderMultilingual);
94997
94998                 localizedInputs.selectAll('button, input')
94999                     .classed('disabled', !!isLocked)
95000                     .attr('readonly', isLocked || null);
95001
95002
95003
95004                 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
95005                 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
95006                 // So compare the current field value against the suggestions one last time.
95007                 function checkBrandOnBlur() {
95008                     var latest = context.hasEntity(_entity.id);
95009                     if (!latest) return;   // deleting the entity blurred the field?
95010
95011                     var preset = context.presets().match(latest, context.graph());
95012                     if (preset && preset.suggestion) return;   // already accepted
95013
95014                     // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
95015                     var name = utilGetSetValue(input).trim();
95016                     var matched = allSuggestions.filter(function(s) { return name === s.name(); });
95017
95018                     if (matched.length === 1) {
95019                         acceptBrand({ suggestion: matched[0] });
95020                     } else {
95021                         cancelBrand();
95022                     }
95023                 }
95024
95025
95026                 function acceptBrand(d) {
95027                     if (!d) {
95028                         cancelBrand();
95029                         return;
95030                     }
95031
95032                     var entity = context.entity(_entity.id);  // get latest
95033                     var tags = entity.tags;
95034                     var geometry = entity.geometry(context.graph());
95035                     var removed = preset.unsetTags(tags, geometry);
95036                     for (var k in tags) {
95037                         tags[k] = removed[k];  // set removed tags to `undefined`
95038                     }
95039                     tags = d.suggestion.setTags(tags, geometry);
95040                     utilGetSetValue(input, tags.name);
95041                     dispatch$1.call('change', this, tags);
95042                 }
95043
95044
95045                 // user hit escape, clean whatever preset name appears after the last ' – '
95046                 function cancelBrand() {
95047                     var name = utilGetSetValue(input);
95048                     var clean = cleanName(name);
95049                     if (clean !== name) {
95050                         utilGetSetValue(input, clean);
95051                         dispatch$1.call('change', this, { name: clean });
95052                     }
95053                 }
95054
95055                 // Remove whatever is after the last ' – '
95056                 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
95057                 function cleanName(name) {
95058                     var parts = name.split(' – ');
95059                     if (parts.length > 1) {
95060                         parts.pop();
95061                         name = parts.join(' – ');
95062                     }
95063                     return name;
95064                 }
95065
95066
95067                 function fetchBrandNames(preset, suggestions) {
95068                     var pTag = preset.id.split('/', 2);
95069                     var pKey = pTag[0];
95070                     var pValue = pTag[1];
95071
95072                     return function(value, callback) {
95073                         var results = [];
95074                         if (value && value.length > 2) {
95075                             for (var i = 0; i < suggestions.length; i++) {
95076                                 var s = suggestions[i];
95077                                 var sTag = s.id.split('/', 2);
95078                                 var sKey = sTag[0];
95079                                 var sValue = sTag[1];
95080                                 var name = s.name();
95081                                 var dist = utilEditDistance(value, name.substring(0, value.length));
95082                                 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
95083
95084                                 if (dist < 1 || (matchesPreset && dist < 3)) {
95085                                     var obj = {
95086                                         title: name,
95087                                         value: name,
95088                                         suggestion: s,
95089                                         dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
95090                                     };
95091                                     results.push(obj);
95092                                 }
95093                             }
95094                             results.sort(function(a, b) { return a.dist - b.dist; });
95095                         }
95096                         results = results.slice(0, 10);
95097                         callback(results);
95098                     };
95099                 }
95100
95101
95102                 function addNew() {
95103                     event.preventDefault();
95104                     if (field.locked()) return;
95105
95106                     var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
95107                     var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
95108                     var isLangEn = defaultLang.indexOf('en') > -1;
95109                     if (isLangEn || langExists) {
95110                         defaultLang = '';
95111                         langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
95112                     }
95113
95114                     if (!langExists) {
95115                         // prepend the value so it appears at the top
95116                         _multilingual.unshift({ lang: defaultLang, value: '' });
95117
95118                         localizedInputs
95119                             .call(renderMultilingual);
95120                     }
95121                 }
95122
95123
95124                 function change(onInput) {
95125                     return function() {
95126                         if (field.locked()) {
95127                             event.preventDefault();
95128                             return;
95129                         }
95130                         var t = {};
95131                         t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
95132                         dispatch$1.call('change', this, t, onInput);
95133                     };
95134                 }
95135             }
95136
95137
95138             function key(lang) {
95139                 return field.key + ':' + lang;
95140             }
95141
95142
95143             function changeLang(d) {
95144                 var lang = utilGetSetValue(d3_select(this));
95145                 var t = {};
95146                 var language = languagesArray.find(function(d) {
95147                     return (d.localName && d.localName.toLowerCase() === lang.toLowerCase()) ||
95148                         d.label.toLowerCase() === lang.toLowerCase() ||
95149                         (d.nativeName && d.nativeName.toLowerCase() === lang.toLowerCase());
95150                 });
95151
95152                 if (language) lang = language.code;
95153
95154                 if (d.lang && d.lang !== lang) {
95155                     t[key(d.lang)] = undefined;
95156                 }
95157
95158                 var value = utilGetSetValue(d3_select(this.parentNode)
95159                     .selectAll('.localized-value'));
95160
95161                 if (lang && value) {
95162                     t[key(lang)] = value;
95163                 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
95164                     t[key(lang)] = _wikiTitles[d.lang];
95165                 }
95166
95167                 d.lang = lang;
95168                 dispatch$1.call('change', this, t);
95169             }
95170
95171
95172             function changeValue(d) {
95173                 if (!d.lang) return;
95174                 var value = utilGetSetValue(d3_select(this)) || undefined;
95175                 var t = {};
95176                 t[key(d.lang)] = value;
95177                 d.value = value;
95178                 dispatch$1.call('change', this, t);
95179             }
95180
95181
95182             function fetchLanguages(value, cb) {
95183                 var v = value.toLowerCase();
95184
95185                 // show the user's language first
95186                 var langCodes = [currentLocale, currentLocale.split('-')[0]];
95187
95188                 if (_countryCode && dataTerritoryLanguages[_countryCode]) {
95189                     langCodes = langCodes.concat(dataTerritoryLanguages[_countryCode]);
95190                 }
95191
95192                 var langItems = [];
95193                 langCodes.forEach(function(code) {
95194                     var langItem = languagesArray.find(function(item) {
95195                         return item.code === code;
95196                     });
95197                     if (langItem) langItems.push(langItem);
95198                 });
95199                 langItems = utilArrayUniq(langItems.concat(languagesArray));
95200
95201                 cb(langItems.filter(function(d) {
95202                     return d.label.toLowerCase().indexOf(v) >= 0 ||
95203                         (d.localName && d.localName.toLowerCase().indexOf(v) >= 0) ||
95204                         (d.nativeName && d.nativeName.toLowerCase().indexOf(v) >= 0) ||
95205                         d.code.toLowerCase().indexOf(v) >= 0;
95206                 }).map(function(d) {
95207                     return { value: d.label };
95208                 }));
95209             }
95210
95211
95212             function renderMultilingual(selection) {
95213                 var entries = selection.selectAll('div.entry')
95214                     .data(_multilingual, function(d) { return d.lang; });
95215
95216                 entries.exit()
95217                     .style('top', '0')
95218                     .style('max-height', '240px')
95219                     .transition()
95220                     .duration(200)
95221                     .style('opacity', '0')
95222                     .style('max-height', '0px')
95223                     .remove();
95224
95225                 var entriesEnter = entries.enter()
95226                     .append('div')
95227                     .attr('class', 'entry')
95228                     .each(function() {
95229                         var wrap = d3_select(this);
95230
95231                         var label = wrap
95232                             .append('label')
95233                             .attr('class', 'field-label');
95234
95235                         var text = label
95236                             .append('span')
95237                             .attr('class', 'label-text');
95238
95239                         text
95240                             .append('span')
95241                             .attr('class', 'label-textvalue')
95242                             .text(t('translate.localized_translation_label'));
95243
95244                         text
95245                             .append('span')
95246                             .attr('class', 'label-textannotation');
95247
95248                         label
95249                             .append('button')
95250                             .attr('class', 'remove-icon-multilingual')
95251                             .on('click', function(d, index) {
95252                                 if (field.locked()) return;
95253                                 event.preventDefault();
95254
95255                                 if (!d.lang || !d.value) {
95256                                     _multilingual.splice(index, 1);
95257                                     renderMultilingual(selection);
95258                                 } else {
95259                                     // remove from entity tags
95260                                     var t = {};
95261                                     t[key(d.lang)] = undefined;
95262                                     dispatch$1.call('change', this, t);
95263                                 }
95264
95265                             })
95266                             .call(svgIcon('#iD-operation-delete'));
95267
95268                         wrap
95269                             .append('input')
95270                             .attr('class', 'localized-lang')
95271                             .attr('type', 'text')
95272                             .attr('placeholder', t('translate.localized_translation_language'))
95273                             .on('blur', changeLang)
95274                             .on('change', changeLang)
95275                             .call(langCombo);
95276
95277                         wrap
95278                             .append('input')
95279                             .attr('type', 'text')
95280                             .attr('placeholder', t('translate.localized_translation_name'))
95281                             .attr('class', 'localized-value')
95282                             .on('blur', changeValue)
95283                             .on('change', changeValue);
95284                     });
95285
95286                 entriesEnter
95287                     .style('margin-top', '0px')
95288                     .style('max-height', '0px')
95289                     .style('opacity', '0')
95290                     .transition()
95291                     .duration(200)
95292                     .style('margin-top', '10px')
95293                     .style('max-height', '240px')
95294                     .style('opacity', '1')
95295                     .on('end', function() {
95296                         d3_select(this)
95297                             .style('max-height', '')
95298                             .style('overflow', 'visible');
95299                     });
95300
95301                 entries = entries.merge(entriesEnter);
95302
95303                 entries.order();
95304
95305                 utilGetSetValue(entries.select('.localized-lang'), function(d) {
95306                     return languageName(d.lang);
95307                 });
95308
95309                 utilGetSetValue(entries.select('.localized-value'),
95310                     function(d) { return d.value; });
95311             }
95312
95313
95314             localized.tags = function(tags) {
95315                 // Fetch translations from wikipedia
95316                 if (tags.wikipedia && !_wikiTitles) {
95317                     _wikiTitles = {};
95318                     var wm = tags.wikipedia.match(/([^:]+):(.+)/);
95319                     if (wm && wm[0] && wm[1]) {
95320                         wikipedia.translations(wm[1], wm[2], function(err, d) {
95321                             if (err || !d) return;
95322                             _wikiTitles = d;
95323                         });
95324                     }
95325                 }
95326
95327                 utilGetSetValue(input, tags[field.key] || '');
95328
95329                 calcMultilingual(tags);
95330
95331                 _selection
95332                     .call(localized);
95333             };
95334
95335
95336             localized.focus = function() {
95337                 input.node().focus();
95338             };
95339
95340
95341             localized.entity = function(val) {
95342                 if (!arguments.length) return _entity;
95343                 _entity = val;
95344                 _multilingual = [];
95345                 loadCountryCode();
95346                 return localized;
95347             };
95348
95349             function loadCountryCode() {
95350                 var center = _entity.extent(context.graph()).center();
95351                 services$1.geocoder.countryCode(center, function(err, result) {
95352                     if (!err && result) {
95353                         _countryCode = result;
95354                     }
95355                 });
95356             }
95357
95358             return utilRebind(localized, dispatch$1, 'on');
95359         }
95360
95361         function uiFieldMaxspeed(field, context) {
95362             var dispatch$1 = dispatch('change');
95363             var unitInput = d3_select(null);
95364             var input = d3_select(null);
95365             var _entity;
95366             var _isImperial;
95367
95368             var speedCombo = uiCombobox(context, 'maxspeed');
95369             var unitCombo = uiCombobox(context, 'maxspeed-unit')
95370                     .data(['km/h', 'mph'].map(comboValues));
95371
95372             var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
95373             var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
95374
95375
95376             function maxspeed(selection) {
95377
95378                 var wrap = selection.selectAll('.form-field-input-wrap')
95379                     .data([0]);
95380
95381                 wrap = wrap.enter()
95382                     .append('div')
95383                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95384                     .merge(wrap);
95385
95386
95387                 input = wrap.selectAll('#preset-input-' + field.safeid)
95388                     .data([0]);
95389
95390                 input = input.enter()
95391                     .append('input')
95392                     .attr('type', 'text')
95393                     .attr('id', 'preset-input-' + field.safeid)
95394                     .attr('placeholder', field.placeholder())
95395                     .call(utilNoAuto)
95396                     .call(speedCombo)
95397                     .merge(input);
95398
95399                 input
95400                     .on('change', change)
95401                     .on('blur', change);
95402
95403                 var loc;
95404                 if (_entity.type === 'node') {
95405                     loc = _entity.loc;
95406                 } else {
95407                     var childNodes = context.graph().childNodes(context.entity(_entity.id));
95408                     loc = childNodes[~~(childNodes.length/2)].loc;
95409                 }
95410
95411                 _isImperial = dataMPH.features.some(function(f) {
95412                     return f.geometry.coordinates.some(function(d) {
95413                         return geoPointInPolygon(loc, d);
95414                     });
95415                 });
95416
95417                 unitInput = wrap.selectAll('input.maxspeed-unit')
95418                     .data([0]);
95419
95420                 unitInput = unitInput.enter()
95421                     .append('input')
95422                     .attr('type', 'text')
95423                     .attr('class', 'maxspeed-unit')
95424                     .call(unitCombo)
95425                     .merge(unitInput);
95426
95427                 unitInput
95428                     .on('blur', changeUnits)
95429                     .on('change', changeUnits);
95430
95431
95432                 function changeUnits() {
95433                     _isImperial = utilGetSetValue(unitInput) === 'mph';
95434                     utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
95435                     setSuggestions();
95436                     change();
95437                 }
95438             }
95439
95440
95441             function setSuggestions() {
95442                 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
95443                 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
95444             }
95445
95446
95447             function comboValues(d) {
95448                 return {
95449                     value: d.toString(),
95450                     title: d.toString()
95451                 };
95452             }
95453
95454
95455             function change() {
95456                 var tag = {};
95457                 var value = utilGetSetValue(input);
95458
95459                 if (!value) {
95460                     tag[field.key] = undefined;
95461                 } else if (isNaN(value) || !_isImperial) {
95462                     tag[field.key] = value;
95463                 } else {
95464                     tag[field.key] = value + ' mph';
95465                 }
95466
95467                 dispatch$1.call('change', this, tag);
95468             }
95469
95470
95471             maxspeed.tags = function(tags) {
95472                 var value = tags[field.key];
95473
95474                 if (value && value.indexOf('mph') >= 0) {
95475                     value = parseInt(value, 10);
95476                     _isImperial = true;
95477                 } else if (value) {
95478                     _isImperial = false;
95479                 }
95480
95481                 setSuggestions();
95482                 utilGetSetValue(input, value || '');
95483             };
95484
95485
95486             maxspeed.focus = function() {
95487                 input.node().focus();
95488             };
95489
95490
95491             maxspeed.entity = function(val) {
95492                 _entity = val;
95493             };
95494
95495
95496             return utilRebind(maxspeed, dispatch$1, 'on');
95497         }
95498
95499         function uiFieldRadio(field, context) {
95500             var dispatch$1 = dispatch('change');
95501             var placeholder = d3_select(null);
95502             var wrap = d3_select(null);
95503             var labels = d3_select(null);
95504             var radios = d3_select(null);
95505             var radioData = (field.options || (field.strings && field.strings.options && Object.keys(field.strings.options)) || field.keys).slice();  // shallow copy
95506             var typeField;
95507             var layerField;
95508             var _oldType = {};
95509             var _entity;
95510
95511
95512             function selectedKey() {
95513                 var node = wrap.selectAll('.form-field-input-radio label.active input');
95514                 return !node.empty() && node.datum();
95515             }
95516
95517
95518             function radio(selection) {
95519                 selection.classed('preset-radio', true);
95520
95521                 wrap = selection.selectAll('.form-field-input-wrap')
95522                     .data([0]);
95523
95524                 var enter = wrap.enter()
95525                     .append('div')
95526                     .attr('class', 'form-field-input-wrap form-field-input-radio');
95527
95528                 enter
95529                     .append('span')
95530                     .attr('class', 'placeholder');
95531
95532                 wrap = wrap
95533                     .merge(enter);
95534
95535
95536                 placeholder = wrap.selectAll('.placeholder');
95537
95538                 labels = wrap.selectAll('label')
95539                     .data(radioData);
95540
95541                 enter = labels.enter()
95542                     .append('label');
95543
95544                 enter
95545                     .append('input')
95546                     .attr('type', 'radio')
95547                     .attr('name', field.id)
95548                     .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
95549                     .attr('checked', false);
95550
95551                 enter
95552                     .append('span')
95553                     .text(function(d) { return field.t('options.' + d, { 'default': d }); });
95554
95555                 labels = labels
95556                     .merge(enter);
95557
95558                 radios = labels.selectAll('input')
95559                     .on('change', changeRadio);
95560
95561             }
95562
95563
95564             function structureExtras(selection, tags) {
95565                 var selected = selectedKey();
95566                 var type = context.presets().field(selected);
95567                 var layer = context.presets().field('layer');
95568                 var showLayer = (selected === 'bridge' || selected === 'tunnel');
95569
95570
95571                 var extrasWrap = selection.selectAll('.structure-extras-wrap')
95572                     .data(selected ? [0] : []);
95573
95574                 extrasWrap.exit()
95575                     .remove();
95576
95577                 extrasWrap = extrasWrap.enter()
95578                     .append('div')
95579                     .attr('class', 'structure-extras-wrap')
95580                     .merge(extrasWrap);
95581
95582                 var list = extrasWrap.selectAll('ul')
95583                     .data([0]);
95584
95585                 list = list.enter()
95586                     .append('ul')
95587                     .attr('class', 'rows')
95588                     .merge(list);
95589
95590
95591                 // Type
95592                 if (type) {
95593                     if (!typeField || typeField.id !== selected) {
95594                         typeField = uiField(context, type, _entity, { wrap: false })
95595                             .on('change', changeType);
95596                     }
95597                     typeField.tags(tags);
95598                 } else {
95599                     typeField = null;
95600                 }
95601
95602                 var typeItem = list.selectAll('.structure-type-item')
95603                     .data(typeField ? [typeField] : [], function(d) { return d.id; });
95604
95605                 // Exit
95606                 typeItem.exit()
95607                     .remove();
95608
95609                 // Enter
95610                 var typeEnter = typeItem.enter()
95611                     .insert('li', ':first-child')
95612                     .attr('class', 'labeled-input structure-type-item');
95613
95614                 typeEnter
95615                     .append('span')
95616                     .attr('class', 'label structure-label-type')
95617                     .attr('for', 'preset-input-' + selected)
95618                     .text(t('inspector.radio.structure.type'));
95619
95620                 typeEnter
95621                     .append('div')
95622                     .attr('class', 'structure-input-type-wrap');
95623
95624                 // Update
95625                 typeItem = typeItem
95626                     .merge(typeEnter);
95627
95628                 if (typeField) {
95629                     typeItem.selectAll('.structure-input-type-wrap')
95630                         .call(typeField.render);
95631                 }
95632
95633
95634                 // Layer
95635                 if (layer && showLayer) {
95636                     if (!layerField) {
95637                         layerField = uiField(context, layer, _entity, { wrap: false })
95638                             .on('change', changeLayer);
95639                     }
95640                     layerField.tags(tags);
95641                     field.keys = utilArrayUnion(field.keys, ['layer']);
95642                 } else {
95643                     layerField = null;
95644                     field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
95645                 }
95646
95647                 var layerItem = list.selectAll('.structure-layer-item')
95648                     .data(layerField ? [layerField] : []);
95649
95650                 // Exit
95651                 layerItem.exit()
95652                     .remove();
95653
95654                 // Enter
95655                 var layerEnter = layerItem.enter()
95656                     .append('li')
95657                     .attr('class', 'labeled-input structure-layer-item');
95658
95659                 layerEnter
95660                     .append('span')
95661                     .attr('class', 'label structure-label-layer')
95662                     .attr('for', 'preset-input-layer')
95663                     .text(t('inspector.radio.structure.layer'));
95664
95665                 layerEnter
95666                     .append('div')
95667                     .attr('class', 'structure-input-layer-wrap');
95668
95669                 // Update
95670                 layerItem = layerItem
95671                     .merge(layerEnter);
95672
95673                 if (layerField) {
95674                     layerItem.selectAll('.structure-input-layer-wrap')
95675                         .call(layerField.render);
95676                 }
95677             }
95678
95679
95680             function changeType(t, onInput) {
95681                 var key = selectedKey();
95682                 if (!key) return;
95683
95684                 var val = t[key];
95685                 if (val !== 'no') {
95686                     _oldType[key] = val;
95687                 }
95688
95689                 if (field.type === 'structureRadio') {
95690                     // remove layer if it should not be set
95691                     if (val === 'no' ||
95692                         (key !== 'bridge' && key !== 'tunnel') ||
95693                         (key === 'tunnel' && val === 'building_passage')) {
95694                         t.layer = undefined;
95695                     }
95696                     // add layer if it should be set
95697                     if (t.layer === undefined) {
95698                         if (key === 'bridge' && val !== 'no') {
95699                             t.layer = '1';
95700                         }
95701                         if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
95702                             t.layer = '-1';
95703                         }
95704                     }
95705                  }
95706
95707                 dispatch$1.call('change', this, t, onInput);
95708             }
95709
95710
95711             function changeLayer(t, onInput) {
95712                 if (t.layer === '0') {
95713                     t.layer = undefined;
95714                 }
95715                 dispatch$1.call('change', this, t, onInput);
95716             }
95717
95718
95719             function changeRadio() {
95720                 var t = {};
95721                 var activeKey;
95722
95723                 if (field.key) {
95724                     t[field.key] = undefined;
95725                 }
95726
95727                 radios.each(function(d) {
95728                     var active = d3_select(this).property('checked');
95729                     if (active) activeKey = d;
95730
95731                     if (field.key) {
95732                         if (active) t[field.key] = d;
95733                     } else {
95734                         var val = _oldType[activeKey] || 'yes';
95735                         t[d] = active ? val : undefined;
95736                     }
95737                 });
95738
95739                 if (field.type === 'structureRadio') {
95740                     if (activeKey === 'bridge') {
95741                         t.layer = '1';
95742                     } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
95743                         t.layer = '-1';
95744                     } else {
95745                         t.layer = undefined;
95746                     }
95747                 }
95748
95749                 dispatch$1.call('change', this, t);
95750             }
95751
95752
95753             radio.tags = function(tags) {
95754                 function checked(d) {
95755                     if (field.key) {
95756                         return tags[field.key] === d;
95757                     } else {
95758                         return !!(tags[d] && tags[d].toLowerCase() !== 'no');
95759                     }
95760                 }
95761
95762                 labels.classed('active', checked);
95763                 radios.property('checked', checked);
95764
95765                 var selection = radios.filter(function() { return this.checked; });
95766
95767                 if (selection.empty()) {
95768                     placeholder.text(t('inspector.none'));
95769                 } else {
95770                     placeholder.text(selection.attr('value'));
95771                     _oldType[selection.datum()] = tags[selection.datum()];
95772                 }
95773
95774                 if (field.type === 'structureRadio') {
95775                     // For waterways without a tunnel tag, set 'culvert' as
95776                     // the _oldType to default to if the user picks 'tunnel'
95777                     if (!!tags.waterway && !_oldType.tunnel) {
95778                         _oldType.tunnel = 'culvert';
95779                     }
95780
95781                     wrap.call(structureExtras, tags);
95782                 }
95783             };
95784
95785
95786             radio.focus = function() {
95787                 radios.node().focus();
95788             };
95789
95790
95791             radio.entity = function(val) {
95792                 if (!arguments.length) return _entity;
95793                 _entity = val;
95794                 _oldType = {};
95795                 return radio;
95796             };
95797
95798
95799             return utilRebind(radio, dispatch$1, 'on');
95800         }
95801
95802         function uiFieldRestrictions(field, context) {
95803             var dispatch$1 = dispatch('change');
95804             var breathe = behaviorBreathe();
95805             var storedViaWay = context.storage('turn-restriction-via-way');
95806             var storedDistance = context.storage('turn-restriction-distance');
95807
95808             var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 1;
95809             var _maxDistance = storedDistance ? (+storedDistance) : 30;
95810             var _initialized = false;
95811             var _parent = d3_select(null);       // the entire field
95812             var _container = d3_select(null);    // just the map
95813             var _oldTurns;
95814             var _graph;
95815             var _vertexID;
95816             var _intersection;
95817             var _fromWayID;
95818
95819             var _lastXPos;
95820
95821
95822             function restrictions(selection) {
95823                 _parent = selection;
95824
95825                 // try to reuse the intersection, but always rebuild it if the graph has changed
95826                 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
95827                     _graph = context.graph();
95828                     _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
95829                 }
95830
95831                 // It's possible for there to be no actual intersection here.
95832                 // for example, a vertex of two `highway=path`
95833                 // In this case, hide the field.
95834                 var isOK = (
95835                     _intersection &&
95836                     _intersection.vertices.length &&           // has vertices
95837                     _intersection.vertices                     // has the vertex that the user selected
95838                         .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
95839                     _intersection.ways.length > 2 &&           // has more than 2 ways
95840                     _intersection.ways                         // has more than 1 TO way
95841                         .filter(function(way) { return way.__to; }).length > 1
95842                 );
95843
95844                 // Also hide in the case where
95845                 d3_select(selection.node().parentNode).classed('hide', !isOK);
95846
95847                 // if form field is hidden or has detached from dom, clean up.
95848                 if (!isOK ||
95849                     !d3_select('.inspector-wrap.inspector-hidden').empty() ||
95850                     !selection.node().parentNode ||
95851                     !selection.node().parentNode.parentNode) {
95852                     selection.call(restrictions.off);
95853                     return;
95854                 }
95855
95856
95857                 var wrap = selection.selectAll('.form-field-input-wrap')
95858                     .data([0]);
95859
95860                 wrap = wrap.enter()
95861                     .append('div')
95862                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
95863                     .merge(wrap);
95864
95865                 var container = wrap.selectAll('.restriction-container')
95866                     .data([0]);
95867
95868                 // enter
95869                 var containerEnter = container.enter()
95870                     .append('div')
95871                     .attr('class', 'restriction-container');
95872
95873                 containerEnter
95874                     .append('div')
95875                     .attr('class', 'restriction-help');
95876
95877                 // update
95878                 _container = containerEnter
95879                     .merge(container)
95880                     .call(renderViewer);
95881
95882                 var controls = wrap.selectAll('.restriction-controls')
95883                     .data([0]);
95884
95885                 // enter/update
95886                 controls.enter()
95887                     .append('div')
95888                     .attr('class', 'restriction-controls-container')
95889                     .append('div')
95890                     .attr('class', 'restriction-controls')
95891                     .merge(controls)
95892                     .call(renderControls);
95893             }
95894
95895
95896             function renderControls(selection) {
95897                 var distControl = selection.selectAll('.restriction-distance')
95898                     .data([0]);
95899
95900                 distControl.exit()
95901                     .remove();
95902
95903                 var distControlEnter = distControl.enter()
95904                     .append('div')
95905                     .attr('class', 'restriction-control restriction-distance');
95906
95907                 distControlEnter
95908                     .append('span')
95909                     .attr('class', 'restriction-control-label restriction-distance-label')
95910                     .text(t('restriction.controls.distance') + ':');
95911
95912                 distControlEnter
95913                     .append('input')
95914                     .attr('class', 'restriction-distance-input')
95915                     .attr('type', 'range')
95916                     .attr('min', '20')
95917                     .attr('max', '50')
95918                     .attr('step', '5');
95919
95920                 distControlEnter
95921                     .append('span')
95922                     .attr('class', 'restriction-distance-text');
95923
95924                 // update
95925                 selection.selectAll('.restriction-distance-input')
95926                     .property('value', _maxDistance)
95927                     .on('input', function() {
95928                         var val = d3_select(this).property('value');
95929                         _maxDistance = +val;
95930                         _intersection = null;
95931                         _container.selectAll('.layer-osm .layer-turns *').remove();
95932                         context.storage('turn-restriction-distance', _maxDistance);
95933                         _parent.call(restrictions);
95934                     });
95935
95936                 selection.selectAll('.restriction-distance-text')
95937                     .text(displayMaxDistance(_maxDistance));
95938
95939
95940                 var viaControl = selection.selectAll('.restriction-via-way')
95941                     .data([0]);
95942
95943                 viaControl.exit()
95944                     .remove();
95945
95946                 var viaControlEnter = viaControl.enter()
95947                     .append('div')
95948                     .attr('class', 'restriction-control restriction-via-way');
95949
95950                 viaControlEnter
95951                     .append('span')
95952                     .attr('class', 'restriction-control-label restriction-via-way-label')
95953                     .text(t('restriction.controls.via') + ':');
95954
95955                 viaControlEnter
95956                     .append('input')
95957                     .attr('class', 'restriction-via-way-input')
95958                     .attr('type', 'range')
95959                     .attr('min', '0')
95960                     .attr('max', '2')
95961                     .attr('step', '1');
95962
95963                 viaControlEnter
95964                     .append('span')
95965                     .attr('class', 'restriction-via-way-text');
95966
95967                 // update
95968                 selection.selectAll('.restriction-via-way-input')
95969                     .property('value', _maxViaWay)
95970                     .on('input', function() {
95971                         var val = d3_select(this).property('value');
95972                         _maxViaWay = +val;
95973                         _container.selectAll('.layer-osm .layer-turns *').remove();
95974                         context.storage('turn-restriction-via-way', _maxViaWay);
95975                         _parent.call(restrictions);
95976                     });
95977
95978                 selection.selectAll('.restriction-via-way-text')
95979                     .text(displayMaxVia(_maxViaWay));
95980             }
95981
95982
95983             function renderViewer(selection) {
95984                 if (!_intersection) return;
95985
95986                 var vgraph = _intersection.graph;
95987                 var filter = utilFunctor(true);
95988                 var projection = geoRawMercator();
95989
95990                 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
95991                 // Instead of asking the restriction-container for its dimensions,
95992                 //  we can ask the #sidebar, which can have its dimensions cached.
95993                 // width: calc as sidebar - padding
95994                 // height: hardcoded (from `80_app.css`)
95995                 // var d = utilGetDimensions(selection);
95996                 var sdims = utilGetDimensions(d3_select('#sidebar'));
95997                 var d = [ sdims[0] - 50, 370 ];
95998                 var c = geoVecScale(d, 0.5);
95999                 var z = 22;
96000
96001                 projection.scale(geoZoomToScale(z));
96002
96003                 // Calculate extent of all key vertices
96004                 var extent = geoExtent();
96005                 for (var i = 0; i < _intersection.vertices.length; i++) {
96006                     extent._extend(_intersection.vertices[i].extent());
96007                 }
96008
96009                 // If this is a large intersection, adjust zoom to fit extent
96010                 if (_intersection.vertices.length > 1) {
96011                     var padding = 180;   // in z22 pixels
96012                     var tl = projection([extent[0][0], extent[1][1]]);
96013                     var br = projection([extent[1][0], extent[0][1]]);
96014                     var hFactor = (br[0] - tl[0]) / (d[0] - padding);
96015                     var vFactor = (br[1] - tl[1]) / (d[1] - padding);
96016                     var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
96017                     var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
96018                     z = z - Math.max(hZoomDiff, vZoomDiff);
96019                     projection.scale(geoZoomToScale(z));
96020                 }
96021
96022                 var padTop = 35;   // reserve top space for hint text
96023                 var extentCenter = projection(extent.center());
96024                 extentCenter[1] = extentCenter[1] - padTop;
96025
96026                 projection
96027                     .translate(geoVecSubtract(c, extentCenter))
96028                     .clipExtent([[0, 0], d]);
96029
96030                 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
96031                 var drawVertices = svgVertices(projection, context);
96032                 var drawLines = svgLines(projection, context);
96033                 var drawTurns = svgTurns(projection, context);
96034
96035                 var firstTime = selection.selectAll('.surface').empty();
96036
96037                 selection
96038                     .call(drawLayers);
96039
96040                 var surface = selection.selectAll('.surface')
96041                     .classed('tr', true);
96042
96043                 if (firstTime) {
96044                     _initialized = true;
96045
96046                     surface
96047                         .call(breathe);
96048                 }
96049
96050                 // This can happen if we've lowered the detail while a FROM way
96051                 // is selected, and that way is no longer part of the intersection.
96052                 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
96053                     _fromWayID = null;
96054                     _oldTurns = null;
96055                 }
96056
96057                 surface
96058                     .call(utilSetDimensions, d)
96059                     .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
96060                     .call(drawLines, vgraph, _intersection.ways, filter)
96061                     .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
96062
96063                 surface
96064                     .on('click.restrictions', click)
96065                     .on('mouseover.restrictions', mouseover);
96066
96067                 surface
96068                     .selectAll('.selected')
96069                     .classed('selected', false);
96070
96071                 surface
96072                     .selectAll('.related')
96073                     .classed('related', false);
96074
96075                 if (_fromWayID) {
96076                     var way = vgraph.entity(_fromWayID);
96077                     surface
96078                         .selectAll('.' + _fromWayID)
96079                         .classed('selected', true)
96080                         .classed('related', true);
96081                 }
96082
96083                 document.addEventListener('resizeWindow', function () {
96084                     utilSetDimensions(_container, null);
96085                     redraw(1);
96086                 }, false);
96087
96088                 updateHints(null);
96089
96090
96091                 function click() {
96092                     surface
96093                         .call(breathe.off)
96094                         .call(breathe);
96095
96096                     var datum = event.target.__data__;
96097                     var entity = datum && datum.properties && datum.properties.entity;
96098                     if (entity) {
96099                         datum = entity;
96100                     }
96101
96102                     if (datum instanceof osmWay && (datum.__from || datum.__via)) {
96103                         _fromWayID = datum.id;
96104                         _oldTurns = null;
96105                         redraw();
96106
96107                     } else if (datum instanceof osmTurn) {
96108                         var actions, extraActions, turns, i;
96109                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
96110
96111                         if (datum.restrictionID && !datum.direct) {
96112                             return;
96113
96114                         } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
96115                             var seen = {};
96116                             var datumOnly = JSON.parse(JSON.stringify(datum));   // deep clone the datum
96117                             datumOnly.only = true;                               // but change this property
96118                             restrictionType = restrictionType.replace(/^no/, 'only');
96119
96120                             // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
96121                             // We will remember them in _oldTurns, and restore them if the user clicks again.
96122                             turns = _intersection.turns(_fromWayID, 2);
96123                             extraActions = [];
96124                             _oldTurns = [];
96125                             for (i = 0; i < turns.length; i++) {
96126                                 var turn = turns[i];
96127                                 if (seen[turn.restrictionID]) continue;  // avoid deleting the turn twice (#4968, #4928)
96128
96129                                 if (turn.direct && turn.path[1] === datum.path[1]) {
96130                                     seen[turns[i].restrictionID] = true;
96131                                     turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
96132                                     _oldTurns.push(turn);
96133                                     extraActions.push(actionUnrestrictTurn(turn));
96134                                 }
96135                             }
96136
96137                             actions = _intersection.actions.concat(extraActions, [
96138                                 actionRestrictTurn(datumOnly, restrictionType),
96139                                 t('operations.restriction.annotation.create')
96140                             ]);
96141
96142                         } else if (datum.restrictionID) {   // ONLY -> Allowed
96143                             // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
96144                             // This relies on the assumption that the intersection was already split up when we
96145                             // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
96146                             turns = _oldTurns || [];
96147                             extraActions = [];
96148                             for (i = 0; i < turns.length; i++) {
96149                                 if (turns[i].key !== datum.key) {
96150                                     extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
96151                                 }
96152                             }
96153                             _oldTurns = null;
96154
96155                             actions = _intersection.actions.concat(extraActions, [
96156                                 actionUnrestrictTurn(datum),
96157                                 t('operations.restriction.annotation.delete')
96158                             ]);
96159
96160                         } else {    // Allowed -> NO
96161                             actions = _intersection.actions.concat([
96162                                 actionRestrictTurn(datum, restrictionType),
96163                                 t('operations.restriction.annotation.create')
96164                             ]);
96165                         }
96166
96167                         context.perform.apply(context, actions);
96168
96169                         // At this point the datum will be changed, but will have same key..
96170                         // Refresh it and update the help..
96171                         var s = surface.selectAll('.' + datum.key);
96172                         datum = s.empty() ? null : s.datum();
96173                         updateHints(datum);
96174
96175                     } else {
96176                         _fromWayID = null;
96177                         _oldTurns = null;
96178                         redraw();
96179                     }
96180                 }
96181
96182
96183                 function mouseover() {
96184                     var datum = event.target.__data__;
96185                     updateHints(datum);
96186                 }
96187
96188                 _lastXPos = _lastXPos || sdims[0];
96189
96190                 function redraw(minChange) {
96191                     var xPos = -1;
96192
96193                     if (minChange) {
96194                         xPos = utilGetDimensions(d3_select('#sidebar'))[0];
96195                     }
96196
96197                     if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
96198                         if (context.hasEntity(_vertexID)) {
96199                             _lastXPos = xPos;
96200                             _container.call(renderViewer);
96201                         }
96202                     }
96203                 }
96204
96205
96206                 function highlightPathsFrom(wayID) {
96207                     surface.selectAll('.related')
96208                         .classed('related', false)
96209                         .classed('allow', false)
96210                         .classed('restrict', false)
96211                         .classed('only', false);
96212
96213                     surface.selectAll('.' + wayID)
96214                         .classed('related', true);
96215
96216                     if (wayID) {
96217                         var turns = _intersection.turns(wayID, _maxViaWay);
96218                         for (var i = 0; i < turns.length; i++) {
96219                             var turn = turns[i];
96220                             var ids = [turn.to.way];
96221                             var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
96222
96223                             if (turn.only || turns.length === 1) {
96224                                 if (turn.via.ways) {
96225                                     ids = ids.concat(turn.via.ways);
96226                                 }
96227                             } else if (turn.to.way === wayID) {
96228                                 continue;
96229                             }
96230
96231                             surface.selectAll(utilEntitySelector(ids))
96232                                 .classed('related', true)
96233                                 .classed('allow', (klass === 'allow'))
96234                                 .classed('restrict', (klass === 'restrict'))
96235                                 .classed('only', (klass === 'only'));
96236                         }
96237                     }
96238                 }
96239
96240
96241                 function updateHints(datum) {
96242                     var help = _container.selectAll('.restriction-help').html('');
96243
96244                     var placeholders = {};
96245                     ['from', 'via', 'to'].forEach(function(k) {
96246                         placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
96247                     });
96248
96249                     var entity = datum && datum.properties && datum.properties.entity;
96250                     if (entity) {
96251                         datum = entity;
96252                     }
96253
96254                     if (_fromWayID) {
96255                         way = vgraph.entity(_fromWayID);
96256                         surface
96257                             .selectAll('.' + _fromWayID)
96258                             .classed('selected', true)
96259                             .classed('related', true);
96260                     }
96261
96262                     // Hovering a way
96263                     if (datum instanceof osmWay && datum.__from) {
96264                         way = datum;
96265
96266                         highlightPathsFrom(_fromWayID ? null : way.id);
96267                         surface.selectAll('.' + way.id)
96268                             .classed('related', true);
96269
96270                         var clickSelect = (!_fromWayID || _fromWayID !== way.id);
96271                         help
96272                             .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
96273                             .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
96274                                 from: placeholders.from,
96275                                 fromName: displayName(way.id, vgraph)
96276                             }));
96277
96278
96279                     // Hovering a turn arrow
96280                     } else if (datum instanceof osmTurn) {
96281                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
96282                         var turnType = restrictionType.replace(/^(only|no)\_/, '');
96283                         var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
96284                         var klass, turnText, nextText;
96285
96286                         if (datum.no) {
96287                             klass = 'restrict';
96288                             turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
96289                             nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
96290                         } else if (datum.only) {
96291                             klass = 'only';
96292                             turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
96293                             nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
96294                         } else {
96295                             klass = 'allow';
96296                             turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
96297                             nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
96298                         }
96299
96300                         help
96301                             .append('div')      // "NO Right Turn (indirect)"
96302                             .attr('class', 'qualifier ' + klass)
96303                             .text(turnText);
96304
96305                         help
96306                             .append('div')      // "FROM {fromName} TO {toName}"
96307                             .html(t('restriction.help.from_name_to_name', {
96308                                 from: placeholders.from,
96309                                 fromName: displayName(datum.from.way, vgraph),
96310                                 to: placeholders.to,
96311                                 toName: displayName(datum.to.way, vgraph)
96312                             }));
96313
96314                         if (datum.via.ways && datum.via.ways.length) {
96315                             var names = [];
96316                             for (var i = 0; i < datum.via.ways.length; i++) {
96317                                 var prev = names[names.length - 1];
96318                                 var curr = displayName(datum.via.ways[i], vgraph);
96319                                 if (!prev || curr !== prev)   // collapse identical names
96320                                     names.push(curr);
96321                             }
96322
96323                             help
96324                                 .append('div')      // "VIA {viaNames}"
96325                                 .html(t('restriction.help.via_names', {
96326                                     via: placeholders.via,
96327                                     viaNames: names.join(', ')
96328                                 }));
96329                         }
96330
96331                         if (!indirect) {
96332                             help
96333                                 .append('div')      // Click for "No Right Turn"
96334                                 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
96335                         }
96336
96337                         highlightPathsFrom(null);
96338                         var alongIDs = datum.path.slice();
96339                         surface.selectAll(utilEntitySelector(alongIDs))
96340                             .classed('related', true)
96341                             .classed('allow', (klass === 'allow'))
96342                             .classed('restrict', (klass === 'restrict'))
96343                             .classed('only', (klass === 'only'));
96344
96345
96346                     // Hovering empty surface
96347                     } else {
96348                         highlightPathsFrom(null);
96349                         if (_fromWayID) {
96350                             help
96351                                 .append('div')      // "FROM {fromName}"
96352                                 .html(t('restriction.help.from_name', {
96353                                     from: placeholders.from,
96354                                     fromName: displayName(_fromWayID, vgraph)
96355                                 }));
96356
96357                         } else {
96358                             help
96359                                 .append('div')      // "Click to select a FROM segment."
96360                                 .html(t('restriction.help.select_from', {
96361                                     from: placeholders.from
96362                                 }));
96363                         }
96364                     }
96365                 }
96366             }
96367
96368
96369             function displayMaxDistance(maxDist) {
96370                 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
96371                 var opts;
96372
96373                 if (isImperial) {
96374                     var distToFeet = {   // imprecise conversion for prettier display
96375                         20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
96376                     }[maxDist];
96377                     opts = { distance: t('units.feet', { quantity: distToFeet }) };
96378                 } else {
96379                     opts = { distance: t('units.meters', { quantity: maxDist }) };
96380                 }
96381
96382                 return t('restriction.controls.distance_up_to', opts);
96383             }
96384
96385
96386             function displayMaxVia(maxVia) {
96387                 return maxVia === 0 ? t('restriction.controls.via_node_only')
96388                     : maxVia === 1 ? t('restriction.controls.via_up_to_one')
96389                     : t('restriction.controls.via_up_to_two');
96390             }
96391
96392
96393             function displayName(entityID, graph) {
96394                 var entity = graph.entity(entityID);
96395                 var name = utilDisplayName(entity) || '';
96396                 var matched = context.presets().match(entity, graph);
96397                 var type = (matched && matched.name()) || utilDisplayType(entity.id);
96398                 return name || type;
96399             }
96400
96401
96402             restrictions.entity = function(val) {
96403                 _intersection = null;
96404                 _fromWayID = null;
96405                 _oldTurns = null;
96406                 _vertexID = val.id;
96407             };
96408
96409
96410             restrictions.tags = function() {};
96411             restrictions.focus = function() {};
96412
96413
96414             restrictions.off = function(selection) {
96415                 if (!_initialized) return;
96416
96417                 selection.selectAll('.surface')
96418                     .call(breathe.off)
96419                     .on('click.restrictions', null)
96420                     .on('mouseover.restrictions', null);
96421
96422                 d3_select(window)
96423                     .on('resize.restrictions', null);
96424             };
96425
96426
96427             return utilRebind(restrictions, dispatch$1, 'on');
96428         }
96429
96430         function uiFieldTextarea(field) {
96431             var dispatch$1 = dispatch('change');
96432             var input = d3_select(null);
96433
96434
96435             function textarea(selection) {
96436                 var wrap = selection.selectAll('.form-field-input-wrap')
96437                     .data([0]);
96438
96439                 wrap = wrap.enter()
96440                     .append('div')
96441                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
96442                     .merge(wrap);
96443
96444                 input = wrap.selectAll('textarea')
96445                     .data([0]);
96446
96447                 input = input.enter()
96448                     .append('textarea')
96449                     .attr('id', 'preset-input-' + field.safeid)
96450                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
96451                     .attr('maxlength', 255)
96452                     .call(utilNoAuto)
96453                     .on('input', change(true))
96454                     .on('blur', change())
96455                     .on('change', change())
96456                     .merge(input);
96457             }
96458
96459
96460             function change(onInput) {
96461                 return function() {
96462                     var t = {};
96463                     t[field.key] = utilGetSetValue(input) || undefined;
96464                     dispatch$1.call('change', this, t, onInput);
96465                 };
96466             }
96467
96468
96469             textarea.tags = function(tags) {
96470                 utilGetSetValue(input, tags[field.key] || '');
96471             };
96472
96473
96474             textarea.focus = function() {
96475                 input.node().focus();
96476             };
96477
96478
96479             return utilRebind(textarea, dispatch$1, 'on');
96480         }
96481
96482         function uiFieldWikidata(field, context) {
96483             var wikidata = services$1.wikidata;
96484             var dispatch$1 = dispatch('change');
96485             var searchInput = d3_select(null);
96486             var _qid = null;
96487             var _wikidataEntity = null;
96488             var _wikiURL = '';
96489             var _entity;
96490
96491             var _wikipediaKey = field.keys && field.keys.find(function(key) {
96492                     return key.includes('wikipedia');
96493                 }),
96494                 _hintKey = field.key === 'wikidata' ? 'name' : field.key.split(':')[0];
96495
96496             var combobox = uiCombobox(context, 'combo-' + field.safeid)
96497                 .caseSensitive(true)
96498                 .minItems(1);
96499
96500             function wiki(selection) {
96501
96502                 var wrap = selection.selectAll('.form-field-input-wrap')
96503                     .data([0]);
96504
96505                 wrap = wrap.enter()
96506                     .append('div')
96507                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
96508                     .merge(wrap);
96509
96510
96511                 var list = wrap.selectAll('ul')
96512                     .data([0]);
96513
96514                 list = list.enter()
96515                     .append('ul')
96516                     .attr('class', 'rows')
96517                     .merge(list);
96518
96519                 var searchRow = list.selectAll('li.wikidata-search')
96520                     .data([0]);
96521
96522                 var searchRowEnter = searchRow.enter()
96523                     .append('li')
96524                     .attr('class', 'wikidata-search');
96525
96526                 searchInput = searchRowEnter
96527                     .append('input')
96528                     .attr('type', 'text')
96529                     .style('flex', '1')
96530                     .call(utilNoAuto);
96531
96532                 searchInput
96533                     .on('focus', function() {
96534                         var node = d3_select(this).node();
96535                         node.setSelectionRange(0, node.value.length);
96536                     })
96537                     .on('blur', function() {
96538                         setLabelForEntity();
96539                     })
96540                     .call(combobox.fetcher(fetchWikidataItems));
96541
96542                 combobox.on('accept', function(d) {
96543                     _qid = d.id;
96544                     change();
96545                 }).on('cancel', function() {
96546                     setLabelForEntity();
96547                 });
96548
96549                 searchRowEnter
96550                     .append('button')
96551                     .attr('class', 'form-field-button wiki-link')
96552                     .attr('title', t('icons.open_wikidata'))
96553                     .attr('tabindex', -1)
96554                     .call(svgIcon('#iD-icon-out-link'))
96555                     .on('click', function() {
96556                         event.preventDefault();
96557                         if (_wikiURL) window.open(_wikiURL, '_blank');
96558                     });
96559
96560                 var wikidataProperties = ['description', 'identifier'];
96561
96562                 var items = list.selectAll('li.labeled-input')
96563                     .data(wikidataProperties);
96564
96565                 // Enter
96566                 var enter = items.enter()
96567                     .append('li')
96568                     .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
96569
96570                 enter
96571                     .append('span')
96572                     .attr('class', 'label')
96573                     .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
96574                     .text(function(d) { return t('wikidata.' + d); });
96575
96576                 enter
96577                     .append('input')
96578                     .attr('type', 'text')
96579                     .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
96580                     .call(utilNoAuto)
96581                     .classed('disabled', 'true')
96582                     .attr('readonly', 'true');
96583
96584                 enter
96585                     .append('button')
96586                     .attr('class', 'form-field-button')
96587                     .attr('title', t('icons.copy'))
96588                     .attr('tabindex', -1)
96589                     .call(svgIcon('#iD-operation-copy'))
96590                     .on('click', function() {
96591                         event.preventDefault();
96592                         d3_select(this.parentNode)
96593                             .select('input')
96594                             .node()
96595                             .select();
96596                         document.execCommand('copy');
96597                     });
96598
96599             }
96600
96601             function fetchWikidataItems(q, callback) {
96602
96603                 if (!q && _entity) {
96604                     q = (_hintKey && context.entity(_entity.id).tags[_hintKey]) || '';
96605                 }
96606
96607                 wikidata.itemsForSearchQuery(q, function(err, data) {
96608                     if (err) return;
96609
96610                     for (var i in data) {
96611                         data[i].value = data[i].label + ' (' +  data[i].id + ')';
96612                         data[i].title = data[i].description;
96613                     }
96614
96615                     if (callback) callback(data);
96616                 });
96617             }
96618
96619
96620             function change() {
96621                 var syncTags = {};
96622                 syncTags[field.key] = _qid;
96623                 dispatch$1.call('change', this, syncTags);
96624
96625                 // attempt asynchronous update of wikidata tag..
96626                 var initGraph = context.graph();
96627                 var initEntityID = _entity.id;
96628
96629                 wikidata.entityByQID(_qid, function(err, entity) {
96630                     if (err) return;
96631
96632                     // If graph has changed, we can't apply this update.
96633                     if (context.graph() !== initGraph) return;
96634
96635                     if (!entity.sitelinks) return;
96636
96637                     var langs = wikidata.languagesToQuery();
96638                     // use the label and description languages as fallbacks
96639                     ['labels', 'descriptions'].forEach(function(key) {
96640                         if (!entity[key]) return;
96641
96642                         var valueLangs = Object.keys(entity[key]);
96643                         if (valueLangs.length === 0) return;
96644                         var valueLang = valueLangs[0];
96645
96646                         if (langs.indexOf(valueLang) === -1) {
96647                             langs.push(valueLang);
96648                         }
96649                     });
96650
96651                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
96652
96653                     if (_wikipediaKey) {
96654                         var foundPreferred;
96655                         for (var i in langs) {
96656                             var lang = langs[i];
96657                             var siteID = lang.replace('-', '_') + 'wiki';
96658                             if (entity.sitelinks[siteID]) {
96659                                 foundPreferred = true;
96660                                 currTags[_wikipediaKey] = lang + ':' + entity.sitelinks[siteID].title;
96661                                 // use the first match
96662                                 break;
96663                             }
96664                         }
96665
96666                         if (!foundPreferred) {
96667                             // No wikipedia sites available in the user's language or the fallback languages,
96668                             // default to any wikipedia sitelink
96669
96670                             var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
96671                                 return site.endsWith('wiki');
96672                             });
96673
96674                             if (wikiSiteKeys.length === 0) {
96675                                 // if no wikipedia pages are linked to this wikidata entity, delete that tag
96676                                 if (currTags[_wikipediaKey]) {
96677                                     delete currTags[_wikipediaKey];
96678                                 }
96679                             } else {
96680                                 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
96681                                 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
96682                                 currTags[_wikipediaKey] = wikiLang + ':' + wikiTitle;
96683                             }
96684                         }
96685                     }
96686
96687                     // Coalesce the update of wikidata tag into the previous tag change
96688                     context.overwrite(
96689                         actionChangeTags(initEntityID, currTags),
96690                         context.history().undoAnnotation()
96691                     );
96692
96693                     // do not dispatch.call('change') here, because entity_editor
96694                     // changeTags() is not intended to be called asynchronously
96695
96696                 });
96697             }
96698
96699             function setLabelForEntity() {
96700                 var label = '';
96701                 if (_wikidataEntity) {
96702                     label = entityPropertyForDisplay(_wikidataEntity, 'labels');
96703                     if (label.length === 0) {
96704                         label = _wikidataEntity.id.toString();
96705                     }
96706                 }
96707                 utilGetSetValue(d3_select('li.wikidata-search input'), label);
96708             }
96709
96710
96711             wiki.tags = function(tags) {
96712                 _qid = tags[field.key] || '';
96713
96714                 if (!/^Q[0-9]*$/.test(_qid)) {   // not a proper QID
96715                     unrecognized();
96716                     return;
96717                 }
96718
96719                 // QID value in correct format
96720                 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
96721                 wikidata.entityByQID(_qid, function(err, entity) {
96722                     if (err) {
96723                         unrecognized();
96724                         return;
96725                     }
96726                     _wikidataEntity = entity;
96727
96728                     setLabelForEntity();
96729
96730                     var description = entityPropertyForDisplay(entity, 'descriptions');
96731
96732                     d3_select('.form-field-wikidata button.wiki-link')
96733                         .classed('disabled', false);
96734
96735                     d3_select('.preset-wikidata-description')
96736                         .style('display', function(){
96737                             return description.length > 0 ? 'flex' : 'none';
96738                         })
96739                         .select('input')
96740                         .attr('value', description);
96741
96742                     d3_select('.preset-wikidata-identifier')
96743                         .style('display', function(){
96744                             return entity.id ? 'flex' : 'none';
96745                         })
96746                         .select('input')
96747                         .attr('value', entity.id);
96748                 });
96749
96750
96751                 // not a proper QID
96752                 function unrecognized() {
96753                     _wikidataEntity = null;
96754                     setLabelForEntity();
96755
96756                     d3_select('.preset-wikidata-description')
96757                         .style('display', 'none');
96758                     d3_select('.preset-wikidata-identifier')
96759                         .style('display', 'none');
96760
96761                     d3_select('.form-field-wikidata button.wiki-link')
96762                         .classed('disabled', true);
96763
96764                     if (_qid && _qid !== '') {
96765                         _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
96766                     } else {
96767                         _wikiURL = '';
96768                     }
96769                 }
96770             };
96771
96772             function entityPropertyForDisplay(wikidataEntity, propKey) {
96773                 if (!wikidataEntity[propKey]) return '';
96774                 var propObj = wikidataEntity[propKey];
96775                 var langKeys = Object.keys(propObj);
96776                 if (langKeys.length === 0) return '';
96777                 // sorted by priority, since we want to show the user's language first if possible
96778                 var langs = wikidata.languagesToQuery();
96779                 for (var i in langs) {
96780                     var lang = langs[i];
96781                     var valueObj = propObj[lang];
96782                     if (valueObj && valueObj.value && valueObj.value.length > 0) return valueObj.value;
96783                 }
96784                 // default to any available value
96785                 return propObj[langKeys[0]].value;
96786             }
96787
96788
96789             wiki.entity = function(val) {
96790                 if (!arguments.length) return _entity;
96791                 _entity = val;
96792                 return wiki;
96793             };
96794
96795
96796             wiki.focus = function() {
96797                 searchInput.node().focus();
96798             };
96799
96800
96801             return utilRebind(wiki, dispatch$1, 'on');
96802         }
96803
96804         function uiFieldWikipedia(field, context) {
96805             var dispatch$1 = dispatch('change');
96806             var wikipedia = services$1.wikipedia;
96807             var wikidata = services$1.wikidata;
96808             var lang = d3_select(null);
96809             var title = d3_select(null);
96810             var _wikiURL = '';
96811             var _entity;
96812
96813             var langCombo = uiCombobox(context, 'wikipedia-lang')
96814                 .fetcher(function(value, cb) {
96815                     var v = value.toLowerCase();
96816
96817                     cb(wikipedia$2.filter(function(d) {
96818                         return d[0].toLowerCase().indexOf(v) >= 0 ||
96819                             d[1].toLowerCase().indexOf(v) >= 0 ||
96820                             d[2].toLowerCase().indexOf(v) >= 0;
96821                     }).map(function(d) {
96822                         return { value: d[1] };
96823                     }));
96824                 });
96825
96826             var titleCombo = uiCombobox(context, 'wikipedia-title')
96827                 .fetcher(function(value, cb) {
96828                     if (!value && _entity) {
96829                         value = context.entity(_entity.id).tags.name || '';
96830                     }
96831
96832                     var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
96833                     searchfn(language()[2], value, function(query, data) {
96834                         cb(data.map(function(d) {
96835                             return { value: d };
96836                         }));
96837                     });
96838                 });
96839
96840
96841             function wiki(selection) {
96842                 var wrap = selection.selectAll('.form-field-input-wrap')
96843                     .data([0]);
96844
96845                 wrap = wrap.enter()
96846                     .append('div')
96847                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
96848                     .merge(wrap);
96849
96850
96851                 var langRow = wrap.selectAll('.wiki-lang-container')
96852                     .data([0]);
96853
96854                 langRow = langRow.enter()
96855                     .append('div')
96856                     .attr('class', 'wiki-lang-container')
96857                     .merge(langRow);
96858
96859
96860                 lang = langRow.selectAll('input.wiki-lang')
96861                     .data([0]);
96862
96863                 lang = lang.enter()
96864                     .append('input')
96865                     .attr('type', 'text')
96866                     .attr('class', 'wiki-lang')
96867                     .attr('placeholder', t('translate.localized_translation_language'))
96868                     .call(utilNoAuto)
96869                     .call(langCombo)
96870                     .merge(lang);
96871
96872                 utilGetSetValue(lang, language()[1]);
96873
96874                 lang
96875                     .on('blur', changeLang)
96876                     .on('change', changeLang);
96877
96878
96879                 var titleRow = wrap.selectAll('.wiki-title-container')
96880                     .data([0]);
96881
96882                 titleRow = titleRow.enter()
96883                     .append('div')
96884                     .attr('class', 'wiki-title-container')
96885                     .merge(titleRow);
96886
96887                 title = titleRow.selectAll('input.wiki-title')
96888                     .data([0]);
96889
96890                 title = title.enter()
96891                     .append('input')
96892                     .attr('type', 'text')
96893                     .attr('class', 'wiki-title')
96894                     .attr('id', 'preset-input-' + field.safeid)
96895                     .call(utilNoAuto)
96896                     .call(titleCombo)
96897                     .merge(title);
96898
96899                 title
96900                     .on('blur', blur)
96901                     .on('change', change);
96902
96903
96904                 var link = titleRow.selectAll('.wiki-link')
96905                     .data([0]);
96906
96907                 link = link.enter()
96908                     .append('button')
96909                     .attr('class', 'form-field-button wiki-link')
96910                     .attr('tabindex', -1)
96911                     .call(svgIcon('#iD-icon-out-link'))
96912                     .merge(link);
96913
96914                 link
96915                     .on('click', function() {
96916                         event.preventDefault();
96917                         if (_wikiURL) window.open(_wikiURL, '_blank');
96918                     });
96919             }
96920
96921
96922             function language() {
96923                 var value = utilGetSetValue(lang).toLowerCase();
96924                 var locale = utilDetect().locale.toLowerCase();
96925                 var localeLanguage;
96926                 return wikipedia$2.find(function(d) {
96927                     if (d[2] === locale) localeLanguage = d;
96928                     return d[0].toLowerCase() === value ||
96929                         d[1].toLowerCase() === value ||
96930                         d[2] === value;
96931                 }) || localeLanguage || ['English', 'English', 'en'];
96932             }
96933
96934
96935             function changeLang() {
96936                 utilGetSetValue(lang, language()[1]);
96937                 change(true);
96938             }
96939
96940
96941             function blur() {
96942                 change(true);
96943             }
96944
96945
96946             function change(skipWikidata) {
96947                 var value = utilGetSetValue(title);
96948                 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
96949                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
96950                 var syncTags = {};
96951
96952                 if (l) {
96953                     // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
96954                     value = decodeURIComponent(m[2]).replace(/_/g, ' ');
96955                     if (m[3]) {
96956                         var anchor;
96957                         // try {
96958                         // leave this out for now - #6232
96959                             // Best-effort `anchordecode:` implementation
96960                             // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
96961                         // } catch (e) {
96962                             anchor = decodeURIComponent(m[3]);
96963                         // }
96964                         value += '#' + anchor.replace(/_/g, ' ');
96965                     }
96966                     value = value.slice(0, 1).toUpperCase() + value.slice(1);
96967                     utilGetSetValue(lang, l[1]);
96968                     utilGetSetValue(title, value);
96969                 }
96970
96971                 if (value) {
96972                     syncTags.wikipedia = language()[2] + ':' + value;
96973                 } else {
96974                     syncTags.wikipedia = undefined;
96975                 }
96976
96977                 dispatch$1.call('change', this, syncTags);
96978
96979
96980                 if (skipWikidata || !value || !language()[2]) return;
96981
96982                 // attempt asynchronous update of wikidata tag..
96983                 var initGraph = context.graph();
96984                 var initEntityID = _entity.id;
96985
96986                 wikidata.itemsByTitle(language()[2], value, function(err, data) {
96987                     if (err) return;
96988
96989                     // If graph has changed, we can't apply this update.
96990                     if (context.graph() !== initGraph) return;
96991
96992                     if (!data || !Object.keys(data).length) return;
96993
96994                     var qids = Object.keys(data);
96995                     var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
96996                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
96997
96998                     currTags.wikidata = value;
96999
97000                     // Coalesce the update of wikidata tag into the previous tag change
97001                     context.overwrite(
97002                         actionChangeTags(initEntityID, currTags),
97003                         context.history().undoAnnotation()
97004                     );
97005
97006                     // do not dispatch.call('change') here, because entity_editor
97007                     // changeTags() is not intended to be called asynchronously
97008                 });
97009             }
97010
97011
97012             wiki.tags = function(tags) {
97013                 var value = tags[field.key] || '';
97014                 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
97015                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
97016                 var anchor = m && m[3];
97017
97018                 // value in correct format
97019                 if (l) {
97020                     utilGetSetValue(lang, l[1]);
97021                     utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
97022                     if (anchor) {
97023                         try {
97024                             // Best-effort `anchorencode:` implementation
97025                             anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
97026                         } catch (e) {
97027                             anchor = anchor.replace(/ /g, '_');
97028                         }
97029                     }
97030                     _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
97031                         m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
97032
97033                 // unrecognized value format
97034                 } else {
97035                     utilGetSetValue(title, value);
97036                     if (value && value !== '') {
97037                         utilGetSetValue(lang, '');
97038                         _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
97039                     } else {
97040                         _wikiURL = '';
97041                     }
97042                 }
97043             };
97044
97045
97046             wiki.entity = function(val) {
97047                 if (!arguments.length) return _entity;
97048                 _entity = val;
97049                 return wiki;
97050             };
97051
97052
97053             wiki.focus = function() {
97054                 title.node().focus();
97055             };
97056
97057
97058             return utilRebind(wiki, dispatch$1, 'on');
97059         }
97060
97061         var uiFields = {
97062             access: uiFieldAccess,
97063             address: uiFieldAddress,
97064             check: uiFieldCheck,
97065             combo: uiFieldCombo,
97066             cycleway: uiFieldCycleway,
97067             defaultCheck: uiFieldCheck,
97068             email: uiFieldText,
97069             lanes: uiFieldLanes,
97070             localized: uiFieldLocalized,
97071             maxspeed: uiFieldMaxspeed,
97072             multiCombo: uiFieldCombo,
97073             networkCombo: uiFieldCombo,
97074             number: uiFieldText,
97075             onewayCheck: uiFieldCheck,
97076             radio: uiFieldRadio,
97077             restrictions: uiFieldRestrictions,
97078             semiCombo: uiFieldCombo,
97079             structureRadio: uiFieldRadio,
97080             tel: uiFieldText,
97081             text: uiFieldText,
97082             textarea: uiFieldTextarea,
97083             typeCombo: uiFieldCombo,
97084             url: uiFieldText,
97085             wikidata: uiFieldWikidata,
97086             wikipedia: uiFieldWikipedia
97087         };
97088
97089         function uiField(context, presetField, entity, options) {
97090             options = Object.assign({
97091                 show: true,
97092                 wrap: true,
97093                 remove: true,
97094                 revert: true,
97095                 info: true
97096             }, options);
97097
97098             var dispatch$1 = dispatch('change');
97099             var field = Object.assign({}, presetField);   // shallow copy
97100             var _show = options.show;
97101             var _state = '';
97102             var _tags = {};
97103
97104             var _locked = false;
97105             var _lockedTip = tooltip()
97106                 .title(t('inspector.lock.suggestion', { label: field.label }))
97107                 .placement('bottom');
97108
97109
97110             field.keys = field.keys || [field.key];
97111
97112             // only create the fields that are actually being shown
97113             if (_show && !field.impl) {
97114                 createField();
97115             }
97116
97117             // Creates the field.. This is done lazily,
97118             // once we know that the field will be shown.
97119             function createField() {
97120                 field.impl = uiFields[field.type](field, context)
97121                     .on('change', function(t, onInput) {
97122                         dispatch$1.call('change', field, t, onInput);
97123                     });
97124
97125                 if (entity) {
97126                     field.entityID = entity.id;
97127                     // if this field cares about the entity, pass it along
97128                     if (field.impl.entity) {
97129                         field.impl.entity(entity);
97130                     }
97131                 }
97132             }
97133
97134
97135             function isModified() {
97136                 if (!entity) return false;
97137                 var original = context.graph().base().entities[entity.id];
97138                 return field.keys.some(function(key) {
97139                     return original ? _tags[key] !== original.tags[key] : _tags[key];
97140                 });
97141             }
97142
97143
97144             function isPresent() {
97145                 return field.keys.some(function(key) {
97146                     if (field.type === 'multiCombo') {
97147                         for (var tagKey in _tags) {
97148                             if (tagKey.indexOf(key) === 0) {
97149                                 return true;
97150                             }
97151                         }
97152                         return false;
97153                     }
97154                     return _tags[key] !== undefined;
97155                 });
97156             }
97157
97158
97159             function revert(d) {
97160                 event.stopPropagation();
97161                 event.preventDefault();
97162                 if (!entity || _locked) return;
97163
97164                 var original = context.graph().base().entities[entity.id];
97165                 var t = {};
97166                 d.keys.forEach(function(key) {
97167                     t[key] = original ? original.tags[key] : undefined;
97168                 });
97169
97170                 dispatch$1.call('change', d, t);
97171             }
97172
97173
97174             function remove(d) {
97175                 event.stopPropagation();
97176                 event.preventDefault();
97177                 if (_locked) return;
97178
97179                 var t = {};
97180                 d.keys.forEach(function(key) {
97181                     t[key] = undefined;
97182                 });
97183
97184                 dispatch$1.call('change', d, t);
97185             }
97186
97187
97188             field.render = function(selection) {
97189                 var container = selection.selectAll('.form-field')
97190                     .data([field]);
97191
97192                 // Enter
97193                 var enter = container.enter()
97194                     .append('div')
97195                     .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
97196                     .classed('nowrap', !options.wrap);
97197
97198                 if (options.wrap) {
97199                     var labelEnter = enter
97200                         .append('label')
97201                         .attr('class', 'field-label')
97202                         .attr('for', function(d) { return 'preset-input-' + d.safeid; });
97203
97204                     var textEnter = labelEnter
97205                         .append('span')
97206                         .attr('class', 'label-text');
97207
97208                     textEnter
97209                         .append('span')
97210                         .attr('class', 'label-textvalue')
97211                         .text(function(d) { return d.label(); });
97212
97213                     textEnter
97214                         .append('span')
97215                         .attr('class', 'label-textannotation');
97216
97217                     if (options.remove) {
97218                         labelEnter
97219                             .append('button')
97220                             .attr('class', 'remove-icon')
97221                             .attr('title', t('icons.remove'))
97222                             .attr('tabindex', -1)
97223                             .call(svgIcon('#iD-operation-delete'));
97224                     }
97225
97226                     if (options.revert) {
97227                         labelEnter
97228                             .append('button')
97229                             .attr('class', 'modified-icon')
97230                             .attr('title', t('icons.undo'))
97231                             .attr('tabindex', -1)
97232                             .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
97233                     }
97234                 }
97235
97236
97237                 // Update
97238                 container = container
97239                     .merge(enter);
97240
97241                 container.select('.field-label > .remove-icon')  // propagate bound data
97242                     .on('click', remove);
97243
97244                 container.select('.field-label > .modified-icon')  // propagate bound data
97245                     .on('click', revert);
97246
97247                 container
97248                     .each(function(d) {
97249                         var selection = d3_select(this);
97250
97251                         if (!d.impl) {
97252                             createField();
97253                         }
97254
97255                         var reference, help;
97256
97257                         // instantiate field help
97258                         if (options.wrap && field.type === 'restrictions') {
97259                             help = uiFieldHelp(context, 'restrictions');
97260                         }
97261
97262                         // instantiate tag reference
97263                         if (options.wrap && options.info) {
97264                             var referenceKey = d.key;
97265                             if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
97266                                 referenceKey = referenceKey.replace(/:$/, '');
97267                             }
97268
97269                             reference = uiTagReference(d.reference || { key: referenceKey });
97270                             if (_state === 'hover') {
97271                                 reference.showing(false);
97272                             }
97273                         }
97274
97275                         selection
97276                             .call(d.impl);
97277
97278                         // add field help components
97279                         if (help) {
97280                             selection
97281                                 .call(help.body)
97282                                 .select('.field-label')
97283                                 .call(help.button);
97284                         }
97285
97286                         // add tag reference components
97287                         if (reference) {
97288                             selection
97289                                 .call(reference.body)
97290                                 .select('.field-label')
97291                                 .call(reference.button);
97292                         }
97293
97294                         d.impl.tags(_tags);
97295                     });
97296
97297
97298                     container
97299                         .classed('locked', _locked)
97300                         .classed('modified', isModified())
97301                         .classed('present', isPresent());
97302
97303
97304                     // show a tip and lock icon if the field is locked
97305                     var annotation = container.selectAll('.field-label .label-textannotation');
97306                     var icon = annotation.selectAll('.icon')
97307                         .data(_locked ? [0]: []);
97308
97309                     icon.exit()
97310                         .remove();
97311
97312                     icon.enter()
97313                         .append('svg')
97314                         .attr('class', 'icon')
97315                         .append('use')
97316                         .attr('xlink:href', '#fas-lock');
97317
97318                     container.call(_locked ? _lockedTip : _lockedTip.destroy);
97319             };
97320
97321
97322             field.state = function(val) {
97323                 if (!arguments.length) return _state;
97324                 _state = val;
97325                 return field;
97326             };
97327
97328
97329             field.tags = function(val) {
97330                 if (!arguments.length) return _tags;
97331                 _tags = val;
97332                 return field;
97333             };
97334
97335
97336             field.locked = function(val) {
97337                 if (!arguments.length) return _locked;
97338                 _locked = val;
97339                 return field;
97340             };
97341
97342
97343             field.show = function() {
97344                 _show = true;
97345                 if (!field.impl) {
97346                     createField();
97347                 }
97348                 if (field.default && field.key && _tags[field.key] !== field.default) {
97349                     var t = {};
97350                     t[field.key] = field.default;
97351                     dispatch$1.call('change', this, t);
97352                 }
97353             };
97354
97355             // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
97356             field.isShown = function() {
97357                 return _show || isPresent();
97358             };
97359
97360
97361             // An allowed field can appear in the UI or in the 'Add field' dropdown.
97362             // A non-allowed field is hidden from the user altogether
97363             field.isAllowed = function() {
97364                 if (!entity || isPresent()) return true;   // a field with a value should always display
97365
97366                 var latest = context.hasEntity(entity.id);   // check the most current copy of the entity
97367                 if (!latest) return true;
97368
97369                 var prerequisiteTag = field.prerequisiteTag;
97370                 if (prerequisiteTag) {
97371                     if (prerequisiteTag.key) {
97372                         var value = latest.tags[prerequisiteTag.key];
97373                         if (!value) return false;
97374
97375                         if (prerequisiteTag.valueNot) {
97376                             return prerequisiteTag.valueNot !== value;
97377                         }
97378                         if (prerequisiteTag.value) {
97379                             return prerequisiteTag.value === value;
97380                         }
97381                     } else if (prerequisiteTag.keyNot) {
97382                         if (latest.tags[prerequisiteTag.keyNot]) return false;
97383                     }
97384                 }
97385                 return true;
97386             };
97387
97388
97389             field.focus = function() {
97390                 if (field.impl) {
97391                     field.impl.focus();
97392                 }
97393             };
97394
97395
97396             return utilRebind(field, dispatch$1, 'on');
97397         }
97398
97399         function uiFormFields(context) {
97400             var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
97401             var _fieldsArr = [];
97402             var _lastPlaceholder = '';
97403             var _state = '';
97404             var _klass = '';
97405
97406
97407             function formFields(selection) {
97408                 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
97409                 var shown = allowedFields.filter(function(field) { return field.isShown(); });
97410                 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
97411
97412                 var container = selection.selectAll('.form-fields-container')
97413                     .data([0]);
97414
97415                 container = container.enter()
97416                     .append('div')
97417                     .attr('class', 'form-fields-container ' + (_klass || ''))
97418                     .merge(container);
97419
97420
97421                 var fields = container.selectAll('.wrap-form-field')
97422                     .data(shown, function(d) { return d.id + (d.entityID || ''); });
97423
97424                 fields.exit()
97425                     .remove();
97426
97427                 // Enter
97428                 var enter = fields.enter()
97429                     .append('div')
97430                     .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
97431
97432                 // Update
97433                 fields = fields
97434                     .merge(enter);
97435
97436                 fields
97437                     .order()
97438                     .each(function(d) {
97439                         d3_select(this)
97440                             .call(d.render);
97441                     });
97442
97443
97444                 var titles = [];
97445                 var moreFields = notShown.map(function(field) {
97446                     var label = field.label();
97447                     titles.push(label);
97448                     
97449                     var terms = field.terms();
97450                     if (field.key) terms.push(field.key);
97451                     if (field.keys) terms = terms.concat(field.keys);
97452
97453                     return {
97454                         title: label,
97455                         value: label,
97456                         field: field,
97457                         terms: terms
97458                     };
97459                 });
97460
97461                 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
97462
97463
97464                 var more = selection.selectAll('.more-fields')
97465                     .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
97466
97467                 more.exit()
97468                     .remove();
97469
97470                 more = more.enter()
97471                     .append('div')
97472                     .attr('class', 'more-fields')
97473                     .append('label')
97474                     .text(t('inspector.add_fields'))
97475                     .merge(more);
97476
97477
97478                 var input = more.selectAll('.value')
97479                     .data([0]);
97480
97481                 input.exit()
97482                     .remove();
97483
97484                 input = input.enter()
97485                     .append('input')
97486                     .attr('class', 'value')
97487                     .attr('type', 'text')
97488                     .attr('placeholder', placeholder)
97489                     .call(utilNoAuto)
97490                     .merge(input);
97491
97492                 input
97493                     .call(utilGetSetValue, '')
97494                     .call(moreCombo
97495                         .data(moreFields)
97496                         .on('accept', function (d) {
97497                             if (!d) return;  // user entered something that was not matched
97498                             var field = d.field;
97499                             field.show();
97500                             selection.call(formFields);  // rerender
97501                             if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
97502                                 field.focus();
97503                             }
97504                         })
97505                     );
97506
97507                 // avoid updating placeholder excessively (triggers style recalc)
97508                 if (_lastPlaceholder !== placeholder) {
97509                     input.attr('placeholder', placeholder);
97510                     _lastPlaceholder = placeholder;
97511                 }
97512             }
97513
97514
97515             formFields.fieldsArr = function(val) {
97516                 if (!arguments.length) return _fieldsArr;
97517                 _fieldsArr = val || [];
97518                 return formFields;
97519             };
97520
97521             formFields.state = function(val) {
97522                 if (!arguments.length) return _state;
97523                 _state = val;
97524                 return formFields;
97525             };
97526
97527             formFields.klass = function(val) {
97528                 if (!arguments.length) return _klass;
97529                 _klass = val;
97530                 return formFields;
97531             };
97532
97533
97534             return formFields;
97535         }
97536
97537         function uiPresetEditor(context) {
97538             var dispatch$1 = dispatch('change');
97539             var formFields = uiFormFields(context);
97540             var _state;
97541             var _fieldsArr;
97542             var _preset;
97543             var _tags;
97544             var _entityID;
97545
97546
97547             function presetEditor(selection) {
97548                 selection.call(uiDisclosure(context, 'preset_fields', true)
97549                     .title(t('inspector.all_fields'))
97550                     .content(render)
97551                 );
97552             }
97553
97554
97555             function render(selection) {
97556                 if (!_fieldsArr) {
97557                     var entity = context.entity(_entityID);
97558                     var geometry = context.geometry(_entityID);
97559                     var presets = context.presets();
97560
97561                     _fieldsArr = [];
97562
97563                     _preset.fields.forEach(function(field) {
97564                         if (field.matchGeometry(geometry)) {
97565                             _fieldsArr.push(
97566                                 uiField(context, field, entity)
97567                             );
97568                         }
97569                     });
97570
97571                     if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
97572                         _fieldsArr.push(
97573                             uiField(context, presets.field('restrictions'), entity)
97574                         );
97575                     }
97576
97577                     var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
97578                     additionalFields.sort(function(field1, field2) {
97579                         return field1.label().localeCompare(field2.label(), currentLocale);
97580                     });
97581
97582                     additionalFields.forEach(function(field) {
97583                         if (_preset.fields.indexOf(field) === -1) {
97584                             _fieldsArr.push(
97585                                 uiField(context, field, entity, { show: false })
97586                             );
97587                         }
97588                     });
97589
97590                     _fieldsArr.forEach(function(field) {
97591                         field
97592                             .on('change', function(t, onInput) {
97593                                 dispatch$1.call('change', field, t, onInput);
97594                             });
97595                     });
97596                 }
97597
97598                 _fieldsArr.forEach(function(field) {
97599                     field
97600                         .state(_state)
97601                         .tags(_tags);
97602                 });
97603
97604
97605                 selection
97606                     .call(formFields
97607                         .fieldsArr(_fieldsArr)
97608                         .state(_state)
97609                         .klass('inspector-inner fillL3')
97610                     );
97611
97612
97613                 selection.selectAll('.wrap-form-field input')
97614                     .on('keydown', function() {
97615                         // if user presses enter, and combobox is not active, accept edits..
97616                         if (event.keyCode === 13 && d3_select('.combobox').empty()) {
97617                             context.enter(modeBrowse(context));
97618                         }
97619                     });
97620             }
97621
97622
97623             presetEditor.preset = function(val) {
97624                 if (!arguments.length) return _preset;
97625                 if (_preset && _preset.id === val.id) return presetEditor;
97626                 _preset = val;
97627                 _fieldsArr = null;
97628                 return presetEditor;
97629             };
97630
97631
97632             presetEditor.state = function(val) {
97633                 if (!arguments.length) return _state;
97634                 _state = val;
97635                 return presetEditor;
97636             };
97637
97638
97639             presetEditor.tags = function(val) {
97640                 if (!arguments.length) return _tags;
97641                 _tags = val;
97642                 // Don't reset _fieldsArr here.
97643                 return presetEditor;
97644             };
97645
97646
97647             presetEditor.entityID = function(val) {
97648                 if (!arguments.length) return _entityID;
97649                 if (_entityID === val) return presetEditor;
97650                 _entityID = val;
97651                 _fieldsArr = null;
97652                 return presetEditor;
97653             };
97654
97655
97656             return utilRebind(presetEditor, dispatch$1, 'on');
97657         }
97658
97659         function uiEntityIssues(context) {
97660             var _selection = d3_select(null);
97661             var _activeIssueID;
97662             var _entityID;
97663
97664             // Refresh on validated events
97665             context.validator()
97666                 .on('validated.entity_issues', function() {
97667                      _selection.selectAll('.disclosure-wrap-entity_issues')
97668                          .call(render);
97669
97670                     update();
97671                 })
97672                 .on('focusedIssue.entity_issues', function(issue) {
97673                      makeActiveIssue(issue.id);
97674                 });
97675
97676
97677             function entityIssues(selection) {
97678                 _selection = selection;
97679
97680                 selection
97681                     .call(uiDisclosure(context, 'entity_issues', true)
97682                         .content(render)
97683                     );
97684
97685                 update();
97686             }
97687
97688             function getIssues() {
97689                 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
97690             }
97691
97692             function makeActiveIssue(issueID) {
97693                 _activeIssueID = issueID;
97694                 _selection.selectAll('.issue-container')
97695                     .classed('active', function(d) { return d.id === _activeIssueID; });
97696             }
97697
97698             function update() {
97699
97700                 var issues = getIssues();
97701
97702                 _selection
97703                     .classed('hide', issues.length === 0);
97704
97705                 _selection.selectAll('.hide-toggle-entity_issues span')
97706                     .text(t('issues.list_title', { count: issues.length }));
97707             }
97708
97709
97710             function render(selection) {
97711                 var issues = getIssues();
97712                 _activeIssueID = issues.length > 0 ? issues[0].id : null;
97713
97714
97715                 var containers = selection.selectAll('.issue-container')
97716                     .data(issues, function(d) { return d.id; });
97717
97718                 // Exit
97719                 containers.exit()
97720                     .remove();
97721
97722                 // Enter
97723                 var containersEnter = containers.enter()
97724                     .append('div')
97725                     .attr('class', 'issue-container');
97726
97727
97728                 var itemsEnter = containersEnter
97729                     .append('div')
97730                     .attr('class', function(d) { return 'issue severity-' + d.severity; })
97731                     .on('mouseover.highlight', function(d) {
97732                         // don't hover-highlight the selected entity
97733                         var ids = d.entityIds
97734                             .filter(function(e) { return e !== _entityID; });
97735
97736                         utilHighlightEntities(ids, true, context);
97737                     })
97738                     .on('mouseout.highlight', function(d) {
97739                         var ids = d.entityIds
97740                             .filter(function(e) { return e !== _entityID; });
97741
97742                         utilHighlightEntities(ids, false, context);
97743                     });
97744
97745                 var labelsEnter = itemsEnter
97746                     .append('div')
97747                     .attr('class', 'issue-label')
97748                     .on('click', function(d) {
97749
97750                         makeActiveIssue(d.id); // expand only the clicked item
97751
97752                         var extent = d.extent(context.graph());
97753                         if (extent) {
97754                             var setZoom = Math.max(context.map().zoom(), 19);
97755                             context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
97756                         }
97757                     });
97758
97759                 var textEnter = labelsEnter
97760                     .append('span')
97761                     .attr('class', 'issue-text');
97762
97763                 textEnter
97764                     .append('span')
97765                     .attr('class', 'issue-icon')
97766                     .each(function(d) {
97767                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
97768                         d3_select(this)
97769                             .call(svgIcon(iconName));
97770                     });
97771
97772                 textEnter
97773                     .append('span')
97774                     .attr('class', 'issue-message');
97775
97776
97777                 var infoButton = labelsEnter
97778                     .append('button')
97779                     .attr('class', 'issue-info-button')
97780                     .attr('title', t('icons.information'))
97781                     .attr('tabindex', -1)
97782                     .call(svgIcon('#iD-icon-inspect'));
97783
97784                 infoButton
97785                     .on('click', function () {
97786                         event.stopPropagation();
97787                         event.preventDefault();
97788                         this.blur();    // avoid keeping focus on the button - #4641
97789
97790                         var container = d3_select(this.parentNode.parentNode.parentNode);
97791                         var info = container.selectAll('.issue-info');
97792                         var isExpanded = info.classed('expanded');
97793
97794                         if (isExpanded) {
97795                             info
97796                                 .transition()
97797                                 .duration(200)
97798                                 .style('max-height', '0px')
97799                                 .style('opacity', '0')
97800                                 .on('end', function () {
97801                                     info.classed('expanded', false);
97802                                 });
97803                         } else {
97804                             info
97805                                 .classed('expanded', true)
97806                                 .transition()
97807                                 .duration(200)
97808                                 .style('max-height', '200px')
97809                                 .style('opacity', '1')
97810                                 .on('end', function () {
97811                                     info.style('max-height', null);
97812                                 });
97813                         }
97814                     });
97815
97816                 itemsEnter
97817                     .append('ul')
97818                     .attr('class', 'issue-fix-list');
97819
97820                 containersEnter
97821                     .append('div')
97822                     .attr('class', 'issue-info')
97823                     .style('max-height', '0')
97824                     .style('opacity', '0')
97825                     .each(function(d) {
97826                         if (typeof d.reference === 'function') {
97827                             d3_select(this)
97828                                 .call(d.reference);
97829                         } else {
97830                             d3_select(this)
97831                                 .text(t('inspector.no_documentation_key'));
97832                         }
97833                     });
97834
97835
97836                 // Update
97837                 containers = containers
97838                     .merge(containersEnter)
97839                     .classed('active', function(d) { return d.id === _activeIssueID; });
97840
97841                 containers.selectAll('.issue-message')
97842                     .text(function(d) {
97843                         return d.message(context);
97844                     });
97845
97846                 // fixes
97847                 var fixLists = containers.selectAll('.issue-fix-list');
97848
97849                 var fixes = fixLists.selectAll('.issue-fix-item')
97850                     .data(function(d) { return d.fixes ? d.fixes : []; });
97851
97852                 var fixesEnter = fixes.enter()
97853                     .append('li')
97854                     .attr('class', function(d) {
97855                         return 'issue-fix-item ' + (d.onClick ? 'actionable' : '');
97856                     })
97857                     .on('click', function(d) {
97858                         // not all fixes are actionable
97859                         if (!d.onClick) return;
97860
97861                         // Don't run another fix for this issue within a second of running one
97862                         // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
97863                         if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) return;
97864                         d.issue.dateLastRanFix = new Date();
97865
97866                         // remove hover-highlighting
97867                         utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
97868
97869                         new Promise(function(resolve, reject) {
97870                             d.onClick(context, resolve, reject);
97871                             if (d.onClick.length <= 1) {
97872                                 // if the fix doesn't take any completion parameters then consider it resolved
97873                                 resolve();
97874                             }
97875                         })
97876                         .then(function() {
97877                             // revalidate whenever the fix has finished running successfully
97878                             context.validator().validate();
97879                         });
97880                     })
97881                     .on('mouseover.highlight', function(d) {
97882                         utilHighlightEntities(d.entityIds, true, context);
97883                     })
97884                     .on('mouseout.highlight', function(d) {
97885                         utilHighlightEntities(d.entityIds, false, context);
97886                     });
97887
97888                 fixesEnter
97889                     .append('span')
97890                     .attr('class', 'fix-icon')
97891                     .each(function(d) {
97892                         var iconName = d.icon || 'iD-icon-wrench';
97893                         if (iconName.startsWith('maki')) {
97894                             iconName += '-15';
97895                         }
97896                         d3_select(this).call(svgIcon('#' + iconName));
97897                     });
97898
97899                 fixesEnter
97900                     .append('span')
97901                     .attr('class', 'fix-message')
97902                     .text(function(d) { return d.title; });
97903             }
97904
97905
97906             entityIssues.entityID = function(val) {
97907                 if (!arguments.length) return _entityID;
97908                 if (_entityID !== val) {
97909                     _entityID = val;
97910                     _activeIssueID = null;
97911                 }
97912                 return entityIssues;
97913             };
97914
97915
97916             return entityIssues;
97917         }
97918
97919         function uiEntityEditor(context) {
97920             var dispatch$1 = dispatch('choose');
97921             var _state = 'select';
97922             var _coalesceChanges = false;
97923             var _modified = false;
97924             var _scrolled = false;
97925             var _base;
97926             var _entityID;
97927             var _activePreset;
97928             var _tagReference;
97929             var _presetFavorite;
97930
97931             var entityIssues = uiEntityIssues(context);
97932             var quickLinks = uiQuickLinks();
97933             var presetEditor = uiPresetEditor(context).on('change', changeTags);
97934             var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
97935             var rawMemberEditor = uiRawMemberEditor(context);
97936             var rawMembershipEditor = uiRawMembershipEditor(context);
97937
97938             function entityEditor(selection) {
97939                 var entity = context.entity(_entityID);
97940                 var tags = Object.assign({}, entity.tags);  // shallow copy
97941
97942                 // Header
97943                 var header = selection.selectAll('.header')
97944                     .data([0]);
97945
97946                 // Enter
97947                 var headerEnter = header.enter()
97948                     .append('div')
97949                     .attr('class', 'header fillL cf');
97950
97951                 headerEnter
97952                     .append('button')
97953                     .attr('class', 'fl preset-reset preset-choose')
97954                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
97955
97956                 headerEnter
97957                     .append('button')
97958                     .attr('class', 'fr preset-close')
97959                     .on('click', function() { context.enter(modeBrowse(context)); })
97960                     .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
97961
97962                 headerEnter
97963                     .append('h3')
97964                     .text(t('inspector.edit'));
97965
97966                 // Update
97967                 header = header
97968                     .merge(headerEnter);
97969
97970                 header.selectAll('.preset-reset')
97971                     .on('click', function() {
97972                         dispatch$1.call('choose', this, _activePreset);
97973                     });
97974
97975
97976                 // Body
97977                 var body = selection.selectAll('.inspector-body')
97978                     .data([0]);
97979
97980                 // Enter
97981                 var bodyEnter = body.enter()
97982                     .append('div')
97983                     .attr('class', 'inspector-body')
97984                     .on('scroll.entity-editor', function() { _scrolled = true; });
97985
97986                 bodyEnter
97987                     .append('div')
97988                     .attr('class', 'preset-list-item inspector-inner')
97989                     .append('div')
97990                     .attr('class', 'preset-list-button-wrap')
97991                     .append('button')
97992                     .attr('class', 'preset-list-button preset-reset')
97993                     .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
97994                     .append('div')
97995                     .attr('class', 'label')
97996                     .append('div')
97997                     .attr('class', 'label-inner');
97998
97999                 bodyEnter
98000                     .append('div')
98001                     .attr('class', 'preset-quick-links');
98002
98003                 bodyEnter
98004                     .append('div')
98005                     .attr('class', 'entity-issues');
98006
98007                 bodyEnter
98008                     .append('div')
98009                     .attr('class', 'preset-editor');
98010
98011                 bodyEnter
98012                     .append('div')
98013                     .attr('class', 'raw-tag-editor inspector-inner');
98014
98015                 bodyEnter
98016                     .append('div')
98017                     .attr('class', 'raw-member-editor inspector-inner');
98018
98019                 bodyEnter
98020                     .append('div')
98021                     .attr('class', 'raw-membership-editor inspector-inner');
98022
98023                 bodyEnter
98024                     .append('input')
98025                     .attr('type', 'text')
98026                     .attr('class', 'key-trap');
98027
98028
98029                 // Update
98030                 body = body
98031                     .merge(bodyEnter);
98032
98033                 if (_presetFavorite) {
98034                     body.selectAll('.preset-list-button-wrap')
98035                         .call(_presetFavorite.button);
98036                 }
98037
98038                 // update header
98039                 if (_tagReference) {
98040                     body.selectAll('.preset-list-button-wrap')
98041                         .call(_tagReference.button);
98042
98043                     body.selectAll('.preset-list-item')
98044                         .call(_tagReference.body);
98045                 }
98046
98047                 body.selectAll('.preset-reset')
98048                     .on('click', function() {
98049                         dispatch$1.call('choose', this, _activePreset);
98050                     });
98051
98052                 body.select('.preset-list-item button')
98053                     .call(uiPresetIcon(context)
98054                         .geometry(context.geometry(_entityID))
98055                         .preset(_activePreset)
98056                     );
98057
98058                 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
98059                 var label = body.select('.label-inner');
98060                 var nameparts = label.selectAll('.namepart')
98061                     .data(_activePreset.name().split(' – '), function(d) { return d; });
98062
98063                 nameparts.exit()
98064                     .remove();
98065
98066                 nameparts
98067                     .enter()
98068                     .append('div')
98069                     .attr('class', 'namepart')
98070                     .text(function(d) { return d; });
98071
98072                 // update quick links
98073                 var choices = [{
98074                     id: 'zoom_to',
98075                     label: 'inspector.zoom_to.title',
98076                     tooltip: function() {
98077                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
98078                     },
98079                     click: function zoomTo() {
98080                         context.mode().zoomToSelected();
98081                     }
98082                 }];
98083
98084                 body.select('.preset-quick-links')
98085                     .call(quickLinks.choices(choices));
98086
98087
98088                 // update editor sections
98089                 body.select('.entity-issues')
98090                     .call(entityIssues
98091                         .entityID(_entityID)
98092                     );
98093
98094                 body.select('.preset-editor')
98095                     .call(presetEditor
98096                         .preset(_activePreset)
98097                         .entityID(_entityID)
98098                         .tags(tags)
98099                         .state(_state)
98100                     );
98101
98102                 body.select('.raw-tag-editor')
98103                     .call(rawTagEditor
98104                         .preset(_activePreset)
98105                         .entityID(_entityID)
98106                         .tags(tags)
98107                         .state(_state)
98108                     );
98109
98110                 if (entity.type === 'relation') {
98111                     body.select('.raw-member-editor')
98112                         .style('display', 'block')
98113                         .call(rawMemberEditor
98114                             .entityID(_entityID)
98115                         );
98116                 } else {
98117                     body.select('.raw-member-editor')
98118                         .style('display', 'none');
98119                 }
98120
98121                 body.select('.raw-membership-editor')
98122                     .call(rawMembershipEditor
98123                         .entityID(_entityID)
98124                     );
98125
98126                 body.select('.key-trap')
98127                     .on('keydown.key-trap', function() {
98128                         // On tabbing, send focus back to the first field on the inspector-body
98129                         // (probably the `name` field) #4159
98130                         if (event.keyCode === 9 && !event.shiftKey) {
98131                             event.preventDefault();
98132                             body.select('input').node().focus();
98133                         }
98134                     });
98135
98136                 context.history()
98137                     .on('change.entity-editor', historyChanged);
98138
98139
98140                 function historyChanged(difference) {
98141                     if (_state === 'hide') return;
98142                     var significant = !difference ||
98143                             difference.didChange.properties ||
98144                             difference.didChange.addition ||
98145                             difference.didChange.deletion;
98146                     if (!significant) return;
98147
98148                     var entity = context.hasEntity(_entityID);
98149                     var graph = context.graph();
98150                     if (!entity) return;
98151
98152                     var match = context.presets().match(entity, graph);
98153                     var activePreset = entityEditor.preset();
98154                     var weakPreset = activePreset &&
98155                         Object.keys(activePreset.addTags || {}).length === 0;
98156
98157                     // A "weak" preset doesn't set any tags. (e.g. "Address")
98158                     // Don't replace a weak preset with a fallback preset (e.g. "Point")
98159                     if (!(weakPreset && match.isFallback())) {
98160                         entityEditor.preset(match);
98161
98162                         if (match.id !== activePreset.id) {
98163                             // flash the button to indicate the preset changed
98164                             selection
98165                                 .selectAll('button.preset-reset .label')
98166                                 .style('background-color', '#fff')
98167                                 .transition()
98168                                 .duration(500)
98169                                 .style('background-color', null);
98170                         }
98171                     }
98172                     entityEditor.modified(_base !== graph);
98173                     entityEditor(selection);
98174                 }
98175             }
98176
98177
98178             // Tag changes that fire on input can all get coalesced into a single
98179             // history operation when the user leaves the field.  #2342
98180             function changeTags(changed, onInput) {
98181                 var entity = context.entity(_entityID);
98182                 var annotation = t('operations.change_tags.annotation');
98183                 var tags = Object.assign({}, entity.tags);   // shallow copy
98184
98185                 for (var k in changed) {
98186                     if (!k) continue;
98187                     var v = changed[k];
98188                     if (v !== undefined || tags.hasOwnProperty(k)) {
98189                         tags[k] = v;
98190                     }
98191                 }
98192
98193                 if (!onInput) {
98194                     tags = utilCleanTags(tags);
98195                 }
98196
98197                 if (!fastDeepEqual(entity.tags, tags)) {
98198                     if (_coalesceChanges) {
98199                         context.overwrite(actionChangeTags(_entityID, tags), annotation);
98200                     } else {
98201                         context.perform(actionChangeTags(_entityID, tags), annotation);
98202                         _coalesceChanges = !!onInput;
98203                     }
98204                 }
98205
98206                 // if leaving field (blur event), rerun validation
98207                 if (!onInput) {
98208                     context.validator().validate();
98209                 }
98210             }
98211
98212
98213             entityEditor.modified = function(val) {
98214                 if (!arguments.length) return _modified;
98215                 _modified = val;
98216                 d3_selectAll('button.preset-close use')
98217                     .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
98218                 return entityEditor;
98219             };
98220
98221
98222             entityEditor.state = function(val) {
98223                 if (!arguments.length) return _state;
98224                 _state = val;
98225                 return entityEditor;
98226             };
98227
98228
98229             entityEditor.entityID = function(val) {
98230                 if (!arguments.length) return _entityID;
98231                 if (_entityID === val) return entityEditor;  // exit early if no change
98232
98233                 _entityID = val;
98234                 _base = context.graph();
98235                 _coalesceChanges = false;
98236
98237                 // reset the scroll to the top of the inspector (warning: triggers reflow)
98238                 if (_scrolled) {
98239                     window.requestIdleCallback(function() {
98240                         var body = d3_selectAll('.entity-editor-pane .inspector-body');
98241                         if (!body.empty()) {
98242                             _scrolled = false;
98243                             body.node().scrollTop = 0;
98244                         }
98245                     });
98246                 }
98247
98248                 var presetMatch = context.presets().match(context.entity(_entityID), _base);
98249
98250                 return entityEditor
98251                     .preset(presetMatch)
98252                     .modified(false);
98253             };
98254
98255
98256             entityEditor.preset = function(val) {
98257                 if (!arguments.length) return _activePreset;
98258                 if (val !== _activePreset) {
98259                     _activePreset = val;
98260                     _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)))
98261                         .showing(false);
98262                 }
98263                 _presetFavorite = uiPresetFavoriteButton(_activePreset, context.geometry(_entityID), context);
98264                 return entityEditor;
98265             };
98266
98267
98268             return utilRebind(entityEditor, dispatch$1, 'on');
98269         }
98270
98271         function uiPresetList(context) {
98272             var dispatch$1 = dispatch('choose');
98273             var _entityID;
98274             var _currentPreset;
98275             var _autofocus = false;
98276             var geocoder = services$1.geocoder;
98277
98278
98279             function presetList(selection) {
98280                 var entity = context.entity(_entityID);
98281                 var geometry = context.geometry(_entityID);
98282
98283                 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
98284                 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
98285                     geometry = 'point';
98286                 }
98287
98288                 var presets = context.presets().matchGeometry(geometry);
98289
98290                 selection.html('');
98291
98292                 var messagewrap = selection
98293                     .append('div')
98294                     .attr('class', 'header fillL');
98295
98296                 var message = messagewrap
98297                     .append('h3')
98298                     .text(t('inspector.choose'));
98299
98300                 messagewrap
98301                     .append('button')
98302                     .attr('class', 'preset-choose')
98303                     .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
98304                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
98305
98306                 function initialKeydown() {
98307                     // hack to let delete shortcut work when search is autofocused
98308                     if (search.property('value').length === 0 &&
98309                         (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
98310                          event.keyCode === utilKeybinding.keyCodes['⌦'])) {
98311                         event.preventDefault();
98312                         event.stopPropagation();
98313                         operationDelete([_entityID], context)();
98314
98315                     // hack to let undo work when search is autofocused
98316                     } else if (search.property('value').length === 0 &&
98317                         (event.ctrlKey || event.metaKey) &&
98318                         event.keyCode === utilKeybinding.keyCodes.z) {
98319                         event.preventDefault();
98320                         event.stopPropagation();
98321                         context.undo();
98322                     } else if (!event.ctrlKey && !event.metaKey) {
98323                         // don't check for delete/undo hack on future keydown events
98324                         d3_select(this).on('keydown', keydown);
98325                         keydown.call(this);
98326                     }
98327                 }
98328
98329                 function keydown() {
98330                     // down arrow
98331                     if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
98332                         // if insertion point is at the end of the string
98333                         search.node().selectionStart === search.property('value').length) {
98334                         event.preventDefault();
98335                         event.stopPropagation();
98336                         // move focus to the first item in the preset list
98337                         var buttons = list.selectAll('.preset-list-button');
98338                         if (!buttons.empty()) buttons.nodes()[0].focus();
98339                     }
98340                 }
98341
98342                 function keypress() {
98343                     // enter
98344                     var value = search.property('value');
98345                     if (event.keyCode === 13 && value.length) {
98346                         list.selectAll('.preset-list-item:first-child')
98347                             .each(function(d) { d.choose.call(this); });
98348                     }
98349                 }
98350
98351                 function inputevent() {
98352                     var value = search.property('value');
98353                     list.classed('filtered', value.length);
98354                     if (value.length) {
98355                         var entity = context.entity(_entityID);
98356                         if (geocoder && entity) {
98357                             var center = entity.extent(context.graph()).center();
98358                             geocoder.countryCode(center, function countryCallback(err, countryCode) {
98359                                 // get the input value again because it may have changed
98360                                 var currentValue = search.property('value');
98361
98362                                 if (!currentValue.length) return;
98363
98364                                 var results;
98365                                 if (!err && countryCode) {
98366                                     countryCode = countryCode.toLowerCase();
98367                                     results = presets.search(currentValue, geometry, countryCode);
98368                                 } else {
98369                                     results = presets.search(currentValue, geometry);
98370                                 }
98371                                 message.text(t('inspector.results', {
98372                                     n: results.collection.length,
98373                                     search: currentValue
98374                                 }));
98375                                 list.call(drawList, results);
98376                             });
98377                         }
98378                     } else {
98379                         list.call(drawList, context.presets().defaults(geometry, 36));
98380                         message.text(t('inspector.choose'));
98381                     }
98382                 }
98383
98384                 var searchWrap = selection
98385                     .append('div')
98386                     .attr('class', 'search-header');
98387
98388                 var search = searchWrap
98389                     .append('input')
98390                     .attr('class', 'preset-search-input')
98391                     .attr('placeholder', t('inspector.search'))
98392                     .attr('type', 'search')
98393                     .call(utilNoAuto)
98394                     .on('keydown', initialKeydown)
98395                     .on('keypress', keypress)
98396                     .on('input', inputevent);
98397
98398                 searchWrap
98399                     .call(svgIcon('#iD-icon-search', 'pre-text'));
98400
98401                 if (_autofocus) {
98402                     search.node().focus();
98403                 }
98404
98405                 var listWrap = selection
98406                     .append('div')
98407                     .attr('class', 'inspector-body');
98408
98409                 var list = listWrap
98410                     .append('div')
98411                     .attr('class', 'preset-list fillL cf')
98412                     .call(drawList, context.presets().defaults(geometry, 36));
98413
98414                 context.features().on('change.preset-list', updateForFeatureHiddenState);
98415             }
98416
98417
98418             function drawList(list, presets) {
98419                 var collection = presets.collection.reduce(function(collection, preset) {
98420                     if (preset.members) {
98421                         if (preset.members.collection.filter(function(preset) {
98422                             return preset.visible();
98423                         }).length > 1) {
98424                             collection.push(CategoryItem(preset));
98425                         }
98426                     } else if (preset.visible()) {
98427                         collection.push(PresetItem(preset));
98428                     }
98429                     return collection;
98430                 }, []);
98431
98432                 var items = list.selectAll('.preset-list-item')
98433                     .data(collection, function(d) { return d.preset.id; });
98434
98435                 items.order();
98436
98437                 items.exit()
98438                     .remove();
98439
98440                 items.enter()
98441                     .append('div')
98442                     .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
98443                     .classed('current', function(item) { return item.preset === _currentPreset; })
98444                     .each(function(item) { d3_select(this).call(item); })
98445                     .style('opacity', 0)
98446                     .transition()
98447                     .style('opacity', 1);
98448
98449                 updateForFeatureHiddenState();
98450             }
98451
98452             function itemKeydown(){
98453                 // the actively focused item
98454                 var item = d3_select(this.closest('.preset-list-item'));
98455                 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
98456
98457                 // arrow down, move focus to the next, lower item
98458                 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
98459                     event.preventDefault();
98460                     event.stopPropagation();
98461                     // the next item in the list at the same level
98462                     var nextItem = d3_select(item.node().nextElementSibling);
98463                     // if there is no next item in this list
98464                     if (nextItem.empty()) {
98465                         // if there is a parent item
98466                         if (!parentItem.empty()) {
98467                             // the item is the last item of a sublist,
98468                             // select the next item at the parent level
98469                             nextItem = d3_select(parentItem.node().nextElementSibling);
98470                         }
98471                     // if the focused item is expanded
98472                     } else if (d3_select(this).classed('expanded')) {
98473                         // select the first subitem instead
98474                         nextItem = item.select('.subgrid .preset-list-item:first-child');
98475                     }
98476                     if (!nextItem.empty()) {
98477                         // focus on the next item
98478                         nextItem.select('.preset-list-button').node().focus();
98479                     }
98480
98481                 // arrow up, move focus to the previous, higher item
98482                 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
98483                     event.preventDefault();
98484                     event.stopPropagation();
98485                     // the previous item in the list at the same level
98486                     var previousItem = d3_select(item.node().previousElementSibling);
98487
98488                     // if there is no previous item in this list
98489                     if (previousItem.empty()) {
98490                         // if there is a parent item
98491                         if (!parentItem.empty()) {
98492                             // the item is the first subitem of a sublist select the parent item
98493                             previousItem = parentItem;
98494                         }
98495                     // if the previous item is expanded
98496                     } else if (previousItem.select('.preset-list-button').classed('expanded')) {
98497                         // select the last subitem of the sublist of the previous item
98498                         previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
98499                     }
98500
98501                     if (!previousItem.empty()) {
98502                         // focus on the previous item
98503                         previousItem.select('.preset-list-button').node().focus();
98504                     } else {
98505                         // the focus is at the top of the list, move focus back to the search field
98506                         var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
98507                         search.node().focus();
98508                     }
98509
98510                 // arrow left, move focus to the parent item if there is one
98511                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
98512                     event.preventDefault();
98513                     event.stopPropagation();
98514                     // if there is a parent item, focus on the parent item
98515                     if (!parentItem.empty()) {
98516                         parentItem.select('.preset-list-button').node().focus();
98517                     }
98518
98519                 // arrow right, choose this item
98520                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
98521                     event.preventDefault();
98522                     event.stopPropagation();
98523                     item.datum().choose.call(d3_select(this).node());
98524                 }
98525             }
98526
98527
98528             function CategoryItem(preset) {
98529                 var box, sublist, shown = false;
98530
98531                 function item(selection) {
98532                     var wrap = selection.append('div')
98533                         .attr('class', 'preset-list-button-wrap category');
98534
98535                     function click() {
98536                         var isExpanded = d3_select(this).classed('expanded');
98537                         var iconName = isExpanded ?
98538                             (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
98539                         d3_select(this)
98540                             .classed('expanded', !isExpanded);
98541                         d3_select(this).selectAll('div.label-inner svg.icon use')
98542                             .attr('href', iconName);
98543                         item.choose();
98544                     }
98545
98546                     var button = wrap
98547                         .append('button')
98548                         .attr('class', 'preset-list-button')
98549                         .classed('expanded', false)
98550                         .call(uiPresetIcon(context)
98551                             .geometry(context.geometry(_entityID))
98552                             .preset(preset))
98553                         .on('click', click)
98554                         .on('keydown', function() {
98555                             // right arrow, expand the focused item
98556                             if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
98557                                 event.preventDefault();
98558                                 event.stopPropagation();
98559                                 // if the item isn't expanded
98560                                 if (!d3_select(this).classed('expanded')) {
98561                                     // toggle expansion (expand the item)
98562                                     click.call(this);
98563                                 }
98564                             // left arrow, collapse the focused item
98565                             } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
98566                                 event.preventDefault();
98567                                 event.stopPropagation();
98568                                 // if the item is expanded
98569                                 if (d3_select(this).classed('expanded')) {
98570                                     // toggle expansion (collapse the item)
98571                                     click.call(this);
98572                                 }
98573                             } else {
98574                                 itemKeydown.call(this);
98575                             }
98576                         });
98577
98578                     var label = button
98579                         .append('div')
98580                         .attr('class', 'label')
98581                         .append('div')
98582                         .attr('class', 'label-inner');
98583
98584                     label
98585                         .append('div')
98586                         .attr('class', 'namepart')
98587                         .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
98588                         .append('span')
98589                         .html(function() { return preset.name() + '&hellip;'; });
98590
98591                     box = selection.append('div')
98592                         .attr('class', 'subgrid')
98593                         .style('max-height', '0px')
98594                         .style('opacity', 0);
98595
98596                     box.append('div')
98597                         .attr('class', 'arrow');
98598
98599                     sublist = box.append('div')
98600                         .attr('class', 'preset-list fillL3');
98601                 }
98602
98603
98604                 item.choose = function() {
98605                     if (!box || !sublist) return;
98606
98607                     if (shown) {
98608                         shown = false;
98609                         box.transition()
98610                             .duration(200)
98611                             .style('opacity', '0')
98612                             .style('max-height', '0px')
98613                             .style('padding-bottom', '0px');
98614                     } else {
98615                         shown = true;
98616                         var members = preset.members.matchGeometry(context.geometry(_entityID));
98617                         sublist.call(drawList, members);
98618                         box.transition()
98619                             .duration(200)
98620                             .style('opacity', '1')
98621                             .style('max-height', 200 + members.collection.length * 190 + 'px')
98622                             .style('padding-bottom', '10px');
98623                     }
98624                 };
98625
98626                 item.preset = preset;
98627                 return item;
98628             }
98629
98630
98631             function PresetItem(preset) {
98632                 function item(selection) {
98633                     var wrap = selection.append('div')
98634                         .attr('class', 'preset-list-button-wrap');
98635
98636                     var button = wrap.append('button')
98637                         .attr('class', 'preset-list-button')
98638                         .call(uiPresetIcon(context)
98639                             .geometry(context.geometry(_entityID))
98640                             .preset(preset))
98641                         .on('click', item.choose)
98642                         .on('keydown', itemKeydown);
98643
98644                     var label = button
98645                         .append('div')
98646                         .attr('class', 'label')
98647                         .append('div')
98648                         .attr('class', 'label-inner');
98649
98650                     // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
98651                     label.selectAll('.namepart')
98652                         .data(preset.name().split(' – '))
98653                         .enter()
98654                         .append('div')
98655                         .attr('class', 'namepart')
98656                         .text(function(d) { return d; });
98657
98658                     wrap.call(item.reference.button);
98659                     selection.call(item.reference.body);
98660                 }
98661
98662                 item.choose = function() {
98663                     if (d3_select(this).classed('disabled')) return;
98664
98665                     context.presets().setMostRecent(preset, context.geometry(_entityID));
98666                     context.perform(
98667                         actionChangePreset(_entityID, _currentPreset, preset),
98668                         t('operations.change_tags.annotation')
98669                     );
98670
98671                     context.validator().validate();  // rerun validation
98672                     dispatch$1.call('choose', this, preset);
98673                 };
98674
98675                 item.help = function() {
98676                     event.stopPropagation();
98677                     item.reference.toggle();
98678                 };
98679
98680                 item.preset = preset;
98681                 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)));
98682
98683                 return item;
98684             }
98685
98686
98687             function updateForFeatureHiddenState() {
98688                 if (!context.hasEntity(_entityID)) return;
98689
98690                 var geometry = context.geometry(_entityID);
98691                 var button = d3_selectAll('.preset-list .preset-list-button');
98692
98693                 // remove existing tooltips
98694                 button.call(tooltip().destroyAny);
98695
98696                 button.each(function(item, index) {
98697                     var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
98698                     var isHiddenPreset = !context.inIntro() &&
98699                         !!hiddenPresetFeaturesId &&
98700                         item.preset !== _currentPreset;
98701
98702                     d3_select(this)
98703                         .classed('disabled', isHiddenPreset);
98704
98705                     if (isHiddenPreset) {
98706                         var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
98707                         var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
98708                         var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
98709                         d3_select(this).call(tooltip()
98710                             .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
98711                             .placement(index < 2 ? 'bottom' : 'top')
98712                         );
98713                     }
98714                 });
98715             }
98716
98717             presetList.autofocus = function(val) {
98718                 if (!arguments.length) return _autofocus;
98719                 _autofocus = val;
98720                 return presetList;
98721             };
98722
98723
98724             presetList.entityID = function(val) {
98725                 if (!arguments.length) return _entityID;
98726                 _entityID = val;
98727                 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
98728                 return presetList;
98729             };
98730
98731
98732             presetList.preset = function(val) {
98733                 if (!arguments.length) return _currentPreset;
98734                 _currentPreset = val;
98735                 return presetList;
98736             };
98737
98738
98739             return utilRebind(presetList, dispatch$1, 'on');
98740         }
98741
98742         function uiInspector(context) {
98743             var presetList = uiPresetList(context);
98744             var entityEditor = uiEntityEditor(context);
98745             var wrap = d3_select(null),
98746                 presetPane = d3_select(null),
98747                 editorPane = d3_select(null);
98748             var _state = 'select';
98749             var _entityID;
98750             var _newFeature = false;
98751
98752
98753             function inspector(selection, newFeature) {
98754                 presetList
98755                     .entityID(_entityID)
98756                     .autofocus(_newFeature)
98757                     .on('choose', inspector.setPreset);
98758
98759                 entityEditor
98760                     .state(_state)
98761                     .entityID(_entityID)
98762                     .on('choose', inspector.showList);
98763
98764                 wrap = selection.selectAll('.panewrap')
98765                     .data([0]);
98766
98767                 var enter = wrap.enter()
98768                     .append('div')
98769                     .attr('class', 'panewrap');
98770
98771                 enter
98772                     .append('div')
98773                     .attr('class', 'preset-list-pane pane');
98774
98775                 enter
98776                     .append('div')
98777                     .attr('class', 'entity-editor-pane pane');
98778
98779                 wrap = wrap.merge(enter);
98780                 presetPane = wrap.selectAll('.preset-list-pane');
98781                 editorPane = wrap.selectAll('.entity-editor-pane');
98782
98783                 var entity = context.entity(_entityID);
98784
98785                 var hasNonGeometryTags = entity.hasNonGeometryTags();
98786                 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
98787                     (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
98788                 var issues = context.validator().getEntityIssues(_entityID);
98789                 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
98790                 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
98791
98792                 if (showPresetList) {
98793                     wrap.style('right', '-100%');
98794                     presetPane.call(presetList);
98795                 } else {
98796                     wrap.style('right', '0%');
98797                     editorPane.call(entityEditor);
98798                 }
98799
98800                 var footer = selection.selectAll('.footer')
98801                     .data([0]);
98802
98803                 footer = footer.enter()
98804                     .append('div')
98805                     .attr('class', 'footer')
98806                     .merge(footer);
98807
98808                 footer
98809                     .call(uiViewOnOSM(context)
98810                         .what(context.hasEntity(_entityID))
98811                     );
98812             }
98813
98814             inspector.showList = function(preset) {
98815                 wrap.transition()
98816                     .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
98817
98818                 presetPane
98819                     .call(presetList.preset(preset).autofocus(true));
98820             };
98821
98822             inspector.setPreset = function(preset) {
98823
98824                 // upon setting multipolygon, go to the area preset list instead of the editor
98825                 if (preset.id === 'type/multipolygon') {
98826                     presetPane
98827                         .call(presetList.preset(preset).autofocus(true));
98828
98829                 } else {
98830                     wrap.transition()
98831                         .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
98832
98833                     editorPane
98834                         .call(entityEditor.preset(preset));
98835                 }
98836
98837             };
98838
98839             inspector.state = function(val) {
98840                 if (!arguments.length) return _state;
98841                 _state = val;
98842                 entityEditor.state(_state);
98843
98844                 // remove any old field help overlay that might have gotten attached to the inspector
98845                 d3_selectAll('.field-help-body').remove();
98846
98847                 return inspector;
98848             };
98849
98850
98851             inspector.entityID = function(val) {
98852                 if (!arguments.length) return _entityID;
98853                 _entityID = val;
98854                 return inspector;
98855             };
98856
98857
98858             inspector.newFeature = function(val) {
98859                 if (!arguments.length) return _newFeature;
98860                 _newFeature = val;
98861                 return inspector;
98862             };
98863
98864
98865             return inspector;
98866         }
98867
98868         function uiSidebar(context) {
98869             var inspector = uiInspector(context);
98870             var dataEditor = uiDataEditor(context);
98871             var noteEditor = uiNoteEditor(context);
98872             var improveOsmEditor = uiImproveOsmEditor(context);
98873             var keepRightEditor = uiKeepRightEditor(context);
98874             var _current;
98875             var _wasData = false;
98876             var _wasNote = false;
98877             var _wasQAError = false;
98878
98879
98880             function sidebar(selection) {
98881                 var container = d3_select('#id-container');
98882                 var minWidth = 280;
98883                 var sidebarWidth;
98884                 var containerWidth;
98885                 var dragOffset;
98886
98887                 var resizer = selection
98888                     .append('div')
98889                     .attr('id', 'sidebar-resizer');
98890
98891                 // Set the initial width constraints
98892                 selection
98893                     .style('min-width', minWidth + 'px')
98894                     .style('max-width', '400px')
98895                     .style('width', '33.3333%');
98896
98897                 resizer.call(d3_drag()
98898                     .container(container.node())
98899                     .on('start', function() {
98900                         // offset from edge of sidebar-resizer
98901                         dragOffset = event.sourceEvent.offsetX - 1;
98902
98903                         sidebarWidth = selection.node().getBoundingClientRect().width;
98904                         containerWidth = container.node().getBoundingClientRect().width;
98905                         var widthPct = (sidebarWidth / containerWidth) * 100;
98906                         selection
98907                             .style('width', widthPct + '%')    // lock in current width
98908                             .style('max-width', '85%');        // but allow larger widths
98909
98910                         resizer.classed('dragging', true);
98911                     })
98912                     .on('drag', function() {
98913                         var isRTL = (textDirection === 'rtl');
98914                         var scaleX = isRTL ? 0 : 1;
98915                         var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
98916
98917                         var x = event.x - dragOffset;
98918                         sidebarWidth = isRTL ? containerWidth - x : x;
98919
98920                         var isCollapsed = selection.classed('collapsed');
98921                         var shouldCollapse = sidebarWidth < minWidth;
98922
98923                         selection.classed('collapsed', shouldCollapse);
98924
98925                         if (shouldCollapse) {
98926                             if (!isCollapsed) {
98927                                 selection
98928                                     .style(xMarginProperty, '-400px')
98929                                     .style('width', '400px');
98930
98931                                 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
98932                             }
98933
98934                         } else {
98935                             var widthPct = (sidebarWidth / containerWidth) * 100;
98936                             selection
98937                                 .style(xMarginProperty, null)
98938                                 .style('width', widthPct + '%');
98939
98940                             if (isCollapsed) {
98941                                 context.ui().onResize([-sidebarWidth * scaleX, 0]);
98942                             } else {
98943                                 context.ui().onResize([-event.dx * scaleX, 0]);
98944                             }
98945                         }
98946                     })
98947                     .on('end', function() {
98948                         resizer.classed('dragging', false);
98949                     })
98950                 );
98951
98952                 var featureListWrap = selection
98953                     .append('div')
98954                     .attr('class', 'feature-list-pane')
98955                     .call(uiFeatureList(context));
98956
98957                 var inspectorWrap = selection
98958                     .append('div')
98959                     .attr('class', 'inspector-hidden inspector-wrap fr');
98960
98961
98962                 function hover(datum) {
98963                     if (datum && datum.__featurehash__) {   // hovering on data
98964                         _wasData = true;
98965                         sidebar
98966                             .show(dataEditor.datum(datum));
98967
98968                         selection.selectAll('.sidebar-component')
98969                             .classed('inspector-hover', true);
98970
98971                     } else if (datum instanceof osmNote) {
98972                         if (context.mode().id === 'drag-note') return;
98973                         _wasNote = true;
98974
98975                         var osm = services$1.osm;
98976                         if (osm) {
98977                             datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
98978                         }
98979
98980                         sidebar
98981                             .show(noteEditor.note(datum));
98982
98983                         selection.selectAll('.sidebar-component')
98984                             .classed('inspector-hover', true);
98985
98986                     } else if (datum instanceof qaError) {
98987                         _wasQAError = true;
98988
98989                         var errService = services$1[datum.service];
98990                         if (errService) {
98991                             // marker may contain stale data - get latest
98992                             datum = errService.getError(datum.id);
98993                         }
98994
98995                         // Temporary solution while only two services
98996                         var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
98997
98998                         d3_selectAll('.qa_error.' + datum.service)
98999                             .classed('hover', function(d) { return d.id === datum.id; });
99000
99001                         sidebar
99002                             .show(errEditor.error(datum));
99003
99004                         selection.selectAll('.sidebar-component')
99005                             .classed('inspector-hover', true);
99006
99007                     } else if (!_current && (datum instanceof osmEntity)) {
99008                         featureListWrap
99009                             .classed('inspector-hidden', true);
99010
99011                         inspectorWrap
99012                             .classed('inspector-hidden', false)
99013                             .classed('inspector-hover', true);
99014
99015                         if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
99016                             inspector
99017                                 .state('hover')
99018                                 .entityID(datum.id);
99019
99020                             inspectorWrap
99021                                 .call(inspector);
99022                         }
99023
99024                     } else if (!_current) {
99025                         featureListWrap
99026                             .classed('inspector-hidden', false);
99027                         inspectorWrap
99028                             .classed('inspector-hidden', true);
99029                         inspector
99030                             .state('hide');
99031
99032                     } else if (_wasData || _wasNote || _wasQAError) {
99033                         _wasNote = false;
99034                         _wasData = false;
99035                         _wasQAError = false;
99036                         d3_selectAll('.note').classed('hover', false);
99037                         d3_selectAll('.qa_error').classed('hover', false);
99038                         sidebar.hide();
99039                     }
99040                 }
99041
99042                 sidebar.hover = throttle(hover, 200);
99043
99044
99045                 sidebar.intersects = function(extent) {
99046                     var rect = selection.node().getBoundingClientRect();
99047                     return extent.intersects([
99048                         context.projection.invert([0, rect.height]),
99049                         context.projection.invert([rect.width, 0])
99050                     ]);
99051                 };
99052
99053
99054                 sidebar.select = function(id, newFeature) {
99055                     sidebar.hide();
99056
99057                     if (id) {
99058                         var entity = context.entity(id);
99059                         // uncollapse the sidebar
99060                         if (selection.classed('collapsed')) {
99061                             if (newFeature) {
99062                                 var extent = entity.extent(context.graph());
99063                                 sidebar.expand(sidebar.intersects(extent));
99064                             }
99065                         }
99066
99067                         featureListWrap
99068                             .classed('inspector-hidden', true);
99069
99070                         inspectorWrap
99071                             .classed('inspector-hidden', false)
99072                             .classed('inspector-hover', false);
99073
99074                         if (inspector.entityID() !== id || inspector.state() !== 'select') {
99075                             inspector
99076                                 .state('select')
99077                                 .entityID(id)
99078                                 .newFeature(newFeature);
99079
99080                             inspectorWrap
99081                                 .call(inspector, newFeature);
99082                         }
99083
99084                         sidebar.showPresetList = function() {
99085                             inspector.showList(context.presets().match(entity, context.graph()));
99086                         };
99087
99088                     } else {
99089                         inspector
99090                             .state('hide');
99091                     }
99092                 };
99093
99094
99095                 sidebar.show = function(component, element) {
99096                     featureListWrap
99097                         .classed('inspector-hidden', true);
99098                     inspectorWrap
99099                         .classed('inspector-hidden', true);
99100
99101                     if (_current) _current.remove();
99102                     _current = selection
99103                         .append('div')
99104                         .attr('class', 'sidebar-component')
99105                         .call(component, element);
99106                 };
99107
99108
99109                 sidebar.hide = function() {
99110                     featureListWrap
99111                         .classed('inspector-hidden', false);
99112                     inspectorWrap
99113                         .classed('inspector-hidden', true);
99114
99115                     if (_current) _current.remove();
99116                     _current = null;
99117                 };
99118
99119
99120                 sidebar.expand = function(moveMap) {
99121                     if (selection.classed('collapsed')) {
99122                         sidebar.toggle(moveMap);
99123                     }
99124                 };
99125
99126
99127                 sidebar.collapse = function(moveMap) {
99128                     if (!selection.classed('collapsed')) {
99129                         sidebar.toggle(moveMap);
99130                     }
99131                 };
99132
99133
99134                 sidebar.toggle = function(moveMap) {
99135                     var e = event;
99136                     if (e && e.sourceEvent) {
99137                         e.sourceEvent.preventDefault();
99138                     } else if (e) {
99139                         e.preventDefault();
99140                     }
99141
99142                     // Don't allow sidebar to toggle when the user is in the walkthrough.
99143                     if (context.inIntro()) return;
99144
99145                     var isCollapsed = selection.classed('collapsed');
99146                     var isCollapsing = !isCollapsed;
99147                     var isRTL = (textDirection === 'rtl');
99148                     var scaleX = isRTL ? 0 : 1;
99149                     var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
99150
99151                     sidebarWidth = selection.node().getBoundingClientRect().width;
99152
99153                     // switch from % to px
99154                     selection.style('width', sidebarWidth + 'px');
99155
99156                     var startMargin, endMargin, lastMargin;
99157                     if (isCollapsing) {
99158                         startMargin = lastMargin = 0;
99159                         endMargin = -sidebarWidth;
99160                     } else {
99161                         startMargin = lastMargin = -sidebarWidth;
99162                         endMargin = 0;
99163                     }
99164
99165                     selection.transition()
99166                         .style(xMarginProperty, endMargin + 'px')
99167                         .tween('panner', function() {
99168                             var i = d3_interpolateNumber(startMargin, endMargin);
99169                             return function(t) {
99170                                 var dx = lastMargin - Math.round(i(t));
99171                                 lastMargin = lastMargin - dx;
99172                                 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
99173                             };
99174                         })
99175                         .on('end', function() {
99176                             selection.classed('collapsed', isCollapsing);
99177
99178                             // switch back from px to %
99179                             if (!isCollapsing) {
99180                                 var containerWidth = container.node().getBoundingClientRect().width;
99181                                 var widthPct = (sidebarWidth / containerWidth) * 100;
99182                                 selection
99183                                     .style(xMarginProperty, null)
99184                                     .style('width', widthPct + '%');
99185                             }
99186                         });
99187                 };
99188
99189                 // toggle the sidebar collapse when double-clicking the resizer
99190                 resizer.on('dblclick', sidebar.toggle);
99191             }
99192
99193             sidebar.showPresetList = function() {};
99194             sidebar.hover = function() {};
99195             sidebar.hover.cancel = function() {};
99196             sidebar.intersects = function() {};
99197             sidebar.select = function() {};
99198             sidebar.show = function() {};
99199             sidebar.hide = function() {};
99200             sidebar.expand = function() {};
99201             sidebar.collapse = function() {};
99202             sidebar.toggle = function() {};
99203
99204             return sidebar;
99205         }
99206
99207         function uiSpinner(context) {
99208             var osm = context.connection();
99209
99210
99211             return function(selection) {
99212                 var img = selection
99213                     .append('img')
99214                     .attr('src', context.imagePath('loader-black.gif'))
99215                     .style('opacity', 0);
99216
99217                 if (osm) {
99218                     osm
99219                         .on('loading.spinner', function() {
99220                             img.transition()
99221                                 .style('opacity', 1);
99222                         })
99223                         .on('loaded.spinner', function() {
99224                             img.transition()
99225                                 .style('opacity', 0);
99226                         });
99227                 }
99228             };
99229         }
99230
99231         function uiSplash(context) {
99232
99233             return function(selection) {
99234                 if (context.storage('sawSplash'))
99235                      return;
99236
99237                 context.storage('sawSplash', true);
99238
99239                 var modalSelection = uiModal(selection);
99240
99241                 modalSelection.select('.modal')
99242                     .attr('class', 'modal-splash modal');
99243
99244                 var introModal = modalSelection.select('.content')
99245                     .append('div')
99246                     .attr('class', 'fillL');
99247
99248                 introModal
99249                     .append('div')
99250                     .attr('class','modal-section')
99251                     .append('h3').text(t('splash.welcome'));
99252
99253                 introModal
99254                     .append('div')
99255                     .attr('class','modal-section')
99256                     .append('p')
99257                     .html(t('splash.text', {
99258                         version: context.version,
99259                         website: '<a href="http://ideditor.com/">ideditor.com</a>',
99260                         github: '<a href="https://github.com/openstreetmap/iD">github.com</a>'
99261                     }));
99262
99263                 var buttonWrap = introModal
99264                     .append('div')
99265                     .attr('class', 'modal-actions');
99266
99267                 var walkthrough = buttonWrap
99268                     .append('button')
99269                     .attr('class', 'walkthrough')
99270                     .on('click', function() {
99271                         context.container().call(uiIntro(context));
99272                         modalSelection.close();
99273                     });
99274
99275                 walkthrough
99276                     .append('svg')
99277                     .attr('class', 'logo logo-walkthrough')
99278                     .append('use')
99279                     .attr('xlink:href', '#iD-logo-walkthrough');
99280
99281                 walkthrough
99282                     .append('div')
99283                     .text(t('splash.walkthrough'));
99284
99285                 var startEditing = buttonWrap
99286                     .append('button')
99287                     .attr('class', 'start-editing')
99288                     .on('click', modalSelection.close);
99289
99290                 startEditing
99291                     .append('svg')
99292                     .attr('class', 'logo logo-features')
99293                     .append('use')
99294                     .attr('xlink:href', '#iD-logo-features');
99295
99296                 startEditing
99297                     .append('div')
99298                     .text(t('splash.start'));
99299
99300
99301                 modalSelection.select('button.close')
99302                     .attr('class','hide');
99303
99304             };
99305         }
99306
99307         function uiStatus(context) {
99308             var osm = context.connection();
99309
99310
99311             return function(selection) {
99312                 if (!osm) return;
99313
99314                 function update() {
99315                     osm.status(function(err, apiStatus) {
99316                         selection.html('');
99317
99318                         if (err) {
99319                             if (apiStatus === 'connectionSwitched') {
99320                                 // if the connection was just switched, we can't rely on
99321                                 // the status (we're getting the status of the previous api)
99322                                 return;
99323
99324                             } else if (apiStatus === 'rateLimited') {
99325                                 selection
99326                                     .text(t('status.rateLimit'))
99327                                     .append('a')
99328                                     .attr('class', 'api-status-login')
99329                                     .attr('target', '_blank')
99330                                     .call(svgIcon('#iD-icon-out-link', 'inline'))
99331                                     .append('span')
99332                                     .text(t('login'))
99333                                     .on('click.login', function() {
99334                                         event.preventDefault();
99335                                         osm.authenticate();
99336                                     });
99337                             } else {
99338                                 // eslint-disable-next-line no-warning-comments
99339                                 // TODO: nice messages for different error types
99340                                 selection.text(t('status.error'));
99341                             }
99342
99343                         } else if (apiStatus === 'readonly') {
99344                             selection.text(t('status.readonly'));
99345                         } else if (apiStatus === 'offline') {
99346                             selection.text(t('status.offline'));
99347                         }
99348
99349                         selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
99350                     });
99351                 }
99352
99353                 osm.on('change', function() { update(); });
99354
99355                 window.setInterval(update, 90000);
99356                 update();
99357             };
99358         }
99359
99360         function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
99361             var mode = {
99362                 button: button,
99363                 id: 'draw-area'
99364             };
99365
99366             var behavior;
99367
99368             mode.wayID = wayID;
99369
99370             mode.enter = function() {
99371                 var way = context.entity(wayID);
99372
99373                 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
99374                     .tail(t('modes.draw_area.tail'));
99375
99376                 var addNode = behavior.addNode;
99377
99378                 behavior.addNode = function(node, d) {
99379                     var length = way.nodes.length;
99380                     var penultimate = length > 2 ? way.nodes[length - 2] : null;
99381
99382                     if (node.id === way.first() || node.id === penultimate) {
99383                         behavior.finish();
99384                     } else {
99385                         addNode(node, d);
99386                     }
99387                 };
99388
99389                 context.install(behavior);
99390             };
99391
99392
99393             mode.exit = function() {
99394                 context.uninstall(behavior);
99395             };
99396
99397
99398             mode.selectedIDs = function() {
99399                 return [wayID];
99400             };
99401
99402
99403             mode.activeID = function() {
99404                 return (behavior && behavior.activeID()) || [];
99405             };
99406
99407
99408             return mode;
99409         }
99410
99411         function modeAddArea(context, mode) {
99412             mode.id = 'add-area';
99413
99414             var behavior = behaviorAddWay(context)
99415                 .tail(t('modes.add_area.tail'))
99416                 .on('start', start)
99417                 .on('startFromWay', startFromWay)
99418                 .on('startFromNode', startFromNode);
99419
99420             var defaultTags = { area: 'yes' };
99421             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'area');
99422
99423
99424             function actionClose(wayId) {
99425                 return function (graph) {
99426                     return graph.replace(graph.entity(wayId).close());
99427                 };
99428             }
99429
99430
99431             function start(loc) {
99432                 var startGraph = context.graph();
99433                 var node = osmNode({ loc: loc });
99434                 var way = osmWay({ tags: defaultTags });
99435
99436                 context.perform(
99437                     actionAddEntity(node),
99438                     actionAddEntity(way),
99439                     actionAddVertex(way.id, node.id),
99440                     actionClose(way.id)
99441                 );
99442
99443                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
99444             }
99445
99446
99447             function startFromWay(loc, edge) {
99448                 var startGraph = context.graph();
99449                 var node = osmNode({ loc: loc });
99450                 var way = osmWay({ tags: defaultTags });
99451
99452                 context.perform(
99453                     actionAddEntity(node),
99454                     actionAddEntity(way),
99455                     actionAddVertex(way.id, node.id),
99456                     actionClose(way.id),
99457                     actionAddMidpoint({ loc: loc, edge: edge }, node)
99458                 );
99459
99460                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
99461             }
99462
99463
99464             function startFromNode(node) {
99465                 var startGraph = context.graph();
99466                 var way = osmWay({ tags: defaultTags });
99467
99468                 context.perform(
99469                     actionAddEntity(way),
99470                     actionAddVertex(way.id, node.id),
99471                     actionClose(way.id)
99472                 );
99473
99474                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
99475             }
99476
99477
99478             mode.enter = function() {
99479                 context.install(behavior);
99480             };
99481
99482
99483             mode.exit = function() {
99484                 context.uninstall(behavior);
99485             };
99486
99487
99488             return mode;
99489         }
99490
99491         function modeAddLine(context, mode) {
99492             mode.id = 'add-line';
99493
99494             var behavior = behaviorAddWay(context)
99495                 .tail(t('modes.add_line.tail'))
99496                 .on('start', start)
99497                 .on('startFromWay', startFromWay)
99498                 .on('startFromNode', startFromNode);
99499
99500             var defaultTags = {};
99501             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'line');
99502
99503
99504             function start(loc) {
99505                 var startGraph = context.graph();
99506                 var node = osmNode({ loc: loc });
99507                 var way = osmWay({ tags: defaultTags });
99508
99509                 context.perform(
99510                     actionAddEntity(node),
99511                     actionAddEntity(way),
99512                     actionAddVertex(way.id, node.id)
99513                 );
99514
99515                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
99516             }
99517
99518
99519             function startFromWay(loc, edge) {
99520                 var startGraph = context.graph();
99521                 var node = osmNode({ loc: loc });
99522                 var way = osmWay({ tags: defaultTags });
99523
99524                 context.perform(
99525                     actionAddEntity(node),
99526                     actionAddEntity(way),
99527                     actionAddVertex(way.id, node.id),
99528                     actionAddMidpoint({ loc: loc, edge: edge }, node)
99529                 );
99530
99531                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
99532             }
99533
99534
99535             function startFromNode(node) {
99536                 var startGraph = context.graph();
99537                 var way = osmWay({ tags: defaultTags });
99538
99539                 context.perform(
99540                     actionAddEntity(way),
99541                     actionAddVertex(way.id, node.id)
99542                 );
99543
99544                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
99545             }
99546
99547
99548             mode.enter = function() {
99549                 context.install(behavior);
99550             };
99551
99552
99553             mode.exit = function() {
99554                 context.uninstall(behavior);
99555             };
99556
99557             return mode;
99558         }
99559
99560         function modeAddPoint(context, mode) {
99561
99562             mode.id = 'add-point';
99563
99564             var behavior = behaviorDraw(context)
99565                 .tail(t('modes.add_point.tail'))
99566                 .on('click', add)
99567                 .on('clickWay', addWay)
99568                 .on('clickNode', addNode)
99569                 .on('cancel', cancel)
99570                 .on('finish', cancel);
99571
99572             var defaultTags = {};
99573             if (mode.preset) defaultTags = mode.preset.setTags(defaultTags, 'point');
99574
99575
99576             function add(loc) {
99577                 var node = osmNode({ loc: loc, tags: defaultTags });
99578
99579                 context.perform(
99580                     actionAddEntity(node),
99581                     t('operations.add.annotation.point')
99582                 );
99583
99584                 enterSelectMode(node);
99585             }
99586
99587
99588             function addWay(loc, edge) {
99589                 var node = osmNode({ tags: defaultTags });
99590
99591                 context.perform(
99592                     actionAddMidpoint({loc: loc, edge: edge}, node),
99593                     t('operations.add.annotation.vertex')
99594                 );
99595
99596                 enterSelectMode(node);
99597             }
99598
99599             function enterSelectMode(node) {
99600                 context.enter(
99601                     modeSelect(context, [node.id]).newFeature(true)
99602                 );
99603             }
99604
99605
99606             function addNode(node) {
99607                 if (Object.keys(defaultTags).length === 0) {
99608                     enterSelectMode(node);
99609                     return;
99610                 }
99611
99612                 var tags = Object.assign({}, node.tags);  // shallow copy
99613                 for (var key in defaultTags) {
99614                     tags[key] = defaultTags[key];
99615                 }
99616
99617                 context.perform(
99618                     actionChangeTags(node.id, tags),
99619                     t('operations.add.annotation.point')
99620                 );
99621
99622                 enterSelectMode(node);
99623             }
99624
99625
99626             function cancel() {
99627                 context.enter(modeBrowse(context));
99628             }
99629
99630
99631             mode.enter = function() {
99632                 context.install(behavior);
99633             };
99634
99635
99636             mode.exit = function() {
99637                 context.uninstall(behavior);
99638             };
99639
99640
99641             return mode;
99642         }
99643
99644         function modeAddNote(context) {
99645             var mode = {
99646                 id: 'add-note',
99647                 button: 'note',
99648                 title: t('modes.add_note.title'),
99649                 description: t('modes.add_note.description'),
99650                 key: t('modes.add_note.key')
99651             };
99652
99653             var behavior = behaviorDraw(context)
99654                 .tail(t('modes.add_note.tail'))
99655                 .on('click', add)
99656                 .on('cancel', cancel)
99657                 .on('finish', cancel);
99658
99659
99660             function add(loc) {
99661                 var osm = services$1.osm;
99662                 if (!osm) return;
99663
99664                 var note = osmNote({ loc: loc, status: 'open', comments: [] });
99665                 osm.replaceNote(note);
99666
99667                 // force a reraw (there is no history change that would otherwise do this)
99668                 context.pan([0,0]);
99669
99670                 context
99671                     .selectedNoteID(note.id)
99672                     .enter(modeSelectNote(context, note.id).newFeature(true));
99673             }
99674
99675
99676             function cancel() {
99677                 context.enter(modeBrowse(context));
99678             }
99679
99680
99681             mode.enter = function() {
99682                 context.install(behavior);
99683             };
99684
99685
99686             mode.exit = function() {
99687                 context.uninstall(behavior);
99688             };
99689
99690
99691             return mode;
99692         }
99693
99694         function uiConflicts(context) {
99695             var dispatch$1 = dispatch('cancel', 'save');
99696             var keybinding = utilKeybinding('conflicts');
99697             var _origChanges;
99698             var _conflictList;
99699
99700
99701             function keybindingOn() {
99702                 d3_select(document)
99703                     .call(keybinding.on('⎋', cancel, true));
99704             }
99705
99706             function keybindingOff() {
99707                 d3_select(document)
99708                     .call(keybinding.unbind);
99709             }
99710
99711             function tryAgain() {
99712                 keybindingOff();
99713                 dispatch$1.call('save');
99714             }
99715
99716             function cancel() {
99717                 keybindingOff();
99718                 dispatch$1.call('cancel');
99719             }
99720
99721
99722             function conflicts(selection) {
99723                 keybindingOn();
99724
99725                 var headerEnter = selection.selectAll('.header')
99726                     .data([0])
99727                     .enter()
99728                     .append('div')
99729                     .attr('class', 'header fillL');
99730
99731                 headerEnter
99732                     .append('button')
99733                     .attr('class', 'fr')
99734                     .on('click', cancel)
99735                     .call(svgIcon('#iD-icon-close'));
99736
99737                 headerEnter
99738                     .append('h3')
99739                     .text(t('save.conflict.header'));
99740
99741                 var bodyEnter = selection.selectAll('.body')
99742                     .data([0])
99743                     .enter()
99744                     .append('div')
99745                     .attr('class', 'body fillL');
99746
99747                 var conflictsHelpEnter = bodyEnter
99748                     .append('div')
99749                     .attr('class', 'conflicts-help')
99750                     .text(t('save.conflict.help'));
99751
99752
99753                 // Download changes link
99754                 var detected = utilDetect();
99755                 var changeset = new osmChangeset();
99756
99757                 delete changeset.id;  // Export without changeset_id
99758
99759                 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
99760                 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
99761                 var fileName = 'changes.osc';
99762
99763                 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
99764                     .append('a')
99765                     .attr('class', 'download-changes');
99766
99767                 if (detected.download) {      // All except IE11 and Edge
99768                     linkEnter                 // download the data as a file
99769                         .attr('href', window.URL.createObjectURL(blob))
99770                         .attr('download', fileName);
99771
99772                 } else {                      // IE11 and Edge
99773                     linkEnter                 // open data uri in a new tab
99774                         .attr('target', '_blank')
99775                         .on('click.download', function() {
99776                             navigator.msSaveBlob(blob, fileName);
99777                         });
99778                 }
99779
99780                 linkEnter
99781                     .call(svgIcon('#iD-icon-load', 'inline'))
99782                     .append('span')
99783                     .text(t('save.conflict.download_changes'));
99784
99785
99786                 bodyEnter
99787                     .append('div')
99788                     .attr('class', 'conflict-container fillL3')
99789                     .call(showConflict, 0);
99790
99791                 bodyEnter
99792                     .append('div')
99793                     .attr('class', 'conflicts-done')
99794                     .attr('opacity', 0)
99795                     .style('display', 'none')
99796                     .text(t('save.conflict.done'));
99797
99798                 var buttonsEnter = bodyEnter
99799                     .append('div')
99800                     .attr('class','buttons col12 joined conflicts-buttons');
99801
99802                 buttonsEnter
99803                     .append('button')
99804                     .attr('disabled', _conflictList.length > 1)
99805                     .attr('class', 'action conflicts-button col6')
99806                     .text(t('save.title'))
99807                     .on('click.try_again', tryAgain);
99808
99809                 buttonsEnter
99810                     .append('button')
99811                     .attr('class', 'secondary-action conflicts-button col6')
99812                     .text(t('confirm.cancel'))
99813                     .on('click.cancel', cancel);
99814             }
99815
99816
99817             function showConflict(selection, index) {
99818                 index = utilWrap(index, _conflictList.length);
99819
99820                 var parent = d3_select(selection.node().parentNode);
99821
99822                 // enable save button if this is the last conflict being reviewed..
99823                 if (index === _conflictList.length - 1) {
99824                     window.setTimeout(function() {
99825                         parent.select('.conflicts-button')
99826                             .attr('disabled', null);
99827
99828                         parent.select('.conflicts-done')
99829                             .transition()
99830                             .attr('opacity', 1)
99831                             .style('display', 'block');
99832                     }, 250);
99833                 }
99834
99835                 var conflict = selection
99836                     .selectAll('.conflict')
99837                     .data([_conflictList[index]]);
99838
99839                 conflict.exit()
99840                     .remove();
99841
99842                 var conflictEnter = conflict.enter()
99843                     .append('div')
99844                     .attr('class', 'conflict');
99845
99846                 conflictEnter
99847                     .append('h4')
99848                     .attr('class', 'conflict-count')
99849                     .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
99850
99851                 conflictEnter
99852                     .append('a')
99853                     .attr('class', 'conflict-description')
99854                     .attr('href', '#')
99855                     .text(function(d) { return d.name; })
99856                     .on('click', function(d) {
99857                         event.preventDefault();
99858                         zoomToEntity(d.id);
99859                     });
99860
99861                 var details = conflictEnter
99862                     .append('div')
99863                     .attr('class', 'conflict-detail-container');
99864
99865                 details
99866                     .append('ul')
99867                     .attr('class', 'conflict-detail-list')
99868                     .selectAll('li')
99869                     .data(function(d) { return d.details || []; })
99870                     .enter()
99871                     .append('li')
99872                     .attr('class', 'conflict-detail-item')
99873                     .html(function(d) { return d; });
99874
99875                 details
99876                     .append('div')
99877                     .attr('class', 'conflict-choices')
99878                     .call(addChoices);
99879
99880                 details
99881                     .append('div')
99882                     .attr('class', 'conflict-nav-buttons joined cf')
99883                     .selectAll('button')
99884                     .data(['previous', 'next'])
99885                     .enter()
99886                     .append('button')
99887                     .text(function(d) { return t('save.conflict.' + d); })
99888                     .attr('class', 'conflict-nav-button action col6')
99889                     .attr('disabled', function(d, i) {
99890                         return (i === 0 && index === 0) ||
99891                             (i === 1 && index === _conflictList.length - 1) || null;
99892                     })
99893                     .on('click', function(d, i) {
99894                         event.preventDefault();
99895
99896                         var container = parent.selectAll('.conflict-container');
99897                         var sign = (i === 0 ? -1 : 1);
99898
99899                         container
99900                             .selectAll('.conflict')
99901                             .remove();
99902
99903                         container
99904                             .call(showConflict, index + sign);
99905                     });
99906
99907             }
99908
99909
99910             function addChoices(selection) {
99911                 var choices = selection
99912                     .append('ul')
99913                     .attr('class', 'layer-list')
99914                     .selectAll('li')
99915                     .data(function(d) { return d.choices || []; });
99916
99917                 // enter
99918                 var choicesEnter = choices.enter()
99919                     .append('li')
99920                     .attr('class', 'layer');
99921
99922                 var labelEnter = choicesEnter
99923                     .append('label');
99924
99925                 labelEnter
99926                     .append('input')
99927                     .attr('type', 'radio')
99928                     .attr('name', function(d) { return d.id; })
99929                     .on('change', function(d, i) {
99930                         var ul = this.parentNode.parentNode.parentNode;
99931                         ul.__data__.chosen = i;
99932                         choose(ul, d);
99933                     });
99934
99935                 labelEnter
99936                     .append('span')
99937                     .text(function(d) { return d.text; });
99938
99939                 // update
99940                 choicesEnter
99941                     .merge(choices)
99942                     .each(function(d, i) {
99943                         var ul = this.parentNode;
99944                         if (ul.__data__.chosen === i) {
99945                             choose(ul, d);
99946                         }
99947                     });
99948             }
99949
99950
99951             function choose(ul, datum) {
99952                 if (event) event.preventDefault();
99953
99954                 d3_select(ul)
99955                     .selectAll('li')
99956                     .classed('active', function(d) { return d === datum; })
99957                     .selectAll('input')
99958                     .property('checked', function(d) { return d === datum; });
99959
99960                 var extent = geoExtent();
99961                 var entity;
99962
99963                 entity = context.graph().hasEntity(datum.id);
99964                 if (entity) extent._extend(entity.extent(context.graph()));
99965
99966                 datum.action();
99967
99968                 entity = context.graph().hasEntity(datum.id);
99969                 if (entity) extent._extend(entity.extent(context.graph()));
99970
99971                 zoomToEntity(datum.id, extent);
99972             }
99973
99974
99975             function zoomToEntity(id, extent) {
99976                 context.surface().selectAll('.hover')
99977                     .classed('hover', false);
99978
99979                 var entity = context.graph().hasEntity(id);
99980                 if (entity) {
99981                     if (extent) {
99982                         context.map().trimmedExtent(extent);
99983                     } else {
99984                         context.map().zoomToEase(entity);
99985                     }
99986                     context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
99987                         .classed('hover', true);
99988                 }
99989             }
99990
99991
99992             // The conflict list should be an array of objects like:
99993             // {
99994             //     id: id,
99995             //     name: entityName(local),
99996             //     details: merge.conflicts(),
99997             //     chosen: 1,
99998             //     choices: [
99999             //         choice(id, keepMine, forceLocal),
100000             //         choice(id, keepTheirs, forceRemote)
100001             //     ]
100002             // }
100003             conflicts.conflictList = function(_) {
100004                 if (!arguments.length) return _conflictList;
100005                 _conflictList = _;
100006                 return conflicts;
100007             };
100008
100009
100010             conflicts.origChanges = function(_) {
100011                 if (!arguments.length) return _origChanges;
100012                 _origChanges = _;
100013                 return conflicts;
100014             };
100015
100016
100017             return utilRebind(conflicts, dispatch$1, 'on');
100018         }
100019
100020         function uiChangesetEditor(context) {
100021             var dispatch$1 = dispatch('change');
100022             var formFields = uiFormFields(context);
100023             var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
100024             var _fieldsArr;
100025             var _tags;
100026             var _changesetID;
100027
100028
100029             function changesetEditor(selection) {
100030                 render(selection);
100031             }
100032
100033
100034             function render(selection) {
100035                 var initial = false;
100036
100037                 if (!_fieldsArr) {
100038                     initial = true;
100039                     var presets = context.presets();
100040
100041                     _fieldsArr = [
100042                         uiField(context, presets.field('comment'), null, { show: true, revert: false }),
100043                         uiField(context, presets.field('source'), null, { show: false, revert: false }),
100044                         uiField(context, presets.field('hashtags'), null, { show: false, revert: false }),
100045                     ];
100046
100047                     _fieldsArr.forEach(function(field) {
100048                         field
100049                             .on('change', function(t, onInput) {
100050                                 dispatch$1.call('change', field, t, onInput);
100051                             });
100052                     });
100053                 }
100054
100055                 _fieldsArr.forEach(function(field) {
100056                     field
100057                         .tags(_tags);
100058                 });
100059
100060
100061                 selection
100062                     .call(formFields.fieldsArr(_fieldsArr));
100063
100064
100065                 if (initial) {
100066                     var commentField = selection.select('#preset-input-comment');
100067                     var commentNode = commentField.node();
100068
100069                     if (commentNode) {
100070                         commentNode.focus();
100071                         commentNode.select();
100072                     }
100073
100074                     // trigger a 'blur' event so that comment field can be cleaned
100075                     // and checked for hashtags, even if retrieved from localstorage
100076                     utilTriggerEvent(commentField, 'blur');
100077
100078                     var osm = context.connection();
100079                     if (osm) {
100080                         osm.userChangesets(function (err, changesets) {
100081                             if (err) return;
100082
100083                             var comments = changesets.map(function(changeset) {
100084                                 var comment = changeset.tags.comment;
100085                                 return comment ? { title: comment, value: comment } : null;
100086                             }).filter(Boolean);
100087
100088                             commentField
100089                                 .call(commentCombo
100090                                     .data(utilArrayUniqBy(comments, 'title'))
100091                                 );
100092                         });
100093                     }
100094                 }
100095
100096                 // Add warning if comment mentions Google
100097                 var hasGoogle = _tags.comment.match(/google/i);
100098                 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
100099                     .data(hasGoogle ? [0] : []);
100100
100101                 commentWarning.exit()
100102                     .transition()
100103                     .duration(200)
100104                     .style('opacity', 0)
100105                     .remove();
100106
100107                 var commentEnter = commentWarning.enter()
100108                     .insert('div', '.tag-reference-body')
100109                     .attr('class', 'field-warning comment-warning')
100110                     .style('opacity', 0);
100111
100112                 commentEnter
100113                     .append('a')
100114                     .attr('target', '_blank')
100115                     .attr('tabindex', -1)
100116                     .call(svgIcon('#iD-icon-alert', 'inline'))
100117                     .attr('href', t('commit.google_warning_link'))
100118                     .append('span')
100119                     .text(t('commit.google_warning'));
100120
100121                 commentEnter
100122                     .transition()
100123                     .duration(200)
100124                     .style('opacity', 1);
100125             }
100126
100127
100128             changesetEditor.tags = function(_) {
100129                 if (!arguments.length) return _tags;
100130                 _tags = _;
100131                 // Don't reset _fieldsArr here.
100132                 return changesetEditor;
100133             };
100134
100135
100136             changesetEditor.changesetID = function(_) {
100137                 if (!arguments.length) return _changesetID;
100138                 if (_changesetID === _) return changesetEditor;
100139                 _changesetID = _;
100140                 _fieldsArr = null;
100141                 return changesetEditor;
100142             };
100143
100144
100145             return utilRebind(changesetEditor, dispatch$1, 'on');
100146         }
100147
100148         function uiCommitChanges(context) {
100149             var detected = utilDetect();
100150             var _entityID;
100151
100152
100153             function commitChanges(selection) {
100154                 var history = context.history();
100155                 var summary = history.difference().summary();
100156
100157                 var container = selection.selectAll('.modal-section.commit-section')
100158                     .data([0]);
100159
100160                 var containerEnter = container.enter()
100161                     .append('div')
100162                     .attr('class', 'commit-section modal-section fillL2');
100163
100164                 containerEnter
100165                     .append('h3')
100166                     .text(t('commit.changes', { count: summary.length }));
100167
100168                 containerEnter
100169                     .append('ul')
100170                     .attr('class', 'changeset-list');
100171
100172                 container = containerEnter
100173                     .merge(container);
100174
100175
100176                 var items = container.select('ul').selectAll('li')
100177                     .data(summary);
100178
100179                 var itemsEnter = items.enter()
100180                     .append('li')
100181                     .attr('class', 'change-item');
100182
100183                 itemsEnter
100184                     .each(function(d) {
100185                         d3_select(this)
100186                             .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
100187                     });
100188
100189                 itemsEnter
100190                     .append('span')
100191                     .attr('class', 'change-type')
100192                     .text(function(d) { return t('commit.' + d.changeType) + ' '; });
100193
100194                 itemsEnter
100195                     .append('strong')
100196                     .attr('class', 'entity-type')
100197                     .text(function(d) {
100198                         var matched = context.presets().match(d.entity, d.graph);
100199                         return (matched && matched.name()) || utilDisplayType(d.entity.id);
100200                     });
100201
100202                 itemsEnter
100203                     .append('span')
100204                     .attr('class', 'entity-name')
100205                     .text(function(d) {
100206                         var name = utilDisplayName(d.entity) || '',
100207                             string = '';
100208                         if (name !== '') {
100209                             string += ':';
100210                         }
100211                         return string += ' ' + name;
100212                     });
100213
100214                 itemsEnter
100215                     .style('opacity', 0)
100216                     .transition()
100217                     .style('opacity', 1);
100218
100219                 items = itemsEnter
100220                     .merge(items);
100221
100222                 items
100223                     .on('mouseover', mouseover)
100224                     .on('mouseout', mouseout)
100225                     .on('click', click);
100226
100227
100228                 // Download changeset link
100229                 var changeset = new osmChangeset().update({ id: undefined });
100230                 var changes = history.changes(actionDiscardTags(history.difference()));
100231
100232                 delete changeset.id;  // Export without chnageset_id
100233
100234                 var data = JXON.stringify(changeset.osmChangeJXON(changes));
100235                 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
100236                 var fileName = 'changes.osc';
100237
100238                 var linkEnter = container.selectAll('.download-changes')
100239                     .data([0])
100240                     .enter()
100241                     .append('a')
100242                     .attr('class', 'download-changes');
100243
100244                 if (detected.download) {      // All except IE11 and Edge
100245                     linkEnter                 // download the data as a file
100246                         .attr('href', window.URL.createObjectURL(blob))
100247                         .attr('download', fileName);
100248
100249                 } else {                      // IE11 and Edge
100250                     linkEnter                 // open data uri in a new tab
100251                         .attr('target', '_blank')
100252                         .on('click.download', function() {
100253                             navigator.msSaveBlob(blob, fileName);
100254                         });
100255                 }
100256
100257                 linkEnter
100258                     .call(svgIcon('#iD-icon-load', 'inline'))
100259                     .append('span')
100260                     .text(t('commit.download_changes'));
100261
100262
100263                 function mouseover(d) {
100264                     if (d.entity) {
100265                         context.surface().selectAll(
100266                             utilEntityOrMemberSelector([d.entity.id], context.graph())
100267                         ).classed('hover', true);
100268                     }
100269                 }
100270
100271
100272                 function mouseout() {
100273                     context.surface().selectAll('.hover')
100274                         .classed('hover', false);
100275                 }
100276
100277
100278                 function click(change) {
100279                     if (change.changeType === 'deleted') {
100280                         _entityID = null;
100281                     } else {
100282                         var entity = change.entity;
100283                         _entityID = change.entity.id;
100284                         context.map().zoomToEase(entity);
100285                         context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
100286                             .classed('hover', true);
100287                     }
100288                 }
100289             }
100290
100291
100292             commitChanges.entityID = function(_) {
100293                 if (!arguments.length) return _entityID;
100294                 _entityID = _;
100295                 return commitChanges;
100296             };
100297
100298
100299             return commitChanges;
100300         }
100301
100302         function uiCommitWarnings(context) {
100303
100304             function commitWarnings(selection) {
100305                 var issuesBySeverity = context.validator()
100306                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
100307
100308                 for (var severity in issuesBySeverity) {
100309                     var issues = issuesBySeverity[severity];
100310                     var section = severity + '-section';
100311                     var issueItem = severity + '-item';
100312
100313                     var container = selection.selectAll('.' + section)
100314                         .data(issues.length ? [0] : []);
100315
100316                     container.exit()
100317                         .remove();
100318
100319                     var containerEnter = container.enter()
100320                         .append('div')
100321                         .attr('class', 'modal-section ' + section + ' fillL2');
100322
100323                     containerEnter
100324                         .append('h3')
100325                         .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
100326
100327                     containerEnter
100328                         .append('ul')
100329                         .attr('class', 'changeset-list');
100330
100331                     container = containerEnter
100332                         .merge(container);
100333
100334
100335                     var items = container.select('ul').selectAll('li')
100336                         .data(issues, function(d) { return d.id; });
100337
100338                     items.exit()
100339                         .remove();
100340
100341                     var itemsEnter = items.enter()
100342                         .append('li')
100343                         .attr('class', issueItem);
100344
100345                     itemsEnter
100346                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
100347
100348                     itemsEnter
100349                         .append('strong')
100350                         .attr('class', 'issue-message');
100351
100352                     itemsEnter.filter(function(d) { return d.tooltip; })
100353                         .call(tooltip()
100354                             .title(function(d) { return d.tooltip; })
100355                             .placement('top')
100356                         );
100357
100358                     items = itemsEnter
100359                         .merge(items);
100360
100361                     items.selectAll('.issue-message')
100362                         .text(function(d) {
100363                             return d.message(context);
100364                         });
100365
100366                     items
100367                         .on('mouseover', function(d) {
100368                             if (d.entityIds) {
100369                                 context.surface().selectAll(
100370                                     utilEntityOrMemberSelector(
100371                                         d.entityIds,
100372                                         context.graph()
100373                                     )
100374                                 ).classed('hover', true);
100375                             }
100376                         })
100377                         .on('mouseout', function() {
100378                             context.surface().selectAll('.hover')
100379                                 .classed('hover', false);
100380                         })
100381                         .on('click', function(d) {
100382                             context.validator().focusIssue(d);
100383                         });
100384                 }
100385             }
100386
100387
100388             return commitWarnings;
100389         }
100390
100391         var _changeset$1;
100392         var readOnlyTags = [
100393             /^changesets_count$/,
100394             /^created_by$/,
100395             /^ideditor:/,
100396             /^imagery_used$/,
100397             /^host$/,
100398             /^locale$/,
100399             /^warnings:/,
100400             /^resolved:/
100401         ];
100402
100403         // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
100404         // from https://stackoverflow.com/a/25575009
100405         var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
100406
100407
100408         function uiCommit(context) {
100409             var dispatch$1 = dispatch('cancel', 'save');
100410             var _userDetails;
100411             var _selection;
100412
100413             var changesetEditor = uiChangesetEditor(context)
100414                 .on('change', changeTags);
100415             var rawTagEditor = uiRawTagEditor(context)
100416                 .on('change', changeTags);
100417             var commitChanges = uiCommitChanges(context);
100418             var commitWarnings = uiCommitWarnings(context);
100419
100420
100421             function commit(selection) {
100422                 _selection = selection;
100423
100424                 var osm = context.connection();
100425                 if (!osm) return;
100426
100427                 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
100428                 var commentDate = +context.storage('commentDate') || 0;
100429                 var currDate = Date.now();
100430                 var cutoff = 2 * 86400 * 1000;   // 2 days
100431                 if (commentDate > currDate || currDate - commentDate > cutoff) {
100432                     context.storage('comment', null);
100433                     context.storage('hashtags', null);
100434                     context.storage('source', null);
100435                 }
100436
100437                 var tags;
100438                 // Initialize changeset if one does not exist yet.
100439                 // Also pull values from local storage.
100440                 if (!_changeset$1) {
100441
100442                     // load in the URL hash values, if any
100443                     var hash = context.ui().hash;
100444                     if (hash.comment) {
100445                         context.storage('comment', hash.comment);
100446                         context.storage('commentDate', Date.now());
100447                     }
100448                     if (hash.source) {
100449                         context.storage('source', hash.source);
100450                         context.storage('commentDate', Date.now());
100451                     }
100452                     if (hash.hashtags) {
100453                         context.storage('hashtags', hash.hashtags);
100454                     }
100455
100456                     var detected = utilDetect();
100457                     tags = {
100458                         comment: context.storage('comment') || '',
100459                         created_by: ('iD ' + context.version).substr(0, 255),
100460                         host: detected.host.substr(0, 255),
100461                         locale: detected.locale.substr(0, 255)
100462                     };
100463
100464                     // call findHashtags initially - this will remove stored
100465                     // hashtags if any hashtags are found in the comment - #4304
100466                     findHashtags(tags, true);
100467
100468                     var hashtags = context.storage('hashtags');
100469                     if (hashtags) {
100470                         tags.hashtags = hashtags;
100471                     }
100472
100473                     var source = context.storage('source');
100474                     if (source) {
100475                         tags.source = source;
100476                     }
100477                     var photoOverlaysUsed = context.history().photoOverlaysUsed();
100478                     if (photoOverlaysUsed.length) {
100479                         var sources = (tags.source || '').split(';');
100480
100481                         // include this tag for any photo layer
100482                         if (sources.indexOf('streetlevel imagery') === -1) {
100483                             sources.push('streetlevel imagery');
100484                         }
100485
100486                         // add the photo overlays used during editing as sources
100487                         photoOverlaysUsed.forEach(function(photoOverlay) {
100488                             if (sources.indexOf(photoOverlay) === -1) {
100489                                 sources.push(photoOverlay);
100490                             }
100491                         });
100492
100493                         tags.source = sources.join(';').substr(0, 255);
100494                     }
100495
100496                     _changeset$1 = new osmChangeset({ tags: tags });
100497                 }
100498
100499                 tags = Object.assign({}, _changeset$1.tags);   // shallow copy
100500
100501                 // assign tags for imagery used
100502                 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
100503                 tags.imagery_used = imageryUsed || 'None';
100504
100505                 // assign tags for closed issues and notes
100506                 var osmClosed = osm.getClosedIDs();
100507                 if (osmClosed.length) {
100508                     tags['closed:note'] = osmClosed.join(';').substr(0, 255);
100509                 }
100510                 if (services$1.keepRight) {
100511                     var krClosed = services$1.keepRight.getClosedIDs();
100512                     if (krClosed.length) {
100513                         tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
100514                     }
100515                 }
100516                 if (services$1.improveOSM) {
100517                     var iOsmClosed = services$1.improveOSM.getClosedIDs();
100518                     if (iOsmClosed.length) {
100519                         tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
100520                     }
100521                 }
100522
100523                 // remove existing issue counts
100524                 for (var key in tags) {
100525                     if (key.match(/(^warnings:)|(^resolved:)/)) {
100526                         delete tags[key];
100527                     }
100528                 }
100529
100530                 function addIssueCounts(issues, prefix) {
100531                     var issuesByType = utilArrayGroupBy(issues, 'type');
100532                     for (var issueType in issuesByType) {
100533                         var issuesOfType = issuesByType[issueType];
100534                         if (issuesOfType[0].subtype) {
100535                             var issuesBySubtype = utilArrayGroupBy(issuesOfType, 'subtype');
100536                             for (var issueSubtype in issuesBySubtype) {
100537                                 var issuesOfSubtype = issuesBySubtype[issueSubtype];
100538                                 tags[prefix + ':' + issueType + ':' + issueSubtype] = issuesOfSubtype.length.toString().substr(0, 255);
100539                             }
100540                         } else {
100541                             tags[prefix + ':' + issueType] = issuesOfType.length.toString().substr(0, 255);
100542                         }
100543                     }
100544                 }
100545
100546                 // add counts of warnings generated by the user's edits
100547                 var warnings = context.validator()
100548                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
100549                 addIssueCounts(warnings, 'warnings');
100550
100551                 // add counts of issues resolved by the user's edits
100552                 var resolvedIssues = context.validator().getResolvedIssues();
100553                 addIssueCounts(resolvedIssues, 'resolved');
100554
100555                 _changeset$1 = _changeset$1.update({ tags: tags });
100556
100557                 var header = selection.selectAll('.header')
100558                     .data([0]);
100559
100560                 var headerTitle = header.enter()
100561                     .append('div')
100562                     .attr('class', 'header fillL header-container');
100563
100564                 headerTitle
100565                     .append('div')
100566                     .attr('class', 'header-block header-block-outer');
100567
100568                 headerTitle
100569                     .append('div')
100570                     .attr('class', 'header-block')
100571                     .append('h3')
100572                     .text(t('commit.title'));
100573
100574                 headerTitle
100575                     .append('div')
100576                     .attr('class', 'header-block header-block-outer header-block-close')
100577                     .append('button')
100578                     .attr('class', 'close')
100579                     .on('click', function() { context.enter(modeBrowse(context)); })
100580                     .call(svgIcon('#iD-icon-close'));
100581
100582                 var body = selection.selectAll('.body')
100583                     .data([0]);
100584
100585                 body = body.enter()
100586                     .append('div')
100587                     .attr('class', 'body')
100588                     .merge(body);
100589
100590
100591                 // Changeset Section
100592                 var changesetSection = body.selectAll('.changeset-editor')
100593                     .data([0]);
100594
100595                 changesetSection = changesetSection.enter()
100596                     .append('div')
100597                     .attr('class', 'modal-section changeset-editor')
100598                     .merge(changesetSection);
100599
100600                 changesetSection
100601                     .call(changesetEditor
100602                         .changesetID(_changeset$1.id)
100603                         .tags(tags)
100604                     );
100605
100606
100607                 // Warnings
100608                 body.call(commitWarnings);
100609
100610
100611                 // Upload Explanation
100612                 var saveSection = body.selectAll('.save-section')
100613                     .data([0]);
100614
100615                 saveSection = saveSection.enter()
100616                     .append('div')
100617                     .attr('class','modal-section save-section fillL cf')
100618                     .merge(saveSection);
100619
100620                 var prose = saveSection.selectAll('.commit-info')
100621                     .data([0]);
100622
100623                 if (prose.enter().size()) {   // first time, make sure to update user details in prose
100624                     _userDetails = null;
100625                 }
100626
100627                 prose = prose.enter()
100628                     .append('p')
100629                     .attr('class', 'commit-info')
100630                     .text(t('commit.upload_explanation'))
100631                     .merge(prose);
100632
100633                 // always check if this has changed, but only update prose.html()
100634                 // if needed, because it can trigger a style recalculation
100635                 osm.userDetails(function(err, user) {
100636                     if (err) return;
100637
100638                     if (_userDetails === user) return;  // no change
100639                     _userDetails = user;
100640
100641                     var userLink = d3_select(document.createElement('div'));
100642
100643                     if (user.image_url) {
100644                         userLink
100645                             .append('img')
100646                             .attr('src', user.image_url)
100647                             .attr('class', 'icon pre-text user-icon');
100648                     }
100649
100650                     userLink
100651                         .append('a')
100652                         .attr('class', 'user-info')
100653                         .text(user.display_name)
100654                         .attr('href', osm.userURL(user.display_name))
100655                         .attr('target', '_blank');
100656
100657                     prose
100658                         .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
100659                 });
100660
100661
100662                 // Request Review
100663                 var requestReview = saveSection.selectAll('.request-review')
100664                     .data([0]);
100665
100666                 // Enter
100667                 var requestReviewEnter = requestReview.enter()
100668                     .append('div')
100669                     .attr('class', 'request-review');
100670
100671                 var labelEnter = requestReviewEnter
100672                     .append('label')
100673                     .attr('for', 'commit-input-request-review');
100674
100675                 labelEnter
100676                     .append('input')
100677                     .attr('type', 'checkbox')
100678                     .attr('id', 'commit-input-request-review');
100679
100680                 labelEnter
100681                     .append('span')
100682                     .text(t('commit.request_review'));
100683
100684                 // Update
100685                 requestReview = requestReview
100686                     .merge(requestReviewEnter);
100687
100688                 var requestReviewInput = requestReview.selectAll('input')
100689                     .property('checked', isReviewRequested(_changeset$1.tags))
100690                     .on('change', toggleRequestReview);
100691
100692
100693                 // Buttons
100694                 var buttonSection = saveSection.selectAll('.buttons')
100695                     .data([0]);
100696
100697                 // enter
100698                 var buttonEnter = buttonSection.enter()
100699                     .append('div')
100700                     .attr('class', 'buttons fillL cf');
100701
100702                 buttonEnter
100703                     .append('button')
100704                     .attr('class', 'secondary-action button cancel-button')
100705                     .append('span')
100706                     .attr('class', 'label')
100707                     .text(t('commit.cancel'));
100708
100709                 var uploadButton = buttonEnter
100710                     .append('button')
100711                     .attr('class', 'action button save-button');
100712
100713                 uploadButton.append('span')
100714                     .attr('class', 'label')
100715                     .text(t('commit.save'));
100716
100717                 var uploadBlockerTooltipText = getUploadBlockerMessage();
100718
100719                 // update
100720                 buttonSection = buttonSection
100721                     .merge(buttonEnter);
100722
100723                 buttonSection.selectAll('.cancel-button')
100724                     .on('click.cancel', function() {
100725                         var selectedID = commitChanges.entityID();
100726                         dispatch$1.call('cancel', this, selectedID);
100727                     });
100728
100729                 buttonSection.selectAll('.save-button')
100730                     .classed('disabled', uploadBlockerTooltipText !== null)
100731                     .on('click.save', function() {
100732                         if (!d3_select(this).classed('disabled')) {
100733                             this.blur();    // avoid keeping focus on the button - #4641
100734                             dispatch$1.call('save', this, _changeset$1);
100735                         }
100736                     });
100737
100738                 // remove any existing tooltip
100739                 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
100740
100741                 if (uploadBlockerTooltipText) {
100742                     buttonSection.selectAll('.save-button')
100743                         .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
100744                 }
100745
100746                 // Raw Tag Editor
100747                 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
100748                     .data([0]);
100749
100750                 tagSection = tagSection.enter()
100751                     .append('div')
100752                     .attr('class', 'modal-section tag-section raw-tag-editor')
100753                     .merge(tagSection);
100754
100755                 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
100756                 tagSection
100757                     .call(rawTagEditor
100758                         .expanded(expanded)
100759                         .readOnlyTags(readOnlyTags)
100760                         .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
100761                     );
100762
100763
100764                 // Change summary
100765                 body.call(commitChanges);
100766
100767
100768                 function toggleRequestReview() {
100769                     var rr = requestReviewInput.property('checked');
100770                     updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
100771
100772                     var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
100773                     tagSection
100774                         .call(rawTagEditor
100775                             .expanded(expanded)
100776                             .readOnlyTags(readOnlyTags)
100777                             .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
100778                         );
100779                 }
100780             }
100781
100782
100783             function getUploadBlockerMessage() {
100784                 var errors = context.validator()
100785                     .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
100786
100787                 if (errors.length) {
100788                     return t('commit.outstanding_errors_message', { count: errors.length });
100789
100790                 } else {
100791                     var n = d3_select('#preset-input-comment').node();
100792                     var hasChangesetComment = n && n.value.length > 0;
100793                     if (!hasChangesetComment) {
100794                         return t('commit.comment_needed_message');
100795                     }
100796                 }
100797                 return null;
100798             }
100799
100800
100801             function changeTags(changed, onInput) {
100802                 if (changed.hasOwnProperty('comment')) {
100803                     if (changed.comment === undefined) {
100804                         changed.comment = '';
100805                     }
100806                     if (!onInput) {
100807                         context.storage('comment', changed.comment);
100808                         context.storage('commentDate', Date.now());
100809                     }
100810                 }
100811                 if (changed.hasOwnProperty('source')) {
100812                     if (changed.source === undefined) {
100813                         context.storage('source', null);
100814                     } else if (!onInput) {
100815                         context.storage('source', changed.source);
100816                         context.storage('commentDate', Date.now());
100817                     }
100818                 }
100819
100820                 updateChangeset(changed, onInput);
100821
100822                 if (_selection) {
100823                     _selection.call(commit);
100824                 }
100825             }
100826
100827
100828             function findHashtags(tags, commentOnly) {
100829                 var inComment = commentTags();
100830                 var inHashTags = hashTags();
100831
100832                 if (inComment !== null) {                    // when hashtags are detected in comment...
100833                     context.storage('hashtags', null);       // always remove stored hashtags - #4304
100834                     if (commentOnly) { inHashTags = []; }    // optionally override hashtags field
100835                 }
100836
100837                 // keep only one copy of the tags
100838                 var all = new Set();
100839                 var keepTags = [];
100840                 inComment.forEach(checkTag);
100841                 inHashTags.forEach(checkTag);
100842                 return keepTags;
100843
100844                 // Compare tags as lowercase strings, but keep original case tags
100845                 function checkTag(s) {
100846                     var compare = s.toLowerCase();
100847                     if (!all.has(compare)) {
100848                         all.add(compare);
100849                         keepTags.push(s);
100850                     }
100851                 }
100852
100853                 // Extract hashtags from `comment`
100854                 function commentTags() {
100855                     var matches = (tags.comment || '')
100856                         .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
100857                         .match(hashtagRegex);
100858
100859                     return (matches || []);
100860                 }
100861
100862                 // Extract and clean hashtags from `hashtags`
100863                 function hashTags() {
100864                     var matches = (tags.hashtags || '')
100865                         .split(/[,;\s]+/)
100866                         .map(function (s) {
100867                             if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
100868                             var matched = s.match(hashtagRegex);
100869                             return matched && matched[0];
100870                         }).filter(Boolean);                       // exclude falsy
100871
100872                     return (matches || []);
100873                 }
100874             }
100875
100876
100877             function isReviewRequested(tags) {
100878                 var rr = tags.review_requested;
100879                 if (rr === undefined) return false;
100880                 rr = rr.trim().toLowerCase();
100881                 return !(rr === '' || rr === 'no');
100882             }
100883
100884
100885             function updateChangeset(changed, onInput) {
100886                 var tags = Object.assign({}, _changeset$1.tags);   // shallow copy
100887
100888                 Object.keys(changed).forEach(function(k) {
100889                     var v = changed[k];
100890                     k = k.trim().substr(0, 255);
100891                     if (readOnlyTags.indexOf(k) !== -1) return;
100892
100893                     if (k !== '' && v !== undefined) {
100894                         if (onInput) {
100895                             tags[k] = v;
100896                         } else {
100897                             tags[k] = v.trim().substr(0, 255);
100898                         }
100899                     } else {
100900                         delete tags[k];
100901                     }
100902                 });
100903
100904                 if (!onInput) {
100905                     // when changing the comment, override hashtags with any found in comment.
100906                     var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
100907                     var arr = findHashtags(tags, commentOnly);
100908                     if (arr.length) {
100909                         tags.hashtags = arr.join(';').substr(0, 255);
100910                         context.storage('hashtags', tags.hashtags);
100911                     } else {
100912                         delete tags.hashtags;
100913                         context.storage('hashtags', null);
100914                     }
100915                 }
100916
100917                 // always update userdetails, just in case user reauthenticates as someone else
100918                 if (_userDetails && _userDetails.changesets_count !== undefined) {
100919                     var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
100920                     tags.changesets_count = String(changesetsCount);
100921
100922                     // first 100 edits - new user
100923                     if (changesetsCount <= 100) {
100924                         var s;
100925                         s = context.storage('walkthrough_completed');
100926                         if (s) {
100927                             tags['ideditor:walkthrough_completed'] = s;
100928                         }
100929
100930                         s = context.storage('walkthrough_progress');
100931                         if (s) {
100932                             tags['ideditor:walkthrough_progress'] = s;
100933                         }
100934
100935                         s = context.storage('walkthrough_started');
100936                         if (s) {
100937                             tags['ideditor:walkthrough_started'] = s;
100938                         }
100939                     }
100940                 } else {
100941                     delete tags.changesets_count;
100942                 }
100943
100944                 if (!fastDeepEqual(_changeset$1.tags, tags)) {
100945                     _changeset$1 = _changeset$1.update({ tags: tags });
100946                 }
100947             }
100948
100949
100950             commit.reset = function() {
100951                 _changeset$1 = null;
100952             };
100953
100954
100955             return utilRebind(commit, dispatch$1, 'on');
100956         }
100957
100958         function uiSuccess(context) {
100959             var MAXEVENTS = 2;
100960             var detected = utilDetect();
100961             var dispatch$1 = dispatch('cancel');
100962             var _changeset;
100963             var _location;
100964
100965
100966             // string-to-date parsing in JavaScript is weird
100967             function parseEventDate(when) {
100968                 if (!when) return;
100969
100970                 var raw = when.trim();
100971                 if (!raw) return;
100972
100973                 if (!/Z$/.test(raw)) {    // if no trailing 'Z', add one
100974                     raw += 'Z';           // this forces date to be parsed as a UTC date
100975                 }
100976
100977                 var parsed = new Date(raw);
100978                 return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
100979             }
100980
100981
100982             function success(selection) {
100983                 var header = selection
100984                     .append('div')
100985                     .attr('class', 'header fillL');
100986
100987                 header
100988                     .append('button')
100989                     .attr('class', 'fr')
100990                     .on('click', function() { dispatch$1.call('cancel'); })
100991                     .call(svgIcon('#iD-icon-close'));
100992
100993                 header
100994                     .append('h3')
100995                     .text(t('success.just_edited'));
100996
100997                 var body = selection
100998                     .append('div')
100999                     .attr('class', 'body save-success fillL');
101000
101001                 var summary = body
101002                     .append('div')
101003                     .attr('class', 'save-summary');
101004
101005                 summary
101006                     .append('h3')
101007                     .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
101008
101009                 summary
101010                     .append('p')
101011                     .text(t('success.help_html'))
101012                     .append('a')
101013                     .attr('class', 'link-out')
101014                     .attr('target', '_blank')
101015                     .attr('tabindex', -1)
101016                     .attr('href', t('success.help_link_url'))
101017                     .call(svgIcon('#iD-icon-out-link', 'inline'))
101018                     .append('span')
101019                     .text(t('success.help_link_text'));
101020
101021                 var osm = context.connection();
101022                 if (!osm) return;
101023
101024                 var changesetURL = osm.changesetURL(_changeset.id);
101025
101026                 var table = summary
101027                     .append('table')
101028                     .attr('class', 'summary-table');
101029
101030                 var row = table
101031                     .append('tr')
101032                     .attr('class', 'summary-row');
101033
101034                 row
101035                     .append('td')
101036                     .attr('class', 'cell-icon summary-icon')
101037                     .append('a')
101038                     .attr('target', '_blank')
101039                     .attr('href', changesetURL)
101040                     .append('svg')
101041                     .attr('class', 'logo-small')
101042                     .append('use')
101043                     .attr('xlink:href', '#iD-logo-osm');
101044
101045                 var summaryDetail = row
101046                     .append('td')
101047                     .attr('class', 'cell-detail summary-detail');
101048
101049                 summaryDetail
101050                     .append('a')
101051                     .attr('class', 'cell-detail summary-view-on-osm')
101052                     .attr('target', '_blank')
101053                     .attr('href', changesetURL)
101054                     .text(t('success.view_on_osm'));
101055
101056                 summaryDetail
101057                     .append('div')
101058                     .html(t('success.changeset_id', {
101059                         changeset_id: '<a href="' + changesetURL + '" target="_blank">' + _changeset.id + '</a>'
101060                     }));
101061
101062
101063                 // Gather community polygon IDs intersecting the map..
101064                 var matchFeatures = data.community.query(context.map().center(), true) || [];
101065                 var matchIDs = matchFeatures.map(function(feature) { return feature.id; });
101066
101067                 // Gather community resources that are either global or match a polygon.
101068                 var matchResources = Object.values(data.community.resources)
101069                     .filter(function(v) { return !v.featureId || matchIDs.indexOf(v.featureId) !== -1; });
101070
101071                 if (matchResources.length) {
101072                     // sort by size ascending, then by community rank
101073                     matchResources.sort(function(a, b) {
101074                         var aSize = Infinity;
101075                         var bSize = Infinity;
101076                         var aOrder = a.order || 0;
101077                         var bOrder = b.order || 0;
101078
101079                         if (a.featureId) {
101080                             aSize = data.community.features[a.featureId].properties.area;
101081                         }
101082                         if (b.featureId) {
101083                             bSize = data.community.features[b.featureId].properties.area;
101084                         }
101085
101086                         return aSize < bSize ? -1 : aSize > bSize ? 1 : bOrder - aOrder;
101087                     });
101088
101089                     body
101090                         .call(showCommunityLinks, matchResources);
101091                 }
101092             }
101093
101094
101095             function showCommunityLinks(selection, matchResources) {
101096                 var communityLinks = selection
101097                     .append('div')
101098                     .attr('class', 'save-communityLinks');
101099
101100                 communityLinks
101101                     .append('h3')
101102                     .text(t('success.like_osm'));
101103
101104                 var table = communityLinks
101105                     .append('table')
101106                     .attr('class', 'community-table');
101107
101108                 var row = table.selectAll('.community-row')
101109                     .data(matchResources);
101110
101111                 var rowEnter = row.enter()
101112                     .append('tr')
101113                     .attr('class', 'community-row');
101114
101115                 rowEnter
101116                     .append('td')
101117                     .attr('class', 'cell-icon community-icon')
101118                     .append('a')
101119                     .attr('target', '_blank')
101120                     .attr('href', function(d) { return d.url; })
101121                     .append('svg')
101122                     .attr('class', 'logo-small')
101123                     .append('use')
101124                     .attr('xlink:href', function(d) { return '#community-' + d.type; });
101125
101126                 var communityDetail = rowEnter
101127                     .append('td')
101128                     .attr('class', 'cell-detail community-detail');
101129
101130                 communityDetail
101131                     .each(showCommunityDetails);
101132
101133                 communityLinks
101134                     .append('div')
101135                     .attr('class', 'community-missing')
101136                     .text(t('success.missing'))
101137                     .append('a')
101138                     .attr('class', 'link-out')
101139                     .attr('target', '_blank')
101140                     .attr('tabindex', -1)
101141                     .call(svgIcon('#iD-icon-out-link', 'inline'))
101142                     .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
101143                     .append('span')
101144                     .text(t('success.tell_us'));
101145             }
101146
101147
101148             function showCommunityDetails(d) {
101149                 var selection = d3_select(this);
101150                 var communityID = d.id;
101151                 var replacements = {
101152                     url: linkify(d.url),
101153                     signupUrl: linkify(d.signupUrl || d.url)
101154                 };
101155
101156                 selection
101157                     .append('div')
101158                     .attr('class', 'community-name')
101159                     .append('a')
101160                     .attr('target', '_blank')
101161                     .attr('href', d.url)
101162                     .text(t('community.' + d.id + '.name'));
101163
101164                 var descriptionHTML = t('community.' + d.id + '.description', replacements);
101165
101166                 if (d.type === 'reddit') {   // linkify subreddits  #4997
101167                     descriptionHTML = descriptionHTML
101168                         .replace(/(\/r\/\w*\/*)/i, function(match) { return linkify(d.url, match); });
101169                 }
101170
101171                 selection
101172                     .append('div')
101173                     .attr('class', 'community-description')
101174                     .html(descriptionHTML);
101175
101176                 if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
101177                     selection
101178                         .append('div')
101179                         .call(uiDisclosure(context, 'community-more-' + d.id, false)
101180                             .expanded(false)
101181                             .updatePreference(false)
101182                             .title(t('success.more'))
101183                             .content(showMore)
101184                         );
101185                 }
101186
101187                 var nextEvents = (d.events || [])
101188                     .map(function(event) {
101189                         event.date = parseEventDate(event.when);
101190                         return event;
101191                     })
101192                     .filter(function(event) {               // date is valid and future (or today)
101193                         var t = event.date.getTime();
101194                         var now = (new Date()).setHours(0,0,0,0);
101195                         return !isNaN(t) && t >= now;
101196                     })
101197                     .sort(function(a, b) {                  // sort by date ascending
101198                         return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
101199                     })
101200                     .slice(0, MAXEVENTS);                   // limit number of events shown
101201
101202                 if (nextEvents.length) {
101203                     selection
101204                         .append('div')
101205                         .call(uiDisclosure(context, 'community-events-' + d.id, false)
101206                             .expanded(false)
101207                             .updatePreference(false)
101208                             .title(t('success.events'))
101209                             .content(showNextEvents)
101210                         )
101211                         .select('.hide-toggle')
101212                         .append('span')
101213                         .attr('class', 'badge-text')
101214                         .text(nextEvents.length);
101215                 }
101216
101217
101218                 function showMore(selection) {
101219                     var more = selection.selectAll('.community-more')
101220                         .data([0]);
101221
101222                     var moreEnter = more.enter()
101223                         .append('div')
101224                         .attr('class', 'community-more');
101225
101226                     if (d.extendedDescription) {
101227                         moreEnter
101228                             .append('div')
101229                             .attr('class', 'community-extended-description')
101230                             .html(t('community.' + d.id + '.extendedDescription', replacements));
101231                     }
101232
101233                     if (d.languageCodes && d.languageCodes.length) {
101234                         var languageList = d.languageCodes.map(function(code) {
101235                             return languageName(code);
101236                         }).join(', ');
101237
101238                         moreEnter
101239                             .append('div')
101240                             .attr('class', 'community-languages')
101241                             .text(t('success.languages', { languages: languageList }));
101242                     }
101243                 }
101244
101245
101246                 function showNextEvents(selection) {
101247                     var events = selection
101248                         .append('div')
101249                         .attr('class', 'community-events');
101250
101251                     var item = events.selectAll('.community-event')
101252                         .data(nextEvents);
101253
101254                     var itemEnter = item.enter()
101255                         .append('div')
101256                         .attr('class', 'community-event');
101257
101258                     itemEnter
101259                         .append('div')
101260                         .attr('class', 'community-event-name')
101261                         .append('a')
101262                         .attr('target', '_blank')
101263                         .attr('href', function(d) { return d.url; })
101264                         .text(function(d) {
101265                             var name = d.name;
101266                             if (d.i18n && d.id) {
101267                                 name = t('community.' + communityID + '.events.' + d.id + '.name', { default: name });
101268                             }
101269                             return name;
101270                         });
101271
101272                     itemEnter
101273                         .append('div')
101274                         .attr('class', 'community-event-when')
101275                         .text(function(d) {
101276                             var options = {
101277                                 weekday: 'short', day: 'numeric', month: 'short', year: 'numeric'
101278                             };
101279                             if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
101280                                 options.hour = 'numeric';
101281                                 options.minute = 'numeric';
101282                             }
101283                             return d.date.toLocaleString(detected.locale, options);
101284                         });
101285
101286                     itemEnter
101287                         .append('div')
101288                         .attr('class', 'community-event-where')
101289                         .text(function(d) {
101290                             var where = d.where;
101291                             if (d.i18n && d.id) {
101292                                 where = t('community.' + communityID + '.events.' + d.id + '.where', { default: where });
101293                             }
101294                             return where;
101295                         });
101296
101297                     itemEnter
101298                         .append('div')
101299                         .attr('class', 'community-event-description')
101300                         .text(function(d) {
101301                             var description = d.description;
101302                             if (d.i18n && d.id) {
101303                                 description = t('community.' + communityID + '.events.' + d.id + '.description', { default: description });
101304                             }
101305                             return description;
101306                         });
101307                 }
101308
101309
101310                 function linkify(url, text) {
101311                     text = text || url;
101312                     return '<a target="_blank" href="' + url + '">' + text + '</a>';
101313                 }
101314             }
101315
101316
101317             success.changeset = function(_) {
101318                 if (!arguments.length) return _changeset;
101319                 _changeset = _;
101320                 return success;
101321             };
101322
101323
101324             success.location = function(_) {
101325                 if (!arguments.length) return _location;
101326                 _location = _;
101327                 return success;
101328             };
101329
101330
101331             return utilRebind(success, dispatch$1, 'on');
101332         }
101333
101334         var _isSaving = false;
101335
101336
101337         function modeSave(context) {
101338             var mode = { id: 'save' };
101339             var keybinding = utilKeybinding('modeSave');
101340
101341             var loading = uiLoading(context)
101342                 .message(t('save.uploading'))
101343                 .blocking(true);
101344
101345             var commit = uiCommit(context)
101346                 .on('cancel', cancel)
101347                 .on('save', save);
101348
101349             var _toCheck = [];
101350             var _toLoad = [];
101351             var _loaded = {};
101352             var _toLoadCount = 0;
101353             var _toLoadTotal = 0;
101354
101355             var _conflicts = [];
101356             var _errors = [];
101357             var _origChanges;
101358             var _location;
101359
101360
101361             function cancel(selectedID) {
101362                 if (selectedID) {
101363                     context.enter(modeSelect(context, [selectedID]));
101364                 } else {
101365                     context.enter(modeBrowse(context));
101366                 }
101367             }
101368
101369
101370             function save(changeset, tryAgain, checkConflicts) {
101371                 // Guard against accidentally entering save code twice - #4641
101372                 if (_isSaving && !tryAgain) {
101373                     return;
101374                 }
101375
101376                 var osm = context.connection();
101377                 if (!osm) {
101378                     cancel();
101379                     return;
101380                 }
101381
101382                 // If user somehow got logged out mid-save, try to reauthenticate..
101383                 // This can happen if they were logged in from before, but the tokens are no longer valid.
101384                 if (!osm.authenticated()) {
101385                     osm.authenticate(function(err) {
101386                         if (err) {
101387                             cancel();   // quit save mode..
101388                         } else {
101389                             save(changeset, tryAgain, checkConflicts);  // continue where we left off..
101390                         }
101391                     });
101392                     return;
101393                 }
101394
101395                 if (!_isSaving) {
101396                     keybindingOff();
101397                     context.container().call(loading);  // block input
101398                     _isSaving = true;
101399                 }
101400
101401                 var history = context.history();
101402                 var localGraph = context.graph();
101403                 var remoteGraph = coreGraph(history.base(), true);
101404
101405                 _conflicts = [];
101406                 _errors = [];
101407
101408                 // Store original changes, in case user wants to download them as an .osc file
101409                 _origChanges = history.changes(actionDiscardTags(history.difference()));
101410
101411                 // First time, `history.perform` a no-op action.
101412                 // Any conflict resolutions will be done as `history.replace`
101413                 if (!tryAgain) {
101414                     history.perform(actionNoop());
101415                 }
101416
101417                 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
101418                 if (!checkConflicts) {
101419                     upload(changeset);
101420
101421                 // Do the full (slow) conflict check..
101422                 } else {
101423                     var summary = history.difference().summary();
101424                     _toCheck = [];
101425                     for (var i = 0; i < summary.length; i++) {
101426                         var item = summary[i];
101427                         if (item.changeType === 'modified') {
101428                             _toCheck.push(item.entity.id);
101429                         }
101430                     }
101431
101432                     _toLoad = withChildNodes(_toCheck, localGraph);
101433                     _loaded = {};
101434                     _toLoadCount = 0;
101435                     _toLoadTotal = _toLoad.length;
101436
101437                     if (_toCheck.length) {
101438                         showProgress(_toLoadCount, _toLoadTotal);
101439                         _toLoad.forEach(function(id) { _loaded[id] = false; });
101440                         osm.loadMultiple(_toLoad, loaded);
101441                     } else {
101442                         upload(changeset);
101443                     }
101444                 }
101445
101446                 return;
101447
101448
101449                 function withChildNodes(ids, graph) {
101450                     var s = new Set(ids);
101451                     ids.forEach(function(id) {
101452                         var entity = graph.entity(id);
101453                         if (entity.type !== 'way') return;
101454
101455                         graph.childNodes(entity).forEach(function(child) {
101456                             if (child.version !== undefined) {
101457                                 s.add(child.id);
101458                             }
101459                         });
101460                     });
101461
101462                     return Array.from(s);
101463                 }
101464
101465
101466                 // Reload modified entities into an alternate graph and check for conflicts..
101467                 function loaded(err, result) {
101468                     if (_errors.length) return;
101469
101470                     if (err) {
101471                         _errors.push({
101472                             msg: err.message || err.responseText,
101473                             details: [ t('save.status_code', { code: err.status }) ]
101474                         });
101475                         showErrors();
101476
101477                     } else {
101478                         var loadMore = [];
101479
101480                         result.data.forEach(function(entity) {
101481                             remoteGraph.replace(entity);
101482                             _loaded[entity.id] = true;
101483                             _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
101484
101485                             if (!entity.visible) return;
101486
101487                             // Because loadMultiple doesn't download /full like loadEntity,
101488                             // need to also load children that aren't already being checked..
101489                             var i, id;
101490                             if (entity.type === 'way') {
101491                                 for (i = 0; i < entity.nodes.length; i++) {
101492                                     id = entity.nodes[i];
101493                                     if (_loaded[id] === undefined) {
101494                                         _loaded[id] = false;
101495                                         loadMore.push(id);
101496                                     }
101497                                 }
101498                             } else if (entity.type === 'relation' && entity.isMultipolygon()) {
101499                                 for (i = 0; i < entity.members.length; i++) {
101500                                     id = entity.members[i].id;
101501                                     if (_loaded[id] === undefined) {
101502                                         _loaded[id] = false;
101503                                         loadMore.push(id);
101504                                     }
101505                                 }
101506                             }
101507                         });
101508
101509                         _toLoadCount += result.data.length;
101510                         _toLoadTotal += loadMore.length;
101511                         showProgress(_toLoadCount, _toLoadTotal);
101512
101513                         if (loadMore.length) {
101514                             _toLoad.push.apply(_toLoad, loadMore);
101515                             osm.loadMultiple(loadMore, loaded);
101516                         }
101517
101518                         if (!_toLoad.length) {
101519                             detectConflicts();
101520                         }
101521                     }
101522                 }
101523
101524
101525                 function detectConflicts() {
101526                     function choice(id, text, action) {
101527                         return { id: id, text: text, action: function() { history.replace(action); } };
101528                     }
101529                     function formatUser(d) {
101530                         return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
101531                     }
101532                     function entityName(entity) {
101533                         return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
101534                     }
101535
101536                     function sameVersions(local, remote) {
101537                         if (local.version !== remote.version) return false;
101538
101539                         if (local.type === 'way') {
101540                             var children = utilArrayUnion(local.nodes, remote.nodes);
101541                             for (var i = 0; i < children.length; i++) {
101542                                 var a = localGraph.hasEntity(children[i]);
101543                                 var b = remoteGraph.hasEntity(children[i]);
101544                                 if (a && b && a.version !== b.version) return false;
101545                             }
101546                         }
101547
101548                         return true;
101549                     }
101550
101551                     _toCheck.forEach(function(id) {
101552                         var local = localGraph.entity(id);
101553                         var remote = remoteGraph.entity(id);
101554
101555                         if (sameVersions(local, remote)) return;
101556
101557                         var action = actionMergeRemoteChanges;
101558                         var merge = action(id, localGraph, remoteGraph, formatUser);
101559
101560                         history.replace(merge);
101561
101562                         var mergeConflicts = merge.conflicts();
101563                         if (!mergeConflicts.length) return;  // merged safely
101564
101565                         var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
101566                         var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
101567                         var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
101568                         var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
101569
101570                         _conflicts.push({
101571                             id: id,
101572                             name: entityName(local),
101573                             details: mergeConflicts,
101574                             chosen: 1,
101575                             choices: [
101576                                 choice(id, keepMine, forceLocal),
101577                                 choice(id, keepTheirs, forceRemote)
101578                             ]
101579                         });
101580                     });
101581
101582                     upload(changeset);
101583                 }
101584             }
101585
101586
101587             function upload(changeset) {
101588                 var osm = context.connection();
101589                 if (!osm) {
101590                     _errors.push({ msg: 'No OSM Service' });
101591                 }
101592
101593                 if (_conflicts.length) {
101594                     _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
101595                     showConflicts(changeset);
101596
101597                 } else if (_errors.length) {
101598                     showErrors();
101599
101600                 } else {
101601                     var history = context.history();
101602                     var changes = history.changes(actionDiscardTags(history.difference()));
101603                     if (changes.modified.length || changes.created.length || changes.deleted.length) {
101604                         loadLocation();  // so it is ready when we display the save screen
101605                         osm.putChangeset(changeset, changes, uploadCallback);
101606                     } else {        // changes were insignificant or reverted by user
101607                         d3_select('.inspector-wrap *').remove();
101608                         loading.close();
101609                         _isSaving = false;
101610                         context.flush();
101611                         cancel();
101612                     }
101613                 }
101614             }
101615
101616
101617             function uploadCallback(err, changeset) {
101618                 if (err) {
101619                     if (err.status === 409) {          // 409 Conflict
101620                         save(changeset, true, true);   // tryAgain = true, checkConflicts = true
101621                     } else {
101622                         _errors.push({
101623                             msg: err.message || err.responseText,
101624                             details: [ t('save.status_code', { code: err.status }) ]
101625                         });
101626                         showErrors();
101627                     }
101628
101629                 } else {
101630                     context.history().clearSaved();
101631                     success(changeset);
101632                     // Add delay to allow for postgres replication #1646 #2678
101633                     window.setTimeout(function() {
101634                         d3_select('.inspector-wrap *').remove();
101635                         loading.close();
101636                         _isSaving = false;
101637                         context.flush();
101638                     }, 2500);
101639                 }
101640             }
101641
101642
101643             function showProgress(num, total) {
101644                 var modal = context.container().select('.loading-modal .modal-section');
101645                 var progress = modal.selectAll('.progress')
101646                     .data([0]);
101647
101648                 // enter/update
101649                 progress.enter()
101650                     .append('div')
101651                     .attr('class', 'progress')
101652                     .merge(progress)
101653                     .text(t('save.conflict_progress', { num: num, total: total }));
101654             }
101655
101656
101657             function showConflicts(changeset) {
101658                 var history = context.history();
101659                 var selection = context.container()
101660                     .select('#sidebar')
101661                     .append('div')
101662                     .attr('class','sidebar-component');
101663
101664                 loading.close();
101665                 _isSaving = false;
101666
101667                 var ui = uiConflicts(context)
101668                     .conflictList(_conflicts)
101669                     .origChanges(_origChanges)
101670                     .on('cancel', function() {
101671                         history.pop();
101672                         selection.remove();
101673                         keybindingOn();
101674                     })
101675                     .on('save', function() {
101676                         for (var i = 0; i < _conflicts.length; i++) {
101677                             if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
101678                                 var entity = context.hasEntity(_conflicts[i].id);
101679                                 if (entity && entity.type === 'way') {
101680                                     var children = utilArrayUniq(entity.nodes);
101681                                     for (var j = 0; j < children.length; j++) {
101682                                         history.replace(actionRevert(children[j]));
101683                                     }
101684                                 }
101685                                 history.replace(actionRevert(_conflicts[i].id));
101686                             }
101687                         }
101688
101689                         selection.remove();
101690                         save(changeset, true, false);  // tryAgain = true, checkConflicts = false
101691                     });
101692
101693                 selection.call(ui);
101694             }
101695
101696
101697             function showErrors() {
101698                 keybindingOn();
101699                 context.history().pop();
101700                 loading.close();
101701                 _isSaving = false;
101702
101703                 var selection = uiConfirm(context.container());
101704                 selection
101705                     .select('.modal-section.header')
101706                     .append('h3')
101707                     .text(t('save.error'));
101708
101709                 addErrors(selection, _errors);
101710                 selection.okButton();
101711             }
101712
101713
101714             function addErrors(selection, data) {
101715                 var message = selection
101716                     .select('.modal-section.message-text');
101717
101718                 var items = message
101719                     .selectAll('.error-container')
101720                     .data(data);
101721
101722                 var enter = items.enter()
101723                     .append('div')
101724                     .attr('class', 'error-container');
101725
101726                 enter
101727                     .append('a')
101728                     .attr('class', 'error-description')
101729                     .attr('href', '#')
101730                     .classed('hide-toggle', true)
101731                     .text(function(d) { return d.msg || t('save.unknown_error_details'); })
101732                     .on('click', function() {
101733                         event.preventDefault();
101734
101735                         var error = d3_select(this);
101736                         var detail = d3_select(this.nextElementSibling);
101737                         var exp = error.classed('expanded');
101738
101739                         detail.style('display', exp ? 'none' : 'block');
101740                         error.classed('expanded', !exp);
101741                     });
101742
101743                 var details = enter
101744                     .append('div')
101745                     .attr('class', 'error-detail-container')
101746                     .style('display', 'none');
101747
101748                 details
101749                     .append('ul')
101750                     .attr('class', 'error-detail-list')
101751                     .selectAll('li')
101752                     .data(function(d) { return d.details || []; })
101753                     .enter()
101754                     .append('li')
101755                     .attr('class', 'error-detail-item')
101756                     .text(function(d) { return d; });
101757
101758                 items.exit()
101759                     .remove();
101760             }
101761
101762
101763             function success(changeset) {
101764                 commit.reset();
101765
101766                 var ui = uiSuccess(context)
101767                     .changeset(changeset)
101768                     .location(_location)
101769                     .on('cancel', function() { context.ui().sidebar.hide(); });
101770
101771                 context.enter(modeBrowse(context).sidebar(ui));
101772             }
101773
101774
101775             function keybindingOn() {
101776                 d3_select(document)
101777                     .call(keybinding.on('⎋', cancel, true));
101778             }
101779
101780
101781             function keybindingOff() {
101782                 d3_select(document)
101783                     .call(keybinding.unbind);
101784             }
101785
101786
101787             // Reverse geocode current map location so we can display a message on
101788             // the success screen like "Thank you for editing around place, region."
101789             function loadLocation() {
101790                 _location = null;
101791                 if (!services$1.geocoder) return;
101792
101793                 services$1.geocoder.reverse(context.map().center(), function(err, result) {
101794                     if (err || !result || !result.address) return;
101795
101796                     var addr = result.address;
101797                     var place = (addr && (addr.town || addr.city || addr.county)) || '';
101798                     var region = (addr && (addr.state || addr.country)) || '';
101799                     var separator = (place && region) ? t('success.thank_you_where.separator') : '';
101800
101801                     _location = t('success.thank_you_where.format',
101802                         { place: place, separator: separator, region: region }
101803                     );
101804                 });
101805             }
101806
101807
101808             mode.enter = function() {
101809                 // Show sidebar
101810                 context.ui().sidebar.expand();
101811
101812                 function done() {
101813                     context.ui().sidebar.show(commit);
101814                 }
101815
101816                 keybindingOn();
101817
101818                 context.container().selectAll('#content')
101819                     .attr('class', 'inactive');
101820
101821                 var osm = context.connection();
101822                 if (!osm) {
101823                     cancel();
101824                     return;
101825                 }
101826
101827                 if (osm.authenticated()) {
101828                     done();
101829                 } else {
101830                     osm.authenticate(function(err) {
101831                         if (err) {
101832                             cancel();
101833                         } else {
101834                             done();
101835                         }
101836                     });
101837                 }
101838             };
101839
101840
101841             mode.exit = function() {
101842                 _isSaving = false;
101843
101844                 keybindingOff();
101845
101846                 context.container().selectAll('#content')
101847                     .attr('class', 'active');
101848
101849                 context.ui().sidebar.hide();
101850             };
101851
101852             return mode;
101853         }
101854
101855         function uiToolOldDrawModes(context) {
101856
101857             var tool = {
101858                 id: 'old_modes',
101859                 label: t('toolbar.add_feature')
101860             };
101861
101862             var modes = [
101863                 modeAddPoint(context, {
101864                     title: t('modes.add_point.title'),
101865                     button: 'point',
101866                     description: t('modes.add_point.description'),
101867                     preset: context.presets().item('point'),
101868                     key: '1'
101869                 }),
101870                 modeAddLine(context, {
101871                     title: t('modes.add_line.title'),
101872                     button: 'line',
101873                     description: t('modes.add_line.description'),
101874                     preset: context.presets().item('line'),
101875                     key: '2'
101876                 }),
101877                 modeAddArea(context, {
101878                     title: t('modes.add_area.title'),
101879                     button: 'area',
101880                     description: t('modes.add_area.description'),
101881                     preset: context.presets().item('area'),
101882                     key: '3'
101883                 })
101884             ];
101885
101886
101887             function enabled() {
101888                 return osmEditable();
101889             }
101890
101891             function osmEditable() {
101892                 var mode = context.mode();
101893                 return context.editable() && mode && mode.id !== 'save';
101894             }
101895
101896             modes.forEach(function(mode) {
101897                 context.keybinding().on(mode.key, function() {
101898                     if (!enabled()) return;
101899
101900                     if (mode.id === context.mode().id) {
101901                         context.enter(modeBrowse(context));
101902                     } else {
101903                         context.enter(mode);
101904                     }
101905                 });
101906             });
101907
101908             tool.render = function(selection) {
101909
101910                 var wrap = selection
101911                     .append('div')
101912                     .attr('class', 'joined')
101913                     .style('display', 'flex');
101914
101915                 context
101916                     .on('enter.editor', function(entered) {
101917                         selection.selectAll('button.add-button')
101918                             .classed('active', function(mode) { return entered.button === mode.button; });
101919                         context.container()
101920                             .classed('mode-' + entered.id, true);
101921                     });
101922
101923                 context
101924                     .on('exit.editor', function(exited) {
101925                         context.container()
101926                             .classed('mode-' + exited.id, false);
101927                     });
101928
101929
101930                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
101931
101932                 context.map()
101933                     .on('move.modes', debouncedUpdate)
101934                     .on('drawn.modes', debouncedUpdate);
101935
101936                 context
101937                     .on('enter.modes', update);
101938
101939                 update();
101940
101941
101942                 function update() {
101943
101944                     var buttons = wrap.selectAll('button.add-button')
101945                         .data(modes, function(d) { return d.id; });
101946
101947                     // exit
101948                     buttons.exit()
101949                         .remove();
101950
101951                     // enter
101952                     var buttonsEnter = buttons.enter()
101953                         .append('button')
101954                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
101955                         .on('click.mode-buttons', function(d) {
101956                             if (!enabled()) return;
101957
101958                             // When drawing, ignore accidental clicks on mode buttons - #4042
101959                             var currMode = context.mode().id;
101960                             if (/^draw/.test(currMode)) return;
101961
101962                             if (d.id === currMode) {
101963                                 context.enter(modeBrowse(context));
101964                             } else {
101965                                 context.enter(d);
101966                             }
101967                         })
101968                         .call(tooltip()
101969                             .placement('bottom')
101970                             .html(true)
101971                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
101972                         );
101973
101974                     buttonsEnter
101975                         .each(function(d) {
101976                             d3_select(this)
101977                                 .call(svgIcon('#iD-icon-' + d.button));
101978                         });
101979
101980                     buttonsEnter
101981                         .append('span')
101982                         .attr('class', 'label')
101983                         .text(function(mode) { return mode.title; });
101984
101985                     // if we are adding/removing the buttons, check if toolbar has overflowed
101986                     if (buttons.enter().size() || buttons.exit().size()) {
101987                         context.ui().checkOverflow('#bar', true);
101988                     }
101989
101990                     // update
101991                     buttons = buttons
101992                         .merge(buttonsEnter)
101993                         .classed('disabled', function(d) { return !enabled(); });
101994                 }
101995             };
101996
101997             return tool;
101998         }
101999
102000         function uiToolNotes(context) {
102001
102002             var tool = {
102003                 id: 'notes',
102004                 label: t('modes.add_note.label')
102005             };
102006
102007             var mode = modeAddNote(context);
102008
102009             function enabled() {
102010                 return notesEnabled() && notesEditable();
102011             }
102012
102013             function notesEnabled() {
102014                 var noteLayer = context.layers().layer('notes');
102015                 return noteLayer && noteLayer.enabled();
102016             }
102017
102018             function notesEditable() {
102019                 var mode = context.mode();
102020                 return context.map().notesEditable() && mode && mode.id !== 'save';
102021             }
102022
102023             context.keybinding().on(mode.key, function() {
102024                 if (!enabled()) return;
102025
102026                 if (mode.id === context.mode().id) {
102027                     context.enter(modeBrowse(context));
102028                 } else {
102029                     context.enter(mode);
102030                 }
102031             });
102032
102033             tool.render = function(selection) {
102034
102035                 context
102036                     .on('enter.editor.notes', function(entered) {
102037                         selection.selectAll('button.add-button')
102038                             .classed('active', function(mode) { return entered.button === mode.button; });
102039                         context.container()
102040                             .classed('mode-' + entered.id, true);
102041                     });
102042
102043                 context
102044                     .on('exit.editor.notes', function(exited) {
102045                         context.container()
102046                             .classed('mode-' + exited.id, false);
102047                     });
102048
102049
102050                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
102051
102052                 context.map()
102053                     .on('move.notes', debouncedUpdate)
102054                     .on('drawn.notes', debouncedUpdate);
102055
102056                 context
102057                     .on('enter.notes', update);
102058
102059                 update();
102060
102061
102062                 function update() {
102063                     var showNotes = notesEnabled();
102064                     var data = showNotes ? [mode] : [];
102065
102066                     var buttons = selection.selectAll('button.add-button')
102067                         .data(data, function(d) { return d.id; });
102068
102069                     // exit
102070                     buttons.exit()
102071                         .remove();
102072
102073                     // enter
102074                     var buttonsEnter = buttons.enter()
102075                         .append('button')
102076                         .attr('tabindex', -1)
102077                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
102078                         .on('click.notes', function(d) {
102079                             if (!enabled()) return;
102080
102081                             // When drawing, ignore accidental clicks on mode buttons - #4042
102082                             var currMode = context.mode().id;
102083                             if (/^draw/.test(currMode)) return;
102084
102085                             if (d.id === currMode) {
102086                                 context.enter(modeBrowse(context));
102087                             } else {
102088                                 context.enter(d);
102089                             }
102090                         })
102091                         .call(tooltip()
102092                             .placement('bottom')
102093                             .html(true)
102094                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
102095                         );
102096
102097                     buttonsEnter
102098                         .each(function(d) {
102099                             d3_select(this)
102100                                 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
102101                         });
102102
102103                     // if we are adding/removing the buttons, check if toolbar has overflowed
102104                     if (buttons.enter().size() || buttons.exit().size()) {
102105                         context.ui().checkOverflow('#bar', true);
102106                     }
102107
102108                     // update
102109                     buttons = buttons
102110                         .merge(buttonsEnter)
102111                         .classed('disabled', function(d) { return !enabled(); });
102112                 }
102113             };
102114
102115             tool.uninstall = function() {
102116                 context
102117                     .on('enter.editor.notes', null)
102118                     .on('exit.editor.notes', null)
102119                     .on('enter.notes', null);
102120
102121                 context.map()
102122                     .on('move.notes', null)
102123                     .on('drawn.notes', null);
102124             };
102125
102126             return tool;
102127         }
102128
102129         function uiToolSave(context) {
102130
102131             var tool = {
102132                 id: 'save',
102133                 label: t('save.title')
102134             };
102135
102136             var button = null;
102137             var tooltipBehavior = null;
102138             var history = context.history();
102139             var key = uiCmd('⌘S');
102140             var _numChanges = 0;
102141
102142             function isSaving() {
102143                 var mode = context.mode();
102144                 return mode && mode.id === 'save';
102145             }
102146
102147             function isDisabled() {
102148                 return _numChanges === 0 || isSaving();
102149             }
102150
102151             function save() {
102152                 event.preventDefault();
102153                 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
102154                     context.enter(modeSave(context));
102155                 }
102156             }
102157
102158             function bgColor() {
102159                 var step;
102160                 if (_numChanges === 0) {
102161                     return null;
102162                 } else if (_numChanges <= 50) {
102163                     step = _numChanges / 50;
102164                     return d3_interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
102165                 } else {
102166                     step = Math.min((_numChanges - 50) / 50, 1.0);
102167                     return d3_interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
102168                 }
102169             }
102170
102171
102172             function updateCount() {
102173                 var val = history.difference().summary().length;
102174                 if (val === _numChanges) return;
102175                 _numChanges = val;
102176
102177                 if (tooltipBehavior) {
102178                     tooltipBehavior
102179                         .title(uiTooltipHtml(
102180                             t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
102181                         );
102182                 }
102183
102184                 if (button) {
102185                     button
102186                         .classed('disabled', isDisabled())
102187                         .style('background', bgColor());
102188
102189                     button.select('span.count')
102190                         .text(_numChanges);
102191                 }
102192             }
102193
102194
102195             tool.render = function(selection) {
102196                 tooltipBehavior = tooltip()
102197                     .placement('bottom')
102198                     .html(true)
102199                     .title(uiTooltipHtml(t('save.no_changes'), key));
102200
102201                 button = selection
102202                     .append('button')
102203                     .attr('class', 'save disabled bar-button')
102204                     .on('click', save)
102205                     .call(tooltipBehavior);
102206
102207                 button
102208                     .call(svgIcon('#iD-icon-save'));
102209
102210                 button
102211                     .append('span')
102212                     .attr('class', 'count')
102213                     .attr('aria-hidden', 'true')
102214                     .text('0');
102215
102216                 updateCount();
102217
102218
102219                 context.keybinding()
102220                     .on(key, save, true);
102221
102222
102223                 context.history()
102224                     .on('change.save', updateCount);
102225
102226                 context
102227                     .on('enter.save', function() {
102228                         if (button) {
102229                             button
102230                                 .classed('disabled', isDisabled());
102231
102232                             if (isSaving()) {
102233                                 button.call(tooltipBehavior.hide);
102234                             }
102235                         }
102236                     });
102237             };
102238
102239
102240             tool.uninstall = function() {
102241                 context.keybinding()
102242                     .off(key, true);
102243
102244                 context.history()
102245                     .on('change.save', null);
102246
102247                 context
102248                     .on('enter.save', null);
102249
102250                 button = null;
102251                 tooltipBehavior = null;
102252             };
102253
102254             return tool;
102255         }
102256
102257         function uiToolSidebarToggle(context) {
102258
102259             var tool = {
102260                 id: 'sidebar_toggle',
102261                 label: t('toolbar.inspect')
102262             };
102263
102264             tool.render = function(selection) {
102265                 selection
102266                     .append('button')
102267                     .attr('class', 'bar-button')
102268                     .on('click', function() {
102269                         context.ui().sidebar.toggle();
102270                     })
102271                     .call(tooltip()
102272                         .placement('bottom')
102273                         .html(true)
102274                         .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
102275                     )
102276                     .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
102277             };
102278
102279             return tool;
102280         }
102281
102282         function uiToolUndoRedo(context) {
102283
102284             var tool = {
102285                 id: 'undo_redo',
102286                 label: t('toolbar.undo_redo')
102287             };
102288
102289             var commands = [{
102290                 id: 'undo',
102291                 cmd: uiCmd('⌘Z'),
102292                 action: function() { if (editable()) context.undo(); },
102293                 annotation: function() { return context.history().undoAnnotation(); }
102294             }, {
102295                 id: 'redo',
102296                 cmd: uiCmd('⌘⇧Z'),
102297                 action: function() { if (editable()) context.redo(); },
102298                 annotation: function() { return context.history().redoAnnotation(); }
102299             }];
102300
102301
102302             function editable() {
102303                 var mode = context.mode();
102304                 return context.editable() && mode && mode.id !== 'save';
102305             }
102306
102307
102308             tool.render = function(selection) {
102309                 var tooltipBehavior = tooltip()
102310                     .placement('bottom')
102311                     .html(true)
102312                     .title(function (d) {
102313                         return uiTooltipHtml(d.annotation() ?
102314                             t(d.id + '.tooltip', {action: d.annotation()}) :
102315                             t(d.id + '.nothing'), d.cmd);
102316                     });
102317
102318                 var buttons = selection.selectAll('button')
102319                     .data(commands)
102320                     .enter()
102321                     .append('button')
102322                     .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
102323                     .on('click', function(d) { return d.action(); })
102324                     .call(tooltipBehavior);
102325
102326                 buttons.each(function(d) {
102327                     var iconName = d.id;
102328                     if (textDirection === 'rtl') {
102329                         if (iconName === 'undo') {
102330                             iconName = 'redo';
102331                         } else if (iconName === 'redo') {
102332                             iconName = 'undo';
102333                         }
102334                     }
102335                     d3_select(this)
102336                         .call(svgIcon('#iD-icon-' + iconName));
102337                 });
102338
102339                 context.keybinding()
102340                     .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
102341                     .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
102342
102343
102344                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
102345
102346                 context.map()
102347                     .on('move.undo_redo', debouncedUpdate)
102348                     .on('drawn.undo_redo', debouncedUpdate);
102349
102350                 context.history()
102351                     .on('change.undo_redo', function(difference) {
102352                         if (difference) update();
102353                     });
102354
102355                 context
102356                     .on('enter.undo_redo', update);
102357
102358
102359                 function update() {
102360                     buttons
102361                         .property('disabled', !editable())
102362                         .classed('disabled', function(d) {
102363                             return !editable() || !d.annotation();
102364                         })
102365                         .each(function() {
102366                             var selection = d3_select(this);
102367                             if (selection.property('tooltipVisible')) {
102368                                 selection.call(tooltipBehavior.show);
102369                             }
102370                         });
102371                 }
102372             };
102373
102374             tool.uninstall = function() {
102375                 context.keybinding()
102376                     .off(commands[0].cmd)
102377                     .off(commands[1].cmd);
102378
102379                 context.map()
102380                     .on('move.undo_redo', null)
102381                     .on('drawn.undo_redo', null);
102382
102383                 context.history()
102384                     .on('change.undo_redo', null);
102385
102386                 context
102387                     .on('enter.undo_redo', null);
102388             };
102389
102390             return tool;
102391         }
102392
102393         function uiTopToolbar(context) {
102394
102395             var sidebarToggle = uiToolSidebarToggle(context),
102396                 modes = uiToolOldDrawModes(context),
102397                 //searchAdd = uiToolSearchAdd(context),
102398                 //addFavorite = uiToolAddFavorite(context),
102399                 //addRecent = uiToolAddRecent(context),
102400                 notes = uiToolNotes(context),
102401                 undoRedo = uiToolUndoRedo(context),
102402                 save = uiToolSave(context);
102403
102404             function notesEnabled() {
102405                 var noteLayer = context.layers().layer('notes');
102406                 return noteLayer && noteLayer.enabled();
102407             }
102408
102409             function topToolbar(bar) {
102410
102411                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
102412                 context.layers()
102413                     .on('change.topToolbar', debouncedUpdate);
102414
102415                 context.presets()
102416                     .on('favoritePreset.topToolbar', update)
102417                     .on('recentsChange.topToolbar', update);
102418
102419                 update();
102420
102421                 function update() {
102422
102423                     var tools = [
102424                         sidebarToggle,
102425                         'spacer',
102426                         modes
102427                     //    searchAdd
102428                     ];
102429                     /*
102430                     if (context.presets().getFavorites().length > 0) {
102431                         tools.push(addFavorite);
102432                     }
102433
102434                     if (addRecent.shouldShow()) {
102435                         tools.push(addRecent);
102436                     }*/
102437
102438                     tools.push('spacer');
102439
102440                     if (notesEnabled()) {
102441                         tools = tools.concat([notes, 'spacer']);
102442                     }
102443
102444                     tools = tools.concat([undoRedo, save]);
102445
102446                     var toolbarItems = bar.selectAll('.toolbar-item')
102447                         .data(tools, function(d) {
102448                             return d.id || d;
102449                         });
102450
102451                     toolbarItems.exit()
102452                         .each(function(d) {
102453                             if (d.uninstall) {
102454                                 d.uninstall();
102455                             }
102456                         })
102457                         .remove();
102458
102459                     var itemsEnter = toolbarItems
102460                         .enter()
102461                         .append('div')
102462                         .attr('class', function(d) {
102463                             var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
102464                             if (d.klass) classes += ' ' + d.klass;
102465                             return classes;
102466                         });
102467
102468                     var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
102469
102470                     actionableItems
102471                         .append('div')
102472                         .attr('class', 'item-content')
102473                         .each(function(d) {
102474                             d3_select(this).call(d.render, bar);
102475                         });
102476
102477                     actionableItems
102478                         .append('div')
102479                         .attr('class', 'item-label')
102480                         .text(function(d) {
102481                             return d.label;
102482                         });
102483                 }
102484
102485             }
102486
102487             return topToolbar;
102488         }
102489
102490         // these are module variables so they are preserved through a ui.restart()
102491         var sawVersion = null;
102492         var isNewVersion = false;
102493         var isNewUser = false;
102494
102495
102496         function uiVersion(context) {
102497
102498             var currVersion = context.version;
102499             var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
102500
102501             if (sawVersion === null && matchedVersion !== null) {
102502                 isNewVersion = (context.storage('sawVersion') !== currVersion);
102503                 isNewUser = !context.storage('sawSplash');
102504                 context.storage('sawVersion', currVersion);
102505                 sawVersion = currVersion;
102506             }
102507
102508             return function(selection) {
102509                 selection
102510                     .append('a')
102511                     .attr('target', '_blank')
102512                     .attr('href', 'https://github.com/openstreetmap/iD')
102513                     .text(currVersion);
102514
102515                 // only show new version indicator to users that have used iD before
102516                 if (isNewVersion && !isNewUser) {
102517                     selection
102518                         .append('div')
102519                         .attr('class', 'badge')
102520                         .append('a')
102521                         .attr('target', '_blank')
102522                         .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CHANGELOG.md#whats-new')
102523                         .call(svgIcon('#maki-gift-11'))
102524                         .call(tooltip()
102525                             .title(t('version.whats_new', { version: currVersion }))
102526                             .placement('top')
102527                         );
102528                 }
102529             };
102530         }
102531
102532         function uiZoom(context) {
102533             var zooms = [{
102534                 id: 'zoom-in',
102535                 icon: 'plus',
102536                 title: t('zoom.in'),
102537                 action: context.zoomIn,
102538                 key: '+'
102539             }, {
102540                 id: 'zoom-out',
102541                 icon: 'minus',
102542                 title: t('zoom.out'),
102543                 action: context.zoomOut,
102544                 key: '-'
102545             }];
102546
102547
102548             function zoomIn() {
102549                 event.preventDefault();
102550                 context.zoomIn();
102551             }
102552
102553
102554             function zoomOut() {
102555                 event.preventDefault();
102556                 context.zoomOut();
102557             }
102558
102559
102560             function zoomInFurther() {
102561                 event.preventDefault();
102562                 context.zoomInFurther();
102563             }
102564
102565
102566             function zoomOutFurther() {
102567                 event.preventDefault();
102568                 context.zoomOutFurther();
102569             }
102570
102571
102572             return function(selection) {
102573                 var button = selection.selectAll('button')
102574                     .data(zooms)
102575                     .enter()
102576                     .append('button')
102577                     .attr('class', function(d) { return d.id; })
102578                     .on('click.editor', function(d) {
102579                         if (!d3_select(this).classed('disabled')) {
102580                             d.action();
102581                         }
102582                     })
102583                     .call(tooltip()
102584                         .placement((textDirection === 'rtl') ? 'right' : 'left')
102585                         .html(true)
102586                         .title(function(d) {
102587                             return uiTooltipHtml(d.title, d.key);
102588                         })
102589                     );
102590
102591                 button.each(function(d) {
102592                     d3_select(this)
102593                         .call(svgIcon('#iD-icon-' + d.icon, 'light'));
102594                 });
102595
102596                 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
102597                     context.keybinding().on([key], zoomIn);
102598                     context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
102599                 });
102600
102601                 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
102602                     context.keybinding().on([key], zoomOut);
102603                     context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
102604                 });
102605
102606                 function updateButtonStates() {
102607                     var canZoomIn = context.map().canZoomIn();
102608                     selection.select('button.zoom-in')
102609                         .classed('disabled', !canZoomIn);
102610
102611                     var canZoomOut = context.map().canZoomOut();
102612                     selection.select('button.zoom-out')
102613                         .classed('disabled', !canZoomOut);
102614                 }
102615
102616                 updateButtonStates();
102617
102618                 context.map().on('move.uiZoom', updateButtonStates);
102619             };
102620         }
102621
102622         function uiInit(context) {
102623             var _initCounter = 0;
102624             var _initCallback;
102625             var _needWidth = {};
102626
102627
102628             function render(container) {
102629                 container
102630                     .attr('dir', textDirection);
102631
102632                 // setup fullscreen keybindings (no button shown at this time)
102633                 container
102634                     .call(uiFullScreen(context));
102635
102636                 var map = context.map();
102637                 map.redrawEnable(false);  // don't draw until we've set zoom/lat/long
102638
102639                 container
102640                     .append('svg')
102641                     .attr('id', 'defs')
102642                     .call(svgDefs(context));
102643
102644                 container
102645                     .append('div')
102646                     .attr('id', 'sidebar')
102647                     .call(ui.sidebar);
102648
102649                 var content = container
102650                     .append('div')
102651                     .attr('id', 'content')
102652                     .attr('class', 'active');
102653
102654                 // Top toolbar
102655                 content
102656                     .append('div')
102657                     .attr('id', 'bar')
102658                     .attr('class', 'fillD')
102659                     .call(uiTopToolbar(context));
102660
102661                 content
102662                     .append('div')
102663                     .attr('id', 'map')
102664                     .attr('dir', 'ltr')
102665                     .call(map);
102666
102667
102668                 // Map controls
102669                 var controls = content
102670                     .append('div')
102671                     .attr('class', 'map-controls');
102672
102673                 controls
102674                     .append('div')
102675                     .attr('class', 'map-control zoombuttons')
102676                     .call(uiZoom(context));
102677
102678                 controls
102679                     .append('div')
102680                     .attr('class', 'map-control geolocate-control')
102681                     .call(uiGeolocate(context));
102682
102683                 var background = uiBackground(context);
102684                 controls
102685                     .append('div')
102686                     .attr('class', 'map-control background-control')
102687                     .call(background.renderToggleButton);
102688
102689                 var mapData = uiMapData(context);
102690                 controls
102691                     .append('div')
102692                     .attr('class', 'map-control map-data-control')
102693                     .call(mapData.renderToggleButton);
102694
102695                 var issues = uiIssues(context);
102696                 controls
102697                     .append('div')
102698                     .attr('class', 'map-control map-issues-control')
102699                     .call(issues.renderToggleButton);
102700
102701                 var help = uiHelp(context);
102702                 controls
102703                     .append('div')
102704                     .attr('class', 'map-control help-control')
102705                     .call(help.renderToggleButton);
102706
102707                 content
102708                     .append('div')
102709                     .attr('class', 'spinner')
102710                     .call(uiSpinner(context));
102711
102712                 // Add attribution and footer
102713                 var about = content
102714                     .append('div')
102715                     .attr('id', 'about');
102716
102717                 about
102718                     .append('div')
102719                     .attr('id', 'attrib')
102720                     .attr('dir', 'ltr')
102721                     .call(uiAttribution(context));
102722
102723                 about
102724                     .append('div')
102725                     .attr('class', 'api-status')
102726                     .call(uiStatus(context));
102727
102728
102729                 var footer = about
102730                     .append('div')
102731                     .attr('id', 'footer')
102732                     .attr('class', 'fillD');
102733
102734                 footer
102735                     .append('div')
102736                     .attr('id', 'flash-wrap')
102737                     .attr('class', 'footer-hide');
102738
102739                 var footerWrap = footer
102740                     .append('div')
102741                     .attr('id', 'footer-wrap')
102742                     .attr('class', 'footer-show');
102743
102744                 footerWrap
102745                     .append('div')
102746                     .attr('id', 'scale-block')
102747                     .call(uiScale(context));
102748
102749                 var aboutList = footerWrap
102750                     .append('div')
102751                     .attr('id', 'info-block')
102752                     .append('ul')
102753                     .attr('id', 'about-list');
102754
102755                 if (!context.embed()) {
102756                     aboutList
102757                         .call(uiAccount(context));
102758                 }
102759
102760                 aboutList
102761                     .append('li')
102762                     .attr('class', 'version')
102763                     .call(uiVersion(context));
102764
102765                 var issueLinks = aboutList
102766                     .append('li');
102767
102768                 issueLinks
102769                     .append('a')
102770                     .attr('target', '_blank')
102771                     .attr('href', 'https://github.com/openstreetmap/iD/issues')
102772                     .call(svgIcon('#iD-icon-bug', 'light'))
102773                     .call(tooltip().title(t('report_a_bug')).placement('top'));
102774
102775                 issueLinks
102776                     .append('a')
102777                     .attr('target', '_blank')
102778                     .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating')
102779                     .call(svgIcon('#iD-icon-translate', 'light'))
102780                     .call(tooltip().title(t('help_translate')).placement('top'));
102781
102782                 aboutList
102783                     .append('li')
102784                     .attr('class', 'feature-warning')
102785                     .attr('tabindex', -1)
102786                     .call(uiFeatureInfo(context));
102787
102788                 aboutList
102789                     .append('li')
102790                     .attr('class', 'issues-info')
102791                     .attr('tabindex', -1)
102792                     .call(uiIssuesInfo(context));
102793
102794                 aboutList
102795                     .append('li')
102796                     .attr('class', 'user-list')
102797                     .attr('tabindex', -1)
102798                     .call(uiContributors(context));
102799
102800
102801                 // Setup map dimensions and move map to initial center/zoom.
102802                 // This should happen after #content and toolbars exist.
102803                 ui.onResize();
102804                 map.redrawEnable(true);
102805
102806                 ui.hash = behaviorHash(context);
102807                 ui.hash();
102808                 if (!ui.hash.hadHash) {
102809                     map.centerZoom([0, 0], 2);
102810                 }
102811
102812
102813                 var overMap = content
102814                     .append('div')
102815                     .attr('class', 'over-map');
102816
102817                 // Add panes
102818                 // This should happen after map is initialized, as some require surface()
102819                 var panes = overMap
102820                     .append('div')
102821                     .attr('class', 'map-panes');
102822
102823                 panes
102824                     .call(background.renderPane)
102825                     .call(mapData.renderPane)
102826                     .call(issues.renderPane)
102827                     .call(help.renderPane);
102828
102829                 ui.info = uiInfo(context);
102830
102831                 // Add absolutely-positioned elements that sit on top of the map
102832                 // This should happen after the map is ready (center/zoom)
102833                 overMap
102834                     .call(uiMapInMap(context))
102835                     .call(ui.info)
102836                     .call(uiNotice(context));
102837
102838
102839                 overMap
102840                     .append('div')
102841                     .attr('id', 'photoviewer')
102842                     .classed('al', true)       // 'al'=left,  'ar'=right
102843                     .classed('hide', true)
102844                     .call(ui.photoviewer);
102845
102846
102847                 // Bind events
102848                 window.onbeforeunload = function() {
102849                     return context.save();
102850                 };
102851                 window.onunload = function() {
102852                     context.history().unlock();
102853                 };
102854
102855                 d3_select(window)
102856                     .on('gesturestart.editor', eventCancel)
102857                     .on('gesturechange.editor', eventCancel)
102858                     .on('gestureend.editor', eventCancel)
102859                     .on('resize.editor', ui.onResize);
102860
102861
102862                 var panPixels = 80;
102863                 context.keybinding()
102864                     .on('⌫', function() { event.preventDefault(); })
102865                     .on([t('sidebar.key'), '`', '²', '@'], ui.sidebar.toggle)   // #5663, #6864 - common QWERTY, AZERTY
102866                     .on('←', pan([panPixels, 0]))
102867                     .on('↑', pan([0, panPixels]))
102868                     .on('→', pan([-panPixels, 0]))
102869                     .on('↓', pan([0, -panPixels]))
102870                     .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
102871                     .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
102872                     .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
102873                     .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
102874
102875                 context.enter(modeBrowse(context));
102876
102877                 if (!_initCounter++) {
102878                     if (!ui.hash.startWalkthrough) {
102879                         context.container()
102880                             .call(uiSplash(context))
102881                             .call(uiRestore(context));
102882                     }
102883
102884                     context.container()
102885                         .call(uiShortcuts(context));
102886                 }
102887
102888                 var osm = context.connection();
102889                 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
102890
102891                 if (osm && auth) {
102892                     osm
102893                         .on('authLoading.ui', function() {
102894                             context.container()
102895                                 .call(auth);
102896                         })
102897                         .on('authDone.ui', function() {
102898                             auth.close();
102899                         });
102900                 }
102901
102902                 _initCounter++;
102903
102904                 if (ui.hash.startWalkthrough) {
102905                     ui.hash.startWalkthrough = false;
102906                     context.container().call(uiIntro(context));
102907                 }
102908
102909
102910                 function pan(d) {
102911                     return function() {
102912                         if (d3_select('.combobox').size()) return;
102913                         event.preventDefault();
102914                         context.pan(d, 100);
102915                     };
102916                 }
102917
102918                 function eventCancel() {
102919                     event.preventDefault();
102920                 }
102921             }
102922
102923
102924             function ui(node, callback) {
102925                 _initCallback = callback;
102926                 var container = d3_select(node);
102927                 context.container(container);
102928                 context.loadLocale(function(err) {
102929                     if (!err) {
102930                         render(container);
102931                     }
102932                     if (callback) {
102933                         callback(err);
102934                     }
102935                 });
102936             }
102937
102938
102939             ui.restart = function(arg) {
102940                 context.keybinding().clear();
102941                 context.locale(arg);
102942                 context.loadLocale(function(err) {
102943                     if (!err) {
102944                         context.container().selectAll('*').remove();
102945                         render(context.container());
102946                         if (_initCallback) _initCallback();
102947                     }
102948                 });
102949             };
102950
102951             ui.sidebar = uiSidebar(context);
102952
102953             ui.photoviewer = uiPhotoviewer(context);
102954
102955             ui.onResize = function(withPan) {
102956                 var map = context.map();
102957
102958                 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
102959                 // This will call `getBoundingClientRect` and trigger reflow,
102960                 //  but the values will be cached for later use.
102961                 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
102962                 utilGetDimensions(d3_select('#sidebar'), true);
102963
102964                 if (withPan !== undefined) {
102965                     map.redrawEnable(false);
102966                     map.pan(withPan);
102967                     map.redrawEnable(true);
102968                 }
102969                 map.dimensions(mapDimensions);
102970
102971                 ui.photoviewer.onMapResize();
102972
102973                 // check if header or footer have overflowed
102974                 ui.checkOverflow('#bar');
102975                 ui.checkOverflow('#footer');
102976
102977                 // Use outdated code so it works on Explorer
102978                 var resizeWindowEvent = document.createEvent('Event');
102979
102980                 resizeWindowEvent.initEvent('resizeWindow', true, true);
102981
102982                 document.dispatchEvent(resizeWindowEvent);
102983             };
102984
102985
102986             // Call checkOverflow when resizing or whenever the contents change.
102987             ui.checkOverflow = function(selector, reset) {
102988                 if (reset) {
102989                     delete _needWidth[selector];
102990                 }
102991
102992                 var element = d3_select(selector);
102993                 var scrollWidth = element.property('scrollWidth');
102994                 var clientWidth = element.property('clientWidth');
102995                 var needed = _needWidth[selector] || scrollWidth;
102996
102997                 if (scrollWidth > clientWidth) {    // overflow happening
102998                     element.classed('narrow', true);
102999                     if (!_needWidth[selector]) {
103000                         _needWidth[selector] = scrollWidth;
103001                     }
103002
103003                 } else if (scrollWidth >= needed) {
103004                     element.classed('narrow', false);
103005                 }
103006             };
103007
103008             ui.togglePanes = function(showPane) {
103009                 var shownPanes = d3_selectAll('.map-pane.shown');
103010
103011                 var side = textDirection === 'ltr' ? 'right' : 'left';
103012
103013                 shownPanes
103014                     .classed('shown', false);
103015
103016                 d3_selectAll('.map-control button')
103017                     .classed('active', false);
103018
103019                 if (showPane) {
103020                     shownPanes
103021                         .style('display', 'none')
103022                         .style(side, '-500px');
103023
103024                     d3_selectAll('.' + showPane.attr('pane') + '-control button')
103025                         .classed('active', true);
103026
103027                     showPane
103028                         .classed('shown', true)
103029                         .style('display', 'block');
103030                     if (shownPanes.empty()) {
103031                         showPane
103032                             .style('display', 'block')
103033                             .style(side, '-500px')
103034                             .transition()
103035                             .duration(200)
103036                             .style(side, '0px');
103037                     } else {
103038                         showPane
103039                             .style(side, '0px');
103040                     }
103041                 } else {
103042                     shownPanes
103043                         .style('display', 'block')
103044                         .style(side, '0px')
103045                         .transition()
103046                         .duration(200)
103047                         .style(side, '-500px')
103048                         .on('end', function() {
103049                             d3_select(this).style('display', 'none');
103050                         });
103051                 }
103052             };
103053
103054             return ui;
103055         }
103056
103057         function coreContext() {
103058             var dispatch$1 = dispatch('enter', 'exit', 'change');
103059             var context = utilRebind({}, dispatch$1, 'on');
103060             var _deferred = new Set();
103061
103062             context.version = '2.16.0';
103063
103064             // create a special translation that contains the keys in place of the strings
103065             var tkeys = JSON.parse(JSON.stringify(en));  // clone deep
103066             var parents = [];
103067
103068             function traverser(v, k, obj) {
103069                 parents.push(k);
103070                 if (typeof v === 'object') {
103071                     forOwn(v, traverser);
103072                 } else if (typeof v === 'string') {
103073                     obj[k] = parents.join('.');
103074                 }
103075                 parents.pop();
103076             }
103077
103078             function forOwn(obj, fn) {
103079                 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
103080             }
103081
103082             forOwn(tkeys, traverser);
103083             addTranslation('_tkeys_', tkeys);
103084
103085             addTranslation('en', en);
103086             setLocale('en');
103087
103088
103089             // https://github.com/openstreetmap/iD/issues/772
103090             // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
103091             var storage;
103092             try { storage = localStorage; } catch (e) {}  // eslint-disable-line no-empty
103093             storage = storage || (function() {
103094                 var s = {};
103095                 return {
103096                     getItem: function(k) { return s[k]; },
103097                     setItem: function(k, v) { s[k] = v; },
103098                     removeItem: function(k) { delete s[k]; }
103099                 };
103100             })();
103101
103102             context.storage = function(k, v) {
103103                 try {
103104                     if (arguments.length === 1) return storage.getItem(k);
103105                     else if (v === null) storage.removeItem(k);
103106                     else storage.setItem(k, v);
103107                 } catch (e) {
103108                     // localstorage quota exceeded
103109                     /* eslint-disable no-console */
103110                     if (typeof console !== 'undefined') console.error('localStorage quota exceeded');
103111                     /* eslint-enable no-console */
103112                 }
103113             };
103114
103115
103116             /* User interface and keybinding */
103117             var ui;
103118             context.ui = function() { return ui; };
103119
103120             var keybinding = utilKeybinding('context');
103121             context.keybinding = function() { return keybinding; };
103122             d3_select(document).call(keybinding);
103123
103124
103125             /* Straight accessors. Avoid using these if you can. */
103126             var connection, history, validator;
103127             context.connection = function() { return connection; };
103128             context.history = function() { return history; };
103129             context.validator = function() { return validator; };
103130
103131             /* Connection */
103132             context.preauth = function(options) {
103133                 if (connection) {
103134                     connection.switch(options);
103135                 }
103136                 return context;
103137             };
103138
103139
103140             function afterLoad(cid, callback) {
103141                 return function(err, result) {
103142                     if (err) {
103143                         // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
103144                         if (err.status === 400 || err.status === 401 || err.status === 403) {
103145                             if (connection) {
103146                                 connection.logout();
103147                             }
103148                         }
103149                         if (typeof callback === 'function') {
103150                             callback(err);
103151                         }
103152                         return;
103153
103154                     } else if (connection && connection.getConnectionId() !== cid) {
103155                         if (typeof callback === 'function') {
103156                             callback({ message: 'Connection Switched', status: -1 });
103157                         }
103158                         return;
103159
103160                     } else {
103161                         history.merge(result.data, result.extent);
103162                         if (typeof callback === 'function') {
103163                             callback(err, result);
103164                         }
103165                         return;
103166                     }
103167                 };
103168             }
103169
103170
103171             context.loadTiles = function(projection, callback) {
103172                 var handle = window.requestIdleCallback(function() {
103173                     _deferred.delete(handle);
103174                     if (connection && context.editable()) {
103175                         var cid = connection.getConnectionId();
103176                         connection.loadTiles(projection, afterLoad(cid, callback));
103177                     }
103178                 });
103179                 _deferred.add(handle);
103180             };
103181
103182             context.loadTileAtLoc = function(loc, callback) {
103183                 var handle = window.requestIdleCallback(function() {
103184                     _deferred.delete(handle);
103185                     if (connection && context.editable()) {
103186                         var cid = connection.getConnectionId();
103187                         connection.loadTileAtLoc(loc, afterLoad(cid, callback));
103188                     }
103189                 });
103190                 _deferred.add(handle);
103191             };
103192
103193             context.loadEntity = function(entityID, callback) {
103194                 if (connection) {
103195                     var cid = connection.getConnectionId();
103196                     connection.loadEntity(entityID, afterLoad(cid, callback));
103197                 }
103198             };
103199
103200             context.zoomToEntity = function(entityID, zoomTo) {
103201                 if (zoomTo !== false) {
103202                     this.loadEntity(entityID, function(err, result) {
103203                         if (err) return;
103204                         var entity = result.data.find(function(e) { return e.id === entityID; });
103205                         if (entity) {
103206                             map.zoomTo(entity);
103207                         }
103208                     });
103209                 }
103210
103211                 map.on('drawn.zoomToEntity', function() {
103212                     if (!context.hasEntity(entityID)) return;
103213                     map.on('drawn.zoomToEntity', null);
103214                     context.on('enter.zoomToEntity', null);
103215                     context.enter(modeSelect(context, [entityID]));
103216                 });
103217
103218                 context.on('enter.zoomToEntity', function() {
103219                     if (mode.id !== 'browse') {
103220                         map.on('drawn.zoomToEntity', null);
103221                         context.on('enter.zoomToEntity', null);
103222                     }
103223                 });
103224             };
103225
103226             var minEditableZoom = 16;
103227             context.minEditableZoom = function(val) {
103228                 if (!arguments.length) return minEditableZoom;
103229                 minEditableZoom = val;
103230                 if (connection) {
103231                     connection.tileZoom(val);
103232                 }
103233                 return context;
103234             };
103235
103236
103237             /* History */
103238             var inIntro = false;
103239             context.inIntro = function(val) {
103240                 if (!arguments.length) return inIntro;
103241                 inIntro = val;
103242                 return context;
103243             };
103244
103245             context.save = function() {
103246                 // no history save, no message onbeforeunload
103247                 if (inIntro || d3_select('.modal').size()) return;
103248
103249                 var canSave;
103250                 if (mode && mode.id === 'save') {
103251                     canSave = false;
103252
103253                     // Attempt to prevent user from creating duplicate changes - see #5200
103254                     if (services$1.osm && services$1.osm.isChangesetInflight()) {
103255                         history.clearSaved();
103256                         return;
103257                     }
103258
103259                 } else {
103260                     canSave = context.selectedIDs().every(function(id) {
103261                         var entity = context.hasEntity(id);
103262                         return entity && !entity.isDegenerate();
103263                     });
103264                 }
103265
103266                 if (canSave) {
103267                     history.save();
103268                 }
103269                 if (history.hasChanges()) {
103270                     return t('save.unsaved_changes');
103271                 }
103272             };
103273
103274
103275             /* Graph */
103276             context.hasEntity = function(id) {
103277                 return history.graph().hasEntity(id);
103278             };
103279             context.entity = function(id) {
103280                 return history.graph().entity(id);
103281             };
103282             context.childNodes = function(way) {
103283                 return history.graph().childNodes(way);
103284             };
103285             context.geometry = function(id) {
103286                 return context.entity(id).geometry(history.graph());
103287             };
103288
103289
103290             /* Modes */
103291             var mode;
103292             context.mode = function() {
103293                 return mode;
103294             };
103295             context.enter = function(newMode) {
103296                 if (mode) {
103297                     mode.exit();
103298                     dispatch$1.call('exit', this, mode);
103299                 }
103300
103301                 mode = newMode;
103302                 mode.enter();
103303                 dispatch$1.call('enter', this, mode);
103304             };
103305
103306             context.selectedIDs = function() {
103307                 if (mode && mode.selectedIDs) {
103308                     return mode.selectedIDs();
103309                 } else {
103310                     return [];
103311                 }
103312             };
103313
103314             context.activeID = function() {
103315                 return mode && mode.activeID && mode.activeID();
103316             };
103317
103318             var _selectedNoteID;
103319             context.selectedNoteID = function(noteID) {
103320                 if (!arguments.length) return _selectedNoteID;
103321                 _selectedNoteID = noteID;
103322                 return context;
103323             };
103324
103325             var _selectedErrorID;
103326             context.selectedErrorID = function(errorID) {
103327                 if (!arguments.length) return _selectedErrorID;
103328                 _selectedErrorID = errorID;
103329                 return context;
103330             };
103331
103332
103333             /* Behaviors */
103334             context.install = function(behavior) {
103335                 context.surface().call(behavior);
103336             };
103337             context.uninstall = function(behavior) {
103338                 context.surface().call(behavior.off);
103339             };
103340
103341
103342             /* Copy/Paste */
103343             var copyIDs = [], copyGraph;
103344             context.copyGraph = function() { return copyGraph; };
103345             context.copyIDs = function(val) {
103346                 if (!arguments.length) return copyIDs;
103347                 copyIDs = val;
103348                 copyGraph = history.graph();
103349                 return context;
103350             };
103351
103352
103353             /* Background */
103354             var background;
103355             context.background = function() { return background; };
103356
103357
103358             /* Features */
103359             var features;
103360             context.features = function() { return features; };
103361             context.hasHiddenConnections = function(id) {
103362                 var graph = history.graph();
103363                 var entity = graph.entity(id);
103364                 return features.hasHiddenConnections(entity, graph);
103365             };
103366
103367
103368             /* Photos */
103369             var photos;
103370             context.photos = function() { return photos; };
103371
103372
103373             /* Presets */
103374             var presets;
103375             context.presets = function() { return presets; };
103376
103377
103378             /* Map */
103379             var map;
103380             context.map = function() { return map; };
103381             context.layers = function() { return map.layers; };
103382             context.surface = function() { return map.surface; };
103383             context.editable = function() { return map.editable(); };
103384             context.surfaceRect = function() {
103385                 return map.surface.node().getBoundingClientRect();
103386             };
103387
103388
103389             /* Debug */
103390             var debugFlags = {
103391                 tile: false,        // tile boundaries
103392                 collision: false,   // label collision bounding boxes
103393                 imagery: false,     // imagery bounding polygons
103394                 community: false,   // community bounding polygons
103395                 imperial: false,    // imperial (not metric) bounding polygons
103396                 driveLeft: false,   // driveLeft bounding polygons
103397                 target: false,      // touch targets
103398                 downloaded: false   // downloaded data from osm
103399             };
103400             context.debugFlags = function() {
103401                 return debugFlags;
103402             };
103403             context.setDebug = function(flag, val) {
103404                 if (arguments.length === 1) val = true;
103405                 debugFlags[flag] = val;
103406                 dispatch$1.call('change');
103407                 return context;
103408             };
103409             context.getDebug = function(flag) {
103410                 return flag && debugFlags[flag];
103411             };
103412
103413
103414             /* Container */
103415             var container = d3_select(document.body);
103416             context.container = function(val) {
103417                 if (!arguments.length) return container;
103418                 container = val;
103419                 container.classed('id-container', true);
103420                 return context;
103421             };
103422             var embed;
103423             context.embed = function(val) {
103424                 if (!arguments.length) return embed;
103425                 embed = val;
103426                 return context;
103427             };
103428
103429
103430             /* Assets */
103431             var assetPath = '';
103432             context.assetPath = function(val) {
103433                 if (!arguments.length) return assetPath;
103434                 assetPath = val;
103435                 return context;
103436             };
103437
103438             var assetMap = {};
103439             context.assetMap = function(val) {
103440                 if (!arguments.length) return assetMap;
103441                 assetMap = val;
103442                 return context;
103443             };
103444
103445             context.asset = function(val) {
103446                 var filename = assetPath + val;
103447                 return assetMap[filename] || filename;
103448             };
103449
103450             context.imagePath = function(val) {
103451                 return context.asset('img/' + val);
103452             };
103453
103454
103455             /* locales */
103456             // `locale` variable contains a "requested locale".
103457             // It won't become the `currentLocale` until after loadLocale() is called.
103458             var locale, localePath;
103459
103460             context.locale = function(loc, path) {
103461                 if (!arguments.length) return currentLocale;
103462                 locale = loc;
103463                 localePath = path;
103464                 return context;
103465             };
103466
103467             context.loadLocale = function(callback) {
103468                 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
103469                     localePath = localePath || context.asset('locales/' + locale + '.json');
103470                     d3_json(localePath)
103471                         .then(function(result) {
103472                             addTranslation(locale, result[locale]);
103473                             setLocale(locale);
103474                             utilDetect(true);
103475                             if (callback) callback();
103476                         })
103477                         .catch(function(err) {
103478                             if (callback) callback(err.message);
103479                         });
103480                 } else {
103481                     if (locale) {
103482                         setLocale(locale);
103483                         utilDetect(true);
103484                     }
103485                     if (callback) {
103486                         callback();
103487                     }
103488                 }
103489             };
103490
103491
103492             /* reset (aka flush) */
103493             context.reset = context.flush = function() {
103494                 context.debouncedSave.cancel();
103495
103496                 Array.from(_deferred).forEach(function(handle) {
103497                     window.cancelIdleCallback(handle);
103498                     _deferred.delete(handle);
103499                 });
103500
103501                 Object.values(services$1).forEach(function(service) {
103502                     if (service && typeof service.reset === 'function') {
103503                         service.reset(context);
103504                     }
103505                 });
103506
103507                 validator.reset();
103508                 features.reset();
103509                 history.reset();
103510
103511                 return context;
103512             };
103513
103514
103515             /* Init */
103516
103517             context.projection = geoRawMercator();
103518             context.curtainProjection = geoRawMercator();
103519
103520             locale = utilDetect().locale;
103521             if (locale && !dataLocales.hasOwnProperty(locale)) {
103522                 locale = locale.split('-')[0];
103523             }
103524
103525             history = coreHistory(context);
103526             validator = coreValidator(context);
103527
103528             context.graph = history.graph;
103529             context.changes = history.changes;
103530             context.intersects = history.intersects;
103531             context.pauseChangeDispatch = history.pauseChangeDispatch;
103532             context.resumeChangeDispatch = history.resumeChangeDispatch;
103533
103534             // Debounce save, since it's a synchronous localStorage write,
103535             // and history changes can happen frequently (e.g. when dragging).
103536             context.debouncedSave = debounce(context.save, 350);
103537             function withDebouncedSave(fn) {
103538                 return function() {
103539                     var result = fn.apply(history, arguments);
103540                     context.debouncedSave();
103541                     return result;
103542                 };
103543             }
103544
103545             context.perform = withDebouncedSave(history.perform);
103546             context.replace = withDebouncedSave(history.replace);
103547             context.pop = withDebouncedSave(history.pop);
103548             context.overwrite = withDebouncedSave(history.overwrite);
103549             context.undo = withDebouncedSave(history.undo);
103550             context.redo = withDebouncedSave(history.redo);
103551
103552             ui = uiInit(context);
103553
103554             connection = services$1.osm;
103555             background = rendererBackground(context);
103556             features = rendererFeatures(context);
103557             photos = rendererPhotos(context);
103558             presets = presetIndex(context);
103559
103560             if (services$1.maprules && utilStringQs(window.location.hash).maprules) {
103561                 var maprules = utilStringQs(window.location.hash).maprules;
103562                 d3_json(maprules)
103563                     .then(function(mapcss) {
103564                         services$1.maprules.init();
103565                         mapcss.forEach(function(mapcssSelector) {
103566                             return services$1.maprules.addRule(mapcssSelector);
103567                         });
103568                     })
103569                     .catch(function() {
103570                         /* ignore */
103571                     });
103572             }
103573
103574             map = rendererMap(context);
103575             context.mouse = map.mouse;
103576             context.extent = map.extent;
103577             context.pan = map.pan;
103578             context.zoomIn = map.zoomIn;
103579             context.zoomOut = map.zoomOut;
103580             context.zoomInFurther = map.zoomInFurther;
103581             context.zoomOutFurther = map.zoomOutFurther;
103582             context.redrawEnable = map.redrawEnable;
103583
103584             Object.values(services$1).forEach(function(service) {
103585                 if (service && typeof service.init === 'function') {
103586                     service.init(context);
103587                 }
103588             });
103589
103590             validator.init();
103591             background.init();
103592             features.init();
103593             photos.init();
103594
103595             var presetsParameter = utilStringQs(window.location.hash).presets;
103596             if (presetsParameter && presetsParameter.indexOf('://') !== -1) {
103597                 // assume URL of external presets file
103598
103599                 presets.fromExternal(external, function(externalPresets) {
103600                     context.presets = function() { return externalPresets; }; // default + external presets...
103601                     osmSetAreaKeys(presets.areaKeys());
103602                     osmSetPointTags(presets.pointTags());
103603                     osmSetVertexTags(presets.vertexTags());
103604                 });
103605             } else {
103606                 var addablePresetIDs;
103607                 if (presetsParameter) {
103608                     // assume list of allowed preset IDs
103609                     addablePresetIDs = presetsParameter.split(',');
103610                 }
103611                 presets.init(addablePresetIDs);
103612                 osmSetAreaKeys(presets.areaKeys());
103613                 osmSetPointTags(presets.pointTags());
103614                 osmSetVertexTags(presets.vertexTags());
103615             }
103616
103617             return context;
103618         }
103619
103620         function uiSourceSwitch(context) {
103621             var keys;
103622
103623
103624             function click() {
103625                 event.preventDefault();
103626
103627                 var osm = context.connection();
103628                 if (!osm) return;
103629
103630                 if (context.inIntro()) return;
103631
103632                 if (context.history().hasChanges() &&
103633                     !window.confirm(t('source_switch.lose_changes'))) return;
103634
103635                 var isLive = d3_select(this)
103636                     .classed('live');
103637
103638                 isLive = !isLive;
103639                 context.enter(modeBrowse(context));
103640                 context.history().clearSaved();          // remove saved history
103641                 context.flush();                         // remove stored data
103642
103643                 d3_select(this)
103644                     .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
103645                     .classed('live', isLive)
103646                     .classed('chip', isLive);
103647
103648                 osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
103649             }
103650
103651             var sourceSwitch = function(selection) {
103652                 selection
103653                     .append('a')
103654                     .attr('href', '#')
103655                     .text(t('source_switch.live'))
103656                     .attr('class', 'live chip')
103657                     .on('click', click);
103658             };
103659
103660
103661             sourceSwitch.keys = function(_) {
103662                 if (!arguments.length) return keys;
103663                 keys = _;
103664                 return sourceSwitch;
103665             };
103666
103667
103668             return sourceSwitch;
103669         }
103670
103671         var Connection = services$1.osm;
103672
103673         var debug = false;
103674
103675         var iD = /*#__PURE__*/Object.freeze({
103676                 __proto__: null,
103677                 Connection: Connection,
103678                 debug: debug,
103679                 d3: index$3,
103680                 Context: coreContext,
103681                 setAreaKeys: osmSetAreaKeys,
103682                 get areaKeys () { return osmAreaKeys; },
103683                 Difference: coreDifference,
103684                 Graph: coreGraph,
103685                 History: coreHistory,
103686                 Tree: coreTree,
103687                 geoCross: geoVecCross,
103688                 geoInterp: geoVecInterp,
103689                 geoRoundCoordinates: geoVecFloor,
103690                 geoEuclideanDistance: geoVecLength,
103691                 Entity: osmEntity,
103692                 Node: osmNode,
103693                 Relation: osmRelation,
103694                 Way: osmWay,
103695                 BackgroundSource: rendererBackgroundSource,
103696                 Background: rendererBackground,
103697                 Features: rendererFeatures,
103698                 Map: rendererMap,
103699                 TileLayer: rendererTileLayer,
103700                 Detect: utilDetect,
103701                 uiPreset: uiPresetEditor,
103702                 rendererBackgroundSource: rendererBackgroundSource,
103703                 rendererBackground: rendererBackground,
103704                 rendererFeatures: rendererFeatures,
103705                 rendererMap: rendererMap,
103706                 rendererPhotos: rendererPhotos,
103707                 rendererTileLayer: rendererTileLayer,
103708                 actionAddEntity: actionAddEntity,
103709                 actionAddMember: actionAddMember,
103710                 actionAddMidpoint: actionAddMidpoint,
103711                 actionAddVertex: actionAddVertex,
103712                 actionChangeMember: actionChangeMember,
103713                 actionChangePreset: actionChangePreset,
103714                 actionChangeTags: actionChangeTags,
103715                 actionCircularize: actionCircularize,
103716                 actionConnect: actionConnect,
103717                 actionCopyEntities: actionCopyEntities,
103718                 actionDeleteMember: actionDeleteMember,
103719                 actionDeleteMultiple: actionDeleteMultiple,
103720                 actionDeleteNode: actionDeleteNode,
103721                 actionDeleteRelation: actionDeleteRelation,
103722                 actionDeleteWay: actionDeleteWay,
103723                 actionDiscardTags: actionDiscardTags,
103724                 actionDisconnect: actionDisconnect,
103725                 actionExtract: actionExtract,
103726                 actionJoin: actionJoin,
103727                 actionMerge: actionMerge,
103728                 actionMergeNodes: actionMergeNodes,
103729                 actionMergePolygon: actionMergePolygon,
103730                 actionMergeRemoteChanges: actionMergeRemoteChanges,
103731                 actionMove: actionMove,
103732                 actionMoveMember: actionMoveMember,
103733                 actionMoveNode: actionMoveNode,
103734                 actionNoop: actionNoop,
103735                 actionOrthogonalize: actionOrthogonalize,
103736                 actionRestrictTurn: actionRestrictTurn,
103737                 actionReverse: actionReverse,
103738                 actionRevert: actionRevert,
103739                 actionRotate: actionRotate,
103740                 actionSplit: actionSplit,
103741                 actionStraightenNodes: actionStraightenNodes,
103742                 actionStraightenWay: actionStraightenWay,
103743                 actionUnrestrictTurn: actionUnrestrictTurn,
103744                 actionReflect: actionReflect,
103745                 actionUpgradeTags: actionUpgradeTags,
103746                 coreContext: coreContext,
103747                 coreDifference: coreDifference,
103748                 coreGraph: coreGraph,
103749                 coreHistory: coreHistory,
103750                 coreTree: coreTree,
103751                 coreValidator: coreValidator,
103752                 data: data,
103753                 dataWikipedia: wikipedia$2,
103754                 dataAddressFormats: dataAddressFormats,
103755                 dataDeprecated: dataDeprecated,
103756                 dataDiscarded: dataDiscarded,
103757                 dataLanguages: dataLanguages,
103758                 dataLocales: dataLocales,
103759                 dataPhoneFormats: dataPhoneFormats,
103760                 dataShortcuts: dataShortcuts,
103761                 dataTerritoryLanguages: dataTerritoryLanguages,
103762                 dataImperial: dataImperial,
103763                 dataMPH: dataMPH,
103764                 dataDriveLeft: dataDriveLeft,
103765                 dataEn: en,
103766                 geoExtent: geoExtent,
103767                 geoLatToMeters: geoLatToMeters,
103768                 geoLonToMeters: geoLonToMeters,
103769                 geoMetersToLat: geoMetersToLat,
103770                 geoMetersToLon: geoMetersToLon,
103771                 geoMetersToOffset: geoMetersToOffset,
103772                 geoOffsetToMeters: geoOffsetToMeters,
103773                 geoScaleToZoom: geoScaleToZoom,
103774                 geoSphericalClosestNode: geoSphericalClosestNode,
103775                 geoSphericalDistance: geoSphericalDistance,
103776                 geoZoomToScale: geoZoomToScale,
103777                 geoAngle: geoAngle,
103778                 geoChooseEdge: geoChooseEdge,
103779                 geoEdgeEqual: geoEdgeEqual,
103780                 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
103781                 geoHasLineIntersections: geoHasLineIntersections,
103782                 geoHasSelfIntersections: geoHasSelfIntersections,
103783                 geoRotate: geoRotate,
103784                 geoLineIntersection: geoLineIntersection,
103785                 geoPathHasIntersections: geoPathHasIntersections,
103786                 geoPathIntersections: geoPathIntersections,
103787                 geoPathLength: geoPathLength,
103788                 geoPointInPolygon: geoPointInPolygon,
103789                 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
103790                 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
103791                 geoViewportEdge: geoViewportEdge,
103792                 geoRawMercator: geoRawMercator,
103793                 geoVecAdd: geoVecAdd,
103794                 geoVecAngle: geoVecAngle,
103795                 geoVecCross: geoVecCross,
103796                 geoVecDot: geoVecDot,
103797                 geoVecEqual: geoVecEqual,
103798                 geoVecFloor: geoVecFloor,
103799                 geoVecInterp: geoVecInterp,
103800                 geoVecLength: geoVecLength,
103801                 geoVecNormalize: geoVecNormalize,
103802                 geoVecNormalizedDot: geoVecNormalizedDot,
103803                 geoVecProject: geoVecProject,
103804                 geoVecSubtract: geoVecSubtract,
103805                 geoVecScale: geoVecScale,
103806                 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
103807                 geoOrthoCalcScore: geoOrthoCalcScore,
103808                 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
103809                 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
103810                 modeAddArea: modeAddArea,
103811                 modeAddLine: modeAddLine,
103812                 modeAddPoint: modeAddPoint,
103813                 modeAddNote: modeAddNote,
103814                 modeBrowse: modeBrowse,
103815                 modeDragNode: modeDragNode,
103816                 modeDragNote: modeDragNote,
103817                 modeDrawArea: modeDrawArea,
103818                 modeDrawLine: modeDrawLine,
103819                 modeMove: modeMove,
103820                 modeRotate: modeRotate,
103821                 modeSave: modeSave,
103822                 modeSelect: modeSelect,
103823                 modeSelectData: modeSelectData,
103824                 modeSelectError: modeSelectError,
103825                 modeSelectNote: modeSelectNote,
103826                 operationCircularize: operationCircularize,
103827                 operationContinue: operationContinue,
103828                 operationDelete: operationDelete,
103829                 operationDisconnect: operationDisconnect,
103830                 operationDowngrade: operationDowngrade,
103831                 operationExtract: operationExtract,
103832                 operationMerge: operationMerge,
103833                 operationMove: operationMove,
103834                 operationOrthogonalize: operationOrthogonalize,
103835                 operationReflectShort: operationReflectShort,
103836                 operationReflectLong: operationReflectLong,
103837                 operationReverse: operationReverse,
103838                 operationRotate: operationRotate,
103839                 operationSplit: operationSplit,
103840                 operationStraighten: operationStraighten,
103841                 osmChangeset: osmChangeset,
103842                 osmEntity: osmEntity,
103843                 osmNode: osmNode,
103844                 osmNote: osmNote,
103845                 osmRelation: osmRelation,
103846                 osmWay: osmWay,
103847                 qaError: qaError,
103848                 osmIntersection: osmIntersection,
103849                 osmTurn: osmTurn,
103850                 osmInferRestriction: osmInferRestriction,
103851                 osmLanes: osmLanes,
103852                 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
103853                 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
103854                 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
103855                 osmJoinWays: osmJoinWays,
103856                 get osmAreaKeys () { return osmAreaKeys; },
103857                 osmSetAreaKeys: osmSetAreaKeys,
103858                 get osmPointTags () { return osmPointTags; },
103859                 osmSetPointTags: osmSetPointTags,
103860                 get osmVertexTags () { return osmVertexTags; },
103861                 osmSetVertexTags: osmSetVertexTags,
103862                 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
103863                 osmOneWayTags: osmOneWayTags,
103864                 osmPavedTags: osmPavedTags,
103865                 osmIsInterestingTag: osmIsInterestingTag,
103866                 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
103867                 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
103868                 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
103869                 presetCategory: presetCategory,
103870                 presetCollection: presetCollection,
103871                 presetField: presetField,
103872                 presetPreset: presetPreset,
103873                 presetIndex: presetIndex,
103874                 behaviorAddWay: behaviorAddWay,
103875                 behaviorBreathe: behaviorBreathe,
103876                 behaviorCopy: behaviorCopy,
103877                 behaviorDrag: behaviorDrag,
103878                 behaviorDrawWay: behaviorDrawWay,
103879                 behaviorDraw: behaviorDraw,
103880                 behaviorEdit: behaviorEdit,
103881                 behaviorHash: behaviorHash,
103882                 behaviorHover: behaviorHover,
103883                 behaviorLasso: behaviorLasso,
103884                 behaviorOperation: behaviorOperation,
103885                 behaviorPaste: behaviorPaste,
103886                 behaviorSelect: behaviorSelect,
103887                 behaviorTail: behaviorTail,
103888                 services: services$1,
103889                 serviceKeepRight: serviceKeepRight,
103890                 serviceImproveOSM: serviceImproveOSM,
103891                 serviceMapillary: serviceMapillary,
103892                 serviceMapRules: serviceMapRules,
103893                 serviceNominatim: serviceNominatim,
103894                 serviceOpenstreetcam: serviceOpenstreetcam,
103895                 serviceOsm: serviceOsm,
103896                 serviceOsmWikibase: serviceOsmWikibase,
103897                 serviceStreetside: serviceStreetside,
103898                 serviceTaginfo: serviceTaginfo,
103899                 serviceVectorTile: serviceVectorTile,
103900                 serviceWikidata: serviceWikidata,
103901                 serviceWikipedia: serviceWikipedia,
103902                 svgAreas: svgAreas,
103903                 svgData: svgData,
103904                 svgDebug: svgDebug,
103905                 svgDefs: svgDefs,
103906                 svgKeepRight: svgKeepRight,
103907                 svgIcon: svgIcon,
103908                 svgGeolocate: svgGeolocate,
103909                 svgLabels: svgLabels,
103910                 svgLayers: svgLayers,
103911                 svgLines: svgLines,
103912                 svgMapillaryImages: svgMapillaryImages,
103913                 svgMapillarySigns: svgMapillarySigns,
103914                 svgMidpoints: svgMidpoints,
103915                 svgNotes: svgNotes,
103916                 svgMarkerSegments: svgMarkerSegments,
103917                 svgOpenstreetcamImages: svgOpenstreetcamImages,
103918                 svgOsm: svgOsm,
103919                 svgPassiveVertex: svgPassiveVertex,
103920                 svgPath: svgPath,
103921                 svgPointTransform: svgPointTransform,
103922                 svgPoints: svgPoints,
103923                 svgRelationMemberTags: svgRelationMemberTags,
103924                 svgSegmentWay: svgSegmentWay,
103925                 svgStreetside: svgStreetside,
103926                 svgTagClasses: svgTagClasses,
103927                 svgTagPattern: svgTagPattern,
103928                 svgTouch: svgTouch,
103929                 svgTurns: svgTurns,
103930                 svgVertices: svgVertices,
103931                 uiFields: uiFields,
103932                 uiFieldLocalized: uiFieldLocalized,
103933                 uiFieldDefaultCheck: uiFieldCheck,
103934                 uiFieldOnewayCheck: uiFieldCheck,
103935                 uiFieldCheck: uiFieldCheck,
103936                 uiFieldUrl: uiFieldText,
103937                 uiFieldNumber: uiFieldText,
103938                 uiFieldTel: uiFieldText,
103939                 uiFieldEmail: uiFieldText,
103940                 uiFieldText: uiFieldText,
103941                 uiFieldAccess: uiFieldAccess,
103942                 uiFieldAddress: uiFieldAddress,
103943                 uiFieldCycleway: uiFieldCycleway,
103944                 uiFieldLanes: uiFieldLanes,
103945                 uiFieldMultiCombo: uiFieldCombo,
103946                 uiFieldNetworkCombo: uiFieldCombo,
103947                 uiFieldSemiCombo: uiFieldCombo,
103948                 uiFieldTypeCombo: uiFieldCombo,
103949                 uiFieldCombo: uiFieldCombo,
103950                 uiFieldMaxspeed: uiFieldMaxspeed,
103951                 uiFieldStructureRadio: uiFieldRadio,
103952                 uiFieldRadio: uiFieldRadio,
103953                 uiFieldRestrictions: uiFieldRestrictions,
103954                 uiFieldTextarea: uiFieldTextarea,
103955                 uiFieldWikidata: uiFieldWikidata,
103956                 uiFieldWikipedia: uiFieldWikipedia,
103957                 uiIntro: uiIntro,
103958                 uiInfoPanels: uiInfoPanels,
103959                 uiPanelBackground: uiPanelBackground,
103960                 uiPanelHistory: uiPanelHistory,
103961                 uiPanelLocation: uiPanelLocation,
103962                 uiPanelMeasurement: uiPanelMeasurement,
103963                 uiSettingsCustomBackground: uiSettingsCustomBackground,
103964                 uiSettingsCustomData: uiSettingsCustomData,
103965                 uiInit: uiInit,
103966                 uiAccount: uiAccount,
103967                 uiAttribution: uiAttribution,
103968                 uiBackground: uiBackground,
103969                 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
103970                 uiBackgroundOffset: uiBackgroundOffset,
103971                 uiChangesetEditor: uiChangesetEditor,
103972                 uiCmd: uiCmd,
103973                 uiCombobox: uiCombobox,
103974                 uiCommit: uiCommit,
103975                 uiCommitChanges: uiCommitChanges,
103976                 uiCommitWarnings: uiCommitWarnings,
103977                 uiConfirm: uiConfirm,
103978                 uiConflicts: uiConflicts,
103979                 uiContributors: uiContributors,
103980                 uiCurtain: uiCurtain,
103981                 uiDataEditor: uiDataEditor,
103982                 uiDataHeader: uiDataHeader,
103983                 uiDisclosure: uiDisclosure,
103984                 uiEditMenu: uiEditMenu,
103985                 uiEntityEditor: uiEntityEditor,
103986                 uiFeatureInfo: uiFeatureInfo,
103987                 uiFeatureList: uiFeatureList,
103988                 uiField: uiField,
103989                 uiFieldHelp: uiFieldHelp,
103990                 uiFlash: uiFlash,
103991                 uiFormFields: uiFormFields,
103992                 uiFullScreen: uiFullScreen,
103993                 uiGeolocate: uiGeolocate,
103994                 uiHelp: uiHelp,
103995                 uiImproveOsmComments: uiImproveOsmComments,
103996                 uiImproveOsmDetails: uiImproveOsmDetails,
103997                 uiImproveOsmEditor: uiImproveOsmEditor,
103998                 uiImproveOsmHeader: uiImproveOsmHeader,
103999                 uiInfo: uiInfo,
104000                 uiInspector: uiInspector,
104001                 uiIssuesInfo: uiIssuesInfo,
104002                 uiKeepRightDetails: uiKeepRightDetails,
104003                 uiKeepRightEditor: uiKeepRightEditor,
104004                 uiKeepRightHeader: uiKeepRightHeader,
104005                 uiLasso: uiLasso,
104006                 uiLoading: uiLoading,
104007                 uiMapData: uiMapData,
104008                 uiMapInMap: uiMapInMap,
104009                 uiModal: uiModal,
104010                 uiNotice: uiNotice,
104011                 uiNoteComments: uiNoteComments,
104012                 uiNoteEditor: uiNoteEditor,
104013                 uiNoteHeader: uiNoteHeader,
104014                 uiNoteReport: uiNoteReport,
104015                 uiPresetEditor: uiPresetEditor,
104016                 uiPresetIcon: uiPresetIcon,
104017                 uiPresetList: uiPresetList,
104018                 uiQuickLinks: uiQuickLinks,
104019                 uiRadialMenu: uiRadialMenu,
104020                 uiRawMemberEditor: uiRawMemberEditor,
104021                 uiRawMembershipEditor: uiRawMembershipEditor,
104022                 uiRawTagEditor: uiRawTagEditor,
104023                 uiRestore: uiRestore,
104024                 uiScale: uiScale,
104025                 uiSelectionList: uiSelectionList,
104026                 uiSidebar: uiSidebar,
104027                 uiSourceSwitch: uiSourceSwitch,
104028                 uiSpinner: uiSpinner,
104029                 uiSplash: uiSplash,
104030                 uiStatus: uiStatus,
104031                 uiSuccess: uiSuccess,
104032                 uiTagReference: uiTagReference,
104033                 uiToggle: uiToggle,
104034                 uiTooltipHtml: uiTooltipHtml,
104035                 uiVersion: uiVersion,
104036                 uiViewOnOSM: uiViewOnOSM,
104037                 uiViewOnKeepRight: uiViewOnKeepRight,
104038                 uiZoom: uiZoom,
104039                 utilArrayChunk: utilArrayChunk,
104040                 utilArrayDifference: utilArrayDifference,
104041                 utilArrayFlatten: utilArrayFlatten,
104042                 utilArrayGroupBy: utilArrayGroupBy,
104043                 utilArrayIntersection: utilArrayIntersection,
104044                 utilArrayUnion: utilArrayUnion,
104045                 utilArrayUniq: utilArrayUniq,
104046                 utilArrayUniqBy: utilArrayUniqBy,
104047                 utilAsyncMap: utilAsyncMap,
104048                 utilCleanTags: utilCleanTags,
104049                 utilDetect: utilDetect,
104050                 utilDisplayName: utilDisplayName,
104051                 utilDisplayNameForPath: utilDisplayNameForPath,
104052                 utilDisplayType: utilDisplayType,
104053                 utilDisplayLabel: utilDisplayLabel,
104054                 utilEntityRoot: utilEntityRoot,
104055                 utilEditDistance: utilEditDistance,
104056                 utilEntitySelector: utilEntitySelector,
104057                 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
104058                 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
104059                 utilFastMouse: utilFastMouse,
104060                 utilFunctor: utilFunctor,
104061                 utilGetAllNodes: utilGetAllNodes,
104062                 utilGetSetValue: utilGetSetValue,
104063                 utilHashcode: utilHashcode,
104064                 utilHighlightEntities: utilHighlightEntities,
104065                 utilKeybinding: utilKeybinding,
104066                 utilNoAuto: utilNoAuto,
104067                 utilObjectOmit: utilObjectOmit,
104068                 utilPrefixCSSProperty: utilPrefixCSSProperty,
104069                 utilPrefixDOMProperty: utilPrefixDOMProperty,
104070                 utilPreset: utilPreset,
104071                 utilQsString: utilQsString,
104072                 utilRebind: utilRebind,
104073                 utilSetTransform: utilSetTransform,
104074                 utilSessionMutex: utilSessionMutex,
104075                 utilStringQs: utilStringQs,
104076                 utilTagDiff: utilTagDiff,
104077                 utilTagText: utilTagText,
104078                 utilTiler: utilTiler,
104079                 utilTriggerEvent: utilTriggerEvent,
104080                 utilWrap: utilWrap,
104081                 validationAlmostJunction: validationAlmostJunction,
104082                 validationCloseNodes: validationCloseNodes,
104083                 validationCrossingWays: validationCrossingWays,
104084                 validationDisconnectedWay: validationDisconnectedWay,
104085                 validationFormatting: validationFormatting,
104086                 validationHelpRequest: validationHelpRequest,
104087                 validationImpossibleOneway: validationImpossibleOneway,
104088                 validationIncompatibleSource: validationIncompatibleSource,
104089                 validationMaprules: validationMaprules,
104090                 validationMismatchedGeometry: validationMismatchedGeometry,
104091                 validationMissingRole: validationMissingRole,
104092                 validationMissingTag: validationMissingTag,
104093                 validationOutdatedTags: validationOutdatedTags,
104094                 validationPrivateData: validationPrivateData,
104095                 validationSuspiciousName: validationSuspiciousName,
104096                 validationUnsquareWay: validationUnsquareWay
104097         });
104098
104099         // polyfill requestIdleCallback
104100         window.requestIdleCallback = window.requestIdleCallback ||
104101             function(cb) {
104102                 var start = Date.now();
104103                 return window.requestAnimationFrame(function() {
104104                     cb({
104105                         didTimeout: false,
104106                         timeRemaining: function() {
104107                             return Math.max(0, 50 - (Date.now() - start));
104108                         }
104109                     });
104110                 });
104111             };
104112
104113         window.cancelIdleCallback = window.cancelIdleCallback ||
104114             function(id) {
104115                 window.cancelAnimationFrame(id);
104116             };
104117         window.iD = iD;
104118
104119 }());
104120 //# sourceMappingURL=iD.js.map