aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2020-07-28 10:41:58 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-07-28 10:41:58 +0000
commit3acc1200831b00e9c1544bf405440e6cb213cfc5 (patch)
treeef01b4fe60fc6c0cb5548b85cf25e63802aaedfa
parent2028fdd53d1f736a844d76319b5d00efa14f4e49 (diff)
parent8457c14d36ea6a9bcba87a2b137f97b74cd8a9cf (diff)
downloadtimezone-boundary-builder-3acc1200831b00e9c1544bf405440e6cb213cfc5.tar.gz
Merge branch 'upstream-master' of persistent-https://android.git.corp.google.com/platform/external/timezone-boundary-builder into Merge2 am: 8457c14d36
Original change: https://android-review.googlesource.com/c/platform/external/timezone-boundary-builder/+/1283945 Change-Id: Ice7d30ed90a88c8de72091bc23e28d789ae2665a
-rw-r--r--.gitattributes17
-rw-r--r--.gitignore90
-rw-r--r--.travis.yml6
-rw-r--r--2018i.pngbin0 -> 441136 bytes
-rw-r--r--CHANGELOG.md171
-rw-r--r--CODE_LICENSE8
-rw-r--r--DATA_LICENSE538
-rw-r--r--README.md96
-rw-r--r--expectedZoneOverlaps.json107
-rw-r--r--index.js745
-rw-r--r--lint-json.js56
-rw-r--r--osmBoundarySources.json1474
-rw-r--r--package-lock.json2597
-rw-r--r--package.json36
-rw-r--r--progressStats.js83
-rw-r--r--timezones.json4743
16 files changed, 10767 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..bdb0cab
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,17 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs diff=csharp
+
+# Standard to msysgit
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2fed088
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,90 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules
+jspm_packages
+
+# Optional npm cache directory
+.npm
+
+# Optional REPL history
+.node_repl_history
+
+# =========================
+# Operating System Files
+# =========================
+
+# OSX
+# =========================
+
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
+# Windows
+# =========================
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Project
+# =========================
+downloads
+dist \ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..36c0a91
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - "10"
+cache:
+ directories:
+ - "node_modules"
diff --git a/2018i.png b/2018i.png
new file mode 100644
index 0000000..1015b3d
--- /dev/null
+++ b/2018i.png
Binary files differ
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..f635526
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,171 @@
+## 2019b
+
+### Zone Changes
+
+* Update to latest OSM data
+
+### Other Changes
+
+* Include JSON list of timezone names in each release ([#69](https://github.com/evansiroky/timezone-boundary-builder/issues/69))
+* Improve troubleshooting wiki by adding demo video on fixing broken relations ([#68](https://github.com/evansiroky/timezone-boundary-builder/issues/68))
+
+## 2019a
+
+### Zone Changes
+
+* Split Vietnam into 2 zones ([#66](https://github.com/evansiroky/timezone-boundary-builder/issues/66))
+ * Make Northern Vietnam be a part of `Asia/Bangkok`
+ * Southern Vietnam stays `Asia/Ho_Chi_Minh`
+* Make Bir Tawil area be a part of `Africa/Cairo` instead of being a part of `Africa/Khartoum`.
+* Update to latest OSM data
+
+### Other Changes
+
+* Add standard linter ([#67](https://github.com/evansiroky/timezone-boundary-builder/issues/67))
+
+## 2018i
+
+### Zone Changes
+
+* Make territories of Taiwan take precedence when they overlap Chinese-claimed territories. ([#52](https://github.com/evansiroky/timezone-boundary-builder/issues/52))
+* Add Oslo Accords Area B and C to `Asia/Jerusalem`. ([#53](https://github.com/evansiroky/timezone-boundary-builder/issues/53))
+* Create new zone `Asia/Qostanay` by taking area from `Asia/Qyzylorda`. ([#59](https://github.com/evansiroky/timezone-boundary-builder/issues/59))
+* Change timezone for Antarctic Station Neumayer III Station from `Europe/Berlin` to `Etc/UTC`. ([#61](https://github.com/evansiroky/timezone-boundary-builder/issues/61))
+* Update to latest OSM data
+
+### Other Changes
+
+* Add some badges to the README
+* Add progress stats reporting
+* Update to use Node 10 ([#56](https://github.com/evansiroky/timezone-boundary-builder/issues/56))
+
+## 2018g
+
+### Zone Changes
+
+* Switch geometries of `America/Danmarkshavn` and `America/Scoresbysund` ([#40](https://github.com/evansiroky/timezone-boundary-builder/issues/40))
+* Add timezones in Antarctica ([#42](https://github.com/evansiroky/timezone-boundary-builder/issues/42))
+* Fix northern border of `America/Argentina/Rio_Gallegos` ([#46](https://github.com/evansiroky/timezone-boundary-builder/issues/46))
+* Allow timezone boundaries to overlap. ([#41](https://github.com/evansiroky/timezone-boundary-builder/issues/41))
+ * This change now means that the following zones overlap:
+ * `Africa/Juba`, `Africa/Khartoum`
+ * `America/Argentina/Rio_Gallegos`, `America/Punta_Arenas`
+ * `America/La_Paz`, `America/Porto_Velho`
+ * `America/Moncton`, `America/New_York`
+ * `Asia/Hebron`, `Asia/Jerusalem`
+ * `Asia/Ho_Chi_Minh`, `Asia/Manila`
+ * `Asia/Ho_Chi_Minh`, `Asia/Shanghai`
+ * `Asia/Manila`, `Asia/Shanghai`
+ * `Asia/Shanghai`, `Asia/Taipei`
+ * `Asia/Shanghai`, `Asia/Urumqi`
+ * `Europe/Amsterdam`, `Europe/Berlin`
+ * `Europe/Belgrade`, `Europe/Zagreb`
+ * `Europe/Berlin`, `Europe/Luxembourg`
+ * `Europe/Paris`, `Europe/Rome`
+* Add disupted area near Doklam to `Asia/Shanghai` and `Asia/Thimphu` ([#49](https://github.com/evansiroky/timezone-boundary-builder/issues/49))
+* Update boundaries of `America/Creston` and `America/Edmonton` to reflect changes in OpenStreetMap
+* Update to latest OSM data
+
+### Other Changes
+
+* Added more libraries to list of lookup libraries using this project's data
+* Fixed overpass querying ([#43](https://github.com/evansiroky/timezone-boundary-builder/issues/43))
+
+## 2018d
+
+### Zone Changes
+
+* Add timezones in the oceans ([#34](https://github.com/evansiroky/timezone-boundary-builder/issues/34))
+ * Shapefiles and geojson are now outputted as with or without oceans
+* Fix Viedma Glacier are to reflect latest OSM boundaries
+* Update to latest OSM data
+
+### Other Changes
+
+* Better debugging
+ * Printing Overpass query for when no data is received.
+ * Using geojsonhint and writing problematic geojson to a pretty-printed file.
+ * Save validation overlaps to file.
+ * Add links to troubleshooting wiki for common errors.
+* Update README
+ * Add list of geographical lookup libraries
+ * Add troubleshooting wiki
+
+## 2017c
+
+### Zone Changes
+
+* Refactor of timezones in China ([#13](https://github.com/evansiroky/timezone-boundary-builder/issues/13))
+ * Integration of areas formerly found in Asia/Chongqing, Asia/Harbin and Asia/Kashgar into other zones
+ * Expansion of Asia/Shanghai to all of China except Xinjiang
+ * Asia/Urumqi is now comprised of Xinjiang
+* Fix Mexico Beach, FL by moving it to central time ([#20](https://github.com/evansiroky/timezone-boundary-builder/issues/20))
+* Make Viedma glacier area work with updated OSM boundaries
+* Remove small holes and reduce geojson precision. ([#11](https://github.com/evansiroky/timezone-boundary-builder/issues/11) and [#17](https://github.com/evansiroky/timezone-boundary-builder/issues/17))
+* Remove zones found in backward file of timezone db ([#16](https://github.com/evansiroky/timezone-boundary-builder/issues/16))
+ * America/Coral_Harbour now integrated into America/Atikokan
+ * America/Montreal now integrated into America/Toronto
+ * See notes on China refactor for changes to Asia/Chongqing, Asia/Harbin, Asia/Kashgar, Asia/Shanghai and Asia/Urumqi
+ * Asia/Rangoon renamed to Asia/Yangon
+ * Pacific/Yap integrated into Pacific/Chuuk
+ * Pacific/Johnston integrated into Pacific/Honolulu
+* Refactor arbitrary sea boundaries of timezones in the Gulf of St Lawrence to account for updated OSM geometry of the boundary of Quebec.
+* Add Page, AZ to America/Phoenix ([#9](https://github.com/evansiroky/timezone-boundary-builder/issues/9))
+* Update to latest OSM data
+
+### Other Changes
+
+* Add linting of json files
+ * A overpass source listed in timezones.json must have a corresponding definition in osmBoundarySources.json
+ * A overpass source defined in osmBoundarySources.json must be used in at least one operation in timezones.json
+ * A manual-polygon or manual-multipolygon defined in timezones.json must be accompanied with a description.
+* Add ability to build only certain zones in builder script
+* Add travis-ci builds that require linting script to pass
+* Added descriptions to manual geometries
+* Add ability to use overpass to fetch ways that represent boundaries
+* Rewrite README
+
+## 2017a
+
+* Zone Changes
+ * Add new zone America/Punta_Arenas by taking area from America/Santiago
+ * Move the boundary of America/New_York and America/Chicago in the region of various towns in Alabama such as Phenix City to the west to include these towns in America/New_York
+ * Implement own interpretation of border of America/Chicago and America/Denver in the following places:
+ * Move boundary to the east of ND Highway 31 in Sioux county, ND
+ * Move diagonal boundary through Stanley County, SD northwest so it doesn't go through the middle of Fort Pierre
+ * Update to latest OSM data
+* Other changes
+ * Add picture of zones to README
+
+## 2016j
+
+- Zone Changes
+ - Add new zone Asia/Atyrau by taking area from Asia/Aqtau
+ - Add new zone Europe/Saratov by taking area from Europe/Volgograd
+ - Update to latest OSM data
+- Other changes
+ - README updates
+
+
+## 2016i
+
+- Zone Changes
+ - Split Cyprus into 2 zones. The existing Asia/Nicosia now ends at
+ the northern boundary of the United Nations Buffer Zone and the new
+ zone Asia/Famagusta contains everything north of the buffer zone.
+ - Add missing data definitions: Congo-Kinshasa and South Sudan
+ - Old Crimea boundary no longer exists in OSM, use combination of
+ Crimea + Sevastopol
+ - Typo of extra space in Harrison County fixed in OSM
+ - Taishan City now has invalid geometry in OSM, use Xinhui district
+ instead when making boundaries
+ - Update to latest OSM data
+- Other changes
+ - Add download throttling of publicly available Overpass API
+ - Remove old dist files if they exist so ogr2ogr can work
+ - Update README to note change in Overpass API querying
+
+
+## 2016d
+
+First data release of the project.
diff --git a/CODE_LICENSE b/CODE_LICENSE
new file mode 100644
index 0000000..6ee609d
--- /dev/null
+++ b/CODE_LICENSE
@@ -0,0 +1,8 @@
+The MIT License (MIT)
+Copyright (c) 2016 Evan Siroky
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/DATA_LICENSE b/DATA_LICENSE
new file mode 100644
index 0000000..2da947a
--- /dev/null
+++ b/DATA_LICENSE
@@ -0,0 +1,538 @@
+Open Database License (ODbL) v1.0
+Disclaimer
+Open Data Commons is not a law firm and does not provide legal services of any kind.
+
+Open Data Commons has no formal relationship with you. Your receipt of this document does not create any kind of agent-client relationship. Please seek the advice of a suitably qualified legal professional licensed to practice in your jurisdiction before using this document.
+
+No warranties and disclaimer of any damages. This information is provided ‘as is‘, and this site makes no warranties on the information provided. Any damages resulting from its use are disclaimed.
+
+Plain language summary
+A plain language summary of the Open Database License is available.
+
+Alternative formats:
+Plain Text
+
+ODC Open Database License (ODbL)
+Preamble
+The Open Database License (ODbL) is a license agreement intended to
+allow users to freely share, modify, and use this Database while
+maintaining this same freedom for others. Many databases are covered by
+copyright, and therefore this document licenses these rights. Some
+jurisdictions, mainly in the European Union, have specific rights that
+cover databases, and so the ODbL addresses these rights, too. Finally,
+the ODbL is also an agreement in contract for users of this Database to
+act in certain ways in return for accessing this Database.
+
+Databases can contain a wide variety of types of content (images,
+audiovisual material, and sounds all in the same database, for example),
+and so the ODbL only governs the rights over the Database, and not the
+contents of the Database individually. Licensors should use the ODbL
+together with another license for the contents, if the contents have a
+single set of rights that uniformly covers all of the contents. If the
+contents have multiple sets of different rights, Licensors should
+describe what rights govern what contents together in the individual
+record or in some other way that clarifies what rights apply.
+
+Sometimes the contents of a database, or the database itself, can be
+covered by other rights not addressed here (such as private contracts,
+trade mark over the name, or privacy rights / data protection rights
+over information in the contents), and so you are advised that you may
+have to consult other documents or clear other rights before doing
+activities not covered by this License.
+
+The Licensor (as defined below)
+
+and
+
+You (as defined below)
+
+agree as follows:
+
+1.0 Definitions of Capitalised Words
+“Collective Database” – Means this Database in unmodified form as part
+of a collection of independent databases in themselves that together are
+assembled into a collective whole. A work that constitutes a Collective
+Database will not be considered a Derivative Database.
+
+“Convey” – As a verb, means Using the Database, a Derivative Database,
+or the Database as part of a Collective Database in any way that enables
+a Person to make or receive copies of the Database or a Derivative
+Database. Conveying does not include interaction with a user through a
+computer network, or creating and Using a Produced Work, where no
+transfer of a copy of the Database or a Derivative Database occurs.
+“Contents” – The contents of this Database, which includes the
+information, independent works, or other material collected into the
+Database. For example, the contents of the Database could be factual
+data or works such as images, audiovisual material, text, or sounds.
+
+“Database” – A collection of material (the Contents) arranged in a
+systematic or methodical way and individually accessible by electronic
+or other means offered under the terms of this License.
+
+“Database Directive” – Means Directive 96/9/EC of the European
+Parliament and of the Council of 11 March 1996 on the legal protection
+of databases, as amended or succeeded.
+
+“Database Right” – Means rights resulting from the Chapter III (“sui
+generis”) rights in the Database Directive (as amended and as transposed
+by member states), which includes the Extraction and Re-utilisation of
+the whole or a Substantial part of the Contents, as well as any similar
+rights available in the relevant jurisdiction under Section 10.4.
+
+“Derivative Database” – Means a database based upon the Database, and
+includes any translation, adaptation, arrangement, modification, or any
+other alteration of the Database or of a Substantial part of the
+Contents. This includes, but is not limited to, Extracting or
+Re-utilising the whole or a Substantial part of the Contents in a new
+Database.
+
+“Extraction” – Means the permanent or temporary transfer of all or a
+Substantial part of the Contents to another medium by any means or in
+any form.
+
+“License” – Means this license agreement and is both a license of rights
+such as copyright and Database Rights and an agreement in contract.
+
+“Licensor” – Means the Person that offers the Database under the terms
+of this License.
+
+“Person” – Means a natural or legal person or a body of persons
+corporate or incorporate.
+
+“Produced Work” – a work (such as an image, audiovisual material, text,
+or sounds) resulting from using the whole or a Substantial part of the
+Contents (via a search or other query) from this Database, a Derivative
+Database, or this Database as part of a Collective Database.
+
+“Publicly” – means to Persons other than You or under Your control by
+either more than 50% ownership or by the power to direct their
+activities (such as contracting with an independent consultant).
+
+“Re-utilisation” – means any form of making available to the public all
+or a Substantial part of the Contents by the distribution of copies, by
+renting, by online or other forms of transmission.
+
+“Substantial” – Means substantial in terms of quantity or quality or a
+combination of both. The repeated and systematic Extraction or
+Re-utilisation of insubstantial parts of the Contents may amount to the
+Extraction or Re-utilisation of a Substantial part of the Contents.
+
+“Use” – As a verb, means doing any act that is restricted by copyright
+or Database Rights whether in the original medium or any other; and
+includes without limitation distributing, copying, publicly performing,
+publicly displaying, and preparing derivative works of the Database, as
+well as modifying the Database as may be technically necessary to use it
+in a different mode or format.
+
+“You” – Means a Person exercising rights under this License who has not
+previously violated the terms of this License with respect to the
+Database, or who has received express permission from the Licensor to
+exercise rights under this License despite a previous violation.
+
+Words in the singular include the plural and vice versa.
+
+2.0 What this License covers
+2.1. Legal effect of this document. This License is:
+
+ a. A license of applicable copyright and neighbouring rights;
+
+ b. A license of the Database Right; and
+
+ c. An agreement in contract between You and the Licensor.
+
+2.2 Legal rights covered. This License covers the legal rights in the
+Database, including:
+
+ a. Copyright. Any copyright or neighbouring rights in the Database.
+The copyright licensed includes any individual elements of the
+Database, but does not cover the copyright over the Contents
+independent of this Database. See Section 2.4 for details. Copyright
+law varies between jurisdictions, but is likely to cover: the Database
+model or schema, which is the structure, arrangement, and organisation
+of the Database, and can also include the Database tables and table
+indexes; the data entry and output sheets; and the Field names of
+Contents stored in the Database;
+
+ b. Database Rights. Database Rights only extend to the Extraction and
+Re-utilisation of the whole or a Substantial part of the Contents.
+Database Rights can apply even when there is no copyright over the
+ Database. Database Rights can also apply when the Contents are removed
+from the Database and are selected and arranged in a way that would
+not infringe any applicable copyright; and
+
+ c. Contract. This is an agreement between You and the Licensor for
+access to the Database. In return you agree to certain conditions of
+use on this access as outlined in this License.
+
+2.3 Rights not covered.
+
+ a. This License does not apply to computer programs used in the making
+or operation of the Database;
+
+ b. This License does not cover any patents over the Contents or the
+Database; and
+
+ c. This License does not cover any trademarks associated with the
+ Database.
+
+2.4 Relationship to Contents in the Database. The individual items of
+the Contents contained in this Database may be covered by other rights,
+including copyright, patent, data protection, privacy, or personality
+rights, and this License does not cover any rights (other than Database
+Rights or in contract) in individual Contents contained in the Database.
+For example, if used on a Database of images (the Contents), this
+License would not apply to copyright over individual images, which could
+have their own separate licenses, or one single license covering all of
+the rights over the images.
+
+3.0 Rights granted
+3.1 Subject to the terms and conditions of this License, the Licensor
+grants to You a worldwide, royalty-free, non-exclusive, terminable (but
+only under Section 9) license to Use the Database for the duration of
+any applicable copyright and Database Rights. These rights explicitly
+include commercial use, and do not exclude any field of endeavour. To
+the extent possible in the relevant jurisdiction, these rights may be
+exercised in all media and formats whether now known or created in the
+future.
+
+The rights granted cover, for example:
+
+ a. Extraction and Re-utilisation of the whole or a Substantial part of
+the Contents;
+
+ b. Creation of Derivative Databases;
+
+ c. Creation of Collective Databases;
+
+ d. Creation of temporary or permanent reproductions by any means and
+in any form, in whole or in part, including of any Derivative
+Databases or as a part of Collective Databases; and
+
+ e. Distribution, communication, display, lending, making available, or
+performance to the public by any means and in any form, in whole or in
+part, including of any Derivative Database or as a part of Collective
+ Databases.
+
+3.2 Compulsory license schemes. For the avoidance of doubt:
+
+ a. Non-waivable compulsory license schemes. In those jurisdictions in
+which the right to collect royalties through any statutory or
+compulsory licensing scheme cannot be waived, the Licensor reserves
+the exclusive right to collect such royalties for any exercise by You
+of the rights granted under this License;
+
+ b. Waivable compulsory license schemes. In those jurisdictions in
+which the right to collect royalties through any statutory or
+compulsory licensing scheme can be waived, the Licensor waives the
+exclusive right to collect such royalties for any exercise by You of
+the rights granted under this License; and,
+
+ c. Voluntary license schemes. The Licensor waives the right to collect
+royalties, whether individually or, in the event that the Licensor is
+a member of a collecting society that administers voluntary licensing
+schemes, via that society, from any exercise by You of the rights
+granted under this License.
+
+3.3 The right to release the Database under different terms, or to stop
+distributing or making available the Database, is reserved. Note that
+this Database may be multiple-licensed, and so You may have the choice
+of using alternative licenses for this Database. Subject to Section
+10.4, all other rights not expressly granted by Licensor are reserved.
+
+4.0 Conditions of Use
+4.1 The rights granted in Section 3 above are expressly made subject to
+Your complying with the following conditions of use. These are important
+conditions of this License, and if You fail to follow them, You will be
+in material breach of its terms.
+
+4.2 Notices. If You Publicly Convey this Database, any Derivative
+Database, or the Database as part of a Collective Database, then You
+must:
+
+ a. Do so only under the terms of this License or another license
+permitted under Section 4.4;
+
+ b. Include a copy of this License (or, as applicable, a license
+permitted under Section 4.4) or its Uniform Resource Identifier (URI)
+with the Database or Derivative Database, including both in the
+Database or Derivative Database and in any relevant documentation; and
+
+ c. Keep intact any copyright or Database Right notices and notices
+that refer to this License.
+
+ d. If it is not possible to put the required notices in a particular
+file due to its structure, then You must include the notices in a
+location (such as a relevant directory) where users would be likely to
+look for it.
+
+4.3 Notice for using output (Contents). Creating and Using a Produced
+Work does not require the notice in Section 4.2. However, if you
+Publicly Use a Produced Work, You must include a notice associated with
+the Produced Work reasonably calculated to make any Person that uses,
+views, accesses, interacts with, or is otherwise exposed to the Produced
+Work aware that Content was obtained from the Database, Derivative
+Database, or the Database as part of a Collective Database, and that it
+is available under this License.
+
+ a. Example notice. The following text will satisfy notice under
+Section 4.3:
+
+ Contains information from DATABASE NAME, which is made available
+ here under the Open Database License (ODbL).
+DATABASE NAME should be replaced with the name of the Database and a
+hyperlink to the URI of the Database. “Open Database License” should
+contain a hyperlink to the URI of the text of this License. If
+hyperlinks are not possible, You should include the plain text of the
+required URI’s with the above notice.
+
+4.4 Share alike.
+
+ a. Any Derivative Database that You Publicly Use must be only under
+the terms of:
+
+ i. This License;
+
+ ii. A later version of this License similar in spirit to this
+License; or
+
+ iii. A compatible license.
+
+If You license the Derivative Database under one of the licenses
+mentioned in (iii), You must comply with the terms of that license.
+
+ b. For the avoidance of doubt, Extraction or Re-utilisation of the
+whole or a Substantial part of the Contents into a new database is a
+Derivative Database and must comply with Section 4.4.
+
+ c. Derivative Databases and Produced Works. A Derivative Database is
+Publicly Used and so must comply with Section 4.4. if a Produced Work
+created from the Derivative Database is Publicly Used.
+
+ d. Share Alike and additional Contents. For the avoidance of doubt,
+You must not add Contents to Derivative Databases under Section 4.4 a
+that are incompatible with the rights granted under this License.
+
+ e. Compatible licenses. Licensors may authorise a proxy to determine
+compatible licenses under Section 4.4 a iii. If they do so, the
+authorised proxy’s public statement of acceptance of a compatible
+license grants You permission to use the compatible license.
+
+4.5 Limits of Share Alike. The requirements of Section 4.4 do not apply
+in the following:
+
+ a. For the avoidance of doubt, You are not required to license
+Collective Databases under this License if You incorporate this
+Database or a Derivative Database in the collection, but this License
+still applies to this Database or a Derivative Database as a part of
+the Collective Database;
+
+ b. Using this Database, a Derivative Database, or this Database as
+part of a Collective Database to create a Produced Work does not
+create a Derivative Database for purposes of Section 4.4; and
+
+ c. Use of a Derivative Database internally within an organisation is
+not to the public and therefore does not fall under the requirements
+of Section 4.4.
+
+4.6 Access to Derivative Databases. If You Publicly Use a Derivative
+Database or a Produced Work from a Derivative Database, You must also
+offer to recipients of the Derivative Database or Produced Work a copy
+in a machine readable form of:
+
+ a. The entire Derivative Database; or
+
+ b. A file containing all of the alterations made to the Database or
+the method of making the alterations to the Database (such as an
+algorithm), including any additional Contents, that make up all the
+differences between the Database and the Derivative Database.
+
+The Derivative Database (under a.) or alteration file (under b.) must be
+available at no more than a reasonable production cost for physical
+distributions and free of charge if distributed over the internet.
+
+4.7 Technological measures and additional terms
+
+ a. This License does not allow You to impose (except subject to
+Section 4.7 b.) any terms or any technological measures on the
+Database, a Derivative Database, or the whole or a Substantial part of
+the Contents that alter or restrict the terms of this License, or any
+rights granted under it, or have the effect or intent of restricting
+the ability of any person to exercise those rights.
+
+ b. Parallel distribution. You may impose terms or technological
+measures on the Database, a Derivative Database, or the whole or a
+Substantial part of the Contents (a “Restricted Database”) in
+contravention of Section 4.74 a. only if You also make a copy of the
+Database or a Derivative Database available to the recipient of the
+Restricted Database:
+
+ i. That is available without additional fee;
+
+ ii. That is available in a medium that does not alter or restrict
+the terms of this License, or any rights granted under it, or have
+the effect or intent of restricting the ability of any person to
+exercise those rights (an “Unrestricted Database”); and
+
+ iii. The Unrestricted Database is at least as accessible to the
+recipient as a practical matter as the Restricted Database.
+
+ c. For the avoidance of doubt, You may place this Database or a
+Derivative Database in an authenticated environment, behind a
+password, or within a similar access control scheme provided that You
+do not alter or restrict the terms of this License or any rights
+granted under it or have the effect or intent of restricting the
+ability of any person to exercise those rights.
+
+4.8 Licensing of others. You may not sublicense the Database. Each time
+You communicate the Database, the whole or Substantial part of the
+Contents, or any Derivative Database to anyone else in any way, the
+Licensor offers to the recipient a license to the Database on the same
+terms and conditions as this License. You are not responsible for
+enforcing compliance by third parties with this License, but You may
+enforce any rights that You have over a Derivative Database. You are
+solely responsible for any modifications of a Derivative Database made
+by You or another Person at Your direction. You may not impose any
+further restrictions on the exercise of the rights granted or affirmed
+under this License.
+
+5.0 Moral rights
+5.1 Moral rights. This section covers moral rights, including any rights
+to be identified as the author of the Database or to object to treatment
+that would otherwise prejudice the author’s honour and reputation, or
+any other derogatory treatment:
+
+ a. For jurisdictions allowing waiver of moral rights, Licensor waives
+all moral rights that Licensor may have in the Database to the fullest
+extent possible by the law of the relevant jurisdiction under Section
+ 10.4;
+
+ b. If waiver of moral rights under Section 5.1 a in the relevant
+jurisdiction is not possible, Licensor agrees not to assert any moral
+rights over the Database and waives all claims in moral rights to the
+fullest extent possible by the law of the relevant jurisdiction under
+Section 10.4; and
+
+ c. For jurisdictions not allowing waiver or an agreement not to assert
+moral rights under Section 5.1 a and b, the author may retain their
+moral rights over certain aspects of the Database.
+
+Please note that some jurisdictions do not allow for the waiver of moral
+rights, and so moral rights may still subsist over the Database in some
+jurisdictions.
+
+6.0 Fair dealing, Database exceptions, and other rights not affected
+6.1 This License does not affect any rights that You or anyone else may
+independently have under any applicable law to make any use of this
+Database, including without limitation:
+
+ a. Exceptions to the Database Right including: Extraction of Contents
+from non-electronic Databases for private purposes, Extraction for
+purposes of illustration for teaching or scientific research, and
+Extraction or Re-utilisation for public security or an administrative
+or judicial procedure.
+
+ b. Fair dealing, fair use, or any other legally recognised limitation
+or exception to infringement of copyright or other applicable laws.
+
+6.2 This License does not affect any rights of lawful users to Extract
+and Re-utilise insubstantial parts of the Contents, evaluated
+quantitatively or qualitatively, for any purposes whatsoever, including
+creating a Derivative Database (subject to other rights over the
+Contents, see Section 2.4). The repeated and systematic Extraction or
+Re-utilisation of insubstantial parts of the Contents may however amount
+to the Extraction or Re-utilisation of a Substantial part of the
+Contents.
+
+7.0 Warranties and Disclaimer
+7.1 The Database is licensed by the Licensor “as is” and without any
+warranty of any kind, either express, implied, or arising by statute,
+custom, course of dealing, or trade usage. Licensor specifically
+disclaims any and all implied warranties or conditions of title,
+non-infringement, accuracy or completeness, the presence or absence of
+errors, fitness for a particular purpose, merchantability, or otherwise.
+Some jurisdictions do not allow the exclusion of implied warranties, so
+this exclusion may not apply to You.
+
+8.0 Limitation of liability
+8.1 Subject to any liability that may not be excluded or limited by law,
+the Licensor is not liable for, and expressly excludes, all liability
+for loss or damage however and whenever caused to anyone by any use
+under this License, whether by You or by anyone else, and whether caused
+by any fault on the part of the Licensor or not. This exclusion of
+liability includes, but is not limited to, any special, incidental,
+consequential, punitive, or exemplary damages such as loss of revenue,
+data, anticipated profits, and lost business. This exclusion applies
+even if the Licensor has been advised of the possibility of such
+damages.
+
+8.2 If liability may not be excluded by law, it is limited to actual and
+direct financial loss to the extent it is caused by proved negligence on
+the part of the Licensor.
+
+9.0 Termination of Your rights under this License
+9.1 Any breach by You of the terms and conditions of this License
+automatically terminates this License with immediate effect and without
+notice to You. For the avoidance of doubt, Persons who have received the
+Database, the whole or a Substantial part of the Contents, Derivative
+Databases, or the Database as part of a Collective Database from You
+under this License will not have their licenses terminated provided
+their use is in full compliance with this License or a license granted
+under Section 4.8 of this License. Sections 1, 2, 7, 8, 9 and 10 will
+survive any termination of this License.
+
+9.2 If You are not in breach of the terms of this License, the Licensor
+will not terminate Your rights under it.
+
+9.3 Unless terminated under Section 9.1, this License is granted to You
+for the duration of applicable rights in the Database.
+
+9.4 Reinstatement of rights. If you cease any breach of the terms and
+conditions of this License, then your full rights under this License
+will be reinstated:
+
+ a. Provisionally and subject to permanent termination until the 60th
+day after cessation of breach;
+
+ b. Permanently on the 60th day after cessation of breach unless
+otherwise reasonably notified by the Licensor; or
+
+ c. Permanently if reasonably notified by the Licensor of the
+violation, this is the first time You have received notice of
+violation of this License from the Licensor, and You cure the
+violation prior to 30 days after your receipt of the notice.
+
+Persons subject to permanent termination of rights are not eligible to
+be a recipient and receive a license under Section 4.8.
+
+9.5 Notwithstanding the above, Licensor reserves the right to release
+the Database under different license terms or to stop distributing or
+making available the Database. Releasing the Database under different
+license terms or stopping the distribution of the Database will not
+withdraw this License (or any other license that has been, or is
+required to be, granted under the terms of this License), and this
+License will continue in full force and effect unless terminated as
+stated above.
+
+10.0 General
+10.1 If any provision of this License is held to be invalid or
+unenforceable, that must not affect the validity or enforceability of
+the remainder of the terms and conditions of this License and each
+remaining provision of this License shall be valid and enforced to the
+fullest extent permitted by law.
+
+10.2 This License is the entire agreement between the parties with
+respect to the rights granted here over the Database. It replaces any
+earlier understandings, agreements or representations with respect to
+the Database.
+
+10.3 If You are in breach of the terms of this License, You will not be
+entitled to rely on the terms of this License or to complain of any
+breach by the Licensor.
+
+10.4 Choice of law. This License takes effect in and will be governed by
+the laws of the relevant jurisdiction in which the License terms are
+sought to be enforced. If the standard suite of rights granted under
+applicable copyright law and Database Rights in the relevant
+jurisdiction includes additional rights not granted under this License,
+these additional rights are granted in this License in order to meet the
+terms of this License.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6986de6
--- /dev/null
+++ b/README.md
@@ -0,0 +1,96 @@
+# Timezone Boundary Builder
+
+The goal of this project is to produce a shapefile with the boundaries of the world's timezones using OpenStreetMap data.
+
+<p align="center"><img src="2018i.png" /></p>
+
+[![Github downloads for all releases](https://img.shields.io/github/downloads/evansiroky/timezone-boundary-builder/total.svg)](https://www.somsubhra.com/github-release-stats/?username=evansiroky&repository=timezone-boundary-builder) [![GitHub release](https://img.shields.io/github/release/evansiroky/timezone-boundary-builder.svg)](https://github.com/evansiroky/timezone-boundary-builder/releases/latest)
+
+
+## Shapefiles and data
+
+The shapefiles are available for download in this project's [releases](https://github.com/evansiroky/timezone-boundary-builder/releases). As of release 2018d shapefiles are available with or without oceans. Each shape or geojson object has a single attribute or property respectively called `tzid`. The tzid corresponds to the timezone name as defined in the [timezone database](https://www.iana.org/time-zones) (for example: `America/Los_Angeles` or `Asia/Shanghai`).
+
+This project aims to stay up-to-date with all of the currently valid timezones that are defined in the timezone database. This project also will attempt to provide the most accurate possible boundaries of timezones according to community input.
+
+The underlying data is downloaded from [OpenStreetMap](http://www.openstreetmap.org/) via the [overpass turbo API](http://overpass-turbo.eu/). Various boundaries are assembled together to produce each zone with various geographic operations. In numerous edge cases arbitrary boundaries get created in various zones which are noted in the `timezones.json` file.
+
+To maintain consistency with the timezone database, this project will only create a new release after the timezone database creates a new release. If there are no new timezones created or deleted in a timezone database release, then this project will only create a release if there have been changes performed to the boundary definitions of an existing zone within this project.
+
+## Lookup Libraries
+
+A few common languages already have libraries with an API that can be used to lookup the timezone name at a particular GPS coordinate. Here are some libraries that use the data produced by timezone-boundary-builder:
+
+| Library | Language |
+| -- | -- |
+| [ZoneDetect](https://github.com/BertoldVdb/ZoneDetect) | C |
+| [go-tz](https://github.com/ugjka/go-tz) | Go |
+| [timezoneLookup](https://github.com/evanoberholster/timezoneLookup) | Go |
+| [TimeZoneMap](https://github.com/dustin-johnson/timezonemap) | Java & Android |
+| [Timeshape](https://github.com/RomanIakovlev/timeshape) | Java |
+| [node-geo-tz](https://github.com/evansiroky/node-geo-tz/) | JavaScript (node.js only) |
+| [timespace](https://github.com/mapbox/timespace) | JavaScript (node.js and in browser) |
+| [tz-lookup](https://github.com/darkskyapp/tz-lookup/) | JavaScript (node.js and in browser) |
+| [GeoTimezone](https://github.com/mj1856/GeoTimeZone) | .NET |
+| [Geo-Timezone](https://github.com/minube/geo-timezone) | php |
+| [timezonefinder](https://github.com/MrMinimal64/timezonefinder) | Python |
+| [lutz](https://github.com/ateucher/lutz) | R |
+
+Another common way to use the data for lookup purposes is to load the shapefile into a spatially-aware database. See this [blog post](https://simonwillison.net/2017/Dec/12/location-time-zone-api/) for an example of how that can be done.
+
+## Running the script
+
+If the data in the releases are not sufficiently recent or you want to build the latest from master, it is possible to run the script to generate the timezones. However, due to the ever-changing nature of OpenStreetMap, the script should be considered unstable. The script frequently breaks when unexpected data is received or changes in OpenStreetMap cause validation issues. Please see the [troubleshooting guide](https://github.com/evansiroky/timezone-boundary-builder/wiki/Troubleshooting) for help with common errors.
+
+**Run the script to generate timezones for all timezones.**
+
+```shell
+node --max-old-space-size=8192 index.js
+```
+
+**Run the script to generate timezones for only specified timezones.**
+
+```shell
+node --max-old-space-size=8192 index.js --filtered-zones "America/New_York,America/Chicago"
+```
+
+### What the script does
+
+There are three config files that describe the boundary building process. The `osmBoundarySources.json` file lists all of the needed boundaries to extract via queries to the Overpass API. The `timezones.json` file lists all of the timezones and various operations to perform to build the boundaries. The `expectedZoneOverlaps.json` file lists all timezones that are allowed to overlap each other and the acceptable bounds of a particular overlap.
+
+The `index.js` file downloads all of the required geometries, builds the specified geometries, validates that there aren't large areas of overlap (other than those that are expected), outputs one huge geojson file, and finally zips up the geojson file using the `zip` cli and also converts the geojson to a shapefile using the `ogr2ogr` cli. The script has only been verified to run with Node.js 10 on the MacOS platform.
+
+The code does query the publicly available Overpass API, but it self-throttles the making of requests to have a minimum of 4 seconds gap between requests. If the Overpass API throttles the download, then the gap will be increased exponentially.
+
+## Limitations of this project
+
+The data is almost completely comprised of OpenStreetMap data which is editable by anyone. There are a few guesses on where to draw an arbitrary border in the open waters and a few sparsely inhabited areas. Some uninhabited islands are omitted from this project. This project does include timezones in the oceans, but strictly uses territorial waters or Etc/GMT timezones instead of unofficially observed areas such as Exclusive Economic Zones.
+
+## Contributing
+
+Pull requests are welcome! Please follow the guidelines listed below:
+
+### Improvements to code
+
+Will be approved subject to code review.
+
+### Changes to timezone boundary configuration
+
+Any change to the boundary of existing timezones must have some explanation of why the change is necessary. If there are official, publicly available documents of administrative areas describing their timezone boundary please link to them when making your case. All changes involving an administrative area changing their observed time should instead be sent to the [timezone database](https://www.iana.org/time-zones).
+
+A linting script will verify the integrity of the `timezones.json`, `osmBoundarySources.json` and `expectedZoneOverlaps.json` files. The script verifies if all needed overpass sources are properly defined and that there aren't any unneeded overpass downloads. If an operation to make a timezone boundary requires the use of a manual geometry, a description must be added explaining the operation. All expected zone overlaps must have a description.
+
+## Thanks
+
+Thanks to following people whose open-source and open-data contributions have made this project possible:
+
+- All the maintainers of the [timezone database](https://www.iana.org/time-zones).
+- Eric Muller for constructing and maintaining the timezone shapefile at [efele.net](http://efele.net/maps/tz/world/).
+- The [OpenStreetMap contributor Shinigami](https://www.openstreetmap.org/user/Shinigami) for making lots of edits in OpenStreetMap of various timezone boundaries.
+- [Björn Harrtell](https://github.com/bjornharrtell) for all his work and help with [jsts](https://github.com/bjornharrtell/jsts).
+
+## Licenses
+
+The code used to construct the timezone boundaries is licensed under the [MIT License](https://opensource.org/licenses/MIT).
+
+The outputted data is licensed under the [Open Data Commons Open Database License (ODbL)](http://opendatacommons.org/licenses/odbl/).
diff --git a/expectedZoneOverlaps.json b/expectedZoneOverlaps.json
new file mode 100644
index 0000000..d00c82b
--- /dev/null
+++ b/expectedZoneOverlaps.json
@@ -0,0 +1,107 @@
+{
+ "Africa/Juba-Africa/Khartoum": [
+ {
+ "bounds": [27.8, 9.3, 29.1, 10.2],
+ "description": "Allow disputed Abyei Area (https://en.wikipedia.org/wiki/Abyei) to overlap."
+ }, {
+ "bounds": [23.4, 8.6, 24.9, 9.9],
+ "description": "Allow disputed Kafia Kingi region (https://en.wikipedia.org/wiki/Kafia_Kingi) to overlap."
+ }
+ ],
+ "America/Argentina/Rio_Gallegos-America/Punta_Arenas": [
+ {
+ "bounds": [-73.6, -49.8, -73, -49.2],
+ "description": "Allow disputed Southern Patagonia Ice Field are (https://en.wikipedia.org/wiki/Argentina%E2%80%93Chile_relations#Border_issues) to overlap."
+ }
+ ],
+ "America/La_Paz-America/Porto_Velho": [
+ {
+ "bounds": [-65.4, -10.9, -65.3, -10.7],
+ "description": "Allow disputed area of Isla Suárez (https://en.wikipedia.org/wiki/Isla_Su%C3%A1rez) to overlap."
+ }
+ ],
+ "America/Moncton-America/New_York": [
+ {
+ "bounds": [-67.4, 44.2, -66.9, 44.8],
+ "description": "Allow disputed area near Machias Seal Island (https://en.wikipedia.org/wiki/Machias_Seal_Island) to overlap."
+ }
+ ],
+ "Asia/Hebron-Asia/Jerusalem": [
+ {
+ "bounds": [34.8, 31.3, 35.6, 32.6],
+ "description": "Allow disputed areas in Jerusalem (https://en.wikipedia.org/wiki/Borders_of_Israel#Status_of_Jerusalem) and Oslo Occord Areas B and C (see https://github.com/evansiroky/timezone-boundary-builder/issues/53 for discussion) to overlap."
+ }
+ ],
+ "Asia/Ho_Chi_Minh-Asia/Manila": [
+ {
+ "bounds": [114.1, 10.9, 114.2, 11],
+ "description": "Allow disputed area near Gaven Reefs (https://en.wikipedia.org/wiki/Gaven_Reefs) to overlap."
+ }
+ ],
+ "Asia/Ho_Chi_Minh-Asia/Shanghai": [
+ {
+ "bounds": [114, 10.1, 114.3, 11],
+ "description": "Allow disputed area near Gaven Reefs (https://en.wikipedia.org/wiki/Gaven_Reefs) to overlap."
+ }, {
+ "bounds": [114.4, 9.8, 114.6, 10],
+ "description": "Allow disputed area near Hughes Reef (https://en.wikipedia.org/wiki/Hughes_Reef) to overlap."
+ }, {
+ "bounds": [115.4, 9.8, 115.6, 10],
+ "description": "Allow disputed area near Mischief Reef (https://en.wikipedia.org/wiki/Mischief_Reef) to overlap."
+ }, {
+ "bounds": [114.2, 9.6, 114.4, 9.8],
+ "description": "Allow disputed area near Johnson South Reef (https://en.wikipedia.org/wiki/Johnson_South_Reef) to overlap."
+ }, {
+ "bounds": [112.8, 9.5, 113.1, 9.8],
+ "description": "Allow disputed area near Fiery Cross Reef (https://en.wikipedia.org/wiki/Fiery_Cross_Reef) to overlap."
+ }, {
+ "bounds": [112.7, 8.8, 112.9, 8.9],
+ "description": "Allow disputed area near Cuarteron Reef (https://en.wikipedia.org/wiki/Cuarteron_Reef) to overlap."
+ }, {
+ "bounds": [110.9, 15.5, 113, 17.4],
+ "description": "Allow disputed area near Paracel Islands (https://en.wikipedia.org/wiki/Paracel_Islands) to overlap."
+ }
+ ],
+ "Asia/Manila-Asia/Shanghai": [
+ {
+ "bounds": [114.1, 10.9, 114.2, 11],
+ "description": "Allow disputed area near Gaven Reefs (https://en.wikipedia.org/wiki/Gaven_Reefs) to overlap."
+ }
+ ],
+ "Asia/Shanghai-Asia/Thimphu": [
+ {
+ "bounds": [88.9, 27.2, 89.2, 27.7],
+ "description": "Allow disputed area near Doklam to overlap (See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam)"
+ }
+ ],
+ "Asia/Shanghai-Asia/Urumqi": [
+ {
+ "bounds": [73.4, 34.3, 96.4, 49.2],
+ "description": "Xinjiang time might be used by some locals in Xinjiang. https://en.wikipedia.org/wiki/Xinjiang_Time"
+ }
+ ],
+ "Europe/Amsterdam-Europe/Berlin": [
+ {
+ "bounds": [6.3, 53.3, 7.2, 53.8],
+ "description": "Allow dispupted maritime border near the Ems estuary to overlap. https://en.wikipedia.org/wiki/Germany%E2%80%93Netherlands_border#Disputes"
+ }
+ ],
+ "Europe/Belgrade-Europe/Zagreb": [
+ {
+ "bounds": [18.8, 45.2, 19.3, 46],
+ "description": "Allow disupted borders of Croatia and Serbia to overlap. https://en.wikipedia.org/wiki/Croatia%E2%80%93Serbia_border_dispute"
+ }
+ ],
+ "Europe/Berlin-Europe/Luxembourg": [
+ {
+ "bounds": [6.1, 49.4, 6.6, 50.2],
+ "description": "Allow entire border of Germany and Luxembourg to overlap as most of it is a condominium. https://opinionator.blogs.nytimes.com/2012/01/23/the-worlds-most-exclusive-condominium/"
+ }
+ ],
+ "Europe/Paris-Europe/Rome": [
+ {
+ "bounds": [6.8, 45.8, 6.9, 45.9],
+ "description": "Allow disputed areas near Mont Blanc (https://en.wikipedia.org/wiki/Mont_Blanc#Ownership_of_the_summit) and Dôme du Goûter (https://en.wikipedia.org/wiki/D%C3%B4me_du_Go%C3%BBter) to overlap."
+ }
+ ]
+}
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..72b367b
--- /dev/null
+++ b/index.js
@@ -0,0 +1,745 @@
+var exec = require('child_process').exec
+var fs = require('fs')
+
+var area = require('@mapbox/geojson-area')
+var geojsonhint = require('@mapbox/geojsonhint')
+var bbox = require('@turf/bbox').default
+var helpers = require('@turf/helpers')
+var multiPolygon = helpers.multiPolygon
+var polygon = helpers.polygon
+var asynclib = require('async')
+var jsts = require('jsts')
+var rimraf = require('rimraf')
+var overpass = require('query-overpass')
+
+const ProgressStats = require('./progressStats')
+
+var osmBoundarySources = require('./osmBoundarySources.json')
+var zoneCfg = require('./timezones.json')
+var expectedZoneOverlaps = require('./expectedZoneOverlaps.json')
+
+// allow building of only a specified zones
+var filteredIndex = process.argv.indexOf('--filtered-zones')
+let filteredZones = []
+if (filteredIndex > -1 && process.argv[filteredIndex + 1]) {
+ filteredZones = process.argv[filteredIndex + 1].split(',')
+ var newZoneCfg = {}
+ filteredZones.forEach((zoneName) => {
+ newZoneCfg[zoneName] = zoneCfg[zoneName]
+ })
+ zoneCfg = newZoneCfg
+
+ // filter out unneccessary downloads
+ var newOsmBoundarySources = {}
+ Object.keys(zoneCfg).forEach((zoneName) => {
+ zoneCfg[zoneName].forEach((op) => {
+ if (op.source === 'overpass') {
+ newOsmBoundarySources[op.id] = osmBoundarySources[op.id]
+ }
+ })
+ })
+
+ osmBoundarySources = newOsmBoundarySources
+}
+
+var geoJsonReader = new jsts.io.GeoJSONReader()
+var geoJsonWriter = new jsts.io.GeoJSONWriter()
+var precisionModel = new jsts.geom.PrecisionModel(1000000)
+var precisionReducer = new jsts.precision.GeometryPrecisionReducer(precisionModel)
+var distZones = {}
+var minRequestGap = 4
+var curRequestGap = 4
+
+var safeMkdir = function (dirname, callback) {
+ fs.mkdir(dirname, function (err) {
+ if (err && err.code === 'EEXIST') {
+ callback()
+ } else {
+ callback(err)
+ }
+ })
+}
+
+var debugGeo = function (op, a, b, reducePrecision) {
+ var result
+
+ if (reducePrecision) {
+ a = precisionReducer.reduce(a)
+ b = precisionReducer.reduce(b)
+ }
+
+ try {
+ switch (op) {
+ case 'union':
+ result = a.union(b)
+ break
+ case 'intersection':
+ result = a.intersection(b)
+ break
+ case 'intersects':
+ result = a.intersects(b)
+ break
+ case 'diff':
+ result = a.difference(b)
+ break
+ default:
+ var err = new Error('invalid op: ' + op)
+ throw err
+ }
+ } catch (e) {
+ if (e.name === 'TopologyException') {
+ console.log('Encountered TopologyException, retry with GeometryPrecisionReducer')
+ return debugGeo(op, a, b, true)
+ }
+ console.log('op err')
+ console.log(e)
+ console.log(e.stack)
+ fs.writeFileSync('debug_' + op + '_a.json', JSON.stringify(geoJsonWriter.write(a)))
+ fs.writeFileSync('debug_' + op + '_b.json', JSON.stringify(geoJsonWriter.write(b)))
+ throw e
+ }
+
+ return result
+}
+
+var fetchIfNeeded = function (file, superCallback, downloadCallback, fetchFn) {
+ // check for file that got downloaded
+ fs.stat(file, function (err) {
+ if (!err) {
+ // file found, skip download steps
+ return superCallback()
+ }
+ // check for manual file that got fixed and needs validation
+ var fixedFile = file.replace('.json', '_fixed.json')
+ fs.stat(fixedFile, function (err) {
+ if (!err) {
+ // file found, return fixed file
+ return downloadCallback(null, require(fixedFile))
+ }
+ // no manual fixed file found, download from overpass
+ fetchFn()
+ })
+ })
+}
+
+var geoJsonToGeom = function (geoJson) {
+ try {
+ return geoJsonReader.read(JSON.stringify(geoJson))
+ } catch (e) {
+ console.error('error converting geojson to geometry')
+ fs.writeFileSync('debug_geojson_read_error.json', JSON.stringify(geoJson))
+ throw e
+ }
+}
+
+var geomToGeoJson = function (geom) {
+ return geoJsonWriter.write(geom)
+}
+
+var geomToGeoJsonString = function (geom) {
+ return JSON.stringify(geoJsonWriter.write(geom))
+}
+
+const downloadProgress = new ProgressStats(
+ 'Downloading',
+ Object.keys(osmBoundarySources).length
+)
+
+var downloadOsmBoundary = function (boundaryId, boundaryCallback) {
+ var cfg = osmBoundarySources[boundaryId]
+ var query = '[out:json][timeout:60];('
+ if (cfg.way) {
+ query += 'way'
+ } else {
+ query += 'relation'
+ }
+ var boundaryFilename = './downloads/' + boundaryId + '.json'
+ var debug = 'getting data for ' + boundaryId
+ var queryKeys = Object.keys(cfg)
+
+ for (var i = queryKeys.length - 1; i >= 0; i--) {
+ var k = queryKeys[i]
+ if (k === 'way') continue
+ var v = cfg[k]
+
+ query += '["' + k + '"="' + v + '"]'
+ }
+
+ query += ';);out body;>;out meta qt;'
+
+ downloadProgress.beginTask(debug, true)
+
+ asynclib.auto({
+ downloadFromOverpass: function (cb) {
+ console.log('downloading from overpass')
+ fetchIfNeeded(boundaryFilename, boundaryCallback, cb, function () {
+ var overpassResponseHandler = function (err, data) {
+ if (err) {
+ console.log(err)
+ console.log('Increasing overpass request gap')
+ curRequestGap *= 2
+ makeQuery()
+ } else {
+ console.log('Success, decreasing overpass request gap')
+ curRequestGap = Math.max(minRequestGap, curRequestGap / 2)
+ cb(null, data)
+ }
+ }
+ var makeQuery = function () {
+ console.log('waiting ' + curRequestGap + ' seconds')
+ setTimeout(function () {
+ overpass(query, overpassResponseHandler, { flatProperties: true })
+ }, curRequestGap * 1000)
+ }
+ makeQuery()
+ })
+ },
+ validateOverpassResult: ['downloadFromOverpass', function (results, cb) {
+ var data = results.downloadFromOverpass
+ if (!data.features) {
+ var err = new Error('Invalid geojson for boundary: ' + boundaryId)
+ return cb(err)
+ }
+ if (data.features.length === 0) {
+ console.error('No data for the following query:')
+ console.error(query)
+ console.error('To read more about this error, please visit https://git.io/vxKQL')
+ return cb(new Error('No data found for from overpass query'))
+ }
+ cb()
+ }],
+ saveSingleMultiPolygon: ['validateOverpassResult', function (results, cb) {
+ var data = results.downloadFromOverpass
+ var combined
+
+ // union all multi-polygons / polygons into one
+ for (var i = data.features.length - 1; i >= 0; i--) {
+ var curOsmGeom = data.features[i].geometry
+ const curOsmProps = data.features[i].properties
+ if (
+ (curOsmGeom.type === 'Polygon' || curOsmGeom.type === 'MultiPolygon') &&
+ curOsmProps.type === 'boundary' // need to make sure enclaves aren't unioned
+ ) {
+ console.log('combining border')
+ let errors = geojsonhint.hint(curOsmGeom)
+ if (errors && errors.length > 0) {
+ const stringifiedGeojson = JSON.stringify(curOsmGeom, null, 2)
+ errors = geojsonhint.hint(stringifiedGeojson)
+ console.error('Invalid geojson received in Overpass Result')
+ console.error('Overpass query: ' + query)
+ const problemFilename = boundaryId + '_convert_to_geom_error.json'
+ fs.writeFileSync(problemFilename, stringifiedGeojson)
+ console.error('saved problem file to ' + problemFilename)
+ console.error('To read more about this error, please visit https://git.io/vxKQq')
+ return cb(errors)
+ }
+ try {
+ var curGeom = geoJsonToGeom(curOsmGeom)
+ } catch (e) {
+ console.error('error converting overpass result to geojson')
+ console.error(e)
+
+ fs.writeFileSync(boundaryId + '_convert_to_geom_error-all-features.json', JSON.stringify(data))
+ return cb(e)
+ }
+ if (!combined) {
+ combined = curGeom
+ } else {
+ combined = debugGeo('union', curGeom, combined)
+ }
+ }
+ }
+ try {
+ fs.writeFile(boundaryFilename, geomToGeoJsonString(combined), cb)
+ } catch (e) {
+ console.error('error writing combined border to geojson')
+ fs.writeFileSync(boundaryId + '_combined_border_convert_to_geom_error.json', JSON.stringify(data))
+ return cb(e)
+ }
+ }]
+ }, boundaryCallback)
+}
+
+var getTzDistFilename = function (tzid) {
+ return './dist/' + tzid.replace(/\//g, '__') + '.json'
+}
+
+/**
+ * Get the geometry of the requested source data
+ *
+ * @return {Object} geom The geometry of the source
+ * @param {Object} source An object representing the data source
+ * must have `source` key and then either:
+ * - `id` if from a file
+ * - `id` if from a file
+ */
+var getDataSource = function (source) {
+ var geoJson
+ if (source.source === 'overpass') {
+ geoJson = require('./downloads/' + source.id + '.json')
+ } else if (source.source === 'manual-polygon') {
+ geoJson = polygon(source.data).geometry
+ } else if (source.source === 'manual-multipolygon') {
+ geoJson = multiPolygon(source.data).geometry
+ } else if (source.source === 'dist') {
+ geoJson = require(getTzDistFilename(source.id))
+ } else {
+ var err = new Error('unknown source: ' + source.source)
+ throw err
+ }
+ return geoJsonToGeom(geoJson)
+}
+
+/**
+ * Post process created timezone boundary.
+ * - remove small holes and exclaves
+ * - reduce geometry precision
+ *
+ * @param {Geometry} geom The jsts geometry of the timezone
+ * @param {boolean} returnAsObject if true, return as object, otherwise return stringified
+ * @return {Object|String} geojson as object or stringified
+ */
+var postProcessZone = function (geom, returnAsObject) {
+ // reduce precision of geometry
+ const geojson = geomToGeoJson(precisionReducer.reduce(geom))
+
+ // iterate through all polygons
+ const filteredPolygons = []
+ let allPolygons = geojson.coordinates
+ if (geojson.type === 'Polygon') {
+ allPolygons = [geojson.coordinates]
+ }
+
+ allPolygons.forEach((curPolygon, idx) => {
+ // remove any polygon with very small area
+ const polygonFeature = polygon(curPolygon)
+ const polygonArea = area.geometry(polygonFeature.geometry)
+
+ if (polygonArea < 1) return
+
+ // find all holes
+ const filteredLinearRings = []
+
+ curPolygon.forEach((curLinearRing, lrIdx) => {
+ if (lrIdx === 0) {
+ // always keep first linearRing
+ filteredLinearRings.push(curLinearRing)
+ } else {
+ const polygonFromLinearRing = polygon([curLinearRing])
+ const linearRingArea = area.geometry(polygonFromLinearRing.geometry)
+
+ // only include holes with relevant area
+ if (linearRingArea > 1) {
+ filteredLinearRings.push(curLinearRing)
+ }
+ }
+ })
+
+ filteredPolygons.push(filteredLinearRings)
+ })
+
+ // recompile to geojson string
+ const newGeojson = {
+ type: geojson.type
+ }
+
+ if (geojson.type === 'Polygon') {
+ newGeojson.coordinates = filteredPolygons[0]
+ } else {
+ newGeojson.coordinates = filteredPolygons
+ }
+
+ return returnAsObject ? newGeojson : JSON.stringify(newGeojson)
+}
+
+const buildingProgress = new ProgressStats(
+ 'Building',
+ Object.keys(zoneCfg).length
+)
+
+var makeTimezoneBoundary = function (tzid, callback) {
+ buildingProgress.beginTask(`makeTimezoneBoundary for ${tzid}`, true)
+
+ var ops = zoneCfg[tzid]
+ var geom
+
+ asynclib.eachSeries(ops, function (task, cb) {
+ var taskData = getDataSource(task)
+ console.log('-', task.op, task.id)
+ if (task.op === 'init') {
+ geom = taskData
+ } else if (task.op === 'intersect') {
+ geom = debugGeo('intersection', geom, taskData)
+ } else if (task.op === 'difference') {
+ geom = debugGeo('diff', geom, taskData)
+ } else if (task.op === 'difference-reverse-order') {
+ geom = debugGeo('diff', taskData, geom)
+ } else if (task.op === 'union') {
+ geom = debugGeo('union', geom, taskData)
+ } else {
+ var err = new Error('unknown op: ' + task.op)
+ return cb(err)
+ }
+ cb()
+ },
+ function (err) {
+ if (err) { return callback(err) }
+ fs.writeFile(getTzDistFilename(tzid),
+ postProcessZone(geom),
+ callback)
+ })
+}
+
+var loadDistZonesIntoMemory = function () {
+ console.log('load zones into memory')
+ var zones = Object.keys(zoneCfg)
+ var tzid
+
+ for (var i = 0; i < zones.length; i++) {
+ tzid = zones[i]
+ distZones[tzid] = getDataSource({ source: 'dist', id: tzid })
+ }
+}
+
+var getDistZoneGeom = function (tzid) {
+ return distZones[tzid]
+}
+
+var roundDownToTenth = function (n) {
+ return Math.floor(n * 10) / 10
+}
+
+var roundUpToTenth = function (n) {
+ return Math.ceil(n * 10) / 10
+}
+
+var formatBounds = function (bounds) {
+ let boundsStr = '['
+ boundsStr += roundDownToTenth(bounds[0]) + ', '
+ boundsStr += roundDownToTenth(bounds[1]) + ', '
+ boundsStr += roundUpToTenth(bounds[2]) + ', '
+ boundsStr += roundUpToTenth(bounds[3]) + ']'
+ return boundsStr
+}
+
+var validateTimezoneBoundaries = function () {
+ const numZones = Object.keys(zoneCfg).length
+ const validationProgress = new ProgressStats(
+ 'Validation',
+ numZones * (numZones + 1) / 2
+ )
+
+ console.log('do validation... this may take a few minutes')
+ var allZonesOk = true
+ var zones = Object.keys(zoneCfg)
+ var lastPct = 0
+ var compareTzid, tzid, zoneGeom
+
+ for (var i = 0; i < zones.length; i++) {
+ tzid = zones[i]
+ zoneGeom = getDistZoneGeom(tzid)
+
+ for (var j = i + 1; j < zones.length; j++) {
+ const curPct = Math.floor(validationProgress.getPercentage())
+ if (curPct % 10 === 0 && curPct !== lastPct) {
+ validationProgress.printStats('Validating zones', true)
+ lastPct = curPct
+ }
+ compareTzid = zones[j]
+
+ var compareZoneGeom = getDistZoneGeom(compareTzid)
+
+ var intersects = false
+ try {
+ intersects = debugGeo('intersects', zoneGeom, compareZoneGeom)
+ } catch (e) {
+ console.warn('warning, encountered intersection error with zone ' + tzid + ' and ' + compareTzid)
+ }
+ if (intersects) {
+ var intersectedGeom = debugGeo('intersection', zoneGeom, compareZoneGeom)
+ var intersectedArea = intersectedGeom.getArea()
+
+ if (intersectedArea > 0.0001) {
+ // check if the intersected area(s) are one of the expected areas of overlap
+ const allowedOverlapBounds = expectedZoneOverlaps[`${tzid}-${compareTzid}`] || expectedZoneOverlaps[`${compareTzid}-${tzid}`]
+ const overlapsGeoJson = geoJsonWriter.write(intersectedGeom)
+
+ // these zones are allowed to overlap in certain places, make sure the
+ // found overlap(s) all fit within the expected areas of overlap
+ if (allowedOverlapBounds) {
+ // if the overlaps are a multipolygon, make sure each individual
+ // polygon of overlap fits within at least one of the expected
+ // overlaps
+ let overlapsPolygons
+ switch (overlapsGeoJson.type) {
+ case 'MultiPolygon':
+ overlapsPolygons = overlapsGeoJson.coordinates.map(
+ polygonCoords => ({
+ coordinates: polygonCoords,
+ type: 'Polygon'
+ })
+ )
+ break
+ case 'Polygon':
+ overlapsPolygons = [overlapsGeoJson]
+ break
+ case 'GeometryCollection':
+ overlapsPolygons = []
+ overlapsGeoJson.geometries.forEach(geom => {
+ if (geom.type === 'Polygon') {
+ overlapsPolygons.push(geom)
+ } else if (geom.type === 'MultiPolygon') {
+ geom.coordinates.forEach(polygonCoords => {
+ overlapsPolygons.push({
+ coordinates: polygonCoords,
+ type: 'Polygon'
+ })
+ })
+ }
+ })
+ break
+ default:
+ console.error('unexpected geojson overlap type')
+ console.log(overlapsGeoJson)
+ break
+ }
+
+ let allOverlapsOk = true
+ overlapsPolygons.forEach((polygon, idx) => {
+ const bounds = bbox(polygon)
+ const polygonArea = area.geometry(polygon)
+ if (
+ polygonArea > 10 && // ignore small polygons
+ !allowedOverlapBounds.some(allowedBounds =>
+ allowedBounds.bounds[0] <= bounds[0] && // minX
+ allowedBounds.bounds[1] <= bounds[1] && // minY
+ allowedBounds.bounds[2] >= bounds[2] && // maxX
+ allowedBounds.bounds[3] >= bounds[3] // maxY
+ )
+ ) {
+ console.error(`Unexpected intersection (${polygonArea} area) with bounds: ${formatBounds(bounds)}`)
+ allOverlapsOk = false
+ }
+ })
+
+ if (allOverlapsOk) continue
+ }
+
+ // at least one unexpected overlap found, output an error and write debug file
+ console.error('Validation error: ' + tzid + ' intersects ' + compareTzid + ' area: ' + intersectedArea)
+ const debugFilename = tzid.replace(/\//g, '-') + '-' + compareTzid.replace(/\//g, '-') + '-overlap.json'
+ fs.writeFileSync(
+ debugFilename,
+ JSON.stringify(overlapsGeoJson)
+ )
+ console.error('wrote overlap area as file ' + debugFilename)
+ console.error('To read more about this error, please visit https://git.io/vx6nx')
+ allZonesOk = false
+ }
+ }
+ validationProgress.logNext()
+ }
+ }
+
+ return allZonesOk ? null : 'Zone validation unsuccessful'
+}
+
+let oceanZoneBoundaries
+let oceanZones = [
+ { tzid: 'Etc/GMT-12', left: 172.5, right: 180 },
+ { tzid: 'Etc/GMT-11', left: 157.5, right: 172.5 },
+ { tzid: 'Etc/GMT-10', left: 142.5, right: 157.5 },
+ { tzid: 'Etc/GMT-9', left: 127.5, right: 142.5 },
+ { tzid: 'Etc/GMT-8', left: 112.5, right: 127.5 },
+ { tzid: 'Etc/GMT-7', left: 97.5, right: 112.5 },
+ { tzid: 'Etc/GMT-6', left: 82.5, right: 97.5 },
+ { tzid: 'Etc/GMT-5', left: 67.5, right: 82.5 },
+ { tzid: 'Etc/GMT-4', left: 52.5, right: 67.5 },
+ { tzid: 'Etc/GMT-3', left: 37.5, right: 52.5 },
+ { tzid: 'Etc/GMT-2', left: 22.5, right: 37.5 },
+ { tzid: 'Etc/GMT-1', left: 7.5, right: 22.5 },
+ { tzid: 'Etc/GMT', left: -7.5, right: 7.5 },
+ { tzid: 'Etc/GMT+1', left: -22.5, right: -7.5 },
+ { tzid: 'Etc/GMT+2', left: -37.5, right: -22.5 },
+ { tzid: 'Etc/GMT+3', left: -52.5, right: -37.5 },
+ { tzid: 'Etc/GMT+4', left: -67.5, right: -52.5 },
+ { tzid: 'Etc/GMT+5', left: -82.5, right: -67.5 },
+ { tzid: 'Etc/GMT+6', left: -97.5, right: -82.5 },
+ { tzid: 'Etc/GMT+7', left: -112.5, right: -97.5 },
+ { tzid: 'Etc/GMT+8', left: -127.5, right: -112.5 },
+ { tzid: 'Etc/GMT+9', left: -142.5, right: -127.5 },
+ { tzid: 'Etc/GMT+10', left: -157.5, right: -142.5 },
+ { tzid: 'Etc/GMT+11', left: -172.5, right: -157.5 },
+ { tzid: 'Etc/GMT+12', left: -180, right: -172.5 }
+]
+
+if (filteredZones.length > 0) {
+ oceanZones = oceanZones.filter(oceanZone => filteredZones.indexOf(oceanZone) > -1)
+}
+
+var addOceans = function (callback) {
+ console.log('adding ocean boundaries')
+ const zones = Object.keys(zoneCfg)
+
+ const oceanProgress = new ProgressStats(
+ 'Oceans',
+ oceanZones.length
+ )
+
+ oceanZoneBoundaries = oceanZones.map(zone => {
+ oceanProgress.beginTask(zone.tzid, true)
+ const geoJson = polygon([[
+ [zone.left, 90],
+ [zone.left, -90],
+ [zone.right, -90],
+ [zone.right, 90],
+ [zone.left, 90]
+ ]]).geometry
+
+ let geom = geoJsonToGeom(geoJson)
+
+ // diff against every zone
+ zones.forEach(distZone => {
+ geom = debugGeo('diff', geom, getDistZoneGeom(distZone))
+ })
+
+ return {
+ geom: postProcessZone(geom, true),
+ tzid: zone.tzid
+ }
+ })
+
+ callback()
+}
+
+var combineAndWriteZones = function (callback) {
+ var stream = fs.createWriteStream('./dist/combined.json')
+ var streamWithOceans = fs.createWriteStream('./dist/combined-with-oceans.json')
+ var zones = Object.keys(zoneCfg)
+
+ stream.write('{"type":"FeatureCollection","features":[')
+ streamWithOceans.write('{"type":"FeatureCollection","features":[')
+
+ for (var i = 0; i < zones.length; i++) {
+ if (i > 0) {
+ stream.write(',')
+ streamWithOceans.write(',')
+ }
+ var feature = {
+ type: 'Feature',
+ properties: { tzid: zones[i] },
+ geometry: geomToGeoJson(getDistZoneGeom(zones[i]))
+ }
+ const stringified = JSON.stringify(feature)
+ stream.write(stringified)
+ streamWithOceans.write(stringified)
+ }
+ oceanZoneBoundaries.forEach(boundary => {
+ streamWithOceans.write(',')
+ var feature = {
+ type: 'Feature',
+ properties: { tzid: boundary.tzid },
+ geometry: boundary.geom
+ }
+ streamWithOceans.write(JSON.stringify(feature))
+ })
+ asynclib.parallel([
+ cb => {
+ stream.end(']}', cb)
+ },
+ cb => {
+ streamWithOceans.end(']}', cb)
+ }
+ ], callback)
+}
+
+const autoScript = {
+ makeDownloadsDir: function (cb) {
+ overallProgress.beginTask('Creating downloads dir')
+ safeMkdir('./downloads', cb)
+ },
+ makeDistDir: function (cb) {
+ overallProgress.beginTask('Creating dist dir')
+ safeMkdir('./dist', cb)
+ },
+ getOsmBoundaries: ['makeDownloadsDir', function (results, cb) {
+ overallProgress.beginTask('Downloading osm boundaries')
+ asynclib.eachSeries(Object.keys(osmBoundarySources), downloadOsmBoundary, cb)
+ }],
+ createZones: ['makeDistDir', 'getOsmBoundaries', function (results, cb) {
+ overallProgress.beginTask('Creating timezone boundaries')
+ asynclib.each(Object.keys(zoneCfg), makeTimezoneBoundary, cb)
+ }],
+ validateZones: ['createZones', function (results, cb) {
+ overallProgress.beginTask('Validating timezone boundaries')
+ loadDistZonesIntoMemory()
+ if (process.argv.indexOf('no-validation') > -1) {
+ console.warn('WARNING: Skipping validation!')
+ cb()
+ } else {
+ cb(validateTimezoneBoundaries())
+ }
+ }],
+ addOceans: ['validateZones', function (results, cb) {
+ overallProgress.beginTask('Adding oceans')
+ addOceans(cb)
+ }],
+ mergeZones: ['addOceans', function (results, cb) {
+ overallProgress.beginTask('Merging zones')
+ combineAndWriteZones(cb)
+ }],
+ zipGeoJson: ['mergeZones', function (results, cb) {
+ overallProgress.beginTask('Zipping geojson')
+ exec('zip dist/timezones.geojson.zip dist/combined.json', cb)
+ }],
+ zipGeoJsonWithOceans: ['mergeZones', function (results, cb) {
+ overallProgress.beginTask('Zipping geojson with oceans')
+ exec('zip dist/timezones-with-oceans.geojson.zip dist/combined-with-oceans.json', cb)
+ }],
+ makeShapefile: ['mergeZones', function (results, cb) {
+ overallProgress.beginTask('Converting from geojson to shapefile')
+ rimraf.sync('dist/combined-shapefile.*')
+ exec(
+ 'ogr2ogr -f "ESRI Shapefile" dist/combined-shapefile.shp dist/combined.json',
+ function (err, stdout, stderr) {
+ if (err) { return cb(err) }
+ exec('zip dist/timezones.shapefile.zip dist/combined-shapefile.*', cb)
+ }
+ )
+ }],
+ makeShapefileWithOceans: ['mergeZones', function (results, cb) {
+ overallProgress.beginTask('Converting from geojson with oceans to shapefile')
+ rimraf.sync('dist/combined-shapefile-with-oceans.*')
+ exec(
+ 'ogr2ogr -f "ESRI Shapefile" dist/combined-shapefile-with-oceans.shp dist/combined-with-oceans.json',
+ function (err, stdout, stderr) {
+ if (err) { return cb(err) }
+ exec('zip dist/timezones-with-oceans.shapefile.zip dist/combined-shapefile-with-oceans.*', cb)
+ }
+ )
+ }],
+ makeListOfTimeZoneNames: function (cb) {
+ overallProgress.beginTask('Writing timezone names to file')
+ let zoneNames = Object.keys(zoneCfg)
+ oceanZones.forEach(oceanZone => {
+ zoneNames.push(oceanZone.tzid)
+ })
+ if (filteredZones.length > 0) {
+ zoneNames = zoneNames.filter(zoneName => filteredZones.indexOf(zoneName) > -1)
+ }
+ fs.writeFile(
+ 'dist/timezone-names.json',
+ JSON.stringify(zoneNames),
+ cb
+ )
+ }
+}
+
+const overallProgress = new ProgressStats('Overall', Object.keys(autoScript).length)
+
+asynclib.auto(autoScript, function (err, results) {
+ console.log('done')
+ if (err) {
+ console.log('error!', err)
+ }
+})
diff --git a/lint-json.js b/lint-json.js
new file mode 100644
index 0000000..95f2f55
--- /dev/null
+++ b/lint-json.js
@@ -0,0 +1,56 @@
+const osmBoundarySources = require('./osmBoundarySources.json')
+const zoneCfg = require('./timezones.json')
+const expectedZoneOverlaps = require('./expectedZoneOverlaps.json')
+
+let numErrors = 0
+
+const sourcesUsage = {}
+Object.keys(osmBoundarySources).forEach(source => {
+ sourcesUsage[source] = false
+})
+
+Object.keys(zoneCfg).forEach(zone => {
+ zoneCfg[zone].forEach((operation, idx) => {
+ if (operation.source === 'overpass') {
+ // check if source is defined
+ if (!osmBoundarySources[operation.id]) {
+ numErrors++
+
+ console.error(`No osmBoundarySources config found for entry: ${operation.id}`)
+ } else {
+ sourcesUsage[operation.id] = true
+ }
+ } else if (operation.source.indexOf('manual') > -1 &&
+ (!operation.description ||
+ operation.description.length < 3)) {
+ numErrors++
+
+ console.error(`No description of ${operation.source} for operation ${idx} of zone: ${zone}`)
+ }
+ })
+})
+
+// check for sources not used in timezone building
+Object.keys(sourcesUsage).forEach(source => {
+ if (!sourcesUsage[source]) {
+ numErrors++
+ console.error(`osmBoundarySources config "${source}" is never used in timezone boundary building`)
+ }
+})
+
+// Make sure all expected zone overlaps have a description
+Object.keys(expectedZoneOverlaps).forEach(zoneOverlap => {
+ expectedZoneOverlaps[zoneOverlap].forEach((overlapBounds, idx) => {
+ if (!overlapBounds.description || overlapBounds.description.length < 3) {
+ numErrors++
+ console.error(`Expected overlap #${idx} of zones ${zoneOverlap} missing description`)
+ }
+ })
+})
+
+if (numErrors > 0) {
+ console.error(`${numErrors} errors found`)
+ process.exit(1)
+} else {
+ console.log('No linting errors!')
+}
diff --git a/osmBoundarySources.json b/osmBoundarySources.json
new file mode 100644
index 0000000..405c3e0
--- /dev/null
+++ b/osmBoundarySources.json
@@ -0,0 +1,1474 @@
+{
+ "鲁林地区": {
+ "name": "鲁林地区"
+ },
+ "查马普地区": {
+ "name": "查马普地区"
+ },
+ "基伍地区": {
+ "name": "基伍地区"
+ },
+ "שטח B": {
+ "name:he": "שטח B"
+ },
+ "שטח C": {
+ "name:he": "שטח C"
+ },
+ "Acre": {
+ "ISO3166-2": "BR-AC"
+ },
+ "Adair County, KY": {
+ "name": "Adair County",
+ "nist:state_fips": "21"
+ },
+ "Afghanistan": {
+ "ISO3166-1": "AF"
+ },
+ "Aktobe": {
+ "ISO3166-2": "KZ-AKT"
+ },
+ "Alabama": {
+ "ISO3166-2": "US-AL"
+ },
+ "Alagoas": {
+ "ISO3166-2": "BR-AL"
+ },
+ "Albania": {
+ "ISO3166-1": "AL"
+ },
+ "Algeria": {
+ "ISO3166-1": "DZ"
+ },
+ "Altai Krai": {
+ "ISO3166-2": "RU-ALT"
+ },
+ "Altai Republic": {
+ "ISO3166-2": "RU-AL"
+ },
+ "Amur": {
+ "ISO3166-2": "RU-AMU"
+ },
+ "Andorra": {
+ "ISO3166-1": "AD"
+ },
+ "Angola": {
+ "ISO3166-1": "AO"
+ },
+ "Anguilla": {
+ "ISO3166-1": "AI"
+ },
+ "Antigua and Barbuda": {
+ "ISO3166-1": "AG"
+ },
+ "Argentina": {
+ "ISO3166-1": "AR"
+ },
+ "Armenia": {
+ "ISO3166-1": "AM"
+ },
+ "Arthur County, NE": {
+ "name": "Arthur County",
+ "nist:state_fips": "31"
+ },
+ "Aruba": {
+ "ISO3166-1": "AW"
+ },
+ "Astrakhan": {
+ "ISO3166-2": "RU-AST"
+ },
+ "Atyrau Region": {
+ "ISO3166-2": "KZ-ATY"
+ },
+ "Australia": {
+ "ISO3166-1": "AU"
+ },
+ "Australian Capital Territory": {
+ "ISO3166-2": "AU-ACT"
+ },
+ "Austria": {
+ "ISO3166-1": "AT"
+ },
+ "Autonomous Region of Bougainville": {
+ "ISO3166-2": "PG-NSB"
+ },
+ "Atikokan-tz": {
+ "timezone": "America/Atikokan"
+ },
+ "Azerbaijan": {
+ "ISO3166-1": "AZ"
+ },
+ "Åland Islands": {
+ "ISO3166-2": "FI-01"
+ },
+ "Bahia": {
+ "ISO3166-2": "BR-BA"
+ },
+ "Bahía de Banderas": {
+ "name": "Bahía de Banderas"
+ },
+ "Bahrain": {
+ "ISO3166-1": "BH"
+ },
+ "Bangladesh": {
+ "ISO3166-1": "BD"
+ },
+ "Barbados": {
+ "ISO3166-1": "BB"
+ },
+ "Bas-Uele": {
+ "name": "Bas-Uele",
+ "admin_level": "4"
+ },
+ "Bay County, FL": {
+ "name": "Bay County",
+ "nist:state_fips": "12"
+ },
+ "Belarus": {
+ "ISO3166-1": "BY"
+ },
+ "Belem-tz": {
+ "timezone": "America/Belem"
+ },
+ "Belgium": {
+ "ISO3166-1": "BE"
+ },
+ "Belize": {
+ "ISO3166-1": "BZ"
+ },
+ "Benin": {
+ "ISO3166-1": "BJ"
+ },
+ "Bermuda": {
+ "ISO3166-1": "BM"
+ },
+ "Bir Tawil": {
+ "alt_name:en": "Bi'r Tawīl"
+ },
+ "Bledsoe County, TN": {
+ "name": "Bledsoe County",
+ "nist:state_fips": "47"
+ },
+ "Buenos Aires": {
+ "ISO3166-2": "AR-B"
+ },
+ "Bhutan": {
+ "ISO3166-1": "BT"
+ },
+ "Boise-tz": {
+ "timezone": "America/Boise"
+ },
+ "Bolivia": {
+ "ISO3166-1": "BO"
+ },
+ "Bonaire, Sint Eustatius and Saba": {
+ "ISO3166-1": "BQ"
+ },
+ "Bosnia and Herzegovina": {
+ "ISO3166-1": "BA"
+ },
+ "Botswana": {
+ "ISO3166-1": "BW"
+ },
+ "Brazil": {
+ "ISO3166-1": "BR"
+ },
+ "Breckinridge County, KY": {
+ "name": "Breckinridge County",
+ "nist:state_fips": "21"
+ },
+ "British Indian Ocean Territory": {
+ "ISO3166-1": "IO"
+ },
+ "British Sovereign Base Areas": {
+ "name": "British Sovereign Base Areas"
+ },
+ "British Virgin Islands": {
+ "ISO3166-1": "VG"
+ },
+ "Broken_Hill-tz": {
+ "timezone": "Australia/Broken_Hill"
+ },
+ "Brunei": {
+ "ISO3166-1": "BN"
+ },
+ "Bulgaria": {
+ "ISO3166-1": "BG"
+ },
+ "Burkina Faso": {
+ "ISO3166-1": "BF"
+ },
+ "Burundi": {
+ "ISO3166-1": "BI"
+ },
+ "Buryatia": {
+ "ISO3166-2": "RU-BU"
+ },
+ "Calhoun County, FL": {
+ "name": "Calhoun County",
+ "nist:state_fips": "12"
+ },
+ "Cambridge Bay-tz": {
+ "timezone": "America/Cambridge_Bay"
+ },
+ "Cambodia": {
+ "ISO3166-1": "KH"
+ },
+ "Cameroon": {
+ "ISO3166-1": "CM"
+ },
+ "Canada": {
+ "ISO3166-1": "CA"
+ },
+ "Cancun-tz": {
+ "timezone": "America/Cancun"
+ },
+ "Cape Breton County": {
+ "name": "Cape Breton County"
+ },
+ "Cape Verde": {
+ "ISO3166-1": "CV"
+ },
+ "Catamarca": {
+ "ISO3166-2": "AR-K"
+ },
+ "Cayman Islands": {
+ "ISO3166-1": "KY"
+ },
+ "Central African Republic": {
+ "ISO3166-1": "CF"
+ },
+ "Central Kalimantan": {
+ "name:en": "Central Kalimantan"
+ },
+ "Chaco": {
+ "ISO3166-2": "AR-H"
+ },
+ "Chad": {
+ "ISO3166-1": "TD"
+ },
+ "Chase County, NE": {
+ "name": "Chase County",
+ "nist:state_fips": "31"
+ },
+ "Chihuahua": {
+ "ISO3166-2": "MX-CHH"
+ },
+ "Chile": {
+ "ISO3166-1": "CL"
+ },
+ "China": {
+ "ISO3166-1": "CN"
+ },
+ "Chubut": {
+ "ISO3166-2": "AR-U"
+ },
+ "Chukotka": {
+ "ISO3166-2": "RU-CHU"
+ },
+ "Chuuk": {
+ "ISO3166-2": "FM-TRK"
+ },
+ "Clark County, IN": {
+ "name": "Clark County",
+ "nist:state_fips": "18"
+ },
+ "Colombia": {
+ "ISO3166-1": "CO"
+ },
+ "Colorado": {
+ "ISO3166-2": "US-CO"
+ },
+ "Comoros": {
+ "ISO3166-1": "KM"
+ },
+ "Congo-Brazzaville": {
+ "ISO3166-1": "CG"
+ },
+ "Congo-Kinshasa": {
+ "ISO3166-1": "CD"
+ },
+ "Cook Islands": {
+ "ISO3166-1": "CK"
+ },
+ "Corrientes": {
+ "ISO3166-2": "AR-W"
+ },
+ "Coral Harbour-tz": {
+ "timezone": "America/Coral_Harbour"
+ },
+ "Corson County, SD": {
+ "name": "Corson County",
+ "nist:state_fips": "46"
+ },
+ "Costa Rica": {
+ "ISO3166-1": "CR"
+ },
+ "Córdoba": {
+ "ISO3166-2": "AR-X"
+ },
+ "Côte d'Ivoire": {
+ "ISO3166-1": "CI"
+ },
+ "Crawford County, IN": {
+ "name": "Crawford County",
+ "nist:state_fips": "18"
+ },
+ "Creston-tz": {
+ "timezone": "America/Creston"
+ },
+ "Crimea": {
+ "name:en": "Republic of Crimea"
+ },
+ "Croatia": {
+ "ISO3166-1": "HR"
+ },
+ "Cuba": {
+ "ISO3166-1": "CU"
+ },
+ "Curaçao": {
+ "ISO3166-1": "CW"
+ },
+ "Cumberland County, TN": {
+ "name": "Cumberland County",
+ "nist:state_fips": "47"
+ },
+ "Cyprus": {
+ "ISO3166-1": "CY"
+ },
+ "Czech Republic": {
+ "ISO3166-1": "CZ"
+ },
+ "Dawson Creek-tz": {
+ "timezone": "America/Dawson_Creek"
+ },
+ "Dearborn County, IN": {
+ "name": "Dearborn County",
+ "nist:state_fips": "18"
+ },
+ "Denver-tz": {
+ "timezone": "America/Denver"
+ },
+ "Departamento Atlántico": {
+ "name": "Departamento Atlántico"
+ },
+ "Denmark": {
+ "ISO3166-1": "DK"
+ },
+ "Dewey County, SD": {
+ "name": "Dewey County",
+ "nist:state_fips": "46"
+ },
+ "Dickinson County, MI": {
+ "name": "Dickinson County",
+ "nist:state_fips": "26"
+ },
+ "Djibouti": {
+ "ISO3166-1": "DJ"
+ },
+ "Doklam 洞郎地区": {
+ "name": "Doklam 洞郎地区"
+ },
+ "Dominica": {
+ "ISO3166-1": "DM"
+ },
+ "Dominican Republic": {
+ "ISO3166-1": "DO"
+ },
+ "Dornod": {
+ "ISO3166-2": "MN-061"
+ },
+ "Dubois County, IN": {
+ "name": "Dubois County",
+ "nist:state_fips": "18"
+ },
+ "Dundy County, NE": {
+ "name": "Dundy County",
+ "nist:state_fips": "31"
+ },
+ "East Java": {
+ "name:en": "East Java"
+ },
+ "East Timor": {
+ "ISO3166-1": "TL"
+ },
+ "Ecuador": {
+ "ISO3166-1": "EC"
+ },
+ "Edmonton-tz": {
+ "timezone": "America/Edmonton"
+ },
+ "Egypt": {
+ "ISO3166-1": "EG"
+ },
+ "Eirunepe-tz": {
+ "timezone": "America/Eirunepe"
+ },
+ "El Salvador": {
+ "ISO3166-1": "SV"
+ },
+ "Entre Ríos": {
+ "ISO3166-2": "AR-E"
+ },
+ "Equatorial Guinea": {
+ "ISO3166-1": "GQ"
+ },
+ "Eritrea": {
+ "ISO3166-1": "ER"
+ },
+ "Estonia": {
+ "ISO3166-1": "EE"
+ },
+ "Ethiopia": {
+ "ISO3166-1": "ET"
+ },
+ "Falkland Islands": {
+ "ISO3166-1": "FK"
+ },
+ "Faroe Islands": {
+ "ISO3166-1": "FO"
+ },
+ "Fiji": {
+ "ISO3166-1": "FJ"
+ },
+ "Finland": {
+ "ISO3166-1": "FI"
+ },
+ "Floyd County, IN": {
+ "name": "Floyd County",
+ "nist:state_fips": "18"
+ },
+ "Formosa": {
+ "ISO3166-2": "AR-P"
+ },
+ "France": {
+ "ISO3166-1:alpha2": "FR"
+ },
+ "Franklin County, FL": {
+ "name": "Franklin County",
+ "nist:state_fips": "12"
+ },
+ "Gabon": {
+ "ISO3166-1": "GA"
+ },
+ "Georgia": {
+ "ISO3166-1": "GE"
+ },
+ "Germany": {
+ "ISO3166-1": "DE"
+ },
+ "Ghana": {
+ "ISO3166-1": "GH"
+ },
+ "Gibraltar": {
+ "ISO3166-1": "GI"
+ },
+ "Gibson County, IN": {
+ "name": "Gibson County",
+ "nist:state_fips": "18"
+ },
+ "Gogebic County": {
+ "name": "Gogebic County"
+ },
+ "Govi-Altai": {
+ "ISO3166-2": "MN-065"
+ },
+ "Grant County, ND": {
+ "name": "Grant County",
+ "nist:state_fips": "38"
+ },
+ "Grayson County, KY": {
+ "name": "Grayson County",
+ "nist:state_fips": "21"
+ },
+ "Greece": {
+ "ISO3166-1": "GR"
+ },
+ "Greeley County, KS": {
+ "name": "Greeley County",
+ "nist:state_fips": "20"
+ },
+ "Green County, KY": {
+ "name": "Green County",
+ "nist:state_fips": "21"
+ },
+ "Greenland": {
+ "ISO3166-1": "GL"
+ },
+ "Grenada": {
+ "ISO3166-1": "GD"
+ },
+ "Guadeloupe": {
+ "ISO3166-1": "GP"
+ },
+ "Guatemala": {
+ "ISO3166-1": "GT"
+ },
+ "Guernsey": {
+ "ISO3166-1": "GG"
+ },
+ "Guinea": {
+ "ISO3166-1": "GN"
+ },
+ "Guinea-Bissau": {
+ "ISO3166-1": "GW"
+ },
+ "Guyana": {
+ "ISO3166-1": "GY"
+ },
+ "Haiti": {
+ "ISO3166-1": "HT"
+ },
+ "Hamilton County, KS": {
+ "name": "Hamilton County",
+ "nist:state_fips": "20"
+ },
+ "Hart County, KY": {
+ "name": "Hart County",
+ "nist:state_fips": "21"
+ },
+ "Harrison County, IN": {
+ "name": "Harrison County",
+ "nist:state_fips": "18"
+ },
+ "Honduras": {
+ "ISO3166-1": "HN"
+ },
+ "Hong Kong": {
+ "ISO3166-1": "HK"
+ },
+ "Hooker County, NE": {
+ "name": "Hooker County",
+ "nist:state_fips": "31"
+ },
+ "Hoonah-Angoon": {
+ "name": "Hoonah-Angoon"
+ },
+ "Hudspeth County, TX": {
+ "name": "Hudspeth County",
+ "nist:state_fips": "48"
+ },
+ "Hughes County, SD": {
+ "name": "Hughes County",
+ "nist:state_fips": "46"
+ },
+ "Hungary": {
+ "ISO3166-1": "HU"
+ },
+ "Iceland": {
+ "ISO3166-1": "IS"
+ },
+ "Illinois": {
+ "ISO3166-2": "US-IL"
+ },
+ "India": {
+ "ISO3166-1": "IN"
+ },
+ "Indiana": {
+ "ISO3166-2": "US-IN"
+ },
+ "Indianapolis-tz": {
+ "timezone": "America/Indiana/Indianapolis"
+ },
+ "Indonesia": {
+ "name": "Indonesia"
+ },
+ "Iran": {
+ "ISO3166-1": "IR"
+ },
+ "Iraq": {
+ "ISO3166-1": "IQ"
+ },
+ "Ireland": {
+ "ISO3166-1": "IE"
+ },
+ "Irkutsk": {
+ "ISO3166-2": "RU-IRK"
+ },
+ "Iron County, MI": {
+ "name": "Iron County",
+ "nist:state_fips": "26"
+ },
+ "Iqaluit-tz": {
+ "timezone": "America/Iqaluit"
+ },
+ "Isle of Man": {
+ "ISO3166-1": "IM"
+ },
+ "Israel": {
+ "ISO3166-1": "IL"
+ },
+ "Italy": {
+ "ISO3166-1": "IT"
+ },
+ "Jackson County, FL": {
+ "name": "Jackson County",
+ "nist:state_fips": "12"
+ },
+ "Jalisco": {
+ "ISO3166-2": "MX-JAL"
+ },
+ "Jamaica": {
+ "ISO3166-1": "JM"
+ },
+ "Japan": {
+ "ISO3166-1": "JP"
+ },
+ "Jasper County, IN": {
+ "name": "Jasper County",
+ "nist:state_fips": "18"
+ },
+ "Jefferson County, KY": {
+ "name": "Jefferson County",
+ "nist:state_fips": "21"
+ },
+ "Jersey": {
+ "ISO3166-1": "JE"
+ },
+ "Jones County, SD": {
+ "name": "Jones County",
+ "nist:state_fips": "46"
+ },
+ "Jordan": {
+ "ISO3166-1": "JO"
+ },
+ "Jujuy": {
+ "ISO3166-2": "AR-Y"
+ },
+ "Kaliningrad": {
+ "ISO3166-2": "RU-KGD"
+ },
+ "Kamchatka": {
+ "ISO3166-2": "RU-KAM"
+ },
+ "Kasai": {
+ "name:en": "Kasai",
+ "admin_level": "4"
+ },
+ "Kazakhstan": {
+ "ISO3166-1": "KZ"
+ },
+ "Keith County, NE": {
+ "name": "Keith County",
+ "nist:state_fips": "31"
+ },
+ "Kemerovo": {
+ "ISO3166-2": "RU-KEM"
+ },
+ "Kenya": {
+ "ISO3166-1": "KE"
+ },
+ "Khakassia": {
+ "ISO3166-2": "RU-KK"
+ },
+ "Kiribati": {
+ "ISO3166-1": "KI"
+ },
+ "Kirov": {
+ "ISO3166-2": "RU-KIR"
+ },
+ "Kosrae": {
+ "ISO3166-2": "FM-KSA"
+ },
+ "Kostanay": {
+ "ISO3166-2": "KZ-KUS"
+ },
+ "Krasnoyarsk": {
+ "ISO3166-2": "RU-KYA"
+ },
+ "Kuwait": {
+ "ISO3166-1": "KW"
+ },
+ "Kyrgyzstan": {
+ "ISO3166-1": "KG"
+ },
+ "Kyzylorda": {
+ "ISO3166-2": "KZ-KZY"
+ },
+ "La Pampa": {
+ "ISO3166-2": "AR-L"
+ },
+ "La Rioja": {
+ "ISO3166-2": "AR-F"
+ },
+ "Laos": {
+ "ISO3166-1": "LA"
+ },
+ "LaPorte County, IN": {
+ "name": "LaPorte County",
+ "nist:state_fips": "18"
+ },
+ "Latvia": {
+ "ISO3166-1": "LV"
+ },
+ "Lebanon": {
+ "ISO3166-1": "LB"
+ },
+ "Lesotho": {
+ "ISO3166-1": "LS"
+ },
+ "Liberia": {
+ "ISO3166-1": "LR"
+ },
+ "Liberty County, FL": {
+ "name": "Liberty County",
+ "nist:state_fips": "12"
+ },
+ "Libya": {
+ "ISO3166-1": "LY"
+ },
+ "Liechtenstein": {
+ "ISO3166-1": "LI"
+ },
+ "Lithuania": {
+ "ISO3166-1": "LT"
+ },
+ "Los Angeles-tz": {
+ "timezone": "America/Los_Angeles"
+ },
+ "Luxemburg": {
+ "ISO3166-1": "LU"
+ },
+ "Macau": {
+ "ISO3166-1": "MO"
+ },
+ "Macedonia": {
+ "ISO3166-1": "MK"
+ },
+ "Madagascar": {
+ "ISO3166-1": "MG"
+ },
+ "Magadan": {
+ "ISO3166-2": "RU-MAG"
+ },
+ "Magallanes Region": {
+ "ISO3166-2": "CL-MA"
+ },
+ "Malawi": {
+ "ISO3166-1": "MW"
+ },
+ "Malaysia": {
+ "ISO3166-1": "MY"
+ },
+ "Maldives": {
+ "ISO3166-1": "MV"
+ },
+ "Mali": {
+ "ISO3166-1": "ML"
+ },
+ "Malta": {
+ "ISO3166-1": "MT"
+ },
+ "Maluku": {
+ "ISO3166-2": "ID-MA"
+ },
+ "Manaus-tz": {
+ "timezone": "America/Manaus"
+ },
+ "Mangystau Region": {
+ "ISO3166-2": "KZ-MAN"
+ },
+ "Marion County, TN": {
+ "name": "Marion County",
+ "nist:state_fips": "47"
+ },
+ "Marshall Islands": {
+ "ISO3166-1": "MH"
+ },
+ "Martinique": {
+ "ISO3166-1": "MQ"
+ },
+ "Mauritania": {
+ "ISO3166-1": "MR"
+ },
+ "Mauritius": {
+ "ISO3166-1": "MU"
+ },
+ "Matamoros-tz": {
+ "timezone": "America/Matamoros"
+ },
+ "Mato Grosso": {
+ "ISO3166-2": "BR-MT"
+ },
+ "Mato Grosso do Sul": {
+ "ISO3166-2": "BR-MS"
+ },
+ "McLean County, ND": {
+ "name": "McLean County",
+ "nist:state_fips": "38"
+ },
+ "Mendoza": {
+ "ISO3166-2": "AR-M"
+ },
+ "Menominee County, MI": {
+ "name": "Menominee County",
+ "nist:state_fips": "26"
+ },
+ "Mercer County, ND": {
+ "name": "Mercer County",
+ "nist:state_fips": "38"
+ },
+ "Mellette County, SD": {
+ "name": "Mellette County",
+ "nist:state_fips": "46"
+ },
+ "Merida-tz": {
+ "timezone": "America/Merida"
+ },
+ "Mexico": {
+ "ISO3166-1": "MX"
+ },
+ "Michigan": {
+ "ISO3166-2": "US-MI"
+ },
+ "Misiones": {
+ "ISO3166-2": "AR-N"
+ },
+ "Moldova": {
+ "ISO3166-1": "MD"
+ },
+ "Monaco": {
+ "ISO3166-1": "MC"
+ },
+ "Mongolia": {
+ "ISO3166-1": "MN"
+ },
+ "Montana": {
+ "ISO3166-2": "US-MT"
+ },
+ "Montenegro": {
+ "ISO3166-1": "ME"
+ },
+ "Monterrey-tz": {
+ "timezone": "America/Monterrey"
+ },
+ "Montserrat": {
+ "ISO3166-1": "MS"
+ },
+ "Morocco": {
+ "ISO3166-1": "MA"
+ },
+ "Morton County, ND": {
+ "name": "Morton County",
+ "nist:state_fips": "38"
+ },
+ "Moscow-tz": {
+ "timezone": "Europe/Moscow"
+ },
+ "Mozambique": {
+ "ISO3166-1": "MZ"
+ },
+ "Myanmar": {
+ "ISO3166-1": "MM"
+ },
+ "Namibia": {
+ "ISO3166-1": "NA"
+ },
+ "Nauru": {
+ "ISO3166-1": "NR"
+ },
+ "Nayarit": {
+ "ISO3166-2": "MX-NAY"
+ },
+ "Nepal": {
+ "ISO3166-1": "NP"
+ },
+ "Neuquén": {
+ "ISO3166-2": "AR-Q"
+ },
+ "New Brunswick": {
+ "ISO3166-2": "CA-NB"
+ },
+ "New Mexico": {
+ "ISO3166-2": "US-NM"
+ },
+ "New South Wales": {
+ "ISO3166-2": "AU-NSW"
+ },
+ "New Zealand": {
+ "ISO3166-1": "NZ"
+ },
+ "Newton County, IN": {
+ "name": "Newton County",
+ "nist:state_fips": "18"
+ },
+ "Nicaragua": {
+ "ISO3166-1": "NI"
+ },
+ "Niger": {
+ "ISO3166-1": "NE"
+ },
+ "Nigeria": {
+ "ISO3166-1": "NG"
+ },
+ "Nipigon-tz": {
+ "timezone": "America/Nipigon"
+ },
+ "Niue": {
+ "ISO3166-1": "NU"
+ },
+ "North Korea": {
+ "ISO3166-1": "KP"
+ },
+ "North Maluku": {
+ "name:en": "North Maluku"
+ },
+ "Northern Rockies Regional Municipality": {
+ "name": "Northern Rockies Regional Municipality"
+ },
+ "Northern Territory": {
+ "ISO3166-2": "AU-NT"
+ },
+ "Northwest Territories": {
+ "ISO3166-2": "CA-NT"
+ },
+ "Norway": {
+ "ISO3166-1": "NO"
+ },
+ "Novosibirsk": {
+ "ISO3166-2": "RU-NVS"
+ },
+ "Ohio County, IN": {
+ "name": "Ohio County",
+ "nist:state_fips": "18"
+ },
+ "Ojinaga-tz": {
+ "timezone": "America/Ojinaga"
+ },
+ "Oliver County, ND": {
+ "name": "Oliver County",
+ "nist:state_fips": "38"
+ },
+ "Oman": {
+ "ISO3166-1": "OM"
+ },
+ "Omsk": {
+ "ISO3166-2": "RU-OMS"
+ },
+ "Overton County, TN": {
+ "name": "Overton County",
+ "nist:state_fips": "47"
+ },
+ "Oymyakonsky": {
+ "name:en": "Oymyakonsky Ulus"
+ },
+ "Page": {
+ "name": "Page",
+ "is_in:state_code": "AZ"
+ },
+ "Pakistan": {
+ "ISO3166-1": "PK"
+ },
+ "Palau": {
+ "ISO3166-1": "PW"
+ },
+ "Palestinian Territories": {
+ "ISO3166-1": "PS"
+ },
+ "Panama": {
+ "ISO3166-1": "PA"
+ },
+ "Pangnirtung-tz": {
+ "timezone": "America/Pangnirtung"
+ },
+ "Papua New Guinea": {
+ "ISO3166-1": "PG"
+ },
+ "Paraguay": {
+ "ISO3166-1": "PY"
+ },
+ "Pernambuco": {
+ "ISO3166-2": "BR-PE"
+ },
+ "Peru": {
+ "ISO3166-1:alpha2": "PE"
+ },
+ "Perkins County, NE": {
+ "name": "Perkins County",
+ "nist:state_fips": "31"
+ },
+ "Perry County, IN": {
+ "name": "Perry County",
+ "nist:state_fips": "18"
+ },
+ "Philippines": {
+ "ISO3166-1": "PH"
+ },
+ "Phoenix-tz": {
+ "timezone": "America/Phoenix"
+ },
+ "Pickett County, TN": {
+ "name": "Pickett County",
+ "nist:state_fips": "47"
+ },
+ "Pitcairn Islands": {
+ "ISO3166-1": "PN"
+ },
+ "Pike County, IN": {
+ "name": "Pike County",
+ "nist:state_fips": "18"
+ },
+ "Pohnpei": {
+ "ISO3166-2": "FM-PNI"
+ },
+ "Poland": {
+ "ISO3166-1": "PL"
+ },
+ "Porter County, IN": {
+ "name": "Porter County",
+ "nist:state_fips": "18"
+ },
+ "Portugal": {
+ "ISO3166-1": "PT"
+ },
+ "Prince of Wales-Hyder": {
+ "name": "Prince of Wales-Hyder"
+ },
+ "Pulaski County, IN": {
+ "name": "Pulaski County",
+ "nist:state_fips": "18"
+ },
+ "Qatar": {
+ "ISO3166-1": "QA"
+ },
+ "Quang Tri": {
+ "ISO3166-2": "VN-25"
+ },
+ "Quebec": {
+ "ISO3166-2": "CA-QC"
+ },
+ "Queensland": {
+ "ISO3166-2": "AU-QLD"
+ },
+ "Rankin Inlet-tz": {
+ "timezone": "America/Rankin_Inlet"
+ },
+ "Regina-tz": {
+ "timezone": "America/Regina"
+ },
+ "Republic of China": {
+ "ISO3166-1": "TW"
+ },
+ "Republic of Kosovo": {
+ "ISO3166-1": "XK"
+ },
+ "Resolute-tz": {
+ "timezone": "America/Resolute"
+ },
+ "Rio Negro": {
+ "ISO3166-2": "AR-R"
+ },
+ "Romania": {
+ "ISO3166-1": "RO"
+ },
+ "Rondônia": {
+ "ISO3166-2": "BR-RO"
+ },
+ "Roraima": {
+ "ISO3166-2": "BR-RR"
+ },
+ "Russell County, KY": {
+ "name": "Russell County",
+ "nist:state_fips": "21"
+ },
+ "Rwanda": {
+ "ISO3166-1": "RW"
+ },
+ "Saint-Barthélemy": {
+ "ISO3166-1": "BL"
+ },
+ "Saint Helena, Ascension and Tristan da Cunha": {
+ "ISO3166-1": "SH"
+ },
+ "Saint Kitts and Nevis": {
+ "ISO3166-1": "KN"
+ },
+ "Saint Lucia": {
+ "ISO3166-1": "LC"
+ },
+ "Saint Maarten": {
+ "ISO3166-1": "MF"
+ },
+ "Saint Pierre and Miquelon": {
+ "ISO3166-1": "PM"
+ },
+ "Saint Vincent and the Grenadines": {
+ "ISO3166-1": "VC"
+ },
+ "Salta": {
+ "ISO3166-2": "AR-A"
+ },
+ "Sakha Republic": {
+ "ISO3166-2": "RU-SA"
+ },
+ "Sakhalin": {
+ "ISO3166-2": "RU-SAK"
+ },
+ "Samara": {
+ "ISO3166-2": "RU-SAM"
+ },
+ "Samarkand": {
+ "timezone": "Asia/Samarkand"
+ },
+ "Samoa": {
+ "ISO3166-1": "WS"
+ },
+ "San Juan": {
+ "ISO3166-2": "AR-J"
+ },
+ "San Luis": {
+ "ISO3166-2": "AR-D"
+ },
+ "San Luis Potosí": {
+ "ISO3166-2": "MX-SLP"
+ },
+ "San Marino": {
+ "ISO3166-1": "SM"
+ },
+ "Sankuru": {
+ "name": "Sankuru",
+ "admin_level": "4"
+ },
+ "Santa Fe": {
+ "ISO3166-2": "AR-S"
+ },
+ "Santarem-tz": {
+ "timezone": "America/Santarem"
+ },
+ "Santiago del Estero": {
+ "ISO3166-2": "AR-G"
+ },
+ "Saratov": {
+ "ISO3166-2": "RU-SAR"
+ },
+ "Saudi Arabia": {
+ "ISO3166-1": "SA"
+ },
+ "São Tomé and Príncipe": {
+ "ISO3166-1": "ST"
+ },
+ "Senegal": {
+ "ISO3166-1": "SN"
+ },
+ "Serbia": {
+ "ISO3166-1": "RS"
+ },
+ "Sergipe": {
+ "ISO3166-2": "BR-SE"
+ },
+ "Sequatchie County, TN": {
+ "name": "Sequatchie County",
+ "nist:state_fips": "47"
+ },
+ "Sevastopol": {
+ "name:en": "Sevastopol"
+ },
+ "Seychelles": {
+ "ISO3166-1": "SC"
+ },
+ "Sherman County, KS": {
+ "name": "Sherman County",
+ "nist:state_fips": "20"
+ },
+ "Sierra Leone": {
+ "ISO3166-1": "SL"
+ },
+ "Sinaloa": {
+ "ISO3166-2": "MX-SIN"
+ },
+ "Singapore": {
+ "ISO3166-1": "SG"
+ },
+ "Sint Maarten": {
+ "ISO3166-1": "SX"
+ },
+ "Sioux County, ND": {
+ "name": "Sioux County",
+ "nist:state_fips": "38"
+ },
+ "Slovakia": {
+ "ISO3166-1": "SK"
+ },
+ "Slovenia": {
+ "ISO3166-1": "SI"
+ },
+ "Solomon Islands": {
+ "ISO3166-1": "SB"
+ },
+ "Somalia": {
+ "ISO3166-1": "SO"
+ },
+ "Sonora": {
+ "ISO3166-2": "MX-SON"
+ },
+ "South Africa": {
+ "ISO3166-1": "ZA",
+ "admin_level": "2"
+ },
+ "South Australia": {
+ "ISO3166-2": "AU-SA"
+ },
+ "South Georgia and the South Sandwich Islands": {
+ "ISO3166-1": "GS"
+ },
+ "South Korea": {
+ "ISO3166-1": "KR"
+ },
+ "South Sudan": {
+ "ISO3166-1": "SS"
+ },
+ "Spain": {
+ "ISO3166-1:alpha2": "ES"
+ },
+ "Srednekolymsk-tz": {
+ "timezone": "Asia/Srednekolymsk"
+ },
+ "Sri Lanka": {
+ "ISO3166-1": "LK"
+ },
+ "Starke County, IN": {
+ "name": "Starke County",
+ "nist:state_fips": "18"
+ },
+ "Sudan": {
+ "ISO3166-1": "SD"
+ },
+ "Sully County, SD": {
+ "name": "Sully County",
+ "nist:state_fips": "46"
+ },
+ "Suriname": {
+ "ISO3166-1": "SR"
+ },
+ "Sühbaatar": {
+ "ISO3166-2": "MN-051"
+ },
+ "Swaziland": {
+ "ISO3166-1": "SZ"
+ },
+ "Sweden": {
+ "ISO3166-1": "SE"
+ },
+ "Swift Current": {
+ "name": "Swift Current"
+ },
+ "Switzerland": {
+ "ISO3166-1": "CH"
+ },
+ "Switzerland County, IN": {
+ "name": "Switzerland County",
+ "nist:state_fips": "18"
+ },
+ "Syria": {
+ "ISO3166-1": "SY"
+ },
+ "Tabasco": {
+ "ISO3166-2": "MX-TAB"
+ },
+ "Tajikistan": {
+ "ISO3166-1": "TJ"
+ },
+ "Tanzania": {
+ "name:en": "Tanzania"
+ },
+ "Tasmania": {
+ "ISO3166-2": "AU-TAS"
+ },
+ "Thailand": {
+ "ISO3166-1": "TH",
+ "admin_level": "2"
+ },
+ "The Bahamas": {
+ "ISO3166-1": "BS"
+ },
+ "The Gambia": {
+ "ISO3166-1": "GM"
+ },
+ "The Netherlands": {
+ "ISO3166-1": "NL"
+ },
+ "Thomas County, NE": {
+ "name": "Thomas County",
+ "nist:state_fips": "31"
+ },
+ "Thunder Bay-tz": {
+ "timezone": "America/Thunder_Bay"
+ },
+ "Tocantins": {
+ "ISO3166-2": "BR-TO"
+ },
+ "Todd County, SD": {
+ "name": "Todd County",
+ "nist:state_fips": "46"
+ },
+ "Togo": {
+ "ISO3166-1": "TG"
+ },
+ "Tokelau": {
+ "ISO3166-1": "TK"
+ },
+ "Tomponsky": {
+ "name:en": "Tomponsky Ulus"
+ },
+ "Tomsk": {
+ "ISO3166-2": "RU-TOM"
+ },
+ "Tonga": {
+ "ISO3166-1": "TO"
+ },
+ "Toronto-tz": {
+ "timezone": "America/Toronto"
+ },
+ "Trinidad and Tobago": {
+ "ISO3166-1": "TT"
+ },
+ "Tshopo": {
+ "name": "Tshopo",
+ "admin_level": "4"
+ },
+ "Tucumán": {
+ "ISO3166-2": "AR-T"
+ },
+ "Tunisia": {
+ "ISO3166-1": "TN"
+ },
+ "Turkey": {
+ "ISO3166-1": "TR"
+ },
+ "Turkmenistan": {
+ "ISO3166-1": "TM"
+ },
+ "Turks and Caicos Islands": {
+ "ISO3166-1": "TC"
+ },
+ "Tuva": {
+ "ISO3166-2": "RU-TY"
+ },
+ "Tuvalu": {
+ "ISO3166-1": "TV"
+ },
+ "Udmurtia": {
+ "ISO3166-2": "RU-UD"
+ },
+ "Uganda": {
+ "ISO3166-1": "UG"
+ },
+ "Ulyanovsk": {
+ "ISO3166-2": "RU-ULY"
+ },
+ "Ukraine": {
+ "ISO3166-1": "UA"
+ },
+ "United Arab Emirates": {
+ "ISO3166-1": "AE"
+ },
+ "United Kingdom": {
+ "ISO3166-1": "GB"
+ },
+ "United Nations Buffer Zone": {
+ "name": "United Nations Buffer Zone"
+ },
+ "United States of America": {
+ "ISO3166-1": "US"
+ },
+ "Uruguay": {
+ "ISO3166-1": "UY"
+ },
+ "Ust-Maysky": {
+ "name:en": "Ust-Maysky Ulus"
+ },
+ "Uzbekistan": {
+ "ISO3166-1": "UZ"
+ },
+ "Vancouver-tz": {
+ "timezone": "America/Vancouver"
+ },
+ "Vanuatu": {
+ "ISO3166-1": "VU"
+ },
+ "Vatican City": {
+ "ISO3166-1": "VA"
+ },
+ "Venezuela": {
+ "ISO3166-1": "VE"
+ },
+ "Veracruz": {
+ "ISO3166-2": "MX-VER"
+ },
+ "Victoria": {
+ "ISO3166-2": "AU-VIC"
+ },
+ "Vietnam": {
+ "ISO3166-1": "VN"
+ },
+ "Vincennes-tz": {
+ "timezone": "America/Indiana/Vincennes"
+ },
+ "Vladivostok-tz": {
+ "timezone": "Asia/Vladivostok"
+ },
+ "Volgograd": {
+ "ISO3166-2": "RU-VGG"
+ },
+ "Wallace County, KS": {
+ "name": "Wallace County",
+ "nist:state_fips": "20"
+ },
+ "Wayne County, KY": {
+ "name": "Wayne County",
+ "nist:state_fips": "21"
+ },
+ "West Kalimantan": {
+ "name:en": "West Kalimantan"
+ },
+ "West Kazakhstan": {
+ "ISO3166-2": "KZ-ZAP"
+ },
+ "West Wendover": {
+ "name": "West Wendover"
+ },
+ "Western Australia": {
+ "ISO3166-2": "AU-WA"
+ },
+ "Western Sahara": {
+ "ISO3166-1": "EH"
+ },
+ "Winnipeg-tz": {
+ "timezone": "America/Winnipeg"
+ },
+ "Xinjiang": {
+ "ISO3166-2": "CN-XJ"
+ },
+ "Yap": {
+ "ISO3166-2": "FM-YAP"
+ },
+ "Yekaterinburg-tz": {
+ "timezone": "Asia/Yekaterinburg"
+ },
+ "Yemen": {
+ "ISO3166-1": "YE"
+ },
+ "Yukon": {
+ "ISO3166-2": "CA-YT"
+ },
+ "Zabaykalsk": {
+ "ISO3166-2": "RU-ZAB"
+ },
+ "Zacatecas": {
+ "ISO3166-2": "MX-ZAC"
+ },
+ "Zakarpattia": {
+ "ISO3166-2": "UA-21"
+ },
+ "Zambia": {
+ "ISO3166-1": "ZM"
+ },
+ "Zaporizhzhia": {
+ "ISO3166-2": "UA-23"
+ },
+ "Zavkhan": {
+ "ISO3166-2": "MN-057"
+ },
+ "Zimbabwe": {
+ "ISO3166-1": "ZW"
+ }
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..e950f11
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,2597 @@
+{
+ "name": "timezone-boundary-builder",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@mapbox/geojson-area": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz",
+ "integrity": "sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=",
+ "requires": {
+ "wgs84": "0.0.0"
+ }
+ },
+ "@mapbox/geojsonhint": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@mapbox/geojsonhint/-/geojsonhint-3.0.0.tgz",
+ "integrity": "sha512-zHcyh1rDHYnEBd6NvOWoeHLuvazlDkIjvz9MJx4cKwcKTlfrqgxVnTv1QLnVJnsSU5neJnhQJcgscR/Zl4uYgw==",
+ "requires": {
+ "concat-stream": "^1.6.1",
+ "jsonlint-lines": "1.7.1",
+ "minimist": "1.2.0",
+ "vfile": "^4.0.0",
+ "vfile-reporter": "^5.1.1"
+ }
+ },
+ "@turf/bbox": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.0.1.tgz",
+ "integrity": "sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw==",
+ "requires": {
+ "@turf/helpers": "6.x",
+ "@turf/meta": "6.x"
+ }
+ },
+ "@turf/helpers": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz",
+ "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g=="
+ },
+ "@turf/meta": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz",
+ "integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==",
+ "requires": {
+ "@turf/helpers": "6.x"
+ }
+ },
+ "@types/unist": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
+ "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "JSV": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
+ "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c="
+ },
+ "acorn": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
+ "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
+ "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-includes": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.7.0"
+ }
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "async": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.1.0.tgz",
+ "integrity": "sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base64-js": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz",
+ "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bops": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.6.tgz",
+ "integrity": "sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=",
+ "requires": {
+ "base64-js": "0.0.2",
+ "to-utf8": "0.0.1"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+ "requires": {
+ "ansi-styles": "~1.0.0",
+ "has-color": "~0.1.0",
+ "strip-ansi": "~0.1.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "debug-log": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
+ "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "deglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
+ "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
+ "dev": true,
+ "requires": {
+ "find-root": "^1.0.0",
+ "glob": "^7.0.5",
+ "ignore": "^3.0.9",
+ "pkg-config": "^1.1.0",
+ "run-parallel": "^1.1.2",
+ "uniq": "^1.0.1"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-walk": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
+ "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg="
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
+ "domhandler": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz",
+ "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz",
+ "integrity": "sha1-mtTVm1r2ymhMYv5tdo7xcOcN8ZI=",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+ "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+ "requires": {
+ "es-to-primitive": "^1.2.0",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-keys": "^1.0.12"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz",
+ "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.5.0",
+ "babel-code-frame": "^6.26.0",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^4.0.0",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^4.0.0",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.2",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^5.2.0",
+ "is-resolvable": "^1.1.0",
+ "js-yaml": "^3.11.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.5",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.0",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.5.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^4.0.3",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz",
+ "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==",
+ "dev": true
+ },
+ "eslint-config-standard-jsx": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz",
+ "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.9",
+ "resolve": "^1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz",
+ "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==",
+ "dev": true,
+ "requires": {
+ "debug": "^2.6.8",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-es": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz",
+ "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==",
+ "dev": true,
+ "requires": {
+ "eslint-utils": "^1.3.0",
+ "regexpp": "^2.0.1"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz",
+ "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==",
+ "dev": true,
+ "requires": {
+ "contains-path": "^0.1.0",
+ "debug": "^2.6.8",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "^0.3.1",
+ "eslint-module-utils": "^2.2.0",
+ "has": "^1.0.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.3",
+ "read-pkg-up": "^2.0.0",
+ "resolve": "^1.6.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "isarray": "^1.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz",
+ "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==",
+ "dev": true,
+ "requires": {
+ "eslint-plugin-es": "^1.3.1",
+ "eslint-utils": "^1.3.1",
+ "ignore": "^4.0.2",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz",
+ "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==",
+ "dev": true
+ },
+ "eslint-plugin-react": {
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz",
+ "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "doctrine": "^2.1.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.0.1",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "eslint-plugin-standard": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz",
+ "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz",
+ "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.2",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "geojson-area": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/geojson-area/-/geojson-area-0.1.0.tgz",
+ "integrity": "sha1-1I2AcILPrfSnjfE0m+UPOL8YlK4=",
+ "requires": {
+ "wgs84": "0.0.0"
+ }
+ },
+ "geojson-numeric": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.0.tgz",
+ "integrity": "sha1-q5quLqlyekg3B5rP8qqDyHLXLUo=",
+ "requires": {
+ "concat-stream": "~1.0.1",
+ "optimist": "~0.3.5"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz",
+ "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=",
+ "requires": {
+ "bops": "0.0.6"
+ }
+ }
+ }
+ },
+ "geojson-rewind": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/geojson-rewind/-/geojson-rewind-0.1.0.tgz",
+ "integrity": "sha1-VwIqBUsZZmDXVTVP5dJmhNkM0Bk=",
+ "requires": {
+ "concat-stream": "~1.2.1",
+ "geojson-area": "0.1.0",
+ "minimist": "0.0.5"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.2.1",
+ "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.2.1.tgz",
+ "integrity": "sha1-81EAtsRjeL+6i2uA+fDQzN8T3GA=",
+ "requires": {
+ "bops": "0.0.6"
+ }
+ },
+ "minimist": {
+ "version": "0.0.5",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz",
+ "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY="
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "global": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
+ "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
+ "requires": {
+ "min-document": "^2.19.0",
+ "process": "~0.5.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
+ "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.5.1",
+ "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz",
+ "integrity": "sha1-b0L3ZX3RnBP31l3pEYQXOUoL5tA=",
+ "requires": {
+ "domelementtype": "1",
+ "domhandler": "2.2",
+ "domutils": "1.3",
+ "readable-stream": "1.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz",
+ "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.1.0",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^5.5.2",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+ "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-function": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz",
+ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU="
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "jsonlint-lines": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz",
+ "integrity": "sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=",
+ "requires": {
+ "JSV": ">= 4.0.x",
+ "nomnom": ">= 1.5.x"
+ }
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "jsts": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/jsts/-/jsts-2.0.4.tgz",
+ "integrity": "sha512-YCfCuEgG9ynMFazjIH0YAtliFlaIcYmRqBY6EQP+VjNDEjuu4Il+91RDQWP4hAS7TXOeN/NYF/OL7Fmvg69pKg=="
+ },
+ "jsx-ast-utils": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz",
+ "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.0.3",
+ "object.assign": "^4.1.0"
+ }
+ },
+ "jszip": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz",
+ "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=",
+ "requires": {
+ "pako": "~1.0.2"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lie": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+ "requires": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI="
+ },
+ "mgrs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz",
+ "integrity": "sha1-+5FYjnjJACVnI5XLQLJffNatGCk="
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
+ "requires": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+ "requires": {
+ "chalk": "~0.4.0",
+ "underscore": "~1.6.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
+ "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg=="
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optimist": {
+ "version": "0.3.7",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+ "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=",
+ "requires": {
+ "wordwrap": "~0.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osm-polygon-features": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz",
+ "integrity": "sha1-IK5BEwxIbkmjsqPCtYoUGcSYZ3g="
+ },
+ "osmtogeojson": {
+ "version": "2.2.12",
+ "resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-2.2.12.tgz",
+ "integrity": "sha1-8IT319XwOKQ4OzHANjR6E0sIGdM=",
+ "requires": {
+ "JSONStream": "0.8.0",
+ "concat-stream": "~1.0.1",
+ "geojson-numeric": "0.2.0",
+ "geojson-rewind": "0.1.0",
+ "htmlparser2": "3.5.1",
+ "optimist": "~0.3.5",
+ "osm-polygon-features": "^0.9.1",
+ "xmldom": "~0.1.16"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz",
+ "integrity": "sha1-78Ri1aW8lOwAf0siVxrNf28q4BM=",
+ "requires": {
+ "jsonparse": "0.0.5",
+ "through": "~2.2.7"
+ }
+ },
+ "concat-stream": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz",
+ "integrity": "sha1-AYsYvBx9BzotyCqkhEI0GixN158=",
+ "requires": {
+ "bops": "0.0.6"
+ }
+ },
+ "jsonparse": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+ "integrity": "sha1-MwVCrT8KZUZlt3jz6y2an6UHrGQ="
+ },
+ "through": {
+ "version": "2.2.7",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.2.7.tgz",
+ "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0="
+ }
+ }
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+ "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
+ },
+ "parse-headers": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz",
+ "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==",
+ "requires": {
+ "for-each": "^0.3.3",
+ "string.prototype.trim": "^1.1.2"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parsedbf": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parsedbf/-/parsedbf-1.0.0.tgz",
+ "integrity": "sha512-qm8G6BPAL8yesN4UP4cNq1rxI5g5OyQNwS/SiLvjVT87PZ+9sbRdIANqH8kPKWvIiDbFM2V3C0xUuh/jvUqRdQ==",
+ "requires": {
+ "iconv-lite": "^0.4.15",
+ "text-encoding-polyfill": "^0.6.7"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "^2.0.0"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pkg-conf": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
+ "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "load-json-file": "^4.0.0"
+ },
+ "dependencies": {
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "pkg-config": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
+ "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
+ "dev": true,
+ "requires": {
+ "debug-log": "^1.0.0",
+ "find-root": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "process": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
+ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8="
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "proj4": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.5.0.tgz",
+ "integrity": "sha512-XZTRT7OPdLzgvtTqL8DG2cEj8lYdovztOwiwpwRSYayOty5Ipf3H68dh/fiL+HKDEyetmQSMhkkMGiJoyziz3w==",
+ "requires": {
+ "mgrs": "1.0.0",
+ "wkt-parser": "^1.2.0"
+ }
+ },
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
+ "psl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz",
+ "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "query-overpass": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/query-overpass/-/query-overpass-1.5.3.tgz",
+ "integrity": "sha512-nSRerAd1G0Xnd19ZS8iONyMtM9P58vw6tgdMd8vOXCUxkojwQvGY93jH0MF4mqCdKXmo0PUbIOr/kiFTPB5QsA==",
+ "requires": {
+ "JSONStream": "^1.3.1",
+ "concat-stream": "^1.6.0",
+ "minimist": "^1.2.0",
+ "osmtogeojson": "^2.2.12",
+ "request": "^2.81.0",
+ "xhr": "^2.4.0",
+ "xmldom": "^0.1.27"
+ }
+ },
+ "react-is": {
+ "version": "16.8.6",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
+ "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^2.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^2.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
+ },
+ "request": {
+ "version": "2.88.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ }
+ },
+ "resolve": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+ "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "5.5.12",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz",
+ "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "shpjs": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/shpjs/-/shpjs-3.4.3.tgz",
+ "integrity": "sha512-NZM75+SLgPt9dK91Z92QK+fVd2OR6zswAmkTrkHRc4mnONbAWGo38I+AxCYsKgCNfqF5cZUi2KfO7r2TZ+tHdw==",
+ "requires": {
+ "jszip": "^2.4.0",
+ "lie": "^3.0.1",
+ "lru-cache": "^2.7.0",
+ "parsedbf": "^1.0.0",
+ "proj4": "^2.1.4"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
+ "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "standard": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/standard/-/standard-12.0.1.tgz",
+ "integrity": "sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==",
+ "dev": true,
+ "requires": {
+ "eslint": "~5.4.0",
+ "eslint-config-standard": "12.0.0",
+ "eslint-config-standard-jsx": "6.0.2",
+ "eslint-plugin-import": "~2.14.0",
+ "eslint-plugin-node": "~7.0.1",
+ "eslint-plugin-promise": "~4.0.0",
+ "eslint-plugin-react": "~7.11.1",
+ "eslint-plugin-standard": "~4.0.0",
+ "standard-engine": "~9.0.0"
+ }
+ },
+ "standard-engine": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-9.0.0.tgz",
+ "integrity": "sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==",
+ "dev": true,
+ "requires": {
+ "deglob": "^2.1.0",
+ "get-stdin": "^6.0.0",
+ "minimist": "^1.1.0",
+ "pkg-conf": "^2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string.prototype.trim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
+ "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.0",
+ "function-bind": "^1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz",
+ "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=",
+ "dev": true
+ },
+ "table": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz",
+ "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.0.1",
+ "ajv-keywords": "^3.0.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ }
+ }
+ },
+ "text-encoding-polyfill": {
+ "version": "0.6.7",
+ "resolved": "https://registry.npmjs.org/text-encoding-polyfill/-/text-encoding-polyfill-0.6.7.tgz",
+ "integrity": "sha512-/DZ1XJqhbqRkCop6s9ZFu8JrFRwmVuHg4quIRm+ziFkR3N3ec6ck6yBvJ1GYeEQZhLVwRW0rZE+C3SSJpy0RTg=="
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-utf8": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz",
+ "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI="
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+ "dev": true
+ },
+ "unist-util-stringify-position": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz",
+ "integrity": "sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA==",
+ "requires": {
+ "@types/unist": "^2.0.2"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vfile": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.0.1.tgz",
+ "integrity": "sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA==",
+ "requires": {
+ "@types/unist": "^2.0.0",
+ "is-buffer": "^2.0.0",
+ "replace-ext": "1.0.0",
+ "unist-util-stringify-position": "^2.0.0",
+ "vfile-message": "^2.0.0"
+ }
+ },
+ "vfile-message": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.1.tgz",
+ "integrity": "sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw==",
+ "requires": {
+ "@types/unist": "^2.0.2",
+ "unist-util-stringify-position": "^2.0.0"
+ }
+ },
+ "vfile-reporter": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-5.1.2.tgz",
+ "integrity": "sha512-b15sTuss1wOPWVlyWOvu+n6wGJ/eTYngz3uqMLimQvxZ+Q5oFQGYZZP1o3dR9sk58G5+wej0UPCZSwQBX/mzrQ==",
+ "requires": {
+ "repeat-string": "^1.5.0",
+ "string-width": "^2.0.0",
+ "supports-color": "^5.0.0",
+ "unist-util-stringify-position": "^2.0.0",
+ "vfile-sort": "^2.1.2",
+ "vfile-statistics": "^1.1.0"
+ }
+ },
+ "vfile-sort": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.1.tgz",
+ "integrity": "sha512-5dt7xEhC44h0uRQKhbM2JAe0z/naHphIZlMOygtMBM9Nn0pZdaX5fshhwWit9wvsuP8t/wp43nTDRRErO1WK8g=="
+ },
+ "vfile-statistics": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.3.tgz",
+ "integrity": "sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA=="
+ },
+ "wgs84": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz",
+ "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY="
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wkt-parser": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/wkt-parser/-/wkt-parser-1.2.3.tgz",
+ "integrity": "sha512-s7zrOedGuHbbzMaQOuf8HacuCYp3LmmrHjkkN//7UEAzsYz7xJ6J+j/84ZWZkQcrRqi3xXyuc4odPHj7PEB0bw=="
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "xhr": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz",
+ "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==",
+ "requires": {
+ "global": "~4.3.0",
+ "is-function": "^1.0.1",
+ "parse-headers": "^2.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..95e407f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "timezone-boundary-builder",
+ "version": "1.0.0",
+ "description": "Scripts to create a timezone shapefile from multiple sources",
+ "main": "index.js",
+ "engines": {
+ "node": ">=10"
+ },
+ "scripts": {
+ "test": "standard && node lint-json.js"
+ },
+ "keywords": [
+ "timezone",
+ "shapefile"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/evansiroky/timezone-boundary-builder.git"
+ },
+ "author": "Evan Siroky",
+ "license": "MIT",
+ "dependencies": {
+ "@mapbox/geojson-area": "^0.2.2",
+ "@mapbox/geojsonhint": "^3.0.0",
+ "@turf/bbox": "^6.0.1",
+ "@turf/helpers": "^6.1.4",
+ "async": "^3.1.0",
+ "jsts": "^2.0.4",
+ "query-overpass": "^1.5.3",
+ "rimraf": "^2.6.3",
+ "shpjs": "^3.4.3"
+ },
+ "devDependencies": {
+ "standard": "^12.0.1"
+ }
+}
diff --git a/progressStats.js b/progressStats.js
new file mode 100644
index 0000000..f9794ed
--- /dev/null
+++ b/progressStats.js
@@ -0,0 +1,83 @@
+class ProgressStats {
+ constructor (trackerName, totalTasks) {
+ this.trackerName = trackerName
+ this.totalTasks = totalTasks
+ this.taskCounter = 0
+ }
+
+ logNext () {
+ this.taskCounter++
+ if (!this.beginTime) {
+ this.beginTime = new Date()
+ }
+ }
+
+ /**
+ * Begin a new task. Print the current progress and then increment the number of tasks.
+ * @param {string} A short message about the current task progress
+ * @param {[boolean]} logTimeLeft whether or not to log the time left.
+ */
+ beginTask (message, logTimeLeft) {
+ this.printStats(message, logTimeLeft)
+ this.logNext()
+ }
+
+ /**
+ * Print the current progress.
+ * @param {string} A short message about the current task progress
+ * @param {[boolean]} logTimeLeft whether or not to log the time left.
+ */
+ printStats (message, logTimeLeft) {
+ message = `${message}; ${this.trackerName} progress: ${this.getPercentage()}% done`
+ if (logTimeLeft) {
+ message = `${message} - ${this.getTimeLeft()} left`
+ }
+ console.log(message)
+ }
+
+ /**
+ * calculates the percentage of finished downloads
+ * @returns {string}
+ */
+ getPercentage () {
+ var current = (this.taskCounter / this.totalTasks)
+ return Math.round(current * 1000.0) / 10.0
+ }
+
+ /**
+ * calculates the time left and outputs it in human readable format
+ * calculation is based on the average time per task so far
+ *
+ * @returns {string}
+ */
+ getTimeLeft () {
+ if (this.taskCounter === 0) return '?'
+ const averageTimePerTask = (Date.now() - this.beginTime.getTime()) / this.taskCounter
+ var tasksLeft = this.totalTasks - this.taskCounter
+ var millisecondsLeft = averageTimePerTask * tasksLeft
+ return this.formatMilliseconds(millisecondsLeft)
+ }
+
+ /**
+ * inspired from https://stackoverflow.com/questions/19700283/how-to-convert-time-milliseconds-to-hours-min-sec-format-in-javascript
+ * @param millisec
+ * @returns {string}
+ */
+ formatMilliseconds (millisec) {
+ var seconds = (millisec / 1000).toFixed(1)
+ var minutes = (millisec / (1000 * 60)).toFixed(1)
+ var hours = (millisec / (1000 * 60 * 60)).toFixed(1)
+ var days = (millisec / (1000 * 60 * 60 * 24)).toFixed(1)
+ if (seconds < 60) {
+ return seconds + ' seconds'
+ } else if (minutes < 60) {
+ return minutes + ' minutes'
+ } else if (hours < 24) {
+ return hours + ' hours'
+ } else {
+ return days + ' days'
+ }
+ }
+}
+
+module.exports = ProgressStats
diff --git a/timezones.json b/timezones.json
new file mode 100644
index 0000000..b908e7f
--- /dev/null
+++ b/timezones.json
@@ -0,0 +1,4743 @@
+{
+ "Africa/Abidjan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Côte d'Ivoire"
+ }
+ ],
+ "Africa/Accra": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ghana"
+ }
+ ],
+ "Africa/Addis_Ababa": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ethiopia"
+ }
+ ],
+ "Africa/Algiers": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Algeria"
+ }
+ ],
+ "Africa/Asmara": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Eritrea"
+ }
+ ],
+ "Africa/Bamako": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mali"
+ }
+ ],
+ "Africa/Bangui": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Central African Republic"
+ }
+ ],
+ "Africa/Banjul": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "The Gambia"
+ }
+ ],
+ "Africa/Bissau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guinea-Bissau"
+ }
+ ],
+ "Africa/Blantyre": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Malawi"
+ }
+ ],
+ "Africa/Brazzaville": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Congo-Brazzaville"
+ }
+ ],
+ "Africa/Bujumbura": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Burundi"
+ }
+ ],
+ "Africa/Cairo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Egypt"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Bir Tawil",
+ "description": "Although Bir Tawil is officially not part of Egypt, union to avoid holes. The wikipedia article on Bir Tawil suggests that Egypt retains administrative control of the area (https://en.wikipedia.org/wiki/Bir_Tawil)."
+ }
+ ],
+ "Africa/Casablanca": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Morocco"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Spain"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Western Sahara"
+ }
+ ],
+ "Africa/Ceuta": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Spain"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-5.5,35.95],[-2,35.4],[-2,33],[-5.5,35.95]]],
+ "description": "Isolate exclaves of Spain that are enclaves of Morocco."
+ }
+ ],
+ "Africa/Conakry": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guinea"
+ }
+ ],
+ "Africa/Dakar": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Senegal"
+ }
+ ],
+ "Africa/Dar_es_Salaam": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tanzania"
+ }
+ ],
+ "Africa/Djibouti": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Djibouti"
+ }
+ ],
+ "Africa/Douala": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cameroon"
+ }
+ ],
+ "Africa/El_Aaiun": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Western Sahara"
+ }
+ ],
+ "Africa/Freetown": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sierra Leone"
+ }
+ ],
+ "Africa/Gaborone": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Botswana"
+ }
+ ],
+ "Africa/Harare": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Zimbabwe"
+ }
+ ],
+ "Africa/Johannesburg": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "South Africa"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-5.5,-86],[0,-86],[0,-68],[-5.5,-69],[-5.5,-86]]],
+ "description": "Add Antarctic Station of SANAE IV."
+ }
+ ],
+ "Africa/Juba": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "South Sudan"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[35.3,5.2],[35.9,4.6],[34,4.6],[35.3,5.2]]],
+ "description": "Initially add Ilemi Triangle to South Sudan area. Whatever OSM thinks Kenya's border is is then used as seen in the next operation. This avoids having holes."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Kenya"
+ }
+ ],
+ "Africa/Kampala": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Uganda"
+ }
+ ],
+ "Africa/Khartoum": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sudan"
+ }
+ ],
+ "Africa/Kigali": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Rwanda"
+ }
+ ],
+ "Africa/Kinshasa": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Congo-Kinshasa"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[20,-9],[21,-4],[24.6,-1.63],[23,13],[3,-9],[20,-9]]],
+ "description": "Grab western part of Congo-Kinshasa."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Kasai"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sankuru"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Tshopo"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bas-Uele"
+ }
+ ],
+ "Africa/Lagos": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Nigeria"
+ }
+ ],
+ "Africa/Libreville": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Gabon"
+ }
+ ],
+ "Africa/Lome": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Togo"
+ }
+ ],
+ "Africa/Luanda": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Angola"
+ }
+ ],
+ "Africa/Lubumbashi": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Congo-Kinshasa"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[20,-9],[21,-4],[24.6,-1.63],[23,13],[3,-9],[20,-9]]],
+ "description": "Exclude eastern part of Congo-Kinshasa."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Kasai"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sankuru"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Tshopo"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Bas-Uele"
+ }
+ ],
+ "Africa/Lusaka": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Zambia"
+ }
+ ],
+ "Africa/Malabo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Equatorial Guinea"
+ }
+ ],
+ "Africa/Maputo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mozambique"
+ }
+ ],
+ "Africa/Maseru": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Lesotho"
+ }
+ ],
+ "Africa/Mbabane": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Swaziland"
+ }
+ ],
+ "Africa/Mogadishu": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Somalia"
+ }
+ ],
+ "Africa/Monrovia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Liberia"
+ }
+ ],
+ "Africa/Nairobi": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kenya"
+ }
+ ],
+ "Africa/Ndjamena": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chad"
+ }
+ ],
+ "Africa/Niamey": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Niger"
+ }
+ ],
+ "Africa/Nouakchott": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mauritania"
+ }
+ ],
+ "Africa/Ouagadougou": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Burkina Faso"
+ }
+ ],
+ "Africa/Porto-Novo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Benin"
+ }
+ ],
+ "Africa/Sao_Tome": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "São Tomé and Príncipe"
+ }
+ ],
+ "Africa/Tripoli": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Libya"
+ }
+ ],
+ "Africa/Tunis": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tunisia"
+ }
+ ],
+ "Africa/Windhoek": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Namibia"
+ }
+ ],
+ "America/Adak": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-multipolygon",
+ "data": [[[[-170.1,51],[-169.48009,52.634],[-169.329,53.1067],[-168.8,54],[-179.9999,54],[-179.9999,48],[-170.1,51]]],[[[168,54],[179.9999,54],[179.9999,48],[168,54]]]],
+ "description": "Grab western parts of Aleutian Islands."
+ }
+ ],
+ "America/Anchorage": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-162,77],[-162,48],[-141,48],[-141,77],[-162,77]]],
+ "description": "Grab part of Alaska between -162 longitude and Canadian border."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Yukon"
+ }
+ ],
+ "America/Anguilla": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Anguilla"
+ }
+ ],
+ "America/Antigua": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Antigua and Barbuda"
+ }
+ ],
+ "America/Aruba": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Aruba"
+ }
+ ],
+ "America/Araguaina": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tocantins"
+ }
+ ],
+ "America/Argentina/Buenos_Aires": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Argentina"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-58,-34],[-52,-36],[-62.3476,-42],[-62.792531,-41.0179511],[-63,-35],[-58,-34]]],
+ "description": "Grab part of Argentina near Buenos Aires. Make an arbitrary boundary in the sea for the boundary with Rio Negro."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Buenos Aires"
+ }
+ ],
+ "America/Argentina/Catamarca": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chubut"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Departamento Atlántico"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Catamarca"
+ }
+ ],
+ "America/Argentina/Cordoba": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Argentina"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-60,-23],[-59,-32],[-50,-24],[-60,-23]]],
+ "description": "Intersect with a long section of the Paraná and Uruguay Rivers because there were holes. Whatever OSM thinks Uruguay's border is will be diffed as the last operation for this zone."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Córdoba"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Santa Fe"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Entre Ríos"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Santiago del Estero"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Chaco"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Corrientes"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Misiones"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Formosa"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Uruguay"
+ }
+ ],
+ "America/Argentina/Jujuy": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Jujuy"
+ }
+ ],
+ "America/Argentina/La_Rioja": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "La Rioja"
+ }
+ ],
+ "America/Argentina/Mendoza": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mendoza"
+ }
+ ],
+ "America/Argentina/Rio_Gallegos": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Argentina"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-59,-44],[-65,-52],[-68.3079531,-52.5782436],[-68.6,-52.5],[-80,-52],[-80,-44],[-59,-44]]],
+ "description": "Isolate most of Santa Cruz from the rest of Argentina. Also, use arbitrary sea boundary between Santa Cruz and Tierra Del Fuego"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Chubut"
+ }
+ ],
+ "America/Argentina/Salta": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Argentina"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-66,-40.5],[-66,-43],[-61,-43],[-62.3476,-42],[-62.792531,-41.0179511],[-64,-40.5],[-66,-40.5]]],
+ "description": "intersect part of Argentina to get Territorial waters and create an arbitrary sea boundary between Rio Negro and Buenos Aires."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Chubut"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Departamento Atlántico"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Rio Negro"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Neuquén"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "La Pampa"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Salta"
+ }
+ ],
+ "America/Argentina/San_Juan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "San Juan"
+ }
+ ],
+ "America/Argentina/San_Luis": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "San Luis"
+ }
+ ],
+ "America/Argentina/Tucuman": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tucumán"
+ }
+ ],
+ "America/Argentina/Ushuaia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Argentina"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-59,-55],[-68.3079531,-52.5782436],[-68.6,-52.5],[-78,-57],[-59,-55]]],
+ "description": "Use arbitrary sea boundary between Santa Cruz and Tierra Del Fuego"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-58,-86],[-45,-86],[-35,-86],[-35,-75],[-58,-74],[-54,-63],[-57,-61.6],[-59,-61.8],[-58.8,-62.25],[-57.3,-63.4],[-64,-64],[-63.8,-64.8],[-65.5,-65.25],[-67.5,-66],[-67.5,-86],[-60,-86],[-58,-86]]],
+ "description": "Add Antarctic areas near Stations: Belgrano II, San Martín, Vernadsky, Esperanza and Arctowski."
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-45,-60],[-47.5,-60.5],[-46,-61.5],[-43.5,-61],[-43.5,-60],[-45,-60]]],
+ "description": "Add Antarctic area near Orcadas Station."
+ }
+ ],
+ "America/Asuncion": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Paraguay"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Argentina"
+ }
+ ],
+ "America/Atikokan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Atikokan-tz"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Coral Harbour-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Iqaluit-tz"
+ }
+ ],
+ "America/Bahia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bahia"
+ }
+ ],
+ "America/Bahia_Banderas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mexico"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-105.287,20.68],[-105.3,20.8],[-105.4,20.8],[-105.3556082,20.9602092],[-105.56,21.11],[-106,21],[-105.883254,20.685482],[-105.5724898,20.62692],[-105.403923,20.6243015],[-105.330481,20.6347751],[-105.3009294,20.6475388],[-105.2808749,20.6713757],[-105.2786916,20.6724507],[-105.287,20.68]]],
+ "description": "Grab part of Mexico to get terriritorial waters near Bahía de Banderas."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Bahía de Banderas"
+ }
+ ],
+ "America/Barbados": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Barbados"
+ }
+ ],
+ "America/Belem": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Belem-tz"
+ }
+ ],
+ "America/Belize": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Belize"
+ }
+ ],
+ "America/Blanc-Sablon": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Quebec"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-61.25,53],[-61.25,48],[-51,53],[-61.25,53]]],
+ "description": "Grab eastern section of Quebec"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-58.9,46.8],[-63.37,47.66],[-60.4768198,48.7813802],[-58.9,46.8]]],
+ "description": "Exclude a section of area that should be America/Halifax"
+ }
+ ],
+ "America/Boa_Vista": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Roraima"
+ }
+ ],
+ "America/Bogota": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Colombia"
+ }
+ ],
+ "America/Boise": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Boise-tz"
+ }
+ ],
+ "America/Cambridge_Bay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cambridge Bay-tz"
+ }
+ ],
+ "America/Campo_Grande": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mato Grosso do Sul"
+ }
+ ],
+ "America/Cancun": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cancun-tz"
+ }
+ ],
+ "America/Caracas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Venezuela"
+ }
+ ],
+ "America/Cayenne": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-55,8],[-55,0],[-48,4],[-55,8]]],
+ "description": "Grab the part of France that represents French Guiana."
+ }
+ ],
+ "America/Cayman": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cayman Islands"
+ }
+ ],
+ "America/Chicago": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-88.154,25.404],[-84.6,29.9],[-85.3,31],[-85.7,35],[-85,36],[-84.9,36.7],[-85,37],[-85.6,37.3],[-86.3,37.5],[-86.855,38.355],[-87.908,38.358],[-87.581,40.827],[-87.082,41.219],[-86.672,41.491],[-85.583,45.151],[-90.242,50.008],[-104.194,50.416],[-104.172,48.093],[-104.0441176,47.9971054],[-104.04068,47.995995],[-104.035233,47.995213],[-104.031113,47.993931],[-104.027687,47.993095],[-104.021362,47.988647],[-104.017021,47.983223],[-104.012344,47.971817],[-104.00808,47.967781],[-103.99929,47.967541],[-103.99469,47.969959],[-103.9923665,47.9763976],[-103.9796981,47.973854],[-103.9697722,47.9669876],[-103.9659423,47.9598922],[-103.9645461,47.9454956],[-103.961357,47.8929405],[-103.9616393,47.885559],[-103.9659575,47.8780784],[-103.9671553,47.8752861],[-103.9676131,47.871128],[-103.9679106,47.8642082],[-103.9647597,47.8540992],[-103.9655761,47.848114],[-103.9286193,47.8481102],[-103.8006133,47.8489303],[-103.8002776,47.7628021],[-103.7992324,47.6757965],[-103.7387236,47.6758422],[-103.7370909,47.588871],[-103.6102523,47.5894737],[-103.6096267,47.5154762],[-103.608734,47.515419],[-103.6034621,47.5173797],[-103.60083,47.5183563],[-103.5975035,47.5188942],[-103.5927047,47.5167007],[-103.5885543,47.5140342],[-103.5851668,47.5131874],[-103.58123,47.5151176],[-103.5779494,47.516571],[-103.5725707,47.5162277],[-103.5704268,47.5135154],[-103.5662841,47.5108451],[-103.5642318,47.5099716],[-103.5615691,47.5104904],[-103.5604934,47.516037],[-103.5559768,47.5198173],[-103.5520018,47.5208244],[-103.5460128,47.5218773],[-103.540718,47.5233726],[-103.5387725,47.5247955],[-103.5369796,47.529438],[-103.5363768,47.5308303],[-103.5317458,47.5323105],[-103.5257796,47.5338249],[-103.51902,47.5325889],[-103.5142211,47.5303955],[-103.5107497,47.5277099],[-103.5059966,47.526432],[-103.4999007,47.5251846],[-103.4965285,47.5247955],[-103.4816893,47.5228157],[-103.4736327,47.5225296],[-103.469612,47.5226135],[-103.4663237,47.5240669],[-103.4629744,47.5241394],[-103.4601744,47.5214386],[-103.457405,47.5196533],[-103.4553756,47.5192375],[-103.4521331,47.5216102],[-103.4495391,47.5235061],[-103.4429015,47.5250244],[-103.4342726,47.52705],[-103.4310454,47.5298767],[-103.4305266,47.5331115],[-103.4307097,47.5372467],[-103.4348525,47.5399208],[-103.4404219,47.544403],[-103.4432296,47.5471038],[-103.4447325,47.5507545],[-103.4436187,47.5558395],[-103.4438094,47.5599784],[-103.4413527,47.5650901],[-103.4402007,47.5692558],[-103.4382552,47.5706787],[-103.435028,47.5735054],[-103.4331359,47.5763092],[-103.440277,47.585823],[-103.4385375,47.5918426],[-103.4311599,47.591999],[-103.4277648,47.5911483],[-103.4230498,47.5907859],[-103.418312,47.5899658],[-103.4129332,47.5896186],[-103.4089507,47.5906257],[-103.4056548,47.5920715],[-103.4010848,47.5949325],[-103.3951491,47.5973549],[-103.3918227,47.5978851],[-103.3871459,47.5984459],[-103.3824309,47.5980796],[-103.3770446,47.5977325],[-103.3736113,47.5959625],[-103.3695296,47.5946693],[-103.3668212,47.5942611],[-103.3595656,47.5971717],[-103.3556441,47.5995559],[-103.3489379,47.5996933],[-103.346176,47.5979118],[-103.343254,47.5924492],[-103.3403929,47.5883636],[-103.3383406,47.5874862],[-103.3302916,47.5876503],[-103.3229522,47.5887222],[-103.3175124,47.5869903],[-103.3154219,47.5851936],[-103.3112563,47.5820541],[-103.3091658,47.5802574],[-103.3057936,47.5798683],[-103.2997893,47.5809059],[-103.2925643,47.5847358],[-103.2887038,47.5884933],[-103.2875212,47.5922012],[-103.2849349,47.5945511],[-103.2796096,47.595581],[-103.2714843,47.5939026],[-103.2653655,47.5921821],[-103.258583,47.590477],[-103.2505187,47.5901756],[-103.2463607,47.5870361],[-103.2395934,47.5857925],[-103.2247084,47.5828628],[-103.2131728,47.5798683],[-103.2009734,47.576889],[-103.1941909,47.5751762],[-103.1893691,47.5720482],[-103.1832579,47.5703277],[-103.1766509,47.5727577],[-103.1726989,47.5746727],[-103.1639708,47.5743827],[-103.1606749,47.5758247],[-103.158142,47.5795555],[-103.1589202,47.5823021],[-103.1529464,47.5837974],[-103.1515654,47.582901],[-103.1460875,47.5802459],[-103.1407241,47.5803489],[-103.135475,47.58321],[-103.1335143,47.584629],[-103.1288985,47.5865554],[-103.1228255,47.5857505],[-103.1200866,47.5844192],[-103.1145781,47.5808448],[-103.1112059,47.5804481],[-103.1072005,47.5809822],[-103.1047438,47.5814056],[-103.1047435,47.5814057],[-103.1012038,47.582016],[-103.0938414,47.582611],[-103.0884627,47.5822525],[-103.0823745,47.580986],[-103.0721129,47.5761184],[-103.0694503,47.5766258],[-103.0669326,47.5808143],[-103.0676726,47.5826416],[-103.0630873,47.5854873],[-103.0584334,47.5864906],[-103.0544585,47.5879478],[-103.05381,47.5884208],[-103.0505675,47.5912399],[-103.0520858,47.5958137],[-103.0542449,47.5994529],[-103.0550917,47.604042],[-103.0458983,47.609272],[-103.0400237,47.6135215],[-103.0355605,47.6195831],[-103.0303725,47.6242828],[-103.0270919,47.6261825],[-103.0278624,47.6289291],[-103.0332488,47.6292915],[-103.0333403,47.6315918],[-103.0321273,47.6348343],[-103.0287551,47.6344375],[-103.0253218,47.6326599],[-103.0219497,47.6322593],[-103.020645,47.6332016],[-103.0215453,47.6391678],[-103.0223235,47.6419181],[-103.0278701,47.6464195],[-103.0367812,47.650856],[-103.0389861,47.6558799],[-103.0391158,47.6590995],[-103.0393447,47.6650848],[-103.038185,47.669712],[-103.0362395,47.6715889],[-103.0303649,47.674427],[-103.0300978,47.6744308],[-103.0235518,47.6736602],[-103.0040816,47.6740112],[-102.9998397,47.6685676],[-102.9991378,47.6676597],[-102.9910964,47.6682624],[-102.9883879,47.6678428],[-102.9908294,47.6613578],[-102.9814681,47.662445],[-102.9761657,47.6643791],[-102.9714659,47.664463],[-102.9687423,47.6635933],[-102.9673003,47.6608543],[-102.9683989,47.6543922],[-102.9603957,47.6559181],[-102.9549559,47.654171],[-102.9527663,47.6496086],[-102.9526824,47.6473083],[-102.9564971,47.641716],[-102.9577559,47.6393966],[-102.9549102,47.6353035],[-102.9527816,47.6321182],[-102.9514159,47.6316833],[-102.9463271,47.6391372],[-102.9443282,47.6396293],[-102.9395446,47.637413],[-102.9347991,47.636116],[-102.9299468,47.632061],[-102.924385,47.6270942],[-102.9183806,47.6281204],[-102.9111022,47.6310081],[-102.9070967,47.6315384],[-102.9037017,47.6306762],[-102.8955535,47.6280594],[-102.8921279,47.6262779],[-102.8880538,47.6249656],[-102.8846129,47.6227226],[-102.8837584,47.6176757],[-102.8829345,47.6135482],[-102.8788222,47.6113205],[-102.8734053,47.6100311],[-102.8700026,47.6087074],[-102.8677596,47.6023025],[-102.8650206,47.6009712],[-102.8576964,47.6024742],[-102.8550109,47.6025238],[-102.8523101,47.602108],[-102.849594,47.6012344],[-102.8468093,47.5985222],[-102.841133,47.5959472],[-102.8393706,47.5965957],[-102.8322295,47.5976791],[-102.8265151,47.6002426],[-102.8175048,47.6001548],[-102.8078765,47.5967407],[-102.79998,47.5920677],[-102.7897033,47.5935249],[-102.7815856,47.5931053],[-102.7686461,47.5952263],[-102.7608794,47.5929794],[-102.7498702,47.5889854],[-102.7395934,47.5816383],[-102.7333602,47.574192],[-102.7287444,47.5718727],[-102.7216185,47.5732498],[-102.7141036,47.5758476],[-102.7037734,47.5760841],[-102.6937789,47.5741882],[-102.6864241,47.5710144],[-102.6825713,47.5659408],[-102.6813582,47.5598983],[-102.6851119,47.5540504],[-102.6878279,47.5454902],[-102.6850585,47.5352325],[-102.6780013,47.5290184],[-102.6702956,47.5276756],[-102.6618575,47.5296859],[-102.6544493,47.5344047],[-102.6433638,47.537384],[-102.6325759,47.5373191],[-102.6205138,47.5387993],[-102.614334,47.5410614],[-102.6072692,47.5436439],[-102.5996474,47.5441169],[-102.5905074,47.5409774],[-102.584854,47.5356369],[-102.5769652,47.5306472],[-102.566429,47.5266266],[-102.5533141,47.5247879],[-102.5410155,47.521408],[-102.5263823,47.515953],[-102.5149611,47.5119476],[-102.505493,47.5112342],[-102.4947661,47.512371],[-102.4822005,47.5126342],[-102.4722441,47.5110244],[-102.4618758,47.5103302],[-102.4470366,47.5137787],[-102.4382933,47.5150642],[-102.4389647,47.5199051],[-102.4410781,47.526844],[-102.4382705,47.5341835],[-102.4363478,47.5412025],[-102.4402465,47.5478019],[-102.4423369,47.5541305],[-102.4441985,47.565319],[-102.436859,47.571846],[-102.426773,47.5775146],[-102.4208449,47.5855255],[-102.4147872,47.5908088],[-102.3972777,47.591465],[-102.3805541,47.5896797],[-102.3648223,47.5899925],[-102.3495406,47.5902977],[-102.3429183,47.5931587],[-102.3418349,47.5992508],[-102.3375701,47.6044922],[-102.3278044,47.6074142],[-102.3133467,47.6061821],[-102.301155,47.6052055],[-102.2872618,47.6066856],[-102.2500255,47.6152528],[-102.203,47.645],[-101.326,46.146],[-101.324,45.938],[-100.583,44.865],[-100.475,44.533],[-100.855,44.162],[-100.9013924,42.9979018],[-100.899765,42.8137272],[-100.8650084,42.8138669],[-100.8646698,42.7845595],[-100.8454182,42.7845517],[-100.8457039,42.7550128],[-100.8906658,42.7553275],[-100.8909198,42.6113639],[-100.7733146,42.6103669],[-100.775008,42.4385172],[-100.8295136,42.4385016],[-100.8295136,42.351938],[-100.8100927,42.3520397],[-100.8085263,42.2050744],[-100.7501894,42.2048549],[-100.7501474,42.0886605],[-101.415,41.75],[-101.813,40.11],[-102.225,40.126],[-102.185,39.457],[-101.838,39.456],[-101.843,37.834],[-103.975,38.445],[-105.169,32.051],[-105.177,30.918],[-107.424,25.542],[-88.154,25.404]]],
+ "description": "initial intersect of counties. Includes anomolies in ND and SD."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Michigan"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Illinois"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "LaPorte County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Porter County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Jasper County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Newton County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Gibson County, IN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Pike County, IN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Dubois County, IN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Perry County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Breckinridge County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Grayson County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Hart County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Green County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Adair County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Russell County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Wayne County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Pickett County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Overton County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Cumberland County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Bledsoe County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sequatchie County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Marion County, TN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Alabama"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Jackson County, FL"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Calhoun County, FL"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Liberty County, FL"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Franklin County, FL"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hudspeth County, TX"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "New Mexico"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Colorado"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hamilton County, KS"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Greeley County, KS"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Wallace County, KS"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sherman County, KS"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Dundy County, NE"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Chase County, NE"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Perkins County, NE"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Keith County, NE"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Arthur County, NE"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hooker County, NE"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Thomas County, NE"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Todd County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Mellette County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Jones County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Hughes County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sully County, SD"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Dewey County, SD"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Corson County, SD"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Grant County, ND"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Morton County, ND"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Oliver County, ND"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Mercer County, ND"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "McLean County, ND"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Montana"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-85,29],[-84,29.6],[-85.09,29.73],[-85.1095253,29.776718],[-85.1104997,29.7778629],[-85.1686443,29.8170126],[-85.1686443,29.8170126],[-85.1803417,29.8214145],[-85.1811142,29.8218427],[-85.1831956,29.8237787],[-85.1840968,29.824393],[-85.1867361,29.8256775],[-85.189075,29.8271854],[-85.1904912,29.8279486],[-85.1909633,29.8284884],[-85.1912422,29.8293447],[-85.1912208,29.8300334],[-85.1908989,29.8308897],[-85.1907058,29.8316529],[-85.1907702,29.8324347],[-85.1909633,29.8331606],[-85.1930232,29.8358969],[-85.1938815,29.8374604],[-85.1945252,29.8383724],[-85.1951475,29.8388564],[-85.1958342,29.8390983],[-85.1967354,29.8390983],[-85.1980014,29.8387633],[-85.1991172,29.8383911],[-85.2001686,29.8383352],[-85.2021213,29.8386889],[-85.2031941,29.8391728],[-85.2044601,29.8401221],[-85.2055759,29.8410341],[-85.2070994,29.8417972],[-85.2077217,29.8421694],[-85.2093954,29.8439562],[-85.2108975,29.8453335],[-85.2113695,29.8460966],[-85.2114124,29.846841],[-85.2110906,29.8477716],[-85.2102589,29.8488151],[-85.2086229,29.857449],[-85.2089233,29.8588075],[-85.2089019,29.8598682],[-85.20858,29.8636086],[-85.208108,29.8656369],[-85.2079148,29.8682792],[-85.2079363,29.8699352],[-85.2084942,29.8726891],[-85.2095885,29.8753498],[-85.2101679,29.8763917],[-85.2108545,29.8770057],[-85.2118416,29.8774337],[-85.2200384,29.8793128],[-85.2221198,29.8799826],[-85.2266259,29.8818617],[-85.2307029,29.8835362],[-85.2321835,29.8840199],[-85.2337284,29.8841873],[-85.2378054,29.8841315],[-85.2392216,29.8842617],[-85.2404876,29.884578],[-85.2426548,29.8855455],[-85.2446933,29.8864757],[-85.2476759,29.8874245],[-85.2572675,29.8901592],[-85.259263,29.8907917],[-85.2604861,29.8913126],[-85.2766652,29.9011346],[-85.2774591,29.9017113],[-85.2779527,29.9023251],[-85.2789612,29.9041852],[-85.2796478,29.9052454],[-85.2848406,29.9115508],[-85.2857418,29.912518],[-85.2877374,29.9140617],[-85.2923937,29.9169817],[-85.2930803,29.9174839],[-85.2938528,29.9185812],[-85.2956553,29.9223193],[-85.2961702,29.9237513],[-85.296535,29.9252205],[-85.2987022,29.938535],[-85.2989383,29.9397622],[-85.2993245,29.9407291],[-85.2997537,29.9414728],[-85.3006549,29.942291],[-85.3020711,29.9432578],[-85.3124352,29.9485196],[-85.3151174,29.9501],[-85.3204174,29.9537626],[-85.321147,29.9543947],[-85.3221984,29.9557705],[-85.3230352,29.9564955],[-85.3239365,29.9568859],[-85.3258891,29.957202],[-85.3319831,29.9574808],[-85.3336783,29.9577039],[-85.3355665,29.9582059],[-85.3385062,29.9594886],[-85.3403301,29.9600278],[-85.3418751,29.9602508],[-85.3443427,29.9601207],[-85.3456516,29.9598976],[-85.3486986,29.9586521],[-85.3495998,29.9583732],[-85.3509517,29.9582245],[-85.352561,29.9580943],[-85.3542991,29.9582802],[-85.3560586,29.9585963],[-85.3575606,29.9590053],[-85.3589339,29.9595816],[-85.3627963,29.9619611],[-85.3708644,29.9678168],[-85.3715081,29.9683745],[-85.3732886,29.9706206],[-85.3732886,29.9706206],[-85.3783746,29.9770365],[-85.3787823,29.9777614],[-85.3788252,29.9785235],[-85.378675,29.9793599],[-85.3780956,29.980345],[-85.3752847,29.9828913],[-85.3744693,29.9839879],[-85.3731604,29.9869615],[-85.3724952,29.9880395],[-85.3716369,29.988913],[-85.3706069,29.9896936],[-85.3694053,29.9911246],[-85.3691692,29.9921281],[-85.3691263,29.9934848],[-85.3692765,29.9948228],[-85.3695555,29.996198],[-85.3720017,30.00404],[-85.37286,30.0067158],[-85.3735037,30.008128],[-85.3750344,30.0105144],[-85.3750344,30.0105144],[-85.3786964,30.0177527],[-85.3792543,30.0189417],[-85.3794475,30.0200565],[-85.3795548,30.0215428],[-85.3795548,30.0225275],[-85.3798766,30.023345],[-85.3805418,30.0240509],[-85.3814001,30.0244597],[-85.3836317,30.0249241],[-85.3866787,30.0253886],[-85.3889961,30.0261131],[-85.3909702,30.0270792],[-85.3924294,30.0282496],[-85.446289,29.901033],[-86,29.65],[-85,29]]],
+ "description": "Omit certain section south of Searcy Creek, FL"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Bay County, FL"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-85.2,32.97],[-85.237,32.954],[-85.282,32.847],[-85.235,32.765],[-85.198,32.656],[-85.182,32.571],[-85.214,32.514],[-85.119,32.444],[-85.094,32.397],[-85.073,32.355],[-85.031,32.339],[-85.02,32.3429],[-85.011,32.358],[-84.86,32.35],[-85.2,32.97]]],
+ "description": "Omit a few towns in Alabama close to Georgia that observe eastern time"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-86.95,41.45],[-86.95,41.25],[-86.92,41.25],[-86.92,41.45],[-86.95,41.45]]],
+ "description": "patch to cover weird polygon hole that is artifact of geographic union operations Indiana"
+ }
+ ],
+ "America/Chihuahua": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chihuahua"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Ojinaga-tz"
+ }
+ ],
+ "America/Costa_Rica": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Costa Rica"
+ }
+ ],
+ "America/Creston": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Creston-tz"
+ }
+ ],
+ "America/Cuiaba": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mato Grosso"
+ }
+ ],
+ "America/Curacao": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Curaçao"
+ }
+ ],
+ "America/Danmarkshavn": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Greenland"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-24.2,73.5],[-15,71.8],[-14,77],[-24.2,73.5]]],
+ "description": "Grab part of Greenland and make a best guess at this timezone's location."
+ }
+ ],
+ "America/Dawson": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-139.446, 64.0893], [-139.4126, 64.0888], [-139.4105, 64.0688], [-139.3765, 64.0609], [-139.3758, 64.0556], [-139.2775, 64.0534], [-139.2854, 64.0208], [-139.4496, 64.0278], [-139.4546, 64.0254], [-139.4824, 64.0219], [-139.4838, 64.0314], [-139.4738, 64.034], [-139.4747, 64.0369], [-139.4737, 64.0404], [-139.4713, 64.0419], [-139.4677, 64.0469], [-139.4663, 64.0487], [-139.4572, 64.0515], [-139.4538, 64.0546], [-139.4417, 64.0736], [-139.4476, 64.0789], [-139.4477, 64.0807], [-139.44, 64.0819], [-139.446, 64.0893]]],
+ "description": "Manually create polygon based off of best guess of city limits of Dawson as shown in this map: http://dawson.planyukon.ca/index.php/the-dawson-region/resource-maps/6-01-regional-overview-map/file"
+ }
+ ],
+ "America/Dawson_Creek": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Dawson Creek-tz"
+ }
+ ],
+ "America/Denver": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Denver-tz"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "West Wendover"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Boise-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Page"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sioux County, ND"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-98,44],[-98,46.5],[-100.8,46.57],[-101.326,46.146],[-101.324,45.938],[-100.583,44.865],[-100.475,44.533],[-100.855,44.162],[-98,44]]],
+ "description": "anomalies in North Dakota"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Dewey County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Corson County, SD"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Grant County, ND"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Morton County, ND"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-111.432,36.937],[-111.423,36.933],[-111.423,36.928],[-111.488,36.875],[-111.58,36.875],[-111.45,36.97],[-111.432,36.937]]],
+ "description": "Exclude artifacts as result of mismatching City boundary of Page, AZ"
+ }
+ ],
+ "America/Detroit": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Michigan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Gogebic County"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Iron County, MI"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Dickinson County, MI"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Menominee County, MI"
+ }
+ ],
+ "America/Dominica": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Dominica"
+ }
+ ],
+ "America/Edmonton": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-118,55],[-123,48],[-112,48],[-118,55]]],
+ "description": "The Edmonton timezone in OSM currently does not include the British Columbia portion. Therefore, the boundary is obtained by first intersect Canada with this polygon and then remove the Vancouver and Creston timezones."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Edmonton-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Vancouver-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Creston-tz"
+ }
+ ],
+ "America/Eirunepe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Eirunepe-tz"
+ }
+ ],
+ "America/El_Salvador": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "El Salvador"
+ }
+ ],
+ "America/Fort_Nelson": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Northern Rockies Regional Municipality"
+ }
+ ],
+ "America/Fortaleza": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Brazil"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-28,-9],[-39,-8.5],[-44,-12],[-51,-8],[-46,2],[-28,-9]]],
+ "description": "intersect relevant part of Brazil to preserve terriritorial waters"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Pernambuco"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bahia"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Tocantins"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Belem-tz"
+ }
+ ],
+ "America/Glace_Bay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-58,46],[-59,45.428],[-60.1323124,45.7017791],[-60.3408651,46.3601573],[-60.0238,46.5],[-58,46]]],
+ "description": "intersect part of Canada in Cape Breton County to preserve terriritorial waters"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Cape Breton County"
+ }
+ ],
+ "America/Godthab": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Greenland"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-24,72.4],[-19,71],[-18,70],[-25,70.5],[-24,72.4]]],
+ "description": "Exclude area from Greenland used to make America/Scoresbysund"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-24.2,73.5],[-15,71.8],[-14,77],[-24.2,73.5]]],
+ "description": "Exclude area from Greenland used to make America/Danmarkshavn"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-81,82],[-60,78],[-81,60],[-81,82]]],
+ "description": "Exclude area from Greenland used to make America/Thule"
+ }
+ ],
+ "America/Goose_Bay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-71,50],[-57.1077594,51.9984948],[-56.59,53.2],[-53.7,53.6],[-65,62],[-71,50]]],
+ "description": "Grab part of Canada to make timezone in northern Labrador. Includes a slightly educated guess on timezone boundary in Labrador."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Quebec"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Pangnirtung-tz"
+ }
+ ],
+ "America/Grand_Turk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Turks and Caicos Islands"
+ }
+ ],
+ "America/Grenada": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Grenada"
+ }
+ ],
+ "America/Guadeloupe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guadeloupe"
+ }
+ ],
+ "America/Guatemala": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guatemala"
+ }
+ ],
+ "America/Guayaquil": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ecuador"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-72,0],[-83,4],[-83,-9],[-72,0]]],
+ "description": "Isolate mainlaind of Ecuador by excluding Galapagos islands."
+ }
+ ],
+ "America/Guyana": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guyana"
+ }
+ ],
+ "America/Halifax": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-58.9,46.8],[-60.0238,46.5],[-60.3408651,46.3601573],[-60.1323124,45.7017791],[-59,45.428],[-59,34],[-67,44.06],[-66.4878,44.482],[-66.21,44.83],[-65.3,45.2],[-65.13,45.38],[-64.98,45.47],[-64.80607,45.5364896],[-64.5,46],[-63.7491191,46.2295464],[-64.34,46.36],[-64.56,46.6],[-64.58,46.69],[-64.46,47.07],[-63.37,47.66],[-60.4768198,48.7813802],[-60.4037717,47.7610985],[-58.9,46.8]]],
+ "description": "Grab area of Canada including New Brunswick and an area of the Gulf of St Lawrence including Prince Edward Island and the Magdalen Islands"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Cape Breton County"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "New Brunswick",
+ "description": "Exclude New Brunswick to get exact boundary between Nova Scotia and New Brunswick"
+ }
+ ],
+ "America/Havana": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cuba"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-75.0866329,19.9027428],[-75.0866372,19.9041687],[-75.0866182,19.9104153],[-75.0866276,19.9115045],[-75.0866493,19.9122056],[-75.0866007,19.9125589],[-75.0865962,19.9138869],[-75.0866447,19.9738202],[-75.1668228,19.9738244],[-75.1906065,19.9737598],[-75.1946678,19.9699988],[-75.1964374,19.9683235],[-75.2320198,19.9345907],[-75.2320369,19.9022073],[-75.2324876,19.8697408],[-75.0865627,19.8717621],[-75.0866329,19.9027428]]],
+ "description": "Exclude Guantanamo Bay US Military base from the rest of Cuba."
+ }
+ ],
+ "America/Hermosillo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mexico"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-112.6,28.5],[-112.55,28.2],[-111.5,27.6],[-110,26.3],[-109.2480469,26.316067],[-109,27],[-114,34],[-114.8069313,31.8166753],[-114.802,31.816],[-114.793,31.8198],[-114.787,31.8205],[-114.7645,31.8174],[-114.755,31.812],[-114.7455,31.804],[-114.739,31.795],[-114.732,31.777],[-114.707,31.757],[-114.658,31.729],[-114.623,31.7],[-112.88,29.4],[-112.6,28.5]]],
+ "description": "Grab part of Mexico including part of the Gulf of California. The results in making an arbitrary boundary in the Gulf of California."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sonora"
+ }
+ ],
+ "America/Indiana/Indianapolis": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Indianapolis-tz"
+ }
+ ],
+ "America/Indiana/Knox": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Starke County, IN"
+ }
+ ],
+ "America/Indiana/Marengo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Crawford County, IN"
+ }
+ ],
+ "America/Indiana/Petersburg": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pike County, IN"
+ }
+ ],
+ "America/Indiana/Tell_City": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Perry County, IN"
+ }
+ ],
+ "America/Indiana/Vevay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Switzerland County, IN"
+ }
+ ],
+ "America/Indiana/Vincennes": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Vincennes-tz"
+ }
+ ],
+ "America/Indiana/Winamac": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pulaski County, IN"
+ }
+ ],
+ "America/Inuvik": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-133.7991, 68.4161], [-133.73, 68.4165], [-133.7297, 68.3955], [-133.6343, 68.3464], [-133.3888, 68.3166], [-133.3843, 68.2982], [-133.4485, 68.297], [-133.4482, 68.2901], [-133.4719, 68.29], [-133.4726, 68.2926], [-133.4911, 68.2966], [-133.535, 68.2973], [-133.5556, 68.3015], [-133.5546, 68.3043], [-133.5653, 68.3074], [-133.6772, 68.3176], [-133.6734, 68.3226], [-133.7046, 68.3379], [-133.7225, 68.3508], [-133.7524, 68.3625], [-133.7709, 68.3749], [-133.7733, 68.3827], [-133.7695, 68.3874], [-133.775, 68.3906], [-133.7884, 68.394], [-133.7956, 68.4007], [-133.7956, 68.4092], [-133.7991, 68.4161]]],
+ "description": "This is a manual trace of what appears to be the boundary of the city limits of Inuvik. Boundary is based off of this document: http://www.inuvik.ca/en/living-here/resources/By-laws/2582_Community_Plan_Map.pdf"
+ }
+ ],
+ "America/Iqaluit": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Iqaluit-tz"
+ }
+ ],
+ "America/Jamaica": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Jamaica"
+ }
+ ],
+ "America/Juneau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-136,58.1],[-136.431016,57.830928],[-137,57.8248],[-138.5,58.5],[-138.2781,58.719],[-137.9464,58.80181],[-137.5725,58.89509],[-137.52612,58.906375],[-136,60],[-132,60],[-132,57.5],[-136,58.1]]],
+ "description": "Isolate Juneau area from the rest of Alaska. This operation results in an arbitrary sea boundary based off of the last known trajectories of various county boundaries."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Hoonah-Angoon"
+ }
+ ],
+ "America/Kentucky/Louisville": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Jefferson County, KY"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Clark County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Floyd County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Harrison County, IN"
+ }
+ ],
+ "America/Kentucky/Monticello": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Wayne County, KY"
+ }
+ ],
+ "America/Kralendijk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bonaire, Sint Eustatius and Saba"
+ }
+ ],
+ "America/La_Paz": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bolivia"
+ }
+ ],
+ "America/Lima": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Peru"
+ }
+ ],
+ "America/Los_Angeles": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Los Angeles-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "West Wendover"
+ }
+ ],
+ "America/Lower_Princes": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sint Maarten"
+ }
+ ],
+ "America/Maceio": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sergipe"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Alagoas"
+ }
+ ],
+ "America/Managua": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Nicaragua"
+ }
+ ],
+ "America/Manaus": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Manaus-tz"
+ }
+ ],
+ "America/Marigot": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Maarten"
+ }
+ ],
+ "America/Martinique": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Martinique"
+ }
+ ],
+ "America/Matamoros": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Matamoros-tz"
+ }
+ ],
+ "America/Mazatlan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mexico"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-112,28],[-128,28],[-109,20],[-105.56,21.11],[-105.3556082,20.9602092],[-104.22,21.22],[-107.75,25.33],[-109.2480469,26.316067],[-110,26.3],[-112,28]]],
+ "description": "Grab part of Mexico to make this timezone. This operation results in two arbitrary sea boundaries - one near Los Mochis and another near Puerto Vallarta."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sinaloa"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Nayarit"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bahía de Banderas"
+ }
+ ],
+ "America/Miquelon": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Pierre and Miquelon"
+ }
+ ],
+ "America/Menominee": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Gogebic County"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Iron County, MI"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Dickinson County, MI"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Menominee County, MI"
+ }
+ ],
+ "America/Merida": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Merida-tz"
+ }
+ ],
+ "America/Metlakatla": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Prince of Wales-Hyder"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-131.65,55.11],[-131.674,55.04],[-131.65,54.964],[-131,54.96],[-131.3,55.4],[-131.8,55.25],[-131.65,55.11]]],
+ "description": "Intersect part of this county. This operation results in an arbitrary sea boundary to the west of the Annette Island Airport."
+ }
+ ],
+ "America/Mexico_City": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mexico"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-120,18],[-93.64,11.17],[-89.4,15.7],[-90,17],[-91.74,17.9],[-92.7,18.2],[-92.4690272,18.6504269],[-92.5110808,18.8519806],[-95,23],[-97.574497,22.313607],[-97.7743477,22.263916],[-97.7745,22.2638],[-97.7844,22.26143],[-97.79,22.2604],[-97.797,22.256],[-98,21.7],[-102.7,24],[-103.3,21.4],[-104.3,20.4],[-105.26,20.68],[-105.2786916,20.6724507],[-105.2808749,20.6713757],[-105.3009294,20.6475388],[-105.330481,20.6347751],[-105.403923,20.6243015],[-105.5724898,20.62692],[-105.883254,20.685482],[-108,21.5],[-120,18]]],
+ "description": "Grab part of Mexico to make this timezone. This operation results in three arbitrary sea boundaries - one near Puerto Vallarta, one near Tampico and another near Ciudad del Carmen."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Jalisco"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Zacatecas"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "San Luis Potosí"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Veracruz"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Tabasco"
+ }
+ ],
+ "America/Moncton": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-70,46],[-67,44.06],[-66.4878,44.482],[-66.21,44.83],[-65.3,45.2],[-65.13,45.38],[-64.98,45.47],[-64.80607,45.5364896],[-64.5,46],[-63.7491191,46.2295464],[-64.34,46.36],[-64.56,46.6],[-64.58,46.69],[-64.46,47.07],[-63.37,47.66],[-61.69,48.52],[-60,52],[-70,50],[-70,46]]],
+ "description": "Grab area of Canada around New Brunswick including part of Gulf of St Lawrence"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Quebec",
+ "description": "Exclude Quebec territory including parts of Gulf of St Lawrence"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "New Brunswick",
+ "description": "Union to get exact border between New Brunswick and Nova Scotia"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-66.681,48.01],[-66.685,48.0158],[-66.6864,48.0166],[-66.723,48.029],[-66.7179,48.0363],[-66.7407,48.0623],[-66.733,48.0728],[-66.756,48.1022],[-66.802,48.086],[-66.754,48.0305],[-66.737,48.0274],[-66.73,48.0309],[-66.71,47.996],[-66.681,48.01]]],
+ "description": "Include terroritory belonging to Listuguj Mi'gmaq First Nation"
+ }
+ ],
+ "America/Monterrey": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Monterrey-tz"
+ }
+ ],
+ "America/Montevideo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Uruguay"
+ }
+ ],
+ "America/Montserrat": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Montserrat"
+ }
+ ],
+ "America/Nassau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "The Bahamas"
+ }
+ ],
+ "America/New_York": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-85,42],[-86,38.5],[-86.7,38],[-86.3,37.5],[-85.6,37.3],[-85,37],[-84.9,36.7],[-85,36],[-85.7,35],[-85.3,31],[-84.6,29.9],[-85,29.6],[-85.1095253,29.776718],[-85.1104997,29.7778629],[-85.1686443,29.8170126],[-85.1686443,29.8170126],[-85.1803417,29.8214145],[-85.1811142,29.8218427],[-85.1831956,29.8237787],[-85.1840968,29.824393],[-85.1867361,29.8256775],[-85.189075,29.8271854],[-85.1904912,29.8279486],[-85.1909633,29.8284884],[-85.1912422,29.8293447],[-85.1912208,29.8300334],[-85.1908989,29.8308897],[-85.1907058,29.8316529],[-85.1907702,29.8324347],[-85.1909633,29.8331606],[-85.1930232,29.8358969],[-85.1938815,29.8374604],[-85.1945252,29.8383724],[-85.1951475,29.8388564],[-85.1958342,29.8390983],[-85.1967354,29.8390983],[-85.1980014,29.8387633],[-85.1991172,29.8383911],[-85.2001686,29.8383352],[-85.2021213,29.8386889],[-85.2031941,29.8391728],[-85.2044601,29.8401221],[-85.2055759,29.8410341],[-85.2070994,29.8417972],[-85.2077217,29.8421694],[-85.2093954,29.8439562],[-85.2108975,29.8453335],[-85.2113695,29.8460966],[-85.2114124,29.846841],[-85.2110906,29.8477716],[-85.2102589,29.8488151],[-85.2086229,29.857449],[-85.2089233,29.8588075],[-85.2089019,29.8598682],[-85.20858,29.8636086],[-85.208108,29.8656369],[-85.2079148,29.8682792],[-85.2079363,29.8699352],[-85.2084942,29.8726891],[-85.2095885,29.8753498],[-85.2101679,29.8763917],[-85.2108545,29.8770057],[-85.2118416,29.8774337],[-85.2200384,29.8793128],[-85.2221198,29.8799826],[-85.2266259,29.8818617],[-85.2307029,29.8835362],[-85.2321835,29.8840199],[-85.2337284,29.8841873],[-85.2378054,29.8841315],[-85.2392216,29.8842617],[-85.2404876,29.884578],[-85.2426548,29.8855455],[-85.2446933,29.8864757],[-85.2476759,29.8874245],[-85.2572675,29.8901592],[-85.259263,29.8907917],[-85.2604861,29.8913126],[-85.2766652,29.9011346],[-85.2774591,29.9017113],[-85.2779527,29.9023251],[-85.2789612,29.9041852],[-85.2796478,29.9052454],[-85.2848406,29.9115508],[-85.2857418,29.912518],[-85.2877374,29.9140617],[-85.2923937,29.9169817],[-85.2930803,29.9174839],[-85.2938528,29.9185812],[-85.2956553,29.9223193],[-85.2961702,29.9237513],[-85.296535,29.9252205],[-85.2987022,29.938535],[-85.2989383,29.9397622],[-85.2993245,29.9407291],[-85.2997537,29.9414728],[-85.3006549,29.942291],[-85.3020711,29.9432578],[-85.3124352,29.9485196],[-85.3151174,29.9501],[-85.3204174,29.9537626],[-85.321147,29.9543947],[-85.3221984,29.9557705],[-85.3230352,29.9564955],[-85.3239365,29.9568859],[-85.3258891,29.957202],[-85.3319831,29.9574808],[-85.3336783,29.9577039],[-85.3355665,29.9582059],[-85.3385062,29.9594886],[-85.3403301,29.9600278],[-85.3418751,29.9602508],[-85.3443427,29.9601207],[-85.3456516,29.9598976],[-85.3486986,29.9586521],[-85.3495998,29.9583732],[-85.3509517,29.9582245],[-85.352561,29.9580943],[-85.3542991,29.9582802],[-85.3560586,29.9585963],[-85.3575606,29.9590053],[-85.3589339,29.9595816],[-85.3627963,29.9619611],[-85.3708644,29.9678168],[-85.3715081,29.9683745],[-85.3732886,29.9706206],[-85.3732886,29.9706206],[-85.3783746,29.9770365],[-85.3787823,29.9777614],[-85.3788252,29.9785235],[-85.378675,29.9793599],[-85.3780956,29.980345],[-85.3752847,29.9828913],[-85.3744693,29.9839879],[-85.3731604,29.9869615],[-85.3724952,29.9880395],[-85.3716369,29.988913],[-85.3706069,29.9896936],[-85.3694053,29.9911246],[-85.3691692,29.9921281],[-85.3691263,29.9934848],[-85.3692765,29.9948228],[-85.3695555,29.996198],[-85.3720017,30.00404],[-85.37286,30.0067158],[-85.3735037,30.008128],[-85.3750344,30.0105144],[-85.3750344,30.0105144],[-85.3786964,30.0177527],[-85.3792543,30.0189417],[-85.3794475,30.0200565],[-85.3795548,30.0215428],[-85.3795548,30.0225275],[-85.3798766,30.023345],[-85.3805418,30.0240509],[-85.3814001,30.0244597],[-85.3836317,30.0249241],[-85.3866787,30.0253886],[-85.3889961,30.0261131],[-85.3909702,30.0270792],[-85.3924294,30.0282496],[-85.446289,29.901033],[-86,29.65],[-86,21],[-37,42],[-67,49],[-85,42]]],
+ "description": "Intersect part of USA near the edges of the following polygons. This operation also results in creating a boundary along the Gulf Intracoastal Waterway from Lake Wimico to Wetappo Creek."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Michigan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Indiana"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Dearborn County, IN"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Ohio County, IN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Jefferson County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Breckinridge County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Grayson County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hart County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Green County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Adair County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Russell County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Wayne County, KY"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Pickett County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Overton County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Cumberland County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bledsoe County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sequatchie County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Marion County, TN"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Alabama"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Jackson County, FL"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Calhoun County, FL"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Liberty County, FL"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Franklin County, FL"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bay County, FL"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-75.0866329,19.9027428],[-75.0866372,19.9041687],[-75.0866182,19.9104153],[-75.0866276,19.9115045],[-75.0866493,19.9122056],[-75.0866007,19.9125589],[-75.0865962,19.9138869],[-75.0866447,19.9738202],[-75.1668228,19.9738244],[-75.1906065,19.9737598],[-75.1946678,19.9699988],[-75.1964374,19.9683235],[-75.2320198,19.9345907],[-75.2320369,19.9022073],[-75.2324876,19.8697408],[-75.0865627,19.8717621],[-75.0866329,19.9027428]]],
+ "description": "Add Guantanamo Bay US Military Base to this timeonze."
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-85.2,32.97],[-85.237,32.954],[-85.282,32.847],[-85.235,32.765],[-85.198,32.656],[-85.182,32.571],[-85.214,32.514],[-85.119,32.444],[-85.094,32.397],[-85.073,32.355],[-85.031,32.339],[-85.02,32.3429],[-85.011,32.358],[-84.86,32.35],[-85.2,32.97]]],
+ "description": "Add areas in Alabama near Phenix City and Lanett that observe eastern time. The boundaries are a speculative guess."
+ }
+ ],
+ "America/Nipigon": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Nipigon-tz"
+ }
+ ],
+ "America/Nome": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-162,78],[-162,49],[-170,49],[-169.48009,52.634],[-169.329,53.1067],[-169,55],[-179,58],[-162,78]]],
+ "description": "Intersect part of Alaska to make this timezone. Includes an arbitrary sea boundary in the Aleutian islands between Umnak Island and Chuginadak Island."
+ }
+ ],
+ "America/Noronha": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Brazil"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-32.4,-3],[-33,-4.5],[-32,-4.5],[-32.4,-3]]],
+ "description": "Intersect the boundary of Brazil to isolate Fernando de Noronha archipelago."
+ }
+ ],
+ "America/North_Dakota/Beulah": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mercer County, ND"
+ }
+ ],
+ "America/North_Dakota/Center": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Oliver County, ND"
+ }
+ ],
+ "America/North_Dakota/New_Salem": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Morton County, ND"
+ }
+ ],
+ "America/Ojinaga": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ojinaga-tz"
+ }
+ ],
+ "America/Panama": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Panama"
+ }
+ ],
+ "America/Pangnirtung": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pangnirtung-tz"
+ }
+ ],
+ "America/Paramaribo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Suriname"
+ }
+ ],
+ "America/Phoenix": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Phoenix-tz"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Page"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-111.432,36.937],[-111.423,36.933],[-111.423,36.928],[-111.488,36.875],[-111.58,36.875],[-111.45,36.97],[-111.432,36.937]]],
+ "description": "Include artifacts as result of mismatching City boundary of Page, AZ"
+ }
+ ],
+ "America/Port-au-Prince": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Haiti"
+ }
+ ],
+ "America/Port_of_Spain": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Trinidad and Tobago"
+ }
+ ],
+ "America/Porto_Velho": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Rondônia"
+ }
+ ],
+ "America/Puerto_Rico": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-65.22,18.6],[-65.108,18.43],[-65.16,18.25],[-65.145,18.23],[-65.1,18.225],[-65,18],[-66,17],[-77,18],[-65,19],[-65.22,18.6]]],
+ "description": "Intersect the part of USA that includes Puerto Rico. This results in an arbitrary sea boundary between Isla de Culebra and the Virgin Islands."
+ }
+ ],
+ "America/Punta_Arenas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Magallanes Region"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-64,-64],[-57.3,-63.4],[-58.8,-62.25],[-59,-61.8],[-63,-62.7],[-64,-64]]],
+ "description": "Add Antarctic Areas. Includes stations General Bernardo O'Higgins, Great Wall, Bellinghausen and Artigas."
+ }
+ ],
+ "America/Rainy_River": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-94.5402,48.7369],[-94.5405,48.69],[-94.648,48.7369],[-94.5402,48.7369]]],
+ "description": "Intersect part of Canada near Rainy River. Includes arbitrary boundary of 2 farm roads to the east and north of the town."
+ }
+ ],
+ "America/Rankin_Inlet": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Rankin Inlet-tz"
+ }
+ ],
+ "America/Recife": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pernambuco"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-33,-5],[-34,-13],[-46,-8],[-33,-5]]],
+ "description": "Isolate mainlaind part of Pernambuco to exlude Fernando de Noronha archipelago and other islands."
+ }
+ ],
+ "America/Regina": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Regina-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Swift Current"
+ }
+ ],
+ "America/Resolute": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Resolute-tz"
+ }
+ ],
+ "America/Rio_Branco": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Acre"
+ }
+ ],
+ "America/Santarem": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Santarem-tz"
+ }
+ ],
+ "America/Santiago": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chile"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-70,15],[-50,-60],[-100,-60],[-70,15]]],
+ "description": "Include only mainlaind Chile (Exclude Easter Island)"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Magallanes Region"
+ }
+ ],
+ "America/Santo_Domingo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Dominican Republic"
+ }
+ ],
+ "America/Sao_Paulo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Brazil"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-52,-11],[-63,-30],[-49,-40],[-34,-13],[-52,-11]]],
+ "description": "Extract parts of Brazil to preserve terriritorial waters and diff against a few Brazilian states."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Mato Grosso do Sul"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Mato Grosso"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Tocantins"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Bahia"
+ }
+ ],
+ "America/Scoresbysund": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Greenland"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-24,72.4],[-19,71],[-18,70],[-25,70.5],[-24,72.4]]],
+ "description": "Grab part of Greenland and make a best guess at this timezone's location."
+ }
+ ],
+ "America/Sitka": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Prince of Wales-Hyder"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-131.65,55.11],[-131.674,55.04],[-131.65,54.964],[-131,54.96],[-131.3,55.4],[-131.8,55.25],[-131.65,55.11]]],
+ "description": "Intersect part of this county. This operation results in an arbitrary sea boundary to the west of the Annette Island Airport."
+ }, {
+ "op": "difference-reverse-order",
+ "source": "overpass",
+ "id": "United States of America",
+ "description": "Since this zone required the creation of a hole inside of it, this USA is diffed against the resulting geometry of the two previous operations."
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-136,58.1],[-136.431016,57.830928],[-137,57.8248],[-136,54],[-122,54],[-132,57.5],[-136,58.1]]],
+ "description": "Intersect part of Alaska. This operation results in an arbitrary sea boundary based off of the last observed trajectory of the sea boundary of Sitka and Hoonah-Angoon counties."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hoonah-Angoon"
+ }
+ ],
+ "America/St_Barthelemy": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint-Barthélemy"
+ }
+ ],
+ "America/St_Johns": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-40,40],[-53.7,53.6],[-56.59,53.2],[-57.1077594,51.9984948],[-64,51],[-60.4037717,47.7610985],[-58.9,46.8],[-40,40]]],
+ "description": "Grab part of Canada that includes Newfoundland and nearby sea area. Also includes guesstimate of part of Labrador that observes St Johns time."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Quebec"
+ }
+ ],
+ "America/St_Kitts": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Kitts and Nevis"
+ }
+ ],
+ "America/St_Lucia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Lucia"
+ }
+ ],
+ "America/St_Thomas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-65.22,18.6],[-65.108,18.43],[-65.16,18.25],[-65.145,18.23],[-65.1,18.225],[-65,18],[-66,17],[-62,18],[-65,19],[-65.22,18.6]]],
+ "description": "Intersect the USA to isolate the US Virgin Islands. This operation results in an arbitrary sea boundary between Puerto Rico and the island of St Thomas."
+ }
+ ],
+ "America/St_Vincent": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Vincent and the Grenadines"
+ }
+ ],
+ "America/Swift_Current": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Swift Current"
+ }
+ ],
+ "America/Tegucigalpa": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Honduras"
+ }
+ ],
+ "America/Thule": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Greenland"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-81,82],[-60,78],[-81,60],[-81,82]]],
+ "description": "Grab part of Greenland and make a best guess at this timezone's location."
+ }
+ ],
+ "America/Thunder_Bay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Thunder Bay-tz"
+ }
+ ],
+ "America/Tijuana": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mexico"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-112.6,28.5],[-112.55,28.2],[-112,28],[-122,28],[-116,35],[-114,34],[-114.8069313,31.8166753],[-114.802,31.816],[-114.793,31.8198],[-114.787,31.8205],[-114.7645,31.8174],[-114.755,31.812],[-114.7455,31.804],[-114.739,31.795],[-114.732,31.777],[-114.707,31.757],[-114.658,31.729],[-114.623,31.7],[-112.88,29.4],[-112.6,28.5]]],
+ "description": "Intersect part of Mexico. This operation creates an arbitrary sea boundary in the Gulf of California."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sonora"
+ }
+ ],
+ "America/Toronto": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Toronto-tz"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Quebec"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-61.25,53],[-61.25,48],[-51,53],[-61.25,53]]],
+ "description": "Exclude part of Quebec belonging to timezone America/Blanc-Sablon."
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-58.9,46.8],[-60.4768198,48.7813802],[-63.37,47.66],[-64,45],[-58.9,46.8]]],
+ "description": "Exclude Magdalen Islands"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-66.681,48.01],[-66.685,48.0158],[-66.6864,48.0166],[-66.723,48.029],[-66.7179,48.0363],[-66.7407,48.0623],[-66.733,48.0728],[-66.756,48.1022],[-66.802,48.086],[-66.754,48.0305],[-66.737,48.0274],[-66.73,48.0309],[-66.71,47.996],[-66.681,48.01]]],
+ "description": "Exclude terroritory belonging to Listuguj Mi'gmaq First Nation"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Nipigon-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Thunder Bay-tz"
+ }
+ ],
+ "America/Tortola": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "British Virgin Islands"
+ }
+ ],
+ "America/Vancouver": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Canada"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-121,47],[-133,61],[-143,61],[-127,47],[-121,47]]],
+ "description": "Intersect part of Canada to include terriritorial waters."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Vancouver-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Yukon"
+ }
+ ],
+ "America/Whitehorse": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Yukon"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-139.446, 64.0893], [-139.4126, 64.0888], [-139.4105, 64.0688], [-139.3765, 64.0609], [-139.3758, 64.0556], [-139.2775, 64.0534], [-139.2854, 64.0208], [-139.4496, 64.0278], [-139.4546, 64.0254], [-139.4824, 64.0219], [-139.4838, 64.0314], [-139.4738, 64.034], [-139.4747, 64.0369], [-139.4737, 64.0404], [-139.4713, 64.0419], [-139.4677, 64.0469], [-139.4663, 64.0487], [-139.4572, 64.0515], [-139.4538, 64.0546], [-139.4417, 64.0736], [-139.4476, 64.0789], [-139.4477, 64.0807], [-139.44, 64.0819], [-139.446, 64.0893]]],
+ "description": "Difference against a manually created polygon based off of best guess of city limits of Dawson as shown in this map: http://dawson.planyukon.ca/index.php/the-dawson-region/resource-maps/6-01-regional-overview-map/file"
+ }
+ ],
+ "America/Winnipeg": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Winnipeg-tz"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-94.5402,48.7369],[-94.5405,48.69],[-94.648,48.7369],[-94.5402,48.7369]]],
+ "description": "Difference part of this timezone near Rainy River. Includes arbitrary boundary of 2 farm roads to the east and north of the town."
+ }
+ ],
+ "America/Yakutat": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-141,62],[-141,58],[-138.2781,58.719],[-137.9464,58.80181],[-137.5725,58.89509],[-137.52612,58.906375],[-134,62],[-141,62]]],
+ "description": "Intersect part of USA in Alaska to create timezone. Includes arbitrary sea boundary along the -141st meridian and along the last observed trajectories of the sea bouandary of Yakutat and Hoonah-Angoon counties."
+ }
+ ],
+ "America/Yellowknife": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Northwest Territories"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[-133.7991, 68.4161], [-133.73, 68.4165], [-133.7297, 68.3955], [-133.6343, 68.3464], [-133.3888, 68.3166], [-133.3843, 68.2982], [-133.4485, 68.297], [-133.4482, 68.2901], [-133.4719, 68.29], [-133.4726, 68.2926], [-133.4911, 68.2966], [-133.535, 68.2973], [-133.5556, 68.3015], [-133.5546, 68.3043], [-133.5653, 68.3074], [-133.6772, 68.3176], [-133.6734, 68.3226], [-133.7046, 68.3379], [-133.7225, 68.3508], [-133.7524, 68.3625], [-133.7709, 68.3749], [-133.7733, 68.3827], [-133.7695, 68.3874], [-133.775, 68.3906], [-133.7884, 68.394], [-133.7956, 68.4007], [-133.7956, 68.4092], [-133.7991, 68.4161]]],
+ "description": "This is a manual trace of what appears to be the boundary of the city limits of Inuvik. Boundary is based off of this document: http://www.inuvik.ca/en/living-here/resources/By-laws/2582_Community_Plan_Map.pdf"
+ }
+ ],
+ "Antarctica/Casey": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[97,-70],[115,-70],[120,-70],[120,-65],[97,-64],[97,-70]]],
+ "description": "Best guess at extent of Casey timezone based off of map at https://en.wikipedia.org/wiki/Time_in_Antarctica, but subtracting area for Vostok and Mirny Stations."
+ }
+ ],
+ "Antarctica/Davis": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[77.5,-86],[86,-86],[86,-65],[77.5,-68],[77.5,-86]]],
+ "description": "Best guess at extent of Davis timezone."
+ }
+ ],
+ "Antarctica/DumontDUrville": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[120,-70],[135,-70],[150,-70],[160,-70],[160,-65],[150,-65],[135,-65],[120,-65],[120,-70]]],
+ "description": "Best guess at extent of DumontDUrville timezone based off of map at https://en.wikipedia.org/wiki/Time_in_Antarctica, but subtracting area for Concordia Station (Australia/Perth)."
+ }
+ ],
+ "Antarctica/Macquarie": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[159,-53],[156,-56],[162,-56],[159,-53]]],
+ "description": "Intersect part of Australia to isolate Macquarie Island."
+ }
+ ],
+ "Antarctica/Mawson": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[55,-86],[60,-86],[75,-86],[77.5,-86],[77.5,-68],[55,-64],[55,-86]]],
+ "description": "Best guess at extent of Mawson timezone. This timezone also includes the Zhongshan and Bharati stations because apparently they also use UTC+5 https://encyclopedia.timegenie.com/time_zones/antarctica/."
+ }
+ ],
+ "Antarctica/McMurdo": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-180,-90],[-180,-75],[-150,-75],[-150,-86],[-135,-86],[-120,-86],[-105,-86],[-90,-86],[-80,-86],[-75,-86],[-67.5,-86],[-60,-86],[-58,-86],[-45,-86],[-35,-86],[-30,-86],[-17,-86],[-15,-86],[-5.5,-86],[0,-86],[15,-86],[25,-86],[30,-86],[45,-86],[55,-86],[60,-86],[75,-86],[77.5,-86],[86,-86],[90,-86],[105,-86],[115,-86],[120,-86],[135,-86],[150,-86],[160,-86],[160,-65],[180,-70],[180,-86],[180,-90],[-180,-90]]],
+ "description": "Best guess at McMurdo timezone according to map of timezone at https://en.wikipedia.org/wiki/Time_in_Antarctica. Includes South Pole timezone since it is linked to McMurdo in the timezone DB."
+ }
+ ],
+ "Antarctica/Palmer": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-64,-64],[-65,-64.5],[-65.5,-65.25],[-63.8,-64.8],[-64,-64]]],
+ "description": "Best guess at Palmer timezone."
+ }
+ ],
+ "Antarctica/Rothera": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-80,-86],[-75,-86],[-67.5,-86],[-67.5,-66],[-80,-66],[-80,-86]]],
+ "description": "Best guess at Rothera timezone partially based off of British Antarctic Claims."
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[-35,-86],[-30,-86],[-17,-86],[-17,-71],[-35,-75],[-35,-86]]],
+ "description": "Add area near Halley Station."
+ }
+ ],
+ "Antarctica/Syowa": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[25,-86],[30,-86],[45,-86],[55,-86],[55,-64],[25,-68],[25,-86]]],
+ "description": "Best guess at Syowa timezone according to map of timezone at https://en.wikipedia.org/wiki/Time_in_Antarctica. Also, Mirny station uses the same timezone as Vostok according to https://encyclopedia.timegenie.com/time_zones/antarctica/. Also includes Japanese Asuka Station."
+ }
+ ],
+ "Antarctica/Troll": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[0,-86],[15,-86],[25,-86],[25,-68],[0,-68],[0,-86]]],
+ "description": "Best guess at Troll timezone according to map of timezone at https://en.wikipedia.org/wiki/Time_in_Antarctica, but subtracting area to west starting with SANAE IV station. Also includes Maitri and Novolazarevskaya Stations."
+ }
+ ],
+ "Antarctica/Vostok": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[86,-86],[90,-86],[105,-86],[115,-86],[115,-70],[97,-70],[97,-64],[86,-65],[86,-86]]],
+ "description": "Best guess at Vostok timezone according to map of timezone at https://en.wikipedia.org/wiki/Time_in_Antarctica. Also, Mirny station uses the same timezone as Vostok according to https://encyclopedia.timegenie.com/time_zones/antarctica/."
+ }
+ ],
+ "Arctic/Longyearbyen": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Norway"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-13,69],[2,82],[35,81],[35,74],[-13,69]]],
+ "description": "Intersect part of Norway to isolate various North Atlantic islands."
+ }
+ ],
+ "Asia/Aden": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Yemen"
+ }
+ ],
+ "Asia/Almaty": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kazakhstan"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[57,52],[57,26],[23,56],[57,52]]],
+ "description": "Intersect western part of Kazakhstan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Kostanay"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Aktobe"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Kyzylorda"
+ }
+ ],
+ "Asia/Amman": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Jordan"
+ }
+ ],
+ "Asia/Anadyr": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chukotka"
+ }
+ ],
+ "Asia/Aqtau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mangystau Region"
+ }
+ ],
+ "Asia/Aqtobe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Aktobe"
+ }
+ ],
+ "Asia/Ashgabat": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Turkmenistan"
+ }
+ ],
+ "Asia/Atyrau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Atyrau Region"
+ }
+ ],
+ "Asia/Baghdad": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Iraq"
+ }
+ ],
+ "Asia/Bahrain": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bahrain"
+ }
+ ],
+ "Asia/Baku": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Azerbaijan"
+ }
+ ],
+ "Asia/Bangkok": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Vietnam",
+ "description": "Northern Vietnam had the same timekeeping method as Thailand, so this is added before adding Thailand. See (https://github.com/evansiroky/timezone-boundary-builder/issues/66)"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[100,11],[112,21],[100,30],[100,11]]],
+ "description": "Isolate Northern Vietnam as it is a part of Asia/Bangkok. See (https://github.com/evansiroky/timezone-boundary-builder/issues/66)"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Quang Tri"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Thailand"
+ }
+ ],
+ "Asia/Barnaul": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Altai Krai"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Altai Republic"
+ }
+ ],
+ "Asia/Beirut": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Lebanon"
+ }
+ ],
+ "Asia/Bishkek": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kyrgyzstan"
+ }
+ ],
+ "Asia/Brunei": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Brunei"
+ }
+ ],
+ "Asia/Chita": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Zabaykalsk"
+ }
+ ],
+ "Asia/Choibalsan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Dornod"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sühbaatar"
+ }
+ ],
+ "Asia/Colombo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sri Lanka"
+ }
+ ],
+ "Asia/Damascus": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Syria"
+ }
+ ],
+ "Asia/Dhaka": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bangladesh"
+ }
+ ],
+ "Asia/Dili": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "East Timor"
+ }
+ ],
+ "Asia/Dubai": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United Arab Emirates"
+ }
+ ],
+ "Asia/Dushanbe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tajikistan"
+ }
+ ],
+ "Asia/Famagusta": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cyprus"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[32.609482,35.166161],[32.621326,35.176544],[32.6283528,35.1893165],[32.640381,35.229355],[32.659264,35.244498],[32.686043,35.244217],[32.701836,35.227672],[32.6968982,35.1834922],[32.703896,35.179982],[32.703037,35.140125],[32.764664,35.122576],[32.792988,35.118504],[32.811527,35.095614],[32.839851,35.080163],[32.866888,35.081287],[32.86397,35.101232],[32.886114,35.104181],[32.897272,35.105445],[32.906799,35.101162],[32.920532,35.090277],[32.959242,35.1006],[33.012371,35.147144],[33.122749,35.156407],[33.164978,35.189803],[33.211327,35.183349],[33.267288,35.160056],[33.307028,35.166231],[33.315933,35.172844],[33.31869,35.172116],[33.320729,35.172247],[33.321351,35.176167],[33.319076,35.176957],[33.319774,35.180561],[33.323979,35.181227],[33.325567,35.182016],[33.334258,35.181946],[33.335073,35.182508],[33.338056,35.181824],[33.348613,35.183121],[33.348312,35.179456],[33.349857,35.177421],[33.352985,35.178452],[33.353135,35.178618],[33.353725,35.178842],[33.355844,35.178176],[33.355855,35.175878],[33.355002,35.174878],[33.355168,35.17462],[33.356161,35.173813],[33.35689,35.174049],[33.358929,35.174036],[33.360474,35.174891],[33.362303,35.174808],[33.363773,35.174611],[33.365752,35.175264],[33.367361,35.175953],[33.367522,35.17601],[33.367442,35.176382],[33.367769,35.176584],[33.368048,35.177009],[33.368397,35.177119],[33.368493,35.177597],[33.368826,35.177763],[33.36933,35.178114],[33.369963,35.17782],[33.372281,35.179158],[33.372624,35.185506],[33.37198,35.186497],[33.374727,35.187734],[33.374566,35.188567],[33.373922,35.189452],[33.374491,35.190689],[33.388739,35.197799],[33.403759,35.186261],[33.412471,35.174054],[33.408952,35.15967],[33.424401,35.156267],[33.424273,35.139143],[33.459463,35.109026],[33.469849,35.048268],[33.447189,35.022968],[33.444614,35.004128],[33.458347,35.001914],[33.464913,35.004796],[33.485126,35.005886],[33.488731,35.060493],[33.576279,35.042927],[33.593616,35.032808],[33.705025,35.028591],[33.794975,35.050235],[33.821239,35.072577],[33.847847,35.063304],[33.888702,35.088591],[33.907499,35.067448],[33.931961,35.067167],[33.94136,35.070048],[33.960886,35.073525],[33.966765,35.072436],[33.977666,35.064919],[33.990326,35.064744],[33.9988932,35.069797],[33.999531,35.069626],[34.246445,35.178298],[35.134277,35.554574],[34.799194,36.160053],[32.382202,35.572449],[32.542877,35.396887],[32.5987035,35.1791626],[32.597401,35.175001],[32.609482,35.166161]]],
+ "description": "Draw a polygon with a boundary that goes through the center of the United Nations Buffer Zone. A subsequent operation will difference the buffer zone to create the exact boundary of this timezone. This operation also results in arbitraty sea boundaries near Famagusta and Kokkina."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "British Sovereign Base Areas"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "United Nations Buffer Zone"
+ }
+ ],
+ "Asia/Gaza": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Palestinian Territories"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[34.7,31.5],[33.8,32.5],[33.8,30],[34.7,31.5]]],
+ "description": "Intersect the Palestinian Territories to isolate Gaza."
+ }
+ ],
+ "Asia/Hebron": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Palestinian Territories"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[34.7,30],[34.7,34],[37,32],[34.7,30]]],
+ "description": "Intersect the Palestinian Territories to isolate the West Bank."
+ }
+ ],
+ "Asia/Ho_Chi_Minh": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Vietnam"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[100,11],[112,21],[100,30],[100,11]]],
+ "description": "Exclude Northern Vietnam as it is a part of Asia/Bangkok. See (https://github.com/evansiroky/timezone-boundary-builder/issues/66)"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Quang Tri"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[117.76,16.2],[116,14],[119,14],[117.76,16.2]]],
+ "description": "Exclude Scarborough Shoal because it's not claimed by Vietnam (https://en.wikipedia.org/wiki/Scarborough_Shoal)"
+ }
+ ],
+ "Asia/Hong_Kong": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Hong Kong"
+ }
+ ],
+ "Asia/Hovd": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mongolia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[96,53],[97,40],[81,50],[96,53]]],
+ "description": "Intersect the western part of Mongolia."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Zavkhan"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Govi-Altai"
+ }
+ ],
+ "Asia/Irkutsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Irkutsk"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Buryatia"
+ }
+ ],
+ "Asia/Jakarta": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Indonesia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[109,9],[114,-12],[56,14],[109,9]]],
+ "description": "Intersect the western part of Indonesia."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "West Kalimantan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Central Kalimantan"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "East Java"
+ }
+ ],
+ "Asia/Jayapura": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Indonesia"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[90,9],[100,-12],[126,-13],[129,7],[90,9]]],
+ "description": "Exclude all parts of Indonesia to the west of Maluku and North Maluku"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Maluku"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "North Maluku"
+ }
+ ],
+ "Asia/Jerusalem": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Israel"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "שטח C"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "שטח B"
+ }
+ ],
+ "Asia/Kabul": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Afghanistan"
+ }
+ ],
+ "Asia/Kamchatka": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kamchatka"
+ }
+ ],
+ "Asia/Karachi": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pakistan"
+ }
+ ],
+ "Asia/Kathmandu": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Nepal"
+ }
+ ],
+ "Asia/Khandyga": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tomponsky"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Ust-Maysky"
+ }
+ ],
+ "Asia/Kolkata": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "India"
+ }
+ ],
+ "Asia/Krasnoyarsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Krasnoyarsk"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Khakassia"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Tuva"
+ }
+ ],
+ "Asia/Kuala_Lumpur": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Malaysia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[106,-6],[106,13],[94,6],[106,-6]]],
+ "description": "Intersect Malaysia to include only the Malay Peninsula."
+ }
+ ],
+ "Asia/Kuching": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Malaysia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[107,18],[107,-15],[130,5],[107,18]]],
+ "description": "Intersect Malaysia to include only Malaysian Borneo."
+ }
+ ],
+ "Asia/Kuwait": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kuwait"
+ }
+ ],
+ "Asia/Macau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Macau"
+ }
+ ],
+ "Asia/Magadan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Magadan"
+ }
+ ],
+ "Asia/Makassar": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Indonesia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[109,9],[114,-12],[126,-13],[129,7],[109,9]]],
+ "description": "Intersect Indonesia in center areas."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "West Kalimantan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Central Kalimantan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "East Java"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Maluku"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "North Maluku"
+ }
+ ],
+ "Asia/Manila": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Philippines"
+ }
+ ],
+ "Asia/Muscat": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Oman"
+ }
+ ],
+ "Asia/Nicosia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cyprus"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[32.609482,35.166161],[32.621326,35.176544],[32.6283528,35.1893165],[32.640381,35.229355],[32.659264,35.244498],[32.686043,35.244217],[32.701836,35.227672],[32.6968982,35.1834922],[32.703896,35.179982],[32.703037,35.140125],[32.764664,35.122576],[32.792988,35.118504],[32.811527,35.095614],[32.839851,35.080163],[32.866888,35.081287],[32.86397,35.101232],[32.886114,35.104181],[32.897272,35.105445],[32.906799,35.101162],[32.920532,35.090277],[32.959242,35.1006],[33.012371,35.147144],[33.122749,35.156407],[33.164978,35.189803],[33.211327,35.183349],[33.267288,35.160056],[33.307028,35.166231],[33.315933,35.172844],[33.31869,35.172116],[33.320729,35.172247],[33.321351,35.176167],[33.319076,35.176957],[33.319774,35.180561],[33.323979,35.181227],[33.325567,35.182016],[33.334258,35.181946],[33.335073,35.182508],[33.338056,35.181824],[33.348613,35.183121],[33.348312,35.179456],[33.349857,35.177421],[33.352985,35.178452],[33.353135,35.178618],[33.353725,35.178842],[33.355844,35.178176],[33.355855,35.175878],[33.355002,35.174878],[33.355168,35.17462],[33.356161,35.173813],[33.35689,35.174049],[33.358929,35.174036],[33.360474,35.174891],[33.362303,35.174808],[33.363773,35.174611],[33.365752,35.175264],[33.367361,35.175953],[33.367522,35.17601],[33.367442,35.176382],[33.367769,35.176584],[33.368048,35.177009],[33.368397,35.177119],[33.368493,35.177597],[33.368826,35.177763],[33.36933,35.178114],[33.369963,35.17782],[33.372281,35.179158],[33.372624,35.185506],[33.37198,35.186497],[33.374727,35.187734],[33.374566,35.188567],[33.373922,35.189452],[33.374491,35.190689],[33.388739,35.197799],[33.403759,35.186261],[33.412471,35.174054],[33.408952,35.15967],[33.424401,35.156267],[33.424273,35.139143],[33.459463,35.109026],[33.469849,35.048268],[33.447189,35.022968],[33.444614,35.004128],[33.458347,35.001914],[33.464913,35.004796],[33.485126,35.005886],[33.488731,35.060493],[33.576279,35.042927],[33.593616,35.032808],[33.705025,35.028591],[33.794975,35.050235],[33.821239,35.072577],[33.847847,35.063304],[33.888702,35.088591],[33.907499,35.067448],[33.931961,35.067167],[33.94136,35.070048],[33.960886,35.073525],[33.966765,35.072436],[33.977666,35.064919],[33.990326,35.064744],[33.9988932,35.069797],[33.999531,35.069626],[34.246445,35.178298],[35.134277,35.554574],[34.799194,36.160053],[32.382202,35.572449],[32.542877,35.396887],[32.5987035,35.1791626],[32.597401,35.175001],[32.609482,35.166161]]],
+ "description": "Draw a polygon with a boundary that goes through the center of the United Nations Buffer Zone. A subsequent operation will union the buffer zone to create the exact boundary of this timezone. This operation also results in arbitraty sea boundaries near Famagusta and Kokkina."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "British Sovereign Base Areas"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "United Nations Buffer Zone"
+ }
+ ],
+ "Asia/Novokuznetsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kemerovo"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Altai Krai"
+ }
+ ],
+ "Asia/Novosibirsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Novosibirsk"
+ }
+ ],
+ "Asia/Omsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Omsk"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Yekaterinburg-tz"
+ }
+ ],
+ "Asia/Oral": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "West Kazakhstan"
+ }
+ ],
+ "Asia/Phnom_Penh": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cambodia"
+ }
+ ],
+ "Asia/Pontianak": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "West Kalimantan"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Central Kalimantan"
+ }
+ ],
+ "Asia/Pyongyang": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "North Korea"
+ }
+ ],
+ "Asia/Qatar": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Qatar"
+ }
+ ],
+ "Asia/Qostanay": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kostanay"
+ }
+ ],
+ "Asia/Qyzylorda": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kyzylorda"
+ }
+ ],
+ "Asia/Riyadh": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saudi Arabia"
+ }
+ ],
+ "Asia/Samarkand": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Samarkand"
+ }
+ ],
+ "Asia/Sakhalin": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sakhalin"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[152,52],[138,40],[140,61],[152,52]]],
+ "description": "Intersect part of the Sakhalin Oblast to include only the island of Sakhalin."
+ }
+ ],
+ "Asia/Seoul": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "South Korea"
+ }
+ ],
+ "Asia/Shanghai": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "China"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Hong Kong"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Macau"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Doklam 洞郎地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "鲁林地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "查马普地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "基伍地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Republic of China",
+ "description": "All areas of Taiwain are assumed to be a part of Asia/Taipei. See discussion at https://github.com/evansiroky/timezone-boundary-builder/issues/52"
+ }
+ ],
+ "Asia/Singapore": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Singapore"
+ }
+ ],
+ "Asia/Srednekolymsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Srednekolymsk-tz"
+ }
+ ],
+ "Asia/Taipei": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Republic of China"
+ }
+ ],
+ "Asia/Tashkent": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Uzbekistan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Samarkand"
+ }
+ ],
+ "Asia/Tbilisi": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Georgia"
+ }
+ ],
+ "Asia/Tehran": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Iran"
+ }
+ ],
+ "Asia/Thimphu": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bhutan"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Doklam 洞郎地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "鲁林地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "查马普地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "基伍地区",
+ "description": "Add dispuated area in Doklam. See https://zh.wikipedia.org/wiki/%E4%B8%AD%E4%B8%8D%E8%BE%B9%E7%95%8C%E4%BA%89%E8%AE%AE and https://en.wikipedia.org/wiki/Doklam"
+ }
+ ],
+ "Asia/Tokyo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Japan"
+ }
+ ],
+ "Asia/Tomsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tomsk"
+ }
+ ],
+ "Asia/Ulaanbaatar": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mongolia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[96,53],[113,55],[114,39],[97,40],[96,53]]],
+ "description": "Intersect center part of Mongolia."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Zavkhan"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Govi-Altai"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Dornod"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sühbaatar"
+ }
+ ],
+ "Asia/Urumqi": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Xinjiang"
+ }
+ ],
+ "Asia/Ust-Nera": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sakhalin"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[140,41],[153,50],[155,43],[140,41]]],
+ "description": "Intersect part of Sakhalin that includes Kuril Islands."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Oymyakonsky"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Srednekolymsk-tz"
+ }
+ ],
+ "Asia/Vientiane": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Laos"
+ }
+ ],
+ "Asia/Vladivostok": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sakha Republic"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[141,72.1],[107,78],[174,78],[141,72.1]]],
+ "description": "Intersect part of Sakha Republic to add Anzhu Islands."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Vladivostok-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Oymyakonsky"
+ }
+ ],
+ "Asia/Yakutsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sakha Republic"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[137,35],[142,71],[112,77],[46,29],[137,35]]],
+ "description": "Grab working area, excluding unneeded parts to east and west."
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Amur"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Vladivostok-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Tomponsky"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Ust-Maysky"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Srednekolymsk-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Oymyakonsky"
+ }
+ ],
+ "Asia/Yangon": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Myanmar"
+ }
+ ],
+ "Asia/Yekaterinburg": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Yekaterinburg-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Udmurtia"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Samara"
+ }
+ ],
+ "Asia/Yerevan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Armenia"
+ }
+ ],
+ "Atlantic/Azores": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Portugal"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-21,41],[-25,33],[-35,41],[-21,41]]],
+ "description": "Intersect Portugal to isolate Azores"
+ }
+ ],
+ "Atlantic/Bermuda": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bermuda"
+ }
+ ],
+ "Atlantic/Canary": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Spain"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-24,29.5],[-12,22],[-12,31],[-15,29.5],[-24,29.5]]],
+ "description": "Intersect part of Spain to isolate Canary Islands"
+ }
+ ],
+ "Atlantic/Cape_Verde": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cape Verde"
+ }
+ ],
+ "Atlantic/Faroe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Faroe Islands"
+ }
+ ],
+ "Atlantic/Madeira": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Portugal"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-24,35],[-10,35],[-16,29.5],[-24,35]]],
+ "description": "Intersect to isolate Maderia and Salvage Islands."
+ }
+ ],
+ "Atlantic/Reykjavik": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Iceland"
+ }
+ ],
+ "Atlantic/South_Georgia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "South Georgia and the South Sandwich Islands"
+ }
+ ],
+ "Atlantic/St_Helena": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saint Helena, Ascension and Tristan da Cunha"
+ }
+ ],
+ "Atlantic/Stanley": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Falkland Islands"
+ }
+ ],
+ "Australia/Adelaide": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "South Australia"
+ }
+ ],
+ "Australia/Brisbane": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Queensland"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[148.8437,-20.354],[148.834,-20.32],[148.88,-20.27],[148.7,-19.7],[149.1,-19.84],[149.5,-20.25],[149.6,-20.37],[149.12,-20.57],[149.03,-20.57],[148.95,-20.45],[148.86,-20.42],[148.842,-20.38],[148.8437,-20.354]]],
+ "description": "Exclude Holiday Islands from Queensland via an arbitraty sea boundary."
+ }
+ ],
+ "Australia/Broken_Hill": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Broken_Hill-tz"
+ }
+ ],
+ "Australia/Currie": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[143,-39.2],[146,-39.2],[142.2,-41.5],[143,-39.2]]],
+ "description": "Exclude King Island from rest of Australia via an arbitraty sea boundary."
+ }
+ ],
+ "Australia/Darwin": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Northern Territory"
+ }
+ ],
+ "Australia/Eucla": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Western Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[131,-31.3],[125.5,-31.3],[125.5,-35],[131,-31.3]]],
+ "description": "Intersect part of Western Australia to form zone. Boundary is based off of the boundary coded in efele.net's shapefile."
+ }
+ ],
+ "Australia/Hobart": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tasmania"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[143,-39.2],[146,-39.2],[142.2,-41.5],[143,-39.2]]],
+ "description": "Exclude King Island from rest of Tasmania via an arbitraty sea boundary."
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[159,-53],[156,-56],[162,-56],[159,-53]]],
+ "description": "Exclude Macquarie Island."
+ }
+ ],
+ "Australia/Lindeman": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Queensland"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[148.8437,-20.354],[148.834,-20.32],[148.88,-20.27],[148.7,-19.7],[149.1,-19.84],[149.5,-20.25],[149.6,-20.37],[149.12,-20.57],[149.03,-20.57],[148.95,-20.45],[148.86,-20.42],[148.842,-20.38],[148.8437,-20.354]]],
+ "description": "Exclude Holiday Islands from Queensland via an arbitraty sea boundary."
+ }
+ ],
+ "Australia/Lord_Howe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[160,-33],[160,-31],[157,-31],[160,-33]]],
+ "description": "Intersect to include only Lord Howe Island."
+ }
+ ],
+ "Australia/Melbourne": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Victoria"
+ }
+ ],
+ "Australia/Perth": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Western Australia"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[131,-31.3],[125.5,-31.3],[125.5,-35],[131,-31.3]]],
+ "description": "Difference part of Western Australia to form zone. Boundary is based off of the boundary coded in efele.net's shapefile."
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[115,-86],[120,-86],[135,-86],[150,-86],[160,-86],[160,-70],[150,-70],[135,-70],[120,-70],[115,-70],[115,-86]]],
+ "description": "According to chatter on the tz mailing list, the Antrarctic Concordia Station uses Australia/Perth time. https://mm.icann.org/pipermail/tz/2013-December/020520.html"
+ }
+ ],
+ "Australia/Sydney": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "New South Wales"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Australian Capital Territory"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Broken_Hill-tz"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[160,-33],[160,-31],[157,-31],[160,-33]]],
+ "description": "Difference to exclude only Lord Howe Island."
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[150.85,-35.07],[150.45,-35.09],[150.7,-35.3],[150.85,-35.07]]],
+ "description": "Union this area to include Jervis Bay Territory"
+ }
+ ],
+ "Etc/UTC": [
+ {
+ "op": "init",
+ "source": "manual-polygon",
+ "data": [[[-17,-86],[-15,-86],[-5.5,-86],[-5.5,-69],[-17,-71],[-17,-86]]],
+ "description": "Add Antarctic Station Neumayer III Station. See discussion at https://github.com/evansiroky/timezone-boundary-builder/issues/61"
+ }
+ ],
+ "Europe/Amsterdam": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "The Netherlands"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[9,55],[9,48],[-2,52],[9,55]]],
+ "description": "Intersect to include only European area of The Netherlands."
+ }
+ ],
+ "Europe/Andorra": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Andorra"
+ }
+ ],
+ "Europe/Astrakhan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Astrakhan"
+ }, {
+ "op": "union",
+ "source": "manual-polygon",
+ "data": [[[46.9,45.6],[47.6,46.2],[46.6,46.2],[46.9,45.6]]],
+ "description": "Union to fill in some exclaves."
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Moscow-tz"
+ }
+ ],
+ "Europe/Athens": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Greece"
+ }
+ ],
+ "Europe/Belgrade": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Republic of Kosovo"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Serbia"
+ }
+ ],
+ "Europe/Berlin": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Germany"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[8.7,47.75],[8.75,47.63],[8.6,47.7],[8.7,47.75]]],
+ "description": "Exclude area belonging to Busingen timezone."
+ }
+ ],
+ "Europe/Bratislava": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Slovakia"
+ }
+ ],
+ "Europe/Brussels": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Belgium"
+ }
+ ],
+ "Europe/Bucharest": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Romania"
+ }
+ ],
+ "Europe/Budapest": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Hungary"
+ }
+ ],
+ "Europe/Busingen": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Germany"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[8.7,47.75],[8.75,47.63],[8.6,47.7],[8.7,47.75]]],
+ "description": "Isolate area belonging to Busingen timezone."
+ }
+ ],
+ "Europe/Chisinau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Moldova"
+ }
+ ],
+ "Europe/Copenhagen": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Denmark"
+ }
+ ],
+ "Europe/Dublin": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ireland"
+ }
+ ],
+ "Europe/Gibraltar": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Gibraltar"
+ }
+ ],
+ "Europe/Guernsey": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Guernsey"
+ }
+ ],
+ "Europe/Helsinki": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Finland"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Åland Islands"
+ }
+ ],
+ "Europe/Isle_of_Man": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Isle of Man"
+ }
+ ],
+ "Europe/Istanbul": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Turkey"
+ }
+ ],
+ "Europe/Jersey": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Jersey"
+ }
+ ],
+ "Europe/Kaliningrad": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kaliningrad"
+ }
+ ],
+ "Europe/Kiev": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ukraine"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Zaporizhzhia"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Crimea"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sevastopol"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Zakarpattia"
+ }
+ ],
+ "Europe/Kirov": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kirov"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Yekaterinburg-tz"
+ }
+ ],
+ "Europe/Lisbon": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Portugal"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-3,45],[-3,28],[-17,40],[-3,45]]],
+ "description": "Intersect to include only mainlaind of Portugal"
+ }
+ ],
+ "Europe/Ljubljana": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Slovenia"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Croatia"
+ }
+ ],
+ "Europe/London": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United Kingdom"
+ }
+ ],
+ "Europe/Luxembourg": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Luxemburg"
+ }
+ ],
+ "Europe/Madrid": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Spain"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-5.3,35.95],[6,34.5],[6,56],[-21,35],[-5.3,35.95]]],
+ "description": "Intersect to include only mainlaind of Spain and Balearic Islands."
+ }
+ ],
+ "Europe/Malta": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Malta"
+ }
+ ],
+ "Europe/Mariehamn": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Åland Islands"
+ }
+ ],
+ "Europe/Minsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Belarus"
+ }
+ ],
+ "Europe/Monaco": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Monaco"
+ }
+ ],
+ "Europe/Moscow": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Moscow-tz"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Kirov"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Saratov"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Volgograd"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Crimea"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Sevastopol"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Yekaterinburg-tz"
+ }
+ ],
+ "Europe/Oslo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Norway"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[7,71],[0,54],[25,60],[37,73],[7,71]]],
+ "description": "Intersect to include only mainlaind part of Norway."
+ }
+ ],
+ "Europe/Paris": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[17,38],[4,58],[-19,45],[17,38]]],
+ "description": "Intersect to include only European part of France."
+ }
+ ],
+ "Europe/Podgorica": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Montenegro"
+ }
+ ],
+ "Europe/Prague": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Czech Republic"
+ }
+ ],
+ "Europe/Riga": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Latvia"
+ }
+ ],
+ "Europe/Rome": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Italy"
+ }
+ ],
+ "Europe/Samara": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Samara"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Udmurtia"
+ }
+ ],
+ "Europe/San_Marino": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "San Marino"
+ }
+ ],
+ "Europe/Sarajevo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bosnia and Herzegovina"
+ }
+ ],
+ "Europe/Saratov": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Saratov"
+ }
+ ],
+ "Europe/Simferopol": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Crimea"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Sevastopol"
+ }
+ ],
+ "Europe/Skopje": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Macedonia"
+ }
+ ],
+ "Europe/Sofia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Bulgaria"
+ }
+ ],
+ "Europe/Stockholm": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Sweden"
+ }
+ ],
+ "Europe/Tallinn": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Estonia"
+ }
+ ],
+ "Europe/Tirane": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Albania"
+ }
+ ],
+ "Europe/Ulyanovsk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ulyanovsk"
+ }
+ ],
+ "Europe/Uzhgorod": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Zakarpattia"
+ }
+ ],
+ "Europe/Vaduz": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Liechtenstein"
+ }
+ ],
+ "Europe/Vatican": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Vatican City"
+ }
+ ],
+ "Europe/Vienna": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Austria"
+ }
+ ],
+ "Europe/Vilnius": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Lithuania"
+ }
+ ],
+ "Europe/Volgograd": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Volgograd"
+ }
+ ],
+ "Europe/Warsaw": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Poland"
+ }
+ ],
+ "Europe/Zagreb": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Croatia"
+ }
+ ],
+ "Europe/Zaporozhye": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Zaporizhzhia"
+ }
+ ],
+ "Europe/Zurich": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Switzerland"
+ }
+ ],
+ "Indian/Antananarivo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Madagascar"
+ }
+ ],
+ "Indian/Chagos": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "British Indian Ocean Territory"
+ }
+ ],
+ "Indian/Christmas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[106,-10],[106,-12],[104,-10],[106,-10]]],
+ "description": "Intersect to isolate Christmas Island area."
+ }
+ ],
+ "Indian/Cocos": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[98,-11],[98,-14],[95,-11],[98,-11]]],
+ "description": "Intersect to isolate Cocos Island area."
+ }
+ ],
+ "Indian/Comoro": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Comoros"
+ }
+ ],
+ "Indian/Kerguelen": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[79,-36],[20,-52],[79,-52],[79,-36]]],
+ "description": "Intersect to include French Islands in Southern Indian Ocean."
+ }
+ ],
+ "Indian/Mahe": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Seychelles"
+ }
+ ],
+ "Indian/Maldives": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Maldives"
+ }
+ ],
+ "Indian/Mauritius": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Mauritius"
+ }
+ ],
+ "Indian/Mayotte": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[46,-11],[46,-14],[43.5,-14],[46,-11]]],
+ "description": "Intersect to grab terriritorial waters near Mayotte."
+ }
+ ],
+ "Indian/Reunion": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[57,-19],[57,-22],[53,-22],[57,-19]]],
+ "description": "Intersect to grab terriritorial waters near Reunion."
+ }
+ ],
+ "Pacific/Apia": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Samoa"
+ }
+ ],
+ "Pacific/Auckland": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "New Zealand"
+ }, {
+ "op": "intersect",
+ "source": "manual-multipolygon",
+ "data": [[[[-179.8,-27],[-179.8,-34],[-172,-32],[-179.8,-27]]],[[[179.9,-33],[179.9,-56],[161,-56],[161,-33],[179.9,-33]]]],
+ "description": "Intersect to include all areas except Chatham Islands."
+ }
+ ],
+ "Pacific/Bougainville": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Autonomous Region of Bougainville"
+ }
+ ],
+ "Pacific/Chatham": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "New Zealand"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-178,-41],[-178,-47],[-172,-44],[-178,-41]]],
+ "description": "Intersect to include Chatham Islands."
+ }
+ ],
+ "Pacific/Chuuk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chuuk"
+ }, {
+ "op": "union",
+ "source": "overpass",
+ "id": "Yap"
+ }
+ ],
+ "Pacific/Easter": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Chile"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-108,-25],[-108,-29],[-111,-27],[-108,-25]]],
+ "description": "Intersect Chile to isolate Easter Island."
+ }
+ ],
+ "Pacific/Efate": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Vanuatu"
+ }
+ ],
+ "Pacific/Enderbury": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kiribati"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-176,0],[-176,-9],[-169,-3],[-176,0]]],
+ "description": "Intersect Kiribati to include Enderbury and some other atolls."
+ }
+ ],
+ "Pacific/Fakaofo": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tokelau"
+ }
+ ],
+ "Pacific/Fiji": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Fiji"
+ }
+ ],
+ "Pacific/Funafuti": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tuvalu"
+ }
+ ],
+ "Pacific/Galapagos": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Ecuador"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-93,4],[-93,-5],[-87,0],[-93,4]]],
+ "description": "Intersect Ecuador to isolate Galápagos Islands."
+ }
+ ],
+ "Pacific/Gambier": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-138,-21],[-135,-25],[-131,-20],[-138,-21]]],
+ "description": "Intersect France to include Gambier Islands."
+ }
+ ],
+ "Pacific/Guadalcanal": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Solomon Islands"
+ }
+ ],
+ "Pacific/Guam": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[144,14.5],[145.7,13.5],[144,12],[144,14.5]]],
+ "description": "Intersect USA to isolate Guam."
+ }
+ ],
+ "Pacific/Honolulu": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-179,18],[-169,35],[-144,10],[-179,18]]],
+ "description": "Clip US boundary to include Hawaiian Island and Jonhston Atoll"
+ }
+ ],
+ "Pacific/Kiritimati": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kiribati"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-162,7],[-153,-14],[-133,5],[-162,7]]],
+ "description": "Intersect to include Kiribati's islands that are closest to the Americas."
+ }
+ ],
+ "Pacific/Kosrae": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kosrae"
+ }
+ ],
+ "Pacific/Kwajalein": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Marshall Islands"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[168.6,9.7],[167.8,8.35],[165.7,9.7],[168.6,9.7]]],
+ "description": "Intersect Marshall Islands to isolate Kwajalein Atoll."
+ }
+ ],
+ "Pacific/Majuro": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Marshall Islands"
+ }, {
+ "op": "difference",
+ "source": "manual-polygon",
+ "data": [[[168.6,9.7],[167.8,8.35],[165.7,9.7],[168.6,9.7]]],
+ "description": "Difference Marshall Islands to exclude Kwajalein Atoll."
+ }
+ ],
+ "Pacific/Marquesas": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-141,-6],[-136,-11],[-143,-11],[-141,-6]]],
+ "description": "Intersect France to isolate the Marquesas Islands."
+ }
+ ],
+ "Pacific/Midway": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-179,29],[-176,29],[-179,26],[-179,29]]],
+ "description": "Intersect USA to isolate Midway and Kure Atolls."
+ }
+ ],
+ "Pacific/Nauru": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Nauru"
+ }
+ ],
+ "Pacific/Niue": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Niue"
+ }
+ ],
+ "Pacific/Norfolk": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Australia"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[167,-28],[169,-28],[168,-30],[167,-28]]],
+ "description": "Intersect to isolate Norfolk Island."
+ }
+ ],
+ "Pacific/Noumea": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[156,-13],[159,-27],[174,-23],[156,-13]]],
+ "description": "Intersect France to isolate New Caledonia."
+ }
+ ],
+ "Pacific/Pago_Pago": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-171.5,-10],[-170.9,-17],[-167,-12],[-171.5,-10]]],
+ "description": "Intersect USA to isoalte American Samoa."
+ }
+ ],
+ "Pacific/Palau": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Palau"
+ }
+ ],
+ "Pacific/Pitcairn": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pitcairn Islands"
+ }
+ ],
+ "Pacific/Pohnpei": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Pohnpei"
+ }
+ ],
+ "Pacific/Port_Moresby": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Papua New Guinea"
+ }, {
+ "op": "difference",
+ "source": "overpass",
+ "id": "Autonomous Region of Bougainville"
+ }
+ ],
+ "Pacific/Rarotonga": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Cook Islands"
+ }
+ ],
+ "Pacific/Saipan": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[144,23],[143,14.55],[151,12],[144,23]]],
+ "description": "Intersect USA to isolate Northern Mariana Islands."
+ }
+ ],
+ "Pacific/Tahiti": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-137,-20],[-143,-32],[-156,-22],[-156,-14],[-139,-12],[-134,-20],[-137,-20]]],
+ "description": "Intersect France to include French Polynesia except for the Gambier Islands."
+ }
+ ],
+ "Pacific/Tarawa": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Kiribati"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[173,5],[179,-4],[167,-2],[173,5]]],
+ "description": "Intersect Kiribati to include westernmost islands."
+ }
+ ],
+ "Pacific/Tongatapu": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "Tonga"
+ }
+ ],
+ "Pacific/Wake": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "United States of America"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[165,20],[168,20],[166,18],[165,20]]],
+ "description": "Intersect USA to isolate Wake Island."
+ }
+ ],
+ "Pacific/Wallis": [
+ {
+ "op": "init",
+ "source": "overpass",
+ "id": "France"
+ }, {
+ "op": "intersect",
+ "source": "manual-polygon",
+ "data": [[[-179,-14],[-177,-17],[-175,-12],[-179,-14]]],
+ "description": "Intersect France to isolate Wallis and Futuna Islands."
+ }
+ ]
+}