{"id":3184,"date":"2018-05-11T10:23:56","date_gmt":"2018-05-11T18:23:56","guid":{"rendered":"http:\/\/bien.nceas.ucsb.edu\/bien\/?page_id=3184"},"modified":"2026-07-05T23:04:27","modified_gmt":"2026-07-06T07:04:27","slug":"gnrs","status":"publish","type":"page","link":"https:\/\/bien.nceas.ucsb.edu\/bien\/tools\/gnrs\/","title":{"rendered":"GNRS"},"content":{"rendered":"<div class=\"bien-tool-icon\" style=\"float:right;width:158px;margin:0 0 16px 24px;padding:18px 14px;border:1px solid #e2e8ea;border-top:3px solid #40916c;border-radius:10px;background:#ffffff;box-shadow:0 2px 10px rgba(15,61,46,0.06);text-align:center;\">\n<div style=\"font-size:52px;line-height:1;\" aria-hidden=\"true\">\ud83c\udf0e<\/div>\n<div style=\"font-weight:700;color:#124734;margin-top:8px;font-size:17px;\">GNRS<\/div>\n<div style=\"font-size:12px;color:#4a5c52;margin-top:2px;line-height:1.3;\">Geographic Name Resolution Service<\/div>\n<\/div>\n<p>The <strong>Geographic Name Resolution Service (GNRS)<\/strong> resolves political division names and codes using the <a href=\"http:\/\/www.geonames.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GeoNames<\/a> database of geographic place names, indexing them against political-division spatial objects in the <a href=\"https:\/\/www.naturalearthdata.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Natural Earth<\/a> and <a href=\"https:\/\/gadm.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Global Administrative Areas (GADM)<\/a> databases.<\/p>\n<p>Among other uses, this enables what we call &ldquo;political geovalidation&rdquo; of species observations: checking that observation coordinates fall within the declared country, state and county of observation. Political geovalidation is one of many data-cleaning operations performed on the BIEN database.<\/p>\n<p><strong>Examples and vignette:<\/strong> <a href=\"https:\/\/cran.r-project.org\/web\/packages\/GNRS\/vignettes\/GNRS.html\" target=\"_blank\" rel=\"noopener noreferrer\">GNRS vignette<\/a>.<\/p>\n<p><strong>Citation:<\/strong> Chamberlain, S. A. et al. (2022). <em>GNRS: A Geographic Name Resolution Service for standardizing and georeferencing political division names.<\/em> <em>PLOS ONE<\/em> 17(11): e0268162. <a href=\"https:\/\/doi.org\/10.1371\/journal.pone.0268162\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/doi.org\/10.1371\/journal.pone.0268162<\/a>.<\/p>\n<p><a href=\"https:\/\/gnrs.biendata.org\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-3677\" src=\"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot-1024x409.png\" alt=\"GNRS web application\" width=\"1024\" height=\"409\" srcset=\"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot-1024x409.png 1024w, https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot-300x120.png 300w, https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot-768x306.png 768w, https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot-1536x613.png 1536w, https:\/\/bien.nceas.ucsb.edu\/bien\/wp-content\/uploads\/2022\/05\/gnrs_screenshot.png 1704w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><br \/>\n<!-- BIEN GNRS looping demo (illustrative sample output, not live queries) --><\/p>\n<div class=\"btd\" data-tool=\"gnrs\"><\/div>\n<p><script>(function(){try{var st=document.createElement(\"style\");st.textContent=atob(\"LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQklFTiBUb29sIERlbW8g4oCUIGFuaW1hdGVkIHdvcmtmbG93IG1vY2t1cHMgZm9yIFROUlMgLyBHTlJTIC8gTlNSIC8gR1ZTCiAgIERlc2lnbiBzeXN0ZW06IFNjYW5kaW5hdmlhbi1taW5pbWFsLiBPbmUgYWNjZW50IHJvbGUgcGVyIHRvb2wsIHNoYXJlZCByaHl0aG0uCiAgIERlcGVuZGVuY3ktZnJlZS4gU2FmZSB0byBlbWJlZCBpbiBhIFdvcmRQcmVzcyBDdXN0b20gSFRNTCBibG9jay4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERlc2lnbiBpbnRlbnQgKEVjb0ludGVyZmFjZSArIHNjYW5kaW5hdmlhbi1kZXNpZ24pOgogICAtIENvbXByZWhlbnNpb24gZmlyc3Q6IGEgdmlld2VyIHVuZGVyc3RhbmRzICJwYXN0ZSBtZXNzeSBkYXRhIOKGkiBnZXQgY2xlYW4gZGF0YSIKICAgICBpbiBvbmUgZ2xhbmNlLCB3aXRob3V0IHJlYWRpbmcgYSBjYXB0aW9uLgogICAtIE9uZSBjaGFubmVsLCBvbmUgc2lnbmFsOiBlYWNoIHRvb2wgb3ducyBhIHNpbmdsZSBhY2NlbnQgaHVlOyBzdHJ1Y3R1cmUsCiAgICAgc3BhY2luZyBhbmQgdHlwZSBzdGF5IGlkZW50aWNhbCBhY3Jvc3MgYWxsIGZvdXIgc28gdGhlIGZhbWlseSByZWFkcyBhcyBhIHNldC4KICAgLSBFZGl0IGNvbnN0YW50bHk6IG9ubHkgdGhlIGJyb3dzZXIgY2hyb21lLCBpbnB1dCwgYWN0aW9uIGFuZCBvdXRwdXQgc3Vydml2ZS4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi5idGQgewogIC8qIC0tLS0gZGVzaWduIHRva2VucyAocGVyLWluc3RhbmNlIGFjY2VudCBpbmplY3RlZCB2aWEgLS1idGQtYWNjZW50KSAtLS0tICovCiAgLS1idGQtaW5rOiAjMTcyNDFkOwogIC0tYnRkLW11dGVkOiAjNWY2ZjY3OwogIC0tYnRkLWxpbmU6ICNlNGU4ZTQ7CiAgLS1idGQtc3VyZmFjZTogI2ZmZmZmZjsKICAtLWJ0ZC1jYW52YXM6ICNmNmY3ZjQ7CiAgLS1idGQtYWNjZW50OiAjMmU3ZDViOyAgICAgICAgICAvKiBvdmVycmlkZGVuIHBlciB0b29sICovCiAgLS1idGQtYWNjZW50LXNvZnQ6ICMyZTdkNWIxYTsgICAvKiBvdmVycmlkZGVuIHBlciB0b29sICovCiAgLS1idGQtcmFkaXVzOiAxNHB4OwogIC0tYnRkLXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMjMsIDM2LCAyOSwgLjA0KSwKICAgICAgICAgICAgICAgIDAgMTJweCAzMnB4IC0xMnB4IHJnYmEoMjMsIDM2LCAyOSwgLjIyKTsKCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB3aWR0aDogMTAwJTsKICBtYXgtd2lkdGg6IDYyMHB4OwogIG1hcmdpbjogMCBhdXRvOwogIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIEludGVyLCBSb2JvdG8sCiAgICBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiB2YXIoLS1idGQtaW5rKTsKICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5Owp9CgouYnRkICosCi5idGQgKjo6YmVmb3JlLAouYnRkICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQoKLyogLS0tLSBicm93c2VyLXdpbmRvdyBmcmFtZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLmJ0ZF9fd2luZG93IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYmFja2dyb3VuZDogdmFyKC0tYnRkLXN1cmZhY2UpOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJ0ZC1saW5lKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1idGQtcmFkaXVzKTsKICBib3gtc2hhZG93OiB2YXIoLS1idGQtc2hhZG93KTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgouYnRkX19jaHJvbWUgewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBnYXA6IDEwcHg7CiAgcGFkZGluZzogMTJweCAxNnB4OwogIGJhY2tncm91bmQ6IHZhcigtLWJ0ZC1jYW52YXMpOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1idGQtbGluZSk7Cn0KCi5idGRfX2RvdHMgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDdweDsgfQouYnRkX19kb3RzIGkgewogIHdpZHRoOiAxMXB4OyBoZWlnaHQ6IDExcHg7IGJvcmRlci1yYWRpdXM6IDUwJTsKICBiYWNrZ3JvdW5kOiAjZDdkY2Q4OyBkaXNwbGF5OiBibG9jazsKfQouYnRkX19kb3RzIGk6bnRoLWNoaWxkKDEpIHsgYmFja2dyb3VuZDogI2YwYjViMDsgfQouYnRkX19kb3RzIGk6bnRoLWNoaWxkKDIpIHsgYmFja2dyb3VuZDogI2YyZDlhNjsgfQouYnRkX19kb3RzIGk6bnRoLWNoaWxkKDMpIHsgYmFja2dyb3VuZDogI2I4ZGNjNDsgfQoKLmJ0ZF9fdXJsIHsKICBmbGV4OiAxOwogIGZvbnQtc2l6ZTogMTIuNXB4OwogIGNvbG9yOiB2YXIoLS1idGQtbXV0ZWQpOwogIGJhY2tncm91bmQ6IHZhcigtLWJ0ZC1zdXJmYWNlKTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idGQtbGluZSk7CiAgYm9yZGVyLXJhZGl1czogOHB4OwogIHBhZGRpbmc6IDZweCAxMnB4OwogIGxldHRlci1zcGFjaW5nOiAuMXB4OwogIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQouYnRkX191cmwgYiB7IGNvbG9yOiB2YXIoLS1idGQtYWNjZW50KTsgZm9udC13ZWlnaHQ6IDYwMDsgfQoKLyogLS0tLSBhcHAgYm9keSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLmJ0ZF9fYXBwIHsgcGFkZGluZzogMjJweCAyMnB4IDI0cHg7IH0KCi5idGRfX2hlYWQgewogIGRpc3BsYXk6IGZsZXg7CiAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICBnYXA6IDEycHg7CiAgbWFyZ2luLWJvdHRvbTogMTZweDsKfQouYnRkX190aXRsZSB7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDY1MDsgbGV0dGVyLXNwYWNpbmc6IC0uMnB4OyB9Ci5idGRfX3RpdGxlIHNwYW4geyBjb2xvcjogdmFyKC0tYnRkLWFjY2VudCk7IH0KLmJ0ZF9fc3RlcCB7CiAgZm9udC1zaXplOiAxMXB4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGV0dGVyLXNwYWNpbmc6IC44cHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjb2xvcjogdmFyKC0tYnRkLW11dGVkKTsKICB0cmFuc2l0aW9uOiBjb2xvciAuM3MgZWFzZTsKfQouYnRkX19zdGVwLmlzLWxpdmUgeyBjb2xvcjogdmFyKC0tYnRkLWFjY2VudCk7IH0KCi5idGRfX2xhYmVsIHsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBjb2xvcjogdmFyKC0tYnRkLW11dGVkKTsKICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgbGV0dGVyLXNwYWNpbmc6IC4ycHg7Cn0KCi8qIC0tLS0gaW5wdXQgcGFuZWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5idGRfX2lucHV0IHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgbWluLWhlaWdodDogOTJweDsKICBiYWNrZ3JvdW5kOiB2YXIoLS1idGQtY2FudmFzKTsKICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1idGQtbGluZSk7CiAgYm9yZGVyLXJhZGl1czogMTBweDsKICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsICJTRiBNb25vIiwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAxM3B4OwogIGxpbmUtaGVpZ2h0OiAxLjc7CiAgY29sb3I6IHZhcigtLWJ0ZC1pbmspOwogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuM3MgZWFzZSwgYmFja2dyb3VuZCAuM3MgZWFzZTsKfQouYnRkX19pbnB1dC5pcy1mb2N1cyB7CiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1idGQtYWNjZW50KTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1idGQtc3VyZmFjZSk7Cn0KLmJ0ZF9fcGxhY2Vob2xkZXIgewogIGNvbG9yOiAjOWFhOGEwOwogIHRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGVhc2U7Cn0KLmJ0ZF9fdHlwZWQgeyB3aGl0ZS1zcGFjZTogcHJlOyB9Ci5idGRfX2NhcmV0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgd2lkdGg6IDJweDsKICBoZWlnaHQ6IDEuMDVlbTsKICBiYWNrZ3JvdW5kOiB2YXIoLS1idGQtYWNjZW50KTsKICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgbWFyZ2luLWxlZnQ6IDFweDsKICBvcGFjaXR5OiAwOwp9Ci5idGRfX2lucHV0LmlzLXR5cGluZyAuYnRkX19jYXJldCB7IGFuaW1hdGlvbjogYnRkLWJsaW5rIDFzIHN0ZXBzKDEpIGluZmluaXRlOyB9CgovKiAtLS0tIGFjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwouYnRkX19hY3Rpb25zIHsKICBkaXNwbGF5OiBmbGV4OwogIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgZ2FwOiAxMnB4OwogIG1hcmdpbjogMTZweCAwIDRweDsKfQouYnRkX190cnksCi5idGRfX3N1Ym1pdCB7CiAgYXBwZWFyYW5jZTogbm9uZTsKICBib3JkZXI6IDA7CiAgYm9yZGVyLXJhZGl1czogOXB4OwogIGZvbnQ6IGluaGVyaXQ7CiAgZm9udC1zaXplOiAxM3B4OwogIGZvbnQtd2VpZ2h0OiA2MDA7CiAgbGV0dGVyLXNwYWNpbmc6IC4ycHg7CiAgcGFkZGluZzogOXB4IDE2cHg7CiAgY3Vyc29yOiBkZWZhdWx0OwogIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMnMgZWFzZSwgYm94LXNoYWRvdyAuMnMgZWFzZSwgYmFja2dyb3VuZCAuMnMgZWFzZSwKICAgIG9wYWNpdHkgLjNzIGVhc2U7Cn0KLmJ0ZF9fdHJ5IHsKICBjb2xvcjogdmFyKC0tYnRkLWFjY2VudCk7CiAgYmFja2dyb3VuZDogdmFyKC0tYnRkLWFjY2VudC1zb2Z0KTsKICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggdmFyKC0tYnRkLWFjY2VudCk7Cn0KLmJ0ZF9fdHJ5LmlzLXB1bHNlIHsgYW5pbWF0aW9uOiBidGQtcHVsc2UgMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgfQouYnRkX190cnkuaXMtcHJlc3MgeyB0cmFuc2Zvcm06IHNjYWxlKC45NCk7IH0KLmJ0ZF9fc3VibWl0IHsKICBjb2xvcjogI2ZmZjsKICBiYWNrZ3JvdW5kOiB2YXIoLS1idGQtYWNjZW50KTsKICBvcGFjaXR5OiAuMzU7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLmJ0ZF9fc3VibWl0LmlzLXJlYWR5IHsgb3BhY2l0eTogMTsgfQouYnRkX19zdWJtaXQuaXMtcHJlc3MgeyB0cmFuc2Zvcm06IHNjYWxlKC45NCk7IH0KCi5idGRfX3NwaW5uZXIgewogIHdpZHRoOiAxNXB4OyBoZWlnaHQ6IDE1cHg7CiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYnRkLWFjY2VudC1zb2Z0KTsKICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1idGQtYWNjZW50KTsKICBib3JkZXItcmFkaXVzOiA1MCU7CiAgb3BhY2l0eTogMDsKICBhbmltYXRpb246IGJ0ZC1zcGluIC43cyBsaW5lYXIgaW5maW5pdGU7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgZWFzZTsKfQouYnRkX19zcGlubmVyLmlzLW9uIHsgb3BhY2l0eTogMTsgfQoKLyogLS0tLSBvdXRwdXQgdGFibGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLmJ0ZF9fb3V0cHV0IHsKICBtYXJnaW4tdG9wOiAxOHB4OwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJ0ZC1saW5lKTsKICBib3JkZXItcmFkaXVzOiAxMHB4OwogIG92ZXJmbG93OiBoaWRkZW47CiAgb3BhY2l0eTogMDsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNnB4KTsKICB0cmFuc2l0aW9uOiBvcGFjaXR5IC40cyBlYXNlLCB0cmFuc2Zvcm0gLjRzIGVhc2U7Cn0KLmJ0ZF9fb3V0cHV0LmlzLW9uIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9CgouYnRkX19yb3cgewogIGRpc3BsYXk6IGdyaWQ7CiAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICBnYXA6IDEwcHg7CiAgcGFkZGluZzogOXB4IDE0cHg7CiAgZm9udC1zaXplOiAxMi41cHg7CiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWJ0ZC1saW5lKTsKfQouYnRkX19yb3c6Zmlyc3QtY2hpbGQgeyBib3JkZXItdG9wOiAwOyB9Ci5idGRfX3Jvdy0taGVhZCB7CiAgYmFja2dyb3VuZDogdmFyKC0tYnRkLWNhbnZhcyk7CiAgZm9udC13ZWlnaHQ6IDY1MDsKICBmb250LXNpemU6IDExcHg7CiAgbGV0dGVyLXNwYWNpbmc6IC41cHg7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICBjb2xvcjogdmFyKC0tYnRkLW11dGVkKTsKfQouYnRkX19yb3ctLWRhdGEgewogIG9wYWNpdHk6IDA7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7CiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMzVzIGVhc2UsIHRyYW5zZm9ybSAuMzVzIGVhc2U7Cn0KLmJ0ZF9fb3V0cHV0LmlzLW9uIC5idGRfX3Jvdy0tZGF0YSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTsgfQouYnRkX19jZWxsIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IH0KLmJ0ZF9fY2VsbC0tbW9ubyB7CiAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBDb25zb2xhcywgbW9ub3NwYWNlOwogIGNvbG9yOiB2YXIoLS1idGQtbXV0ZWQpOwp9Ci5idGRfX2NlbGwtLXN0cm9uZyB7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KCi5idGRfX3RhZyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGZvbnQtc2l6ZTogMTFweDsKICBmb250LXdlaWdodDogNjUwOwogIGxldHRlci1zcGFjaW5nOiAuMnB4OwogIHBhZGRpbmc6IDJweCA5cHg7CiAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KLmJ0ZF9fdGFnLS1vayAgICB7IGNvbG9yOiAjMWY2YjQ4OyBiYWNrZ3JvdW5kOiAjMWY2YjQ4MWE7IH0KLmJ0ZF9fdGFnLS13YXJuICB7IGNvbG9yOiAjOWE2YTEwOyBiYWNrZ3JvdW5kOiAjOWE2YTEwMWE7IH0KLmJ0ZF9fdGFnLS1pbnRybyB7IGNvbG9yOiAjOGE0YjFmOyBiYWNrZ3JvdW5kOiAjOGE0YjFmMWE7IH0KLmJ0ZF9fdGFnLS1mbGFnICB7IGNvbG9yOiAjYTIzYjNiOyBiYWNrZ3JvdW5kOiAjYTIzYjNiMWE7IH0KCi8qIC0tLS0gZmFrZSBjdXJzb3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5idGRfX2N1cnNvciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgbGVmdDogMDsKICB3aWR0aDogMThweDsgaGVpZ2h0OiAxOHB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwogIHotaW5kZXg6IDU7CiAgb3BhY2l0eTogMDsKICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjdzIGN1YmljLWJlemllciguNSwgMCwgLjIsIDEpLCBvcGFjaXR5IC4zcyBlYXNlOwogIGZpbHRlcjogZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwwLDAsLjI1KSk7Cn0KLmJ0ZF9fY3Vyc29yIHN2ZyB7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9CgovKiAtLS0tIGNhcHRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwouYnRkX19jYXB0aW9uIHsKICBtYXJnaW46IDEycHggNHB4IDA7CiAgZm9udC1zaXplOiAxMnB4OwogIGNvbG9yOiB2YXIoLS1idGQtbXV0ZWQpOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBsZXR0ZXItc3BhY2luZzogLjFweDsKfQouYnRkX19jYXB0aW9uIGEgeyBjb2xvcjogdmFyKC0tYnRkLWFjY2VudCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IDYwMDsgfQouYnRkX19jYXB0aW9uIGE6aG92ZXIgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQoKLyogLS0tLSBrZXlmcmFtZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQGtleWZyYW1lcyBidGQtYmxpbmsgeyA1MCUgeyBvcGFjaXR5OiAwOyB9IDAlLCAxMDAlIHsgb3BhY2l0eTogMTsgfSB9CkBrZXlmcmFtZXMgYnRkLXNwaW4gIHsgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9IH0KQGtleWZyYW1lcyBidGQtcHVsc2UgewogIDAlLCAxMDAlIHsgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWJ0ZC1hY2NlbnQpLCAwIDAgMCAwIHZhcigtLWJ0ZC1hY2NlbnQtc29mdCk7IH0KICA1MCUgICAgICB7IGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCB2YXIoLS1idGQtYWNjZW50KSwgMCAwIDAgN3B4IHRyYW5zcGFyZW50OyB9Cn0KCi8qIC0tLS0gYWNjZXNzaWJpbGl0eTogaG9ub3VyIHJlZHVjZWQtbW90aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgLmJ0ZF9fY3Vyc29yIHsgZGlzcGxheTogbm9uZTsgfQogIC5idGRfX2NhcmV0LAogIC5idGRfX3NwaW5uZXIsCiAgLmJ0ZF9fdHJ5LmlzLXB1bHNlIHsgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0KICAuYnRkX19vdXRwdXQsCiAgLmJ0ZF9fcm93LS1kYXRhIHsgb3BhY2l0eTogMSAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsgfQp9Cg==\");document.head.appendChild(st);var s=document.createElement(\"script\");s.textContent=atob(\"LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQklFTiBUb29sIERlbW8gZW5naW5lICZtZGFzaDsgZHJpdmVzIHRoZSBsb29waW5nIHdvcmtmbG93IGFuaW1hdGlvbi4KICAgVXNhZ2U6ICA8ZGl2IGNsYXNzPSJidGQiIGRhdGEtdG9vbD0idG5ycyI+PC9kaXY+ICAuLi4gdGhlbiBsb2FkIHRoaXMgc2NyaXB0LgogICBBdXRvLWluaXRzIGV2ZXJ5IC5idGQgb24gdGhlIHBhZ2UuIE5vIGRlcGVuZGVuY2llcy4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIExvb3AgcGVyIHRvb2w6ICBFTVBUWSAmcmFycjsgY3Vyc29yIHRvICJUcnkgbWUiICZyYXJyOyBjbGljayAmcmFycjsgdHlwZSBzYW1wbGUgaW5wdXQgJnJhcnI7CiAgIGN1cnNvciB0byAiUnVuIiAmcmFycjsgY2xpY2sgJnJhcnI7IHNwaW5uZXIgJnJhcnI7IHJlc3VsdHMgcmV2ZWFsICZyYXJyOyBob2xkICZyYXJyOyBmYWRlICZyYXJyOyByZXBlYXQuCiAgIEFsbCBkYXRhIGJlbG93IGlzIGlsbHVzdHJhdGl2ZSBzYW1wbGUgb3V0cHV0LCBtYXRjaGluZyBlYWNoIHNlcnZpY2UncyByZWFsCiAgIGlucHV0L291dHB1dCBzaGFwZSAoc2VlIGJpZW5kYXRhLm9yZyBhcHBzKS4gTm90IGxpdmUgcmVzdWx0cy4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKGZ1bmN0aW9uICgpIHsKICAidXNlIHN0cmljdCI7CgogIC8qIC0tLS0gcGVyLXRvb2wgY29uZmlndXJhdGlvbiAoYWNjZW50ICsgc2FtcGxlIGRhdGEpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogIHZhciBUT09MUyA9IHsKICAgIHRucnM6IHsKICAgICAgYWNjZW50OiAiIzJlN2Q1YiIsIHNvZnQ6ICJyZ2JhKDQ2LDEyNSw5MSwuMTEpIiwKICAgICAgdXJsOiAidG5ycy5iaWVuZGF0YS5vcmciLAogICAgICB0aXRsZTogIlROUlMiLCB0aXRsZVRhaWw6ICJUYXhvbm9taWMgTmFtZSBSZXNvbHV0aW9uIFNlcnZpY2UiLAogICAgICBhcHA6ICJodHRwczovL3RucnMuYmllbmRhdGEub3JnLyIsCiAgICAgIGlucHV0TGFiZWw6ICJQYXN0ZSBwbGFudCBuYW1lcyIsCiAgICAgIHBsYWNlaG9sZGVyOiAiQ2FubmFiaXMgc2F0aXZlXG5aZWEgbWFpemVcblNvbGlkYWdvIGFsdGlzaW1hIiwKICAgICAgdHlwZWQ6ICJDYW5uYWJpcyBzYXRpdmVcblplYSBtYWl6ZVxuU29saWRhZ28gYWx0aXNpbWEiLAogICAgICBncmlkOiAiMS4yZnIgMS40ZnIgLjdmciAuNWZyIiwKICAgICAgaGVhZDogWyJTdWJtaXR0ZWQiLCAiQWNjZXB0ZWQgbmFtZSIsICJBdXRob3IiLCAiU2NvcmUiXSwKICAgICAgcm93czogWwogICAgICAgIFsiQ2FubmFiaXMgc2F0aXZlIiwgICJDYW5uYWJpcyBzYXRpdmEiLCAgICAgIkwuIiwgdGFnKCJvayIsICIwLjk4IildLAogICAgICAgIFsiWmVhIG1haXplIiwgICAgICAgICJaZWEgbWF5cyIsICAgICAgICAgICAgIkwuIiwgdGFnKCJvayIsICIwLjk3IildLAogICAgICAgIFsiU29saWRhZ28gYWx0aXNpbWEiLCJTb2xpZGFnbyBhbHRpc3NpbWEiLCAgIkFpdG9uIiwgdGFnKCJvayIsICIxLjAwIildCiAgICAgIF0sCiAgICAgIGNhcHRpb246ICdDb3JyZWN0IHNwZWxsaW5nICYgcmVzb2x2ZSBzeW5vbnltcyAmbmJzcDsmbWlkZG90OyZuYnNwOyA8YSBocmVmPSJodHRwczovL3RucnMuYmllbmRhdGEub3JnLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPk9wZW4gdGhlIFROUlMgJnJhcnI7PC9hPicKICAgIH0sCiAgICBnbnJzOiB7CiAgICAgIGFjY2VudDogIiMyZjZkYjAiLCBzb2Z0OiAicmdiYSg0NywxMDksMTc2LC4xMSkiLAogICAgICB1cmw6ICJnbnJzLmJpZW5kYXRhLm9yZyIsCiAgICAgIHRpdGxlOiAiR05SUyIsIHRpdGxlVGFpbDogIkdlb2dyYXBoaWMgTmFtZSBSZXNvbHV0aW9uIFNlcnZpY2UiLAogICAgICBhcHA6ICJodHRwczovL2ducnMuYmllbmRhdGEub3JnLyIsCiAgICAgIGlucHV0TGFiZWw6ICJQYXN0ZSBwb2xpdGljYWwgZGl2aXNpb25zIiwKICAgICAgcGxhY2Vob2xkZXI6ICJ1bml0ZWQgc3RhdGVzIHwgY2FsaWZvcm5hXG5QZXJ1IHwgQ3V6Y29cbk1leGljbyB8IE9heGNhIiwKICAgICAgdHlwZWQ6ICJ1bml0ZWQgc3RhdGVzIHwgY2FsaWZvcm5hXG5QZXJ1IHwgQ3V6Y29cbk1leGljbyB8IE9heGNhIiwKICAgICAgZ3JpZDogIjEuNWZyIDFmciAxZnIgLjVmciIsCiAgICAgIGhlYWQ6IFsiU3VibWl0dGVkIiwgIkNvdW50cnkiLCAiU3RhdGUvUHJvdmluY2UiLCAiTWF0Y2giXSwKICAgICAgcm93czogWwogICAgICAgIFsidW5pdGVkIHN0YXRlcywgY2FsaWZvcm5hIiwgIlVuaXRlZCBTdGF0ZXMiLCAiQ2FsaWZvcm5pYSIsIHRhZygib2siLCAiJiMxMDAwMzsiKV0sCiAgICAgICAgWyJQZXJ1LCBDdXpjbyIsICAgICAgICAgICAgICJQZXJ1IiwgICAgICAgICAgIkN1c2NvIiwgICAgICB0YWcoIm9rIiwgIiYjMTAwMDM7IildLAogICAgICAgIFsiTWV4aWNvLCBPYXhjYSIsICAgICAgICAgICAiTWV4aWNvIiwgICAgICAgICJPYXhhY2EiLCAgICAgdGFnKCJvayIsICImIzEwMDAzOyIpXQogICAgICBdLAogICAgICBjYXB0aW9uOiAnU3RhbmRhcmRpemUgY291bnRyeSAvIHN0YXRlIC8gY291bnR5IG5hbWVzICZuYnNwOyZtaWRkb3Q7Jm5ic3A7IDxhIGhyZWY9Imh0dHBzOi8vZ25ycy5iaWVuZGF0YS5vcmcvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+T3BlbiB0aGUgR05SUyAmcmFycjs8L2E+JwogICAgfSwKICAgIG5zcjogewogICAgICBhY2NlbnQ6ICIjYjk3OTFmIiwgc29mdDogInJnYmEoMTg1LDEyMSwzMSwuMTIpIiwKICAgICAgdXJsOiAibnNyLmJpZW5kYXRhLm9yZyIsCiAgICAgIHRpdGxlOiAiTlNSIiwgdGl0bGVUYWlsOiAiTmF0aXZlIFNwZWNpZXMgUmVzb2x2ZXIiLAogICAgICBhcHA6ICJodHRwczovL25zci5iaWVuZGF0YS5vcmcvIiwKICAgICAgaW5wdXRMYWJlbDogIlBhc3RlIHNwZWNpZXMgKyByZWdpb24iLAogICAgICBwbGFjZWhvbGRlcjogIlplYSBtYXlzIHwgVW5pdGVkIFN0YXRlc1xuRXNwZWxldGlhIHNjaHVsdHppaSB8IFZlbmV6dWVsYVxuUGludXMgcmFkaWF0YSB8IENoaWxlIiwKICAgICAgdHlwZWQ6ICJaZWEgbWF5cyB8IFVuaXRlZCBTdGF0ZXNcbkVzcGVsZXRpYSBzY2h1bHR6aWkgfCBWZW5lenVlbGFcblBpbnVzIHJhZGlhdGEgfCBDaGlsZSIsCiAgICAgIGdyaWQ6ICIxLjVmciAxLjFmciAuOWZyIiwKICAgICAgaGVhZDogWyJTcGVjaWVzIiwgIlJlZ2lvbiIsICJTdGF0dXMiXSwKICAgICAgcm93czogWwogICAgICAgIFsiWmVhIG1heXMiLCAgICAgICAgICAgICAiVW5pdGVkIFN0YXRlcyIsIHRhZygiaW50cm8iLCAiSW50cm9kdWNlZCIpXSwKICAgICAgICBbIkVzcGVsZXRpYSBzY2h1bHR6aWkiLCAgIlZlbmV6dWVsYSIsICAgICB0YWcoIm9rIiwgIk5hdGl2ZSIpXSwKICAgICAgICBbIlBpbnVzIHJhZGlhdGEiLCAgICAgICAgIkNoaWxlIiwgICAgICAgICB0YWcoImludHJvIiwgIkludHJvZHVjZWQiKV0KICAgICAgXSwKICAgICAgY2FwdGlvbjogJ05hdGl2ZSBvciBpbnRyb2R1Y2VkLCBieSBwb2xpdGljYWwgZGl2aXNpb24gJm5ic3A7Jm1pZGRvdDsmbmJzcDsgPGEgaHJlZj0iaHR0cHM6Ly9uc3IuYmllbmRhdGEub3JnLyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPk9wZW4gdGhlIE5TUiAmcmFycjs8L2E+JwogICAgfSwKICAgIGd2czogewogICAgICBhY2NlbnQ6ICIjMWY4YThhIiwgc29mdDogInJnYmEoMzEsMTM4LDEzOCwuMTIpIiwKICAgICAgdXJsOiAiZ3ZzLmJpZW5kYXRhLm9yZyIsCiAgICAgIHRpdGxlOiAiR1ZTIiwgdGl0bGVUYWlsOiAiR2VvY29vcmRpbmF0ZSBWYWxpZGF0aW9uIFNlcnZpY2UiLAogICAgICBhcHA6ICJodHRwczovL2d2cy5iaWVuZGF0YS5vcmcvIiwKICAgICAgaW5wdXRMYWJlbDogIlBhc3RlIGxhdGl0dWRlLCBsb25naXR1ZGUiLAogICAgICBwbGFjZWhvbGRlcjogIjQwLjcxLCAtNzQuMDFcbi0xMy4xNiwgLTcyLjU0XG4wLjAwLCAwLjAwIiwKICAgICAgdHlwZWQ6ICI0MC43MSwgLTc0LjAxXG4tMTMuMTYsIC03Mi41NFxuMC4wMCwgMC4wMCIsCiAgICAgIGdyaWQ6ICIxLjFmciAuOGZyIDEuMmZyIDFmciIsCiAgICAgIGhlYWQ6IFsiTGF0LCBMb25nIiwgIkxhbmQvU2VhIiwgIkRpdmlzaW9uIiwgIkZsYWciXSwKICAgICAgcm93czogWwogICAgICAgIFsiNDAuNzEsIC03NC4wMSIsICJMYW5kIiwgICJOZXcgWW9yaywgVVMiLCB0YWcoIm9rIiwgIiYjMTAwMDM7IHZhbGlkIildLAogICAgICAgIFsiLTEzLjE2LCAtNzIuNTQiLCJMYW5kIiwgICJDdXNjbywgUEUiLCAgICB0YWcoIm9rIiwgIiYjMTAwMDM7IHZhbGlkIildLAogICAgICAgIFsiMC4wMCwgMC4wMCIsICAgICJPY2VhbiIsICImbWRhc2g7IiwgICAgICAgICAgICB0YWcoImZsYWciLCAiJiM5ODczOyBudWxsIGlzbGFuZCIpXQogICAgICBdLAogICAgICBjYXB0aW9uOiAnRmxhZyBvY2VhbiBwb2ludHMsIGNlbnRyb2lkcyAmIGdlb3JlZmVyZW5jaW5nIGVycm9ycyAmbmJzcDsmbWlkZG90OyZuYnNwOyA8YSBocmVmPSJodHRwczovL2d2cy5iaWVuZGF0YS5vcmcvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+T3BlbiB0aGUgR1ZTICZyYXJyOzwvYT4nCiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gdGFnKGtpbmQsIHRleHQpIHsgcmV0dXJuIHsgdGFnOiBraW5kLCB0ZXh0OiB0ZXh0IH07IH0KCiAgdmFyIENVUlNPUl9TVkcgPQogICAgJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjMTcyNDFkIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIj4nICsKICAgICc8cGF0aCBkPSJNNCAybDYgMTYgMi4yLTYuNEwxOC42IDkgNCAyeiIvPjwvc3ZnPic7CgogIC8qIC0tLS0gYnVpbGQgdGhlIERPTSBmb3Igb25lIGRlbW8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIGJ1aWxkKGVsLCBjZmcpIHsKICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCItLWJ0ZC1hY2NlbnQiLCBjZmcuYWNjZW50KTsKICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCItLWJ0ZC1hY2NlbnQtc29mdCIsIGNmZy5zb2Z0KTsKCiAgICB2YXIgaGVhZENlbGxzID0gY2ZnLmhlYWQubWFwKGZ1bmN0aW9uIChoKSB7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iYnRkX19jZWxsIj4nICsgaCArICI8L2Rpdj4iOwogICAgfSkuam9pbigiIik7CgogICAgdmFyIGRhdGFSb3dzID0gY2ZnLnJvd3MubWFwKGZ1bmN0aW9uIChyKSB7CiAgICAgIHZhciBjZWxscyA9IHIubWFwKGZ1bmN0aW9uIChjLCBpKSB7CiAgICAgICAgaWYgKGMgJiYgdHlwZW9mIGMgPT09ICJvYmplY3QiICYmIGMudGFnKSB7CiAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImJ0ZF9fY2VsbCI+PHNwYW4gY2xhc3M9ImJ0ZF9fdGFnIGJ0ZF9fdGFnLS0nICsKICAgICAgICAgICAgYy50YWcgKyAnIj4nICsgYy50ZXh0ICsgIjwvc3Bhbj48L2Rpdj4iOwogICAgICAgIH0KICAgICAgICB2YXIgY2xzID0gaSA9PT0gMCA\/ICJidGRfX2NlbGwgYnRkX19jZWxsLS1tb25vIiA6CiAgICAgICAgICAgICAgICAgIGkgPT09IDEgPyAiYnRkX19jZWxsIGJ0ZF9fY2VsbC0tc3Ryb25nIiA6ICJidGRfX2NlbGwiOwogICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0iJyArIGNscyArICciPicgKyBjICsgIjwvZGl2PiI7CiAgICAgIH0pLmpvaW4oIiIpOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9ImJ0ZF9fcm93IGJ0ZF9fcm93LS1kYXRhIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOicgKwogICAgICAgIGNmZy5ncmlkICsgJyI+JyArIGNlbGxzICsgIjwvZGl2PiI7CiAgICB9KS5qb2luKCIiKTsKCiAgICBlbC5pbm5lckhUTUwgPQogICAgICAnPGRpdiBjbGFzcz0iYnRkX193aW5kb3ciPicgKwogICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX2N1cnNvciI+JyArIENVUlNPUl9TVkcgKyAiPC9kaXY+IiArCiAgICAgICAgJzxkaXYgY2xhc3M9ImJ0ZF9fY2hyb21lIj4nICsKICAgICAgICAgICc8c3BhbiBjbGFzcz0iYnRkX19kb3RzIj48aT48L2k+PGk+PC9pPjxpPjwvaT48L3NwYW4+JyArCiAgICAgICAgICAnPHNwYW4gY2xhc3M9ImJ0ZF9fdXJsIj5odHRwczovLzxiPicgKyBjZmcudXJsICsgIjwvYj4vPC9zcGFuPiIgKwogICAgICAgICI8L2Rpdj4iICsKICAgICAgICAnPGRpdiBjbGFzcz0iYnRkX19hcHAiPicgKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImJ0ZF9faGVhZCI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX3RpdGxlIj4nICsgY2ZnLnRpdGxlICsKICAgICAgICAgICAgICAnIDxzcGFuPiZtaWRkb3Q7ICcgKyBjZmcudGl0bGVUYWlsICsgIjwvc3Bhbj48L2Rpdj4iICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImJ0ZF9fc3RlcCI+UmVhZHk8L2Rpdj4nICsKICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX2xhYmVsIj4nICsgY2ZnLmlucHV0TGFiZWwgKyAiPC9kaXY+IiArCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYnRkX19pbnB1dCI+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0iYnRkX19wbGFjZWhvbGRlciI+JyArIGVzYyhjZmcucGxhY2Vob2xkZXIpICsgIjwvc3Bhbj4iICsKICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJidGRfX3R5cGVkIj48L3NwYW4+PHNwYW4gY2xhc3M9ImJ0ZF9fY2FyZXQiPjwvc3Bhbj4nICsKICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX2FjdGlvbnMiPicgKwogICAgICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidGRfX3RyeSI+VHJ5IG1lICYjMTAwMjQ7PC9idXR0b24+JyArCiAgICAgICAgICAgICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0ZF9fc3VibWl0Ij5SdW4gcmVzb2x2ZXI8L2J1dHRvbj4nICsKICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJidGRfX3NwaW5uZXIiPjwvc3Bhbj4nICsKICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX291dHB1dCI+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJidGRfX3JvdyBidGRfX3Jvdy0taGVhZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczonICsKICAgICAgICAgICAgICBjZmcuZ3JpZCArICciPicgKyBoZWFkQ2VsbHMgKyAiPC9kaXY+IiArCiAgICAgICAgICAgIGRhdGFSb3dzICsKICAgICAgICAgICI8L2Rpdj4iICsKICAgICAgICAiPC9kaXY+IiArCiAgICAgICI8L2Rpdj4iICsKICAgICAgJzxwIGNsYXNzPSJidGRfX2NhcHRpb24iPicgKyBjZmcuY2FwdGlvbiArICI8L3A+IjsKCiAgICByZXR1cm4gewogICAgICByb290OiBlbCwKICAgICAgd2luZG93OiBlbC5xdWVyeVNlbGVjdG9yKCIuYnRkX193aW5kb3ciKSwKICAgICAgY3Vyc29yOiBlbC5xdWVyeVNlbGVjdG9yKCIuYnRkX19jdXJzb3IiKSwKICAgICAgc3RlcDogZWwucXVlcnlTZWxlY3RvcigiLmJ0ZF9fc3RlcCIpLAogICAgICBpbnB1dDogZWwucXVlcnlTZWxlY3RvcigiLmJ0ZF9faW5wdXQiKSwKICAgICAgcGxhY2Vob2xkZXI6IGVsLnF1ZXJ5U2VsZWN0b3IoIi5idGRfX3BsYWNlaG9sZGVyIiksCiAgICAgIHR5cGVkOiBlbC5xdWVyeVNlbGVjdG9yKCIuYnRkX190eXBlZCIpLAogICAgICB0cnlCdG46IGVsLnF1ZXJ5U2VsZWN0b3IoIi5idGRfX3RyeSIpLAogICAgICBzdWJtaXQ6IGVsLnF1ZXJ5U2VsZWN0b3IoIi5idGRfX3N1Ym1pdCIpLAogICAgICBzcGlubmVyOiBlbC5xdWVyeVNlbGVjdG9yKCIuYnRkX19zcGlubmVyIiksCiAgICAgIG91dHB1dDogZWwucXVlcnlTZWxlY3RvcigiLmJ0ZF9fb3V0cHV0IikKICAgIH07CiAgfQoKICBmdW5jdGlvbiBlc2MocykgewogICAgcmV0dXJuIHMucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7IikucmVwbGFjZSgvPi9nLCAiJmd0OyIpOwogIH0KCiAgLyogLS0tLSBhbmltYXRpb24gc3RhdGUgbWFjaGluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcnVuKGRvbSwgY2ZnKSB7CiAgICB2YXIgdGltZXJzID0gW107CiAgICBmdW5jdGlvbiBhdChtcywgZm4pIHsgdGltZXJzLnB1c2goc2V0VGltZW91dChmbiwgbXMpKTsgfQogICAgZnVuY3Rpb24gY2xlYXJBbGwoKSB7IHRpbWVycy5mb3JFYWNoKGNsZWFyVGltZW91dCk7IHRpbWVycyA9IFtdOyB9CgogICAgLy8gcGxhY2UgdGhlIGZha2UgY3Vyc29yIHJlbGF0aXZlIHRvIGEgdGFyZ2V0IGVsZW1lbnQgaW5zaWRlIHRoZSB3aW5kb3cKICAgIGZ1bmN0aW9uIGN1cnNvclRvKHRhcmdldCwgb2ZmWCwgb2ZmWSkgewogICAgICB2YXIgd1JlY3QgPSBkb20ud2luZG93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB2YXIgdFJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHZhciB4ID0gdFJlY3QubGVmdCAtIHdSZWN0LmxlZnQgKyAob2ZmWCA9PSBudWxsID8gdFJlY3Qud2lkdGggLyAyIDogb2ZmWCk7CiAgICAgIHZhciB5ID0gdFJlY3QudG9wIC0gd1JlY3QudG9wICsgKG9mZlkgPT0gbnVsbCA\/IHRSZWN0LmhlaWdodCAvIDIgOiBvZmZZKTsKICAgICAgZG9tLmN1cnNvci5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICBkb20uY3Vyc29yLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGUoIiArIHggKyAicHgsIiArIHkgKyAicHgpIjsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFN0ZXAodGV4dCwgbGl2ZSkgewogICAgICBkb20uc3RlcC50ZXh0Q29udGVudCA9IHRleHQ7CiAgICAgIGRvbS5zdGVwLmNsYXNzTGlzdC50b2dnbGUoImlzLWxpdmUiLCAhIWxpdmUpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICBkb20udHlwZWQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgZG9tLnBsYWNlaG9sZGVyLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIGRvbS5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1mb2N1cyIsICJpcy10eXBpbmciKTsKICAgICAgZG9tLnRyeUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJpcy1wcmVzcyIpOwogICAgICBkb20udHJ5QnRuLmNsYXNzTGlzdC5hZGQoImlzLXB1bHNlIik7CiAgICAgIGRvbS5zdWJtaXQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtcmVhZHkiLCAiaXMtcHJlc3MiKTsKICAgICAgZG9tLnNwaW5uZXIuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb24iKTsKICAgICAgZG9tLm91dHB1dC5jbGFzc0xpc3QucmVtb3ZlKCJpcy1vbiIpOwogICAgICBkb20uY3Vyc29yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIGRvbS5jdXJzb3Iuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgyMHB4LDIwcHgpIjsKICAgICAgc2V0U3RlcCgiUmVhZHkiLCBmYWxzZSk7CiAgICB9CgogICAgZnVuY3Rpb24gdHlwZUlucHV0KGRvbmUpIHsKICAgICAgdmFyIHRleHQgPSBjZmcudHlwZWQsIGkgPSAwOwogICAgICBkb20uaW5wdXQuY2xhc3NMaXN0LmFkZCgiaXMtdHlwaW5nIik7CiAgICAgIChmdW5jdGlvbiB0aWNrKCkgewogICAgICAgIGlmIChpID4gdGV4dC5sZW5ndGgpIHsKICAgICAgICAgIGRvbS5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCJpcy10eXBpbmciKTsKICAgICAgICAgIHJldHVybiBkb25lKCk7CiAgICAgICAgfQogICAgICAgIGRvbS50eXBlZC50ZXh0Q29udGVudCA9IHRleHQuc2xpY2UoMCwgaSk7CiAgICAgICAgaSsrOwogICAgICAgIC8vIHZhcnkgY2FkZW5jZSBhIHRvdWNoIGZvciBhIGh1bWFuIGZlZWwKICAgICAgICB0aW1lcnMucHVzaChzZXRUaW1lb3V0KHRpY2ssIDI2ICsgKHRleHRbaV0gPT09ICJcbiIgPyAxMjAgOiAwKSkpOwogICAgICB9KSgpOwogICAgfQoKICAgIGZ1bmN0aW9uIGN5Y2xlKCkgewogICAgICByZXNldCgpOwoKICAgICAgLy8gMS4gc2hvdyBjdXJzb3IsIGRyaWZ0IHRvd2FyZCB0aGUgVHJ5IG1lIGJ1dHRvbgogICAgICBhdCg3MDAsIGZ1bmN0aW9uICgpIHsgY3Vyc29yVG8oZG9tLnRyeUJ0bik7IHNldFN0ZXAoIlRyeSBtZSIsIHRydWUpOyB9KTsKCiAgICAgIC8vIDIuIGNsaWNrIFRyeSBtZQogICAgICBhdCgxNTUwLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9tLnRyeUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJpcy1wdWxzZSIpOwogICAgICAgIGRvbS50cnlCdG4uY2xhc3NMaXN0LmFkZCgiaXMtcHJlc3MiKTsKICAgICAgfSk7CiAgICAgIGF0KDE3NTAsIGZ1bmN0aW9uICgpIHsgZG9tLnRyeUJ0bi5jbGFzc0xpc3QucmVtb3ZlKCJpcy1wcmVzcyIpOyB9KTsKCiAgICAgIC8vIDMuIGZvY3VzICsgdHlwZSB0aGUgc2FtcGxlIGlucHV0CiAgICAgIGF0KDE4NTAsIGZ1bmN0aW9uICgpIHsKICAgICAgICBkb20uaW5wdXQuY2xhc3NMaXN0LmFkZCgiaXMtZm9jdXMiKTsKICAgICAgICBkb20ucGxhY2Vob2xkZXIuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICBzZXRTdGVwKCJMb2FkaW5nIGV4YW1wbGUiLCB0cnVlKTsKICAgICAgICBjdXJzb3JUbyhkb20uaW5wdXQsIDMwLCAyMCk7CiAgICAgIH0pOwogICAgICBhdCgyMDUwLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgdHlwZUlucHV0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIDQuIGFybSArIG1vdmUgdG8gUnVuCiAgICAgICAgICBkb20uc3VibWl0LmNsYXNzTGlzdC5hZGQoImlzLXJlYWR5Iik7CiAgICAgICAgICBzZXRTdGVwKCJSZWFkeSB0byBydW4iLCB0cnVlKTsKICAgICAgICAgIGN1cnNvclRvKGRvbS5zdWJtaXQpOwogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIC8vIDUuIGNsaWNrIFJ1biAgKHRpbWVkIGFmdGVyIHR5cGluZyB+Mi42cyBvZiBjb250ZW50KQogICAgICBhdCg1MjAwLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9tLnN1Ym1pdC5jbGFzc0xpc3QuYWRkKCJpcy1wcmVzcyIpOwogICAgICB9KTsKICAgICAgYXQoNTQwMCwgZnVuY3Rpb24gKCkgewogICAgICAgIGRvbS5zdWJtaXQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtcHJlc3MiKTsKICAgICAgICBkb20uc3Bpbm5lci5jbGFzc0xpc3QuYWRkKCJpcy1vbiIpOwogICAgICAgIGRvbS5jdXJzb3Iuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICBzZXRTdGVwKCJSZXNvbHZpbmcuLi4iLCB0cnVlKTsKICAgICAgfSk7CgogICAgICAvLyA2LiByZXZlYWwgcmVzdWx0cwogICAgICBhdCg2NjAwLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgZG9tLnNwaW5uZXIuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb24iKTsKICAgICAgICBkb20ub3V0cHV0LmNsYXNzTGlzdC5hZGQoImlzLW9uIik7CiAgICAgICAgc2V0U3RlcCgiRG9uZSIsIHRydWUpOwogICAgICB9KTsKCiAgICAgIC8vIDcuIGhvbGQsIHRoZW4gbG9vcAogICAgICBhdCgxMTAwMCwgY3ljbGUpOwogICAgfQoKICAgIC8vIHJlZHVjZWQtbW90aW9uOiBzaG93IHRoZSBmaW5pc2hlZCBzdGF0ZSwgc2tpcCB0aGUgY2hvcmVvZ3JhcGh5CiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEgJiYKICAgICAgICB3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzKSB7CiAgICAgIGRvbS5wbGFjZWhvbGRlci5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICBkb20udHlwZWQudGV4dENvbnRlbnQgPSBjZmcudHlwZWQ7CiAgICAgIGRvbS5pbnB1dC5jbGFzc0xpc3QuYWRkKCJpcy1mb2N1cyIpOwogICAgICBkb20uc3VibWl0LmNsYXNzTGlzdC5hZGQoImlzLXJlYWR5Iik7CiAgICAgIGRvbS5vdXRwdXQuY2xhc3NMaXN0LmFkZCgiaXMtb24iKTsKICAgICAgc2V0U3RlcCgiRG9uZSIsIHRydWUpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gb25seSBhbmltYXRlIHdoaWxlIHZpc2libGUgKHNhdmVzIENQVSBvbiBsb25nIHBhZ2VzKQogICAgaWYgKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIgaW4gd2luZG93KSB7CiAgICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykgewogICAgICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgaWYgKGUuaXNJbnRlcnNlY3RpbmcpIHsgY2xlYXJBbGwoKTsgY3ljbGUoKTsgfQogICAgICAgICAgZWxzZSB7IGNsZWFyQWxsKCk7IH0KICAgICAgICB9KTsKICAgICAgfSwgeyB0aHJlc2hvbGQ6IDAuMzUgfSk7CiAgICAgIGlvLm9ic2VydmUoZG9tLnJvb3QpOwogICAgfSBlbHNlIHsKICAgICAgY3ljbGUoKTsKICAgIH0KICB9CgogIC8qIC0tLS0gYm9vdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogIGZ1bmN0aW9uIGluaXQoKSB7CiAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuYnRkW2RhdGEtdG9vbF0iKTsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobm9kZXMsIGZ1bmN0aW9uIChlbCkgewogICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWJ0ZC1pbml0IikpIHJldHVybjsKICAgICAgdmFyIGNmZyA9IFRPT0xTWyhlbC5nZXRBdHRyaWJ1dGUoImRhdGEtdG9vbCIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpXTsKICAgICAgaWYgKCFjZmcpIHJldHVybjsKICAgICAgZWwuc2V0QXR0cmlidXRlKCJkYXRhLWJ0ZC1pbml0IiwgIjEiKTsKICAgICAgcnVuKGJ1aWxkKGVsLCBjZmcpLCBjZmcpOwogICAgfSk7CiAgfQoKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImxvYWRpbmciKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdCk7CiAgfSBlbHNlIHsKICAgIGluaXQoKTsKICB9Cn0pKCk7Cg==\");document.body.appendChild(s);}catch(e){if(window.console)console.error(\"btd boot\",e);}})();<\/script><\/p>\n<h2>Access the GNRS<\/h2>\n<ul>\n<li><a href=\"https:\/\/gnrs.biendata.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">GNRS web interface<\/a> &mdash; for non-programmers.<\/li>\n<li><a href=\"http:\/\/bien.nceas.ucsb.edu\/bien\/tools\/gnrs\/gnrs-api\/\">GNRS API<\/a> &mdash; programmatic access.<\/li>\n<li><a href=\"https:\/\/github.com\/EnquistLab\/RGNRS\" target=\"_blank\" rel=\"noopener noreferrer\">GNRS R package<\/a> &mdash; from within R.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf0e GNRS Geographic Name Resolution Service The Geographic Name Resolution Service (GNRS) resolves political division names and codes using the GeoNames database of geographic place names, indexing them against political-division spatial objects in the Natural Earth and Global Administrative Areas (GADM) databases. Among other uses, this enables what we call &ldquo;political geovalidation&rdquo; of species observations: [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":93,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"class_list":["post-3184","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/pages\/3184"}],"collection":[{"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/comments?post=3184"}],"version-history":[{"count":68,"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/pages\/3184\/revisions"}],"predecessor-version":[{"id":3972,"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/pages\/3184\/revisions\/3972"}],"up":[{"embeddable":true,"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/pages\/93"}],"wp:attachment":[{"href":"https:\/\/bien.nceas.ucsb.edu\/bien\/wp-json\/wp\/v2\/media?parent=3184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}