-
Notifications
You must be signed in to change notification settings - Fork 0
/
to-do-map.html
22 lines (21 loc) · 749 KB
/
to-do-map.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgfTsKCiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgcmVzaXplIGlmIGJpbmRpbmdEZWYgaW1wbGVtZW50cyBpdAogICAgICBpZiAoYmluZGluZ0RlZi5yZXNpemUpIHsKICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICAgIC8vIFNoaW55IGNhbiBjYWxsIHJlc2l6ZSBiZWZvcmUgaW5pdGlhbGl6ZS9yZW5kZXJWYWx1ZSBoYXZlIGJlZW4KICAgICAgICAgIC8vIGNhbGxlZCwgd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlIGZvciB3aWRnZXRzLgogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgICBiaW5kaW5nRGVmLnJlc2l6ZShlbCwgd2lkdGgsIGhlaWdodCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CgogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7CiAgICB9CiAgfTsKCiAgdmFyIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgZnVuY3Rpb24gc2NoZWR1bGVTdGF0aWNSZW5kZXIoKSB7CiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgewogICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IG51bGw7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9LCAxKTsKICAgIH0KICB9CgogIC8vIFJlbmRlciBzdGF0aWMgd2lkZ2V0cyBhZnRlciB0aGUgZG9jdW1lbnQgZmluaXNoZXMgbG9hZGluZwogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzCiAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGJpbmRpbmdzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107CiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7CiAgICAgIHZhciBtYXRjaGVzID0gYmluZGluZy5maW5kKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgIGZvckVhY2gobWF0Y2hlcywgZnVuY3Rpb24oZWwpIHsKICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOwoKICAgICAgICBpZiAoaGFzQ2xhc3MoZWwsICJodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBlbC5jbGFzc05hbWUgPSBlbC5jbGFzc05hbWUgKyAiIGh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCI7CgogICAgICAgIHZhciBpbml0UmVzdWx0OwogICAgICAgIGlmIChiaW5kaW5nLmluaXRpYWxpemUpIHsKICAgICAgICAgIGluaXRSZXN1bHQgPSBiaW5kaW5nLmluaXRpYWxpemUoZWwsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICk7CiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsKICAgICAgICAgIHZhciBsYXN0U2l6ZSA9IHt9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyBzaG93bi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgaW5pdFJlc3VsdCwgW2VsLCBkYXRhLnhdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCk7CiAgfQoKICAvLyBXYWl0IHVudGlsIGFmdGVyIHRoZSBkb2N1bWVudCBoYXMgbG9hZGVkIHRvIHJlbmRlciB0aGUgd2lkZ2V0cy4KICBpZiAoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgewogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgYXJndW1lbnRzLmNhbGxlZSwgZmFsc2UpOwogICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICB9LCBmYWxzZSk7CiAgfSBlbHNlIGlmIChkb2N1bWVudC5hdHRhY2hFdmVudCkgewogICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgIGRvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBhcmd1bWVudHMuY2FsbGVlKTsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRBdHRhY2htZW50VXJsID0gZnVuY3Rpb24oZGVwbmFtZSwga2V5KSB7CiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0KICAgIGlmICh0eXBlb2Yoa2V5KSA9PT0gInVuZGVmaW5lZCIpCiAgICAgIGtleSA9IDE7CgogICAgdmFyIGxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZXBuYW1lICsgIi0iICsga2V5ICsgIi1hdHRhY2htZW50Iik7CiAgICBpZiAoIWxpbmspIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsKICAgIH0KICAgIHJldHVybiBsaW5rLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5kYXRhZnJhbWVUb0QzID0gZnVuY3Rpb24oZGYpIHsKICAgIHZhciBuYW1lcyA9IFtdOwogICAgdmFyIGxlbmd0aDsKICAgIGZvciAodmFyIG5hbWUgaW4gZGYpIHsKICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgIG5hbWVzLnB1c2gobmFtZSk7CiAgICAgICAgaWYgKHR5cGVvZihkZltuYW1lXSkgIT09ICJvYmplY3QiIHx8IHR5cGVvZihkZltuYW1lXS5sZW5ndGgpID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZihsZW5ndGgpICE9PSAidW5kZWZpbmVkIiAmJiBsZW5ndGggIT09IGRmW25hbWVdLmxlbmd0aCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIik7CiAgICAgICAgfQogICAgICAgIGxlbmd0aCA9IGRmW25hbWVdLmxlbmd0aDsKICAgIH0KICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgaXRlbTsKICAgIGZvciAodmFyIHJvdyA9IDA7IHJvdyA8IGxlbmd0aDsgcm93KyspIHsKICAgICAgICBpdGVtID0ge307CiAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgbmFtZXMubGVuZ3RoOyBjb2wrKykgewogICAgICAgICAgICBpdGVtW25hbWVzW2NvbF1dID0gZGZbbmFtZXNbY29sXV1bcm93XTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfTsKCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgewogICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gYXJyYXk7CiAgICAgIHZhciBuZXdBcnJheSA9IGFycmF5WzBdLm1hcChmdW5jdGlvbihjb2wsIGkpIHsKICAgICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24ocm93KSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJvd1tpXQogICAgICAgICAgfSkKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXdBcnJheTsKICB9OwogIC8vIFNwbGl0IHZhbHVlIGF0IHNwbGl0Q2hhciwgYnV0IGFsbG93IHNwbGl0Q2hhciB0byBiZSBlc2NhcGVkCiAgLy8gdXNpbmcgZXNjYXBlQ2hhci4gQW55IG90aGVyIGNoYXJhY3RlcnMgZXNjYXBlZCBieSBlc2NhcGVDaGFyCiAgLy8gd2lsbCBiZSBpbmNsdWRlZCBhcyB1c3VhbCAoaW5jbHVkaW5nIGVzY2FwZUNoYXIgaXRzZWxmKS4KICBmdW5jdGlvbiBzcGxpdFdpdGhFc2NhcGUodmFsdWUsIHNwbGl0Q2hhciwgZXNjYXBlQ2hhcikgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHZhciBlc2NhcGVNb2RlID0gZmFsc2U7CiAgICB2YXIgY3VycmVudFJlc3VsdCA9ICIiOwogICAgZm9yICh2YXIgcG9zID0gMDsgcG9zIDwgdmFsdWUubGVuZ3RoOyBwb3MrKykgewogICAgICBpZiAoIWVzY2FwZU1vZGUpIHsKICAgICAgICBpZiAodmFsdWVbcG9zXSA9PT0gc3BsaXRDaGFyKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7CiAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gIiI7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtwb3NdID09PSBlc2NhcGVDaGFyKSB7CiAgICAgICAgICBlc2NhcGVNb2RlID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107CiAgICAgICAgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoY3VycmVudFJlc3VsdCAhPT0gIiIpIHsKICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQogIC8vIEZ1bmN0aW9uIGF1dGhvcmVkIGJ5IFlpaHVpL0pKIEFsbGFpcmUKICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIgPSBmdW5jdGlvbihvLCBtZW1iZXIpIHsKICAgIHZhciBwYXJ0cyA9IHNwbGl0V2l0aEVzY2FwZShtZW1iZXIsICcuJywgJ1xcJyk7CiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICB2YXIgcGFydCA9IHBhcnRzW2ldOwogICAgICAvLyBwYXJ0IG1heSBiZSBhIGNoYXJhY3RlciBvciAnbnVtZXJpYycgbWVtYmVyIG5hbWUKICAgICAgaWYgKG8gIT09IG51bGwgJiYgdHlwZW9mIG8gPT09ICJvYmplY3QiICYmIHBhcnQgaW4gbykgewogICAgICAgIGlmIChpID09IChsIC0gMSkpIHsgLy8gaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgdGhlbiBldmFsdWxhdGUKICAgICAgICAgIGlmICh0eXBlb2Ygb1twYXJ0XSA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIG9bcGFydF0gPSBldmFsKCIoIiArIG9bcGFydF0gKyAiKSIpOwogICAgICAgIH0gZWxzZSB7IC8vIG90aGVyd2lzZSBjb250aW51ZSB0byBuZXh0IGVtYmVkZGVkIG9iamVjdAogICAgICAgICAgbyA9IG9bcGFydF07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gUmV0cmlldmUgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZiBhbgogIC8vIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIGFuIGVsZW1lbnQsIG9yIG51bGwgaWYgbm9uZS4KICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbihlbCkgewogICAgcmV0dXJuIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKTsKICB9OwoKICAvLyBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciwKICAvLyBhbmQgcmV0dXJucyB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbGVtZW50LCBpZiBhbnkuIElmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUKICAvLyBzZWxlY3Rvciwgb3IgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgaGFzIG5vIEhUTUxXaWRnZXQKICAvLyBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggaXQsIHRoZW4gbnVsbCBpcyByZXR1cm5lZC4KICAvLwogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4KICB3aW5kb3cuSFRNTFdpZGdldHMuZmluZCA9IGZ1bmN0aW9uKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICBzZWxlY3RvciA9IHNjb3BlOwogICAgICBzY29wZSA9IGRvY3VtZW50OwogICAgfQoKICAgIHZhciBlbCA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgaWYgKGVsID09PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShlbCk7CiAgICB9CiAgfTsKCiAgLy8gRmluZHMgYWxsIGVsZW1lbnRzIGluIHRoZSBzY29wZSB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciwgYW5kCiAgLy8gcmV0dXJucyB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZXMgKGkuZS4gdGhlIHJldHVybiB2YWx1ZXMgb2YKICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudHMsIGluIGFuIGFycmF5LiBJZiBlbGVtZW50cyB0aGF0CiAgLy8gbWF0Y2ggdGhlIHNlbGVjdG9yIGRvbid0IGhhdmUgYW4gYXNzb2NpYXRlZCBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gbnVsbHMuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmRBbGwgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgbm9kZXMgPSBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKICAgIHZhciByZXN1bHRzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdHMucHVzaCh3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2Uobm9kZXNbaV0pKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHZhciBwb3N0UmVuZGVySGFuZGxlcnMgPSBbXTsKICBmdW5jdGlvbiBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKSB7CiAgICB3aGlsZSAocG9zdFJlbmRlckhhbmRsZXJzLmxlbmd0aCkgewogICAgICB2YXIgaGFuZGxlciA9IHBvc3RSZW5kZXJIYW5kbGVycy5zaGlmdCgpOwogICAgICBpZiAoaGFuZGxlcikgewogICAgICAgIGhhbmRsZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gUmVnaXN0ZXIgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlCiAgLy8gbmV4dCB0aW1lIHN0YXRpYyB3aWRnZXRzIGFyZSByZW5kZXJlZC4KICB3aW5kb3cuSFRNTFdpZGdldHMuYWRkUG9zdFJlbmRlckhhbmRsZXIgPSBmdW5jdGlvbihjYWxsYmFjaykgewogICAgcG9zdFJlbmRlckhhbmRsZXJzLnB1c2goY2FsbGJhY2spOwogIH07CgogIC8vIFRha2VzIGEgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb24sIGFuZCByZXR1cm5zIGFuCiAgLy8gb2xkLXN0eWxlIGNsYXNzLWJvdW5kIGRlZmluaXRpb24uIFRoaXMgc2F2ZXMgdXMgZnJvbSBoYXZpbmcKICAvLyB0byByZXdyaXRlIGFsbCB0aGUgbG9naWMgaW4gdGhpcyBmaWxlIHRvIGFjY29tb2RhdGUgYm90aAogIC8vIHR5cGVzIG9mIGRlZmluaXRpb25zLgogIGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZm4pIHsKICAgIHZhciByZXN1bHQgPSB7CiAgICAgIG5hbWU6IGRlZm4ubmFtZSwKICAgICAgdHlwZTogZGVmbi50eXBlLAogICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgIHJldHVybiBkZWZuLmZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpOwogICAgICB9LAogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24oZWwsIHgsIGluc3RhbmNlKSB7CiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbmRlclZhbHVlKHgpOwogICAgICB9LAogICAgICByZXNpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZXNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgIH0KICAgIH07CgogICAgaWYgKGRlZm4uZmluZCkKICAgICAgcmVzdWx0LmZpbmQgPSBkZWZuLmZpbmQ7CiAgICBpZiAoZGVmbi5yZW5kZXJFcnJvcikKICAgICAgcmVzdWx0LnJlbmRlckVycm9yID0gZGVmbi5yZW5kZXJFcnJvcjsKICAgIGlmIChkZWZuLmNsZWFyRXJyb3IpCiAgICAgIHJlc3VsdC5jbGVhckVycm9yID0gZGVmbi5jbGVhckVycm9yOwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9KSgpOwoK"></script>
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMS4xIHwgKGMpIDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9IjEuMTEuMSIsbT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbS5mbi5pbml0KGEsYil9LG49L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLG89L14tbXMtLyxwPS8tKFtcZGEtel0pL2dpLHE9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTttLmZuPW0ucHJvdG90eXBlPXtqcXVlcnk6bCxjb25zdHJ1Y3RvcjptLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTpkLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1tLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZWFjaCh0aGlzLGEsYil9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubGVuZ3RoLGM9K2ErKDA+YT9iOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhjPj0wJiZiPmM/W3RoaXNbY11dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbS5leHRlbmQ9bS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG0uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihtLmlzUGxhaW5PYmplY3QoYyl8fChiPW0uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbS5pc0FycmF5KGEpP2E6W10pOmY9YSYmbS5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1tLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbS5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKGwrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW0udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bS50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4hbS5pc0FycmF5KGEpJiZhLXBhcnNlRmxvYXQoYSk+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1tLnR5cGUoYSl8fGEubm9kZVR5cGV8fG0uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFqLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKGsub3duTGFzdClmb3IoYiBpbiBhKXJldHVybiBqLmNhbGwoYSxiKTtmb3IoYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ai5jYWxsKGEsYil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2hbaS5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmbS50cmltKGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKG8sIm1zLSIpLnJlcGxhY2UocCxxKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPTAsZj1hLmxlbmd0aCxnPXIoYSk7aWYoYyl7aWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgaWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocihPYmplY3QoYSkpP20ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmYuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihnKXJldHVybiBnLmNhbGwoYixhLGMpO2ZvcihkPWIubGVuZ3RoLGM9Yz8wPmM/TWF0aC5tYXgoMCxkK2MpOmM6MDtkPmM7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO3doaWxlKGM+ZClhW2UrK109YltkKytdO2lmKGMhPT1jKXdoaWxlKHZvaWQgMCE9PWJbZF0pYVtlKytdPWJbZCsrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj0wLGc9YS5sZW5ndGgsaD1yKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7ZWxzZSBmb3IoZiBpbiBhKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO3JldHVybiBlLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoZj1hW2JdLGI9YSxhPWYpLG0uaXNGdW5jdGlvbihhKT8oYz1kLmNhbGwoYXJndW1lbnRzLDIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGMuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGUuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxtLmd1aWQrKyxlKTp2b2lkIDB9LG5vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sc3VwcG9ydDprfSksbS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiByKGEpe3ZhciBiPWEubGVuZ3RoLGM9bS50eXBlKGEpO3JldHVybiJmdW5jdGlvbiI9PT1jfHxtLmlzV2luZG93KGEpPyExOjE9PT1hLm5vZGVUeXBlJiZiPyEwOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciBzPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrLW5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2IoKSx6PWdiKCksQT1nYigpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPSJ1bmRlZmluZWQiLEQ9MTw8MzEsRT17fS5oYXNPd25Qcm9wZXJ0eSxGPVtdLEc9Ri5wb3AsSD1GLnB1c2gsST1GLnB1c2gsSj1GLnNsaWNlLEs9Ri5pbmRleE9mfHxmdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09PWEpcmV0dXJuIGI7cmV0dXJuLTF9LEw9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixOPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTz1OLnJlcGxhY2UoInciLCJ3IyIpLFA9IlxcWyIrTSsiKigiK04rIikoPzoiK00rIiooWypeJHwhfl0/PSkiK00rIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitPKyIpKXwpIitNKyIqXFxdIixRPSI6KCIrTisiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrUCsiKSopfC4qKVxcKXwpIixSPW5ldyBSZWdFeHAoIl4iK00rIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTSsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPW5ldyBSZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKj8pIitNKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChRKSxXPW5ldyBSZWdFeHAoIl4iK08rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK04rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1EpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0wrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYj0vWyt+XS8sYmI9Lyd8XFwvZyxjYj1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksZGI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9O3RyeXtJLmFwcGx5KEY9Si5jYWxsKHYuY2hpbGROb2Rlcyksdi5jaGlsZE5vZGVzKSxGW3YuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGViKXtJPXthcHBseTpGLmxlbmd0aD9mdW5jdGlvbihhLGIpe0guYXBwbHkoYSxKLmNhbGwoYikpfTpmdW5jdGlvbihhLGIpe3ZhciBjPWEubGVuZ3RoLGQ9MDt3aGlsZShhW2MrK109YltkKytdKTthLmxlbmd0aD1jLTF9fX1mdW5jdGlvbiBmYihhLGIsZCxlKXt2YXIgZixoLGosayxsLG8scixzLHcseDtpZigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixkPWR8fFtdLCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIGQ7aWYoMSE9PShrPWIubm9kZVR5cGUpJiY5IT09aylyZXR1cm5bXTtpZihwJiYhZSl7aWYoZj1fLmV4ZWMoYSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1iLmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lmKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChiLGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBJLmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTk9PT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYiwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3FiKG9bbF0pO3c9YWIudGVzdChhKSYmb2IoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBJLmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdiKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBoYihhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGliKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamIoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2IoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEQpLSh+YS5zb3VyY2VJbmRleHx8RCk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIGxiKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG1iKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYihhKXtyZXR1cm4gaGIoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaGIoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYihhKXtyZXR1cm4gYSYmdHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1DJiZhfWM9ZmIuc3VwcG9ydD17fSxmPWZiLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWZiLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGU9YT9hLm93bmVyRG9jdW1lbnR8fGE6dixnPWUuZGVmYXVsdFZpZXc7cmV0dXJuIGUhPT1uJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQ/KG49ZSxvPWUuZG9jdW1lbnRFbGVtZW50LHA9IWYoZSksZyYmZyE9PWcudG9wJiYoZy5hZGRFdmVudExpc3RlbmVyP2cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixmdW5jdGlvbigpe20oKX0sITEpOmcuYXR0YWNoRXZlbnQmJmcuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe20oKX0pKSxjLmF0dHJpYnV0ZXM9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYihmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmaWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsYS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLGMuZ2V0QnlJZD1pYihmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFlLmdldEVsZW1lbnRzQnlOYW1lfHwhZS5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09QyYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYyYmYy5wYXJlbnROb2RlP1tjXTpbXX19LGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYixkYik7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNiLGRiKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9PUMmJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYyYmYy52YWx1ZT09PWJ9fSksZC5maW5kLlRBRz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Qz9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoIioiPT09YSl7d2hpbGUoYz1mW2UrK10pMT09PWMubm9kZVR5cGUmJmQucHVzaChjKTtyZXR1cm4gZH1yZXR1cm4gZn0sZC5maW5kLkNMQVNTPWMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oYSxiKXtyZXR1cm4gdHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PUMmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYihmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdCBtc2FsbG93Y2xpcD0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NsaXBePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK0wrIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIil9KSxpYihmdW5jdGlvbihhKXt2YXIgYj1lLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK00rIipbKl4kfCF+XT89IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEucHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj0kLnRlc3Qocz1vLm1hdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxlY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmliKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRpdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixRKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9JC50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8JC50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09ZXx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1lfHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGY9YS5wYXJlbnROb2RlLGc9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFmfHwhZylyZXR1cm4gYT09PWU/LTE6Yj09PWU/MTpmPy0xOmc/MTprP0suY2FsbChrLGEpLUsuY2FsbChrLGIpOjA7aWYoZj09PWcpcmV0dXJuIGtiKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0KGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9rYihoW2RdLGlbZF0pOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZSk6bn0sZmIubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYihhLG51bGwsbnVsbCxiKX0sZmIubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVjdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBmYihiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYi5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGZiLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZFLmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYi5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGZiLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1mYi5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmIuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGIsbWF0Y2g6WCxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGNiLGRiKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShjYixkYiksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZiLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmZiLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2IsZGIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2ErIigiK00rInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PUMmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZiLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtpZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJdLGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2FdPVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlbYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkpW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09PTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aGIoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUsuY2FsbChhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDpoYihmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aGIoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksIWMucG9wKCl9fSksaGFzOmhiKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmIoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYihmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aGIoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8fGZiLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNiLGRiKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYihmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmIoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm5iKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmIoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om5iKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYihiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYihiKTtmdW5jdGlvbiBwYigpe31wYi5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHBiLGc9ZmIudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZiLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcWIoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYihhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gc2IoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdGIoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylmYihhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdWIoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4gZ31mdW5jdGlvbiB2YihhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD12YihkKSksZSYmIWVbdV0mJihlPXZiKGUsZikpLGhiKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHRiKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnViKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj11YihyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihqPWU/Sy5jYWxsKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj11YihyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SS5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2IoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYihmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9cmIoZnVuY3Rpb24oYSl7cmV0dXJuIEsuY2FsbChiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7cmV0dXJuIWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSl9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JiKHNiKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB2YihpPjEmJnNiKG0pLGk+MSYmcWIoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShSLCIkMSIpLGMsZT5pJiZ3YihhLnNsaWNlKGksZSkpLGY+ZSYmd2IoYT1hLnNsaWNlKGUpKSxmPmUmJnFiKGEpKX1tLnB1c2goYyl9cmV0dXJuIHNiKG0pfWZ1bmN0aW9uIHhiKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtdLHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1hdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtxIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1hW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYoKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXttPTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUocS0tKXJbcV18fHNbcV18fChzW3FdPUcuY2FsbChpKSk7cz11YihzKX1JLmFwcGx5KGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZmIudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2hiKGYpOmZ9cmV0dXJuIGg9ZmIuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXdiKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx4YihlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9ZmIuc2VsZWN0PWZ1bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYixkYiksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNiLGRiKSxhYi50ZXN0KGpbMF0udHlwZSkmJm9iKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYihqKSwhYSlyZXR1cm4gSS5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYi50ZXN0KGEpJiZvYihiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWIoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGpiKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmliKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGpiKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGliKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYihMLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYn0oYSk7bS5maW5kPXMsbS5leHByPXMuc2VsZWN0b3JzLG0uZXhwclsiOiJdPW0uZXhwci5wc2V1ZG9zLG0udW5pcXVlPXMudW5pcXVlU29ydCxtLnRleHQ9cy5nZXRUZXh0LG0uaXNYTUxEb2M9cy5pc1hNTCxtLmNvbnRhaW5zPXMuY29udGFpbnM7dmFyIHQ9bS5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx1PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdj0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHcoYSxiLGMpe2lmKG0uaXNGdW5jdGlvbihiKSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbS5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYodi50ZXN0KGIpKXJldHVybiBtLmZpbHRlcihiLGEsYyk7Yj1tLmZpbHRlcihiLGEpfXJldHVybiBtLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gbS5pbkFycmF5KGEsYik+PTAhPT1jfSl9bS5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bS5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTptLmZpbmQubWF0Y2hlcyhhLG0uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbS5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkPXRoaXMsZT1kLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG0oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtlPmI7YisrKWlmKG0uY29udGFpbnMoZFtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2U+YjtiKyspbS5maW5kKGEsZFtiXSxjKTtyZXR1cm4gYz10aGlzLnB1c2hTdGFjayhlPjE/bS51bmlxdWUoYyk6YyksYy5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxjfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHcodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXcodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnQudGVzdChhKT9tKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHgseT1hLmRvY3VtZW50LHo9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxBPW0uZm4uaW5pdD1mdW5jdGlvbihhLGIpe3ZhciBjLGQ7aWYoIWEpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBhKXtpZihjPSI8Ij09PWEuY2hhckF0KDApJiYiPiI9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eCkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2YgbT9iWzBdOmIsbS5tZXJnZSh0aGlzLG0ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6eSwhMCkpLHUudGVzdChjWzFdKSYmbS5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbS5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9aWYoZD15LmdldEVsZW1lbnRCeUlkKGNbMl0pLGQmJmQucGFyZW50Tm9kZSl7aWYoZC5pZCE9PWNbMl0pcmV0dXJuIHguZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZH1yZXR1cm4gdGhpcy5jb250ZXh0PXksdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTptLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB4LnJlYWR5P3gucmVhZHkoYSk6YShtKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxtLm1ha2VBcnJheShhLHRoaXMpKX07QS5wcm90b3R5cGU9bS5mbix4PW0oeSk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTttLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPWFbYl07d2hpbGUoZSYmOSE9PWUubm9kZVR5cGUmJih2b2lkIDA9PT1jfHwxIT09ZS5ub2RlVHlwZXx8IW0oZSkuaXMoYykpKTE9PT1lLm5vZGVUeXBlJiZkLnB1c2goZSksZT1lW2JdO3JldHVybiBkfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRTaWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pLG0uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1tKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2Q+YjtiKyspaWYobS5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXQudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP20oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm0uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9tLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP20uaW5BcnJheSh0aGlzWzBdLG0oYSkpOm0uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobS51bmlxdWUobS5tZXJnZSh0aGlzLmdldCgpLG0oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe2RvIGE9YVtiXTt3aGlsZShhJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bS5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBtLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBtLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBtLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDptLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe20uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1tLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW0uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHwoZT1tLnVuaXF1ZShlKSksQi50ZXN0KGEpJiYoZT1lLnJldmVyc2UoKSkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBFPS9cUysvZyxGPXt9O2Z1bmN0aW9uIEcoYSl7dmFyIGI9RlthXT17fTtyZXR1cm4gbS5lYWNoKGEubWF0Y2goRSl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bS5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/RlthXXx8RyhhKTptLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmLGcsaD1bXSxpPSFhLm9uY2UmJltdLGo9ZnVuY3Rpb24obCl7Zm9yKGM9YS5tZW1vcnkmJmwsZD0hMCxmPWd8fDAsZz0wLGU9aC5sZW5ndGgsYj0hMDtoJiZlPmY7ZisrKWlmKGhbZl0uYXBwbHkobFswXSxsWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlKXtjPSExO2JyZWFrfWI9ITEsaCYmKGk/aS5sZW5ndGgmJmooaS5zaGlmdCgpKTpjP2g9W106ay5kaXNhYmxlKCkpfSxrPXthZGQ6ZnVuY3Rpb24oKXtpZihoKXt2YXIgZD1oLmxlbmd0aDshZnVuY3Rpb24gZihiKXttLmVhY2goYixmdW5jdGlvbihiLGMpe3ZhciBkPW0udHlwZShjKTsiZnVuY3Rpb24iPT09ZD9hLnVuaXF1ZSYmay5oYXMoYyl8fGgucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1kJiZmKGMpfSl9KGFyZ3VtZW50cyksYj9lPWgubGVuZ3RoOmMmJihnPWQsaihjKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBoJiZtLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYyl7dmFyIGQ7d2hpbGUoKGQ9bS5pbkFycmF5KGMsaCxkKSk+LTEpaC5zcGxpY2UoZCwxKSxiJiYoZT49ZCYmZS0tLGY+PWQmJmYtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bS5pbkFycmF5KGEsaCk+LTE6ISghaHx8IWgubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxlPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBoPWk9Yz12b2lkIDAsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haH0sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPXZvaWQgMCxjfHxrLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4haHx8ZCYmIWl8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sYj9pLnB1c2goYyk6aihjKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBrLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBrfSxtLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG0uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbS5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBtLkRlZmVycmVkKGZ1bmN0aW9uKGMpe20uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bS5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZtLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP20uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbS5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1kLmNhbGwoYXJndW1lbnRzKSxlPWMubGVuZ3RoLGY9MSE9PWV8fGEmJm0uaXNGdW5jdGlvbihhLnByb21pc2UpP2U6MCxnPTE9PT1mP2E6bS5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihlKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6ZSxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGU+MSlmb3IoaT1uZXcgQXJyYXkoZSksaj1uZXcgQXJyYXkoZSksaz1uZXcgQXJyYXkoZSk7ZT5iO2IrKyljW2JdJiZtLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsaixpKSk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEg7bS5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbS5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxtLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9tLnJlYWR5V2FpdCsrOm0ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXtpZihhPT09ITA/IS0tbS5yZWFkeVdhaXQ6IW0uaXNSZWFkeSl7aWYoIXkuYm9keSlyZXR1cm4gc2V0VGltZW91dChtLnJlYWR5KTttLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW0ucmVhZHlXYWl0PjB8fChILnJlc29sdmVXaXRoKHksW21dKSxtLmZuLnRyaWdnZXJIYW5kbGVyJiYobSh5KS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxtKHkpLm9mZigicmVhZHkiKSkpfX19KTtmdW5jdGlvbiBJKCl7eS5hZGRFdmVudExpc3RlbmVyPyh5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEosITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSiwhMSkpOih5LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEopLGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsSikpfWZ1bmN0aW9uIEooKXsoeS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1ldmVudC50eXBlfHwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKSYmKEkoKSxtLnJlYWR5KCkpfW0ucmVhZHkucHJvbWlzZT1mdW5jdGlvbihiKXtpZighSClpZihIPW0uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09eS5yZWFkeVN0YXRlKXNldFRpbWVvdXQobS5yZWFkeSk7ZWxzZSBpZih5LmFkZEV2ZW50TGlzdGVuZXIpeS5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixKLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEosITEpO2Vsc2V7eS5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixKKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLEopO3ZhciBjPSExO3RyeXtjPW51bGw9PWEuZnJhbWVFbGVtZW50JiZ5LmRvY3VtZW50RWxlbWVudH1jYXRjaChkKXt9YyYmYy5kb1Njcm9sbCYmIWZ1bmN0aW9uIGUoKXtpZighbS5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGUsNTApfUkoKSxtLnJlYWR5KCl9fSgpfXJldHVybiBILnByb21pc2UoYil9O3ZhciBLPSJ1bmRlZmluZWQiLEw7Zm9yKEwgaW4gbShrKSlicmVhaztrLm93bkxhc3Q9IjAiIT09TCxrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsbShmdW5jdGlvbigpe3ZhciBhLGIsYyxkO2M9eS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGUmJihiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6aW5saW5lO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGsuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hPTM9PT1iLm9mZnNldFdpZHRoLGEmJihjLnN0eWxlLnpvb209MSkpLGMucmVtb3ZlQ2hpbGQoZCkpfSksZnVuY3Rpb24oKXt2YXIgYT15LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKG51bGw9PWsuZGVsZXRlRXhwYW5kbyl7ay5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2suZGVsZXRlRXhwYW5kbz0hMX19YT1udWxsfSgpLG0uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXt2YXIgYj1tLm5vRGF0YVsoYS5ub2RlTmFtZSsiICIpLnRvTG93ZXJDYXNlKCldLGM9K2Eubm9kZVR5cGV8fDE7cmV0dXJuIDEhPT1jJiY5IT09Yz8hMTohYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn07dmFyIE09L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxOPS8oW0EtWl0pL2c7ZnVuY3Rpb24gTyhhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE4sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpNLnRlc3QoYyk/bS5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bS5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwfXJldHVybiBjfWZ1bmN0aW9uIFAoYSl7dmFyIGI7Zm9yKGIgaW4gYSlpZigoImRhdGEiIT09Ynx8IW0uaXNFbXB0eU9iamVjdChhW2JdKSkmJiJ0b0pTT04iIT09YilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBRKGEsYixkLGUpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGYsZyxoPW0uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP20uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoOwppZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bS5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm0ubm9vcH0pLCgib2JqZWN0Ij09dHlwZW9mIGJ8fCJmdW5jdGlvbiI9PXR5cGVvZiBiKSYmKGU/altrXT1tLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1tLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbS5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbS5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFIoYSxiLGMpe2lmKG0uYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP20uY2FjaGU6YSxoPWY/YVttLmV4cGFuZG9dOm0uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bS5pc0FycmF5KGIpP2I9Yi5jb25jYXQobS5tYXAoYixtLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1tLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFQKGQpOiFtLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxQKGdbaF0pKSkmJihmP20uY2xlYW5EYXRhKFthXSwhMCk6ay5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPW51bGwpfX19bS5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP20uY2FjaGVbYVttLmV4cGFuZG9dXTphW20uZXhwYW5kb10sISFhJiYhUChhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFEoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFIoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBRKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUihhLGIsITApfX0pLG0uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bS5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbS5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW0uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLE8oZixkLGVbZF0pKSk7bS5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXttLmRhdGEodGhpcyxhLGIpfSk6Zj9PKGYsYSxtLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXttLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG0uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1tLl9kYXRhKGEsYiksYyYmKCFkfHxtLmlzQXJyYXkoYyk/ZD1tLl9kYXRhKGEsYixtLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW0ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bS5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXttLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbS5fZGF0YShhLGMpfHxtLl9kYXRhKGEsYyx7ZW1wdHk6bS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bS5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbS5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxtLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bS5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1tLnF1ZXVlKHRoaXMsYSxiKTttLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm0uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1tLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW0uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFM9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW0uY3NzKGEsImRpc3BsYXkiKXx8IW0uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxWPW0uYWNjZXNzPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1tLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYyltLmFjY2VzcyhhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxtLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobShhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxXPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYz15LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixrLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1iLmZpcnN0Q2hpbGQubm9kZVR5cGUsay50Ym9keT0hYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsay5odG1sU2VyaWFsaXplPSEhYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxrLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09eS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxhLnR5cGU9ImNoZWNrYm94IixhLmNoZWNrZWQ9ITAsYy5hcHBlbmRDaGlsZChhKSxrLmFwcGVuZENoZWNrZWQ9YS5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYy5hcHBlbmRDaGlsZChiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBjaGVja2VkPSdjaGVja2VkJyBuYW1lPSd0Jy8+IixrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsay5ub0Nsb25lRXZlbnQ9ITAsYi5hdHRhY2hFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7ay5ub0Nsb25lRXZlbnQ9ITF9KSxiLmNsb25lTm9kZSghMCkuY2xpY2soKSksbnVsbD09ay5kZWxldGVFeHBhbmRvKXtrLmRlbGV0ZUV4cGFuZG89ITA7dHJ5e2RlbGV0ZSBiLnRlc3R9Y2F0Y2goZCl7ay5kZWxldGVFeHBhbmRvPSExfX19KCksZnVuY3Rpb24oKXt2YXIgYixjLGQ9eS5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChrW2IrIkJ1YmJsZXMiXT1jIGluIGEpfHwoZC5zZXRBdHRyaWJ1dGUoYywidCIpLGtbYisiQnViYmxlcyJdPWQuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2Q9bnVsbH0oKTt2YXIgWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksWT0vXmtleS8sWj0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLywkPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxfPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gYWIoKXtyZXR1cm4hMH1mdW5jdGlvbiBiYigpe3JldHVybiExfWZ1bmN0aW9uIGNiKCl7dHJ5e3JldHVybiB5LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1tLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixvLHAscSxyPW0uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW0uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgbT09PUt8fGEmJm0uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDptLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9Xy5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bS5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW0uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm0uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChuPWdbb10pfHwobj1nW29dPVtdLG4uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP24uc3BsaWNlKG4uZGVsZWdhdGVDb3VudCsrLDAsbCk6bi5wdXNoKGwpLG0uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxuLG8scCxxLHI9bS5oYXNEYXRhKGEpJiZtLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9Xy5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1tLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbj1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW4ubGVuZ3RoO3doaWxlKGYtLSlnPW5bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChuLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm4uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFuLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG0ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW0uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bS5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG0uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLGwsbixvPVtkfHx5XSxwPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscT1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihoPWw9ZD1kfHx5LDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmISQudGVzdChwK20uZXZlbnQudHJpZ2dlcmVkKSYmKHAuaW5kZXhPZigiLiIpPj0wJiYocT1wLnNwbGl0KCIuIikscD1xLnNoaWZ0KCkscS5zb3J0KCkpLGc9cC5pbmRleE9mKCI6Iik8MCYmIm9uIitwLGI9YlttLmV4cGFuZG9dP2I6bmV3IG0uRXZlbnQocCwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXEuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Euam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm0ubWFrZUFycmF5KGMsW2JdKSxrPW0uZXZlbnQuc3BlY2lhbFtwXXx8e30sZXx8IWsudHJpZ2dlcnx8ay50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhay5ub0J1YmJsZSYmIW0uaXNXaW5kb3coZCkpe2ZvcihpPWsuZGVsZWdhdGVUeXBlfHxwLCQudGVzdChpK3ApfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpby5wdXNoKGgpLGw9aDtsPT09KGQub3duZXJEb2N1bWVudHx8eSkmJm8ucHVzaChsLmRlZmF1bHRWaWV3fHxsLnBhcmVudFdpbmRvd3x8YSl9bj0wO3doaWxlKChoPW9bbisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW4+MT9pOmsuYmluZFR5cGV8fHAsZj0obS5fZGF0YShoLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm0uX2RhdGEoaCwiaGFuZGxlIiksZiYmZi5hcHBseShoLGMpLGY9ZyYmaFtnXSxmJiZmLmFwcGx5JiZtLmFjY2VwdERhdGEoaCkmJihiLnJlc3VsdD1mLmFwcGx5KGgsYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cCwhZSYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighay5fZGVmYXVsdHx8ay5fZGVmYXVsdC5hcHBseShvLnBvcCgpLGMpPT09ITEpJiZtLmFjY2VwdERhdGEoZCkmJmcmJmRbcF0mJiFtLmlzV2luZG93KGQpKXtsPWRbZ10sbCYmKGRbZ109bnVsbCksbS5ldmVudC50cmlnZ2VyZWQ9cDt0cnl7ZFtwXSgpfWNhdGNoKHIpe31tLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbCYmKGRbZ109bCl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1tLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShtLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1tLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1tLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGc9MDt3aGlsZSgoZT1mLmhhbmRsZXJzW2crK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWUsYS5kYXRhPWUuZGF0YSxjPSgobS5ldmVudC5zcGVjaWFsW2Uub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxlLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1jJiYoYS5yZXN1bHQ9Yyk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZT1bXSxmPTA7aD5mO2YrKylkPWJbZl0sYz1kLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1lW2NdJiYoZVtjXT1kLm5lZWRzQ29udGV4dD9tKGMsdGhpcykuaW5kZXgoaSk+PTA6bS5maW5kKGMsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxlW2NdJiZlLnB1c2goZCk7ZS5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmV9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW20uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1aLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlkudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBtLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zi5zcmNFbGVtZW50fHx5KSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b24sZz1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihkPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fHksZT1kLmRvY3VtZW50RWxlbWVudCxjPWQuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmcmJihhLnJlbGF0ZWRUYXJnZXQ9Zz09PWEudGFyZ2V0P2IudG9FbGVtZW50OmcpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09Y2IoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1jYigpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbS5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5leHRlbmQobmV3IG0uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP20uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bS5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbS5yZW1vdmVFdmVudD15LnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT09SyYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbS5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbS5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/YWI6YmIpOnRoaXMudHlwZT1hLGImJm0uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG0ubm93KCksdm9pZCh0aGlzW20uZXhwYW5kb109ITApKTpuZXcgbS5FdmVudChhLGIpfSxtLkV2ZW50LnByb3RvdHlwZT17aXNEZWZhdWx0UHJldmVudGVkOmJiLGlzUHJvcGFnYXRpb25TdG9wcGVkOmJiLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmJiLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWFiLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9YWIsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG0uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXttLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFtLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLnN1Ym1pdEJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBtLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG0uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1tLm5vZGVOYW1lKGIsImlucHV0Iil8fG0ubm9kZU5hbWUoYiwiYnV0dG9uIik/Yi5mb3JtOnZvaWQgMDtjJiYhbS5fZGF0YShjLCJzdWJtaXRCdWJibGVzIikmJihtLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZT0hMH0pLG0uX2RhdGEoYywic3VibWl0QnViYmxlcyIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZtLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG0ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbS5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxrLmNoYW5nZUJ1YmJsZXN8fChtLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBYLnRlc3QodGhpcy5ub2RlTmFtZSk/KCgiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlKSYmKG0uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITApfSksbS5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdF9jaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0X2NoYW5nZWQ9ITEpLG0uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKX0pKSwhMSk6dm9pZCBtLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtYLnRlc3QoYi5ub2RlTmFtZSkmJiFtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiKSYmKG0uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bS5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxtLl9kYXRhKGIsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBtLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFYLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksay5mb2N1c2luQnViYmxlc3x8bS5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe20uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxtLmV2ZW50LmZpeChhKSwhMCl9O20uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1tLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbS5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW0uX2RhdGEoZCxiKS0xO2U/bS5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG0uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG0uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihmIGluIGEpdGhpcy5vbihmLGIsYyxhW2ZdLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9YmI7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihnPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbSgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1tLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixtKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWJiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXttLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe20uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP20uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO2Z1bmN0aW9uIGRiKGEpe3ZhciBiPWViLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfXZhciBlYj0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZmI9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxnYj1uZXcgUmVnRXhwKCI8KD86IitlYisiKVtcXHMvPl0iLCJpIiksaGI9L15ccysvLGliPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksamI9LzwoW1x3Ol0rKS8sa2I9Lzx0Ym9keS9pLGxiPS88fCYjP1x3KzsvLG1iPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksbmI9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksb2I9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHBiPS9edHJ1ZVwvKC4qKS8scWI9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLHJiPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDprLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX0sc2I9ZGIoeSksdGI9c2IuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmIub3B0Z3JvdXA9cmIub3B0aW9uLHJiLnRib2R5PXJiLnRmb290PXJiLmNvbGdyb3VwPXJiLmNhcHRpb249cmIudGhlYWQscmIudGg9cmIudGQ7ZnVuY3Rpb24gdWIoYSxiKXt2YXIgYyxkLGU9MCxmPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09Sz9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9PUs/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bS5ub2RlTmFtZShkLGIpP2YucHVzaChkKTptLm1lcmdlKGYsdWIoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm0ubm9kZU5hbWUoYSxiKT9tLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIHZiKGEpe1cudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIHdiKGEsYil7cmV0dXJuIG0ubm9kZU5hbWUoYSwidGFibGUiKSYmbS5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiB4YihhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bS5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24geWIoYSl7dmFyIGI9cGIuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiB6YihhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW0uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG0uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX1mdW5jdGlvbiBBYihhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZtLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW0uX2RhdGEoYSksZz1tLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyltLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW0uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBCYihhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWsubm9DbG9uZUV2ZW50JiZiW20uZXhwYW5kb10pe2U9bS5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyltLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobS5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oeGIoYikudGV4dD1hLnRleHQseWIoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGsuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFtLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmVy50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1tLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1tLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihrLmh0bWw1Q2xvbmV8fG0uaXNYTUxEb2MoYSl8fCFnYi50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KHRiLmlubmVySFRNTD1hLm91dGVySFRNTCx0Yi5yZW1vdmVDaGlsZChmPXRiLmZpcnN0Q2hpbGQpKSwhKGsubm9DbG9uZUV2ZW50JiZrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxtLmlzWE1MRG9jKGEpKSlmb3IoZD11YihmKSxoPXViKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmQmIoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8dWIoYSksZD1kfHx1YihmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUFiKGUsZFtnXSk7ZWxzZSBBYihhLGYpO3JldHVybiBkPXViKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJnpiKGQsIWkmJnViKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixsLG49YS5sZW5ndGgsbz1kYihiKSxwPVtdLHE9MDtuPnE7cSsrKWlmKGY9YVtxXSxmfHwwPT09ZilpZigib2JqZWN0Ij09PW0udHlwZShmKSltLm1lcmdlKHAsZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihsYi50ZXN0KGYpKXtoPWh8fG8uYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaT0oamIuZXhlYyhmKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxsPXJiW2ldfHxyYi5fZGVmYXVsdCxoLmlubmVySFRNTD1sWzFdK2YucmVwbGFjZShpYiwiPCQxPjwvJDI+IikrbFsyXSxlPWxbMF07d2hpbGUoZS0tKWg9aC5sYXN0Q2hpbGQ7aWYoIWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoZikmJnAucHVzaChiLmNyZWF0ZVRleHROb2RlKGhiLmV4ZWMoZilbMF0pKSwhay50Ym9keSl7Zj0idGFibGUiIT09aXx8a2IudGVzdChmKT8iPHRhYmxlPiIhPT1sWzFdfHxrYi50ZXN0KGYpPzA6aDpoLmZpcnN0Q2hpbGQsZT1mJiZmLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGUtLSltLm5vZGVOYW1lKGo9Zi5jaGlsZE5vZGVzW2VdLCJ0Ym9keSIpJiYhai5jaGlsZE5vZGVzLmxlbmd0aCYmZi5yZW1vdmVDaGlsZChqKX1tLm1lcmdlKHAsaC5jaGlsZE5vZGVzKSxoLnRleHRDb250ZW50PSIiO3doaWxlKGguZmlyc3RDaGlsZCloLnJlbW92ZUNoaWxkKGguZmlyc3RDaGlsZCk7aD1vLmxhc3RDaGlsZH1lbHNlIHAucHVzaChiLmNyZWF0ZVRleHROb2RlKGYpKTtoJiZvLnJlbW92ZUNoaWxkKGgpLGsuYXBwZW5kQ2hlY2tlZHx8bS5ncmVwKHViKHAsImlucHV0IiksdmIpLHE9MDt3aGlsZShmPXBbcSsrXSlpZigoIWR8fC0xPT09bS5pbkFycmF5KGYsZCkpJiYoZz1tLmNvbnRhaW5zKGYub3duZXJEb2N1bWVudCxmKSxoPXViKG8uYXBwZW5kQ2hpbGQoZiksInNjcmlwdCIpLGcmJnpiKGgpLGMpKXtlPTA7d2hpbGUoZj1oW2UrK10pb2IudGVzdChmLnR5cGV8fCIiKSYmYy5wdXNoKGYpfXJldHVybiBoPW51bGwsb30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW0uZXhwYW5kbyxqPW0uY2FjaGUsbD1rLmRlbGV0ZUV4cGFuZG8sbj1tLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxtLmFjY2VwdERhdGEoZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW5bZV0/bS5ldmVudC5yZW1vdmUoZCxlKTptLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGw/ZGVsZXRlIGRbaV06dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlIT09Sz9kLnJlbW92ZUF0dHJpYnV0ZShpKTpkW2ldPW51bGwsYy5wdXNoKGYpKX19fSksbS5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9tLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHx5KS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj13Yih0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXdiKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjLGQ9YT9tLmZpbHRlcihhLHRoaXMpOnRoaXMsZT0wO251bGwhPShjPWRbZV0pO2UrKylifHwxIT09Yy5ub2RlVHlwZXx8bS5jbGVhbkRhdGEodWIoYykpLGMucGFyZW50Tm9kZSYmKGImJm0uY29udGFpbnMoYy5vd25lckRvY3VtZW50LGMpJiZ6Yih1YihjLCJzY3JpcHQiKSksYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm0uY2xlYW5EYXRhKHViKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbS5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbS5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UoZmIsIiIpOnZvaWQgMDtpZighKCJzdHJpbmciIT10eXBlb2YgYXx8bWIudGVzdChhKXx8IWsuaHRtbFNlcmlhbGl6ZSYmZ2IudGVzdChhKXx8IWsubGVhZGluZ1doaXRlc3BhY2UmJmhiLnRlc3QoYSl8fHJiWyhqYi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSkpe2E9YS5yZXBsYWNlKGliLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihtLmNsZWFuRGF0YSh1YihiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYil7YT10aGlzLnBhcmVudE5vZGUsbS5jbGVhbkRhdGEodWIodGhpcykpLGEmJmEucmVwbGFjZUNoaWxkKGIsdGhpcyl9KSxhJiYoYS5sZW5ndGh8fGEubm9kZVR5cGUpP3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiKXthPWUuYXBwbHkoW10sYSk7dmFyIGMsZCxmLGcsaCxpLGo9MCxsPXRoaXMubGVuZ3RoLG49dGhpcyxvPWwtMSxwPWFbMF0scT1tLmlzRnVuY3Rpb24ocCk7aWYocXx8bD4xJiYic3RyaW5nIj09dHlwZW9mIHAmJiFrLmNoZWNrQ2xvbmUmJm5iLnRlc3QocCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZD1uLmVxKGMpO3EmJihhWzBdPXAuY2FsbCh0aGlzLGMsZC5odG1sKCkpKSxkLmRvbU1hbmlwKGEsYil9KTtpZihsJiYoaT1tLmJ1aWxkRnJhZ21lbnQoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsdGhpcyksYz1pLmZpcnN0Q2hpbGQsMT09PWkuY2hpbGROb2Rlcy5sZW5ndGgmJihpPWMpLGMpKXtmb3IoZz1tLm1hcCh1YihpLCJzY3JpcHQiKSx4YiksZj1nLmxlbmd0aDtsPmo7aisrKWQ9aSxqIT09byYmKGQ9bS5jbG9uZShkLCEwLCEwKSxmJiZtLm1lcmdlKGcsdWIoZCwic2NyaXB0IikpKSxiLmNhbGwodGhpc1tqXSxkLGopO2lmKGYpZm9yKGg9Z1tnLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG0ubWFwKGcseWIpLGo9MDtmPmo7aisrKWQ9Z1tqXSxvYi50ZXN0KGQudHlwZXx8IiIpJiYhbS5fZGF0YShkLCJnbG9iYWxFdmFsIikmJm0uY29udGFpbnMoaCxkKSYmKGQuc3JjP20uX2V2YWxVcmwmJm0uX2V2YWxVcmwoZC5zcmMpOm0uZ2xvYmFsRXZhbCgoZC50ZXh0fHxkLnRleHRDb250ZW50fHxkLmlubmVySFRNTHx8IiIpLnJlcGxhY2UocWIsIiIpKSk7aT1jPW51bGx9cmV0dXJuIHRoaXN9fSksbS5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXttLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxnPW0oYSksaD1nLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxtKGdbZF0pW2JdKGMpLGYuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIENiLERiPXt9O2Z1bmN0aW9uIEViKGIsYyl7dmFyIGQsZT1tKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTptLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiBGYihhKXt2YXIgYj15LGM9RGJbYV07cmV0dXJuIGN8fChjPUViKGEsYiksIm5vbmUiIT09YyYmY3x8KENiPShDYnx8bSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oQ2JbMF0uY29udGVudFdpbmRvd3x8Q2JbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9RWIoYSxiKSxDYi5kZXRhY2goKSksRGJbYV09YyksY30hZnVuY3Rpb24oKXt2YXIgYTtrLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxkO3JldHVybiBjPXkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZD15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZCkuYXBwZW5kQ2hpbGQoYiksdHlwZW9mIGIuc3R5bGUuem9vbSE9PUsmJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoeS5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChkKSxhKTp2b2lkIDB9fSgpO3ZhciBHYj0vXm1hcmdpbi8sSGI9bmV3IFJlZ0V4cCgiXigiK1MrIikoPyFweClbYS16JV0rJCIsImkiKSxJYixKYixLYj0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhJYj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxudWxsKX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCxjJiYoIiIhPT1nfHxtLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bS5zdHlsZShhLGIpKSxIYi50ZXN0KGcpJiZHYi50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDA9PT1nP2c6ZysiIn0pOnkuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKEliPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sSmI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxJYihhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksSGIudGVzdChnKSYmIUtiLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBMYihhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXt2YXIgYz1hKCk7aWYobnVsbCE9YylyZXR1cm4gYz92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19IWZ1bmN0aW9uKCl7dmFyIGIsYyxkLGUsZixnLGg7aWYoYj15LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGIuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGQ9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGM9ZCYmZC5zdHlsZSl7Yy5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGsub3BhY2l0eT0iMC41Ij09PWMub3BhY2l0eSxrLmNzc0Zsb2F0PSEhYy5jc3NGbG9hdCxiLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsYi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1iLnN0eWxlLmJhY2tncm91bmRDbGlwLGsuYm94U2l6aW5nPSIiPT09Yy5ib3hTaXppbmd8fCIiPT09Yy5Nb3pCb3hTaXppbmd8fCIiPT09Yy5XZWJraXRCb3hTaXppbmcsbS5leHRlbmQoayx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWcmJmkoKSxnfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1mJiZpKCksZn0scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1lJiZpKCksZX0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1oJiZpKCksaH19KTtmdW5jdGlvbiBpKCl7dmFyIGIsYyxkLGk7Yz15LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9eS5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChkKS5hcHBlbmRDaGlsZChiKSxiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NHB4O3Bvc2l0aW9uOmFic29sdXRlIixlPWY9ITEsaD0hMCxhLmdldENvbXB1dGVkU3R5bGUmJihlPSIxJSIhPT0oYS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl8fHt9KS50b3AsZj0iNHB4Ij09PShhLmdldENvbXB1dGVkU3R5bGUoYixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgsaT1iLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgiZGl2IikpLGkuc3R5bGUuY3NzVGV4dD1iLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsaS5zdHlsZS5tYXJnaW5SaWdodD1pLnN0eWxlLndpZHRoPSIwIixiLnN0eWxlLndpZHRoPSIxcHgiLGg9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkubWFyZ2luUmlnaHQpKSxiLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGlbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZz0wPT09aVswXS5vZmZzZXRIZWlnaHQsZyYmKGlbMF0uc3R5bGUuZGlzcGxheT0iIixpWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGc9MD09PWlbMF0ub2Zmc2V0SGVpZ2h0KSxjLnJlbW92ZUNoaWxkKGQpKX19fSgpLG0uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIE1iPS9hbHBoYVwoW14pXSpcKS9pLE5iPS9vcGFjaXR5XHMqPVxzKihbXildKikvLE9iPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxQYj1uZXcgUmVnRXhwKCJeKCIrUysiKSguKikkIiwiaSIpLFFiPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUysiKSIsImkiKSxSYj17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU2I9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LFRiPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24gVWIoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9Yi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPVRiLmxlbmd0aDt3aGlsZShlLS0paWYoYj1UYltlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBWYihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1tLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmVShkKSYmKGZbZ109bS5fZGF0YShkLCJvbGRkaXNwbGF5IixGYihkLm5vZGVOYW1lKSkpKTooZT1VKGQpLChjJiYibm9uZSIhPT1jfHwhZSkmJm0uX2RhdGEoZCwib2xkZGlzcGxheSIsZT9jOm0uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkPVBiLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fCJweCIpOmJ9ZnVuY3Rpb24gWGIoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKSJtYXJnaW4iPT09YyYmKGcrPW0uY3NzKGEsYytUW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSksIm1hcmdpbiIhPT1jJiYoZy09bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTooZys9bS5jc3MoYSwicGFkZGluZyIrVFtmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9bS5jc3MoYSwiYm9yZGVyIitUW2ZdKyJXaWR0aCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBZYihhLGIsYyl7dmFyIGQ9ITAsZT0id2lkdGgiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9SWIoYSksZz1rLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bS5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPUpiKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksSGIudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrWGIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW0uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9SmIoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjprLmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW0uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtpZihiPW0uY3NzUHJvcHNbaF18fChtLmNzc1Byb3BzW2hdPVViKGksaCkpLGc9bS5jc3NIb29rc1tiXXx8bS5jc3NIb29rc1toXSx2b2lkIDA9PT1jKXJldHVybiBnJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTtpZihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9UWIuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChtLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bS5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksIShnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSkpKSl0cnl7aVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bS5jYW1lbENhc2UoYik7cmV0dXJuIGI9bS5jc3NQcm9wc1toXXx8KG0uY3NzUHJvcHNbaF09VWIoYS5zdHlsZSxoKSksZz1tLmNzc0hvb2tzW2JdfHxtLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9SmIoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gU2ImJihmPVNiW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fG0uaXNOdW1lcmljKGUpP2V8fDA6Zik6Zn19KSxtLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9PYi50ZXN0KG0uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP20uc3dhcChhLFJiLGZ1bmN0aW9uKCl7cmV0dXJuIFliKGEsYixkKX0pOlliKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmSWIoYSk7cmV0dXJuIFdiKGEsYyxkP1hiKGEsYixkLGsuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1tLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxrLm9wYWNpdHl8fChtLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBOYi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9bS5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IisxMDAqYisiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xLChiPj0xfHwiIj09PWIpJiYiIj09PW0udHJpbShmLnJlcGxhY2UoTWIsIiIpKSYmYy5yZW1vdmVBdHRyaWJ1dGUmJihjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksIiI9PT1ifHxkJiYhZC5maWx0ZXIpfHwoYy5maWx0ZXI9TWIudGVzdChmKT9mLnJlcGxhY2UoTWIsZSk6ZisiICIrZSl9fSksbS5jc3NIb29rcy5tYXJnaW5SaWdodD1MYihrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9tLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sSmIsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG0uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1RbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sR2IudGVzdChhKXx8KG0uY3NzSG9va3NbYStiXS5zZXQ9V2IpfSksbS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBWKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobS5pc0FycmF5KGIpKXtmb3IoZD1JYihhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1tLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bS5zdHlsZShhLGIsYyk6bS5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gVmIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7VSh0aGlzKT9tKHRoaXMpLnNob3coKTptKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIFpiKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBaYi5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW0uVHdlZW49WmIsWmIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaYixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobS5jc3NOdW1iZXJbY10/IiI6InB4IikKfSxjdXI6ZnVuY3Rpb24oKXt2YXIgYT1aYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gYSYmYS5nZXQ/YS5nZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGEpe3ZhciBiLGM9WmIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPWI9dGhpcy5vcHRpb25zLmR1cmF0aW9uP20uZWFzaW5nW3RoaXMuZWFzaW5nXShhLHRoaXMub3B0aW9ucy5kdXJhdGlvbiphLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6WmIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sWmIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVpiLnByb3RvdHlwZSxaYi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW0uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe20uZnguc3RlcFthLnByb3BdP20uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVttLmNzc1Byb3BzW2EucHJvcF1dfHxtLmNzc0hvb2tzW2EucHJvcF0pP20uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LFpiLnByb3BIb29rcy5zY3JvbGxUb3A9WmIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbS5meD1aYi5wcm90b3R5cGUuaW5pdCxtLmZ4LnN0ZXA9e307dmFyICRiLF9iLGFjPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiYz1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUysiKShbYS16JV0qKSQiLCJpIiksY2M9L3F1ZXVlSG9va3MkLyxkYz1baWNdLGVjPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPWJjLmV4ZWMoYiksZj1lJiZlWzNdfHwobS5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obS5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJmJjLmV4ZWMobS5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxtLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBmYygpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7JGI9dm9pZCAwfSksJGI9bS5ub3coKX1mdW5jdGlvbiBnYyhhLGIpe3ZhciBjLGQ9e2hlaWdodDphfSxlPTA7Zm9yKGI9Yj8xOjA7ND5lO2UrPTItYiljPVRbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBoYyhhLGIsYyl7Zm9yKHZhciBkLGU9KGVjW2JdfHxbXSkuY29uY2F0KGVjWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIGljKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixsLG49dGhpcyxvPXt9LHA9YS5zdHlsZSxxPWEubm9kZVR5cGUmJlUoYSkscj1tLl9kYXRhKGEsImZ4c2hvdyIpO2MucXVldWV8fChoPW0uX3F1ZXVlSG9va3MoYSwiZngiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxuLmFsd2F5cyhmdW5jdGlvbigpe24uYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG0ucXVldWUoYSwiZngiKS5sZW5ndGh8fGguZW1wdHkuZmlyZSgpfSl9KSksMT09PWEubm9kZVR5cGUmJigiaGVpZ2h0ImluIGJ8fCJ3aWR0aCJpbiBiKSYmKGMub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLGo9bS5jc3MoYSwiZGlzcGxheSIpLGw9Im5vbmUiPT09aj9tLl9kYXRhKGEsIm9sZGRpc3BsYXkiKXx8RmIoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWwmJiJub25lIj09PW0uY3NzKGEsImZsb2F0IikmJihrLmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJiJpbmxpbmUiIT09RmIoYS5ub2RlTmFtZSk/cC56b29tPTE6cC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksYy5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsay5zaHJpbmtXcmFwQmxvY2tzKCl8fG4uYWx3YXlzKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxhYy5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHE/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFyfHx2b2lkIDA9PT1yW2RdKWNvbnRpbnVlO3E9ITB9b1tkXT1yJiZyW2RdfHxtLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihtLmlzRW1wdHlPYmplY3QobykpImlubGluZSI9PT0oIm5vbmUiPT09aj9GYihhLm5vZGVOYW1lKTpqKSYmKHAuZGlzcGxheT1qKTtlbHNle3I/ImhpZGRlbiJpbiByJiYocT1yLmhpZGRlbik6cj1tLl9kYXRhKGEsImZ4c2hvdyIse30pLGYmJihyLmhpZGRlbj0hcSkscT9tKGEpLnNob3coKTpuLmRvbmUoZnVuY3Rpb24oKXttKGEpLmhpZGUoKX0pLG4uZG9uZShmdW5jdGlvbigpe3ZhciBiO20uX3JlbW92ZURhdGEoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbyltLnN0eWxlKGEsYixvW2JdKX0pO2ZvcihkIGluIG8pZz1oYyhxP3JbZF06MCxkLG4pLGQgaW4gcnx8KHJbZF09Zy5zdGFydCxxJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIGpjKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bS5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxtLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW0uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24ga2MoYSxiLGMpe3ZhciBkLGUsZj0wLGc9ZGMubGVuZ3RoLGg9bS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9JGJ8fGZjKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm0uZXh0ZW5kKHt9LGIpLG9wdHM6bS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTokYnx8ZmMoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW0uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKGpjKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1kY1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG0ubWFwKGssaGMsaiksbS5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbS5meC50aW1lcihtLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1tLkFuaW1hdGlvbj1tLmV4dGVuZChrYyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe20uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxlY1tjXT1lY1tjXXx8W10sZWNbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9kYy51bnNoaWZ0KGEpOmRjLnB1c2goYSl9fSksbS5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP20uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bS5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFtLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW0uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBtLmZ4LnNwZWVkcz9tLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTptLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bS5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZtLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bS5pc0VtcHR5T2JqZWN0KGEpLGY9bS5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWtjKHRoaXMsbS5leHRlbmQoe30sYSksZik7KGV8fG0uX2RhdGEodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1tLnRpbWVycyxnPW0uX2RhdGEodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmY2MudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTsoYnx8IWMpJiZtLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1tLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1tLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbS5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxtLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bS5mbltiXTttLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoZ2MoYiwhMCksYSxkLGUpfX0pLG0uZWFjaCh7c2xpZGVEb3duOmdjKCJzaG93Iiksc2xpZGVVcDpnYygiaGlkZSIpLHNsaWRlVG9nZ2xlOmdjKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bS5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxtLnRpbWVycz1bXSxtLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW0udGltZXJzLGM9MDtmb3IoJGI9bS5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxtLmZ4LnN0b3AoKSwkYj12b2lkIDB9LG0uZngudGltZXI9ZnVuY3Rpb24oYSl7bS50aW1lcnMucHVzaChhKSxhKCk/bS5meC5zdGFydCgpOm0udGltZXJzLnBvcCgpfSxtLmZ4LmludGVydmFsPTEzLG0uZnguc3RhcnQ9ZnVuY3Rpb24oKXtfYnx8KF9iPXNldEludGVydmFsKG0uZngudGljayxtLmZ4LmludGVydmFsKSl9LG0uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoX2IpLF9iPW51bGx9LG0uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG0uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1tLmZ4P20uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZTtiPXkuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxiLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxjPXkuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZT1jLmFwcGVuZENoaWxkKHkuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxkLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGsuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWIuY2xhc3NOYW1lLGsuc3R5bGU9L3RvcC8udGVzdChkLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksay5ocmVmTm9ybWFsaXplZD0iL2EiPT09ZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSxrLmNoZWNrT249ISFhLnZhbHVlLGsub3B0U2VsZWN0ZWQ9ZS5zZWxlY3RlZCxrLmVuY3R5cGU9ISF5LmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGMuZGlzYWJsZWQ9ITAsay5vcHREaXNhYmxlZD0hZS5kaXNhYmxlZCxhPXkuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxhLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxrLmlucHV0PSIiPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYS52YWx1ZT0idCIsYS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBsYz0vXHIvZzttLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bS5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG0odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjptLmlzQXJyYXkoZSkmJihlPW0ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW0udmFsSG9va3NbdGhpcy50eXBlXXx8bS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW0udmFsSG9va3NbZS50eXBlXXx8bS52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UobGMsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG0uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bS5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm0udHJpbShtLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZtLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bShjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW0ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWlmKGQ9ZVtnXSxtLmluQXJyYXkobS52YWxIb29rcy5vcHRpb24uZ2V0KGQpLGYpPj0wKXRyeXtkLnNlbGVjdGVkPWM9ITB9Y2F0Y2goaCl7ZC5zY3JvbGxIZWlnaHR9ZWxzZSBkLnNlbGVjdGVkPSExO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxlfX19fSksbS5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uaXNBcnJheShiKT9hLmNoZWNrZWQ9bS5pbkFycmF5KG0oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pO3ZhciBtYyxuYyxvYz1tLmV4cHIuYXR0ckhhbmRsZSxwYz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLHFjPWsuZ2V0U2V0QXR0cmlidXRlLHJjPWsuaW5wdXQ7bS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0uYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bS5yZW1vdmVBdHRyKHRoaXMsYSl9KX19KSxtLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoYSYmMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gdHlwZW9mIGEuZ2V0QXR0cmlidXRlPT09Sz9tLnByb3AoYSxiLGMpOigxPT09ZiYmbS5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGQ9bS5hdHRySG9va3NbYl18fChtLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP25jOm1jKSksdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW0uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBtLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1tLnByb3BGaXhbY118fGMsbS5leHByLm1hdGNoLmJvb2wudGVzdChjKT9yYyYmcWN8fCFwYy50ZXN0KGMpP2FbZF09ITE6YVttLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm0uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHFjP2M6ZCl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm0ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksbmM9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9tLnJlbW92ZUF0dHIoYSxjKTpyYyYmcWN8fCFwYy50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCFxYyYmbS5wcm9wRml4W2NdfHxjLGMpOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbS5lYWNoKG0uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9b2NbYl18fG0uZmluZC5hdHRyO29jW2JdPXJjJiZxY3x8IXBjLnRlc3QoYik/ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPW9jW2JdLG9jW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCxvY1tiXT1mKSxlfTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbS5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkscmMmJnFjfHwobS5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG0ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOm1jJiZtYy5zZXQoYSxiLGMpfX0pLHFjfHwobWM9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSxvYy5pZD1vYy5uYW1lPW9jLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG0udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6bWMuc2V0fSxtLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7bWMuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxtLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bS5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGsuc3R5bGV8fChtLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciBzYz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSx0Yz0vXig/OmF8YXJlYSkkL2k7bS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gVih0aGlzLG0ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1tLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxtLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW0uaXNYTUxEb2MoYSksZiYmKGI9bS5wcm9wRml4W2JdfHxiLGU9bS5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW0uZmluZC5hdHRyKGEsInRhYmluZGV4Iik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6c2MudGVzdChhLm5vZGVOYW1lKXx8dGMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX19KSxrLmhyZWZOb3JtYWxpemVkfHxtLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXttLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxrLm9wdFNlbGVjdGVkfHwobS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSxtLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe20ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxrLmVuY3R5cGV8fChtLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKTt2YXIgdWM9L1tcdFxyXG5cZl0vZzttLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9InN0cmluZyI9PXR5cGVvZiBhJiZhO2lmKG0uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoailmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtpPmg7aCsrKWlmKGM9dGhpc1toXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW0udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPXRoaXMubGVuZ3RoLGo9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYTtpZihtLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXttKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGopZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aT5oO2grKylpZihjPXRoaXNbaF0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHVjLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP20udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXttKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1tKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09S3x8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmbS5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjptLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UodWMsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pLG0uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe20uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG0uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIHZjPW0ubm93KCksd2M9L1w/Lyx4Yz0vKCwpfChcW3x7KXwofXxdKXwiKD86W14iXFxcclxuXXxcXFsiXFxcL2JmbnJ0XXxcXHVbXGRhLWZBLUZdezR9KSoiXHMqOj98dHJ1ZXxmYWxzZXxudWxsfC0/KD8hMFxkKVxkKyg/OlwuXGQrfCkoPzpbZUVdWystXT9cZCt8KS9nO20ucGFyc2VKU09OPWZ1bmN0aW9uKGIpe2lmKGEuSlNPTiYmYS5KU09OLnBhcnNlKXJldHVybiBhLkpTT04ucGFyc2UoYisiIik7dmFyIGMsZD1udWxsLGU9bS50cmltKGIrIiIpO3JldHVybiBlJiYhbS50cmltKGUucmVwbGFjZSh4YyxmdW5jdGlvbihhLGIsZSxmKXtyZXR1cm4gYyYmYiYmKGQ9MCksMD09PWQ/YTooYz1lfHxiLGQrPSFmLSFlLCIiKX0pKT9GdW5jdGlvbigicmV0dXJuICIrZSkoKTptLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LG0ucGFyc2VYTUw9ZnVuY3Rpb24oYil7dmFyIGMsZDtpZighYnx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZD1uZXcgRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIHljLHpjLEFjPS8jLiokLyxCYz0vKFs/Jl0pXz1bXiZdKi8sQ2M9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxEYz0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxFYz0vXig/OkdFVHxIRUFEKSQvLEZjPS9eXC9cLy8sR2M9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sSGM9e30sSWM9e30sSmM9IiovIi5jb25jYXQoIioiKTt0cnl7emM9bG9jYXRpb24uaHJlZn1jYXRjaChLYyl7emM9eS5jcmVhdGVFbGVtZW50KCJhIiksemMuaHJlZj0iIix6Yz16Yy5ocmVmfXljPUdjLmV4ZWMoemMudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIExjKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihtLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gTWMoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09SWM7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxtLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBOYyhhLGIpe3ZhciBjLGQsZT1tLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZtLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gT2MoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gUGMoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1tLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6emMsdHlwZToiR0VUIixpc0xvY2FsOkRjLnRlc3QoeWNbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6SmMsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjptLnBhcnNlSlNPTiwidGV4dCB4bWwiOm0ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP05jKE5jKGEsbS5hamF4U2V0dGluZ3MpLGIpOk5jKG0uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOkxjKEhjKSxhamF4VHJhbnNwb3J0OkxjKEljKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1tLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxuPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9tKGwpOm0uZXZlbnQsbz1tLkRlZmVycmVkKCkscD1tLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighail7aj17fTt3aGlsZShiPUNjLmV4ZWMoZikpaltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1qW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZjpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gaSYmaS5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fHpjKSsiIikucmVwbGFjZShBYywiIikucmVwbGFjZShGYyx5Y1sxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1tLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihjPUdjLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFjfHxjWzFdPT09eWNbMV0mJmNbMl09PT15Y1syXSYmKGNbM118fCgiaHR0cDoiPT09Y1sxXT8iODAiOiI0NDMiKSk9PT0oeWNbM118fCgiaHR0cDoiPT09eWNbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1tLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSksTWMoSGMsayxiLHYpLDI9PT10KXJldHVybiB2O2g9ay5nbG9iYWwsaCYmMD09PW0uYWN0aXZlKysmJm0uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0hRWMudGVzdChrLnR5cGUpLGU9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZT1rLnVybCs9KHdjLnRlc3QoZSk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPUJjLnRlc3QoZSk/ZS5yZXBsYWNlKEJjLCIkMV89Iit2YysrKTplKyh3Yy50ZXN0KGUpPyImIjoiPyIpKyJfPSIrdmMrKykpLGsuaWZNb2RpZmllZCYmKG0ubGFzdE1vZGlmaWVkW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixtLmxhc3RNb2RpZmllZFtlXSksbS5ldGFnW2VdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG0uZXRhZ1tlXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK0pjKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoZCBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGQsay5oZWFkZXJzW2RdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihkIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbZF0oa1tkXSk7aWYoaT1NYyhJYyxrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGgmJm4udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxpLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGk9dm9pZCAwLGY9ZHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGMmJih1PU9jKGssdixjKSksdT1QYyhrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobS5sYXN0TW9kaWZpZWRbZV09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG0uZXRhZ1tlXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxoJiZuLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGgmJihuLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbS5hY3RpdmV8fG0uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbS5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG0uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG0uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe21bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG0uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG0uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG0uZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGEsYil7bS5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5vbihiLGEpfX0pLG0uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG0uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbS5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7aWYobS5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bSh0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPW0oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJjE9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG0uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXttKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bSh0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1tLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXttKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bS5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG0odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG0uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB8fCFrLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpJiYibm9uZSI9PT0oYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxtLmNzcyhhLCJkaXNwbGF5IikpfSxtLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFtLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciBRYz0vJTIwL2csUmM9L1xbXF0kLyxTYz0vXHI/XG4vZyxUYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksVWM9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIFZjKGEsYixjLGQpe3ZhciBlO2lmKG0uaXNBcnJheShiKSltLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fFJjLnRlc3QoYSk/ZChhLGUpOlZjKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1tLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilWYyhhKyJbIitlKyJdIixiW2VdLGMsZCl9bS5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bS5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW0uYWpheFNldHRpbmdzJiZtLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbS5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW0uaXNQbGFpbk9iamVjdChhKSltLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKVZjKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKFFjLCIrIil9LG0uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW0ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP20ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW0odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZVYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhVGMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVcudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1tKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bS5pc0FycmF5KGMpP20ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShTYywiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoU2MsIlxyXG4iKX19KS5nZXQoKX19KSxtLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmL14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmWmMoKXx8JGMoKX06WmM7dmFyIFdjPTAsWGM9e30sWWM9bS5hamF4U2V0dGluZ3MueGhyKCk7YS5BY3RpdmVYT2JqZWN0JiZtKGEpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFhjKVhjW2FdKHZvaWQgMCwhMCl9KSxrLmNvcnM9ISFZYyYmIndpdGhDcmVkZW50aWFscyJpbiBZYyxZYz1rLmFqYXg9ISFZYyxZYyYmbS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxrLmNvcnMpe3ZhciBiO3JldHVybntzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytXYztpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKXZvaWQgMCE9PWNbZV0mJmYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0rIiIpO2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYj1mdW5jdGlvbihjLGUpe3ZhciBoLGksajtpZihiJiYoZXx8ND09PWYucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIFhjW2ddLGI9dm9pZCAwLGYub25yZWFkeXN0YXRlY2hhbmdlPW0ubm9vcCxlKTQhPT1mLnJlYWR5U3RhdGUmJmYuYWJvcnQoKTtlbHNle2o9e30saD1mLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0JiYoai50ZXh0PWYucmVzcG9uc2VUZXh0KTt0cnl7aT1mLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1ofHwhYS5pc0xvY2FsfHxhLmNyb3NzRG9tYWluPzEyMjM9PT1oJiYoaD0yMDQpOmg9ai50ZXh0PzIwMDo0MDR9aiYmZChoLGksaixmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYS5hc3luYz80PT09Zi5yZWFkeVN0YXRlP3NldFRpbWVvdXQoYik6Zi5vbnJlYWR5c3RhdGVjaGFuZ2U9WGNbZ109YjpiKCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYih2b2lkIDAsITApfX19fSk7ZnVuY3Rpb24gWmMoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1tLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBtLmdsb2JhbEV2YWwoYSksYX19fSksbS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG0uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPXkuaGVhZHx8bSgiaGVhZCIpWzBdfHx5LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihkLGUpe2I9eS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxlKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgX2M9W10sYWQ9Lyg9KVw/KD89JnwkKXxcP1w/LzttLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9X2MucG9wKCl8fG0uZXhwYW5kbysiXyIrdmMrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG0uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGFkLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYWQudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW0uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGFkLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPSh3Yy50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bS5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssX2MucHVzaChlKSksZyYmbS5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbS5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fHk7dmFyIGQ9dS5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW0uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbShlKS5yZW1vdmUoKSxtLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgYmQ9bS5mbi5sb2FkO20uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZiZClyZXR1cm4gYmQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bS50cmltKGEuc2xpY2UoaCxhLmxlbmd0aCkpLGE9YS5zbGljZSgwLGgpKSxtLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZj0iUE9TVCIpLGcubGVuZ3RoPjAmJm0uYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2U9YXJndW1lbnRzLGcuaHRtbChkP20oIjxkaXY+IikuYXBwZW5kKG0ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxlfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxtLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbS5ncmVwKG0udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgY2Q9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZGQoYSl7cmV0dXJuIG0uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1tLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW0uY3NzKGEsInBvc2l0aW9uIiksbD1tKGEpLG49e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1tLmNzcyhhLCJ0b3AiKSxpPW0uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZtLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbS5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGgpKSxudWxsIT1iLnRvcCYmKG4udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG4ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG4pOmwuY3NzKG4pfX0sbS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe20ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbS5jb250YWlucyhiLGUpPyh0eXBlb2YgZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1LJiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPWRkKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1tLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxtLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW0uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1tLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1tLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbS5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjZDt3aGlsZShhJiYhbS5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bS5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxjZH0pfX0pLG0uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO20uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFYodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9ZGQoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bShmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bShmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bS5jc3NIb29rc1tiXT1MYihrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1KYihhLGIpLEhiLnRlc3QoYyk/bShhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxtLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe20uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXttLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gVih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbS5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9tLmNzcyhiLGMsZyk6bS5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxtLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG0uZm4uYW5kU2VsZj1tLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG19KTt2YXIgZWQ9YS5qUXVlcnksZmQ9YS4kO3JldHVybiBtLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW0mJihhLiQ9ZmQpLGImJmEualF1ZXJ5PT09bSYmKGEualF1ZXJ5PWVkKSxtfSx0eXBlb2YgYj09PUsmJihhLmpRdWVyeT1hLiQ9bSksbX0pOwo="></script>
<link href="data:text/css;charset=utf-8,%0A%2Eleaflet%2Dmap%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dpane%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Doverlay%2Dpane%2C%0A%2Eleaflet%2Dshadow%2Dpane%2C%0A%2Eleaflet%2Dmarker%2Dpane%2C%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%2015000px%20%21important%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%202%3B%20%7D%0A%2Eleaflet%2Dobjects%2Dpane%20%7B%20z%2Dindex%3A%203%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%204%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%205%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%206%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%207%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%207%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2Dloaded%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dtouching%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dcontainer%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVbSURBVEiJrZZfSFt3FMe%2Fv3tvbmLUZleNKSHE%2FLGRiNbGRovTtrA9lcFkpcOnMvawwhhjrb3soQ8djGFhXMQNRqEvY3R9kJVuPpRRWQebcdKYxkaHqcHchKJ2rVo1WhNz%2F%2Fz2UOLUadVuv9fvOedzfuec3x9CKcV%2B1qVLlwgAdHV17cuR7AfU29tb43a73wWAVCr1Q0dHx8T%2FCuru7i5ubGw843K5ms1mMwBgdXUV6XQ6HI1Gb3Z2dj7%2Fz6C%2Bvr6T1dXVp6xWa%2Bl2%2Buzs7PLk5OTP7e3tv70S6Pr1647q6uoOt9vtYRjmpcnouo5UKiVPTk72nj17dmpPIEmS%2BIaGhnaPx3O8tLSU3ahRSotyudzrAGAymf4ghGQ36svLy5osywOxWKxPFMX8jqBbt241ejyed%2Bx2e9nWjPL5fK2iKC2UUiMAEELWDAbDEM%2Fz41ttZ2Zmnsmy%2FOPp06ejm0DXrl2rqK2tPeNyuQ7zPL9pi5qmVaytrZ3Qdf3gdiVhGOYvo9H4O8uyc1sSI%2Bl0enR8fPzmuXPn5sjt27ff8nq9bwiCYNpSJsPa2lqzqqr1AF7eJEDnOG7MaDSGCSHKRmFhYSGXTCZ%2FZd1u93dOp3NJEAS9ICqK4snlcm%2Fpuu4EQHaBAADRdf2gqqo1hJBllmUXCsLjx4%2BL7t69e4Ztamqaffjw4QepVOr5oUOHDKqqvqkoShAAvwfA1sVrmlataVqlqqqzvb29lnA43KwoymeEUoqenp7XdF3vW11dPX7s2DHi9XpfgfHPSiaTuHfvHjWbzQMMw7SfP39%2BkUSj0ZOU0qsA%2FEtLSwiHwygpKUFraysOHDiwL0Amk8Hg4CBWVlbQ3NwMi8UCAHFCyIesw%2BH43uFwuAwGg9lkMsHj8SCfzyMUCkFRFNhsNux2YDVNQzQaRSgUgsvlwtGjR2EyvZitbDbL9Pf3H2YDgcD8xMREk67rCZvN5iSEkLKyMrjdbsiyjJGREVgslh13NzU1hf7%2Bfui6jra2NlitVhBCQCmlo6OjoYGBASWbzX5BKKW4cuWKhRDyk67rJ4LBIFNRUbEeaHZ2FpFIBDabDS0tLSgqKipkiqGhITx58gTBYBBWq3XdZ25uDpFIhLIsO8jzfPuFCxeekTt37rQCuAqgfmVlBfF4HOXl5Thy5Ah4%2FsXgUUoRj8chyzIaGhoAALFYDB6PB36%2FH4S8OAH5fB4PHjzA%2FPw8%2FH4%2FSkpKACAB4CPW6%2FXeqKysrOI4rpjnedjtdmSzWUSjURgMBgiCAEIIrFYrHA4HxsfHsbi4iNbWVtjt9nWILMsYGhpCeXk5ampqYDQaC3AyPDxcSy5evPg2IaTL6XTO%2B3y%2BNkIIAwCKoiCRSEBVVTQ1Ne3Yo0wmg%2BHhYXAcB5%2FPB4PBUJBoMpkclGW5lFJ6mVBKIYpiMYDLHMedCgQCnCAI%2FoL1wsICEokEHA4H6uvr1ydQ13WMjY1hamoKPp8PgiBshE%2Fev38%2FoyjKLwA%2BlyTp%2BabbWxTFOgDfCIKAQCAQ4DiutNCjdDqNp0%2BfIhAIAABGRkZQWVkJl8u1Xj5N01Zjsdjw3NwcBfCxJEl%2FFmL%2F6z0SRZEAeJ8QIvp8vsWqqqqWgpbL5RCPxwEAfr9%2F%2FawAwPT0dDgejxfput4D4FtJkjYF3vGFFUWxHMCXRqPxcDAYtBYXF1dtZ5fNZmcikcijbDY7DuBTSZLmt7Pb9c8gimIbIeQrm82Wqaura2EYxggAlFI1Ho8PTk9PmymlnZIkhV4WZ0%2B%2FIFEUOQCdDMO8V19fn2NZ1hCLxaimaTcAdEuSpO4WY1%2F%2FOlEUnQC%2BBkABfCJJ0qO9%2Bv4NmO9xnZob3WcAAAAASUVORK5CYII%3D%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbrwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAArPSURBVGiB3Zp7TFvXHce%2F916%2FeBhCDInJwDjGBhvjQHi5SclaKRL5Z1Wl%2FrEq%2FWNr11TJmkpMw900pLVrplJ1cadFarp0zdZmmpZpf3SqNrUKfSnKgwI2sQPGBmNjAsUOxCW8bGzfe8%2F%2BSEAkMfa1A5m075%2F2%2Bf3O%2BZ7X595zLkUIwf%2BT6EdRSWdnp7izs1P8KOqitnqE3n%2F%2F%2FQMajeYZAPD7%2FR8fPXr00lbWt2WGTp48qdRoNC%2Fs2bNHXVhYyALA%2FPy86Pr16wG%2F3%2F%2Fhq6%2B%2BGtqKejfdUGdnJ6XT6Q4bDIZWjUaTNLnf76fcbvdlr9d7vqura1MbsKmGTp8%2BXadWqw%2Fv3bu3UCQS8anKsixLX7t2bT4QCJw%2Ffvy4c7PasCmGTpw4Ia%2BqqnrRZDIZSkpK2ExiZ2dnRYODg%2B7R0dE%2Fv%2Fbaa4sP25aHNnT27Nkf6HS6QwaD4aF2TLfbzXu93gtHjhz5z8PkydrQqVOnKtVq9Y%2Fq6uqUubm5GY3KRopEIiKn0xkKBAJ%2FbW9v92WTI2NDnZ2dYoPB8ILRaGwoKyvjsqk0naamphiXyzXgdrs%2F7OrqSmQSm5GhM2fOHNBoNM%2FU1dVJKYoSFEgIEcVisWYAkEql%2FRRFCRpNQgjldDpjfr%2F%2F42PHjglmlyBDJ0%2BeVO7evfsndXV1FatMEaJEIqGOx%2BMHCCFyAKAoalEikVwSi8UBoTnm5%2BdFTqdzYnx8%2FC9C2JXS0CpT9Hr9gcrKypTb8HrxPJ%2B%2FsrJygOf53cn%2Bp2l6XCaTXaJpekloTp%2FPR3s8nkvp2LWhoXfffbderVYfbmhoKEjHlPVtjcVidSzLNhFCUj67URSVEIlENqlU6gQgKD%2FLsvTAwMBCIBA4%2F8orrziS5r3f0IkTJ%2BQ6ne6IyWQy7NixQ%2FCCZFm2NB6PP8Hz%2FHahMQBA0%2FR3EonkokgkCgqNmZmZEQ8ODrq9Xu%2FZ%2B9l1j6EPPvjgKZ1Od6impoYSmpzneVksFtvHcZxBaEwyMQzjlkqlPTRNrwiNGR4eJl6v98JLL73079XfKEIITp06VVlRUfHj%2Bvr6nZkwJR6P6xOJxH5CiCxTA8lEUdSKWCy%2BKpFIPEJjIpGIyOFw3JyYmDjX3t7uo86dO3fUaDQ2lJeXCzbCcdz2WCz2BM%2Fzpdk1PbVomg5KpdKLDMN8JzRmcnJS5HK5Bhi9Xv9RcXHx7V27dqUd6rtMMcfj8YOEkIKHa3bKeuQsy9bwPC9mGCZEUVTaTWNsbKzQbrc%2FRXV0dBAAMYVCcfnpp5%2BeKC4uTmrsfqY8KqVj161bt2SffPJJRTgcbgUgZVpbW3sIIQei0Wij0%2BksmZubW9DpdEsUdWdf4Hk%2BPxqNHmRZtgWA9NFZWZOU4zgdy7LFd0crDgCEEHz66aelX3zxxfcjkUg9gAmapg8zV65c8fX09PwpHo%2FzhJC22dnZ2oGBARQUFCwVFBTUxOPxQ4QQxf%2FAyD0ihBSxLFtDCCFerzdy%2Fvz5PcFg8CAhRAqgSy6XP%2Ffmm2%2BO3LNtd3R0VFEU9R6AgyKRiNfr9fS%2BffsgFj%2BS8420SiQS6Onpgcfj4VmWpQF8SQh5%2BZ133hldLSNaH%2FDss8%2BGGYYJ3Lhxg9jtdnpoaAiTk5NoampCdXX1IzewXiMjI7DZbJifn4dMJqPNZjNRqVQBjuPC68utjhA1MDDwPIDfASgG7vSGw%2BHA2NgYAEClUmH%2F%2Fv0oKip6pEbm5uZw9epV3LhxAwCg1WpRX1%2B%2FftbcAvCLhoaGjwAQyuFwGDmOOwOgNVnCcDiMvr4%2BzM3NQSaTwWg0orm5GTS9tUd6PM%2Bjv78fLpcLKysrKCoqQktLCxSKDZfzZYZhjjFarfYfKpWqmabppAslNzcXWq0WMpkMwWAQU1NTCAQCyM%2FPx7Zt27bEzMTEBD7%2F%2FHP4fD5QFIWGhgaYzWbk5uZuGMNxXPHXX39tYkwm07nh4eGZ3Nxcz%2Fbt27%2BXrDBFUVAoFNBoNIhEIggGg%2FD5fLh9%2BzaUSuWmbRqRSAQXL15EX18flpeXoVKp8OSTT0KpVGIVI8nk8%2Fn6uru7xYuLi3WrHDr07bffmvx%2Bf295eTktkUiSwlMsFkOlUqGkpAQzMzMIBoPwer0AAKVS%2BVBmHA4HvvrqK4RCIeTl5aG1tRU1NTUpO2t5eXn6s88%2BGx4fHzcDmKVp%2BjBFCMEbb7whW1xc%2FBWAXwJgKysrbS0tLY9TFCXaKBnP8xgaGoLb7QbHcSgtLcW%2BffsyNhYKhdDT04NgMAiGYWAwGFBbW5tyjRJC2L6%2Bvis%2Bn68Jd3bqt%2BVy%2BVuvv%2F76yoYcysvLi5nNZmm6Bi4sLMBmsyEUCkEsFkOv1%2BOxxx5LOw0TiQS%2B%2BeYbeDweJBIJKJVKNDU1oaAg9SNiKBRCb28vu7y8LEISDt1jqLu7ezuAt0Oh0IsjIyNUPB5HeXk5mpubIZWmfuqZmJiA3W7HysoKCgsLU7LrPqagsbERFRUVKfPHYjH09%2FdjcnISEokE1dXVUCqV%2FwLQ3tbWNvmAoe7u7ucBnMRdDrEsC6%2FXu5bAZDKhqqoq5eJMxy4BTHlAhBCMjo5icHAQqx2s0%2BkgEq2thiUAvwFwqq2tjaUuXLhQA%2BCPAL6fLOHCwgJcLhcWFxeFsADAg%2Byqra0FAAwNDQllygN55HI5jEZjqil5HcBPmerq6r%2Ft2LFjL8MwOclKSaVSlJWVQSKRIBQKwefzIRqNYufOnRsu3GTsmp6eFswUlmVht9ths9mQSCRQVVUFo9EImWzjF2OO4%2BROp1NPdXR0JAAsaLVat0ajeXzDCNyZxx6PBzdv3kROTg727t0LtVqdKgTRaBR2ux0A0NjYiJycpP22pkAggGvXrq11ml6vT7t%2Bp6en%2B10uVykhpIzq6OhoA%2FAegEqxWOxsamrKl8vllakShMNhDA8Pr1VqNpuRn5%2BfstJ0WlpaQm9v71pn1dTUpJ2S0Wh02mazTUajUTMAH4CXKUIILBaLDMAqh%2BiSkpIre%2FbsaWEYZsN5wfM8%2FH4%2FAoEAKIqCwWCAyWRKuWkkEyEEg4ODcLvdIIRArVZDo9Gk5ZDb7b4yNTW1xiEAb1mt1ns5ZLFYqnBntA5SFDVlNBqDu3btak7VoOXlZXg8HoTDYeTn56OlpUUwXEOhEPr6%2BrC0tASFQgG9Xo%2B8vLyUMeFweNDhcEg5jqsC8CWAl61Wa3IOrTP2HIDfA9iZk5PT29TUVJ6Tk7MrXeNGRkYghF0bMCWlkUQiMWe324cWFhZaAcwA%2BLnVav37%2FeU2PAq2WCyFALoAHAMQLSsrsxkMhpSPQ%2BnYJYApSeX3%2By%2BPjY3VANgG4AyATqvVOp%2BsbNrbB4vF0nw3SQPDMKP19fUxhUJhShWTjF0AMmEKAGBxcdFns9mWEolEHYABAMesVmt%2FqhhB1ykWi4UBcBzAbwHICwoKLjc2NtaKxeINX18JIZicnMTY2Bh4%2Fs6xGk3T0Gq1KC8vT7l5cBwXuX79et%2Fs7OzjAKIAfg3gtNVqTXvBltGFl8ViKQXwBwA%2FBPCdVqsd1mg0Sd90V7XKLgAZMwXAPwH8zGq1Cj7Iz%2BqO1WKxZMyudErGFKvV2p1pnqwvjbNhVzKlYko27Xroa%2F1s2LWqdEzJRpv2JUkm7BLKlGy0qZ%2FGCGFXJkzJRlvyNVYydkkkktxMmZKNtuzzsvvZBYADEEEGTMlGW%2F4B4Dp2ARkyJRv9F9vsxWD%2F43R9AAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%3A%200%20auto%3B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQsIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBtb2JpbGUtZnJpZW5kbHkgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTMsIFZsYWRpbWlyIEFnYWZvbmtpbgogKGMpIDIwMTAtMjAxMSwgQ2xvdWRNYWRlCiovCiFmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5MLG89e307by52ZXJzaW9uPSIwLjcuMyIsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bzoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUobyksby5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1uLHRoaXN9LHQuTD1vLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpPTAsbj1zLmxlbmd0aDtuPmk7aSsrKXtvPXNbaV18fHt9O2ZvcihlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmKHRbZV09b1tlXSl9cmV0dXJuIHR9LGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjI/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpfHxhcmd1bWVudHMpfX0sc3RhbXA6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9Il9sZWFmbGV0X2lkIjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGlbZV09aVtlXXx8Kyt0LGlbZV19fSgpLGludm9rZUVhY2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG87aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTtmb3IobiBpbiB0KWUuYXBwbHkoaSxbbix0W25dXS5jb25jYXQobykpO3JldHVybiEwfXJldHVybiExfSxsaW1pdEV4ZWNCeUludGVydmFsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbiBzKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuP3ZvaWQobz0hMCk6KG49ITAsc2V0VGltZW91dChmdW5jdGlvbigpe249ITEsbyYmKHMuYXBwbHkoaSxhKSxvPSExKX0sZSksdm9pZCB0LmFwcGx5KGksYSkpfX0sZmFsc2VGbjpmdW5jdGlvbigpe3JldHVybiExfSxmb3JtYXROdW06ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLnBvdygxMCxlfHw1KTtyZXR1cm4gTWF0aC5yb3VuZCh0KmkpL2l9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3BsaXRXb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gby5VdGlsLnRyaW0odCkuc3BsaXQoL1xzKy8pfSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQub3B0aW9ucz1vLmV4dGVuZCh7fSx0Lm9wdGlvbnMsZSksdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmLTEhPT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9ceyAqKFtcd19dKykgKlx9L2csZnVuY3Rpb24odCxuKXt2YXIgbz1lW25dO2lmKG89PT1pKXRocm93IG5ldyBFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICIrdCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8mJihvPW8oZSkpLG99KX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4sbz1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdO2ZvcihpPTA7aTxvLmxlbmd0aCYmIW47aSsrKW49dFtvW2ldK2VdO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIGk9K25ldyBEYXRlLG89TWF0aC5tYXgoMCwxNi0oaS1uKSk7cmV0dXJuIG49aStvLHQuc2V0VGltZW91dChlLG8pfXZhciBuPTAscz10LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZSgiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGksYT10LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlKCJDYW5jZWxBbmltYXRpb25GcmFtZSIpfHxlKCJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8ZnVuY3Rpb24oZSl7dC5jbGVhclRpbWVvdXQoZSl9O28uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKGUsbixhLHIpe3JldHVybiBlPW8uYmluZChlLG4pLGEmJnM9PT1pP3ZvaWQgZSgpOnMuY2FsbCh0LGUscil9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmYS5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbml0SG9va3MmJnRoaXMuY2FsbEluaXRIb29rcygpfSxpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10aGlzLnByb3RvdHlwZTt2YXIgbj1uZXcgaTtuLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGU9bjtmb3IodmFyIHMgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHMpJiYicHJvdG90eXBlIiE9PXMmJihlW3NdPXRoaXNbc10pO3Quc3RhdGljcyYmKG8uZXh0ZW5kKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoby5VdGlsLmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQodC5pbmNsdWRlcykpLGRlbGV0ZSB0LmluY2x1ZGVzKSx0Lm9wdGlvbnMmJm4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLmV4dGVuZCh7fSxuLm9wdGlvbnMsdC5vcHRpb25zKSksby5leHRlbmQobix0KSxuLl9pbml0SG9va3M9W107dmFyIGE9dGhpcztyZXR1cm4gZS5fX3N1cGVyX189YS5wcm90b3R5cGUsbi5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7YS5wcm90b3R5cGUuY2FsbEluaXRIb29rcyYmYS5wcm90b3R5cGUuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7ZT50O3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtvLmV4dGVuZCh0aGlzLnByb3RvdHlwZSx0KX0sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7by5leHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucyx0KX0sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTt0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpKX07dmFyIHM9Il9sZWFmbGV0X2V2ZW50cyI7by5NaXhpbj17fSxvLk1peGluLkV2ZW50cz17YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoby5VdGlsLmludm9rZUVhY2godCx0aGlzLmFkZEV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuLGEscixoLGwsdSxjLGQ9dGhpc1tzXT10aGlzW3NdfHx7fSxwPWkmJmkhPT10aGlzJiZvLnN0YW1wKGkpO2Zvcih0PW8uVXRpbC5zcGxpdFdvcmRzKHQpLG49MCxhPXQubGVuZ3RoO2E+bjtuKyspcj17YWN0aW9uOmUsY29udGV4dDppfHx0aGlzfSxoPXRbbl0scD8obD1oKyJfaWR4Iix1PWwrIl9sZW4iLGM9ZFtsXT1kW2xdfHx7fSxjW3BdfHwoY1twXT1bXSxkW3VdPShkW3VdfHwwKSsxKSxjW3BdLnB1c2gocikpOihkW2hdPWRbaF18fFtdLGRbaF0ucHVzaChyKSk7cmV0dXJuIHRoaXN9LGhhc0V2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXNbc107cmV0dXJuISFlJiYodCBpbiBlJiZlW3RdLmxlbmd0aD4wfHx0KyJfaWR4ImluIGUmJmVbdCsiX2lkeF9sZW4iXT4wKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoIXRoaXNbc10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO2lmKG8uVXRpbC5pbnZva2VFYWNoKHQsdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLHRoaXMsZSxpKSlyZXR1cm4gdGhpczt2YXIgbixhLHIsaCxsLHUsYyxkLHAsXz10aGlzW3NdLG09aSYmaSE9PXRoaXMmJm8uc3RhbXAoaSk7Zm9yKHQ9by5VdGlsLnNwbGl0V29yZHModCksbj0wLGE9dC5sZW5ndGg7YT5uO24rKylpZihyPXRbbl0sdT1yKyJfaWR4IixjPXUrIl9sZW4iLGQ9X1t1XSxlKXtpZihoPW0mJmQ/ZFttXTpfW3JdKXtmb3IobD1oLmxlbmd0aC0xO2w+PTA7bC0tKWhbbF0uYWN0aW9uIT09ZXx8aSYmaFtsXS5jb250ZXh0IT09aXx8KHA9aC5zcGxpY2UobCwxKSxwWzBdLmFjdGlvbj1vLlV0aWwuZmFsc2VGbik7aSYmZCYmMD09PWgubGVuZ3RoJiYoZGVsZXRlIGRbbV0sX1tjXS0tKX19ZWxzZSBkZWxldGUgX1tyXSxkZWxldGUgX1t1XSxkZWxldGUgX1tjXTtyZXR1cm4gdGhpc30sY2xlYXJBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpc1tzXSx0aGlzfSxmaXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNFdmVudExpc3RlbmVycyh0KSlyZXR1cm4gdGhpczt2YXIgaSxuLGEscixoLGw9by5VdGlsLmV4dGVuZCh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXN9KSx1PXRoaXNbc107aWYodVt0XSlmb3IoaT11W3RdLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKylpW25dLmFjdGlvbi5jYWxsKGlbbl0uY29udGV4dCxsKTtyPXVbdCsiX2lkeCJdO2ZvcihoIGluIHIpaWYoaT1yW2hdLnNsaWNlKCkpZm9yKG49MCxhPWkubGVuZ3RoO2E+bjtuKyspaVtuXS5hY3Rpb24uY2FsbChpW25dLmNvbnRleHQsbCk7cmV0dXJuIHRoaXN9LGFkZE9uZVRpbWVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXtpZihvLlV0aWwuaW52b2tlRWFjaCh0LHRoaXMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuPW8uYmluZChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4saSl9LHRoaXMpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLGkpLmFkZEV2ZW50TGlzdGVuZXIodCxuLGkpfX0sby5NaXhpbi5FdmVudHMub249by5NaXhpbi5FdmVudHMuYWRkRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vZmY9by5NaXhpbi5FdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vbmNlPW8uTWl4aW4uRXZlbnRzLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyLG8uTWl4aW4uRXZlbnRzLmZpcmU9by5NaXhpbi5FdmVudHMuZmlyZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIG49IkFjdGl2ZVhPYmplY3QiaW4gdCxzPW4mJiFlLmFkZEV2ZW50TGlzdGVuZXIsYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscj0tMSE9PWEuaW5kZXhPZigid2Via2l0IiksaD0tMSE9PWEuaW5kZXhPZigiY2hyb21lIiksbD0tMSE9PWEuaW5kZXhPZigicGhhbnRvbSIpLHU9LTEhPT1hLmluZGV4T2YoImFuZHJvaWQiKSxjPS0xIT09YS5zZWFyY2goImFuZHJvaWQgWzIzXSIpLGQ9LTEhPT1hLmluZGV4T2YoImdlY2tvIikscD10eXBlb2Ygb3JpZW50YXRpb24hPWkrIiIsXz10Lm5hdmlnYXRvciYmdC5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCYmdC5uYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyYmIXQuUG9pbnRlckV2ZW50LG09dC5Qb2ludGVyRXZlbnQmJnQubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkJiZ0Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8XyxmPSJkZXZpY2VQaXhlbFJhdGlvImluIHQmJnQuZGV2aWNlUGl4ZWxSYXRpbz4xfHwibWF0Y2hNZWRpYSJpbiB0JiZ0Lm1hdGNoTWVkaWEoIihtaW4tcmVzb2x1dGlvbjoxNDRkcGkpIikmJnQubWF0Y2hNZWRpYSgiKG1pbi1yZXNvbHV0aW9uOjE0NGRwaSkiKS5tYXRjaGVzLGc9ZS5kb2N1bWVudEVsZW1lbnQsdj1uJiYidHJhbnNpdGlvbiJpbiBnLnN0eWxlLHk9IldlYktpdENTU01hdHJpeCJpbiB0JiYibTExImluIG5ldyB0LldlYktpdENTU01hdHJpeCYmIWMsUD0iTW96UGVyc3BlY3RpdmUiaW4gZy5zdHlsZSxMPSJPVHJhbnNpdGlvbiJpbiBnLnN0eWxlLHg9IXQuTF9ESVNBQkxFXzNEJiYodnx8eXx8UHx8TCkmJiFsLHc9IXQuTF9OT19UT1VDSCYmIWwmJmZ1bmN0aW9uKCl7dmFyIHQ9Im9udG91Y2hzdGFydCI7aWYobXx8dCBpbiBnKXJldHVybiEwO3ZhciBpPWUuY3JlYXRlRWxlbWVudCgiZGl2Iiksbj0hMTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGU/KGkuc2V0QXR0cmlidXRlKHQsInJldHVybjsiKSwiZnVuY3Rpb24iPT10eXBlb2YgaVt0XSYmKG49ITApLGkucmVtb3ZlQXR0cmlidXRlKHQpLGk9bnVsbCxuKTohMX0oKTtvLkJyb3dzZXI9e2llOm4saWVsdDk6cyx3ZWJraXQ6cixnZWNrbzpkJiYhciYmIXQub3BlcmEmJiFuLGFuZHJvaWQ6dSxhbmRyb2lkMjM6YyxjaHJvbWU6aCxpZTNkOnYsd2Via2l0M2Q6eSxnZWNrbzNkOlAsb3BlcmEzZDpMLGFueTNkOngsbW9iaWxlOnAsbW9iaWxlV2Via2l0OnAmJnIsbW9iaWxlV2Via2l0M2Q6cCYmeSxtb2JpbGVPcGVyYTpwJiZ0Lm9wZXJhLHRvdWNoOncsbXNQb2ludGVyOl8scG9pbnRlcjptLHJldGluYTpmfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpfSxfZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dD1vLnBvaW50KHQpO3ZhciBlPXQueC10aGlzLngsaT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK2kqaSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLE1hdGguYWJzKHQueCk8PU1hdGguYWJzKHRoaXMueCkmJk1hdGguYWJzKHQueSk8PU1hdGguYWJzKHRoaXMueSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBvaW50KCIrby5VdGlsLmZvcm1hdE51bSh0aGlzLngpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLnkpKyIpIn19LG8ucG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb2ludD90Om8uVXRpbC5pc0FycmF5KHQpP25ldyBvLlBvaW50KHRbMF0sdFsxXSk6dD09PWl8fG51bGw9PT10P3Q6bmV3IG8uUG9pbnQodCxlLG4pfSxvLkJvdW5kcz1mdW5jdGlvbih0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtvPm47bisrKXRoaXMuZXh0ZW5kKGlbbl0pfSxvLkJvdW5kcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gdD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLlBvaW50P28ucG9pbnQodCk6by5ib3VuZHModCksdCBpbnN0YW5jZW9mIG8uQm91bmRzPyhlPXQubWluLGk9dC5tYXgpOmU9aT10LGUueD49dGhpcy5taW4ueCYmaS54PD10aGlzLm1heC54JiZlLnk+PXRoaXMubWluLnkmJmkueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PW8uYm91bmRzKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbixzPXQubWF4LGE9cy54Pj1lLngmJm4ueDw9aS54LHI9cy55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBhJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxvLmJvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/dDpuZXcgby5Cb3VuZHModCxlKX0sby5UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsaSxuKXt0aGlzLl9hPXQsdGhpcy5fYj1lLHRoaXMuX2M9aSx0aGlzLl9kPW59LG8uVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxlKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdC54PWUqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1lKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsbmV3IG8uUG9pbnQoKHQueC9lLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9lLXRoaXMuX2QpL3RoaXMuX2MpfX0sby5Eb21VdGlsPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuZ2V0RWxlbWVudEJ5SWQodCk6dH0sZ2V0U3R5bGU6ZnVuY3Rpb24odCxpKXt2YXIgbj10LnN0eWxlW2ldO2lmKCFuJiZ0LmN1cnJlbnRTdHlsZSYmKG49dC5jdXJyZW50U3R5bGVbaV0pLCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGdldFZpZXdwb3J0T2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBpLG49MCxzPTAsYT10LHI9ZS5ib2R5LGg9ZS5kb2N1bWVudEVsZW1lbnQ7ZG97aWYobis9YS5vZmZzZXRUb3B8fDAscys9YS5vZmZzZXRMZWZ0fHwwLG4rPXBhcnNlSW50KG8uRG9tVXRpbC5nZXRTdHlsZShhLCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCxzKz1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUoYSwiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwLGk9by5Eb21VdGlsLmdldFN0eWxlKGEsInBvc2l0aW9uIiksYS5vZmZzZXRQYXJlbnQ9PT1yJiYiYWJzb2x1dGUiPT09aSlicmVhaztpZigiZml4ZWQiPT09aSl7bis9ci5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wfHwwLHMrPXIuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0fHwwO2JyZWFrfWlmKCJyZWxhdGl2ZSI9PT1pJiYhYS5vZmZzZXRMZWZ0KXt2YXIgbD1vLkRvbVV0aWwuZ2V0U3R5bGUoYSwid2lkdGgiKSx1PW8uRG9tVXRpbC5nZXRTdHlsZShhLCJtYXgtd2lkdGgiKSxjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJub25lIiE9PWx8fCJub25lIiE9PXUpJiYocys9Yy5sZWZ0K2EuY2xpZW50TGVmdCksbis9Yy50b3ArKHIuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcHx8MCk7YnJlYWt9YT1hLm9mZnNldFBhcmVudH13aGlsZShhKTthPXQ7ZG97aWYoYT09PXIpYnJlYWs7bi09YS5zY3JvbGxUb3B8fDAscy09YS5zY3JvbGxMZWZ0fHwwLGE9YS5wYXJlbnROb2RlfXdoaWxlKGEpO3JldHVybiBuZXcgby5Qb2ludChzLG4pfSxkb2N1bWVudElzTHRyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5fZG9jSXNMdHJDYWNoZWR8fChvLkRvbVV0aWwuX2RvY0lzTHRyQ2FjaGVkPSEwLG8uRG9tVXRpbC5fZG9jSXNMdHI9Imx0ciI9PT1vLkRvbVV0aWwuZ2V0U3R5bGUoZS5ib2R5LCJkaXJlY3Rpb24iKSksby5Eb21VdGlsLl9kb2NJc0x0cn0sY3JlYXRlOmZ1bmN0aW9uKHQsaSxuKXt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG8uY2xhc3NOYW1lPWksbiYmbi5hcHBlbmRDaGlsZChvKSxvfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtyZXR1cm4gbi5sZW5ndGg+MCYmbmV3IFJlZ0V4cCgiKF58XFxzKSIrZSsiKFxcc3wkKSIpLnRlc3Qobil9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7aWYodC5jbGFzc0xpc3QhPT1pKWZvcih2YXIgbj1vLlV0aWwuc3BsaXRXb3JkcyhlKSxzPTAsYT1uLmxlbmd0aDthPnM7cysrKXQuY2xhc3NMaXN0LmFkZChuW3NdKTtlbHNlIGlmKCFvLkRvbVV0aWwuaGFzQ2xhc3ModCxlKSl7dmFyIHI9by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtvLkRvbVV0aWwuX3NldENsYXNzKHQsKHI/cisiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5fc2V0Q2xhc3ModCxvLlV0aWwudHJpbSgoIiAiK28uRG9tVXRpbC5fZ2V0Q2xhc3ModCkrIiAiKS5yZXBsYWNlKCIgIitlKyIgIiwiICIpKSl9LF9zZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxfZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCxlKXtpZigib3BhY2l0eSJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoImZpbHRlciJpbiB0LnN0eWxlKXt2YXIgaT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2k9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2gobyl7aWYoMT09PWUpcmV0dXJufWU9TWF0aC5yb3VuZCgxMDAqZSksaT8oaS5FbmFibGVkPTEwMCE9PWUsaS5PcGFjaXR5PWUpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIrZSsiKSJ9fSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxnZXRUcmFuc2xhdGVTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5Ccm93c2VyLndlYmtpdDNkLGk9InRyYW5zbGF0ZSIrKGU/IjNkIjoiIikrIigiLG49KGU/IiwwIjoiIikrIikiO3JldHVybiBpK3QueCsicHgsIit0LnkrInB4IitufSxnZXRTY2FsZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBpPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoZS5hZGQoZS5tdWx0aXBseUJ5KC0xKnQpKSksbj0iIHNjYWxlKCIrdCsiKSAiO3JldHVybiBpK259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxpKXt0Ll9sZWFmbGV0X3Bvcz1lLCFpJiZvLkJyb3dzZXIuYW55M2Q/dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGUpOih0LnN0eWxlLmxlZnQ9ZS54KyJweCIsdC5zdHlsZS50b3A9ZS55KyJweCIpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N9fSxvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09by5Eb21VdGlsLlRSQU5TSVRJT058fCJPVHJhbnNpdGlvbiI9PT1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLkRvbVV0aWwuVFJBTlNJVElPTisiRW5kIjoidHJhbnNpdGlvbmVuZCIsZnVuY3Rpb24oKXtpZigib25zZWxlY3RzdGFydCJpbiBlKW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KTtlbHNle3ZhciBpPW8uRG9tVXRpbC50ZXN0UHJvcChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO28uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZihpKXt2YXIgdD1lLmRvY3VtZW50RWxlbWVudC5zdHlsZTt0aGlzLl91c2VyU2VsZWN0PXRbaV0sdFtpXT0ibm9uZSJ9fSxlbmFibGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7aSYmKGUuZG9jdW1lbnRFbGVtZW50LnN0eWxlW2ldPXRoaXMuX3VzZXJTZWxlY3QsZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3QpfX0pfW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZUltYWdlRHJhZzpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlSW1hZ2VEcmFnOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KX0oKSxvLkxhdExuZz1mdW5jdGlvbih0LGUsbil7aWYodD1wYXJzZUZsb2F0KHQpLGU9cGFyc2VGbG9hdChlKSxpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9dCx0aGlzLmxuZz1lLG4hPT1pJiYodGhpcy5hbHQ9cGFyc2VGbG9hdChuKSl9LG8uZXh0ZW5kKG8uTGF0TG5nLHtERUdfVE9fUkFEOk1hdGguUEkvMTgwLFJBRF9UT19ERUc6MTgwL01hdGguUEksTUFYX01BUkdJTjoxZS05fSksby5MYXRMbmcucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgZT1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gZTw9by5MYXRMbmcuTUFYX01BUkdJTn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIkxhdExuZygiK28uVXRpbC5mb3JtYXROdW0odGhpcy5sYXQsdCkrIiwgIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubG5nLHQpKyIpIn0sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt0PW8ubGF0TG5nKHQpO3ZhciBlPTYzNzgxMzcsaT1vLkxhdExuZy5ERUdfVE9fUkFELG49KHQubGF0LXRoaXMubGF0KSppLHM9KHQubG5nLXRoaXMubG5nKSppLGE9dGhpcy5sYXQqaSxyPXQubGF0KmksaD1NYXRoLnNpbihuLzIpLGw9TWF0aC5zaW4ocy8yKSx1PWgqaCtsKmwqTWF0aC5jb3MoYSkqTWF0aC5jb3Mocik7cmV0dXJuIDIqZSpNYXRoLmF0YW4yKE1hdGguc3FydCh1KSxNYXRoLnNxcnQoMS11KSl9LHdyYXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmxuZztyZXR1cm4gdD10fHwtMTgwLGU9ZXx8MTgwLGk9KGkrZSklKGUtdCkrKHQ+aXx8aT09PWU/ZTp0KSxuZXcgby5MYXRMbmcodGhpcy5sYXQsaSl9fSxvLmxhdExuZz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmc/dDpvLlV0aWwuaXNBcnJheSh0KT8ibnVtYmVyIj09dHlwZW9mIHRbMF18fCJzdHJpbmciPT10eXBlb2YgdFswXT9uZXcgby5MYXRMbmcodFswXSx0WzFdLHRbMl0pOm51bGw6dD09PWl8fG51bGw9PT10P3Q6Im9iamVjdCI9PXR5cGVvZiB0JiYibGF0ImluIHQ/bmV3IG8uTGF0TG5nKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbik6ZT09PWk/bnVsbDpuZXcgby5MYXRMbmcodCxlKX0sby5MYXRMbmdCb3VuZHM9ZnVuY3Rpb24odCxlKXtpZih0KWZvcih2YXIgaT1lP1t0LGVdOnQsbj0wLG89aS5sZW5ndGg7bz5uO24rKyl0aGlzLmV4dGVuZChpW25dKX0sby5MYXRMbmdCb3VuZHMucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIGU9by5sYXRMbmcodCk7cmV0dXJuIHQ9bnVsbCE9PWU/ZTpvLmxhdExuZ0JvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5MYXRMbmc/dGhpcy5fc291dGhXZXN0fHx0aGlzLl9ub3J0aEVhc3Q/KHRoaXMuX3NvdXRoV2VzdC5sYXQ9TWF0aC5taW4odC5sYXQsdGhpcy5fc291dGhXZXN0LmxhdCksdGhpcy5fc291dGhXZXN0LmxuZz1NYXRoLm1pbih0LmxuZyx0aGlzLl9zb3V0aFdlc3QubG5nKSx0aGlzLl9ub3J0aEVhc3QubGF0PU1hdGgubWF4KHQubGF0LHRoaXMuX25vcnRoRWFzdC5sYXQpLHRoaXMuX25vcnRoRWFzdC5sbmc9TWF0aC5tYXgodC5sbmcsdGhpcy5fbm9ydGhFYXN0LmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSk6dCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzJiYodGhpcy5leHRlbmQodC5fc291dGhXZXN0KSx0aGlzLmV4dGVuZCh0Ll9ub3J0aEVhc3QpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQscz1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKG5ldyBvLkxhdExuZyhlLmxhdC1uLGUubG5nLXMpLG5ldyBvLkxhdExuZyhpLmxhdCtuLGkubG5nK3MpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZygodGhpcy5fc291dGhXZXN0LmxhdCt0aGlzLl9ub3J0aEVhc3QubGF0KS8yLCh0aGlzLl9zb3V0aFdlc3QubG5nK3RoaXMuX25vcnRoRWFzdC5sbmcpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291dGhXZXN0fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0fSxnZXROb3J0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygby5MYXRMbmc/by5sYXRMbmcodCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGUsaSxuPXRoaXMuX3NvdXRoV2VzdCxzPXRoaXMuX25vcnRoRWFzdDtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzPyhlPXQuZ2V0U291dGhXZXN0KCksaT10LmdldE5vcnRoRWFzdCgpKTplPWk9dCxlLmxhdD49bi5sYXQmJmkubGF0PD1zLmxhdCYmZS5sbmc+PW4ubG5nJiZpLmxuZzw9cy5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1vLmxhdExuZ0JvdW5kcyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHM9dC5nZXROb3J0aEVhc3QoKSxhPXMubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHI9cy5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIGEmJnJ9LHRvQkJveFN0cmluZzpmdW5jdGlvbigpe3JldHVyblt0aGlzLmdldFdlc3QoKSx0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCksdGhpcy5nZXROb3J0aCgpXS5qb2luKCIsIil9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD8odD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKTohMX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcj17TUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1vLkxhdExuZy5ERUdfVE9fUkFELGk9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihpLHQubGF0KSwtaSkscz10LmxuZyplLGE9biplO3JldHVybiBhPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxuZXcgby5Qb2ludChzLGEpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuUkFEX1RPX0RFRyxpPXQueCplLG49KDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueSkpLU1hdGguUEkvMikqZTtyZXR1cm4gbmV3IG8uTGF0TG5nKG4saSl9fSxvLlByb2plY3Rpb24uTG9uTGF0PXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHQueSx0LngpfX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAyNTYqTWF0aC5wb3coMix0KX0sZ2V0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjYWxlKHQpO3JldHVybiBvLnBvaW50KGUsZSl9fSxvLkNSUy5TaW1wbGU9by5leHRlbmQoe30sby5DUlMse3Byb2plY3Rpb246by5Qcm9qZWN0aW9uLkxvbkxhdCx0cmFuc2Zvcm1hdGlvbjpuZXcgby5UcmFuc2Zvcm1hdGlvbigxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9fSksby5DUlMuRVBTRzM4NTc9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6Mzg1NyIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uU3BoZXJpY2FsTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oLjUvTWF0aC5QSSwuNSwtLjUvTWF0aC5QSSwuNSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxpPTYzNzgxMzc7cmV0dXJuIGUubXVsdGlwbHlCeShpKX19KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUyx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8zNjAsLjUsLTEvMzYwLC41KX0pLG8uTWFwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntjcnM6by5DUlMuRVBTRzM4NTcsZmFkZUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsdHJhY2tSZXNpemU6ITAsbWFya2VyWm9vbUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1vLmJpbmQodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksZS5jZW50ZXImJmUuem9vbSE9PWkmJnRoaXMuc2V0VmlldyhvLmxhdExuZyhlLmNlbnRlciksZS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fdGlsZUxheWVyc051bT0wLHRoaXMuY2FsbEluaXRIb29rcygpLHRoaXMuX2FkZExheWVycyhlLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLmdldFpvb20oKTplLHRoaXMuX3Jlc2V0VmlldyhvLmxhdExuZyh0KSx0aGlzLl9saW1pdFpvb20oZSkpLHRoaXN9LHNldFpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3RoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHQse3pvb206ZX0pOih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbSh0KSx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tKyh0fHwxKSxlKX0sem9vbU91dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbS0odHx8MSksZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLHM9dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksYT10IGluc3RhbmNlb2Ygby5Qb2ludD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSxyPWEuc3VidHJhY3QocykubXVsdGlwbHlCeSgxLTEvbiksaD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocy5hZGQocikpO3JldHVybiB0aGlzLnNldFZpZXcoaCxlLHt6b29tOml9KX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGk9by5wb2ludChlLnBhZGRpbmdUb3BMZWZ0fHxlLnBhZGRpbmd8fFswLDBdKSxuPW8ucG9pbnQoZS5wYWRkaW5nQm90dG9tUmlnaHR8fGUucGFkZGluZ3x8WzAsMF0pLHM9dGhpcy5nZXRCb3VuZHNab29tKHQsITEsaS5hZGQobikpLGE9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLHMpLGg9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCkscyksbD10aGlzLnVucHJvamVjdChyLmFkZChoKS5kaXZpZGVCeSgyKS5hZGQoYSkscyk7cmV0dXJuIHM9ZSYmZS5tYXhab29tP01hdGgubWluKGUubWF4Wm9vbSxzKTpzLHRoaXMuc2V0VmlldyhsLHMsZSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHRoaXMuX3Jhd1BhbkJ5KG8ucG9pbnQodCkpLHRoaXMuZmlyZSgibW92ZSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHQ/KHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpKTp0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpfSxwYW5JbnNpZGVCb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLHQpO3JldHVybiBpLmVxdWFscyhuKT90aGlzOnRoaXMucGFuVG8obixlKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LCF0Lm9wdGlvbnN8fGlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5UaWxlTGF5ZXImJnQgaW5zdGFuY2VvZiBvLlRpbGVMYXllciYmKHRoaXMuX3RpbGVMYXllcnNOdW0rKyx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkKyssdC5vbigibG9hZCIsdGhpcy5fb25UaWxlTGF5ZXJMb2FkLHRoaXMpKSx0aGlzLl9sb2FkZWQmJnRoaXMuX2xheWVyQWRkKHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uVGlsZUxheWVyJiZ0IGluc3RhbmNlb2Ygby5UaWxlTGF5ZXImJih0aGlzLl90aWxlTGF5ZXJzTnVtLS0sdGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHQub2ZmKCJsb2FkIix0aGlzLl9vblRpbGVMYXllckxvYWQsdGhpcykpLHRoaXMpOnRoaXN9LGhhc0xheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0P28uc3RhbXAodClpbiB0aGlzLl9sYXllcnM6ITF9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PW8uZXh0ZW5kKHthbmltYXRlOiExLHBhbjohMH0sdD09PSEwP3thbmltYXRlOiEwfTp0KTt2YXIgZT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0aWFsQ2VudGVyPW51bGw7dmFyIGk9dGhpcy5nZXRTaXplKCksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksYT1uLnN1YnRyYWN0KHMpO3JldHVybiBhLnh8fGEueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KGEpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkoYSksdGhpcy5maXJlKCJtb3ZlIiksdC5kZWJvdW5jZU1vdmVlbmQ/KGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXMuX3NpemVUaW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciBpPXRoaXNbdF09bmV3IGUodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goaSksdGhpcy5vcHRpb25zW3RdJiZpLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJ1bmxvYWQiKSx0aGlzLl9pbml0RXZlbnRzKCJvZmYiKTt0cnl7ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXQ9aX1yZXR1cm4gdGhpcy5fY2xlYXJQYW5lcygpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fY2xlYXJIYW5kbGVycygpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5faW5pdGlhbENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5faW5pdGlhbENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tPT09aT8wOnRoaXMuX2xheWVyc01pblpvb206dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209PT1pP3RoaXMuX2xheWVyc01heFpvb209PT1pPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsZSxpKXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBuLHM9dGhpcy5nZXRNaW5ab29tKCktKGU/MTowKSxhPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dGhpcy5nZXRTaXplKCksaD10LmdldE5vcnRoV2VzdCgpLGw9dC5nZXRTb3V0aEVhc3QoKSx1PSEwO2k9by5wb2ludChpfHxbMCwwXSk7ZG8gcysrLG49dGhpcy5wcm9qZWN0KGwscykuc3VidHJhY3QodGhpcy5wcm9qZWN0KGgscykpLmFkZChpKSx1PWU/bi54PHIueHx8bi55PHIueTpyLmNvbnRhaW5zKG4pO3doaWxlKHUmJmE+PXMpO3JldHVybiB1JiZlP251bGw6ZT9zOnMtMX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybighdGhpcy5fc2l6ZXx8dGhpcy5fc2l6ZUNoYW5nZWQpJiYodGhpcy5fc2l6ZT1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUb3BMZWZ0UG9pbnQoKTtyZXR1cm4gbmV3IG8uQm91bmRzKHQsdC5hZGQodGhpcy5nZXRTaXplKCkpKX0sZ2V0UGl4ZWxPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2luaXRpYWxUb3BMZWZ0UG9pbnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZS5zY2FsZSh0KS9lLnNjYWxlKHRoaXMuX3pvb20pfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb20rTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KG8ubGF0TG5nKHQpLGUpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKG8ucG9pbnQodCksZSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChlKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvamVjdChvLmxhdExuZyh0KSkuX3JvdW5kKCk7cmV0dXJuIGUuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoby5wb2ludCh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGUpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KG8ubGF0TG5nKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50LmdldE1vdXNlUG9zaXRpb24odCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuIik7aWYoZS5fbGVhZmxldCl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iKTtlLl9sZWFmbGV0PSEwfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jb250YWluZXIiKyhvLkJyb3dzZXIudG91Y2g/IiBsZWFmbGV0LXRvdWNoIjoiIikrKG8uQnJvd3Nlci5yZXRpbmE/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhvLkJyb3dzZXIuaWVsdDk/IiBsZWFmbGV0LW9sZGllIjoiIikrKHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGU9by5Eb21VdGlsLmdldFN0eWxlKHQsInBvc2l0aW9uIik7ImFic29sdXRlIiE9PWUmJiJyZWxhdGl2ZSIhPT1lJiYiZml4ZWQiIT09ZSYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9tYXBQYW5lPXQubWFwUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcC1wYW5lIix0aGlzLl9jb250YWluZXIpLHRoaXMuX3RpbGVQYW5lPXQudGlsZVBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC10aWxlLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQub2JqZWN0c1BhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1vYmplY3RzLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQuc2hhZG93UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LXNoYWRvdy1wYW5lIiksdC5vdmVybGF5UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW92ZXJsYXktcGFuZSIpLHQubWFya2VyUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcmtlci1wYW5lIiksdC5wb3B1cFBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1wb3B1cC1wYW5lIik7dmFyIGU9IiBsZWFmbGV0LXpvb20taGlkZSI7dGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChvLkRvbVV0aWwuYWRkQ2xhc3ModC5tYXJrZXJQYW5lLGUpLG8uRG9tVXRpbC5hZGRDbGFzcyh0LnNoYWRvd1BhbmUsZSksby5Eb21VdGlsLmFkZENsYXNzKHQucG9wdXBQYW5lLGUpKX0sX2NyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0LGV8fHRoaXMuX3BhbmVzLm9iamVjdHNQYW5lKX0sX2NsZWFyUGFuZXM6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fbWFwUGFuZSl9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX3pvb20hPT1lO258fCh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHMmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IikpLHRoaXMuX3pvb209ZSx0aGlzLl9pbml0aWFsQ2VudGVyPXQsdGhpcy5faW5pdGlhbFRvcExlZnRQb2ludD10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQodCksaT90aGlzLl9pbml0aWFsVG9wTGVmdFBvaW50Ll9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKSx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkPXRoaXMuX3RpbGVMYXllcnNOdW07dmFyIGE9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJ2aWV3cmVzZXQiLHtoYXJkOiFpfSksYSYmKHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuZWFjaExheWVyKHRoaXMuX2xheWVyQWRkLHRoaXMpKSx0aGlzLmZpcmUoIm1vdmUiKSwoc3x8bikmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIse2hhcmQ6IWl9KX0sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdCxlPTEvMCxuPS0xLzAsbz10aGlzLl9nZXRab29tU3BhbigpO2Zvcih0IGluIHRoaXMuX3pvb21Cb3VuZExheWVycyl7dmFyIHM9dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3RdO2lzTmFOKHMub3B0aW9ucy5taW5ab29tKXx8KGU9TWF0aC5taW4oZSxzLm9wdGlvbnMubWluWm9vbSkpLGlzTmFOKHMub3B0aW9ucy5tYXhab29tKXx8KG49TWF0aC5tYXgobixzLm9wdGlvbnMubWF4Wm9vbSkpfXQ9PT1pP3RoaXMuX2xheWVyc01heFpvb209dGhpcy5fbGF5ZXJzTWluWm9vbT1pOih0aGlzLl9sYXllcnNNYXhab29tPW4sdGhpcy5fbGF5ZXJzTWluWm9vbT1lKSxvIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIil9LF9wYW5JbnNpZGVNYXhCb3VuZHM6ZnVuY3Rpb24oKXt0aGlzLnBhbkluc2lkZUJvdW5kcyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzKX0sX2NoZWNrSWZMb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU2V0IG1hcCBjZW50ZXIgYW5kIHpvb20gZmlyc3QuIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKGUpe2lmKG8uRG9tRXZlbnQpe2U9ZXx8Im9uIixvLkRvbUV2ZW50W2VdKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuX29uTW91c2VDbGljayx0aGlzKTt2YXIgaSxuLHM9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNldXAiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il07Zm9yKGk9MCxuPXMubGVuZ3RoO24+aTtpKyspby5Eb21FdmVudFtlXSh0aGlzLl9jb250YWluZXIsc1tpXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKTt0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUmJm8uRG9tRXZlbnRbZV0odCwicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKX19LF9vblJlc2l6ZTpmdW5jdGlvbigpe28uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbigpe3RoaXMuaW52YWxpZGF0ZVNpemUoe2RlYm91bmNlTW92ZWVuZDohMH0pfSx0aGlzLCExLHRoaXMuX2NvbnRhaW5lcil9LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24odCl7IXRoaXMuX2xvYWRlZHx8IXQuX3NpbXVsYXRlZCYmKHRoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcubW92ZWQoKXx8dGhpcy5ib3hab29tJiZ0aGlzLmJveFpvb20ubW92ZWQoKSl8fG8uRG9tRXZlbnQuX3NraXBwZWQodCl8fCh0aGlzLmZpcmUoInByZWNsaWNrIiksdGhpcy5fZmlyZU1vdXNlRXZlbnQodCkpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbG9hZGVkJiYhby5Eb21FdmVudC5fc2tpcHBlZCh0KSl7dmFyIGU9dC50eXBlO2lmKGU9Im1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VsZWF2ZSI9PT1lPyJtb3VzZW91dCI6ZSx0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKGUpKXsiY29udGV4dG1lbnUiPT09ZSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTt2YXIgaT10aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG49dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpKSxzPXRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKG4pO3RoaXMuZmlyZShlLHtsYXRsbmc6cyxsYXllclBvaW50Om4sY29udGFpbmVyUG9pbnQ6aSxvcmlnaW5hbEV2ZW50OnR9KX19fSxfb25UaWxlTGF5ZXJMb2FkOmZ1bmN0aW9uKCl7dGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHRoaXMuX3RpbGVMYXllcnNOdW0mJiF0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkJiZ0aGlzLmZpcmUoInRpbGVsYXllcnNsb2FkIil9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVycy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGV8fHRoaXMsdGhpcyk6dGhpcy5vbigibG9hZCIsdCxlKSx0aGlzfSxfbGF5ZXJBZGQ6ZnVuY3Rpb24odCl7dC5vbkFkZCh0aGlzKSx0aGlzLmZpcmUoImxheWVyYWRkIix7bGF5ZXI6dH0pfSxfZ2V0TWFwUGFuZVBvczpmdW5jdGlvbigpe3JldHVybiBvLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSl9LF9tb3ZlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldE1hcFBhbmVQb3MoKTtyZXR1cm4gdCYmIXQuZXF1YWxzKFswLDBdKX0sX2dldFRvcExlZnRQb2ludDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFBpeGVsT3JpZ2luKCkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1RvcExlZnRQb2ludDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsZSkuX3N1YnRyYWN0KGkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQoaSxlKS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtyZXR1cm4gdGhpcy5wcm9qZWN0KHQsZSkuX3N1YnRyYWN0KG4pfSxfZ2V0Q2VudGVyTGF5ZXJQb2ludDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKSl9LF9nZXRDZW50ZXJPZmZzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF0TG5nVG9MYXllclBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldENlbnRlckxheWVyUG9pbnQoKSl9LF9saW1pdENlbnRlcjpmdW5jdGlvbih0LGUsaSl7aWYoIWkpcmV0dXJuIHQ7dmFyIG49dGhpcy5wcm9qZWN0KHQsZSkscz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxhPW5ldyBvLkJvdW5kcyhuLnN1YnRyYWN0KHMpLG4uYWRkKHMpKSxyPXRoaXMuX2dldEJvdW5kc09mZnNldChhLGksZSk7cmV0dXJuIHRoaXMudW5wcm9qZWN0KG4uYWRkKHIpLGUpfSxfbGltaXRPZmZzZXQ6ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gdDt2YXIgaT10aGlzLmdldFBpeGVsQm91bmRzKCksbj1uZXcgby5Cb3VuZHMoaS5taW4uYWRkKHQpLGkubWF4LmFkZCh0KSk7cmV0dXJuIHQuYWRkKHRoaXMuX2dldEJvdW5kc09mZnNldChuLGUpKX0sX2dldEJvdW5kc09mZnNldDpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcy5wcm9qZWN0KGUuZ2V0Tm9ydGhXZXN0KCksaSkuc3VidHJhY3QodC5taW4pLHM9dGhpcy5wcm9qZWN0KGUuZ2V0U291dGhFYXN0KCksaSkuc3VidHJhY3QodC5tYXgpLGE9dGhpcy5fcmVib3VuZChuLngsLXMueCkscj10aGlzLl9yZWJvdW5kKG4ueSwtcy55KTtyZXR1cm4gbmV3IG8uUG9pbnQoYSxyKX0sX3JlYm91bmQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlPjA/TWF0aC5yb3VuZCh0LWUpLzI6TWF0aC5tYXgoMCxNYXRoLmNlaWwodCkpLU1hdGgubWF4KDAsTWF0aC5mbG9vcihlKSl9LF9saW1pdFpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRNaW5ab29tKCksaT10aGlzLmdldE1heFpvb20oKTtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbihpLHQpKX19KSxvLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXAodCxlKX0sby5Qcm9qZWN0aW9uLk1lcmNhdG9yPXtNQVhfTEFUSVRVREU6ODUuMDg0MDU5MTU1NixSX01JTk9SOjYzNTY3NTIuMzE0MjQ1MTc5LFJfTUFKT1I6NjM3ODEzNyxwcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPW8uTGF0TG5nLkRFR19UT19SQUQsaT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGksdC5sYXQpLC1pKSxzPXRoaXMuUl9NQUpPUixhPXRoaXMuUl9NSU5PUixyPXQubG5nKmUqcyxoPW4qZSxsPWEvcyx1PU1hdGguc3FydCgxLWwqbCksYz11Kk1hdGguc2luKGgpO2M9TWF0aC5wb3coKDEtYykvKDErYyksLjUqdSk7dmFyIGQ9TWF0aC50YW4oLjUqKC41Kk1hdGguUEktaCkpL2M7cmV0dXJuIGg9LXMqTWF0aC5sb2coZCksbmV3IG8uUG9pbnQocixoKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPW8uTGF0TG5nLlJBRF9UT19ERUcsbj10aGlzLlJfTUFKT1Iscz10aGlzLlJfTUlOT1IsYT10LngqaS9uLHI9cy9uLGg9TWF0aC5zcXJ0KDEtcipyKSxsPU1hdGguZXhwKC10LnkvbiksdT1NYXRoLlBJLzItMipNYXRoLmF0YW4obCksYz0xNSxkPTFlLTcscD1jLF89LjE7TWF0aC5hYnMoXyk+ZCYmLS1wPjA7KWU9aCpNYXRoLnNpbih1KSxfPU1hdGguUEkvMi0yKk1hdGguYXRhbihsKk1hdGgucG93KCgxLWUpLygxK2UpLC41KmgpKS11LHUrPV87CnJldHVybiBuZXcgby5MYXRMbmcodSppLGEpfX0sby5DUlMuRVBTRzMzOTU9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6MzM5NSIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgdD1vLlByb2plY3Rpb24uTWVyY2F0b3IsZT10LlJfTUFKT1IsaT0uNS8oTWF0aC5QSSplKTtyZXR1cm4gbmV3IG8uVHJhbnNmb3JtYXRpb24oaSwuNSwtaSwuNSl9KCl9KSxvLlRpbGVMYXllcj1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsb3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTgsdGlsZVNpemU6MjU2LHN1YmRvbWFpbnM6ImFiYyIsZXJyb3JUaWxlVXJsOiIiLGF0dHJpYnV0aW9uOiIiLHpvb21PZmZzZXQ6MCxvcGFjaXR5OjEsdW5sb2FkSW52aXNpYmxlVGlsZXM6by5Ccm93c2VyLm1vYmlsZSx1cGRhdGVXaGVuSWRsZTpvLkJyb3dzZXIubW9iaWxlfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSxlLmRldGVjdFJldGluYSYmby5Ccm93c2VyLnJldGluYSYmZS5tYXhab29tPjAmJihlLnRpbGVTaXplPU1hdGguZmxvb3IoZS50aWxlU2l6ZS8yKSxlLnpvb21PZmZzZXQrKyxlLm1pblpvb20+MCYmZS5taW5ab29tLS0sdGhpcy5vcHRpb25zLm1heFpvb20tLSksZS5ib3VuZHMmJihlLmJvdW5kcz1vLmxhdExuZ0JvdW5kcyhlLmJvdW5kcykpLHRoaXMuX3VybD10O3ZhciBpPXRoaXMub3B0aW9ucy5zdWJkb21haW5zOyJzdHJpbmciPT10eXBlb2YgaSYmKHRoaXMub3B0aW9ucy5zdWJkb21haW5zPWkuc3BsaXQoIiIpKX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fYW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2luaXRDb250YWluZXIoKSx0Lm9uKHt2aWV3cmVzZXQ6dGhpcy5fcmVzZXQsbW92ZWVuZDp0aGlzLl91cGRhdGV9LHRoaXMpLHRoaXMuX2FuaW1hdGVkJiZ0Lm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlWm9vbSx6b29tZW5kOnRoaXMuX2VuZFpvb21BbmltfSx0aGlzKSx0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9saW1pdGVkVXBkYXRlPW8uVXRpbC5saW1pdEV4ZWNCeUludGVydmFsKHRoaXMuX3VwZGF0ZSwxNTAsdGhpcyksdC5vbigibW92ZSIsdGhpcy5fbGltaXRlZFVwZGF0ZSx0aGlzKSksdGhpcy5fcmVzZXQoKSx0aGlzLl91cGRhdGUoKX0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LG1vdmVlbmQ6dGhpcy5fdXBkYXRlfSx0aGlzKSx0aGlzLl9hbmltYXRlZCYmdC5vZmYoe3pvb21hbmltOnRoaXMuX2FuaW1hdGVab29tLHpvb21lbmQ6dGhpcy5fZW5kWm9vbUFuaW19LHRoaXMpLHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8dC5vZmYoIm1vdmUiLHRoaXMuX2xpbWl0ZWRVcGRhdGUsdGhpcyksdGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fbWFwPW51bGx9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGFuZXMudGlsZVBhbmU7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KHQsTWF0aC5tYXgpKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGFuZXMudGlsZVBhbmU7cmV0dXJuIHRoaXMuX2NvbnRhaW5lciYmKHQuaW5zZXJ0QmVmb3JlKHRoaXMuX2NvbnRhaW5lcix0LmZpcnN0Q2hpbGQpLHRoaXMuX3NldEF1dG9aSW5kZXgodCxNYXRoLm1pbikpLHRoaXN9LGdldEF0dHJpYnV0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbn0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy56SW5kZXg9dCx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdXJsPXQsZXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVzZXQoe2hhcmQ6ITB9KSx0aGlzLl91cGRhdGUoKSksdGhpc30sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5vcHRpb25zLnpJbmRleCE9PWkmJih0aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfc2V0QXV0b1pJbmRleDpmdW5jdGlvbih0LGUpe3ZhciBpLG4sbyxzPXQuY2hpbGRyZW4sYT0tZSgxLzAsLTEvMCk7Zm9yKG49MCxvPXMubGVuZ3RoO28+bjtuKyspc1tuXSE9PXRoaXMuX2NvbnRhaW5lciYmKGk9cGFyc2VJbnQoc1tuXS5zdHlsZS56SW5kZXgsMTApLGlzTmFOKGkpfHwoYT1lKGEsaSkpKTt0aGlzLm9wdGlvbnMuekluZGV4PXRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9KGlzRmluaXRlKGEpP2E6MCkrZSgxLC0xKX0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3RpbGVzO2lmKG8uQnJvd3Nlci5pZWx0OSlmb3IodCBpbiBlKW8uRG9tVXRpbC5zZXRPcGFjaXR5KGVbdF0sdGhpcy5vcHRpb25zLm9wYWNpdHkpO2Vsc2Ugby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucy5vcGFjaXR5KX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLnRpbGVQYW5lO2lmKCF0aGlzLl9jb250YWluZXIpe2lmKHRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWxheWVyIiksdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpcy5fYW5pbWF0ZWQpe3ZhciBlPSJsZWFmbGV0LXRpbGUtY29udGFpbmVyIjt0aGlzLl9iZ0J1ZmZlcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUsdGhpcy5fY29udGFpbmVyKSx0aGlzLl90aWxlQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSx0aGlzLl9jb250YWluZXIpfWVsc2UgdGhpcy5fdGlsZUNvbnRhaW5lcj10aGlzLl9jb250YWluZXI7dC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKX19LF9yZXNldDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpdGhpcy5maXJlKCJ0aWxldW5sb2FkIix7dGlsZTp0aGlzLl90aWxlc1tlXX0pO3RoaXMuX3RpbGVzPXt9LHRoaXMuX3RpbGVzVG9Mb2FkPTAsdGhpcy5vcHRpb25zLnJldXNlVGlsZXMmJih0aGlzLl91bnVzZWRUaWxlcz1bXSksdGhpcy5fdGlsZUNvbnRhaW5lci5pbm5lckhUTUw9IiIsdGhpcy5fYW5pbWF0ZWQmJnQmJnQuaGFyZCYmdGhpcy5fY2xlYXJCZ0J1ZmZlcigpLHRoaXMuX2luaXRDb250YWluZXIoKX0sX2dldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRab29tKCkrdGhpcy5vcHRpb25zLnpvb21PZmZzZXQsaT10aGlzLm9wdGlvbnMubWF4TmF0aXZlWm9vbSxuPXRoaXMub3B0aW9ucy50aWxlU2l6ZTtyZXR1cm4gaSYmZT5pJiYobj1NYXRoLnJvdW5kKHQuZ2V0Wm9vbVNjYWxlKGUpL3QuZ2V0Wm9vbVNjYWxlKGkpKm4pKSxufSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAsZT10LmdldFBpeGVsQm91bmRzKCksaT10LmdldFpvb20oKSxuPXRoaXMuX2dldFRpbGVTaXplKCk7aWYoIShpPnRoaXMub3B0aW9ucy5tYXhab29tfHxpPHRoaXMub3B0aW9ucy5taW5ab29tKSl7dmFyIHM9by5ib3VuZHMoZS5taW4uZGl2aWRlQnkobikuX2Zsb29yKCksZS5tYXguZGl2aWRlQnkobikuX2Zsb29yKCkpO3RoaXMuX2FkZFRpbGVzRnJvbUNlbnRlck91dChzKSwodGhpcy5vcHRpb25zLnVubG9hZEludmlzaWJsZVRpbGVzfHx0aGlzLm9wdGlvbnMucmV1c2VUaWxlcykmJnRoaXMuX3JlbW92ZU90aGVyVGlsZXMocyl9fX0sX2FkZFRpbGVzRnJvbUNlbnRlck91dDpmdW5jdGlvbih0KXt2YXIgaSxuLHMsYT1bXSxyPXQuZ2V0Q2VudGVyKCk7Zm9yKGk9dC5taW4ueTtpPD10Lm1heC55O2krKylmb3Iobj10Lm1pbi54O248PXQubWF4Lng7bisrKXM9bmV3IG8uUG9pbnQobixpKSx0aGlzLl90aWxlU2hvdWxkQmVMb2FkZWQocykmJmEucHVzaChzKTt2YXIgaD1hLmxlbmd0aDtpZigwIT09aCl7YS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2VUbyhyKS1lLmRpc3RhbmNlVG8ocil9KTt2YXIgbD1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodGhpcy5fdGlsZXNUb0xvYWR8fHRoaXMuZmlyZSgibG9hZGluZyIpLHRoaXMuX3RpbGVzVG9Mb2FkKz1oLG49MDtoPm47bisrKXRoaXMuX2FkZFRpbGUoYVtuXSxsKTt0aGlzLl90aWxlQ29udGFpbmVyLmFwcGVuZENoaWxkKGwpfX0sX3RpbGVTaG91bGRCZUxvYWRlZDpmdW5jdGlvbih0KXtpZih0LngrIjoiK3QueSBpbiB0aGlzLl90aWxlcylyZXR1cm4hMTt2YXIgZT10aGlzLm9wdGlvbnM7aWYoIWUuY29udGludW91c1dvcmxkKXt2YXIgaT10aGlzLl9nZXRXcmFwVGlsZU51bSgpO2lmKGUubm9XcmFwJiYodC54PDB8fHQueD49aS54KXx8dC55PDB8fHQueT49aS55KXJldHVybiExfWlmKGUuYm91bmRzKXt2YXIgbj1lLnRpbGVTaXplLG89dC5tdWx0aXBseUJ5KG4pLHM9by5hZGQoW24sbl0pLGE9dGhpcy5fbWFwLnVucHJvamVjdChvKSxyPXRoaXMuX21hcC51bnByb2plY3Qocyk7aWYoZS5jb250aW51b3VzV29ybGR8fGUubm9XcmFwfHwoYT1hLndyYXAoKSxyPXIud3JhcCgpKSwhZS5ib3VuZHMuaW50ZXJzZWN0cyhbYSxyXSkpcmV0dXJuITF9cmV0dXJuITB9LF9yZW1vdmVPdGhlclRpbGVzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvO2ZvcihvIGluIHRoaXMuX3RpbGVzKWU9by5zcGxpdCgiOiIpLGk9cGFyc2VJbnQoZVswXSwxMCksbj1wYXJzZUludChlWzFdLDEwKSwoaTx0Lm1pbi54fHxpPnQubWF4Lnh8fG48dC5taW4ueXx8bj50Lm1heC55KSYmdGhpcy5fcmVtb3ZlVGlsZShvKX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07dGhpcy5maXJlKCJ0aWxldW5sb2FkIix7dGlsZTplLHVybDplLnNyY30pLHRoaXMub3B0aW9ucy5yZXVzZVRpbGVzPyhvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZSwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuX3VudXNlZFRpbGVzLnB1c2goZSkpOmUucGFyZW50Tm9kZT09PXRoaXMuX3RpbGVDb250YWluZXImJnRoaXMuX3RpbGVDb250YWluZXIucmVtb3ZlQ2hpbGQoZSksby5Ccm93c2VyLmFuZHJvaWR8fChlLm9ubG9hZD1udWxsLGUuc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsKSxkZWxldGUgdGhpcy5fdGlsZXNbdF19LF9hZGRUaWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0VGlsZVBvcyh0KSxuPXRoaXMuX2dldFRpbGUoKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixpLG8uQnJvd3Nlci5jaHJvbWUpLHRoaXMuX3RpbGVzW3QueCsiOiIrdC55XT1uLHRoaXMuX2xvYWRUaWxlKG4sdCksbi5wYXJlbnROb2RlIT09dGhpcy5fdGlsZUNvbnRhaW5lciYmZS5hcHBlbmRDaGlsZChuKX0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10aGlzLl9tYXAuZ2V0Wm9vbSgpO3JldHVybiB0Lnpvb21SZXZlcnNlJiYoZT10Lm1heFpvb20tZSksZSs9dC56b29tT2Zmc2V0LHQubWF4TmF0aXZlWm9vbT9NYXRoLm1pbihlLHQubWF4TmF0aXZlWm9vbSk6ZX0sX2dldFRpbGVQb3M6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldFBpeGVsT3JpZ2luKCksaT10aGlzLl9nZXRUaWxlU2l6ZSgpO3JldHVybiB0Lm11bHRpcGx5QnkoaSkuc3VidHJhY3QoZSl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7cmV0dXJuIG8uVXRpbC50ZW1wbGF0ZSh0aGlzLl91cmwsby5leHRlbmQoe3M6dGhpcy5fZ2V0U3ViZG9tYWluKHQpLHo6dC56LHg6dC54LHk6dC55fSx0aGlzLm9wdGlvbnMpKX0sX2dldFdyYXBUaWxlTnVtOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLm9wdGlvbnMuY3JzLGU9dC5nZXRTaXplKHRoaXMuX21hcC5nZXRab29tKCkpO3JldHVybiBlLmRpdmlkZUJ5KHRoaXMuX2dldFRpbGVTaXplKCkpLl9mbG9vcigpfSxfYWRqdXN0VGlsZVBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldFdyYXBUaWxlTnVtKCk7dGhpcy5vcHRpb25zLmNvbnRpbnVvdXNXb3JsZHx8dGhpcy5vcHRpb25zLm5vV3JhcHx8KHQueD0odC54JWUueCtlLngpJWUueCksdGhpcy5vcHRpb25zLnRtcyYmKHQueT1lLnktdC55LTEpLHQuej10aGlzLl9nZXRab29tRm9yVXJsKCl9LF9nZXRTdWJkb21haW46ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hYnModC54K3QueSkldGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO3JldHVybiB0aGlzLm9wdGlvbnMuc3ViZG9tYWluc1tlXX0sX2dldFRpbGU6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMucmV1c2VUaWxlcyYmdGhpcy5fdW51c2VkVGlsZXMubGVuZ3RoPjApe3ZhciB0PXRoaXMuX3VudXNlZFRpbGVzLnBvcCgpO3JldHVybiB0aGlzLl9yZXNldFRpbGUodCksdH1yZXR1cm4gdGhpcy5fY3JlYXRlVGlsZSgpfSxfcmVzZXRUaWxlOmZ1bmN0aW9uKCl7fSxfY3JlYXRlVGlsZTpmdW5jdGlvbigpe3ZhciB0PW8uRG9tVXRpbC5jcmVhdGUoImltZyIsImxlYWZsZXQtdGlsZSIpO3JldHVybiB0LnN0eWxlLndpZHRoPXQuc3R5bGUuaGVpZ2h0PXRoaXMuX2dldFRpbGVTaXplKCkrInB4Iix0LmdhbGxlcnlpbWc9Im5vIix0Lm9uc2VsZWN0c3RhcnQ9dC5vbm1vdXNlbW92ZT1vLlV0aWwuZmFsc2VGbixvLkJyb3dzZXIuaWVsdDkmJnRoaXMub3B0aW9ucy5vcGFjaXR5IT09aSYmby5Eb21VdGlsLnNldE9wYWNpdHkodCx0aGlzLm9wdGlvbnMub3BhY2l0eSksby5Ccm93c2VyLm1vYmlsZVdlYmtpdDNkJiYodC5zdHlsZS5XZWJraXRCYWNrZmFjZVZpc2liaWxpdHk9ImhpZGRlbiIpLHR9LF9sb2FkVGlsZTpmdW5jdGlvbih0LGUpe3QuX2xheWVyPXRoaXMsdC5vbmxvYWQ9dGhpcy5fdGlsZU9uTG9hZCx0Lm9uZXJyb3I9dGhpcy5fdGlsZU9uRXJyb3IsdGhpcy5fYWRqdXN0VGlsZVBvaW50KGUpLHQuc3JjPXRoaXMuZ2V0VGlsZVVybChlKSx0aGlzLmZpcmUoInRpbGVsb2Fkc3RhcnQiLHt0aWxlOnQsdXJsOnQuc3JjfSl9LF90aWxlTG9hZGVkOmZ1bmN0aW9uKCl7dGhpcy5fdGlsZXNUb0xvYWQtLSx0aGlzLl9hbmltYXRlZCYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3RpbGVDb250YWluZXIsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLHRoaXMuX3RpbGVzVG9Mb2FkfHwodGhpcy5maXJlKCJsb2FkIiksdGhpcy5fYW5pbWF0ZWQmJihjbGVhclRpbWVvdXQodGhpcy5fY2xlYXJCZ0J1ZmZlclRpbWVyKSx0aGlzLl9jbGVhckJnQnVmZmVyVGltZXI9c2V0VGltZW91dChvLmJpbmQodGhpcy5fY2xlYXJCZ0J1ZmZlcix0aGlzKSw1MDApKSl9LF90aWxlT25Mb2FkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF5ZXI7dGhpcy5zcmMhPT1vLlV0aWwuZW1wdHlJbWFnZVVybCYmKG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLCJsZWFmbGV0LXRpbGUtbG9hZGVkIiksdC5maXJlKCJ0aWxlbG9hZCIse3RpbGU6dGhpcyx1cmw6dGhpcy5zcmN9KSksdC5fdGlsZUxvYWRlZCgpfSxfdGlsZU9uRXJyb3I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9sYXllcjt0LmZpcmUoInRpbGVlcnJvciIse3RpbGU6dGhpcyx1cmw6dGhpcy5zcmN9KTt2YXIgZT10Lm9wdGlvbnMuZXJyb3JUaWxlVXJsO2UmJih0aGlzLnNyYz1lKSx0Ll90aWxlTG9hZGVkKCl9fSksby50aWxlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyKHQsZSl9LG8uVGlsZUxheWVyLldNUz1vLlRpbGVMYXllci5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIix2ZXJzaW9uOiIxLjEuMSIsbGF5ZXJzOiIiLHN0eWxlczoiIixmb3JtYXQ6ImltYWdlL2pwZWciLHRyYW5zcGFyZW50OiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7dGhpcy5fdXJsPXQ7dmFyIGk9by5leHRlbmQoe30sdGhpcy5kZWZhdWx0V21zUGFyYW1zKSxuPWUudGlsZVNpemV8fHRoaXMub3B0aW9ucy50aWxlU2l6ZTtpLndpZHRoPWkuaGVpZ2h0PWUuZGV0ZWN0UmV0aW5hJiZvLkJyb3dzZXIucmV0aW5hPzIqbjpuO2Zvcih2YXIgcyBpbiBlKXRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShzKXx8ImNycyI9PT1zfHwoaVtzXT1lW3NdKTt0aGlzLndtc1BhcmFtcz1pLG8uc2V0T3B0aW9ucyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5vcHRpb25zLnRpbGVTaXplLG49dC5tdWx0aXBseUJ5KGkpLHM9bi5hZGQoW2ksaV0pLGE9dGhpcy5fY3JzLnByb2plY3QoZS51bnByb2plY3Qobix0LnopKSxyPXRoaXMuX2Nycy5wcm9qZWN0KGUudW5wcm9qZWN0KHMsdC56KSksaD10aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tyLnksYS54LGEueSxyLnhdLmpvaW4oIiwiKTpbYS54LHIueSxyLngsYS55XS5qb2luKCIsIiksbD1vLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KX0pO3JldHVybiBsK28uVXRpbC5nZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcyxsLCEwKSsiJkJCT1g9IitofSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmQodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pLG8udGlsZUxheWVyLndtcz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5UaWxlTGF5ZXIuV01TKHQsZSl9LG8uVGlsZUxheWVyLkNhbnZhcz1vLlRpbGVMYXllci5leHRlbmQoe29wdGlvbnM6e2FzeW5jOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVkcmF3VGlsZSh0aGlzLl90aWxlc1t0XSk7cmV0dXJuIHRoaXN9LF9yZWRyYXdUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhd1RpbGUodCx0Ll90aWxlUG9pbnQsdGhpcy5fbWFwLl96b29tKX0sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJjYW52YXMiLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC53aWR0aD10LmhlaWdodD10aGlzLm9wdGlvbnMudGlsZVNpemUsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sdH0sX2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dC5fbGF5ZXI9dGhpcyx0Ll90aWxlUG9pbnQ9ZSx0aGlzLl9yZWRyYXdUaWxlKHQpLHRoaXMub3B0aW9ucy5hc3luY3x8dGhpcy50aWxlRHJhd24odCl9LGRyYXdUaWxlOmZ1bmN0aW9uKCl7fSx0aWxlRHJhd246ZnVuY3Rpb24odCl7dGhpcy5fdGlsZU9uTG9hZC5jYWxsKHQpfX0pLG8udGlsZUxheWVyLmNhbnZhcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyLkNhbnZhcyh0KX0sby5JbWFnZU92ZXJsYXk9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLG9wdGlvbnM6e29wYWNpdHk6MX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPW8ubGF0TG5nQm91bmRzKGUpLG8uc2V0T3B0aW9ucyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9pbWFnZXx8dGhpcy5faW5pdEltYWdlKCksdC5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHQub24oInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWFnZSksdC5vZmYoInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZSYmdGhpcy5fbWFwLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLm92ZXJsYXlQYW5lO3JldHVybiB0aGlzLl9pbWFnZSYmdC5pbnNlcnRCZWZvcmUodGhpcy5faW1hZ2UsdC5maXJzdENoaWxkKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7dGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXRoaXMuX3VybH0sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2U9by5Eb21VdGlsLmNyZWF0ZSgiaW1nIiwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faW1hZ2UsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpOm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9pbWFnZSwibGVhZmxldC16b29tLWhpZGUiKSx0aGlzLl91cGRhdGVPcGFjaXR5KCksby5leHRlbmQodGhpcy5faW1hZ2Use2dhbGxlcnlpbWc6Im5vIixvbnNlbGVjdHN0YXJ0Om8uVXRpbC5mYWxzZUZuLG9ubW91c2Vtb3ZlOm8uVXRpbC5mYWxzZUZuLG9ubG9hZDpvLmJpbmQodGhpcy5fb25JbWFnZUxvYWQsdGhpcyksc3JjOnRoaXMuX3VybH0pfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5faW1hZ2Usbj1lLmdldFpvb21TY2FsZSh0Lnpvb20pLHM9dGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpLGE9dGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpLHI9ZS5fbGF0TG5nVG9OZXdMYXllclBvaW50KHMsdC56b29tLHQuY2VudGVyKSxoPWUuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludChhLHQuem9vbSx0LmNlbnRlcikuX3N1YnRyYWN0KHIpLGw9ci5fYWRkKGguX211bHRpcGx5QnkoLjUqKDEtMS9uKSkpO2kuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyhsKSsiIHNjYWxlKCIrbisiKSAifSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKS5fc3VidHJhY3QoZSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksdC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4In0sX29uSW1hZ2VMb2FkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJsb2FkIil9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfX0pLG8uaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uSW1hZ2VPdmVybGF5KHQsZSxpKX0sby5JY29uPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighaSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG47cmV0dXJuIG49ZSYmIklNRyI9PT1lLnRhZ05hbWU/dGhpcy5fY3JlYXRlSW1nKGksZSk6dGhpcy5fY3JlYXRlSW1nKGkpLHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLHM9by5wb2ludChuW2UrIlNpemUiXSk7aT1vLnBvaW50KCJzaGFkb3ciPT09ZT9uLnNoYWRvd0FuY2hvcnx8bi5pY29uQW5jaG9yOm4uaWNvbkFuY2hvciksIWkmJnMmJihpPXMuZGl2aWRlQnkoMiwhMCkpLHQuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiK24uY2xhc3NOYW1lLGkmJih0LnN0eWxlLm1hcmdpbkxlZnQ9LWkueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1pLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl0/dGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdOnRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXt2YXIgZT10KyJVcmwiO2lmKHRoaXMub3B0aW9uc1tlXSlyZXR1cm4gdGhpcy5vcHRpb25zW2VdO28uQnJvd3Nlci5yZXRpbmEmJiJpY29uIj09PXQmJih0Kz0iLTJ4Iik7dmFyIGk9by5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgYXV0b2RldGVjdCBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGgsIHNldCBpdCBtYW51YWxseS4iKTtyZXR1cm4gaSsiL21hcmtlci0iK3QrIi5wbmcifX0pLG8uSWNvbi5EZWZhdWx0LmltYWdlUGF0aD1mdW5jdGlvbigpe3ZhciB0LGksbixvLHMsYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxyPS9bXC9eXWxlYWZsZXRbXC1cLl9dPyhbXHdcLVwuX10qKVwuanNcPz8vO2Zvcih0PTAsaT1hLmxlbmd0aDtpPnQ7dCsrKWlmKG49YVt0XS5zcmMsbz1uLm1hdGNoKHIpKXJldHVybiBzPW4uc3BsaXQocilbMF0sKHM/cysiLyI6IiIpKyJpbWFnZXMifSgpLG8uTWFya2VyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntpY29uOm5ldyBvLkljb24uRGVmYXVsdCx0aXRsZToiIixhbHQ6IiIsY2xpY2thYmxlOiEwLGRyYWdnYWJsZTohMSxrZXlib2FyZDohMCx6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHQub24oInZpZXdyZXNldCIsdGhpcy51cGRhdGUsdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgiYWRkIiksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKSx0aGlzLmZpcmUoInJlbW92ZSIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy51cGRhdGUsem9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb219LHRoaXMpLHRoaXMuX21hcD1udWxsfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse2xhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxzZXRJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbj10LHRoaXMuX21hcCYmKHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKSksdGhpcy5fcG9wdXAmJnRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pY29uKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZykucm91bmQoKTt0aGlzLl9zZXRQb3ModCl9cmV0dXJuIHRoaXN9LF9pbml0SWNvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPXRoaXMuX21hcCxpPWUub3B0aW9ucy56b29tQW5pbWF0aW9uJiZlLm9wdGlvbnMubWFya2VyWm9vbUFuaW1hdGlvbixuPWk/ImxlYWZsZXQtem9vbS1hbmltYXRlZCI6ImxlYWZsZXQtem9vbS1oaWRlIixzPXQuaWNvbi5jcmVhdGVJY29uKHRoaXMuX2ljb24pLGE9ITE7cyE9PXRoaXMuX2ljb24mJih0aGlzLl9pY29uJiZ0aGlzLl9yZW1vdmVJY29uKCksYT0hMCx0LnRpdGxlJiYocy50aXRsZT10LnRpdGxlKSx0LmFsdCYmKHMuYWx0PXQuYWx0KSksby5Eb21VdGlsLmFkZENsYXNzKHMsbiksdC5rZXlib2FyZCYmKHMudGFiSW5kZXg9IjAiKSx0aGlzLl9pY29uPXMsdGhpcy5faW5pdEludGVyYWN0aW9uKCksdC5yaXNlT25Ib3ZlciYmby5Eb21FdmVudC5vbihzLCJtb3VzZW92ZXIiLHRoaXMuX2JyaW5nVG9Gcm9udCx0aGlzKS5vbihzLCJtb3VzZW91dCIsdGhpcy5fcmVzZXRaSW5kZXgsdGhpcyk7dmFyIHI9dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLGg9ITE7ciE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLGg9ITApLHImJm8uRG9tVXRpbC5hZGRDbGFzcyhyLG4pLHRoaXMuX3NoYWRvdz1yLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCk7dmFyIGw9dGhpcy5fbWFwLl9wYW5lczthJiZsLm1hcmtlclBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksciYmaCYmbC5zaGFkb3dQYW5lLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZvLkRvbUV2ZW50Lm9mZih0aGlzLl9pY29uLCJtb3VzZW92ZXIiLHRoaXMuX2JyaW5nVG9Gcm9udCkub2ZmKHRoaXMuX2ljb24sIm1vdXNlb3V0Iix0aGlzLl9yZXNldFpJbmRleCksdGhpcy5fbWFwLl9wYW5lcy5tYXJrZXJQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2ljb249bnVsbH0sX3JlbW92ZVNoYWRvdzpmdW5jdGlvbigpe3RoaXMuX3NoYWRvdyYmdGhpcy5fbWFwLl9wYW5lcy5zaGFkb3dQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX3NoYWRvdyksdGhpcy5fc2hhZG93PW51bGx9LF9zZXRQb3M6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoZSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuY2xpY2thYmxlKXt2YXIgdD10aGlzLl9pY29uLGU9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSxvLkRvbUV2ZW50Lm9uKHQsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyksby5Eb21FdmVudC5vbih0LCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyx0aGlzKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylvLkRvbUV2ZW50Lm9uKHQsZVtpXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKTtvLkhhbmRsZXIuTWFya2VyRHJhZyYmKHRoaXMuZHJhZ2dpbmc9bmV3IG8uSGFuZGxlci5NYXJrZXJEcmFnKHRoaXMpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJnRoaXMuZHJhZ2dpbmcuZW5hYmxlKCkpfX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLm1vdmVkKCk7KHRoaXMuaGFzRXZlbnRMaXN0ZW5lcnModC50eXBlKXx8ZSkmJm8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpLGV8fCh0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLl9lbmFibGVkfHwhdGhpcy5fbWFwLmRyYWdnaW5nfHwhdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCkpJiZ0aGlzLmZpcmUodC50eXBlLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxfb25LZXlQcmVzczpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmdGhpcy5maXJlKCJjbGljayIse29yaWdpbmFsRXZlbnQ6dCxsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LF9maXJlTW91c2VFdmVudDpmdW5jdGlvbih0KXt0aGlzLmZpcmUodC50eXBlLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pLCJjb250ZXh0bWVudSI9PT10LnR5cGUmJnRoaXMuaGFzRXZlbnRMaXN0ZW5lcnModC50eXBlKSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSwibW91c2Vkb3duIiE9PXQudHlwZT9vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbih0KTpvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faWNvbix0aGlzLm9wdGlvbnMub3BhY2l0eSksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9zaGFkb3csdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfX0pLG8ubWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk1hcmtlcih0LGUpfSxvLkRpdkljb249by5JY29uLmV4dGVuZCh7b3B0aW9uczp7aWNvblNpemU6WzEyLDEyXSxjbGFzc05hbWU6ImxlYWZsZXQtZGl2LWljb24iLGh0bWw6ITF9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGk9dCYmIkRJViI9PT10LnRhZ05hbWU/dDplLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dGhpcy5vcHRpb25zO3JldHVybiBpLmlubmVySFRNTD1uLmh0bWwhPT0hMT9uLmh0bWw6IiIsbi5iZ1BvcyYmKGkuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1uLmJnUG9zLngrInB4ICIrLW4uYmdQb3MueSsicHgiKSx0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxvLmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkRpdkljb24odCl9LG8uTWFwLm1lcmdlT3B0aW9ucyh7Y2xvc2VQb3B1cE9uQ2xpY2s6ITB9KSxvLlBvcHVwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOnttaW5XaWR0aDo1MCxtYXhXaWR0aDozMDAsYXV0b1BhbjohMCxjbG9zZUJ1dHRvbjohMCxvZmZzZXQ6WzAsN10sYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbGFzc05hbWU6IiIsem9vbUFuaW1hdGlvbjohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX3NvdXJjZT1lLHRoaXMuX2FuaW1hdGVkPW8uQnJvd3Nlci5hbnkzZCYmdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24sdGhpcy5faXNPcGVuPSExfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXJ8fHRoaXMuX2luaXRMYXlvdXQoKTt2YXIgZT10Lm9wdGlvbnMuZmFkZUFuaW1hdGlvbjtlJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMCksdC5fcGFuZXMucG9wdXBQYW5lLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdC5vbih0aGlzLl9nZXRFdmVudHMoKSx0aGlzKSx0aGlzLnVwZGF0ZSgpLGUmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwxKSx0aGlzLmZpcmUoIm9wZW4iKSx0LmZpcmUoInBvcHVwb3BlbiIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9wZW5PbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGVuUG9wdXAodGhpcyksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fcGFuZXMucG9wdXBQYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksby5VdGlsLmZhbHNlRm4odGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoKSx0Lm9mZih0aGlzLl9nZXRFdmVudHMoKSx0aGlzKSx0Lm9wdGlvbnMuZmFkZUFuaW1hdGlvbiYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLDApLHRoaXMuX21hcD1udWxsLHRoaXMuZmlyZSgiY2xvc2UiKSx0LmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBjbG9zZSIse3BvcHVwOnRoaXN9KX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9hZGp1c3RQYW4oKSksdGhpc30sZ2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxzZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jb250ZW50PXQsdGhpcy51cGRhdGUoKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl91cGRhdGVDb250ZW50KCksdGhpcy5fdXBkYXRlTGF5b3V0KCksdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iIix0aGlzLl9hZGp1c3RQYW4oKSl9LF9nZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3VwZGF0ZVBvc2l0aW9ufTtyZXR1cm4gdGhpcy5fYW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX3pvb21BbmltYXRpb24pLCgiY2xvc2VPbkNsaWNrImluIHRoaXMub3B0aW9ucz90aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrOnRoaXMuX21hcC5vcHRpb25zLmNsb3NlUG9wdXBPbkNsaWNrKSYmKHQucHJlY2xpY2s9dGhpcy5fY2xvc2UpLHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3JiYodC5tb3ZlZW5kPXRoaXMuX2FkanVzdFBhbiksdH0sX2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl9tYXAuY2xvc2VQb3B1cCh0aGlzKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdCxlPSJsZWFmbGV0LXBvcHVwIixpPWUrIiAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWUrIiBsZWFmbGV0LXpvb20tIisodGhpcy5fYW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpLG49dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsaSk7dGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodD10aGlzLl9jbG9zZUJ1dHRvbj1vLkRvbVV0aWwuY3JlYXRlKCJhIixlKyItY2xvc2UtYnV0dG9uIixuKSx0LmhyZWY9IiNjbG9zZSIsdC5pbm5lckhUTUw9IiYjMjE1OyIsby5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbih0KSxvLkRvbUV2ZW50Lm9uKHQsImNsaWNrIix0aGlzLl9vbkNsb3NlQnV0dG9uQ2xpY2ssdGhpcykpO3ZhciBzPXRoaXMuX3dyYXBwZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyItY29udGVudC13cmFwcGVyIixuKTtvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHMpLHRoaXMuX2NvbnRlbnROb2RlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWNvbnRlbnQiLHMpLG8uRG9tRXZlbnQuZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKHRoaXMuX2NvbnRlbnROb2RlKSxvLkRvbUV2ZW50Lm9uKHMsImNvbnRleHRtZW51IixvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbiksdGhpcy5fdGlwQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLXRpcC1jb250YWluZXIiLG4pLHRoaXMuX3RpcD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi10aXAiLHRoaXMuX3RpcENvbnRhaW5lcil9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGVudCl7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9jb250ZW50KXRoaXMuX2NvbnRlbnROb2RlLmlubmVySFRNTD10aGlzLl9jb250ZW50O2Vsc2V7Zm9yKDt0aGlzLl9jb250ZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCk7KXRoaXMuX2NvbnRlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnROb2RlLmZpcnN0Q2hpbGQpO3RoaXMuX2NvbnRlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpfXRoaXMuZmlyZSgiY29udGVudHVwZGF0ZSIpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGU9dC5zdHlsZTtlLndpZHRoPSIiLGUud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgaT10Lm9mZnNldFdpZHRoO2k9TWF0aC5taW4oaSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGk9TWF0aC5tYXgoaSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGUud2lkdGg9aSsxKyJweCIsZS53aGl0ZVNwYWNlPSIiLGUuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LHM9dGhpcy5vcHRpb25zLm1heEhlaWdodCxhPSJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkIjtzJiZuPnM/KGUuaGVpZ2h0PXMrInB4IixvLkRvbVV0aWwuYWRkQ2xhc3ModCxhKSk6by5Eb21VdGlsLnJlbW92ZUNsYXNzKHQsYSksdGhpcy5fY29udGFpbmVyV2lkdGg9dGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRofSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxlPXRoaXMuX2FuaW1hdGVkLGk9by5wb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KTtlJiZvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLHQpLHRoaXMuX2NvbnRhaW5lckJvdHRvbT0taS55LShlPzA6dC55KSx0aGlzLl9jb250YWluZXJMZWZ0PS1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoLzIpK2kueCsoZT8wOnQueCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmJvdHRvbT10aGlzLl9jb250YWluZXJCb3R0b20rInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdD10aGlzLl9jb250YWluZXJMZWZ0KyJweCJ9fSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLGUpfSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmF1dG9QYW4pe3ZhciB0PXRoaXMuX21hcCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQsaT10aGlzLl9jb250YWluZXJXaWR0aCxuPW5ldyBvLlBvaW50KHRoaXMuX2NvbnRhaW5lckxlZnQsLWUtdGhpcy5fY29udGFpbmVyQm90dG9tKTt0aGlzLl9hbmltYXRlZCYmbi5fYWRkKG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG4pLGE9by5wb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLHI9by5wb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxhKSxoPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fGEpLGw9dC5nZXRTaXplKCksdT0wLGM9MDtzLngraStoLng+bC54JiYodT1zLngraS1sLngraC54KSxzLngtdS1yLng8MCYmKHU9cy54LXIueCkscy55K2UraC55PmwueSYmKGM9cy55K2UtbC55K2gueSkscy55LWMtci55PDAmJihjPXMueS1yLnkpLCh1fHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbdSxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksby5Eb21FdmVudC5zdG9wKHQpfX0pLG8ucG9wdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uUG9wdXAodCxlKX0sby5NYXAuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLmNsb3NlUG9wdXAoKSwhKHQgaW5zdGFuY2VvZiBvLlBvcHVwKSl7dmFyIG49dDt0PW5ldyBvLlBvcHVwKGkpLnNldExhdExuZyhlKS5zZXRDb250ZW50KG4pfXJldHVybiB0Ll9pc09wZW49ITAsdGhpcy5fcG9wdXA9dCx0aGlzLmFkZExheWVyKHQpfSxjbG9zZVBvcHVwOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0IT09dGhpcy5fcG9wdXB8fCh0PXRoaXMuX3BvcHVwLHRoaXMuX3BvcHVwPW51bGwpLHQmJih0aGlzLnJlbW92ZUxheWVyKHQpLHQuX2lzT3Blbj0hMSksdGhpc319KSxvLk1hcmtlci5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX21hcCYmIXRoaXMuX21hcC5oYXNMYXllcih0aGlzLl9wb3B1cCkmJih0aGlzLl9wb3B1cC5zZXRMYXRMbmcodGhpcy5fbGF0bG5nKSx0aGlzLl9tYXAub3BlblBvcHVwKHRoaXMuX3BvcHVwKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5faXNPcGVuP3RoaXMuY2xvc2VQb3B1cCgpOnRoaXMub3BlblBvcHVwKCkpLHRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3ZhciBpPW8ucG9pbnQodGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcnx8WzAsMF0pO3JldHVybiBpPWkuYWRkKG8uUG9wdXAucHJvdG90eXBlLm9wdGlvbnMub2Zmc2V0KSxlJiZlLm9mZnNldCYmKGk9aS5hZGQoZS5vZmZzZXQpKSxlPW8uZXh0ZW5kKHtvZmZzZXQ6aX0sZSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbigiY2xpY2siLHRoaXMudG9nZ2xlUG9wdXAsdGhpcykub24oInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLm9uKCJtb3ZlIix0aGlzLl9tb3ZlUG9wdXAsdGhpcyksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0IGluc3RhbmNlb2Ygby5Qb3B1cD8oby5zZXRPcHRpb25zKHQsZSksdGhpcy5fcG9wdXA9dCk6dGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKS5zZXRDb250ZW50KHQpLHRoaXN9LHNldFBvcHVwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnNldENvbnRlbnQodCksdGhpc30sdW5iaW5kUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cD1udWxsLHRoaXMub2ZmKCJjbGljayIsdGhpcy50b2dnbGVQb3B1cCx0aGlzKS5vZmYoInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLm9mZigibW92ZSIsdGhpcy5fbW92ZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSksdGhpc30sZ2V0UG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LF9tb3ZlUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKX19KSxvLkxheWVyR3JvdXA9by5DbGFzcy5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbGF5ZXJzPXt9O3ZhciBlLGk7aWYodClmb3IoZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxhZGRMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldExheWVySWQodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tlXT10LHRoaXMuX21hcCYmdGhpcy5fbWFwLmFkZExheWVyKHQpLHRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQgaW4gdGhpcy5fbGF5ZXJzP3Q6dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX2xheWVyc1tlXSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tlXSksZGVsZXRlIHRoaXMuX2xheWVyc1tlXSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdD90IGluIHRoaXMuX2xheWVyc3x8dGhpcy5nZXRMYXllcklkKHQpaW4gdGhpcy5fbGF5ZXJzOiExfSxjbGVhckxheWVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLHRoaXMpLHRoaXN9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihlIGluIHRoaXMuX2xheWVycylpPXRoaXMuX2xheWVyc1tlXSxpW3RdJiZpW3RdLmFwcGx5KGksbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuZWFjaExheWVyKHQuYWRkTGF5ZXIsdCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQucmVtb3ZlTGF5ZXIsdCksdGhpcy5fbWFwPW51bGx9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0TGF5ZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl0LnB1c2godGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdH0sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludm9rZSgic2V0WkluZGV4Iix0KX0sZ2V0TGF5ZXJJZDpmdW5jdGlvbih0KXtyZXR1cm4gby5zdGFtcCh0KX19KSxvLmxheWVyR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkxheWVyR3JvdXAodCl9LG8uRmVhdHVyZUdyb3VwPW8uTGF5ZXJHcm91cC5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLHN0YXRpY3M6e0VWRU5UUzoiY2xpY2sgZGJsY2xpY2sgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBwb3B1cG9wZW4gcG9wdXBjbG9zZSJ9LGFkZExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpP3RoaXM6KCJvbiJpbiB0JiZ0Lm9uKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLmFkZExheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnQuYmluZFBvcHVwJiZ0LmJpbmRQb3B1cCh0aGlzLl9wb3B1cENvbnRlbnQsdGhpcy5fcG9wdXBPcHRpb25zKSx0aGlzLmZpcmUoImxheWVyYWRkIix7bGF5ZXI6dH0pKX0scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/KHQgaW4gdGhpcy5fbGF5ZXJzJiYodD10aGlzLl9sYXllcnNbdF0pLHQub2ZmKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnRoaXMuaW52b2tlKCJ1bmJpbmRQb3B1cCIpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wb3B1cENvbnRlbnQ9dCx0aGlzLl9wb3B1cE9wdGlvbnM9ZSx0aGlzLmludm9rZSgiYmluZFBvcHVwIix0LGUpfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLm9wZW5Qb3B1cCh0KTticmVha31yZXR1cm4gdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3QuZXh0ZW5kKGUgaW5zdGFuY2VvZiBvLk1hcmtlcj9lLmdldExhdExuZygpOmUuZ2V0Qm91bmRzKCkpfSksdH0sX3Byb3BhZ2F0ZUV2ZW50OmZ1bmN0aW9uKHQpe3Q9by5leHRlbmQoe2xheWVyOnQudGFyZ2V0LHRhcmdldDp0aGlzfSx0KSx0aGlzLmZpcmUodC50eXBlLHQpfX0pLG8uZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAodCl9LG8uUGF0aD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6W28uTWl4aW4uRXZlbnRzXSxzdGF0aWNzOntDTElQX1BBRERJTkc6ZnVuY3Rpb24oKXt2YXIgZT1vLkJyb3dzZXIubW9iaWxlPzEyODA6MmUzLGk9KGUvTWF0aC5tYXgodC5vdXRlcldpZHRoLHQub3V0ZXJIZWlnaHQpLTEpLzI7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjUsaSkpfSgpfSxvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMwMDMzZmYiLGRhc2hBcnJheTpudWxsLGxpbmVDYXA6bnVsbCxsaW5lSm9pbjpudWxsLHdlaWdodDo1LG9wYWNpdHk6LjUsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixjbGlja2FibGU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRFbGVtZW50cygpLHRoaXMuX2luaXRFdmVudHMoKSksdGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3VwZGF0ZVBhdGgoKSx0aGlzLl9jb250YWluZXImJnRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLmZpcmUoImFkZCIpLHQub24oe3ZpZXdyZXNldDp0aGlzLnByb2plY3RMYXRsbmdzLG1vdmVlbmQ6dGhpcy5fdXBkYXRlUGF0aH0sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhdGhSb290LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5maXJlKCJyZW1vdmUiKSx0aGlzLl9tYXA9bnVsbCxvLkJyb3dzZXIudm1sJiYodGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3Ryb2tlPW51bGwsdGhpcy5fZmlsbD1udWxsKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMucHJvamVjdExhdGxuZ3MsbW92ZWVuZDp0aGlzLl91cGRhdGVQYXRofSx0aGlzKX0scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9jb250YWluZXImJnRoaXMuX3VwZGF0ZVN0eWxlKCksdGhpc30scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl91cGRhdGVQYXRoKCkpLHRoaXN9fSksby5NYXAuaW5jbHVkZSh7X3VwZGF0ZVBhdGhWaWV3cG9ydDpmdW5jdGlvbigpe3ZhciB0PW8uUGF0aC5DTElQX1BBRERJTkcsZT10aGlzLmdldFNpemUoKSxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSxuPWkubXVsdGlwbHlCeSgtMSkuX3N1YnRyYWN0KGUubXVsdGlwbHlCeSh0KS5fcm91bmQoKSkscz1uLmFkZChlLm11bHRpcGx5QnkoMSsyKnQpLl9yb3VuZCgpKTt0aGlzLl9wYXRoVmlld3BvcnQ9bmV3IG8uQm91bmRzKG4scyl9fSksby5QYXRoLlNWR19OUz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG8uQnJvd3Nlci5zdmc9ISghZS5jcmVhdGVFbGVtZW50TlN8fCFlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLCJzdmciKS5jcmVhdGVTVkdSZWN0KSxvLlBhdGg9by5QYXRoLmV4dGVuZCh7c3RhdGljczp7U1ZHOm8uQnJvd3Nlci5zdmd9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXI7cmV0dXJuIGUmJnQubGFzdENoaWxkIT09ZSYmdC5hcHBlbmRDaGlsZChlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXIsaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGUmJmkhPT1lJiZ0Lmluc2VydEJlZm9yZShlLGkpLHRoaXN9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLHQpfSxfaW5pdEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9pbml0UGF0aFJvb3QoKSx0aGlzLl9pbml0UGF0aCgpLHRoaXMuX2luaXRTdHlsZSgpfSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgiZyIpLHRoaXMuX3BhdGg9dGhpcy5fY3JlYXRlRWxlbWVudCgicGF0aCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9wYXRoLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKX0sX2luaXRTdHlsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdHJva2UmJih0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpKSx0aGlzLm9wdGlvbnMuZmlsbCYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInBvaW50ZXItZXZlbnRzIix0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZXx8dGhpcy5vcHRpb25zLnBvaW50ZXJFdmVudHN8fHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3Ryb2tlPyh0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlIix0aGlzLm9wdGlvbnMuY29sb3IpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHRoaXMub3B0aW9ucy53ZWlnaHQpLHRoaXMub3B0aW9ucy5kYXNoQXJyYXk/dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLHRoaXMub3B0aW9ucy5kYXNoQXJyYXkpOnRoaXMuX3BhdGgucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksdGhpcy5vcHRpb25zLmxpbmVDYXAmJnRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsdGhpcy5vcHRpb25zLmxpbmVDYXApLHRoaXMub3B0aW9ucy5saW5lSm9pbiYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsdGhpcy5vcHRpb25zLmxpbmVKb2luKSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx0aGlzLm9wdGlvbnMuZmlsbD8odGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLHRoaXMub3B0aW9ucy5maWxsQ29sb3J8fHRoaXMub3B0aW9ucy5jb2xvciksdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoU3RyaW5nKCk7dHx8KHQ9Ik0wIDAiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsdCl9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7KG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGgsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0aGlzLl9jb250YWluZXIsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciB0PVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il0sZT0wO2U8dC5sZW5ndGg7ZSsrKW8uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLHRbZV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfb25Nb3VzZUNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuX2ZpcmVNb3VzZUV2ZW50KHQpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5oYXNFdmVudExpc3RlbmVycyh0LnR5cGUpKXt2YXIgZT10aGlzLl9tYXAsaT1lLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLG49ZS5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpKSxzPWUubGF5ZXJQb2ludFRvTGF0TG5nKG4pO3RoaXMuZmlyZSh0LnR5cGUse2xhdGxuZzpzLGxheWVyUG9pbnQ6bixjb250YWluZXJQb2ludDppLG9yaWdpbmFsRXZlbnQ6dH0pLCJjb250ZXh0bWVudSI9PT10LnR5cGUmJm8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksIm1vdXNlbW92ZSIhPT10LnR5cGUmJm8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfX19KSxvLk1hcC5pbmNsdWRlKHtfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dGhpcy5fcGF0aFJvb3R8fCh0aGlzLl9wYXRoUm9vdD1vLlBhdGgucHJvdG90eXBlLl9jcmVhdGVFbGVtZW50KCJzdmciKSx0aGlzLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoUm9vdCksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD8oby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGhSb290LCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlUGF0aFpvb20sem9vbWVuZDp0aGlzLl9lbmRQYXRoWm9vbX0pKTpvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1oaWRlIiksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlU3ZnVmlld3BvcnQpLHRoaXMuX3VwZGF0ZVN2Z1ZpZXdwb3J0KCkpCn0sX2FuaW1hdGVQYXRoWm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFpvb21TY2FsZSh0Lnpvb20pLGk9dGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KHQuY2VudGVyKS5fbXVsdGlwbHlCeSgtZSkuX2FkZCh0aGlzLl9wYXRoVmlld3BvcnQubWluKTt0aGlzLl9wYXRoUm9vdC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGkpKyIgc2NhbGUoIitlKyIpICIsdGhpcy5fcGF0aFpvb21pbmc9ITB9LF9lbmRQYXRoWm9vbTpmdW5jdGlvbigpe3RoaXMuX3BhdGhab29taW5nPSExfSxfdXBkYXRlU3ZnVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXgsbj1pLngtZS54LHM9aS55LWUueSxhPXRoaXMuX3BhdGhSb290LHI9dGhpcy5fcGFuZXMub3ZlcmxheVBhbmU7by5Ccm93c2VyLm1vYmlsZVdlYmtpdCYmci5yZW1vdmVDaGlsZChhKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24oYSxlKSxhLnNldEF0dHJpYnV0ZSgid2lkdGgiLG4pLGEuc2V0QXR0cmlidXRlKCJoZWlnaHQiLHMpLGEuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbZS54LGUueSxuLHNdLmpvaW4oIiAiKSksby5Ccm93c2VyLm1vYmlsZVdlYmtpdCYmci5hcHBlbmRDaGlsZChhKX19fSksby5QYXRoLmluY2x1ZGUoe2JpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb3B1cD90aGlzLl9wb3B1cD10OigoIXRoaXMuX3BvcHVwfHxlKSYmKHRoaXMuX3BvcHVwPW5ldyBvLlBvcHVwKGUsdGhpcykpLHRoaXMuX3BvcHVwLnNldENvbnRlbnQodCkpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oImNsaWNrIix0aGlzLl9vcGVuUG9wdXAsdGhpcykub24oInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdGhpc30sdW5iaW5kUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cD1udWxsLHRoaXMub2ZmKCJjbGljayIsdGhpcy5fb3BlblBvcHVwKS5vZmYoInJlbW92ZSIsdGhpcy5jbG9zZVBvcHVwKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEpLHRoaXN9LG9wZW5Qb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0PXR8fHRoaXMuX2xhdGxuZ3x8dGhpcy5fbGF0bG5nc1tNYXRoLmZsb29yKHRoaXMuX2xhdGxuZ3MubGVuZ3RoLzIpXSx0aGlzLl9vcGVuUG9wdXAoe2xhdGxuZzp0fSkpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9jbG9zZSgpLHRoaXN9LF9vcGVuUG9wdXA6ZnVuY3Rpb24odCl7dGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQubGF0bG5nKSx0aGlzLl9tYXAub3BlblBvcHVwKHRoaXMuX3BvcHVwKX19KSxvLkJyb3dzZXIudm1sPSFvLkJyb3dzZXIuc3ZnJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuaW5uZXJIVE1MPSc8djpzaGFwZSBhZGo9IjEiLz4nO3ZhciBpPXQuZmlyc3RDaGlsZDtyZXR1cm4gaS5zdHlsZS5iZWhhdmlvcj0idXJsKCNkZWZhdWx0I1ZNTCkiLGkmJiJvYmplY3QiPT10eXBlb2YgaS5hZGp9Y2F0Y2gobil7cmV0dXJuITF9fSgpLG8uUGF0aD1vLkJyb3dzZXIuc3ZnfHwhby5Ccm93c2VyLnZtbD9vLlBhdGg6by5QYXRoLmV4dGVuZCh7c3RhdGljczp7Vk1MOiEwLENMSVBfUEFERElORzouMDJ9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLm5hbWVzcGFjZXMuYWRkKCJsdm1sIiwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8bHZtbDoiK3QrJyBjbGFzcz0ibHZtbCI+Jyl9fWNhdGNoKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgic2hhcGUiKTtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC12bWwtc2hhcGUiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lPyIgIit0aGlzLm9wdGlvbnMuY2xhc3NOYW1lOiIiKSksdGhpcy5vcHRpb25zLmNsaWNrYWJsZSYmby5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtY2xpY2thYmxlIiksdC5jb29yZHNpemU9IjEgMSIsdGhpcy5fcGF0aD10aGlzLl9jcmVhdGVFbGVtZW50KCJwYXRoIiksdC5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKSx0aGlzLl9tYXAuX3BhdGhSb290LmFwcGVuZENoaWxkKHQpfSxfaW5pdFN0eWxlOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlU3R5bGUoKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3Ryb2tlLGU9dGhpcy5fZmlsbCxpPXRoaXMub3B0aW9ucyxuPXRoaXMuX2NvbnRhaW5lcjtuLnN0cm9rZWQ9aS5zdHJva2Usbi5maWxsZWQ9aS5maWxsLGkuc3Ryb2tlPyh0fHwodD10aGlzLl9zdHJva2U9dGhpcy5fY3JlYXRlRWxlbWVudCgic3Ryb2tlIiksdC5lbmRjYXA9InJvdW5kIixuLmFwcGVuZENoaWxkKHQpKSx0LndlaWdodD1pLndlaWdodCsicHgiLHQuY29sb3I9aS5jb2xvcix0Lm9wYWNpdHk9aS5vcGFjaXR5LHQuZGFzaFN0eWxlPWkuZGFzaEFycmF5P28uVXRpbC5pc0FycmF5KGkuZGFzaEFycmF5KT9pLmRhc2hBcnJheS5qb2luKCIgIik6aS5kYXNoQXJyYXkucmVwbGFjZSgvKCAqLCAqKS9nLCIgIik6IiIsaS5saW5lQ2FwJiYodC5lbmRjYXA9aS5saW5lQ2FwLnJlcGxhY2UoImJ1dHQiLCJmbGF0IikpLGkubGluZUpvaW4mJih0LmpvaW5zdHlsZT1pLmxpbmVKb2luKSk6dCYmKG4ucmVtb3ZlQ2hpbGQodCksdGhpcy5fc3Ryb2tlPW51bGwpLGkuZmlsbD8oZXx8KGU9dGhpcy5fZmlsbD10aGlzLl9jcmVhdGVFbGVtZW50KCJmaWxsIiksbi5hcHBlbmRDaGlsZChlKSksZS5jb2xvcj1pLmZpbGxDb2xvcnx8aS5jb2xvcixlLm9wYWNpdHk9aS5maWxsT3BhY2l0eSk6ZSYmKG4ucmVtb3ZlQ2hpbGQoZSksdGhpcy5fZmlsbD1udWxsKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXIuc3R5bGU7dC5kaXNwbGF5PSJub25lIix0aGlzLl9wYXRoLnY9dGhpcy5nZXRQYXRoU3RyaW5nKCkrIiAiLHQuZGlzcGxheT0iIn19KSxvLk1hcC5pbmNsdWRlKG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhdGhSb290KXt2YXIgdD10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJsZWFmbGV0LXZtbC1jb250YWluZXIiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKHQpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCksdGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KCl9fX0pLG8uQnJvd3Nlci5jYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4hIWUuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dH0oKSxvLlBhdGg9by5QYXRoLlNWRyYmIXQuTF9QUkVGRVJfQ0FOVkFTfHwhby5Ccm93c2VyLmNhbnZhcz9vLlBhdGg6by5QYXRoLmV4dGVuZCh7c3RhdGljczp7Q0FOVkFTOiEwLFNWRzohMX0scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl9yZXF1ZXN0VXBkYXRlKCkpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVTdHlsZSgpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSksdGhpc30sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInZpZXdyZXNldCIsdGhpcy5wcm9qZWN0TGF0bG5ncyx0aGlzKS5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZVBhdGgsdGhpcyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZSYmKHRoaXMuX21hcC5vZmYoImNsaWNrIix0aGlzLl9vbkNsaWNrLHRoaXMpLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcykpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSx0aGlzLmZpcmUoInJlbW92ZSIpLHRoaXMuX21hcD1udWxsfSxfcmVxdWVzdFVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmIW8uUGF0aC5fdXBkYXRlUmVxdWVzdCYmKG8uUGF0aC5fdXBkYXRlUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9maXJlTWFwTW92ZUVuZCx0aGlzLl9tYXApKX0sX2ZpcmVNYXBNb3ZlRW5kOmZ1bmN0aW9uKCl7by5QYXRoLl91cGRhdGVSZXF1ZXN0PW51bGwsdGhpcy5maXJlKCJtb3ZlZW5kIil9LF9pbml0RWxlbWVudHM6ZnVuY3Rpb24oKXt0aGlzLl9tYXAuX2luaXRQYXRoUm9vdCgpLHRoaXMuX2N0eD10aGlzLl9tYXAuX2NhbnZhc0N0eH0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3Quc3Ryb2tlJiYodGhpcy5fY3R4LmxpbmVXaWR0aD10LndlaWdodCx0aGlzLl9jdHguc3Ryb2tlU3R5bGU9dC5jb2xvciksdC5maWxsJiYodGhpcy5fY3R4LmZpbGxTdHlsZT10LmZpbGxDb2xvcnx8dC5jb2xvcil9LF9kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsYTtmb3IodGhpcy5fY3R4LmJlZ2luUGF0aCgpLHQ9MCxpPXRoaXMuX3BhcnRzLmxlbmd0aDtpPnQ7dCsrKXtmb3IoZT0wLG49dGhpcy5fcGFydHNbdF0ubGVuZ3RoO24+ZTtlKyspcz10aGlzLl9wYXJ0c1t0XVtlXSxhPSgwPT09ZT8ibW92ZSI6ImxpbmUiKSsiVG8iLHRoaXMuX2N0eFthXShzLngscy55KTt0aGlzIGluc3RhbmNlb2Ygby5Qb2x5Z29uJiZ0aGlzLl9jdHguY2xvc2VQYXRoKCl9fSxfY2hlY2tJZkVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3BhcnRzLmxlbmd0aH0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXtpZighdGhpcy5fY2hlY2tJZkVtcHR5KCkpe3ZhciB0PXRoaXMuX2N0eCxlPXRoaXMub3B0aW9uczt0aGlzLl9kcmF3UGF0aCgpLHQuc2F2ZSgpLHRoaXMuX3VwZGF0ZVN0eWxlKCksZS5maWxsJiYodC5nbG9iYWxBbHBoYT1lLmZpbGxPcGFjaXR5LHQuZmlsbCgpKSxlLnN0cm9rZSYmKHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQuc3Ryb2tlKCkpLHQucmVzdG9yZSgpfX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuY2xpY2thYmxlJiYodGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlLHRoaXMpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2ssdGhpcykpfSxfb25DbGljazpmdW5jdGlvbih0KXt0aGlzLl9jb250YWluc1BvaW50KHQubGF5ZXJQb2ludCkmJnRoaXMuZmlyZSgiY2xpY2siLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiYodGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpPyh0aGlzLl9jdHguY2FudmFzLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fbW91c2VJbnNpZGU9ITAsdGhpcy5maXJlKCJtb3VzZW92ZXIiLHQpKTp0aGlzLl9tb3VzZUluc2lkZSYmKHRoaXMuX2N0eC5jYW52YXMuc3R5bGUuY3Vyc29yPSIiLHRoaXMuX21vdXNlSW5zaWRlPSExLHRoaXMuZmlyZSgibW91c2VvdXQiLHQpKSl9fSksby5NYXAuaW5jbHVkZShvLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9wYXRoUm9vdDtpfHwoaT10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0PXRoaXMuX2NhbnZhc0N0eD1pLmdldENvbnRleHQoIjJkIiksdC5saW5lQ2FwPSJyb3VuZCIsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKGkpLHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiYodGhpcy5fcGF0aFJvb3QuY2xhc3NOYW1lPSJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlUGF0aFpvb20pLHRoaXMub24oInpvb21lbmQiLHRoaXMuX2VuZFBhdGhab29tKSksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlQ2FudmFzVmlld3BvcnQpLHRoaXMuX3VwZGF0ZUNhbnZhc1ZpZXdwb3J0KCkpfSxfdXBkYXRlQ2FudmFzVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXguc3VidHJhY3QoZSksbj10aGlzLl9wYXRoUm9vdDtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixlKSxuLndpZHRoPWkueCxuLmhlaWdodD1pLnksbi5nZXRDb250ZXh0KCIyZCIpLnRyYW5zbGF0ZSgtZS54LC1lLnkpfX19KSxvLkxpbmVVdGlsPXtzaW1wbGlmeTpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgaT1lKmU7cmV0dXJuIHQ9dGhpcy5fcmVkdWNlUG9pbnRzKHQsaSksdD10aGlzLl9zaW1wbGlmeURQKHQsaSl9LHBvaW50VG9TZWdtZW50RGlzdGFuY2U6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGksITApKX0sY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpfSxfc2ltcGxpZnlEUDpmdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoLG89dHlwZW9mIFVpbnQ4QXJyYXkhPWkrIiI/VWludDhBcnJheTpBcnJheSxzPW5ldyBvKG4pO3NbMF09c1tuLTFdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxzLGUsMCxuLTEpO3ZhciBhLHI9W107Zm9yKGE9MDtuPmE7YSsrKXNbYV0mJnIucHVzaCh0W2FdKTtyZXR1cm4gcn0sX3NpbXBsaWZ5RFBTdGVwOmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMsYSxyLGg9MDtmb3IoYT1uKzE7by0xPj1hO2ErKylyPXRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHRbYV0sdFtuXSx0W29dLCEwKSxyPmgmJihzPWEsaD1yKTtoPmkmJihlW3NdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGksbixzKSx0aGlzLl9zaW1wbGlmeURQU3RlcCh0LGUsaSxzLG8pKX0sX3JlZHVjZVBvaW50czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO3M+bjtuKyspdGhpcy5fc3FEaXN0KHRbbl0sdFtvXSk+ZSYmKGkucHVzaCh0W25dKSxvPW4pO3JldHVybiBzLTE+byYmaS5wdXNoKHRbcy0xXSksaX0sY2xpcFNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG8scyxhLHI9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksaD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWg7Oyl7aWYoIShyfGgpKXJldHVyblt0LGVdO2lmKHImaClyZXR1cm4hMTtvPXJ8fGgscz10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxvLGkpLGE9dGhpcy5fZ2V0Qml0Q29kZShzLGkpLG89PT1yPyh0PXMscj1hKTooZT1zLGg9YSl9fSxfZ2V0RWRnZUludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1lLngtdC54LGE9ZS55LXQueSxyPW4ubWluLGg9bi5tYXg7cmV0dXJuIDgmaT9uZXcgby5Qb2ludCh0LngrcyooaC55LXQueSkvYSxoLnkpOjQmaT9uZXcgby5Qb2ludCh0Lngrcyooci55LXQueSkvYSxyLnkpOjImaT9uZXcgby5Qb2ludChoLngsdC55K2EqKGgueC10LngpL3MpOjEmaT9uZXcgby5Qb2ludChyLngsdC55K2EqKHIueC10LngpL3MpOnZvaWQgMH0sX2dldEJpdENvZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wO3JldHVybiB0Lng8ZS5taW4ueD9pfD0xOnQueD5lLm1heC54JiYoaXw9MiksdC55PGUubWluLnk/aXw9NDp0Lnk+ZS5tYXgueSYmKGl8PTgpLGl9LF9zcURpc3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLngtdC54LG49ZS55LXQueTtyZXR1cm4gaSppK24qbn0sX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGE9ZS54LHI9ZS55LGg9aS54LWEsbD1pLnktcix1PWgqaCtsKmw7cmV0dXJuIHU+MCYmKHM9KCh0LngtYSkqaCsodC55LXIpKmwpL3Uscz4xPyhhPWkueCxyPWkueSk6cz4wJiYoYSs9aCpzLHIrPWwqcykpLGg9dC54LWEsbD10LnktcixuP2gqaCtsKmw6bmV3IG8uUG9pbnQoYSxyKX19LG8uUG9seWxpbmU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUGF0aC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSksdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sb3B0aW9uczp7c21vb3RoRmFjdG9yOjEsbm9DbGlwOiExfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3RoaXMuX29yaWdpbmFsUG9pbnRzPVtdO2Zvcih2YXIgdD0wLGU9dGhpcy5fbGF0bG5ncy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9vcmlnaW5hbFBvaW50c1t0XT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZ3NbdF0pfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9wYXJ0cy5sZW5ndGgsaT0iIjtlPnQ7dCsrKWkrPXRoaXMuX2dldFBhdGhQYXJ0U3RyKHRoaXMuX3BhcnRzW3RdKTtyZXR1cm4gaX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGFkZExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5ncy5wdXNoKG8ubGF0TG5nKHQpKSx0aGlzLnJlZHJhdygpfSxzcGxpY2VMYXRMbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc3BsaWNlLmFwcGx5KHRoaXMuX2xhdGxuZ3MsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fY29udmVydExhdExuZ3ModGhpcy5fbGF0bG5ncywhMCksdGhpcy5yZWRyYXcoKSx0fSxjbG9zZXN0TGF5ZXJQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPTEvMCxzPXRoaXMuX3BhcnRzLGE9bnVsbCxyPTAsaD1zLmxlbmd0aDtoPnI7cisrKWZvcih2YXIgbD1zW3JdLHU9MSxjPWwubGVuZ3RoO2M+dTt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1vLkxpbmVVdGlsLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0LGUsaSwhMCk7bj5kJiYobj1kLGE9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpKX1yZXR1cm4gYSYmKGEuZGlzdGFuY2U9TWF0aC5zcXJ0KG4pKSxhfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWU/dDpbXTtmb3IoaT0wLG49dC5sZW5ndGg7bj5pO2krKyl7aWYoby5VdGlsLmlzQXJyYXkodFtpXSkmJiJudW1iZXIiIT10eXBlb2YgdFtpXVswXSlyZXR1cm47c1tpXT1vLmxhdExuZyh0W2ldKX1yZXR1cm4gc30sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXtvLlBhdGgucHJvdG90eXBlLl9pbml0RXZlbnRzLmNhbGwodGhpcyl9LF9nZXRQYXRoUGFydFN0cjpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT1vLlBhdGguVk1MLG49MCxzPXQubGVuZ3RoLGE9IiI7cz5uO24rKyllPXRbbl0saSYmZS5fcm91bmQoKSxhKz0obj8iTCI6Ik0iKStlLngrIiAiK2UueTtyZXR1cm4gYX0sX2NsaXBQb2ludHM6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9vcmlnaW5hbFBvaW50cyxzPW4ubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy5ub0NsaXApcmV0dXJuIHZvaWQodGhpcy5fcGFydHM9W25dKTt0aGlzLl9wYXJ0cz1bXTt2YXIgYT10aGlzLl9wYXJ0cyxyPXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGg9by5MaW5lVXRpbDtmb3IodD0wLGU9MDtzLTE+dDt0KyspaT1oLmNsaXBTZWdtZW50KG5bdF0sblt0KzFdLHIsdCksaSYmKGFbZV09YVtlXXx8W10sYVtlXS5wdXNoKGlbMF0pLChpWzFdIT09blt0KzFdfHx0PT09cy0yKSYmKGFbZV0ucHVzaChpWzFdKSxlKyspKX0sX3NpbXBsaWZ5UG9pbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3BhcnRzLGU9by5MaW5lVXRpbCxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKXRbaV09ZS5zaW1wbGlmeSh0W2ldLHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLG8uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVBhdGguY2FsbCh0aGlzKSl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlVdGlsPXt9LG8uUG9seVV0aWwuY2xpcFBvbHlnb249ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1LGMsZD1bMSw0LDIsOF0scD1vLkxpbmVVdGlsO2ZvcihuPTAsbD10Lmxlbmd0aDtsPm47bisrKXRbbl0uX2NvZGU9cC5fZ2V0Qml0Q29kZSh0W25dLGUpO2ZvcihhPTA7ND5hO2ErKyl7Zm9yKHU9ZFthXSxpPVtdLG49MCxsPXQubGVuZ3RoLHM9bC0xO2w+bjtzPW4rKylyPXRbbl0saD10W3NdLHIuX2NvZGUmdT9oLl9jb2RlJnV8fChjPXAuX2dldEVkZ2VJbnRlcnNlY3Rpb24oaCxyLHUsZSksYy5fY29kZT1wLl9nZXRCaXRDb2RlKGMsZSksaS5wdXNoKGMpKTooaC5fY29kZSZ1JiYoYz1wLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGgscix1LGUpLGMuX2NvZGU9cC5fZ2V0Qml0Q29kZShjLGUpLGkucHVzaChjKSksaS5wdXNoKHIpKTt0PWl9cmV0dXJuIHR9LG8uUG9seWdvbj1vLlBvbHlsaW5lLmV4dGVuZCh7b3B0aW9uczp7ZmlsbDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUG9seWxpbmUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsZSksdGhpcy5faW5pdFdpdGhIb2xlcyh0KX0sX2luaXRXaXRoSG9sZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuO2lmKHQmJm8uVXRpbC5pc0FycmF5KHRbMF0pJiYibnVtYmVyIiE9dHlwZW9mIHRbMF1bMF0pZm9yKHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModFswXSksdGhpcy5faG9sZXM9dC5zbGljZSgxKSxlPTAsaT10aGlzLl9ob2xlcy5sZW5ndGg7aT5lO2UrKyluPXRoaXMuX2hvbGVzW2VdPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRoaXMuX2hvbGVzW2VdKSxuWzBdLmVxdWFscyhuW24ubGVuZ3RoLTFdKSYmbi5wb3AoKTt0PXRoaXMuX2xhdGxuZ3MsdC5sZW5ndGg+PTImJnRbMF0uZXF1YWxzKHRbdC5sZW5ndGgtMV0pJiZ0LnBvcCgpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe2lmKG8uUG9seWxpbmUucHJvdG90eXBlLnByb2plY3RMYXRsbmdzLmNhbGwodGhpcyksdGhpcy5faG9sZVBvaW50cz1bXSx0aGlzLl9ob2xlcyl7dmFyIHQsZSxpLG47Zm9yKHQ9MCxpPXRoaXMuX2hvbGVzLmxlbmd0aDtpPnQ7dCsrKWZvcih0aGlzLl9ob2xlUG9pbnRzW3RdPVtdLGU9MCxuPXRoaXMuX2hvbGVzW3RdLmxlbmd0aDtuPmU7ZSsrKXRoaXMuX2hvbGVQb2ludHNbdF1bZV09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ob2xlc1t0XVtlXSl9fSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLlV0aWwuaXNBcnJheSh0WzBdKSYmIm51bWJlciIhPXR5cGVvZiB0WzBdWzBdPyh0aGlzLl9pbml0V2l0aEhvbGVzKHQpLHRoaXMucmVkcmF3KCkpOm8uUG9seWxpbmUucHJvdG90eXBlLnNldExhdExuZ3MuY2FsbCh0aGlzLHQpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbmFsUG9pbnRzLGU9W107aWYodGhpcy5fcGFydHM9W3RdLmNvbmNhdCh0aGlzLl9ob2xlUG9pbnRzKSwhdGhpcy5vcHRpb25zLm5vQ2xpcCl7Zm9yKHZhciBpPTAsbj10aGlzLl9wYXJ0cy5sZW5ndGg7bj5pO2krKyl7dmFyIHM9by5Qb2x5VXRpbC5jbGlwUG9seWdvbih0aGlzLl9wYXJ0c1tpXSx0aGlzLl9tYXAuX3BhdGhWaWV3cG9ydCk7cy5sZW5ndGgmJmUucHVzaChzKX10aGlzLl9wYXJ0cz1lfX0sX2dldFBhdGhQYXJ0U3RyOmZ1bmN0aW9uKHQpe3ZhciBlPW8uUG9seWxpbmUucHJvdG90eXBlLl9nZXRQYXRoUGFydFN0ci5jYWxsKHRoaXMsdCk7cmV0dXJuIGUrKG8uQnJvd3Nlci5zdmc/InoiOiJ4Iil9fSksby5wb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvbHlnb24odCxlKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBvLkZlYXR1cmVHcm91cC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9sYXllcnM9e30sdGhpcy5fb3B0aW9ucz1lLHRoaXMuc2V0TGF0TG5ncyh0KX0sc2V0TGF0TG5nczpmdW5jdGlvbihlKXt2YXIgaT0wLG49ZS5sZW5ndGg7Zm9yKHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe24+aT90LnNldExhdExuZ3MoZVtpKytdKTp0aGlzLnJlbW92ZUxheWVyKHQpfSx0aGlzKTtuPmk7KXRoaXMuYWRkTGF5ZXIobmV3IHQoZVtpKytdLHRoaXMuX29wdGlvbnMpKTtyZXR1cm4gdGhpc30sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0LnB1c2goZS5nZXRMYXRMbmdzKCkpfSksdH19KX1vLk11bHRpUG9seWxpbmU9dChvLlBvbHlsaW5lKSxvLk11bHRpUG9seWdvbj10KG8uUG9seWdvbiksby5tdWx0aVBvbHlsaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk11bHRpUG9seWxpbmUodCxlKX0sby5tdWx0aVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uTXVsdGlQb2x5Z29uKHQsZSl9fSgpLG8uUmVjdGFuZ2xlPW8uUG9seWdvbi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLlBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxlKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCkpfSxfYm91bmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ubGF0TG5nQm91bmRzKHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KSxvLnJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5SZWN0YW5nbGUodCxlKX0sby5DaXJjbGU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5QYXRoLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxpKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksdGhpcy5fbVJhZGl1cz1lfSxvcHRpb25zOntmaWxsOiEwfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnJlZHJhdygpfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21SYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldExuZ1JhZGl1cygpLGU9dGhpcy5fbGF0bG5nLGk9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbZS5sYXQsZS5sbmctdF0pO3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoZSksdGhpcy5fcmFkaXVzPU1hdGgubWF4KHRoaXMuX3BvaW50LngtaS54LDEpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRMbmdSYWRpdXMoKSxlPXRoaXMuX21SYWRpdXMvNDAwNzUwMTcqMzYwLGk9dGhpcy5fbGF0bG5nO3JldHVybiBuZXcgby5MYXRMbmdCb3VuZHMoW2kubGF0LWUsaS5sbmctdF0sW2kubGF0K2UsaS5sbmcrdF0pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcG9pbnQsZT10aGlzLl9yYWRpdXM7cmV0dXJuIHRoaXMuX2NoZWNrSWZFbXB0eSgpPyIiOm8uQnJvd3Nlci5zdmc/Ik0iK3QueCsiLCIrKHQueS1lKSsiQSIrZSsiLCIrZSsiLDAsMSwxLCIrKHQueC0uMSkrIiwiKyh0LnktZSkrIiB6IjoodC5fcm91bmQoKSxlPU1hdGgucm91bmQoZSksIkFMICIrdC54KyIsIit0LnkrIiAiK2UrIiwiK2UrIiAwLDIzNTkyNjAwIil9LGdldFJhZGl1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tUmFkaXVzfSxfZ2V0TGF0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXMvNDAwNzUwMTcqMzYwfSxfZ2V0TG5nUmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldExhdFJhZGl1cygpL01hdGguY29zKG8uTGF0TG5nLkRFR19UT19SQUQqdGhpcy5fbGF0bG5nLmxhdCl9LF9jaGVja0lmRW1wdHk6ZnVuY3Rpb24oKXtpZighdGhpcy5fbWFwKXJldHVybiExO3ZhciB0PXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGU9dGhpcy5fcmFkaXVzLGk9dGhpcy5fcG9pbnQ7cmV0dXJuIGkueC1lPnQubWF4Lnh8fGkueS1lPnQubWF4Lnl8fGkueCtlPHQubWluLnh8fGkueStlPHQubWluLnl9fSksby5jaXJjbGU9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcgby5DaXJjbGUodCxlLGkpfSxvLkNpcmNsZU1hcmtlcj1vLkNpcmNsZS5leHRlbmQoe29wdGlvbnM6e3JhZGl1czoxMCx3ZWlnaHQ6Mn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uQ2lyY2xlLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0LG51bGwsZSksdGhpcy5fcmFkaXVzPXRoaXMub3B0aW9ucy5yYWRpdXN9LHByb2plY3RMYXRsbmdzOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXtvLkNpcmNsZS5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlLmNhbGwodGhpcyksdGhpcy5zZXRSYWRpdXModGhpcy5vcHRpb25zLnJhZGl1cyl9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gby5DaXJjbGUucHJvdG90eXBlLnNldExhdExuZy5jYWxsKHRoaXMsdCksdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9pc09wZW4mJnRoaXMuX3BvcHVwLnNldExhdExuZyh0KSx0aGlzfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c319KSxvLmNpcmNsZU1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5DaXJjbGVNYXJrZXIodCxlKX0sby5Qb2x5bGluZS5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19jb250YWluc1BvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLGEscixoLGwsdT10aGlzLm9wdGlvbnMud2VpZ2h0LzI7Zm9yKG8uQnJvd3Nlci50b3VjaCYmKHUrPTEwKSxpPTAsYT10aGlzLl9wYXJ0cy5sZW5ndGg7YT5pO2krKylmb3IobD10aGlzLl9wYXJ0c1tpXSxuPTAscj1sLmxlbmd0aCxzPXItMTtyPm47cz1uKyspaWYoKGV8fDAhPT1uKSYmKGg9by5MaW5lVXRpbC5wb2ludFRvU2VnbWVudERpc3RhbmNlKHQsbFtzXSxsW25dKSx1Pj1oKSlyZXR1cm4hMDtyZXR1cm4hMX19Ont9KSxvLlBvbHlnb24uaW5jbHVkZShvLlBhdGguQ0FOVkFTP3tfY29udGFpbnNQb2ludDpmdW5jdGlvbih0KXt2YXIgZSxpLG4scyxhLHIsaCxsLHU9ITE7aWYoby5Qb2x5bGluZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApKXJldHVybiEwO2ZvcihzPTAsaD10aGlzLl9wYXJ0cy5sZW5ndGg7aD5zO3MrKylmb3IoZT10aGlzLl9wYXJ0c1tzXSxhPTAsbD1lLmxlbmd0aCxyPWwtMTtsPmE7cj1hKyspaT1lW2FdLG49ZVtyXSxpLnk+dC55IT1uLnk+dC55JiZ0Lng8KG4ueC1pLngpKih0LnktaS55KS8obi55LWkueSkraS54JiYodT0hdSk7cmV0dXJuIHV9fTp7fSksby5DaXJjbGUuaW5jbHVkZShvLlBhdGguQ0FOVkFTP3tfZHJhd1BhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb2ludDt0aGlzLl9jdHguYmVnaW5QYXRoKCksdGhpcy5fY3R4LmFyYyh0LngsdC55LHRoaXMuX3JhZGl1cywwLDIqTWF0aC5QSSwhMSl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3BvaW50LGk9dGhpcy5vcHRpb25zLnN0cm9rZT90aGlzLm9wdGlvbnMud2VpZ2h0LzI6MDtyZXR1cm4gdC5kaXN0YW5jZVRvKGUpPD10aGlzLl9yYWRpdXMraX19Ont9KSxvLkNpcmNsZU1hcmtlci5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e191cGRhdGVTdHlsZTpmdW5jdGlvbigpe28uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlLmNhbGwodGhpcyl9fTp7fSksby5HZW9KU09OPW8uRmVhdHVyZUdyb3VwLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uc2V0T3B0aW9ucyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0JiZ0aGlzLmFkZERhdGEodCl9LGFkZERhdGE6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9by5VdGlsLmlzQXJyYXkodCk/dDp0LmZlYXR1cmVzO2lmKHMpe2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSwobi5nZW9tZXRyaWVzfHxuLmdlb21ldHJ5fHxuLmZlYXR1cmVzfHxuLmNvb3JkaW5hdGVzKSYmdGhpcy5hZGREYXRhKHNbZV0pO3JldHVybiB0aGlzfXZhciBhPXRoaXMub3B0aW9ucztpZighYS5maWx0ZXJ8fGEuZmlsdGVyKHQpKXt2YXIgcj1vLkdlb0pTT04uZ2VvbWV0cnlUb0xheWVyKHQsYS5wb2ludFRvTGF5ZXIsYS5jb29yZHNUb0xhdExuZyxhKTtyZXR1cm4gci5mZWF0dXJlPW8uR2VvSlNPTi5hc0ZlYXR1cmUodCksci5kZWZhdWx0T3B0aW9ucz1yLm9wdGlvbnMsdGhpcy5yZXNldFN0eWxlKHIpLGEub25FYWNoRmVhdHVyZSYmYS5vbkVhY2hGZWF0dXJlKHQsciksdGhpcy5hZGRMYXllcihyKX19LHJlc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLnN0eWxlO2UmJihvLlV0aWwuZXh0ZW5kKHQub3B0aW9ucyx0LmRlZmF1bHRPcHRpb25zKSx0aGlzLl9zZXRMYXllclN0eWxlKHQsZSkpfSxzZXRTdHlsZTpmdW5jdGlvbih0KXt0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0aGlzLl9zZXRMYXllclN0eWxlKGUsdCl9LHRoaXMpfSxfc2V0TGF5ZXJTdHlsZTpmdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1lKHQuZmVhdHVyZSkpLHQuc2V0U3R5bGUmJnQuc2V0U3R5bGUoZSl9fSksby5leHRlbmQoby5HZW9KU09OLHtnZW9tZXRyeVRvTGF5ZXI6ZnVuY3Rpb24odCxlLGksbil7dmFyIHMsYSxyLGgsbD0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LHU9bC5jb29yZGluYXRlcyxjPVtdO3N3aXRjaChpPWl8fHRoaXMuY29vcmRzVG9MYXRMbmcsbC50eXBlKXtjYXNlIlBvaW50IjpyZXR1cm4gcz1pKHUpLGU/ZSh0LHMpOm5ldyBvLk1hcmtlcihzKTtjYXNlIk11bHRpUG9pbnQiOmZvcihyPTAsaD11Lmxlbmd0aDtoPnI7cisrKXM9aSh1W3JdKSxjLnB1c2goZT9lKHQscyk6bmV3IG8uTWFya2VyKHMpKTtyZXR1cm4gbmV3IG8uRmVhdHVyZUdyb3VwKGMpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwwLGkpLG5ldyBvLlBvbHlsaW5lKGEsbik7Y2FzZSJQb2x5Z29uIjppZigyPT09dS5sZW5ndGgmJiF1WzFdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIik7cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwxLGkpLG5ldyBvLlBvbHlnb24oYSxuKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwxLGkpLG5ldyBvLk11bHRpUG9seWxpbmUoYSxuKTtjYXNlIk11bHRpUG9seWdvbiI6cmV0dXJuIGE9dGhpcy5jb29yZHNUb0xhdExuZ3ModSwyLGkpLG5ldyBvLk11bHRpUG9seWdvbihhLG4pO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iocj0wLGg9bC5nZW9tZXRyaWVzLmxlbmd0aDtoPnI7cisrKWMucHVzaCh0aGlzLmdlb21ldHJ5VG9MYXllcih7Z2VvbWV0cnk6bC5nZW9tZXRyaWVzW3JdLHR5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzfSxlLGksbikpO3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAoYyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fSxjb29yZHNUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRbMV0sdFswXSx0WzJdKX0sY29vcmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLHMsYT1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7cz5vO28rKyluPWU/dGhpcy5jb29yZHNUb0xhdExuZ3ModFtvXSxlLTEsaSk6KGl8fHRoaXMuY29vcmRzVG9MYXRMbmcpKHRbb10pLGEucHVzaChuKTtyZXR1cm4gYX0sbGF0TG5nVG9Db29yZHM6ZnVuY3Rpb24odCl7dmFyIGU9W3QubG5nLHQubGF0XTtyZXR1cm4gdC5hbHQhPT1pJiZlLnB1c2godC5hbHQpLGV9LGxhdExuZ3NUb0Nvb3JkczpmdW5jdGlvbih0KXtmb3IodmFyIGU9W10saT0wLG49dC5sZW5ndGg7bj5pO2krKyllLnB1c2goby5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRbaV0pKTtyZXR1cm4gZX0sZ2V0RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LmZlYXR1cmU/by5leHRlbmQoe30sdC5mZWF0dXJlLHtnZW9tZXRyeTplfSk6by5HZW9KU09OLmFzRmVhdHVyZShlKX0sYXNGZWF0dXJlOmZ1bmN0aW9uKHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fX0pO3ZhciBhPXt0b0dlb0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOm8uR2VvSlNPTi5sYXRMbmdUb0Nvb3Jkcyh0aGlzLmdldExhdExuZygpKX0pfX07by5NYXJrZXIuaW5jbHVkZShhKSxvLkNpcmNsZS5pbmNsdWRlKGEpLG8uQ2lyY2xlTWFya2VyLmluY2x1ZGUoYSksby5Qb2x5bGluZS5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6by5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLmdldExhdExuZ3MoKSl9KX19KSxvLlBvbHlnb24uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49W28uR2VvSlNPTi5sYXRMbmdzVG9Db29yZHModGhpcy5nZXRMYXRMbmdzKCkpXTtpZihuWzBdLnB1c2goblswXVswXSksdGhpcy5faG9sZXMpZm9yKHQ9MCxlPXRoaXMuX2hvbGVzLmxlbmd0aDtlPnQ7dCsrKWk9by5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLl9ob2xlc1t0XSksaS5wdXNoKGlbMF0pLG4ucHVzaChpKTtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6bn0pfX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7ZS5wdXNoKHQudG9HZW9KU09OKCkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZTp0LGNvb3JkaW5hdGVzOmV9KX19by5NdWx0aVBvbHlsaW5lLmluY2x1ZGUoe3RvR2VvSlNPTjp0KCJNdWx0aUxpbmVTdHJpbmciKX0pLG8uTXVsdGlQb2x5Z29uLmluY2x1ZGUoe3RvR2VvSlNPTjp0KCJNdWx0aVBvbHlnb24iKX0pLG8uTGF5ZXJHcm91cC5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LG49W107aWYoaSYmIk11bHRpUG9pbnQiPT09aS50eXBlKXJldHVybiB0KCJNdWx0aVBvaW50IikuY2FsbCh0aGlzKTt2YXIgcz1pJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWkudHlwZTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7dC50b0dlb0pTT04mJihlPXQudG9HZW9KU09OKCksbi5wdXNoKHM/ZS5nZW9tZXRyeTpvLkdlb0pTT04uYXNGZWF0dXJlKGUpKSl9KSxzP28uR2VvSlNPTi5nZXRGZWF0dXJlKHRoaXMse2dlb21ldHJpZXM6bix0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24ifSk6e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpufX19KX0oKSxvLmdlb0pzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uR2VvSlNPTih0LGUpfSxvLkRvbUV2ZW50PXthZGRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxhLHIsaD1vLnN0YW1wKGkpLGw9Il9sZWFmbGV0XyIrZStoO3JldHVybiB0W2xdP3RoaXM6KHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChufHx0LGV8fG8uRG9tRXZlbnQuX2dldEV2ZW50KCkpfSxvLkJyb3dzZXIucG9pbnRlciYmMD09PWUuaW5kZXhPZigidG91Y2giKT90aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcih0LGUscyxoKTooby5Ccm93c2VyLnRvdWNoJiYiZGJsY2xpY2siPT09ZSYmdGhpcy5hZGREb3VibGVUYXBMaXN0ZW5lciYmdGhpcy5hZGREb3VibGVUYXBMaXN0ZW5lcih0LHMsaCksImFkZEV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1lPyh0LmFkZEV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixzLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoZSxzLCExKSk6Im1vdXNlZW50ZXIiPT09ZXx8Im1vdXNlbGVhdmUiPT09ZT8oYT1zLHI9Im1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VvdXQiLHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uRG9tRXZlbnQuX2NoZWNrTW91c2UodCxlKT9hKGUpOnZvaWQgMH0sdC5hZGRFdmVudExpc3RlbmVyKHIscywhMSkpOiJjbGljayI9PT1lJiZvLkJyb3dzZXIuYW5kcm9pZD8oYT1zLHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQuX2ZpbHRlckNsaWNrKHQsYSl9LHQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpKTp0LmFkZEV2ZW50TGlzdGVuZXIoZSxzLCExKToiYXR0YWNoRXZlbnQiaW4gdCYmdC5hdHRhY2hFdmVudCgib24iK2UscyksdFtsXT1zLHRoaXMpKX0scmVtb3ZlTGlzdGVuZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPW8uc3RhbXAoaSkscz0iX2xlYWZsZXRfIitlK24sYT10W3NdO3JldHVybiBhPyhvLkJyb3dzZXIucG9pbnRlciYmMD09PWUuaW5kZXhPZigidG91Y2giKT90aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcih0LGUsbik6by5Ccm93c2VyLnRvdWNoJiYiZGJsY2xpY2siPT09ZSYmdGhpcy5yZW1vdmVEb3VibGVUYXBMaXN0ZW5lcj90aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyKHQsbik6InJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1lPyh0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIixhLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxhLCExKSk6Im1vdXNlZW50ZXIiPT09ZXx8Im1vdXNlbGVhdmUiPT09ZT90LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiPT09ZT8ibW91c2VvdmVyIjoibW91c2VvdXQiLGEsITEpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpOiJkZXRhY2hFdmVudCJpbiB0JiZ0LmRldGFjaEV2ZW50KCJvbiIrZSxhKSx0W3NdPW51bGwsdGhpcyk6dGhpc30sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQuY2FuY2VsQnViYmxlPSEwLG8uRG9tRXZlbnQuX3NraXBwZWQodCksdGhpc30sZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPW8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uO3JldHVybiBvLkRvbUV2ZW50Lm9uKHQsIm1vdXNld2hlZWwiLGUpLm9uKHQsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLGUpfSxkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjpmdW5jdGlvbih0KXtmb3IodmFyIGU9by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24saT1vLkRyYWdnYWJsZS5TVEFSVC5sZW5ndGgtMTtpPj0wO2ktLSlvLkRvbUV2ZW50Lm9uKHQsby5EcmFnZ2FibGUuU1RBUlRbaV0sZSk7cmV0dXJuIG8uRG9tRXZlbnQub24odCwiY2xpY2siLG8uRG9tRXZlbnQuX2Zha2VTdG9wKS5vbih0LCJkYmxjbGljayIsZSl9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9LHN0b3A6ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCkuc3RvcFByb3BhZ2F0aW9uKHQpfSxnZXRNb3VzZVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIG5ldyBvLlBvaW50KHQuY2xpZW50WCx0LmNsaWVudFkpO3ZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyBvLlBvaW50KHQuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcCl9LGdldFdoZWVsRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gdC53aGVlbERlbHRhJiYoZT10LndoZWVsRGVsdGEvMTIwKSx0LmRldGFpbCYmKGU9LXQuZGV0YWlsLzMpLGV9LF9za2lwRXZlbnRzOnt9LF9mYWtlU3RvcDpmdW5jdGlvbih0KXtvLkRvbUV2ZW50Ll9za2lwRXZlbnRzW3QudHlwZV09ITB9LF9za2lwcGVkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3NraXBFdmVudHNbdC50eXBlXTtyZXR1cm4gdGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdPSExLGV9LF9jaGVja01vdXNlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5yZWxhdGVkVGFyZ2V0O2lmKCFpKXJldHVybiEwO3RyeXtmb3IoO2kmJmkhPT10OylpPWkucGFyZW50Tm9kZX1jYXRjaChuKXtyZXR1cm4hMX1yZXR1cm4gaSE9PXR9LF9nZXRFdmVudDpmdW5jdGlvbigpe3ZhciBlPXQuZXZlbnQ7aWYoIWUpZm9yKHZhciBpPWFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyO2kmJihlPWkuYXJndW1lbnRzWzBdLCFlfHx0LkV2ZW50IT09ZS5jb25zdHJ1Y3Rvcik7KWk9aS5jYWxsZXI7cmV0dXJuIGV9LF9maWx0ZXJDbGljazpmdW5jdGlvbih0LGUpe3ZhciBpPXQudGltZVN0YW1wfHx0Lm9yaWdpbmFsRXZlbnQudGltZVN0YW1wLG49by5Eb21FdmVudC5fbGFzdENsaWNrJiZpLW8uRG9tRXZlbnQuX2xhc3RDbGljaztyZXR1cm4gbiYmbj4xMDAmJjUwMD5ufHx0LnRhcmdldC5fc2ltdWxhdGVkQ2xpY2smJiF0Ll9zaW11bGF0ZWQ/dm9pZCBvLkRvbUV2ZW50LnN0b3AodCk6KG8uRG9tRXZlbnQuX2xhc3RDbGljaz1pLGUodCkpfX0sby5Eb21FdmVudC5vbj1vLkRvbUV2ZW50LmFkZExpc3RlbmVyLG8uRG9tRXZlbnQub2ZmPW8uRG9tRXZlbnQucmVtb3ZlTGlzdGVuZXIsby5EcmFnZ2FibGU9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLHN0YXRpY3M6e1NUQVJUOm8uQnJvd3Nlci50b3VjaD9bInRvdWNoc3RhcnQiLCJtb3VzZWRvd24iXTpbIm1vdXNlZG93biJdLEVORDp7bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE1PVkU6e21vdXNlZG93bjoibW91c2Vtb3ZlIix0b3VjaHN0YXJ0OiJ0b3VjaG1vdmUiLHBvaW50ZXJkb3duOiJ0b3VjaG1vdmUiLE1TUG9pbnRlckRvd246InRvdWNobW92ZSJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7dGhpcy5fZWxlbWVudD10LHRoaXMuX2RyYWdTdGFydFRhcmdldD1lfHx0fSxlbmFibGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fZW5hYmxlZCl7Zm9yKHZhciB0PW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO3Q+PTA7dC0tKW8uRG9tRXZlbnQub24odGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LG8uRHJhZ2dhYmxlLlNUQVJUW3RdLHRoaXMuX29uRG93bix0aGlzKTt0aGlzLl9lbmFibGVkPSEwfX0sZGlzYWJsZTpmdW5jdGlvbigpe2lmKHRoaXMuX2VuYWJsZWQpe2Zvcih2YXIgdD1vLkRyYWdnYWJsZS5TVEFSVC5sZW5ndGgtMTt0Pj0wO3QtLSlvLkRvbUV2ZW50Lm9mZih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsby5EcmFnZ2FibGUuU1RBUlRbdF0sdGhpcy5fb25Eb3duLHRoaXMpO3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITF9fSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21vdmVkPSExLCEodC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpLG8uRHJhZ2dhYmxlLl9kaXNhYmxlZHx8KG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92aW5nKSkpKXt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLG8uRG9tRXZlbnQub24oZSxvLkRyYWdnYWJsZS5NT1ZFW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLm9uKGUsby5EcmFnZ2FibGUuRU5EW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHZvaWQodGhpcy5fbW92ZWQ9ITApO3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsbj1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxzPW4uc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KHMueHx8cy55KSYmKG8uQnJvd3Nlci50b3VjaCYmTWF0aC5hYnMocy54KStNYXRoLmFicyhzLnkpPDN8fChvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCkuc3VidHJhY3Qocyksby5Eb21VdGlsLmFkZENsYXNzKGUuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwibGVhZmxldC1kcmFnLXRhcmdldCIpKSx0aGlzLl9uZXdQb3M9dGhpcy5fc3RhcnRQb3MuYWRkKHMpLHRoaXMuX21vdmluZz0hMCxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVQb3NpdGlvbix0aGlzLCEwLHRoaXMuX2RyYWdTdGFydFRhcmdldCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJwcmVkcmFnIiksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciKX0sX29uVXA6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZS5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IiksdGhpcy5fbGFzdFRhcmdldD1udWxsKTtmb3IodmFyIHQgaW4gby5EcmFnZ2FibGUuTU9WRSlvLkRvbUV2ZW50Lm9mZihlLG8uRHJhZ2dhYmxlLk1PVkVbdF0sdGhpcy5fb25Nb3ZlKS5vZmYoZSxvLkRyYWdnYWJsZS5FTkRbdF0sdGhpcy5fb25VcCk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITF9fSksby5IYW5kbGVyPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsaW5lcnRpYVRocmVzaG9sZDpvLkJyb3dzZXIudG91Y2g/MzI6MTgsZWFzZUxpbmVhcml0eTouMjUsd29ybGRDb3B5SnVtcDohMX0pLG8uTWFwLkRyYWc9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fZHJhZ2dhYmxlKXt2YXIgdD10aGlzLl9tYXA7dGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWcsdGhpcyksdC5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblZpZXdSZXNldCx0aGlzKSl9dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QuX3BhbkFuaW0mJnQuX3BhbkFuaW0uc3RvcCgpLHQuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIHQ9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX25ld1Bvczt0aGlzLl9wb3NpdGlvbnMucHVzaChlKSx0aGlzLl90aW1lcy5wdXNoKHQpLHQtdGhpcy5fdGltZXNbMF0+MjAwJiYodGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKSl9dGhpcy5fbWFwLmZpcmUoIm1vdmUiKS5maXJlKCJkcmFnIil9LF9vblZpZXdSZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwwXSk7dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0PWUuc3VidHJhY3QodCkueCx0aGlzLl93b3JsZFdpZHRoPXRoaXMuX21hcC5wcm9qZWN0KFswLDE4MF0pLnh9LF9vblByZURyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93b3JsZFdpZHRoLGU9TWF0aC5yb3VuZCh0LzIpLGk9dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LG49dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCxvPShuLWUraSkldCtlLWkscz0obitlK2kpJXQtZS1pLGE9TWF0aC5hYnMobytpKTxNYXRoLmFicyhzK2kpP286czt0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PWF9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49K25ldyBEYXRlLXRoaXMuX2xhc3RUaW1lLHM9IWkuaW5lcnRpYXx8bj5pLmluZXJ0aWFUaHJlc2hvbGR8fCF0aGlzLl9wb3NpdGlvbnNbMF07aWYoZS5maXJlKCJkcmFnZW5kIix0KSxzKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIGE9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lK24tdGhpcy5fdGltZXNbMF0pLzFlMyxoPWkuZWFzZUxpbmVhcml0eSxsPWEubXVsdGlwbHlCeShoL3IpLHU9bC5kaXN0YW5jZVRvKFswLDBdKSxjPU1hdGgubWluKGkuaW5lcnRpYU1heFNwZWVkLHUpLGQ9bC5tdWx0aXBseUJ5KGMvdSkscD1jLyhpLmluZXJ0aWFEZWNlbGVyYXRpb24qaCksXz1kLm11bHRpcGx5QnkoLXAvMikucm91bmQoKTtfLngmJl8ueT8oXz1lLl9saW1pdE9mZnNldChfLGUub3B0aW9ucy5tYXhCb3VuZHMpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7ZS5wYW5CeShfLHtkdXJhdGlvbjpwLGVhc2VMaW5lYXJpdHk6aCxub01vdmVTdGFydDohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSk7ImNlbnRlciI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRvdWJsZUNsaWNrWm9vbSIsby5NYXAuRG91YmxlQ2xpY2tab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksby5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwiTW96TW91c2VQaXhlbFNjcm9sbCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCksby5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEodCk7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgaT1NYXRoLm1heCg0MC0oK25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSksMCk7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxpKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9kZWx0YSxpPXQuZ2V0Wm9vbSgpO2U9ZT4wP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSw0KSwtNCksZT10Ll9saW1pdFpvb20oaStlKS1pLHRoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsZSYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStlKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrZSkpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixvLk1hcC5TY3JvbGxXaGVlbFpvb20pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse190b3VjaHN0YXJ0Om8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVyZG93biI6InRvdWNoc3RhcnQiLF90b3VjaGVuZDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6by5Ccm93c2VyLnBvaW50ZXI/InBvaW50ZXJ1cCI6InRvdWNoZW5kIixhZGREb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGksbil7ZnVuY3Rpb24gcyh0KXt2YXIgZTtpZihvLkJyb3dzZXIucG9pbnRlcj8oXy5wdXNoKHQucG9pbnRlcklkKSxlPV8ubGVuZ3RoKTplPXQudG91Y2hlcy5sZW5ndGgsIShlPjEpKXt2YXIgaT1EYXRlLm5vdygpLG49aS0ocnx8aSk7aD10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsbD1uPjAmJnU+PW4scj1pfX1mdW5jdGlvbiBhKHQpe2lmKG8uQnJvd3Nlci5wb2ludGVyKXt2YXIgZT1fLmluZGV4T2YodC5wb2ludGVySWQpO2lmKC0xPT09ZSlyZXR1cm47Xy5zcGxpY2UoZSwxKX1pZihsKXtpZihvLkJyb3dzZXIucG9pbnRlcil7dmFyIG4scz17fTtmb3IodmFyIGEgaW4gaCluPWhbYV0sc1thXT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmJpbmQoaCk6bjtoPXN9aC50eXBlPSJkYmxjbGljayIsaShoKSxyPW51bGx9fXZhciByLGgsbD0hMSx1PTI1MCxjPSJfbGVhZmxldF8iLGQ9dGhpcy5fdG91Y2hzdGFydCxwPXRoaXMuX3RvdWNoZW5kLF89W107dFtjK2Qrbl09cyx0W2MrcCtuXT1hO3ZhciBtPW8uQnJvd3Nlci5wb2ludGVyP2UuZG9jdW1lbnRFbGVtZW50OnQ7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihkLHMsITEpLG0uYWRkRXZlbnRMaXN0ZW5lcihwLGEsITEpLG8uQnJvd3Nlci5wb2ludGVyJiZtLmFkZEV2ZW50TGlzdGVuZXIoby5Eb21FdmVudC5QT0lOVEVSX0NBTkNFTCxhLCExKSx0aGlzfSxyZW1vdmVEb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGkpe3ZhciBuPSJfbGVhZmxldF8iO3JldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hzdGFydCx0W24rdGhpcy5fdG91Y2hzdGFydCtpXSwhMSksKG8uQnJvd3Nlci5wb2ludGVyP2UuZG9jdW1lbnRFbGVtZW50OnQpLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hlbmQsdFtuK3RoaXMuX3RvdWNoZW5kK2ldLCExKSxvLkJyb3dzZXIucG9pbnRlciYmZS5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLkRvbUV2ZW50LlBPSU5URVJfQ0FOQ0VMLHRbbit0aGlzLl90b3VjaGVuZCtpXSwhMSksdGhpc319KSxvLmV4dGVuZChvLkRvbUV2ZW50LHtQT0lOVEVSX0RPV046by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIixQT0lOVEVSX01PVkU6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixQT0lOVEVSX1VQOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlclVwIjoicG9pbnRlcnVwIixQT0lOVEVSX0NBTkNFTDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixfcG9pbnRlcnM6W10sX3BvaW50ZXJEb2N1bWVudExpc3RlbmVyOiExLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0IjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJTdGFydCh0LGUsaSxuKTtjYXNlInRvdWNoZW5kIjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJFbmQodCxlLGksbik7Y2FzZSJ0b3VjaG1vdmUiOnJldHVybiB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lck1vdmUodCxlLGksbik7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHRvdWNoIGV2ZW50IHR5cGUifX0sYWRkUG9pbnRlckxpc3RlbmVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4scyl7dmFyIGE9Il9sZWFmbGV0XyIscj10aGlzLl9wb2ludGVycyxoPWZ1bmN0aW9uKHQpe28uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCk7Zm9yKHZhciBlPSExLGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLnBvaW50ZXJJZD09PXQucG9pbnRlcklkKXtlPSEwOwpicmVha31lfHxyLnB1c2godCksdC50b3VjaGVzPXIuc2xpY2UoKSx0LmNoYW5nZWRUb3VjaGVzPVt0XSxuKHQpfTtpZih0W2ErInRvdWNoc3RhcnQiK3NdPWgsdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9ET1dOLGgsITEpLCF0aGlzLl9wb2ludGVyRG9jdW1lbnRMaXN0ZW5lcil7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspaWYocltlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7ci5zcGxpY2UoZSwxKTticmVha319O2UuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLGwsITEpLGUuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0NBTkNFTCxsLCExKSx0aGlzLl9wb2ludGVyRG9jdW1lbnRMaXN0ZW5lcj0hMH1yZXR1cm4gdGhpc30sYWRkUG9pbnRlckxpc3RlbmVyTW92ZTpmdW5jdGlvbih0LGUsaSxuKXtmdW5jdGlvbiBvKHQpe2lmKHQucG9pbnRlclR5cGUhPT10Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiYibW91c2UiIT09dC5wb2ludGVyVHlwZXx8MCE9PXQuYnV0dG9ucyl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspaWYoYVtlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7YVtlXT10O2JyZWFrfXQudG91Y2hlcz1hLnNsaWNlKCksdC5jaGFuZ2VkVG91Y2hlcz1bdF0saSh0KX19dmFyIHM9Il9sZWFmbGV0XyIsYT10aGlzLl9wb2ludGVycztyZXR1cm4gdFtzKyJ0b3VjaG1vdmUiK25dPW8sdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9NT1ZFLG8sITEpLHRoaXN9LGFkZFBvaW50ZXJMaXN0ZW5lckVuZDpmdW5jdGlvbih0LGUsaSxuKXt2YXIgbz0iX2xlYWZsZXRfIixzPXRoaXMuX3BvaW50ZXJzLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLmxlbmd0aDtlKyspaWYoc1tlXS5wb2ludGVySWQ9PT10LnBvaW50ZXJJZCl7cy5zcGxpY2UoZSwxKTticmVha310LnRvdWNoZXM9cy5zbGljZSgpLHQuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9O3JldHVybiB0W28rInRvdWNoZW5kIituXT1hLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfVVAsYSwhMSksdC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsYSwhMSksdGhpc30scmVtb3ZlUG9pbnRlckxpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj0iX2xlYWZsZXRfIixvPXRbbitlK2ldO3N3aXRjaChlKXtjYXNlInRvdWNoc3RhcnQiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfRE9XTixvLCExKTticmVhaztjYXNlInRvdWNobW92ZSI6dC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9NT1ZFLG8sITEpO2JyZWFrO2Nhc2UidG91Y2hlbmQiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfVVAsbywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbywhMSl9cmV0dXJuIHRoaXN9fSksby5NYXAubWVyZ2VPcHRpb25zKHt0b3VjaFpvb206by5Ccm93c2VyLnRvdWNoJiYhby5Ccm93c2VyLmFuZHJvaWQyMyxib3VuY2VBdFpvb21MaW1pdHM6ITB9KSxvLk1hcC5Ub3VjaFpvb209by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmIWkuX2FuaW1hdGluZ1pvb20mJiF0aGlzLl96b29taW5nKXt2YXIgbj1pLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzBdKSxzPWkubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0LnRvdWNoZXNbMV0pLGE9aS5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpO3RoaXMuX3N0YXJ0Q2VudGVyPW4uYWRkKHMpLl9kaXZpZGVCeSgyKSx0aGlzLl9zdGFydERpc3Q9bi5kaXN0YW5jZVRvKHMpLHRoaXMuX21vdmVkPSExLHRoaXMuX3pvb21pbmc9ITAsdGhpcy5fY2VudGVyT2Zmc2V0PWEuc3VidHJhY3QodGhpcy5fc3RhcnRDZW50ZXIpLGkuX3BhbkFuaW0mJmkuX3BhbkFuaW0uc3RvcCgpLG8uRG9tRXZlbnQub24oZSwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKS5vbihlLCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpfX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiZ0aGlzLl96b29taW5nKXt2YXIgaT1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWUubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0LnRvdWNoZXNbMV0pO3RoaXMuX3NjYWxlPWkuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3QsdGhpcy5fZGVsdGE9aS5fYWRkKG4pLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fc3RhcnRDZW50ZXIpLDEhPT10aGlzLl9zY2FsZSYmKGUub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHN8fCEoZS5nZXRab29tKCk9PT1lLmdldE1pblpvb20oKSYmdGhpcy5fc2NhbGU8MXx8ZS5nZXRab29tKCk9PT1lLmdldE1heFpvb20oKSYmdGhpcy5fc2NhbGU+MSkpJiYodGhpcy5fbW92ZWR8fChvLkRvbVV0aWwuYWRkQ2xhc3MoZS5fbWFwUGFuZSwibGVhZmxldC10b3VjaGluZyIpLGUuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiem9vbXN0YXJ0IiksdGhpcy5fbW92ZWQ9ITApLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2FuaW1SZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9uTW92ZSx0aGlzLCEwLHRoaXMuX21hcC5fY29udGFpbmVyKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpKX19LF91cGRhdGVPbk1vdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9nZXRTY2FsZU9yaWdpbigpLGk9dC5sYXllclBvaW50VG9MYXRMbmcoZSksbj10LmdldFNjYWxlWm9vbSh0aGlzLl9zY2FsZSk7dC5fYW5pbWF0ZVpvb20oaSxuLHRoaXMuX3N0YXJ0Q2VudGVyLHRoaXMuX3NjYWxlLHRoaXMuX2RlbHRhLCExLCEwKX0sX29uVG91Y2hFbmQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbW92ZWR8fCF0aGlzLl96b29taW5nKXJldHVybiB2b2lkKHRoaXMuX3pvb21pbmc9ITEpO3ZhciB0PXRoaXMuX21hcDt0aGlzLl96b29taW5nPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0Ll9tYXBQYW5lLCJsZWFmbGV0LXRvdWNoaW5nIiksby5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCksby5Eb21FdmVudC5vZmYoZSwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSkub2ZmKGUsInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKTt2YXIgaT10aGlzLl9nZXRTY2FsZU9yaWdpbigpLG49dC5sYXllclBvaW50VG9MYXRMbmcoaSkscz10LmdldFpvb20oKSxhPXQuZ2V0U2NhbGVab29tKHRoaXMuX3NjYWxlKS1zLHI9YT4wP01hdGguY2VpbChhKTpNYXRoLmZsb29yKGEpLGg9dC5fbGltaXRab29tKHMrciksbD10LmdldFpvb21TY2FsZShoKS90aGlzLl9zY2FsZTt0Ll9hbmltYXRlWm9vbShuLGgsaSxsKX0sX2dldFNjYWxlT3JpZ2luOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2VudGVyT2Zmc2V0LnN1YnRyYWN0KHRoaXMuX2RlbHRhKS5kaXZpZGVCeSh0aGlzLl9zY2FsZSk7cmV0dXJuIHRoaXMuX3N0YXJ0Q2VudGVyLmFkZCh0KX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRvdWNoWm9vbSIsby5NYXAuVG91Y2hab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3RhcDohMCx0YXBUb2xlcmFuY2U6MTV9KSxvLk1hcC5UYXA9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsInRvdWNoc3RhcnQiLHRoaXMuX29uRG93bix0aGlzKX0sX29uRG93bjpmdW5jdGlvbih0KXtpZih0LnRvdWNoZXMpe2lmKG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksdGhpcy5fZmlyZUNsaWNrPSEwLHQudG91Y2hlcy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5fZmlyZUNsaWNrPSExLHZvaWQgY2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTt2YXIgaT10LnRvdWNoZXNbMF0sbj1pLnRhcmdldDt0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9bmV3IG8uUG9pbnQoaS5jbGllbnRYLGkuY2xpZW50WSksbi50YWdOYW1lJiYiYSI9PT1uLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmby5Eb21VdGlsLmFkZENsYXNzKG4sImxlYWZsZXQtYWN0aXZlIiksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChvLmJpbmQoZnVuY3Rpb24oKXt0aGlzLl9pc1RhcFZhbGlkKCkmJih0aGlzLl9maXJlQ2xpY2s9ITEsdGhpcy5fb25VcCgpLHRoaXMuX3NpbXVsYXRlRXZlbnQoImNvbnRleHRtZW51IixpKSl9LHRoaXMpLDFlMyksby5Eb21FdmVudC5vbihlLCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSx0aGlzKS5vbihlLCJ0b3VjaGVuZCIsdGhpcy5fb25VcCx0aGlzKX19LF9vblVwOmZ1bmN0aW9uKHQpe2lmKGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksby5Eb21FdmVudC5vZmYoZSwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUsdGhpcykub2ZmKGUsInRvdWNoZW5kIix0aGlzLl9vblVwLHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPWkudGFyZ2V0O24mJm4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5yZW1vdmVDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2lzVGFwVmFsaWQoKSYmdGhpcy5fc2ltdWxhdGVFdmVudCgiY2xpY2siLGkpfX0sX2lzVGFwVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpPD10aGlzLl9tYXAub3B0aW9ucy50YXBUb2xlcmFuY2V9LF9vbk1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b3VjaGVzWzBdO3RoaXMuX25ld1Bvcz1uZXcgby5Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24oaSxuKXt2YXIgbz1lLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO28uX3NpbXVsYXRlZD0hMCxuLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2s9ITAsby5pbml0TW91c2VFdmVudChpLCEwLCEwLHQsMSxuLnNjcmVlblgsbi5zY3JlZW5ZLG4uY2xpZW50WCxuLmNsaWVudFksITEsITEsITEsITEsMCxudWxsKSxuLnRhcmdldC5kaXNwYXRjaEV2ZW50KG8pfX0pLG8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5wb2ludGVyJiZvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsby5NYXAuVGFwKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2JveFpvb206ITB9KSxvLk1hcC5Cb3hab29tPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXQuX2NvbnRhaW5lcix0aGlzLl9wYW5lPXQuX3BhbmVzLm92ZXJsYXlQYW5lLHRoaXMuX21vdmVkPSExfSxhZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biksdGhpcy5fbW92ZWQ9ITF9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmVkfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vdmVkPSExLCF0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uPyExOihvLkRvbVV0aWwuZGlzYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZGlzYWJsZUltYWdlRHJhZygpLHRoaXMuX3N0YXJ0TGF5ZXJQb2ludD10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSx2b2lkIG8uRG9tRXZlbnQub24oZSwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKS5vbihlLCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXAsdGhpcykub24oZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVkfHwodGhpcy5fYm94PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsImxlYWZsZXQtem9vbS1ib3giLHRoaXMuX3BhbmUpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9ib3gsdGhpcy5fc3RhcnRMYXllclBvaW50KSx0aGlzLl9jb250YWluZXIuc3R5bGUuY3Vyc29yPSJjcm9zc2hhaXIiLHRoaXMuX21hcC5maXJlKCJib3h6b29tc3RhcnQiKSk7dmFyIGU9dGhpcy5fc3RhcnRMYXllclBvaW50LGk9dGhpcy5fYm94LG49dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCkscz1uLnN1YnRyYWN0KGUpLGE9bmV3IG8uUG9pbnQoTWF0aC5taW4obi54LGUueCksTWF0aC5taW4obi55LGUueSkpO28uRG9tVXRpbC5zZXRQb3NpdGlvbihpLGEpLHRoaXMuX21vdmVkPSEwLGkuc3R5bGUud2lkdGg9TWF0aC5tYXgoMCxNYXRoLmFicyhzLngpLTQpKyJweCIsaS5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCxNYXRoLmFicyhzLnkpLTQpKyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKHRoaXMuX3BhbmUucmVtb3ZlQ2hpbGQodGhpcy5fYm94KSx0aGlzLl9jb250YWluZXIuc3R5bGUuY3Vyc29yPSIiKSxvLkRvbVV0aWwuZW5hYmxlVGV4dFNlbGVjdGlvbigpLG8uRG9tVXRpbC5lbmFibGVJbWFnZURyYWcoKSxvLkRvbUV2ZW50Lm9mZihlLCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKS5vZmYoZSwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKS5vZmYoZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt0aGlzLl9maW5pc2goKTt2YXIgZT10aGlzLl9tYXAsaT1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCk7aWYoIXRoaXMuX3N0YXJ0TGF5ZXJQb2ludC5lcXVhbHMoaSkpe3ZhciBuPW5ldyBvLkxhdExuZ0JvdW5kcyhlLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9zdGFydExheWVyUG9pbnQpLGUubGF5ZXJQb2ludFRvTGF0TG5nKGkpKTtlLmZpdEJvdW5kcyhuKSxlLmZpcmUoImJveHpvb21lbmQiLHtib3hab29tQm91bmRzOm59KX19LF9vbktleURvd246ZnVuY3Rpb24odCl7Mjc9PT10LmtleUNvZGUmJnRoaXMuX2ZpbmlzaCgpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwiYm94Wm9vbSIsby5NYXAuQm94Wm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHtrZXlib2FyZDohMCxrZXlib2FyZFBhbk9mZnNldDo4MCxrZXlib2FyZFpvb21PZmZzZXQ6MX0pLG8uTWFwLktleWJvYXJkPW8uSGFuZGxlci5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuT2Zmc2V0KHQub3B0aW9ucy5rZXlib2FyZFBhbk9mZnNldCksdGhpcy5fc2V0Wm9vbU9mZnNldCh0Lm9wdGlvbnMua2V5Ym9hcmRab29tT2Zmc2V0KX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjstMT09PXQudGFiSW5kZXgmJih0LnRhYkluZGV4PSIwIiksby5Eb21FdmVudC5vbih0LCJmb2N1cyIsdGhpcy5fb25Gb2N1cyx0aGlzKS5vbih0LCJibHVyIix0aGlzLl9vbkJsdXIsdGhpcykub24odCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKSx0aGlzLl9tYXAub24oImZvY3VzIix0aGlzLl9hZGRIb29rcyx0aGlzKS5vbigiYmx1ciIsdGhpcy5fcmVtb3ZlSG9va3MsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKTt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjtvLkRvbUV2ZW50Lm9mZih0LCJmb2N1cyIsdGhpcy5fb25Gb2N1cyx0aGlzKS5vZmYodCwiYmx1ciIsdGhpcy5fb25CbHVyLHRoaXMpLm9mZih0LCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpLHRoaXMuX21hcC5vZmYoImZvY3VzIix0aGlzLl9hZGRIb29rcyx0aGlzKS5vZmYoImJsdXIiLHRoaXMuX3JlbW92ZUhvb2tzLHRoaXMpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZCl7dmFyIGk9ZS5ib2R5LG49ZS5kb2N1bWVudEVsZW1lbnQsbz1pLnNjcm9sbFRvcHx8bi5zY3JvbGxUb3Ascz1pLnNjcm9sbExlZnR8fG4uc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHQuc2Nyb2xsVG8ocyxvKX19LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZSgiZm9jdXMiKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5fbWFwLmZpcmUoImJsdXIiKX0sX3NldFBhbk9mZnNldDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fcGFuS2V5cz17fSxvPXRoaXMua2V5Q29kZXM7Zm9yKGU9MCxpPW8ubGVmdC5sZW5ndGg7aT5lO2UrKyluW28ubGVmdFtlXV09Wy0xKnQsMF07Zm9yKGU9MCxpPW8ucmlnaHQubGVuZ3RoO2k+ZTtlKyspbltvLnJpZ2h0W2VdXT1bdCwwXTtmb3IoZT0wLGk9by5kb3duLmxlbmd0aDtpPmU7ZSsrKW5bby5kb3duW2VdXT1bMCx0XTtmb3IoZT0wLGk9by51cC5sZW5ndGg7aT5lO2UrKyluW28udXBbZV1dPVswLC0xKnRdfSxfc2V0Wm9vbU9mZnNldDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fem9vbUtleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihlPTAsaT1vLnpvb21Jbi5sZW5ndGg7aT5lO2UrKyluW28uem9vbUluW2VdXT10O2ZvcihlPTAsaT1vLnpvb21PdXQubGVuZ3RoO2k+ZTtlKyspbltvLnpvb21PdXRbZV1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX3JlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYoZSwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5Q29kZSxpPXRoaXMuX21hcDtpZihlIGluIHRoaXMuX3BhbktleXMpe2lmKGkuX3BhbkFuaW0mJmkuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpcmV0dXJuO2kucGFuQnkodGhpcy5fcGFuS2V5c1tlXSksaS5vcHRpb25zLm1heEJvdW5kcyYmaS5wYW5JbnNpZGVCb3VuZHMoaS5vcHRpb25zLm1heEJvdW5kcyl9ZWxzZXtpZighKGUgaW4gdGhpcy5fem9vbUtleXMpKXJldHVybjtpLnNldFpvb20oaS5nZXRab29tKCkrdGhpcy5fem9vbUtleXNbZV0pfW8uRG9tRXZlbnQuc3RvcCh0KX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixvLk1hcC5LZXlib2FyZCksby5IYW5kbGVyLk1hcmtlckRyYWc9by5IYW5kbGVyLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXI9dH0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIuX2ljb247dGhpcy5fZHJhZ2dhYmxlfHwodGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0LHQpKSx0aGlzLl9kcmFnZ2FibGUub24oImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQsdGhpcykub24oImRyYWciLHRoaXMuX29uRHJhZyx0aGlzKS5vbigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5lbmFibGUoKSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFya2VyLl9pY29uLCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKCJkcmFnc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LHRoaXMpLm9mZigiZHJhZyIsdGhpcy5fb25EcmFnLHRoaXMpLm9mZigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKS5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKX0sX29uRHJhZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcmtlcixlPXQuX3NoYWRvdyxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0Ll9pY29uKSxuPXQuX21hcC5sYXllclBvaW50VG9MYXRMbmcoaSk7ZSYmby5Eb21VdGlsLnNldFBvc2l0aW9uKGUsaSksdC5fbGF0bG5nPW4sdC5maXJlKCJtb3ZlIix7bGF0bG5nOm59KS5maXJlKCJkcmFnIil9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSxvLkNvbnRyb2w9by5DbGFzcy5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbn0sc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwO3JldHVybiBlJiZlLnJlbW92ZUNvbnRyb2wodGhpcyksdGhpcy5vcHRpb25zLnBvc2l0aW9uPXQsZSYmZS5hZGRDb250cm9sKHRoaXMpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGFkZFRvOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10O3ZhciBlPXRoaXMuX2NvbnRhaW5lcj10aGlzLm9uQWRkKHQpLGk9dGhpcy5nZXRQb3NpdGlvbigpLG49dC5fY29udHJvbENvcm5lcnNbaV07cmV0dXJuIG8uRG9tVXRpbC5hZGRDbGFzcyhlLCJsZWFmbGV0LWNvbnRyb2wiKSwtMSE9PWkuaW5kZXhPZigiYm90dG9tIik/bi5pbnNlcnRCZWZvcmUoZSxuLmZpcnN0Q2hpbGQpOm4uYXBwZW5kQ2hpbGQoZSksdGhpc30scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFBvc2l0aW9uKCksaT10Ll9jb250cm9sQ29ybmVyc1tlXTtyZXR1cm4gaS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcD1udWxsLHRoaXMub25SZW1vdmUmJnRoaXMub25SZW1vdmUodCksdGhpc30sX3JlZm9jdXNPbk1hcDpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmdldENvbnRhaW5lcigpLmZvY3VzKCl9fSksby5jb250cm9sPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sKHQpfSxvLk1hcC5pbmNsdWRlKHthZGRDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZFRvKHRoaXMpLHRoaXN9LHJlbW92ZUNvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVtb3ZlRnJvbSh0aGlzKSx0aGlzfSxfaW5pdENvbnRyb2xQb3M6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQscyl7dmFyIGE9aSt0KyIgIitpK3M7ZVt0K3NdPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsYSxuKX12YXIgZT10aGlzLl9jb250cm9sQ29ybmVycz17fSxpPSJsZWFmbGV0LSIsbj10aGlzLl9jb250cm9sQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsaSsiY29udHJvbC1jb250YWluZXIiLHRoaXMuX2NvbnRhaW5lcik7dCgidG9wIiwibGVmdCIpLHQoInRvcCIsInJpZ2h0IiksdCgiYm90dG9tIiwibGVmdCIpLHQoImJvdHRvbSIsInJpZ2h0Iil9LF9jbGVhckNvbnRyb2xQb3M6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fY29udHJvbENvbnRhaW5lcil9fSksby5Db250cm9sLlpvb209by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246InRvcGxlZnQiLHpvb21JblRleHQ6IisiLHpvb21JblRpdGxlOiJab29tIGluIix6b29tT3V0VGV4dDoiLSIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIiBsZWFmbGV0LWJhciIpO3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy56b29tSW5UZXh0LHRoaXMub3B0aW9ucy56b29tSW5UaXRsZSxlKyItaW4iLGksdGhpcy5fem9vbUluLHRoaXMpLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKHRoaXMub3B0aW9ucy56b29tT3V0VGV4dCx0aGlzLm9wdGlvbnMuem9vbU91dFRpdGxlLGUrIi1vdXQiLGksdGhpcy5fem9vbU91dCx0aGlzKSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LF96b29tSW46ZnVuY3Rpb24odCl7dGhpcy5fbWFwLnpvb21Jbih0LnNoaWZ0S2V5PzM6MSl9LF96b29tT3V0OmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tT3V0KHQuc2hpZnRLZXk/MzoxKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGUsaSxuLHMsYSl7dmFyIHI9by5Eb21VdGlsLmNyZWF0ZSgiYSIsaSxuKTtyLmlubmVySFRNTD10LHIuaHJlZj0iIyIsci50aXRsZT1lO3ZhciBoPW8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uO3JldHVybiBvLkRvbUV2ZW50Lm9uKHIsImNsaWNrIixoKS5vbihyLCJtb3VzZWRvd24iLGgpLm9uKHIsImRibGNsaWNrIixoKS5vbihyLCJjbGljayIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCkub24ociwiY2xpY2siLHMsYSkub24ociwiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCxhKSxyfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT0ibGVhZmxldC1kaXNhYmxlZCI7by5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSx0Ll96b29tPT09dC5nZXRNaW5ab29tKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLGUpLHQuX3pvb209PT10LmdldE1heFpvb20oKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBvLkNvbnRyb2wuWm9vbSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSksby5jb250cm9sLnpvb209ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuWm9vbSh0KX0sby5Db250cm9sLkF0dHJpYnV0aW9uPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2F0dHJpYnV0aW9ucz17fX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiIpLG8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odGhpcy5fY29udGFpbmVyKTtmb3IodmFyIGUgaW4gdC5fbGF5ZXJzKXQuX2xheWVyc1tlXS5nZXRBdHRyaWJ1dGlvbiYmdGhpcy5hZGRBdHRyaWJ1dGlvbih0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24oKSk7cmV0dXJuIHQub24oImxheWVyYWRkIix0aGlzLl9vbkxheWVyQWRkLHRoaXMpLm9uKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllclJlbW92ZSx0aGlzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckFkZCkub2ZmKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllclJlbW92ZSl9LHNldFByZWZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnByZWZpeD10LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCksdGhpcyk6dm9pZCAwfSxyZW1vdmVBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdJiYodGhpcy5fYXR0cmlidXRpb25zW3RdLS0sdGhpcy5fdXBkYXRlKCkpLHRoaXMpOnZvaWQgMH0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2F0dHJpYnV0aW9ucyl0aGlzLl9hdHRyaWJ1dGlvbnNbZV0mJnQucHVzaChlKTt2YXIgaT1bXTt0aGlzLm9wdGlvbnMucHJlZml4JiZpLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCksdC5sZW5ndGgmJmkucHVzaCh0LmpvaW4oIiwgIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9aS5qb2luKCIgfCAiKX19LF9vbkxheWVyQWRkOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5sYXllci5nZXRBdHRyaWJ1dGlvbigpKX0sX29uTGF5ZXJSZW1vdmU6ZnVuY3Rpb24odCl7dC5sYXllci5nZXRBdHRyaWJ1dGlvbiYmdGhpcy5yZW1vdmVBdHRyaWJ1dGlvbih0LmxheWVyLmdldEF0dHJpYnV0aW9uKCkpfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7YXR0cmlidXRpb25Db250cm9sOiEwfSksby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sJiYodGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2w9KG5ldyBvLkNvbnRyb2wuQXR0cmlidXRpb24pLmFkZFRvKHRoaXMpKX0pLG8uY29udHJvbC5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbC5BdHRyaWJ1dGlvbih0KX0sby5Db250cm9sLlNjYWxlPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21sZWZ0IixtYXhXaWR0aDoxMDAsbWV0cmljOiEwLGltcGVyaWFsOiEwLHVwZGF0ZVdoZW5JZGxlOiExfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dDt2YXIgZT0ibGVhZmxldC1jb250cm9sLXNjYWxlIixpPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGUsaSksdC5vbihuLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX3VwZGF0ZSx0aGlzKSxpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZih0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGU/Im1vdmVlbmQiOiJtb3ZlIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxlLGkpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWxpbmUiLGkpKSx0LmltcGVyaWFsJiYodGhpcy5faVNjYWxlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWxpbmUiLGkpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRCb3VuZHMoKSxlPXQuZ2V0Q2VudGVyKCkubGF0LGk9NjM3ODEzNypNYXRoLlBJKk1hdGguY29zKGUqTWF0aC5QSS8xODApLG49aSoodC5nZXROb3J0aEVhc3QoKS5sbmctdC5nZXRTb3V0aFdlc3QoKS5sbmcpLzE4MCxvPXRoaXMuX21hcC5nZXRTaXplKCkscz10aGlzLm9wdGlvbnMsYT0wO28ueD4wJiYoYT1uKihzLm1heFdpZHRoL28ueCkpLHRoaXMuX3VwZGF0ZVNjYWxlcyhzLGEpfSxfdXBkYXRlU2NhbGVzOmZ1bmN0aW9uKHQsZSl7dC5tZXRyaWMmJmUmJnRoaXMuX3VwZGF0ZU1ldHJpYyhlKSx0LmltcGVyaWFsJiZlJiZ0aGlzLl91cGRhdGVJbXBlcmlhbChlKX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRSb3VuZE51bSh0KTt0aGlzLl9tU2NhbGUuc3R5bGUud2lkdGg9dGhpcy5fZ2V0U2NhbGVXaWR0aChlL3QpKyJweCIsdGhpcy5fbVNjYWxlLmlubmVySFRNTD0xZTM+ZT9lKyIgbSI6ZS8xZTMrIiBrbSJ9LF91cGRhdGVJbXBlcmlhbDpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbz0zLjI4MDgzOTkqdCxzPXRoaXMuX2lTY2FsZTtvPjUyODA/KGU9by81MjgwLGk9dGhpcy5fZ2V0Um91bmROdW0oZSkscy5zdHlsZS53aWR0aD10aGlzLl9nZXRTY2FsZVdpZHRoKGkvZSkrInB4IixzLmlubmVySFRNTD1pKyIgbWkiKToobj10aGlzLl9nZXRSb3VuZE51bShvKSxzLnN0eWxlLndpZHRoPXRoaXMuX2dldFNjYWxlV2lkdGgobi9vKSsicHgiLHMuaW5uZXJIVE1MPW4rIiBmdCIpfSxfZ2V0U2NhbGVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqdCktMTB9LF9nZXRSb3VuZE51bTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygxMCwoTWF0aC5mbG9vcih0KSsiIikubGVuZ3RoLTEpLGk9dC9lO3JldHVybiBpPWk+PTEwPzEwOmk+PTU/NTppPj0zPzM6aT49Mj8yOjEsZSppfX0pLG8uY29udHJvbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbC5TY2FsZSh0KX0sby5Db250cm9sLkxheWVycz1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246InRvcHJpZ2h0IixhdXRvWkluZGV4OiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSxpKXtvLnNldE9wdGlvbnModGhpcyxpKSx0aGlzLl9sYXllcnM9e30sdGhpcy5fbGFzdFpJbmRleD0wLHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITE7Zm9yKHZhciBuIGluIHQpdGhpcy5fYWRkTGF5ZXIodFtuXSxuKTtmb3IobiBpbiBlKXRoaXMuX2FkZExheWVyKGVbbl0sbiwhMCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksdC5vbigibGF5ZXJhZGQiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcykub24oImxheWVycmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLHRoaXMuX2NvbnRhaW5lcn0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoImxheWVyYWRkIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLm9mZigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyl9LGFkZEJhc2VMYXllcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LGFkZE92ZXJsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlLCEwKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiBkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGU9dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCk7ZS5zZXRBdHRyaWJ1dGUoImFyaWEtaGFzcG9wdXAiLCEwKSxvLkJyb3dzZXIudG91Y2g/by5Eb21FdmVudC5vbihlLCJjbGljayIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pOm8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oZSkuZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGUpO3ZhciBpPXRoaXMuX2Zvcm09by5Eb21VdGlsLmNyZWF0ZSgiZm9ybSIsdCsiLWxpc3QiKTtpZih0aGlzLm9wdGlvbnMuY29sbGFwc2VkKXtvLkJyb3dzZXIuYW5kcm9pZHx8by5Eb21FdmVudC5vbihlLCJtb3VzZW92ZXIiLHRoaXMuX2V4cGFuZCx0aGlzKS5vbihlLCJtb3VzZW91dCIsdGhpcy5fY29sbGFwc2UsdGhpcyk7dmFyIG49dGhpcy5fbGF5ZXJzTGluaz1vLkRvbVV0aWwuY3JlYXRlKCJhIix0KyItdG9nZ2xlIixlKTtuLmhyZWY9IiMiLG4udGl0bGU9IkxheWVycyIsby5Ccm93c2VyLnRvdWNoP28uRG9tRXZlbnQub24obiwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcCkub24obiwiY2xpY2siLHRoaXMuX2V4cGFuZCx0aGlzKTpvLkRvbUV2ZW50Lm9uKG4sImZvY3VzIix0aGlzLl9leHBhbmQsdGhpcyksby5Eb21FdmVudC5vbihpLCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyksMCl9LHRoaXMpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX2NvbGxhcHNlLHRoaXMpfWVsc2UgdGhpcy5fZXhwYW5kKCk7dGhpcy5fYmFzZUxheWVyc0xpc3Q9by5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0KyItYmFzZSIsaSksdGhpcy5fc2VwYXJhdG9yPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLXNlcGFyYXRvciIsaSksdGhpcy5fb3ZlcmxheXNMaXN0PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLW92ZXJsYXlzIixpKSxlLmFwcGVuZENoaWxkKGkpfSxfYWRkTGF5ZXI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPW8uc3RhbXAodCk7dGhpcy5fbGF5ZXJzW25dPXtsYXllcjp0LG5hbWU6ZSxvdmVybGF5Oml9LHRoaXMub3B0aW9ucy5hdXRvWkluZGV4JiZ0LnNldFpJbmRleCYmKHRoaXMuX2xhc3RaSW5kZXgrKyx0LnNldFpJbmRleCh0aGlzLl9sYXN0WkluZGV4KSl9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250YWluZXIpe3RoaXMuX2Jhc2VMYXllcnNMaXN0LmlubmVySFRNTD0iIix0aGlzLl9vdmVybGF5c0xpc3QuaW5uZXJIVE1MPSIiO3ZhciB0LGUsaT0hMSxuPSExO2Zvcih0IGluIHRoaXMuX2xheWVycyllPXRoaXMuX2xheWVyc1t0XSx0aGlzLl9hZGRJdGVtKGUpLG49bnx8ZS5vdmVybGF5LGk9aXx8IWUub3ZlcmxheTt0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheT1uJiZpPyIiOiJub25lIn19LF9vbkxheWVyQ2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xheWVyc1tvLnN0YW1wKHQubGF5ZXIpXTtpZihlKXt0aGlzLl9oYW5kbGluZ0NsaWNrfHx0aGlzLl91cGRhdGUoKTt2YXIgaT1lLm92ZXJsYXk/ImxheWVyYWRkIj09PXQudHlwZT8ib3ZlcmxheWFkZCI6Im92ZXJsYXlyZW1vdmUiOiJsYXllcmFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtpJiZ0aGlzLl9tYXAuZmlyZShpLGUpfX0sX2NyZWF0ZVJhZGlvRWxlbWVudDpmdW5jdGlvbih0LGkpe3ZhciBuPSc8aW5wdXQgdHlwZT0icmFkaW8iIGNsYXNzPSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yIiBuYW1lPSInK3QrJyInO2kmJihuKz0nIGNoZWNrZWQ9ImNoZWNrZWQiJyksbis9Ii8+Ijt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmlubmVySFRNTD1uLG8uZmlyc3RDaGlsZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGksbj1lLmNyZWF0ZUVsZW1lbnQoImxhYmVsIikscz10aGlzLl9tYXAuaGFzTGF5ZXIodC5sYXllcik7dC5vdmVybGF5PyhpPWUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1zKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIscyksaS5sYXllcklkPW8uc3RhbXAodC5sYXllciksby5Eb21FdmVudC5vbihpLCJjbGljayIsdGhpcy5fb25JbnB1dENsaWNrLHRoaXMpO3ZhciBhPWUuY3JlYXRlRWxlbWVudCgic3BhbiIpO2EuaW5uZXJIVE1MPSIgIit0Lm5hbWUsbi5hcHBlbmRDaGlsZChpKSxuLmFwcGVuZENoaWxkKGEpO3ZhciByPXQub3ZlcmxheT90aGlzLl9vdmVybGF5c0xpc3Q6dGhpcy5fYmFzZUxheWVyc0xpc3Q7cmV0dXJuIHIuYXBwZW5kQ2hpbGQobiksbn0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe3ZhciB0LGUsaSxuPXRoaXMuX2Zvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0Iiksbz1uLmxlbmd0aDtmb3IodGhpcy5faGFuZGxpbmdDbGljaz0hMCx0PTA7bz50O3QrKyllPW5bdF0saT10aGlzLl9sYXllcnNbZS5sYXllcklkXSxlLmNoZWNrZWQmJiF0aGlzLl9tYXAuaGFzTGF5ZXIoaS5sYXllcik/dGhpcy5fbWFwLmFkZExheWVyKGkubGF5ZXIpOiFlLmNoZWNrZWQmJnRoaXMuX21hcC5oYXNMYXllcihpLmxheWVyKSYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKGkubGF5ZXIpO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITEsdGhpcy5fcmVmb2N1c09uTWFwKCl9LF9leHBhbmQ6ZnVuY3Rpb24oKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIil9LF9jb2xsYXBzZTpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5jbGFzc05hbWU9dGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIsIiIpfX0pLG8uY29udHJvbC5sYXllcnM9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcgby5Db250cm9sLkxheWVycyh0LGUsaSl9LG8uUG9zQW5pbWF0aW9uPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX25ld1Bvcz1lLHRoaXMuZmlyZSgic3RhcnQiKSx0LnN0eWxlW28uRG9tVXRpbC5UUkFOU0lUSU9OXT0iYWxsICIrKGl8fC4yNSkrInMgY3ViaWMtYmV6aWVyKDAsMCwiKyhufHwuNSkrIiwxKSIsby5Eb21FdmVudC5vbih0LG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9vblRyYW5zaXRpb25FbmQsdGhpcyksby5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksby5VdGlsLmZhbHNlRm4odC5vZmZzZXRXaWR0aCksdGhpcy5fc3RlcFRpbWVyPXNldEludGVydmFsKG8uYmluZCh0aGlzLl9vblN0ZXAsdGhpcyksNTApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5faW5Qcm9ncmVzcyYmKG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9lbCx0aGlzLl9nZXRQb3MoKSksdGhpcy5fb25UcmFuc2l0aW9uRW5kKCksby5VdGlsLmZhbHNlRm4odGhpcy5fZWwub2Zmc2V0V2lkdGgpKX0sX29uU3RlcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFBvcygpO3JldHVybiB0Pyh0aGlzLl9lbC5fbGVhZmxldF9wb3M9dCx2b2lkIHRoaXMuZmlyZSgic3RlcCIpKTp2b2lkIHRoaXMuX29uVHJhbnNpdGlvbkVuZCgpfSxfdHJhbnNmb3JtUmU6LyhbLStdPyg/OlxkKlwuKT9cZCspXEQqLCAoWy0rXT8oPzpcZCpcLik/XGQrKVxEKlwpLyxfZ2V0UG9zOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHM9dGhpcy5fZWwsYT10LmdldENvbXB1dGVkU3R5bGUocyk7aWYoby5Ccm93c2VyLmFueTNkKXtpZihuPWFbby5Eb21VdGlsLlRSQU5TRk9STV0ubWF0Y2godGhpcy5fdHJhbnNmb3JtUmUpLCFuKXJldHVybjtlPXBhcnNlRmxvYXQoblsxXSksaT1wYXJzZUZsb2F0KG5bMl0pfWVsc2UgZT1wYXJzZUZsb2F0KGEubGVmdCksaT1wYXJzZUZsb2F0KGEudG9wKTtyZXR1cm4gbmV3IG8uUG9pbnQoZSxpLCEwKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX2VsLG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9vblRyYW5zaXRpb25FbmQsdGhpcyksdGhpcy5faW5Qcm9ncmVzcyYmKHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5fZWwuc3R5bGVbby5Eb21VdGlsLlRSQU5TSVRJT05dPSIiLHRoaXMuX2VsLl9sZWFmbGV0X3Bvcz10aGlzLl9uZXdQb3MsY2xlYXJJbnRlcnZhbCh0aGlzLl9zdGVwVGltZXIpLHRoaXMuZmlyZSgic3RlcCIpLmZpcmUoImVuZCIpKX19KSxvLk1hcC5pbmNsdWRlKHtzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtpZihlPWU9PT1pP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoby5sYXRMbmcodCksZSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzKSxuPW58fHt9LHRoaXMuX3BhbkFuaW0mJnRoaXMuX3BhbkFuaW0uc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJm4hPT0hMCl7bi5hbmltYXRlIT09aSYmKG4uem9vbT1vLmV4dGVuZCh7YW5pbWF0ZTpuLmFuaW1hdGV9LG4uem9vbSksbi5wYW49by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlfSxuLnBhbikpO3ZhciBzPXRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pO2lmKHMpcmV0dXJuIGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXN9cmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKHQsZSl7aWYodD1vLnBvaW50KHQpLnJvdW5kKCksZT1lfHx7fSwhdC54JiYhdC55KXJldHVybiB0aGlzO2lmKHRoaXMuX3BhbkFuaW18fCh0aGlzLl9wYW5BbmltPW5ldyBvLlBvc0FuaW1hdGlvbix0aGlzLl9wYW5BbmltLm9uKHtzdGVwOnRoaXMuX29uUGFuVHJhbnNpdGlvblN0ZXAsZW5kOnRoaXMuX29uUGFuVHJhbnNpdGlvbkVuZH0sdGhpcykpLGUubm9Nb3ZlU3RhcnR8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IiksZS5hbmltYXRlIT09ITEpe28uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIik7dmFyIGk9dGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpO3RoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsaSxlLmR1cmF0aW9ufHwuMjUsZS5lYXNlTGluZWFyaXR5KX1lbHNlIHRoaXMuX3Jhd1BhbkJ5KHQpLHRoaXMuZmlyZSgibW92ZSIpLmZpcmUoIm1vdmVlbmQiKTtyZXR1cm4gdGhpc30sX29uUGFuVHJhbnNpdGlvblN0ZXA6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoIm1vdmUiKX0sX29uUGFuVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF90cnlBbmltYXRlZFBhbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZmxvb3IoKTtyZXR1cm4oZSYmZS5hbmltYXRlKT09PSEwfHx0aGlzLmdldFNpemUoKS5jb250YWlucyhpKT8odGhpcy5wYW5CeShpLGUpLCEwKTohMX19KSxvLlBvc0FuaW1hdGlvbj1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLlBvc0FuaW1hdGlvbjpvLlBvc0FuaW1hdGlvbi5leHRlbmQoe3J1bjpmdW5jdGlvbih0LGUsaSxuKXt0aGlzLnN0b3AoKSx0aGlzLl9lbD10LHRoaXMuX2luUHJvZ3Jlc3M9ITAsdGhpcy5fZHVyYXRpb249aXx8LjI1LHRoaXMuX2Vhc2VPdXRQb3dlcj0xL01hdGgubWF4KG58fC41LC4yKSx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odCksdGhpcy5fb2Zmc2V0PWUuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKCJzdGFydCIpLHRoaXMuX2FuaW1hdGUoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9zdGVwKCksdGhpcy5fY29tcGxldGUoKSl9LF9hbmltYXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbUlkPW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FuaW1hdGUsdGhpcyksdGhpcy5fc3RlcCgpfSxfc3RlcDpmdW5jdGlvbigpe3ZhciB0PStuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUsZT0xZTMqdGhpcy5fZHVyYXRpb247ZT50P3RoaXMuX3J1bkZyYW1lKHRoaXMuX2Vhc2VPdXQodC9lKSk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fZWwsZSksdGhpcy5maXJlKCJzdGVwIil9LF9jb21wbGV0ZTpmdW5jdGlvbigpe28uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbUlkKSx0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuZmlyZSgiZW5kIil9LF9lYXNlT3V0OmZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCx0aGlzLl9lYXNlT3V0UG93ZXIpfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7em9vbUFuaW1hdGlvbjohMCx6b29tQW5pbWF0aW9uVGhyZXNob2xkOjR9KSxvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLl96b29tQW5pbWF0ZWQ9dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uRG9tVXRpbC5UUkFOU0lUSU9OJiZvLkJyb3dzZXIuYW55M2QmJiFvLkJyb3dzZXIuYW5kcm9pZDIzJiYhby5Ccm93c2VyLm1vYmlsZU9wZXJhLHRoaXMuX3pvb21BbmltYXRlZCYmby5Eb21FdmVudC5vbih0aGlzLl9tYXBQYW5lLG8uRG9tVXRpbC5UUkFOU0lUSU9OX0VORCx0aGlzLl9jYXRjaFRyYW5zaXRpb25FbmQsdGhpcyl9KSxvLk1hcC5pbmNsdWRlKG8uRG9tVXRpbC5UUkFOU0lUSU9OP3tfY2F0Y2hUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe3RoaXMuX2FuaW1hdGluZ1pvb20mJnQucHJvcGVydHlOYW1lLmluZGV4T2YoInRyYW5zZm9ybSIpPj0wJiZ0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCl9LF9ub3RoaW5nVG9BbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKS5sZW5ndGh9LF90cnlBbmltYXRlZFpvb206ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMuX2FuaW1hdGluZ1pvb20pcmV0dXJuITA7aWYoaT1pfHx7fSwhdGhpcy5fem9vbUFuaW1hdGVkfHxpLmFuaW1hdGU9PT0hMXx8dGhpcy5fbm90aGluZ1RvQW5pbWF0ZSgpfHxNYXRoLmFicyhlLXRoaXMuX3pvb20pPnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uVGhyZXNob2xkKXJldHVybiExO3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLG89dGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KHQpLl9kaXZpZGVCeSgxLTEvbikscz10aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkuX2FkZChvKTtyZXR1cm4gaS5hbmltYXRlPT09ITB8fHRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG8pPyh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoInpvb21zdGFydCIpLHRoaXMuX2FuaW1hdGVab29tKHQsZSxzLG4sbnVsbCwhMCksITApOiExfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCxlLGksbixzLGEscil7cnx8KHRoaXMuX2FuaW1hdGluZ1pvb209ITApLG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209ZSxvLkRyYWdnYWJsZSYmKG8uRHJhZ2dhYmxlLl9kaXNhYmxlZD0hMCksby5VdGlsLnJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24oKXt0aGlzLmZpcmUoInpvb21hbmltIix7Y2VudGVyOnQsem9vbTplLG9yaWdpbjppLHNjYWxlOm4sZGVsdGE6cyxiYWNrd2FyZHM6YX0pfSx0aGlzKX0sX29uWm9vbVRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpbmdab29tPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLHRoaXMuX3Jlc2V0Vmlldyh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSwhMCwhMCksby5EcmFnZ2FibGUmJihvLkRyYWdnYWJsZS5fZGlzYWJsZWQ9ITEpfX06e30pLG8uVGlsZUxheWVyLmluY2x1ZGUoe19hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmd8fCh0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5fcHJlcGFyZUJnQnVmZmVyKCkpO3ZhciBlPXRoaXMuX2JnQnVmZmVyLGk9by5Eb21VdGlsLlRSQU5TRk9STSxuPXQuZGVsdGE/by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyh0LmRlbHRhKTplLnN0eWxlW2ldLHM9by5Eb21VdGlsLmdldFNjYWxlU3RyaW5nKHQuc2NhbGUsdC5vcmlnaW4pO2Uuc3R5bGVbaV09dC5iYWNrd2FyZHM/cysiICIrbjpuKyIgIitzfSxfZW5kWm9vbUFuaW06ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXI7dC5zdHlsZS52aXNpYmlsaXR5PSIiLHQucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0KSxvLlV0aWwuZmFsc2VGbihlLm9mZnNldFdpZHRoKSx0aGlzLl9hbmltYXRpbmc9ITF9LF9jbGVhckJnQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwOyF0fHx0Ll9hbmltYXRpbmdab29tfHx0LnRvdWNoWm9vbS5fem9vbWluZ3x8KHRoaXMuX2JnQnVmZmVyLmlubmVySFRNTD0iIix0aGlzLl9iZ0J1ZmZlci5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0iIil9LF9wcmVwYXJlQmdCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXIsaT10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UoZSksbj10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UodCk7cmV0dXJuIGUmJmk+LjUmJi41Pm4/KHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix2b2lkIHRoaXMuX3N0b3BMb2FkaW5nSW1hZ2VzKHQpKTooZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09IiIsdGhpcy5fdGlsZUNvbnRhaW5lcj1lLGU9dGhpcy5fYmdCdWZmZXI9dCx0aGlzLl9zdG9wTG9hZGluZ0ltYWdlcyhlKSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckJnQnVmZmVyVGltZXIpKX0sX2dldExvYWRlZFRpbGVzUGVyY2VudGFnZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIiksbz0wO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKW5bZV0uY29tcGxldGUmJm8rKztyZXR1cm4gby9pfSxfc3RvcExvYWRpbmdJbWFnZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpO2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSxuLmNvbXBsZXRlfHwobi5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sbi5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLG4uc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSl9fSksby5NYXAuaW5jbHVkZSh7X2RlZmF1bHRMb2NhdGVPcHRpb25zOnt3YXRjaDohMSxzZXRWaWV3OiExLG1heFpvb206MS8wLHRpbWVvdXQ6MWU0LG1heGltdW1BZ2U6MCxlbmFibGVIaWdoQWNjdXJhY3k6ITF9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQodGhpcy5fZGVmYXVsdExvY2F0ZU9wdGlvbnMsdCksIW5hdmlnYXRvci5nZW9sb2NhdGlvbilyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuIn0pLHRoaXM7dmFyIGU9by5iaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9MTgwKnQuY29vcmRzLmFjY3VyYWN5LzQwMDc1MDE3LGE9cy9NYXRoLmNvcyhvLkxhdExuZy5ERUdfVE9fUkFEKmUpLHI9by5sYXRMbmdCb3VuZHMoW2UtcyxpLWFdLFtlK3MsaSthXSksaD10aGlzLl9sb2NhdGVPcHRpb25zO2lmKGguc2V0Vmlldyl7dmFyIGw9TWF0aC5taW4odGhpcy5nZXRCb3VuZHNab29tKHIpLGgubWF4Wm9vbSk7dGhpcy5zZXRWaWV3KG4sbCl9dmFyIHU9e2xhdGxuZzpuLGJvdW5kczpyLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBjIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbY10mJih1W2NdPXQuY29vcmRzW2NdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLHUpfX0pfSh3aW5kb3csZG9jdW1lbnQpOw=="></script>
<link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,ZnVuY3Rpb24gcmVjeWNsZSh2YWx1ZXMsIGxlbmd0aCwgaW5QbGFjZSkgewogIGlmIChsZW5ndGggPT09IDAgJiYgIWluUGxhY2UpCiAgICByZXR1cm4gW107CgogIGlmICghKHZhbHVlcyBpbnN0YW5jZW9mIEFycmF5KSkgewogICAgaWYgKGluUGxhY2UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBkbyBpbi1wbGFjZSByZWN5Y2xpbmcgb2YgYSBub24tQXJyYXkgdmFsdWUiKTsKICAgIH0KICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KICBpZiAodHlwZW9mKGxlbmd0aCkgPT09ICd1bmRlZmluZWQnKQogICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKCiAgdmFyIGRlc3QgPSBpblBsYWNlID8gdmFsdWVzIDogW107CiAgdmFyIG9yaWdMZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwogIHdoaWxlIChkZXN0Lmxlbmd0aCA8IGxlbmd0aCkgewogICAgZGVzdC5wdXNoKHZhbHVlc1tkZXN0Lmxlbmd0aCAlIG9yaWdMZW5ndGhdKTsKICB9CiAgaWYgKGRlc3QubGVuZ3RoID4gbGVuZ3RoKSB7CiAgICBkZXN0LnNwbGljZShsZW5ndGgsIGRlc3QubGVuZ3RoIC0gbGVuZ3RoKTsKICB9CiAgcmV0dXJuIGRlc3Q7Cn0KCmZ1bmN0aW9uIGFzQXJyYXkodmFsdWUpIHsKICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkKICAgIHJldHVybiB2YWx1ZTsKICBlbHNlCiAgICByZXR1cm4gW3ZhbHVlXTsKfQoKdmFyIGRhdGFmcmFtZSA9IChmdW5jdGlvbigpIHsKICB2YXIgZXhwb3J0cyA9IHt9OwoKICB2YXIgRGF0YUZyYW1lID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CgogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CgogICAgJC5lYWNoKHRoaXMuY29sdW1ucywgZnVuY3Rpb24oaSwgY29sdW1uKSB7CiAgICAgIHNlbGYuZWZmZWN0aXZlTGVuZ3RoID0gTWF0aC5tYXgoc2VsZi5lZmZlY3RpdmVMZW5ndGgsIGNvbHVtbi5sZW5ndGgpOwogICAgICBzZWxmLmNvbGluZGljZXNbc2VsZi5jb2xuYW1lc1tpXV0gPSBpOwogICAgfSk7CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5fY29sSW5kZXggPSBmdW5jdGlvbihjb2xuYW1lKSB7CiAgICB2YXIgaW5kZXggPSB0aGlzLmNvbGluZGljZXNbY29sbmFtZV07CiAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpCiAgICAgIHJldHVybiAtMTsKICAgIHJldHVybiBpbmRleDsKICB9OwoKICBEYXRhRnJhbWUucHJvdG90eXBlLmNvbCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlcywgc3RyaWN0KSB7CiAgICBpZiAodHlwZW9mKG5hbWUpICE9PSAnc3RyaW5nJykKICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbHVtbiBuYW1lICInICsgbmFtZSArICciJyk7CgogICAgdmFyIGluZGV4ID0gdGhpcy5fY29sSW5kZXgobmFtZSk7CgogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgZWxzZQogICAgICAgIHJldHVybiByZWN5Y2xlKHRoaXMuY29sdW1uc1tpbmRleF0sIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKICAgIH0KCiAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgIGluZGV4ID0gdGhpcy5jb2xuYW1lcy5sZW5ndGg7CiAgICAgIHRoaXMuY29sbmFtZXMucHVzaChuYW1lKTsKICAgIH0KICAgIHRoaXMuY29sdW1uc1tpbmRleF0gPSBhc0FycmF5KHZhbHVlcyk7CiAgICB0aGlzLmNvbHN0cmljdFtpbmRleF0gPSAhIXN0cmljdDsKCiAgICAvLyBUT0RPOiBWYWxpZGF0ZSBzdHJpY3RuZXNzIChlbnN1cmUgbGVuZ3RocyBtYXRjaCB1cCB3aXRoIG90aGVyIHN0cmljdHMpCgogICAgdGhpcy5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcygpOwoKICAgIHJldHVybiB0aGlzOwogIH07CgogIERhdGFGcmFtZS5wcm90b3R5cGUuY2JpbmQgPSBmdW5jdGlvbihvYmosIHN0cmljdCkgewogICAgdmFyIHNlbGYgPSB0aGlzLCBuYW1lOwogICAgJC5lYWNoKG9iaiwgZnVuY3Rpb24obmFtZSwgY29sZGF0YSkgewogICAgICBzZWxmLmNvbChuYW1lLCBjb2xkYXRhKTsKICAgIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihyb3csIGNvbCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgIGlmIChyb3cgPiB0aGlzLmVmZmVjdGl2ZUxlbmd0aCkKICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgYXJndW1lbnQgd2FzIG91dCBvZiBib3VuZHM6ICcgKyByb3cgKyAnID4gJyArIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKCiAgICB2YXIgY29sSW5kZXggPSAtMTsKICAgIGlmICh0eXBlb2YoY29sKSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgdmFyIHJvd0RhdGEgPSB7fTsKICAgICAgJC5lYWNoKHRoaXMuY29sbmFtZXMsIGZ1bmN0aW9uKGksIG5hbWUpIHsKICAgICAgICByb3dEYXRhW25hbWVdID0gc2VsZi5jb2x1bW5zW2ldW3JvdyAlIHNlbGYuY29sdW1uc1tpXS5sZW5ndGhdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJvd0RhdGE7CiAgICB9IGVsc2UgaWYgKHR5cGVvZihjb2wpID09PSAnc3RyaW5nJykgewogICAgICBjb2xJbmRleCA9IHRoaXMuX2NvbEluZGV4KGNvbCk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZihjb2wpID09PSAnbnVtYmVyJykgewogICAgICBjb2xJbmRleCA9IGNvbDsKICAgIH0KICAgIGlmIChjb2xJbmRleCA8IDAgfHwgY29sSW5kZXggPiB0aGlzLmNvbHVtbnMubGVuZ3RoKQogICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY29sdW1uIGluZGV4OiAnICsgY29sKTsKCiAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2NvbEluZGV4XVtyb3cgJSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdLmxlbmd0aF07CiAgfTsKCiAgRGF0YUZyYW1lLnByb3RvdHlwZS5ucm93ID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgfTsKCiAgZnVuY3Rpb24gdGVzdCgpIHsKICAgIHZhciBkZiA9IG5ldyBEYXRhRnJhbWUoKTsKICAgIGRmLmNvbCgic3BlZWQiLCBbNCwgNCwgNywgNywgOCwgOSwgMTAsIDEwLCAxMCwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMiwgMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIyLCAyMywgMjQsIDI0LCAyNCwgMjQsIDI1XSkKICAgICAgLmNvbCgiZGlzdCIsIFsyLCAxMCwgNCwgMjIsIDE2LCAxMCwgMTgsIDI2LCAzNCwgMTcsIDI4LCAxNCwgMjAsIDI0LCAyOCwgMjYsIDM0LCAzNCwgNDYsIDI2LCAzNiwgNjAsIDgwLCAyMCwgMjYsIDU0LCAzMiwgNDAsIDMyLCA0MCwgNTAsIDQyLCA1NiwgNzYsIDg0LCAzNiwgNDYsIDY4LCAzMiwgNDgsIDUyLCA1NiwgNjQsIDY2LCA1NCwgNzAsIDkyLCA5MywgMTIwLCA4NV0pCiAgICAgIC5jb2woImNvbG9yIiwgWyJ5ZWxsb3ciLCAicmVkIl0pCiAgICAgIC5jYmluZCh7CiAgICAgICAgIk1ha2UiIDogWyJUb3lvdGEiLCAiQ2FkaWxsYWMiLCAiQk1XIl0sCiAgICAgICAgIk1vZGVsIiA6IFsiQ29yb2xsYSIsICJDVFMiLCAiNDM1aSJdCiAgICAgIH0pCiAgICA7CiAgICBjb25zb2xlLmxvZyhkZi5nZXQoOSwgInNwZWVkIikpOwogICAgY29uc29sZS5sb2coZGYuZ2V0KDksICJkaXN0IikpOwogICAgY29uc29sZS5sb2coZGYuZ2V0KDksICJjb2xvciIpKTsKICAgIGNvbnNvbGUubG9nKGRmLmdldCg5LCAiTWFrZSIpKTsKICAgIGNvbnNvbGUubG9nKGRmLmdldCg5LCAiTW9kZWwiKSk7CiAgICBjb25zb2xlLmxvZyhkZi5nZXQoOSkpOwoKICB9CgogIHJldHVybiB7CiAgICBjcmVhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbmV3IERhdGFGcmFtZSgpOwogICAgfQogIH07Cgp9KSgpOwoKKGZ1bmN0aW9uKCkgewogIC8vIFRoaXMgY2xhc3Mgc2ltdWxhdGVzIGEgbWlwbWFwLCB3aGljaCBzaHJpbmtzIGltYWdlcyBieSBwb3dlcnMgb2YgdHdvLiBUaGlzCiAgLy8gc3RlcHdpc2UgcmVkdWN0aW9uIHJlc3VsdHMgaW4gInBpeGVsLXBlcmZlY3QgZG93bnNjYWxpbmciICh3aGVyZSBldmVyeQogIC8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCiAgLy8gYXMgb3Bwb3NlZCB0byBhIHNpbmdsZS1zdGVwIGRvd25zY2FsaW5nIHdoaWNoIHdpbGwgZGlzY2FyZCBhIGxvdCBvZiBkYXRhCiAgLy8gKGFuZCB3aXRoIHNwYXJzZSBpbWFnZXMgYXQgc21hbGwgc2NhbGVzIGNhbiBnaXZlIHZlcnkgc3VycHJpc2luZyByZXN1bHRzKS4KICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9CiAgLy8gVGhlIHZhcmlvdXMgZnVuY3Rpb25zIG9uIHRoaXMgY2xhc3MgdGFrZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIEJVVCBNQVkgT1IgTUFZCiAgLy8gTk9UIGFjdHVhbGx5IGJlaGF2ZSBhc3luY2hyb25vdXNseS4KICBNaXBtYXBwZXIucHJvdG90eXBlLmdldEJ5U2l6ZSA9IGZ1bmN0aW9uKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCwgY2FsbGJhY2spIHsKICAgIHZhciBzZWxmID0gdGhpczsKICAgIHZhciBpID0gMDsKICAgIHZhciBsYXN0SW1nID0gdGhpcy5fbGF5ZXJzWzBdOwogICAgZnVuY3Rpb24gdGVzdE5leHQoKSB7CiAgICAgIHNlbGYuZ2V0QnlJbmRleChpLCBmdW5jdGlvbihpbWcpIHsKICAgICAgICAvLyBJZiBjdXJyZW50IGltYWdlIGlzIGludmFsaWQgKGkuZS4gdG9vIHNtYWxsIHRvIGJlIHJlbmRlcmVkKSBvcgogICAgICAgIC8vIGl0J3Mgc21hbGxlciB0aGFuIHdoYXQgd2Ugd2FudGVkLCByZXR1cm4gdGhlIGxhc3Qga25vd24gZ29vZCBpbWFnZS4KICAgICAgICBpZiAoIWltZyB8fCBpbWcud2lkdGggPCBkZXNpcmVkV2lkdGggfHwgaW1nLmhlaWdodCA8IGRlc2lyZWRIZWlnaHQpIHsKICAgICAgICAgIGNhbGxiYWNrKGxhc3RJbWcpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsYXN0SW1nID0gaW1nOwogICAgICAgICAgaSsrOwogICAgICAgICAgdGVzdE5leHQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGVzdE5leHQoKTsKICB9OwogIE1pcG1hcHBlci5wcm90b3R5cGUuZ2V0QnlJbmRleCA9IGZ1bmN0aW9uKGksIGNhbGxiYWNrKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICBpZiAodGhpcy5fbGF5ZXJzW2ldKSB7CiAgICAgIGNhbGxiYWNrKHRoaXMuX2xheWVyc1tpXSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLmdldEJ5SW5kZXgoaS0xLCBmdW5jdGlvbihwcmV2SW1nKSB7CiAgICAgIGlmICghcHJldkltZykgewogICAgICAgIC8vIHByZXZJbWcgY291bGQgbm90IGJlIGNhbGN1bGF0ZWQgKHRvbyBzbWFsbCwgcG9zc2libHkpCiAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAvLyBDYW4ndCByZWR1Y2UgdGhpcyBpbWFnZSBhbnkgZnVydGhlcgogICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBJZiByZWR1Y2UgZXZlciBiZWNvbWVzIHRydWx5IGFzeW5jaHJvbm91cywgd2Ugc2hvdWxkIHN0dWZmIGEgcHJvbWlzZSBvcgogICAgICAvLyBzb21ldGhpbmcgaW50byBzZWxmLl9sYXllcnNbaV0gYmVmb3JlIGNhbGxpbmcgc2VsZi5yZWR1Y2UoKSwgdG8gcHJldmVudAogICAgICAvLyByZWR1bmRhbnQgcmVkdWNlIG9wZXJhdGlvbnMgZnJvbSBoYXBwZW5pbmcuCiAgICAgIHNlbGYucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uKHJlZHVjZWRJbWcpIHsKICAgICAgICBzZWxmLl9sYXllcnNbaV0gPSByZWR1Y2VkSW1nOwogICAgICAgIGNhbGxiYWNrKHJlZHVjZWRJbWcpOwogICAgICAgIHJldHVybjsKICAgICAgfSk7CiAgICB9KTsKICB9OwogIE1pcG1hcHBlci5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24oaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aC8yLCBpbWcuaGVpZ2h0LzIpOwogICAgICAgIGNhbGxiYWNrKGltZ0RhdGFDYW52YXMpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CiAgICAgIH0KCiAgfTsKCiAgZnVuY3Rpb24gTGF5ZXJNYW5hZ2VyKG1hcCkgewogICAgdGhpcy5fbWFwID0gbWFwOwoKICAgIC8vIEJFR0lOIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGdyb3VwbmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUNhdGVnb3J5ID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZV9sYXllcklkPjogbGF5ZXJ9CiAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgIC8vIHs8c3RhbXA+OiB7CiAgICAvLyAgICAgICAgICAgICAiZ3JvdXAiOiA8Z3JvdXBuYW1lPiwKICAgIC8vICAgICAgICAgICAgICJsYXllcklkIjogPGxheWVySWQ+LAogICAgLy8gICAgICAgICAgICAgImNhdGVnb3J5IjogPGNhdGVnb3J5PiwKICAgIC8vICAgICAgICAgICAgICJjb250YWluZXIiOiA8Y29udGFpbmVyPgogICAgLy8gICAgICAgICAgIH0KICAgIC8vIH0KICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKCiAgICAvLyBFTkQgbGF5ZXIgaW5kaWNlcwoKICAgIC8vIHs8Y2F0ZWdvcnlOYW1lPjogTC5sYXllckdyb3VwfQogICAgdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzID0ge307CiAgICAvLyB7PGdyb3VwTmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogIH0KICBMYXllck1hbmFnZXIucHJvdG90eXBlLmFkZExheWVyID0gZnVuY3Rpb24obGF5ZXIsIGNhdGVnb3J5LCBsYXllcklkLCBncm91cCkgewogICAgLy8gV2FzIGEgZ3JvdXAgcHJvdmlkZWQ/CiAgICB2YXIgaGFzSWQgPSB0eXBlb2YobGF5ZXJJZCkgPT09ICJzdHJpbmciOwogICAgdmFyIGdyb3VwZWQgPSB0eXBlb2YoZ3JvdXApID09PSAic3RyaW5nIjsKCiAgICB2YXIgc3RhbXAgPSBMLlV0aWwuc3RhbXAobGF5ZXIpOwoKICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBsYXllciBncm91cCB0byBhZGQgdGhlIGxheWVyIHRvLgogICAgLy8gV2UgbWF5IG92ZXJ3cml0ZSB0aGlzIHZhciBiZWZvcmUgdXNpbmcgaXQgKGkuZS4gaWYgYSBncm91cCBpcyBhc3NpZ25lZCkuCiAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSBlbnRyeSBpZiBpdAogICAgLy8gZG9lc24ndCBhbHJlYWR5IGV4aXN0LgogICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gPQogICAgICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gfHwgTC5sYXllckdyb3VwKCkuYWRkVG8odGhpcy5fbWFwKTsKCiAgICB2YXIgb2xkTGF5ZXIgPSBudWxsOwogICAgaWYgKGhhc0lkKSB7CiAgICAgIC8vIEZpcnN0LCByZW1vdmUgYW55IGxheWVyIHdpdGggdGhlIHNhbWUgY2F0ZWdvcnkgYW5kIGxheWVySWQKICAgICAgdmFyIHByZWZpeGVkTGF5ZXJJZCA9IHRoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpOwogICAgICBvbGRMYXllciA9IHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdOwogICAgICBpZiAob2xkTGF5ZXIpIHsKICAgICAgICB0aGlzLl9yZW1vdmVMYXllcihvbGRMYXllcik7CiAgICAgIH0KCiAgICAgIC8vIFVwZGF0ZSBsYXllcklkIGluZGV4CiAgICAgIHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdID0gbGF5ZXI7CiAgICB9CgogICAgLy8gVXBkYXRlIGdyb3VwIGluZGV4CiAgICBpZiAoZ3JvdXBlZCkgewogICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXVtzdGFtcF0gPSBsYXllcjsKCiAgICAgIC8vIFNpbmNlIGEgZ3JvdXAgaXMgYXNzaWduZWQsIGRvbid0IGFkZCB0aGUgbGF5ZXIgdG8gdGhlIGNhdGVnb3J5J3MgbGF5ZXIKICAgICAgLy8gZ3JvdXA7IGluc3RlYWQsIHVzZSB0aGUgZ3JvdXAncyBsYXllciBncm91cC4KICAgICAgLy8gVGhpcyBvbmUgbGluZXIgY3JlYXRlcyB0aGUgX2dyb3VwQ29udGFpbmVyc1tncm91cF0gZW50cnkgaWYgaXQgZG9lc24ndAogICAgICAvLyBhbHJlYWR5IGV4aXN0LgogICAgICBjb250YWluZXIgPSB0aGlzLmdldExheWVyR3JvdXAoZ3JvdXAsIHRydWUpOwogICAgfQoKICAgIC8vIFVwZGF0ZSBjYXRlZ29yeSBpbmRleAogICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCB7fTsKICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldW3N0YW1wXSA9IGxheWVyOwoKICAgIC8vIFVwZGF0ZSBzdGFtcCBpbmRleAogICAgdGhpcy5fYnlTdGFtcFtzdGFtcF0gPSB7CiAgICAgIGxheWVyOiBsYXllciwKICAgICAgZ3JvdXA6IGdyb3VwLAogICAgICBsYXllcklkOiBsYXllcklkLAogICAgICBjYXRlZ29yeTogY2F0ZWdvcnksCiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyCiAgICB9OwoKICAgIC8vIEFkZCB0byBjb250YWluZXIKICAgIGNvbnRhaW5lci5hZGRMYXllcihsYXllcik7CgogICAgcmV0dXJuIG9sZExheWVyOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRMYXllciA9IGZ1bmN0aW9uKGNhdGVnb3J5LCBsYXllcklkKSB7CiAgICByZXR1cm4gdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUucmVtb3ZlTGF5ZXIgPSBmdW5jdGlvbihjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgLy8gRmluZCBsYXllciBpbmZvCiAgICB2YXIgbGF5ZXIgPSB0aGlzLl9ieUxheWVySWRbdGhpcy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCldOwogICAgaWYgKCFsYXllcikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aGlzLl9yZW1vdmVMYXllcihsYXllcik7CiAgICByZXR1cm4gdHJ1ZTsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUuY2xlYXJMYXllcnMgPSBmdW5jdGlvbihjYXRlZ29yeSkgewogICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgIC8vIEZpbmQgYWxsIGxheWVycyBpbiBfYnlDYXRlZ29yeVtjYXRlZ29yeV0KICAgIHZhciBjYXRUYWJsZSA9IHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldOwogICAgaWYgKCFjYXRUYWJsZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gUmVtb3ZlIGFsbCBsYXllcnMuIE1ha2UgY29weSBvZiBrZXlzIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBjb2xsZWN0aW9uCiAgICAvLyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHlvdSdyZSBhY2Nlc3NpbmcuCiAgICB2YXIgc3RhbXBzID0gW107CiAgICAkLmVhY2goY2F0VGFibGUsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgc3RhbXBzLnB1c2goayk7CiAgICB9KTsKICAgICQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uKGksIHN0YW1wKSB7CiAgICAgIHNlbGYuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgIH0pOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5nZXRMYXllckdyb3VwID0gZnVuY3Rpb24oZ3JvdXAsIGVuc3VyZUV4aXN0cykgewogICAgdmFyIGcgPSB0aGlzLl9ncm91cENvbnRhaW5lcnNbZ3JvdXBdOwogICAgaWYgKGVuc3VyZUV4aXN0cyAmJiAhZykgewogICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXSA9IEwubGF5ZXJHcm91cCgpOwogICAgICBnLmdyb3VwbmFtZSA9IGdyb3VwOwogICAgICBnLmFkZFRvKHRoaXMuX21hcCk7CiAgICB9CiAgICByZXR1cm4gZzsKICB9OwogIExheWVyTWFuYWdlci5wcm90b3R5cGUuZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAgPSBmdW5jdGlvbihsYXllckdyb3VwKSB7CiAgICByZXR1cm4gbGF5ZXJHcm91cC5ncm91cG5hbWU7CiAgfTsKICBMYXllck1hbmFnZXIucHJvdG90eXBlLmdldFZpc2libGVHcm91cHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBzZWxmID0gdGhpczsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgICQuZWFjaCh0aGlzLl9ncm91cENvbnRhaW5lcnMsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgaWYgKHNlbGYuX21hcC5oYXNMYXllcih2KSkgewogICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfTsKICBMYXllck1hbmFnZXIucHJvdG90eXBlLmNsZWFyR3JvdXAgPSBmdW5jdGlvbihncm91cCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgIC8vIEZpbmQgYWxsIGxheWVycyBpbiBfYnlHcm91cFtncm91cF0KICAgIHZhciBncm91cFRhYmxlID0gdGhpcy5fYnlHcm91cFtncm91cF07CiAgICBpZiAoIWdyb3VwVGFibGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgLy8gYmVoaW5kIHRoZSBpdGVyYXRvciB5b3UncmUgYWNjZXNzaW5nLgogICAgdmFyIHN0YW1wcyA9IFtdOwogICAgJC5lYWNoKGdyb3VwVGFibGUsIGZ1bmN0aW9uKGssIHYpIHsKICAgICAgc3RhbXBzLnB1c2goayk7CiAgICB9KTsKICAgICQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uKGksIHN0YW1wKSB7CiAgICAgIHNlbGYuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgIH0pOwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewogICAgZnVuY3Rpb24gY2xlYXJMYXllckdyb3VwKGtleSwgbGF5ZXJHcm91cCkgewogICAgICBsYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICB9CiAgICAvLyBDbGVhciBhbGwgaW5kaWNlcyBhbmQgbGF5ZXJHcm91cHMKICAgIHRoaXMuX2J5R3JvdXAgPSB7fTsKICAgIHRoaXMuX2J5Q2F0ZWdvcnkgPSB7fTsKICAgIHRoaXMuX2J5TGF5ZXJJZCA9IHt9OwogICAgdGhpcy5fYnlTdGFtcCA9IHt9OwogICAgJC5lYWNoKHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwogICAgJC5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogIH07CiAgTGF5ZXJNYW5hZ2VyLnByb3RvdHlwZS5fcmVtb3ZlTGF5ZXIgPSBmdW5jdGlvbihsYXllcikgewogICAgdmFyIHN0YW1wOwogICAgaWYgKHR5cGVvZihsYXllcikgPT09ICJzdHJpbmciKSB7CiAgICAgIHN0YW1wID0gbGF5ZXI7CiAgICB9IGVsc2UgewogICAgICBzdGFtcCA9IEwuVXRpbC5zdGFtcChsYXllcik7CiAgICB9CgogICAgdmFyIGxheWVySW5mbyA9IHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogICAgaWYgKCFsYXllckluZm8pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGxheWVySW5mby5jb250YWluZXIucmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgaWYgKHR5cGVvZihsYXllckluZm8uZ3JvdXApID09PSAic3RyaW5nIikgewogICAgICBkZWxldGUgdGhpcy5fYnlHcm91cFtsYXllckluZm8uZ3JvdXBdW3N0YW1wXTsKICAgIH0KICAgIGlmICh0eXBlb2YobGF5ZXJJbmZvLmxheWVySWQpID09PSAic3RyaW5nIikgewogICAgICBkZWxldGUgdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkobGF5ZXJJbmZvLmNhdGVnb3J5LCBsYXllckluZm8ubGF5ZXJJZCldOwogICAgfQogICAgZGVsZXRlIHRoaXMuX2J5Q2F0ZWdvcnlbbGF5ZXJJbmZvLmNhdGVnb3J5XVtzdGFtcF07CiAgICBkZWxldGUgdGhpcy5fYnlTdGFtcFtzdGFtcF07CiAgfTsKICBMYXllck1hbmFnZXIucHJvdG90eXBlLl9sYXllcklkS2V5ID0gZnVuY3Rpb24oY2F0ZWdvcnksIGxheWVySWQpIHsKICAgIHJldHVybiBjYXRlZ29yeSArICJcbiIgKyBsYXllcklkOwogIH07CgogIGZ1bmN0aW9uIENvbnRyb2xTdG9yZShtYXApIHsKICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB0aGlzLl9tYXAgPSBtYXAKICB9CgogIENvbnRyb2xTdG9yZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oY29udHJvbCwgaWQsIGh0bWwpIHsKICAgIGlmICh0eXBlb2YoaWQpICE9PSAndW5kZWZpbmVkJyAmJiBpZCAhPT0gbnVsbCkgewogICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0pOwogICAgICB9CiAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5fY29udHJvbHNOb0lkLnB1c2goY29udHJvbCkKICAgIH0KICAgIHRoaXMuX21hcC5hZGRDb250cm9sKGNvbnRyb2wpOwogIH07CgogIENvbnRyb2xTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oaWQpIHsKICAgIGlmICh0aGlzLl9jb250cm9sc0J5SWRbaWRdKSB7CiAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2woY29udHJvbCk7CiAgICAgIGRlbGV0ZSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgfQogIH07CgogIENvbnRyb2xTdG9yZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY29udHJvbHNOb0lkLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNOb0lkW2ldOwogICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChjb250cm9sKTsKICAgIH07CiAgICB0aGlzLl9jb250cm9sc05vSWQgPSBbXTsKCiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fY29udHJvbHNCeUlkKSB7CiAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2tleV07CiAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpCiAgICB9CiAgICB0aGlzLl9jb250cm9sc0J5SWQgPSB7fQogIH0KCiAgZnVuY3Rpb24gQ2x1c3RlckxheWVyU3RvcmUoZ3JvdXApIHsKICAgIHRoaXMuX2xheWVycyA9IHt9OwogICAgdGhpcy5fZ3JvdXAgPSBncm91cDsKICB9CgogIENsdXN0ZXJMYXllclN0b3JlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihsYXllciwgaWQpIHsKICAgIGlmICh0eXBlb2YoaWQpICE9PSAndW5kZWZpbmVkJyAmJiBpZCAhPT0gbnVsbCkgewogICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXSkgewogICAgICAgIHRoaXMuX2dyb3VwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpZF0pOwogICAgICB9CiAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgIH0KICAgIHRoaXMuX2dyb3VwLmFkZExheWVyKGxheWVyKTsKICB9OwoKICBDbHVzdGVyTGF5ZXJTdG9yZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oaWQpIHsKICAgIGlmICh0eXBlb2YoaWQpID09PSAndW5kZWZpbmVkJyB8fCBpZCA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWQgPSBhc0FycmF5KGlkKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWQubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZFtpXV0pIHsKICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRbaV1dKTsKICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkW2ldXTsKICAgICAgfQogICAgfQogIH07CgogIENsdXN0ZXJMYXllclN0b3JlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5fbGF5ZXJzID0ge307CiAgICB0aGlzLl9ncm91cC5jbGVhckxheWVycygpOwogIH07CgogIGZ1bmN0aW9uIG1vdXNlSGFuZGxlcihtYXBJZCwgbGF5ZXJJZCwgZ3JvdXAsIGV2ZW50TmFtZSwgZXh0cmFJbmZvKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oZSkgewogICAgICBpZiAoIUhUTUxXaWRnZXRzLnNoaW55TW9kZSkgcmV0dXJuOwoKICAgICAgdmFyIGV2ZW50SW5mbyA9ICQuZXh0ZW5kKAogICAgICAgIHsKICAgICAgICAgIGlkOiBsYXllcklkLAogICAgICAgICAgJy5ub25jZSc6IE1hdGgucmFuZG9tKCkgIC8vIGZvcmNlIHJlYWN0aXZpdHkKICAgICAgICB9LAogICAgICAgIGdyb3VwICE9PSBudWxsID8ge2dyb3VwOiBncm91cH0gOiBudWxsLAogICAgICAgIGUudGFyZ2V0LmdldExhdExuZyA/IGUudGFyZ2V0LmdldExhdExuZygpIDogZS5sYXRsbmcsCiAgICAgICAgZXh0cmFJbmZvCiAgICAgICk7CgogICAgICBTaGlueS5vbklucHV0Q2hhbmdlKG1hcElkICsgJ18nICsgZXZlbnROYW1lLCBldmVudEluZm8pOwogICAgfTsKICB9CgogIC8vIFNlbmQgdXBkYXRlZCBib3VuZHMgYmFjayB0byBhcHAuIFRha2VzIGEgbGVhZmxldCBldmVudCBvYmplY3QgYXMgaW5wdXQuCiAgZnVuY3Rpb24gdXBkYXRlQm91bmRzKG1hcCkgewogICAgdmFyIGlkID0gbWFwLmdldENvbnRhaW5lcigpLmlkOwogICAgdmFyIGJvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTsKCiAgICBTaGlueS5vbklucHV0Q2hhbmdlKGlkICsgJ19ib3VuZHMnLCB7CiAgICAgIG5vcnRoOiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubGF0LAogICAgICBlYXN0OiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubG5nLAogICAgICBzb3V0aDogYm91bmRzLmdldFNvdXRoV2VzdCgpLmxhdCwKICAgICAgd2VzdDogYm91bmRzLmdldFNvdXRoV2VzdCgpLmxuZwogICAgfSk7CiAgICBTaGlueS5vbklucHV0Q2hhbmdlKGlkICsgJ196b29tJywgbWFwLmdldFpvb20oKSk7CiAgfQoKICB3aW5kb3cuTGVhZmxldFdpZGdldCA9IHt9OwogIHZhciBtZXRob2RzID0gd2luZG93LkxlYWZsZXRXaWRnZXQubWV0aG9kcyA9IHt9OwoKICBtZXRob2RzLmNsZWFyR3JvdXAgPSBmdW5jdGlvbihncm91cCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgJC5lYWNoKGFzQXJyYXkoZ3JvdXApLCBmdW5jdGlvbihpLCB2KSB7CiAgICAgIHNlbGYubGF5ZXJNYW5hZ2VyLmNsZWFyR3JvdXAodik7CiAgICB9KTsKICB9OwoKICBtZXRob2RzLnNldFZpZXcgPSBmdW5jdGlvbihjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHsKICAgIHRoaXMuc2V0VmlldyhjZW50ZXIsIHpvb20sIG9wdGlvbnMpOwogIH07CgogIG1ldGhvZHMuZml0Qm91bmRzID0gZnVuY3Rpb24obGF0MSwgbG5nMSwgbGF0MiwgbG5nMikgewogICAgdGhpcy5maXRCb3VuZHMoWwogICAgICBbbGF0MSwgbG5nMV0sIFtsYXQyLCBsbmcyXQogICAgXSk7CiAgfTsKCiAgbWV0aG9kcy5zZXRNYXhCb3VuZHMgPSBmdW5jdGlvbihsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgICB0aGlzLnNldE1heEJvdW5kcyhbCiAgICAgIFtsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdCiAgICBdKTsKICB9OwoKICBtZXRob2RzLmFkZFBvcHVwcyA9IGZ1bmN0aW9uKGxhdCwgbG5nLCBwb3B1cCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgncG9wdXAnLCBwb3B1cCkKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcG9wdXAgPSBMLnBvcHVwKGRmLmdldChpKSkKICAgICAgICAgICAgICAgICAgICAgLnNldExhdExuZyhbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0pCiAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50KGRmLmdldChpLCAncG9wdXAnKSk7CiAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAnbGF5ZXJJZCcpOwogICAgICAgIHZhciB0aGlzR3JvdXAgPSBkZi5nZXQoaSwgJ2dyb3VwJyk7CiAgICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIocG9wdXAsICJwb3B1cCIsIHRoaXNJZCwgdGhpc0dyb3VwKTsKICAgICAgICBwb3B1cC5vbignY2xpY2snLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICdwb3B1cF9jbGljaycpLCB0aGlzKTsKICAgICAgICBwb3B1cC5vbignbW91c2VvdmVyJywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAncG9wdXBfbW91c2VvdmVyJyksIHRoaXMpOwogICAgICAgIHBvcHVwLm9uKCdtb3VzZW91dCcsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgJ3BvcHVwX21vdXNlb3V0JyksIHRoaXMpOwogICAgICB9KS5jYWxsKHRoaXMpOwogICAgfQogIH07CgogIG1ldGhvZHMucmVtb3ZlUG9wdXAgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigicG9wdXAiLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFyUG9wdXBzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygicG9wdXAiKTsKICB9OwoKICBtZXRob2RzLmFkZFRpbGVzID0gZnVuY3Rpb24odXJsVGVtcGxhdGUsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllcih1cmxUZW1wbGF0ZSwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwogIH07CgogIG1ldGhvZHMucmVtb3ZlVGlsZXMgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidGlsZSIsIGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJUaWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInRpbGUiKTsKICB9OwoKICBtZXRob2RzLmFkZFdNU1RpbGVzID0gZnVuY3Rpb24oYmFzZVVybCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKEwudGlsZUxheWVyLndtcyhiYXNlVXJsLCBvcHRpb25zKSwgInRpbGUiLCBsYXllcklkLCBncm91cCk7CiAgfTsKCiAgLy8gR2l2ZW46CiAgLy8gICB7ZGF0YTogWyJhIiwgImIiLCAiYyJdLCBpbmRleDogWzAsIDEsIDAsIDJdfQogIC8vIHJldHVybnM6CiAgLy8gICBbImEiLCAiYiIsICJhIiwgImMiXQogIGZ1bmN0aW9uIHVucGFja1N0cmluZ3MoaWNvbnNldCkgewogICAgaWYgKCFpY29uc2V0KSB7CiAgICAgIHJldHVybiBpY29uc2V0OwogICAgfQogICAgaWYgKHR5cGVvZihpY29uc2V0LmluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgcmV0dXJuIGljb25zZXQ7CiAgICB9CgogICAgaWNvbnNldC5kYXRhID0gYXNBcnJheShpY29uc2V0LmRhdGEpOwogICAgaWNvbnNldC5pbmRleCA9IGFzQXJyYXkoaWNvbnNldC5pbmRleCk7CgogICAgcmV0dXJuICQubWFwKGljb25zZXQuaW5kZXgsIGZ1bmN0aW9uKGUsIGkpIHsKICAgICAgcmV0dXJuIGljb25zZXQuZGF0YVtlXTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYWRkTWFya2VycyhtYXAsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbWFya2VyRnVuYykgewogICAgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2x1c3Rlckdyb3VwID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpLAogICAgICAgICAgY2x1c3RlciA9IGNsdXN0ZXJPcHRpb25zICE9PSBudWxsOwogICAgICBpZiAoY2x1c3RlciAmJiAhY2x1c3Rlckdyb3VwKSB7CiAgICAgICAgY2x1c3Rlckdyb3VwID0gTC5tYXJrZXJDbHVzdGVyR3JvdXAoY2x1c3Rlck9wdGlvbnMpOwogICAgICAgIGNsdXN0ZXJHcm91cC5jbHVzdGVyTGF5ZXJTdG9yZSA9IG5ldyBDbHVzdGVyTGF5ZXJTdG9yZShjbHVzdGVyR3JvdXApOwogICAgICB9CiAgICAgIHZhciBleHRyYUluZm8gPSBjbHVzdGVyID8geyBjbHVzdGVySWQ6IGNsdXN0ZXJJZCB9IDoge307CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckZ1bmMoZGYsIGkpOwogICAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAnbGF5ZXJJZCcpOwogICAgICAgICAgdmFyIHRoaXNHcm91cCA9IGNsdXN0ZXIgPyBudWxsIDogZGYuZ2V0KGksICdncm91cCcpOwogICAgICAgICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgICAgICAgY2x1c3Rlckdyb3VwLmNsdXN0ZXJMYXllclN0b3JlLmFkZChtYXJrZXIsIHRoaXNJZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihtYXJrZXIsICJtYXJrZXIiLCB0aGlzSWQsIHRoaXNHcm91cCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgJ3BvcHVwJyk7CiAgICAgICAgICBpZiAocG9wdXAgIT09IG51bGwpIG1hcmtlci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgbWFya2VyLm9uKCdjbGljaycsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgJ21hcmtlcl9jbGljaycsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgICAgbWFya2VyLm9uKCdtb3VzZW92ZXInLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICdtYXJrZXJfbW91c2VvdmVyJywgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oJ21vdXNlb3V0JywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAnbWFya2VyX21vdXNlb3V0JywgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgfSkuY2FsbCh0aGlzKTsKICAgICAgfQoKICAgICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihjbHVzdGVyR3JvdXAsICJjbHVzdGVyIiwgY2x1c3RlcklkLCBncm91cCk7CiAgICAgIH0KICAgIH0pLmNhbGwobWFwKTsKICB9CgogIG1ldGhvZHMuYWRkTWFya2VycyA9IGZ1bmN0aW9uKGxhdCwgbG5nLCBpY29uLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCkgewogICAgaWYgKGljb24pIHsKICAgICAgLy8gVW5wYWNrIGljb25zCiAgICAgIGljb24uaWNvblVybCAgICAgICAgID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25VcmwpOwogICAgICBpY29uLmljb25SZXRpbmFVcmwgICA9IHVucGFja1N0cmluZ3MoaWNvbi5pY29uUmV0aW5hVXJsKTsKICAgICAgaWNvbi5zaGFkb3dVcmwgICAgICAgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93VXJsKTsKICAgICAgaWNvbi5zaGFkb3dSZXRpbmFVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93UmV0aW5hVXJsKTsKCiAgICAgIC8vIFRoaXMgY2JpbmRzIHRoZSBpY29uIFVSTHMgYW5kIGFueSBvdGhlciBpY29uIG9wdGlvbnM7IHRoZXkncmUgYWxsCiAgICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgICB2YXIgaWNvbmRmID0gZGF0YWZyYW1lLmNyZWF0ZSgpLmNiaW5kKGljb24pOwoKICAgICAgLy8gQ29uc3RydWN0cyBhbiBpY29uIGZyb20gYSBzcGVjaWZpZWQgcm93IG9mIHRoZSBpY29uIGRhdGFmcmFtZS4KICAgICAgdmFyIGdldEljb24gPSBmdW5jdGlvbihpKSB7CiAgICAgICAgdmFyIG9wdHMgPSBpY29uZGYuZ2V0KGkpOwogICAgICAgIGlmICghb3B0cy5pY29uVXJsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEwuSWNvbi5EZWZhdWx0KCk7CiAgICAgICAgfQoKICAgICAgICAvLyBDb21wb3NpdGUgb3B0aW9ucyAobGlrZSBwb2ludHMgb3Igc2l6ZXMpIGFyZSBwYXNzZWQgZnJvbSBSIHdpdGggZWFjaAogICAgICAgIC8vIGluZGl2aWR1YWwgY29tcG9uZW50IGFzIGl0cyBvd24gb3B0aW9uLiBXZSBuZWVkIHRvIGNvbWJpbmUgdGhlbSBub3cKICAgICAgICAvLyBpbnRvIHRoZWlyIGNvbXBvc2l0ZSBmb3JtLgogICAgICAgIGlmIChvcHRzLmljb25XaWR0aCkgewogICAgICAgICAgb3B0cy5pY29uU2l6ZSA9IFtvcHRzLmljb25XaWR0aCwgb3B0cy5pY29uSGVpZ2h0XTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdHMuc2hhZG93V2lkdGgpIHsKICAgICAgICAgIG9wdHMuc2hhZG93U2l6ZSA9IFtvcHRzLnNoYWRvd1dpZHRoLCBvcHRzLnNoYWRvd0hlaWdodF07CiAgICAgICAgfQogICAgICAgIGlmIChvcHRzLmljb25BbmNob3JYKSB7CiAgICAgICAgICBvcHRzLmljb25BbmNob3IgPSBbb3B0cy5pY29uQW5jaG9yWCwgb3B0cy5pY29uQW5jaG9yWV07CiAgICAgICAgfQogICAgICAgIGlmIChvcHRzLnNoYWRvd0FuY2hvclgpIHsKICAgICAgICAgIG9wdHMuc2hhZG93QW5jaG9yID0gW29wdHMuc2hhZG93QW5jaG9yWCwgb3B0cy5zaGFkb3dBbmNob3JZXTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdHMucG9wdXBBbmNob3JYKSB7CiAgICAgICAgICBvcHRzLnBvcHVwQW5jaG9yID0gW29wdHMucG9wdXBBbmNob3JYLCBvcHRzLnBvcHVwQW5jaG9yWV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEwuSWNvbihvcHRzKTsKICAgICAgfTsKICAgIH0KCiAgICB2YXIgZGYgPSBkYXRhZnJhbWUuY3JlYXRlKCkKICAgICAgLmNvbCgnbGF0JywgbGF0KQogICAgICAuY29sKCdsbmcnLCBsbmcpCiAgICAgIC5jb2woJ2xheWVySWQnLCBsYXllcklkKQogICAgICAuY29sKCdncm91cCcsIGdyb3VwKQogICAgICAuY29sKCdwb3B1cCcsIHBvcHVwKQogICAgICAuY2JpbmQob3B0aW9ucyk7CgogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHZhciBvcHRpb25zID0gZGYuZ2V0KGkpOwogICAgICBpZiAoaWNvbikgb3B0aW9ucy5pY29uID0gZ2V0SWNvbihpKTsKICAgICAgcmV0dXJuIEwubWFya2VyKFtkZi5nZXQoaSwgJ2xhdCcpLCBkZi5nZXQoaSwgJ2xuZycpXSwgb3B0aW9ucyk7CiAgICB9KTsKICB9OwoKICBhZGRMYXllcnMgPSBmdW5jdGlvbihtYXAsIGNhdGVnb3J5LCBkZiwgbGF5ZXJGdW5jKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbGF5ZXIgPSBsYXllckZ1bmMoZGYsIGkpOwogICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgJ2xheWVySWQnKTsKICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICdncm91cCcpOwogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGxheWVyLCBjYXRlZ29yeSwgdGhpc0lkLCB0aGlzR3JvdXApOwogICAgICAgIGlmIChsYXllci5iaW5kUG9wdXApIHsKICAgICAgICAgIHZhciBwb3B1cCA9IGRmLmdldChpLCAncG9wdXAnKTsKICAgICAgICAgIGlmIChwb3B1cCAhPT0gbnVsbCkgbGF5ZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICB9CiAgICAgICAgbGF5ZXIub24oJ2NsaWNrJywgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICdfY2xpY2snKSwgdGhpcyk7CiAgICAgICAgbGF5ZXIub24oJ21vdXNlb3ZlcicsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAnX21vdXNlb3ZlcicpLCB0aGlzKTsKICAgICAgICBsYXllci5vbignbW91c2VvdXQnLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgJ19tb3VzZW91dCcpLCB0aGlzKTsKICAgICAgfSkuY2FsbChtYXApOwogICAgfQogIH0KCiAgbWV0aG9kcy5hZGRDaXJjbGVzID0gZnVuY3Rpb24obGF0LCBsbmcsIHJhZGl1cywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwKSB7CiAgICB2YXIgZGYgPSBkYXRhZnJhbWUuY3JlYXRlKCkKICAgICAgLmNvbCgnbGF0JywgbGF0KQogICAgICAuY29sKCdsbmcnLCBsbmcpCiAgICAgIC5jb2woJ3JhZGl1cycsIHJhZGl1cykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHJldHVybiBMLmNpcmNsZShbZGYuZ2V0KGksICdsYXQnKSwgZGYuZ2V0KGksICdsbmcnKV0sIGRmLmdldChpLCAncmFkaXVzJyksIGRmLmdldChpKSk7CiAgICB9KTsKICB9OwoKICBtZXRob2RzLmFkZENpcmNsZU1hcmtlcnMgPSBmdW5jdGlvbihsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgcG9wdXApIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQnLCBsYXQpCiAgICAgIC5jb2woJ2xuZycsIGxuZykKICAgICAgLmNvbCgncmFkaXVzJywgcmFkaXVzKQogICAgICAuY29sKCdsYXllcklkJywgbGF5ZXJJZCkKICAgICAgLmNvbCgnZ3JvdXAnLCBncm91cCkKICAgICAgLmNvbCgncG9wdXAnLCBwb3B1cCkKICAgICAgLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbihkZiwgaSkgewogICAgICByZXR1cm4gTC5jaXJjbGVNYXJrZXIoW2RmLmdldChpLCAnbGF0JyksIGRmLmdldChpLCAnbG5nJyldLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfTsKCiAgLyoKICAgKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAgICogQHBhcmFtIGxuZyBBcnJheSBvZiBhcnJheXMgb2YgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5bGluZXMKICAgKi8KICBtZXRob2RzLmFkZFBvbHlsaW5lcyA9IGZ1bmN0aW9uKHBvbHlnb25zLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXApIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdzaGFwZXMnLCBwb2x5Z29ucykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgICAgdmFyIHNoYXBlID0gZGYuZ2V0KGksICdzaGFwZXMnKVswXTsKICAgICAgICBzaGFwZSA9IEhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMoc2hhcGUpOwogICAgICAgIHJldHVybiBMLnBvbHlsaW5lKHNoYXBlLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigibWFya2VyIiwgbGF5ZXJJZCk7CiAgfTsKCiAgbWV0aG9kcy5jbGVhck1hcmtlcnMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJtYXJrZXIiKTsKICB9OwoKICBtZXRob2RzLnJlbW92ZU1hcmtlckNsdXN0ZXIgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiY2x1c3RlciIsIGxheWVySWQpOwogIH0KCiAgbWV0aG9kcy5yZW1vdmVNYXJrZXJGcm9tQ2x1c3RlciA9IGZ1bmN0aW9uKGxheWVySWQsIGNsdXN0ZXJJZCkgewogICAgdmFyIGNsdXN0ZXIgPSB0aGlzLmxheWVyTWFuYWdlci5nZXRMYXllcigiY2x1c3RlciIsIGNsdXN0ZXJJZCk7CiAgICBpZiAoIWNsdXN0ZXIpIHJldHVybjsKICAgIGNsdXN0ZXIuY2x1c3RlckxheWVyU3RvcmUucmVtb3ZlKGxheWVySWQpOwogIH0KCiAgbWV0aG9kcy5jbGVhck1hcmtlckNsdXN0ZXJzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygiY2x1c3RlciIpOwogIH07CgogIG1ldGhvZHMucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigic2hhcGUiLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFyU2hhcGVzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygic2hhcGUiKTsKICB9OwoKICBtZXRob2RzLmFkZFJlY3RhbmdsZXMgPSBmdW5jdGlvbihsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXApIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdsYXQxJywgbGF0MSkKICAgICAgLmNvbCgnbG5nMScsIGxuZzEpCiAgICAgIC5jb2woJ2xhdDInLCBsYXQyKQogICAgICAuY29sKCdsbmcyJywgbG5nMikKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHJldHVybiBMLnJlY3RhbmdsZShbCiAgICAgICAgICBbZGYuZ2V0KGksICdsYXQxJyksIGRmLmdldChpLCAnbG5nMScpXSwKICAgICAgICAgIFtkZi5nZXQoaSwgJ2xhdDInKSwgZGYuZ2V0KGksICdsbmcyJyldCiAgICAgICAgXSwKICAgICAgICBkZi5nZXQoaSkpOwogICAgfSk7CiAgfTsKCiAgLyoKICAgKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWdvbnMKICAgKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAgICovCiAgbWV0aG9kcy5hZGRQb2x5Z29ucyA9IGZ1bmN0aW9uKHBvbHlnb25zLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXApIHsKICAgIHZhciBkZiA9IGRhdGFmcmFtZS5jcmVhdGUoKQogICAgICAuY29sKCdzaGFwZXMnLCBwb2x5Z29ucykKICAgICAgLmNvbCgnbGF5ZXJJZCcsIGxheWVySWQpCiAgICAgIC5jb2woJ2dyb3VwJywgZ3JvdXApCiAgICAgIC5jb2woJ3BvcHVwJywgcG9wdXApCiAgICAgIC5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uKGRmLCBpKSB7CiAgICAgIHZhciBzaGFwZXMgPSBkZi5nZXQoaSwgJ3NoYXBlcycpOwogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNoYXBlcy5sZW5ndGg7IGorKykgewogICAgICAgIHNoYXBlc1tqXSA9IEhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMoc2hhcGVzW2pdKTsKICAgICAgfQogICAgICByZXR1cm4gTC5wb2x5Z29uKHNoYXBlcywgZGYuZ2V0KGkpKTsKICAgIH0pOwogIH07CgogIG1ldGhvZHMuYWRkR2VvSlNPTiA9IGZ1bmN0aW9uKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgaWYgKHR5cGVvZihkYXRhKSA9PT0gInN0cmluZyIpIHsKICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgICB9CgogICAgdmFyIGdsb2JhbFN0eWxlID0gJC5leHRlbmQoe30sIHN0eWxlLCBkYXRhLnN0eWxlIHx8IHt9KTsKCiAgICB2YXIgZ2psYXllciA9IEwuZ2VvSnNvbihkYXRhLCB7CiAgICAgIHN0eWxlOiBmdW5jdGlvbihmZWF0dXJlKSB7CiAgICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgICAgfQogICAgICB9LAogICAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbihmZWF0dXJlLCBsYXllcikgewogICAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMKICAgICAgICB9OwogICAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDsKICAgICAgICBpZiAodHlwZW9mIHBvcHVwICE9PSAndW5kZWZpbmVkJyAmJiBwb3B1cCAhPT0gbnVsbCkgbGF5ZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgbGF5ZXIub24oIm1vdXNlb3V0IiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAiZ2VvanNvbl9tb3VzZW91dCIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICB9CiAgICB9KTsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGdqbGF5ZXIsICJnZW9qc29uIiwgbGF5ZXJJZCwgZ3JvdXApOwogIH07CgogIG1ldGhvZHMucmVtb3ZlR2VvSlNPTiA9IGZ1bmN0aW9uKGxheWVySWQpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJnZW9qc29uIiwgbGF5ZXJJZCk7CiAgfTsKCiAgbWV0aG9kcy5jbGVhckdlb0pTT04gPSBmdW5jdGlvbigpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJnZW9qc29uIik7CiAgfTsKCiAgbWV0aG9kcy5hZGRUb3BvSlNPTiA9IGZ1bmN0aW9uKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgaWYgKHR5cGVvZihkYXRhKSA9PT0gInN0cmluZyIpIHsKICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgICB9CgogICAgdmFyIGdsb2JhbFN0eWxlID0gJC5leHRlbmQoe30sIHN0eWxlLCBkYXRhLnN0eWxlIHx8IHt9KTsKCiAgICB2YXIgZ2psYXllciA9IEwuZ2VvSnNvbihudWxsLCB7CiAgICAgIHN0eWxlOiBmdW5jdGlvbihmZWF0dXJlKSB7CiAgICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgICAgfQogICAgICB9LAogICAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbihmZWF0dXJlLCBsYXllcikgewogICAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMKICAgICAgICB9OwogICAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDsKICAgICAgICBpZiAodHlwZW9mIHBvcHVwICE9PSAndW5kZWZpbmVkJyAmJiBwb3B1cCAhPT0gbnVsbCkgbGF5ZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgIGxheWVyLm9uKCJtb3VzZW92ZXIiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9tb3VzZW92ZXIiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9tb3VzZW91dCIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICB9CiAgICB9KTsKICAgIG9tbml2b3JlLnRvcG9qc29uLnBhcnNlKGRhdGEsIG51bGwsIGdqbGF5ZXIpOwogICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoZ2psYXllciwgInRvcG9qc29uIiwgbGF5ZXJJZCwgZ3JvdXApOwogIH07CgogIG1ldGhvZHMucmVtb3ZlVG9wb0pTT04gPSBmdW5jdGlvbihsYXllcklkKSB7CiAgICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidG9wb2pzb24iLCBsYXllcklkKTsKICB9OwoKICBtZXRob2RzLmNsZWFyVG9wb0pTT04gPSBmdW5jdGlvbigpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0b3BvanNvbiIpOwogIH07CgogIG1ldGhvZHMuYWRkQ29udHJvbCA9IGZ1bmN0aW9uKGh0bWwsIHBvc2l0aW9uLCBsYXllcklkLCBjbGFzc2VzKSB7CiAgICBmdW5jdGlvbiBvbkFkZChtYXApIHsKICAgICAgdmFyIGRpdiA9IEwuRG9tVXRpbC5jcmVhdGUoJ2RpdicsIGNsYXNzZXMpOwogICAgICBpZiAodHlwZW9mIGxheWVySWQgIT09ICd1bmRlZmluZWQnICYmIGxheWVySWQgIT09IG51bGwpIHsKICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdpZCcsIGxheWVySWQpCiAgICAgIH0KICAgICAgdGhpcy5fZGl2ID0gZGl2OwoKICAgICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igd2luZG93LlNoaW55IHRvIGJlIHRydWUgYnV0IFNoaW55LmluaXRpYWxpemVJbnB1dHMgdG8KICAgICAgLy8gbm90IGJlLCB3aGVuIGEgc3RhdGljIGxlYWZsZXQgd2lkZ2V0IGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIHNoaW55CiAgICAgIC8vIFVJIGRpcmVjdGx5IChub3QgdGhyb3VnaCBsZWFmbGV0T3V0cHV0IG9yIHVpT3V0cHV0KS4gSW4gdGhpcyBjYXNlIHdlCiAgICAgIC8vIGRvbid0IGRvIHRoZSBub3JtYWwgU2hpbnkgc3R1ZmYgYXMgdGhhdCB3aWxsIGFsbCBoYXBwZW4gd2hlbiBTaGlueQogICAgICAvLyBpdHNlbGYgbG9hZHMgYW5kIGJpbmRzIHRoZSBlbnRpcmUgZG9jLgoKICAgICAgaWYgKHdpbmRvdy5TaGlueSAmJiBTaGlueS5pbml0aWFsaXplSW5wdXRzKSB7CiAgICAgICAgU2hpbnkucmVuZGVySHRtbChodG1sLCB0aGlzLl9kaXYpOwogICAgICAgIFNoaW55LmluaXRpYWxpemVJbnB1dHModGhpcy5fZGl2KTsKICAgICAgICBTaGlueS5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5fZGl2LmlubmVySFRNTCA9IGh0bWw7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLl9kaXY7CiAgICB9CiAgICBmdW5jdGlvbiBvblJlbW92ZShtYXApIHsKICAgICAgaWYgKHdpbmRvdy5TaGlueSAmJiBTaGlueS51bmJpbmRBbGwpIHsKICAgICAgICBTaGlueS51bmJpbmRBbGwodGhpcy5fZGl2KTsKICAgICAgfQogICAgfQogICAgdmFyIENvbnRyb2wgPSBMLkNvbnRyb2wuZXh0ZW5kKHsKICAgICAgb3B0aW9uczoge3Bvc2l0aW9uOiBwb3NpdGlvbn0sCiAgICAgIG9uQWRkOiBvbkFkZCwKICAgICAgb25SZW1vdmU6IG9uUmVtb3ZlCiAgICB9KQogICAgdGhpcy5jb250cm9scy5hZGQobmV3IENvbnRyb2wsIGxheWVySWQsIGh0bWwpOwogIH07CgogIG1ldGhvZHMucmVtb3ZlQ29udHJvbCA9IGZ1bmN0aW9uKGxheWVySWQpIHsKICAgIHRoaXMuY29udHJvbHMucmVtb3ZlKGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJDb250cm9scyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5jb250cm9scy5jbGVhcigpOwogIH07CgogIG1ldGhvZHMuYWRkTGVnZW5kID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgdmFyIGxlZ2VuZCA9IEwuY29udHJvbCh7cG9zaXRpb246IG9wdGlvbnMucG9zaXRpb259KTsKICAgIHZhciBncmFkU3BhbjsKCiAgICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgIHZhciBkaXYgPSBMLkRvbVV0aWwuY3JlYXRlKCdkaXYnLCBvcHRpb25zLmNsYXNzTmFtZSksCiAgICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICAgIGxhYmVscyA9IG9wdGlvbnMubGFiZWxzLAogICAgICAgICAgbGVnZW5kSFRNTCA9ICcnOwogICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnbnVtZXJpYycpIHsKICAgICAgICAvLyAjIEZvcm1hdHRpbmcgY29uc3RhbnRzLgogICAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgIC8vIFRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRpY2sgbWFya3MsIGluIHB4CiAgICAgICAgdmFyIHZNYXJnaW4gPSA4OyAvLyBJZiAxc3QgdGljayBtYXJrIHN0YXJ0cyBhdCB0b3Agb2YgZ3JhZGllbnQsIGhvdwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxc3QgbGFiZWw/IChkaXR0byBmb3IgbGFzdCB0aWNrIG1hcmsvbGFiZWwpCiAgICAgICAgdmFyIHRpY2tXaWR0aCA9IDQ7ICAgICAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CiAgICAgICAgdmFyIGxhYmVsUGFkZGluZyA9IDY7ICAvLyBIb3cgbXVjaCBkaXN0YW5jZSB0byByZXNlcnZlIGZvciB0aWNrIG1hcms/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCgogICAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCgogICAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgICAvLyBJdCBtaWdodCBub3QganVzdCBiZSAxLyhuLTEpLCBpZiB0aGUgZ3JhZGllbnQgZXh0ZW5kcyBwYXN0IHRoZSB0aWNrCiAgICAgICAgLy8gbWFya3MgKHdoaWNoIGNhbiBiZSB0aGUgY2FzZSBmb3IgcHJldHR5IGN1dCBwb2ludHMpLgogICAgICAgIHZhciBzaW5nbGVCaW5QY3QgPSAob3B0aW9ucy5leHRyYS5wX24gLSBvcHRpb25zLmV4dHJhLnBfMSkgLyAobGFiZWxzLmxlbmd0aCAtIDEpOwogICAgICAgIC8vIEVhY2ggYmluIGlzIGBzaW5nbGVCaW5IZWlnaHRgIGhpZ2guIEhvdyB0YWxsIGlzIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdG90YWxIZWlnaHQgPSAoMSAvIHNpbmdsZUJpblBjdCkgKiBzaW5nbGVCaW5IZWlnaHQgKyAxOwogICAgICAgIC8vIEhvdyBmYXIgc2hvdWxkIHRoZSBmaXJzdCB0aWNrIGJlIHNoaWZ0ZWQgZG93biwgcmVsYXRpdmUgdG8gdGhlIHRvcAogICAgICAgIC8vIG9mIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdGlja09mZnNldCA9IChzaW5nbGVCaW5IZWlnaHQgLyBzaW5nbGVCaW5QY3QpICogb3B0aW9ucy5leHRyYS5wXzE7CgogICAgICAgIGdyYWRTcGFuID0gJCgnPHNwYW4vPicpLmNzcyh7CiAgICAgICAgICAnYmFja2dyb3VuZCc6ICdsaW5lYXItZ3JhZGllbnQoJyArIGNvbG9ycyArICcpJywKICAgICAgICAgICdvcGFjaXR5Jzogb3B0aW9ucy5vcGFjaXR5LAogICAgICAgICAgJ2hlaWdodCc6IHRvdGFsSGVpZ2h0ICsgJ3B4JywKICAgICAgICAgICd3aWR0aCc6ICcxOHB4JywKICAgICAgICAgICdkaXNwbGF5JzogJ2Jsb2NrJywKICAgICAgICAgICdtYXJnaW4tdG9wJzogdk1hcmdpbiArICdweCcKICAgICAgICB9KTsKICAgICAgICB2YXIgbGVmdERpdiA9ICQoJzxkaXYvPicpLmNzcygnZmxvYXQnLCAnbGVmdCcpLAogICAgICAgICAgICByaWdodERpdiA9ICQoJzxkaXYvPicpLmNzcygnZmxvYXQnLCAnbGVmdCcpOwogICAgICAgIGxlZnREaXYuYXBwZW5kKGdyYWRTcGFuKTsKICAgICAgICAkKGRpdikuYXBwZW5kKGxlZnREaXYpLmFwcGVuZChyaWdodERpdikKICAgICAgICAgIC5hcHBlbmQoJCgiPGJyIGNsZWFyPSdib3RoJy8+IikpOwoKICAgICAgICAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgICAgLy8gc3ZnIHRleHQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgYWN0dWFsbHkgd29ya3MsIGJlbG93LgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKCiAgICAgICAgdmFyIG5zID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJzsKICAgICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAnc3ZnJyk7CiAgICAgICAgcmlnaHREaXYuYXBwZW5kKHN2Zyk7CiAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICdnJyk7CiAgICAgICAgJChnKS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsICIgKyB2TWFyZ2luICsgIikiKTsKICAgICAgICBzdmcuYXBwZW5kQ2hpbGQoZyk7CgogICAgICAgIC8vIG1heCBsYWJlbCB3aWR0aCBuZWVkZWQgdG8gc2V0IHdpZHRoIG9mIHN2ZywgYW5kIHJpZ2h0LWp1c3RpZnkgdGV4dAogICAgICAgIHZhciBtYXhMYmxXaWR0aCA9IDA7CgogICAgICAgIC8vIENyZWF0ZSB0aWNrIG1hcmtzIGFuZCBsYWJlbHMKICAgICAgICAkLmVhY2gobGFiZWxzLCBmdW5jdGlvbihpLCBsYWJlbCkgewogICAgICAgICAgdmFyIHkgPSB0aWNrT2Zmc2V0ICsgaSpzaW5nbGVCaW5IZWlnaHQgKyAwLjU7CgogICAgICAgICAgdmFyIHRoaXNMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgJ3RleHQnKTsKICAgICAgICAgICQodGhpc0xhYmVsKQogICAgICAgICAgICAudGV4dChsYWJlbHNbaV0pCiAgICAgICAgICAgIC5hdHRyKCd5JywgeSkKICAgICAgICAgICAgLmF0dHIoJ2R4JywgbGFiZWxQYWRkaW5nKQogICAgICAgICAgICAuYXR0cignZHknLCAnMC41ZXgnKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICAgIG1heExibFdpZHRoID0gTWF0aC5tYXgobWF4TGJsV2lkdGgsIHRoaXNMYWJlbC5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSk7CgogICAgICAgICAgdmFyIHRoaXNUaWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAnbGluZScpOwogICAgICAgICAgJCh0aGlzVGljaykKICAgICAgICAgICAgLmF0dHIoJ3gxJywgMCkKICAgICAgICAgICAgLmF0dHIoJ3gyJywgdGlja1dpZHRoKQogICAgICAgICAgICAuYXR0cigneTEnLCB5KQogICAgICAgICAgICAuYXR0cigneTInLCB5KQogICAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgMSk7CiAgICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgbWF4IGxhYmVsIHdpZHRoLCB3ZSBjYW4gcmlnaHQtanVzdGlmeQogICAgICAgICQoc3ZnKS5maW5kKCd0ZXh0JykKICAgICAgICAgIC5hdHRyKCdkeCcsIGxhYmVsUGFkZGluZyArIG1heExibFdpZHRoKQogICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ2VuZCcpOwogICAgICAgIC8vIEZpbmFsIHNpemUgZm9yIDxzdmc+CiAgICAgICAgJChzdmcpLmNzcyh7CiAgICAgICAgICB3aWR0aDogKG1heExibFdpZHRoICsgbGFiZWxQYWRkaW5nKSArICJweCIsCiAgICAgICAgICBoZWlnaHQ6IHRvdGFsSGVpZ2h0ICsgdk1hcmdpbioyICsgInB4IgogICAgICAgIH0pOwoKICAgICAgICBpZiAob3B0aW9ucy5uYV9jb2xvcikgewogICAgICAgICAgJChkaXYpLmFwcGVuZCgnPGRpdj48aSBzdHlsZT0iYmFja2dyb3VuZDonICsgb3B0aW9ucy5uYV9jb2xvciArCiAgICAgICAgICAgICAgICAgICAgICAgICciPjwvaT4gJyArIG9wdGlvbnMubmFfbGFiZWwgKyAnPC9kaXY+Jyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgICBjb2xvcnMucHVzaChvcHRpb25zLm5hX2NvbG9yKTsKICAgICAgICAgIGxhYmVscy5wdXNoKG9wdGlvbnMubmFfbGFiZWwpOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbGVnZW5kSFRNTCArPSAnPGkgc3R5bGU9ImJhY2tncm91bmQ6JyArIGNvbG9yc1tpXSArICc7b3BhY2l0eTonICsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vcGFjaXR5ICsgJyI+PC9pPiAnICsgbGFiZWxzW2ldICsgJzxici8+JzsKICAgICAgICB9CiAgICAgICAgZGl2LmlubmVySFRNTCA9IGxlZ2VuZEhUTUw7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMudGl0bGUpCiAgICAgICAgJChkaXYpLnByZXBlbmQoJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206M3B4Ij48c3Ryb25nPicgKwogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnRpdGxlICsgJzwvc3Ryb25nPjwvZGl2PicpOwogICAgICByZXR1cm4gZGl2OwogICAgfTsKCiAgICB0aGlzLmNvbnRyb2xzLmFkZChsZWdlbmQsIG9wdGlvbnMubGF5ZXJJZCk7CiAgfTsKCiAgbWV0aG9kcy5hZGRMYXllcnNDb250cm9sID0gZnVuY3Rpb24oYmFzZUdyb3Vwcywgb3ZlcmxheUdyb3Vwcywgb3B0aW9ucykgewoKICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAvLyBPbmx5IGFsbG93IG9uZSBsYXllcnMgY29udHJvbCBhdCBhIHRpbWUKICAgIG1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbC5jYWxsKHRoaXMpOwoKICAgIHZhciBmaXJzdExheWVyID0gdHJ1ZTsKICAgIHZhciBiYXNlID0ge307CiAgICAkLmVhY2goYXNBcnJheShiYXNlR3JvdXBzKSwgZnVuY3Rpb24oaSwgZykgewogICAgICB2YXIgbGF5ZXIgPSBzZWxmLmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgICBpZiAobGF5ZXIpIHsKICAgICAgICBiYXNlW2ddID0gbGF5ZXI7CgogICAgICAgIC8vIENoZWNrIGlmID4xIGJhc2UgbGF5ZXJzIGFyZSB2aXNpYmxlOyBpZiBzbywgaGlkZSBhbGwgYnV0IHRoZSBmaXJzdCBvbmUKICAgICAgICBpZiAoc2VsZi5oYXNMYXllcihsYXllcikpIHsKICAgICAgICAgIGlmIChmaXJzdExheWVyKSB7CiAgICAgICAgICAgIGZpcnN0TGF5ZXIgPSBmYWxzZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGYucmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICB2YXIgb3ZlcmxheSA9IHt9OwogICAgJC5lYWNoKGFzQXJyYXkob3ZlcmxheUdyb3VwcyksIGZ1bmN0aW9uKGksIGcpIHsKICAgICAgdmFyIGxheWVyID0gc2VsZi5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgb3ZlcmxheVtnXSA9IGxheWVyOwogICAgICB9CiAgICB9KTsKCiAgICB2YXIgbGF5ZXJzQ29udHJvbCA9IEwuY29udHJvbC5sYXllcnMoYmFzZSwgb3ZlcmxheSwgb3B0aW9ucykuYWRkVG8odGhpcyk7CiAgICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gbGF5ZXJzQ29udHJvbDsKICB9OwoKICBtZXRob2RzLnJlbW92ZUxheWVyc0NvbnRyb2wgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sKSB7CiAgICAgIHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wucmVtb3ZlRnJvbSh0aGlzKTsKICAgICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IG51bGw7CiAgICB9CiAgfTsKCiAgbWV0aG9kcy5oaWRlR3JvdXAgPSBmdW5jdGlvbihncm91cCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgJC5lYWNoKGFzQXJyYXkoZ3JvdXApLCBmdW5jdGlvbihpLCBnKSB7CiAgICAgIHZhciBsYXllciA9IHNlbGYubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICAgIGlmIChsYXllcikgewogICAgICAgIHNlbGYucmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgICB9CiAgICB9KTsKICB9OwoKICBtZXRob2RzLnNob3dHcm91cCA9IGZ1bmN0aW9uKGdyb3VwKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAkLmVhY2goYXNBcnJheShncm91cCksIGZ1bmN0aW9uKGksIGcpIHsKICAgICAgdmFyIGxheWVyID0gc2VsZi5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgc2VsZi5hZGRMYXllcihsYXllcik7CiAgICAgIH0KICAgIH0pOwogIH07CgogIG1ldGhvZHMuYWRkUmFzdGVySW1hZ2UgPSBmdW5jdGlvbih1cmksIGJvdW5kcywgb3BhY2l0eSwgYXR0cmlidXRpb24sIGxheWVySWQsIGdyb3VwKSB7CiAgICAvLyB1cmkgaXMgYSBkYXRhIFVSSSBjb250YWluaW5nIGFuIGltYWdlLiBXZSB3YW50IHRvIHBhaW50IHRoaXMgaW1hZ2UgYXMgYQogICAgLy8gbGF5ZXIgYXQgKHRvcC1sZWZ0KSBib3VuZHNbMF0gdG8gKGJvdHRvbS1yaWdodCkgYm91bmRzWzFdLgoKICAgIC8vIFdlIGNhbid0IHNpbXBseSB1c2UgSW1hZ2VPdmVybGF5LCBhcyBpdCB1c2VzIGJpbGluZWFyIHNjYWxpbmcgd2hpY2ggbG9va3MKICAgIC8vIGF3ZnVsIGFzIHlvdSB6b29tIGluIChhbmQgc29tZXRpbWVzIHNoaWZ0cyBwb3NpdGlvbnMgb3IgZGlzYXBwZWFycykuCiAgICAvLyBJbnN0ZWFkLCB3ZSdsbCB1c2UgYSBUaWxlTGF5ZXIuQ2FudmFzIHRvIGRyYXcgcGllY2VzIG9mIHRoZSBpbWFnZS4KCiAgICAvLyBGaXJzdCwgc29tZSBoZWxwZXIgZnVuY3Rpb25zLgoKICAgIC8vIGRlZ3JlZTJ0aWxlIGNvbnZlcnRzIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFuZCB6b29tIHRvIHggYW5kIHkgdGlsZQogICAgLy8gbnVtYmVycy4gVGhlIHRpbGUgbnVtYmVycyByZXR1cm5lZCBjYW4gYmUgbm9uLWludGVncmFsLCBhcyB0aGVyZSdzIG5vCiAgICAvLyByZWFzb24gdG8gZXhwZWN0IHRoYXQgdGhlIGxhdC9sbmcgaW5wdXRzIGFyZSBleGFjdGx5IG9uIHRoZSBib3JkZXIgb2YgdHdvCiAgICAvLyB0aWxlcy4KICAgIC8vCiAgICAvLyBXZSdsbCB1c2UgdGhpcyB0byBjb252ZXJ0IHRoZSBib3VuZHMgd2UgZ290IGZyb20gdGhlIHNlcnZlciwgaW50byBjb29yZHMKICAgIC8vIGluIHRpbGUtc3BhY2UgYXQgYSBnaXZlbiB6b29tIGxldmVsLiBOb3RlIHRoYXQgb25jZSB3ZSBkbyB0aGUgY29udmVyc2lvbiwKICAgIC8vIHdlIGRvbid0IHRvIGRvIGFueSBtb3JlIHRyaWdvbm9tZXRyeSB0byBjb252ZXJ0IGJldHdlZW4gcGl4ZWwgY29vcmRpbmF0ZXMKICAgIC8vIGFuZCB0aWxlIGNvb3JkaW5hdGVzOyB0aGUgc291cmNlIGltYWdlIHBpeGVsIGNvb3JkcywgZGVzdGluYXRpb24gY2FudmFzCiAgICAvLyBwaXhlbCBjb29yZHMsIGFuZCB0aWxlIGNvb3JkcyBhbGwgY2FuIGJlIHNjYWxlZCBsaW5lYXJseS4KICAgIGZ1bmN0aW9uIGRlZ3JlZTJ0aWxlKGxhdCwgbG5nLCB6b29tKSB7CiAgICAgIC8vIFNlZSBodHRwOi8vd2lraS5vcGVuc3RyZWV0bWFwLm9yZy93aWtpL1NsaXBweV9tYXBfdGlsZW5hbWVzCiAgICAgIHZhciBsYXRSYWQgPSBsYXQgKiBNYXRoLlBJIC8gMTgwOwogICAgICB2YXIgbiA9IE1hdGgucG93KDIsIHpvb20pOwogICAgICB2YXIgeCA9IChsbmcgKyAxODApIC8gMzYwICogbgogICAgICB2YXIgeSA9ICgxIC0gTWF0aC5sb2coTWF0aC50YW4obGF0UmFkKSArICgxIC8gTWF0aC5jb3MobGF0UmFkKSkpIC8gTWF0aC5QSSkgLyAyICogbgogICAgICByZXR1cm4ge3g6IHgsIHk6IHl9OwogICAgfQoKICAgIC8vIEdpdmVuIGEgcmFuZ2UgW2Zyb20sdG8pIGFuZCBlaXRoZXIgb25lIG9yIHR3byBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYKICAgIC8vIHRoZXJlIGlzIGFueSBvdmVybGFwIGJldHdlZW4gW3gseDEpIGFuZCB0aGUgcmFuZ2UtLW9yIGlmIHgxIGlzIG9taXR0ZWQsCiAgICAvLyB0aGVuIHJldHVybnMgdHJ1ZSBpZiB4IGlzIHdpdGhpbiBbZnJvbSx0bykuCiAgICBmdW5jdGlvbiBvdmVybGFwKGZyb20sIHRvLCB4LCAvKiBvcHRpb25hbCAqLyB4MSkgewogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzKQogICAgICAgIHgxID0geDsKICAgICAgcmV0dXJuIHggPCB0byAmJiB4MSA+PSBmcm9tOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldENhbnZhc1Ntb290aGluZ1Byb3BlcnR5KGN0eCkgewogICAgICB2YXIgY2FuZGlkYXRlcyA9IFsiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCIsCiAgICAgICAgICAid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIl07CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0eXBlb2YoY3R4W2NhbmRpZGF0ZXNbaV1dKSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBjYW5kaWRhdGVzW2ldOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvLyBPdXIgZ2VuZXJhbCBzdHJhdGVneSBpcyB0bzoKICAgIC8vIDEuIExvYWQgdGhlIGRhdGEgVVJJIGluIGFuIEltYWdlKCkgb2JqZWN0LCBzbyB3ZSBjYW4gZ2V0IGl0cyBwaXhlbAogICAgLy8gICAgZGltZW5zaW9ucyBhbmQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YS4gKFdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzCiAgICAvLyAgICBieSBub3QgZW5jb2RpbmcgYXMgUE5HIGF0IGFsbCBidXQganVzdCBzZW5kIGFuIGFycmF5IG9mIFJHQkEgdmFsdWVzCiAgICAvLyAgICBmcm9tIHRoZSBzZXJ2ZXIsIGJ1dCB0aGF0IHdvdWxkIGluZmxhdGUgdGhlIEpTT04gdG9vIG11Y2guKQogICAgLy8gMi4gQ3JlYXRlIGEgaGlkZGVuIGNhbnZhcyB0aGF0IHdlIHVzZSBqdXN0IHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAgIC8vICAgIGZyb20gdGhlIEltYWdlICh1c2luZyBDb250ZXh0MkQuZ2V0SW1hZ2VEYXRhKCkpLgogICAgLy8gMy4gQ3JlYXRlIGEgVGlsZUxheWVyLkNhbnZhcyBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuCgogICAgLy8gV2Ugd2FudCB0byBzeW5jaHJvbm91c2x5IGNyZWF0ZSBhbmQgYXR0YWNoIHRoZSBUaWxlTGF5ZXIuQ2FudmFzIChzbyBhbgogICAgLy8gaW1tZWRpYXRlIGNhbGwgdG8gY2xlYXJSYXN0ZXJzKCkgd2lsbCBiZSByZXNwZWN0ZWQsIGZvciBleGFtcGxlKSwgYnV0CiAgICAvLyBJbWFnZSBsb2FkcyBpdHMgZGF0YSBhc3luY2hyb25vdXNseS4gRm9ydHVuYXRlbHkgd2UgY2FuIHJlc29sdmUgdGhpcwogICAgLy8gYnkgcHV0dGluZyBUaWxlTGF5ZXIuQ2FudmFzIGludG8gYXN5bmMgbW9kZSwgd2hpY2ggd2lsbCBsZXQgdXMgY3JlYXRlCiAgICAvLyBhbmQgYXR0YWNoIHRoZSBsYXllciBidXQgaGF2ZSBpdCB3YWl0IHVudGlsIHRoZSBpbWFnZSBpcyBsb2FkZWQgYmVmb3JlCiAgICAvLyBpdCBhY3R1YWxseSBkcmF3cyBhbnl0aGluZy4KCiAgICAvLyBUaGVzZSBhcmUgdGhlIHZhcmlhYmxlcyB0aGF0IHdlIHdpbGwgcG9wdWxhdGUgb25jZSB0aGUgaW1hZ2UgaXMgbG9hZGVkLgogICAgdmFyIGltZ0RhdGEgPSBudWxsOyAvLyAxZCByb3ctbWFqb3IgYXJyYXksIGZvdXIgWzAtMjU1XSBpbnRlZ2VycyBwZXIgcGl4ZWwKICAgIHZhciBpbWdEYXRhTWlwTWFwcGVyID0gbnVsbDsKICAgIHZhciB3ID0gbnVsbDsgICAgICAgLy8gaW1hZ2Ugd2lkdGggaW4gcGl4ZWxzCiAgICB2YXIgaCA9IG51bGw7ICAgICAgIC8vIGltYWdlIGhlaWdodCBpbiBwaXhlbHMKCiAgICAvLyBXZSdsbCB1c2UgdGhpcyBhcnJheSB0byBzdG9yZSBjYWxsYmFja3MgdGhhdCBuZWVkIHRvIGJlIGludm9rZWQgb25jZQogICAgLy8gaW1nRGF0YSwgdywgYW5kIGggaGF2ZSBiZWVuIHJlc29sdmVkLgogICAgdmFyIGltZ0RhdGFDYWxsYmFja3MgPSBbXTsKCiAgICAvLyBDb25zdW1lcnMgb2YgaW1nRGF0YSwgdywgYW5kIGggY2FuIGNhbGwgdGhpcyB0byBiZSBub3RpZmllZCB3aGVuIGRhdGEKICAgIC8vIGlzIGF2YWlsYWJsZS4gVW5saWtlIG1vc3QgYXN5bmMvcHJvbWlzZS1iYXNlZCBBUElzLCB0aGUgY2FsbGJhY2sgd2lsbAogICAgLy8gYmUgaW52b2tlZCBpbW1lZGlhdGVseS9zeW5jaHJvbm91c2x5IGlmIHRoZSBkYXRhIGlzIGFscmVhZHkgYXZhaWxhYmxlLgogICAgZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGNhbGxiYWNrKSB7CiAgICAgIGlmIChpbWdEYXRhICE9IG51bGwpIHsKICAgICAgICBjYWxsYmFjayhpbWdEYXRhLCB3LCBoLCBpbWdEYXRhTWlwTWFwcGVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbWdEYXRhQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogICAgICB9CiAgICB9CgogICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpOwogICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAvLyBTYXZlIHNpemUKICAgICAgdyA9IGltZy53aWR0aDsKICAgICAgaCA9IGltZy5oZWlnaHQ7CgogICAgICAvLyBDcmVhdGUgYSBkdW1teSBjYW52YXMgdG8gZXh0cmFjdCB0aGUgaW1hZ2UgZGF0YQogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gdzsKICAgICAgaW1nRGF0YUNhbnZhcy5oZWlnaHQgPSBoOwogICAgICBpbWdEYXRhQ2FudmFzLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgaW1nRGF0YUN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTsKCiAgICAgIC8vIFNhdmUgdGhlIGltYWdlIGRhdGEuCiAgICAgIGltZ0RhdGEgPSBpbWdEYXRhQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKS5kYXRhOwogICAgICBpbWdEYXRhTWlwTWFwcGVyID0gbmV3IE1pcG1hcHBlcihpbWcpOwoKICAgICAgLy8gRG9uZSB3aXRoIHRoZSBjYW52YXMsIHJlbW92ZSBpdCBmcm9tIHRoZSBwYWdlIHNvIGl0IGNhbiBiZSBnYydkLgogICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZ0RhdGFDYW52YXMpOwoKICAgICAgLy8gQWxlcnQgYW55IGdldEltYWdlRGF0YSBjYWxsZXJzIHdobyBhcmUgd2FpdGluZy4KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbWdEYXRhQ2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaW1nRGF0YUNhbGxiYWNrc1tpXShpbWdEYXRhLCB3LCBoLCBpbWdEYXRhTWlwTWFwcGVyKTsKICAgICAgfQogICAgICBpbWdEYXRhQ2FsbGJhY2tzID0gW107CiAgICB9OwogICAgaW1nLnNyYyA9IHVyaTsKCiAgICB2YXIgY2FudmFzVGlsZXMgPSBMLnRpbGVMYXllci5jYW52YXMoewogICAgICBvcGFjaXR5OiBvcGFjaXR5LAogICAgICBhdHRyaWJ1dGlvbjogYXR0cmlidXRpb24sCiAgICAgIGRldGVjdFJldGluYTogdHJ1ZSwKICAgICAgYXN5bmM6IHRydWUKICAgIH0pOwoKICAgIGNhbnZhc1RpbGVzLmRyYXdUaWxlID0gZnVuY3Rpb24oY2FudmFzLCB0aWxlUG9pbnQsIHpvb20pIHsKICAgICAgZ2V0SW1hZ2VEYXRhKGZ1bmN0aW9uKGltZ0RhdGEsIHcsIGgsIG1pcG1hcHBlcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICAvLyBUaGUgQ29udGV4dDJEIHdlJ2xsIGJlaW5nIGRyYXdpbmcgb250by4gSXQncyBhbHdheXMgMjU2eDI1Ni4KICAgICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgICAgICAvLyBDb252ZXJ0IG91ciBpbWFnZSBkYXRhJ3MgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBsb2NhdGlvbnMgaW50bwogICAgICAgICAgLy8geC95IHRpbGUgY29vcmRpbmF0ZXMuIFRoaXMgaXMgZXNzZW50aWFsbHkgZG9pbmcgYSBzcGhlcmljYWwgbWVyY2F0b3IKICAgICAgICAgIC8vIHByb2plY3Rpb24sIHRoZW4gbXVsdGlwbHlpbmcgYnkgMl56b29tLgogICAgICAgICAgdmFyIHRvcExlZnQgPSBkZWdyZWUydGlsZShib3VuZHNbMF1bMF0sIGJvdW5kc1swXVsxXSwgem9vbSk7CiAgICAgICAgICB2YXIgYm90dG9tUmlnaHQgPSBkZWdyZWUydGlsZShib3VuZHNbMV1bMF0sIGJvdW5kc1sxXVsxXSwgem9vbSk7CiAgICAgICAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgaW1hZ2UgaW4geC95IHRpbGUgY29vcmRpbmF0ZXMuCiAgICAgICAgICB2YXIgZXh0ZW50ID0ge3g6IGJvdHRvbVJpZ2h0LnggLSB0b3BMZWZ0LngsIHk6IGJvdHRvbVJpZ2h0LnkgLSB0b3BMZWZ0Lnl9OwoKICAgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgdGlsZSBpcyB0b3RhbGx5IGRpc2pvaW50IGZyb20gaW1hZ2UuCiAgICAgICAgICBpZiAoIW92ZXJsYXAodGlsZVBvaW50LngsIHRpbGVQb2ludC54ICsgMSwgdG9wTGVmdC54LCBib3R0b21SaWdodC54KSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKCFvdmVybGFwKHRpbGVQb2ludC55LCB0aWxlUG9pbnQueSArIDEsIHRvcExlZnQueSwgYm90dG9tUmlnaHQueSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAvLyBUaGUgbGluZWFyIHJlc29sdXRpb24gb2YgdGhlIHRpbGUgd2UncmUgZHJhd2luZyBpcyBhbHdheXMgMjU2cHggcGVyIHRpbGUgdW5pdC4KICAgICAgICAgIC8vIElmIHRoZSBsaW5lYXIgcmVzb2x1dGlvbiAoaW4gZWl0aGVyIGRpcmVjdGlvbikgb2YgdGhlIGltYWdlIGlzIGxlc3MgdGhhbiAyNTZweAogICAgICAgICAgLy8gcGVyIHRpbGUgdW5pdCwgdGhlbiB1c2UgbmVhcmVzdCBuZWlnaGJvcjsgb3RoZXJ3aXNlLCB1c2UgdGhlIGNhbnZhcydzIGJ1aWx0LWluCiAgICAgICAgICAvLyBzY2FsaW5nLgogICAgICAgICAgdmFyIGltZ1JlcyA9IHsKICAgICAgICAgICAgeDogdyAvIGV4dGVudC54LAogICAgICAgICAgICB5OiBoIC8gZXh0ZW50LnkKICAgICAgICAgIH07CgogICAgICAgICAgLy8gV2UgY2FuIGRvIHRoZSBhY3R1YWwgZHJhd2luZyBpbiBvbmUgb2YgdGhyZWUgd2F5czoKICAgICAgICAgIC8vIC0gQ2FsbCBkcmF3SW1hZ2UoKS4gVGhpcyBpcyBlYXN5IGFuZCBmYXN0LCBhbmQgcmVzdWx0cyBpbiBzbW9vdGgKICAgICAgICAgIC8vICAgaW50ZXJwb2xhdGlvbiAoYmlsaW5lYXI/KS4gVGhpcyBpcyB3aGF0IHdlIHdhbnQgd2hlbiB3ZSBhcmUKICAgICAgICAgIC8vICAgcmVkdWNpbmcgdGhlIGltYWdlIGZyb20gaXRzIG5hdGl2ZSBzaXplLgogICAgICAgICAgLy8gLSBDYWxsIGRyYXdJbWFnZSgpIHdpdGggaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWZhbHNlLiBUaGlzIGlzIGVhc3kKICAgICAgICAgIC8vICAgYW5kIGZhc3QgYW5kIGdpdmVzIHVzIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiwgd2hpY2ggaXMgd2hhdAogICAgICAgICAgLy8gICB3ZSB3YW50IHdoZW4gZW5sYXJnaW5nIHRoZSBpbWFnZS4gSG93ZXZlciwgaXQncyB1bnN1cHBvcnRlZCBvbiBtYW55CiAgICAgICAgICAvLyAgIGJyb3dzZXJzIChpbmNsdWRpbmcgUXRXZWJraXQpLgogICAgICAgICAgLy8gLSBEbyBhIG1hbnVhbCBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24uIFRoaXMgaXMgd2hhdCB3ZSdsbCBmYWxsCiAgICAgICAgICAvLyAgIGJhY2sgdG8gd2hlbiBlbmxhcmdpbmcsIGFuZCBpbWFnZVNtb290aGluZ0VuYWJsZWQgaXNuJ3Qgc3VwcG9ydGVkLgogICAgICAgICAgLy8gICBJbiB0aGVvcnkgaXQncyBzbG93ZXIsIGJ1dCBzdGlsbCBwcmV0dHkgZmFzdCBvbiBteSBtYWNoaW5lLCBhbmQgdGhlCiAgICAgICAgICAvLyAgIHJlc3VsdHMgbG9vayB0aGUgc2FtZSBBRkFJQ1QuCgogICAgICAgICAgLy8gSXMgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIHN1cHBvcnRlZD8gSWYgc28sIHdlIGNhbiBsZXQgY2FudmFzIGRvCiAgICAgICAgICAvLyBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24gZm9yIHVzLgogICAgICAgICAgdmFyIHNtb290aGluZ1Byb3BlcnR5ID0gZ2V0Q2FudmFzU21vb3RoaW5nUHJvcGVydHkoY3R4KTsKCiAgICAgICAgICBpZiAoc21vb3RoaW5nUHJvcGVydHkgfHwgaW1nUmVzLnggPj0gMjU2ICYmIGltZ1Jlcy55ID49IDI1NikgewogICAgICAgICAgICAvLyBVc2UgYnVpbHQtaW4gc2NhbGluZwoKICAgICAgICAgICAgLy8gVHVybiBvZmYgYW50aS1hbGlhc2luZyBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgaWYgKHNtb290aGluZ1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgY3R4W3Ntb290aGluZ1Byb3BlcnR5XSA9IGltZ1Jlcy54ID49IDI1NiAmJiBpbWdSZXMueSA+PSAyNTY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIERvbid0IG5lY2Vzc2FyaWx5IGRyYXcgd2l0aCB0aGUgZnVsbC1zaXplIGltYWdlOyBpZiB3ZSdyZQogICAgICAgICAgICAvLyBkb3duc2NhbGluZywgdXNlIHRoZSBtaXBtYXBwZXIgdG8gZ2V0IGEgcHJlLWRvd25zY2FsZWQgaW1hZ2UKICAgICAgICAgICAgLy8gKHNlZSBjb21tZW50cyBvbiBNaXBtYXBwZXIgY2xhc3MgZm9yIHdoeSB0aGlzIG1hdHRlcnMpLgogICAgICAgICAgICBtaXBtYXBwZXIuZ2V0QnlTaXplKGV4dGVudC54KjI1NiwgZXh0ZW50LnkqMjU2LCBmdW5jdGlvbihtaXApIHsKICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGltYWdlIHdpbGwgZ28gb2ZmIHRoZSBlZGdlIG9mIHRoZSBjYW52YXMtLQogICAgICAgICAgICAgIC8vIHRoYXQncyBPSywgdGhlIGNhbnZhcyBzaG91bGQgY2xpcCBhcHByb3ByaWF0ZWx5LgogICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobWlwLAogICAgICAgICAgICAgICAgLy8gQ29udmVydCBhYnMgdGlsZSBjb29yZHMgdG8gcmVsIHRpbGUgY29vcmRzLCB0aGVuICoyNTYgdG8gY29udmVydAogICAgICAgICAgICAgICAgLy8gdG8gcmVsIHBpeGVsIGNvb3JkcwogICAgICAgICAgICAgICAgKHRvcExlZnQueCAtIHRpbGVQb2ludC54KSAqIDI1NiwKICAgICAgICAgICAgICAgICh0b3BMZWZ0LnkgLSB0aWxlUG9pbnQueSkgKiAyNTYsCiAgICAgICAgICAgICAgICAvLyBBbHdheXMgZHJhdyB0aGUgd2hvbGUgdGhpbmcgYW5kIGxldCBjYW52YXMgY2xpcDsgc28gd2UgY2FuIGp1c3QKICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBzaXplIGluIHRpbGUgY29vcmRzIHN0cmFpZ2h0IHRvIHBpeGVscwogICAgICAgICAgICAgICAgZXh0ZW50LnggKiAyNTYsCiAgICAgICAgICAgICAgICBleHRlbnQueSAqIDI1NgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFVzZSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uCgogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZSBpbWFnZSBwaXhlbCBjb29yZGluYXRlcyB0aGF0IGNvcnJlc3BvbmQgd2l0aAogICAgICAgICAgICAvLyB0aGUgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBvZiB0aGlzIHRpbGUuIChJZiB0aGUgc291cmNlIGltYWdlCiAgICAgICAgICAgIC8vIG9ubHkgcGFydGlhbGx5IG92ZXJsYXBzIHRoZSB0aWxlLCB3ZSB1c2UgbWF4L21pbiB0byBsaW1pdCB0aGUKICAgICAgICAgICAgLy8gc291cmNlU3RhcnQvRW5kIHRvIG9ubHkgcmVmbGVjdCB0aGUgb3ZlcmxhcHBpbmcgcG9ydGlvbi4pCiAgICAgICAgICAgIHZhciBzb3VyY2VTdGFydCA9IHsKICAgICAgICAgICAgICB4OiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aWxlUG9pbnQueCAtIHRvcExlZnQueCkgKiBpbWdSZXMueCkpLAogICAgICAgICAgICAgIHk6IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRpbGVQb2ludC55IC0gdG9wTGVmdC55KSAqIGltZ1Jlcy55KSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIHNvdXJjZUVuZCA9IHsKICAgICAgICAgICAgICB4OiBNYXRoLm1pbih3LCBNYXRoLmNlaWwoKHRpbGVQb2ludC54ICsgMSAtIHRvcExlZnQueCkgKiBpbWdSZXMueCkpLAogICAgICAgICAgICAgIHk6IE1hdGgubWluKGgsIE1hdGguY2VpbCgodGlsZVBvaW50LnkgKyAxIC0gdG9wTGVmdC55KSAqIGltZ1Jlcy55KSkKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIFRoZSBzaXplLCBpbiBkZXN0IHBpeGVscywgdGhhdCBlYWNoIHNvdXJjZSBwaXhlbCBzaG91bGQgb2NjdXB5LgogICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuIDEgKGUuZy4gaWYgeCBhbmQgeSByZXNvbHV0aW9uCiAgICAgICAgICAgIC8vIGFyZSB2ZXJ5IGRpZmZlcmVudCkuCiAgICAgICAgICAgIHZhciBwaXhlbFNpemUgPSB7CiAgICAgICAgICAgICAgeDogMjU2IC8gaW1nUmVzLngsCiAgICAgICAgICAgICAgeTogMjU2IC8gaW1nUmVzLnkKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIC8vIEZvciBlYWNoIHBpeGVsIGluIHRoZSBzb3VyY2UgaW1hZ2UgdGhhdCBvdmVybGFwcyB0aGUgdGlsZS4uLgogICAgICAgICAgICBmb3IgKHZhciByb3cgPSBzb3VyY2VTdGFydC55OyByb3cgPCBzb3VyY2VFbmQueTsgcm93KyspIHsKICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSBzb3VyY2VTdGFydC54OyBjb2wgPCBzb3VyY2VFbmQueDsgY29sKyspIHsKICAgICAgICAgICAgICAgIC8vIC4uLmV4dHJhY3QgdGhlIHBpeGVsIGRhdGEuLi4KICAgICAgICAgICAgICAgIHZhciBpID0gKChyb3cgKiB3KSArIGNvbCkgKiA0OwogICAgICAgICAgICAgICAgdmFyIHIgPSBpbWdEYXRhW2ldOwogICAgICAgICAgICAgICAgdmFyIGcgPSBpbWdEYXRhW2krMV07CiAgICAgICAgICAgICAgICB2YXIgYiA9IGltZ0RhdGFbaSsyXTsKICAgICAgICAgICAgICAgIHZhciBhID0gaW1nRGF0YVtpKzNdOwogICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKCIgKyBbcixnLGIsYS8yNTVdLmpvaW4oIiwiKSArICIpIjsKCiAgICAgICAgICAgICAgICAvLyAuLi5jYWxjdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmQgaW4gdGhlIGRlc3QgaW1hZ2UKICAgICAgICAgICAgICAgIC8vIHdoZXJlIGl0IHNob3VsZCBiZSBkcmF3bi4uLgogICAgICAgICAgICAgICAgdmFyIHBpeGVsUG9zID0gewogICAgICAgICAgICAgICAgICB4OiAoKChjb2wgLyBpbWdSZXMueCkgKyB0b3BMZWZ0LngpIC0gdGlsZVBvaW50LngpICogMjU2LAogICAgICAgICAgICAgICAgICB5OiAoKChyb3cgLyBpbWdSZXMueSkgKyB0b3BMZWZ0LnkpIC0gdGlsZVBvaW50LnkpICogMjU2CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIC4uLmFuZCBkcmF3IGEgcmVjdGFuZ2xlIHRoZXJlLgogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KAogICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHBpeGVsUG9zLngpLAogICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHBpeGVsUG9zLnkpLAogICAgICAgICAgICAgICAgICAvLyBMb29rcyBjcmF6eSwgYnV0IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgcm91bmRpbmcgZnJvbQogICAgICAgICAgICAgICAgICAvLyBjYXVzaW5nIG92ZXJsYXAgYmV0d2VlbiB0aGlzIHJlY3QgYW5kIGl0cyBuZWlnaGJvcnMuIFRoZQogICAgICAgICAgICAgICAgICAvLyBtaW51ZW5kIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV4dCBwaXhlbCwgd2hpbGUgdGhlCiAgICAgICAgICAgICAgICAgIC8vIHN1YnRyYWhlbmQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHBpeGVsICh0byB0dXJuIGFuCiAgICAgICAgICAgICAgICAgIC8vIGFic29sdXRlIGNvb3JkaW5hdGUgdG8gYSB3aWR0aC9oZWlnaHQpLiBZZXMsIEkgaGFkIHRvIGxvb2sKICAgICAgICAgICAgICAgICAgLy8gdXAgbWludWVuZCBhbmQgc3VidHJhaGVuZC4KICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy54ICsgcGl4ZWxTaXplLngpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy54KSwKICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy55ICsgcGl4ZWxTaXplLnkpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy55KSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGNhbnZhc1RpbGVzLnRpbGVEcmF3bihjYW52YXMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNhbnZhc1RpbGVzLCAiaW1hZ2UiLCBsYXllcklkLCBncm91cCk7CiAgfTsKCiAgbWV0aG9kcy5yZW1vdmVJbWFnZSA9IGZ1bmN0aW9uKGxheWVySWQpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJpbWFnZSIsIGxheWVySWQpOwogIH07CgogIG1ldGhvZHMuY2xlYXJJbWFnZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJpbWFnZSIpOwogIH07CgogIGZ1bmN0aW9uIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCkgewogICAgLy8gUHJldmVudCB1bndhbnRlZCBzY3JvbGwgY2FwdHVyaW5nLiBTaW1pbGFyIGluIHB1cnBvc2UgdG8KICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlmZkNsb3VkL0xlYWZsZXQuU2xlZXAgYnV0IHdpdGggYQogICAgLy8gZGlmZmVyZW50IHNldCBvZiBoZXVyaXN0aWNzLgoKICAgIC8vIFRoZSBiYXNpYyBpZGVhIGlzIHRoYXQgd2hlbiBhIG1vdXNld2hlZWwvRE9NTW91c2VTY3JvbGwKICAgIC8vIGV2ZW50IGlzIHNlZW4sIHdlIGRpc2FibGUgc2Nyb2xsIHdoZWVsIHpvb21pbmcgdW50aWwgdGhlCiAgICAvLyB1c2VyIG1vdmVzIHRoZWlyIG1vdXNlIGN1cnNvciBvciBjbGlja3Mgb24gdGhlIG1hcC4gVGhpcwogICAgLy8gaXMgc2xpZ2h0bHkgdHJpY2tpZXIgdGhhbiBqdXN0IGxpc3RlbmluZyBmb3IgbW91c2Vtb3ZlLAogICAgLy8gYmVjYXVzZSBtb3VzZW1vdmUgaXMgZmlyZWQgd2hlbiB0aGUgcGFnZSBpcyBzY3JvbGxlZCwKICAgIC8vIGV2ZW4gaWYgdGhlIHVzZXIgZGlkIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlIG1vdXNlLiBXZQogICAgLy8gaGFuZGxlIHRoaXMgYnkgZXhhbWluaW5nIHRoZSBtb3VzZW1vdmUgZXZlbnQncyBzY3JlZW5YCiAgICAvLyBhbmQgc2NyZWVuWSBwcm9wZXJ0aWVzOyBpZiB0aGV5IGNoYW5nZSwgd2Uga25vdyBpdCdzIGEKICAgIC8vICJ0cnVlIiBtb3ZlLgoKICAgIC8vIGxhc3RTY3JlZW4gY2FuIG5ldmVyIGJlIG51bGwsIGJ1dCBpdHMgeCBhbmQgeSBjYW4uCiAgICB2YXIgbGFzdFNjcmVlbiA9IHt4OiBudWxsLCB5OiBudWxsfTsKICAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZXdoZWVsIERPTU1vdXNlU2Nyb2xsIiwgIioiLCBmdW5jdGlvbihlKSB7CiAgICAgIC8vIERpc2FibGUgem9vbWluZyAodW50aWwgdGhlIG1vdXNlIG1vdmVzIG9yIGNsaWNrKQogICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmRpc2FibGUoKTsKICAgICAgLy8gQW55IG1vdXNlbW92ZSBldmVudHMgYXQgdGhpcyBzY3JlZW4gcG9zaXRpb24gd2lsbCBiZSBpZ25vcmVkLgogICAgICBsYXN0U2NyZWVuID0ge3g6IGUub3JpZ2luYWxFdmVudC5zY3JlZW5YLCB5OiBlLm9yaWdpbmFsRXZlbnQuc2NyZWVuWX07CiAgICB9KTsKICAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZW1vdmUiLCAiKiIsIGZ1bmN0aW9uKGUpIHsKICAgICAgLy8gRGlkIHRoZSBtb3VzZSByZWFsbHkgbW92ZT8KICAgICAgaWYgKGxhc3RTY3JlZW4ueCAhPT0gbnVsbCAmJiBlLnNjcmVlblggIT09IGxhc3RTY3JlZW4ueCB8fCBlLnNjcmVlblkgIT09IGxhc3RTY3JlZW4ueSkgewogICAgICAgIC8vIEl0IHJlYWxseSBtb3ZlZC4gRW5hYmxlIHpvb21pbmcuCiAgICAgICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsKICAgICAgICBsYXN0U2NyZWVuID0ge3g6IG51bGwsIHk6IG51bGx9OwogICAgICB9CiAgICB9KTsKICAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCAiLmxlYWZsZXQiLCBmdW5jdGlvbihlKSB7CiAgICAgIC8vIENsaWNraW5nIGFsd2F5cyBlbmFibGVzIHpvb21pbmcuCiAgICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7CiAgICAgIGxhc3RTY3JlZW4gPSB7eDogbnVsbCwgeTogbnVsbH07CiAgICB9KTsKICB9CgogIEhUTUxXaWRnZXRzLndpZGdldCh7CiAgICBuYW1lOiAibGVhZmxldCIsCiAgICB0eXBlOiAib3V0cHV0IiwKICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgIC8vIGhhcmQtY29kaW5nIGNlbnRlci96b29tIGhlcmUgZm9yIGEgbm9uLWVtcHR5IGluaXRpYWwgdmlldywgc2luY2UgdGhlcmUKICAgICAgLy8gaXMgbm8gd2F5IGZvciBodG1sd2lkZ2V0cyB0byBwYXNzIGluaXRpYWwgcGFyYW1zIHRvIGluaXRpYWxpemUoKQogICAgICB2YXIgbWFwID0gTC5tYXAoZWwsIHsKICAgICAgICBjZW50ZXI6IFs1MS41MDUsIC0wLjA5XSwKICAgICAgICB6b29tOiAxMwogICAgICB9KTsKCiAgICAgIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCk7CgogICAgICAvLyBTdG9yZSBzb21lIHN0YXRlIGluIHRoZSBtYXAgb2JqZWN0CiAgICAgIG1hcC5sZWFmbGV0ciA9IHsKICAgICAgICAvLyBIYXMgdGhlIG1hcCBldmVyIHJlbmRlcmVkIHN1Y2Nlc3NmdWxseT8KICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCiAgICAgICAgLy8gRGF0YSB0byBiZSByZW5kZXJlZCB3aGVuIHJlc2l6ZSBpcyBjYWxsZWQgd2l0aCBhcmVhICE9IDAKICAgICAgICBwZW5kaW5nUmVuZGVyRGF0YTogbnVsbAogICAgICB9OwoKICAgICAgaWYgKCFIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHJldHVybiBtYXA7CgogICAgICAvLyBDaGVjayBpZiB0aGUgbWFwIGlzIHJlbmRlcmVkIHN0YXRpY2FsbHkgKG5vIG91dHB1dCBiaW5kaW5nKQogICAgICBpZiAoIS9cYnNoaW55LWJvdW5kLW91dHB1dFxiLy50ZXN0KGVsLmNsYXNzTmFtZSkpIHJldHVybiBtYXA7CgogICAgICBtYXAuaWQgPSBlbC5pZDsKCiAgICAgIC8vIFN0b3JlIHRoZSBtYXAgb24gdGhlIGVsZW1lbnQgc28gd2UgY2FuIGZpbmQgaXQgbGF0ZXIgYnkgSUQKICAgICAgJChlbCkuZGF0YSgibGVhZmxldC1tYXAiLCBtYXApOwoKICAgICAgLy8gV2hlbiB0aGUgbWFwIGlzIGNsaWNrZWQsIHNlbmQgdGhlIGNvb3JkaW5hdGVzIGJhY2sgdG8gdGhlIGFwcAogICAgICBtYXAub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgJ19jbGljaycsIHsKICAgICAgICAgIGxhdDogZS5sYXRsbmcubGF0LAogICAgICAgICAgbG5nOiBlLmxhdGxuZy5sbmcsCiAgICAgICAgICAnLm5vbmNlJzogTWF0aC5yYW5kb20oKSAvLyBGb3JjZSByZWFjdGl2aXR5IGlmIGxhdC9sbmcgaGFzbid0IGNoYW5nZWQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICB2YXIgZ3JvdXBUaW1lcklkID0gbnVsbDsKCiAgICAgIG1hcAogICAgICAgIC5vbignbW92ZWVuZCcsIGZ1bmN0aW9uKGUpIHsgdXBkYXRlQm91bmRzKGUudGFyZ2V0KTsgfSkKICAgICAgICAub24oJ2xheWVyYWRkIGxheWVycmVtb3ZlJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgLy8gSWYgdGhlIGxheWVyIHRoYXQncyBjb21pbmcgb3IgZ29pbmcgaXMgYSBncm91cCB3ZSBjcmVhdGVkLCB0ZWxsCiAgICAgICAgICAvLyB0aGUgc2VydmVyLgogICAgICAgICAgaWYgKG1hcC5sYXllck1hbmFnZXIuZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAoZS5sYXllcikpIHsKICAgICAgICAgICAgLy8gQnV0IHRvIGF2b2lkIGNoYXR0aW5lc3MsIGNvYWxlc2NlIGV2ZW50cwogICAgICAgICAgICBpZiAoZ3JvdXBUaW1lcklkKSB7CiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGdyb3VwVGltZXJJZCk7CiAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBncm91cFRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZShtYXAuaWQgKyAnX2dyb3VwcycsCiAgICAgICAgICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyLmdldFZpc2libGVHcm91cHMoKSk7CiAgICAgICAgICAgIH0sIDEwMCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICByZXR1cm4gbWFwOwogICAgfSwKICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgZGF0YSwgbWFwKSB7CiAgICAgIC8vIExlYWZsZXQgZG9lcyBub3QgYmVoYXZlIHdlbGwgd2hlbiB5b3Ugc2V0IHVwIGEgYnVuY2ggb2YgbGF5ZXJzIHdoZW4KICAgICAgLy8gdGhlIG1hcCBpcyBub3QgdmlzaWJsZSAod2lkdGgvaGVpZ2h0ID09IDApLiBQb3B1cHMgZ2V0IG1pc2FsaWduZWQKICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlaXIgb3duaW5nIG1hcmtlcnMsIGFuZCB0aGUgZml0Qm91bmRzIGNhbGN1bGF0aW9ucwogICAgICAvLyBhcmUgb2ZmLiBUaGVyZWZvcmUgd2Ugd2FpdCB1bnRpbCB0aGUgbWFwIGlzIGFjdHVhbGx5IHNob3dpbmcgdG8KICAgICAgLy8gcmVuZGVyIHRoZSB2YWx1ZSAod2UgcmVseSBvbiB0aGUgcmVzaXplKCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZAogICAgICAvLyBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSkuCiAgICAgIC8vCiAgICAgIC8vIFRoZXJlIG1heSBiZSBhbiBpc3N1ZSB3aXRoIGxlYWZsZXRQcm94eSgpIGNhbGxzIGJlaW5nIG1hZGUgd2hpbGUKICAgICAgLy8gdGhlIG1hcCBpcyBub3QgYmVpbmcgdmlld2VkLS1ub3Qgc3VyZSB3aGF0IHRoZSByaWdodCBzb2x1dGlvbiBpcwogICAgICAvLyB0aGVyZS4KICAgICAgaWYgKGVsLm9mZnNldFdpZHRoID09PSAwIHx8IGVsLm9mZnNldEhlaWdodCA9PT0gMCkgewogICAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IGRhdGE7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IG51bGw7CgogICAgICAvLyBNZXJnZSBkYXRhIG9wdGlvbnMgaW50byBkZWZhdWx0cwogICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHsgem9vbVRvTGltaXRzOiAiYWx3YXlzIiB9LCBkYXRhLm9wdGlvbnMpOwoKICAgICAgaWYgKCFtYXAubGF5ZXJNYW5hZ2VyKSB7CiAgICAgICAgbWFwLmNvbnRyb2xzID0gbmV3IENvbnRyb2xTdG9yZShtYXApOwogICAgICAgIG1hcC5sYXllck1hbmFnZXIgPSBuZXcgTGF5ZXJNYW5hZ2VyKG1hcCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFwLmNvbnRyb2xzLmNsZWFyKCk7CiAgICAgICAgbWFwLmxheWVyTWFuYWdlci5jbGVhcigpOwogICAgICB9CgogICAgICB2YXIgZXhwbGljaXRWaWV3ID0gZmFsc2U7CiAgICAgIGlmIChkYXRhLnNldFZpZXcpIHsKICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgIG1hcC5zZXRWaWV3LmFwcGx5KG1hcCwgZGF0YS5zZXRWaWV3KTsKICAgICAgfQogICAgICBpZiAoZGF0YS5maXRCb3VuZHMpIHsKICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgIG1ldGhvZHMuZml0Qm91bmRzLmFwcGx5KG1hcCwgZGF0YS5maXRCb3VuZHMpOwogICAgICB9CgogICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHpvb21Ub0xpbWl0cyBvcHRpb24gc2F5cyB0aGF0IHRoZSBtYXAgc2hvdWxkIGJlCiAgICAgIC8vIHpvb21lZCB0byBtYXAgZWxlbWVudHMuCiAgICAgIGZ1bmN0aW9uIG5lZWRzWm9vbSgpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy56b29tVG9MaW1pdHMgPT09ICJhbHdheXMiIHx8CiAgICAgICAgICAgICAgIChvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImZpcnN0IiAmJiAhbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkKTsKICAgICAgfQoKICAgICAgaWYgKCFleHBsaWNpdFZpZXcgJiYgbmVlZHNab29tKCkpIHsKICAgICAgICBpZiAoZGF0YS5saW1pdHMpIHsKICAgICAgICAgIC8vIFVzZSB0aGUgbmF0dXJhbCBsaW1pdHMgb2Ygd2hhdCdzIGJlaW5nIGRyYXduIG9uIHRoZSBtYXAKICAgICAgICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBib3VuZGluZyBib3ggaXMgMCwgbGVhZmxldCBnZXRzIGFsbCB3ZWlyZAogICAgICAgICAgdmFyIHBhZCA9IDAuMDA2OwogICAgICAgICAgaWYgKGRhdGEubGltaXRzLmxhdFswXSA9PT0gZGF0YS5saW1pdHMubGF0WzFdKSB7CiAgICAgICAgICAgIGRhdGEubGltaXRzLmxhdFswXSA9IGRhdGEubGltaXRzLmxhdFswXSAtIHBhZDsKICAgICAgICAgICAgZGF0YS5saW1pdHMubGF0WzFdID0gZGF0YS5saW1pdHMubGF0WzFdICsgcGFkOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGRhdGEubGltaXRzLmxuZ1swXSA9PT0gZGF0YS5saW1pdHMubG5nWzFdKSB7CiAgICAgICAgICAgIGRhdGEubGltaXRzLmxuZ1swXSA9IGRhdGEubGltaXRzLmxuZ1swXSAtIHBhZDsKICAgICAgICAgICAgZGF0YS5saW1pdHMubG5nWzFdID0gZGF0YS5saW1pdHMubG5nWzFdICsgcGFkOwogICAgICAgICAgfQogICAgICAgICAgbWFwLmZpdEJvdW5kcyhbCiAgICAgICAgICAgIFsgZGF0YS5saW1pdHMubGF0WzBdLCBkYXRhLmxpbWl0cy5sbmdbMF0gXSwKICAgICAgICAgICAgWyBkYXRhLmxpbWl0cy5sYXRbMV0sIGRhdGEubGltaXRzLmxuZ1sxXSBdCiAgICAgICAgICBdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwLmZpdFdvcmxkKCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5jYWxscyAmJiBpIDwgZGF0YS5jYWxscy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjYWxsID0gZGF0YS5jYWxsc1tpXTsKICAgICAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pCiAgICAgICAgICBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7CiAgICAgICAgZWxzZQogICAgICAgICAgY29uc29sZS5sb2coIlVua25vd24gbWV0aG9kICIgKyBjYWxsLm1ldGhvZCk7CiAgICAgIH0KCiAgICAgIG1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZCA9IHRydWU7CgogICAgICBpZiAoIUhUTUxXaWRnZXRzLnNoaW55TW9kZSkgcmV0dXJuOwoKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgdXBkYXRlQm91bmRzKG1hcCk7IH0sIDEpOwogICAgfSwKICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIG1hcCkgewogICAgICBtYXAuaW52YWxpZGF0ZVNpemUoKTsKICAgICAgaWYgKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSkgewogICAgICAgIHRoaXMucmVuZGVyVmFsdWUoZWwsIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSwgbWFwKTsKICAgICAgfQogICAgfQogIH0pOwoKICBpZiAoIUhUTUxXaWRnZXRzLnNoaW55TW9kZSkgcmV0dXJuOwoKICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcignbGVhZmxldC1jYWxscycsIGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgbWFwID0gZWwgPyAkKGVsKS5kYXRhKCdsZWFmbGV0LW1hcCcpIDogbnVsbDsKICAgIGlmICghbWFwKSB7CiAgICAgIGNvbnNvbGUubG9nKCJDb3VsZG4ndCBmaW5kIG1hcCB3aXRoIGlkICIgKyBpZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuY2FsbHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNhbGwgPSBkYXRhLmNhbGxzW2ldOwogICAgICBpZiAoY2FsbC5kZXBlbmRlbmNpZXMpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoY2FsbC5kZXBlbmRlbmNpZXMpOwogICAgICB9CiAgICAgIGlmIChtZXRob2RzW2NhbGwubWV0aG9kXSkKICAgICAgICBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7CiAgICAgIGVsc2UKICAgICAgICBjb25zb2xlLmxvZygiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgIH0KICB9KTsKCn0pKCk7CgoKCi8vIEluIFJNYXJrZG93bidzIHNlbGYtY29udGFpbmVkIG1vZGUsIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gY2FycnkgYXJvdW5kIHRoZQovLyBpbWFnZXMgdGhhdCBMZWFmbGV0IG5lZWRzIGJ1dCBkb2Vzbid0IGxvYWQgaW50byB0aGUgcGFnZS4gSW5zdGVhZCwgd2UnbGwgc2V0Ci8vIGRhdGEgVVJJcyBmb3IgdGhlIGRlZmF1bHQgbWFya2VyLCBhbmQgbGV0IGFueSBvdGhlcnMgYmUgbG9hZGVkIHZpYSBDRE4uCmlmICh0eXBlb2YoTC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoKSA9PT0gInVuZGVmaW5lZCIpIHsKICBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGggPSAiaHR0cDovL2Nkbi5sZWFmbGV0anMuY29tL2xlYWZsZXQtMC43LjMvaW1hZ2VzIjsKCiAgaWYgKEwuQnJvd3Nlci5yZXRpbmEpIHsKICAgIEwuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zLmljb25VcmwgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUJTQ0FZQUFBQVd5NGZyQUFBUGlFbEVRVlI0MnQxYkNWQ1U1eGttYmFidFpKSk9PK2wwbWhnVDB5UWUwV1haZ3oyNTcwTkI4STZKNlV6YVRCb09SUkZFcnVWR0RoV1VQUkFRUkZGUkVEblZ4Q3RFQlJiMjREQk5FM1dhYWF0cGttbHVvNG0rZmQ5djk5OW9sR1ZCRHUzT1BMaisvL3MrNy9XOTMvZjkvLzYvRXdBNC9UOWczQWxGT1VlZVVHUjJ1TXF6T3lKazJSMngwcXlPQW1ubWtTM1NyQ1ByWkpsSGxzcXpqeXBjczQ5T1gxSmYvL1A3S2hEODg1QTB1MTBteTJvdlFzY3Z5Ykk2d0VGOGl2STdwRm50QVY2cWt3OVBXU0JLMWJFblpSbHRtMldaN1I4aDRGYkkwVkczM0dQZ1hYZ0NBcmErQTRFSW44S1Q0SkgvRmlnb2lKL0lJejZUWmJWVktMTGFuNXUwUUVTcWxrY2tXVzNwMHN5MmJ4REFnWndPMTNURHl0b0IrTlBlOSt6aWxkMkRFRkd1QjcvTnB6RG9kcmlGNTVvMG83WElSWFhvTnhNYWlDU2o5VlUwOUM4RUVOeHlqMEM0dGh0ZXJoMkVWK3ZldXdPcjZzN0R5M3Nzb085M2szbGx6eEJFNlBUZ2tYY01PRjdFSjlLTXRxalI5SkZEUW5OVjliK1FxbHFxRUVDUVo3VEJndTFuWWRYdUlYZ1ZuZVN3WXRjZ1JGYjFRMWlGR1VMTHpSQ3NNOTBHT3JaZ2h4a2lLdnRoZWMwZ3JMcEZseEN1NmNLaDF3NmNIVVNiY3RQaHg4WWxFRWx1NCtOU1ZmTnBCQkFDdHB5R2xic0dtQk9FbFJoTUJEb2ZnazRHb2JPalFYQzVDUlppVUMvVkR0bjRxTHJCSlozQTJjTmcrbkU0UDMxUGdTREJiSW1xNVVOSmVqTVFGcWk3Y0NpY1ozaVpCVEFBUVZvVEJJNERLS0NWR0JESEg2bnJCUmxXeFdyN3NsalZJaGxUSURMVm9Sa1MxZUgvU05JUGd6eXpGUlpWOU5uRysrTHFRY3lvR1FMUWdmRkVJRllwY3VlQXpjNlNTaU1PdFRZZ0g5Q1hyK1dwVGJ4UkJlS2xxbjlVa3Raa1JvQUNaNVBsTzgxWWdmTU00Ulg5RUtBeFRTakNkdlRqRUxQWVcxN2REOHJzZGlCZkVCY2xTWTJQT3hRSUhubElrbnJvRUFKazZVMndwTUxJU0YvYU5RU2hXQVYvdFdsU0VJSzJWcUJOc3IyMDBnUnlHbUxva3lTMThjVGRGdEE3QW5GTmJjeEFBQ0dNclF0RExBanFCVCsxY1ZKQk5zazIrYkJRMXdPY1g1SzB4czEyQThHeXpYUk5hZmdlQVlGYjNtRWtyQkk0SS9tV0dVZU5RSTFseXAyUG9POWo0YURLY0g0RWJlMEU4ZzN4Z3l5bGNjNndnYmltTmpTU29GdFdLMXNUcUxSaDJCTStTT2dJZkRHTEpMOElHM1paalVYL1ZpeXZHWUxGT3dkWm4vbGpZSTd5enNlZTRUamNzVi9JUjNGcVErdGRBeEVuTlNqRnlRZUJFSzdwZ1JWb2RFblZJUGhzTnpxRVlLMFpsdUZzUm5xM1lqSDIyS0p5QTZ6NHlUbVNwWjV6bEg4UlR2V2t0MUNyQjg1UFlVcWp6eDJCdUc2c1B5ZmVlQUE4c2p0d3BoaGlDRlNid1h1YjBTN0lTUGlPQVp2TzRoMDQ4eFNmQk0rY0RwRGllQ1pPZ2dTejZKSGRCdjVGSjNDTjZMUEpSMVFNZ085MjA0aDJhQUxnZER4empscDRrdzhZYUhLeUJTSkpQaWdXYjZ3SFFpUm1ieGtLTDBRRFhraGdEOTRZeEdLc0dza1RRa3ZmeFZubElIQmNCTmZrZWd6aXdCM0hBbkhEdUd5blJYY3AvdXRYWmhyUkhpV001Q1BMamJkd0hWRFlBaEZ0M0o4clR0b1BicGt0U0RyRTRJTlo4aXcxMmtVWUVwUHM0a296ZU9XMEEzRVFJb3ZiWWNmeElUajc5OHZ3eGJmWDRPcjFIOEI0NlJPbzdmd2J2S1k5YnBOenkyaG1pU09PeU1yQkVlMlJUNXgvN3RqSHhDRksybC80WXlCSis5NUhRQUJtaWJLekVKdlJzOVJnRjRGcUU1TWxlR1MzQXVtTE4rNkQ0bFlqZkllT0QvZTVlUk9nN3N6N29FZzd3SFJrNlkzWWkvMk1Kd1Q3YkNTNzVCdkpCdUdzU3ZxSUQxZ2dhSHllYUFNZVFFUmd5YWpCZzNCRzhTZ3hEQXN2SkZ4VU9jQmtnN2QwTWwzWGpmdWhDeXZnNk9maXgxK0FsNnFCNmZwdWVvdHhzY2tGaDVBOTIrUWJ5ZEh3NHZ5bUdKeEVHK3JXaVJMM2dvSldjU3d2d2JQRUNPNWJEY01pUkdObWNoUzRhMUk5a1A2MkRoT005dFBhZDRucEVoYVVkVFBPc1BKK3U3YkpOODVQcGFxSjZZb1Q2eEtjUklsMXBRand4SXVreFhoeUlZNTdOMVN3aDdEeUFTYnJtMzhNU0hkUlVTdGMrLzRHak9VVFYzMmFjYmhsTmpOTzZwV1I3RlBUazZ4WDNsR21LMHlzMHpyaG4wWmh3aDd3SzNpYm5WeWc2d2UzTFFhN1dGUXh5R1NwaXFSYmUvbzhqUFhUZStFSzR4RGpFQ0hPeGRZUlljOCsrVWh5ZmdYSG1hNXcvWjVtSitINjNUM0NoTjNZNk8vZ3VNY3hqOE5HaWNMRGdZeVEzQ0tjbnNVYk1CdW9hN2o0OFpnRCtlcnFkY3pxYnNZVHB1bGozTFN1MlBPQmZDUTU4cG4wRUgxT3dvVGFmd3ZYMStKVjJWbUl4RXdIbEpsQnNka3dMSHkybVpqY2dqSTlrSjRZbmJoNi9YdTRsMDlZZmhQakNzU0pnN2hwSWJibmcvOTJNNU1qbjBrUGNkbEpHRi83SlFKQ1Nyc2dBc2VlSHpvcUwrNGJGblNlNUVKS3pnSHBlYVRzZzN2OXJDcnRZRnoraFNjWmR6QUdZczhIWDg0SDlKbjBLQVluUWZ5dUlRVDRZNW1vMGFraU1oUWVEaDQ0dEVndVhHY0UwaVA4NDVNdnh4ekVqUnMzUVo1VXgzaEN0blV4YnFxNlBSLzhjUmRBY3VTejFZZnpHRWhObTJCZERmamt2dzBMY1RZS29rQ0srb2FGQW9sSWppREZCWWwwMi9vdWpEbVFDMWMrWnh6QytCb0lwMnQzNUhYSFByRG5BL2xJY3VRejZTS09PQW5XVnFzUmJIc2NqaWRETmYwZ1JXRjdDTlgyTTFsM1ZUT1FibXBkNTVnRHFUMDF4RGhrbUJUaUpNaEdzQitpc2RyUGJHZTZ3clUxNVJqSXprUUV5SEIzR3FZYllDQWlTZUh3Q01CbUk3bUFZaXd0NmdyWDdRVDloNWRISGNRL1Avc0tsRW03R1lkMzdsSEdHYUx1dDJ0YmlyRDVpVDZUcmlDdUtzVkpzTHJDd3lXdWloMllqL3VuTUMyVkZsZnNncjVob2R4c1pISUVaVm9Ua1A3ODdBUHc3VFhIWnkvYWMvMjVySjNwU3BQMjR0UnJabnllVzAxMmJidFpiUzlBZWZLWitiNm1NdGpKUzZWNkdQL3pPUjN3Sytwa1FuN2J6SGJKQ0NSRHNxRmxCcHorZGpIQ1Y3YTJ3TVVyL3gweGlNKyt1Z3BycTQ1Ym5GaGJoZE5vRitNS0xPdDMyQzc1U3ZxSWI3eFVPMy9GZHIvOHVNcURMbXNxd1UzVmlwSDJRekEyazNoVHIxMUlDbnFaSE1uN0YrSENGSWZaUVE1SmZEVlV2VzFtenY3MDgvVjMxNkZWL3dGNEplOWhzZ1N2M0dPTVl6NzFKZzZia2V6UzBDTjVOMVdMaFNPdXNzVzJqUmVzcm56TlpYVUZtNVBuVzBubDJDY2lWTFFIZWJIQkpoOVUwZzFTM0dZUUQ0ZVFqSDJRV0gwQzB1dHcxNURYQUVJeWJEMG54b1VzWVBNWm16NE41OUhZRStLMFN6eUMyTW8zYklIdzR6VFQrS3QzM0VTQVgvRlpDTVdvdlV0TUlNenZIUkZLSkE5RytWQUd2SjdJUHNLR0MzSGREWUk0cW53emhKUVptUTVsMkFPRGNNU1diNm1KNmZnV24rSDRic3hiV3pYOXRtdDJsOVhsN2Z6WWNwd0pHaGw1TUk1WEVTb0w4a2FHS0I5WFd3dzh4T29ZSVhCckQzaHZPZ25LOUJiRVlkeXBIc2N0U0JjR1lMYkorRk12YnVwejJBYW5KMDF1QVBMVkphYjg4QjAzSDF4aWRLSDhXQjBUQ0NxMUtORU00WWdSRG03RlJseXMrbThMNkc2Z0pMbVBrcHVxeGhKVTBzdDhKRjhGTWVWK2R3VGlwRkw5ekRsR2V3bUIxd1lkekpoL3FSbGNjbnRIRGNxZXZCQ3Y2TkJaM3hJeitDR1A1eFlUS0lvTUlNWnpvK1VUSUFLM1dSS2dVTFVCK2VnY3JUcy83QTA2WHBRMjBUbGFpK080bW0wREtMdVNBZ1B3a1dncUljT2trQytCT0JSZFZsY0MrY2lMMGtVTkc0am9kZDN2bktNMTN5SEFLLzhVQkc2blRCckJPVWMvcGZEQlJaSjg4Y2c5RHVRYkwxcnp4ZHczeXg2MWV4UGJPVWF6aTRSZDhWcVlNaEJJd3l1bkY1eXo5Vk1DVVY2dnhRK0VDSmNIOHMwNVNsTXk0dDE0NXhpMWpBa2pmSXU3R0lFU3h6WVBTYWNDMUdma2czZmhHYkQ2ZGRNbFZ2dUNRei8wb0hBZktjbFNtaUFBSzBKTjc1emRDL095OUpNS2FuS3lUeEJ2T0dBSkpFYmQ0ZkF2VnJ4bzlVdWt4TWZad2J1NGh3V2lLRExDWENTZlROQVVUYmE5Q3M1eDFTRDRPQndJbTRxak5RT2tLRTF1QkgrYVFrc3NWWm1icVo4VUNMQXZ5UzVCbkxEZjJodmFFNlArTVpRZnBZbmdzdUJkMkExK1c3RXFCVVo0TVVNL0tYQXZNakdiSHZtMjNnQ1hhSTF5VEQ5UG83S2V6V0JKQjhFWHAwQUNEMHMrSjZOblFrR3pKR2RQbEZESEJkSSs1dC9aK2RHYVFDNGJIcHZPZ2crdXpuSmNJR2VyZWlZVXlrSWpzK1dXMjJtckJpOVdMYnFuSng5d2x1Z2tJbEhpZnZCR2NnTE5LTFBRNEVTQStwQ3pJNGpmd3kyQWpmZjhDQWR1V3p5NHJMam5uV0VHcUZkbXBmZE1DS2dhWkVPWmM1cXJ4ZzNuV00yOGNYbW9oaGV0UGNxcXNuNHZlRzAyTWN6RG1XVm1Xcys0d2ptcjE4WXZXRmZMQlZJM2JrOEh1YnhaNXNwVlJaSFR5UXpKc1Nvdm9QSHhoQUtyUWR5S3JGTmNFRC93bzhwbmp1dnpXcmdIYXlKeUlZNWJ6MklUdzF5Y0pwOVA3UjRYOExEQ0hLL0wybDBzRUg2MHRtcmNIenpqUmV0NHRNOWhWY2sreFF6S054bkdMUkRxTytLVVpaN2dxbkhkWlkxbXhvUThRVWZqbFl3STF0YUNCeTVZQktyS2N5bmQ5d1RxTnd1ZkVmaHJxcTE3S28xNndoNEZwUEZLNDVadEtETk9nbnNoWmpEZkFIOU03cjRueVBPTmpFdWEvaFpYamF2OE56VFRKdlRoVEY2VXBwSnRGK0pxd0EyTkUxNVU2ZUZaZEdnc21KdlJ5emlVZUJYSVg3UFQyaHVhelJQK2xLa2dhdnN6ZU0xOGpXMG9WY2ZCcllDcVlvUm5OM2FQR2x3MWlNTTE3YWkxR3Rxdm5kL1EvSDVTbnZ2RjdmMTJsamtjejBwc1VtV0JwU296MExuUmdLcEJ1Z3E2TDhDdXhTa1FkZTZrUGNBc1dxTjdBbzEreXphVWFjZEFzY2tJMGp3RFBKUFU1VEJtYk94aS9VVzY0cFFPcmpjKzUvMVYvZHRKZlJJYnJ3MEtXRlZXVitIdzZHTkRaRTZhSHA3ZTBPVVE1cVRybVk0OHJ3LzRzUldXM29qU3BrMzZJK1d6bzdZLzdoeWwrWkp0WFZJN1dKKzQ1aHJnYWN6MjlBMzJRVElTckNEcGlKTGJ1V3A4T2l1aDhqR1lpb2Y4ZVRIcURFdFZLa0NHbVpWWnF6STlzY3N1U0laa1pYVGZLbllIdDhOTm1MSzNGYVF4cGI5R0p6NWpWY0hNY2xXaHJEK1ZlSGZRc0pMa1dxb2hUR3JscW5GWjlMcnVrU2w5N1lJWHBVNWtWY0hNU3ZES1RwcG5oTm1ZOFdrSlhYY0ZuU01aU1k2ZTNjTzFydUt4VS83K0NHVVNuYm5DdGk0YldqSGJPQXZsR09BcGRQcko5YmVEanRFNWtoRnNhT2FxOGRIek1hVy92Qy9lNktHTVdtNGZsWU1rdTRjTm5WbXBQZWo4dWR0QTFhQnpybGw0N1JHanMvYUcrdlg3NXRVa3lpaGwxbEtWWm5ERnJJdXkrMkFhT3Y5RXZBWDBuWTdST1plRUpxNGFGK2czelB2cUhTdGVqT1l2bHZHdUExRm1OeHRDTTFQMThBY01nakFMdjlNeFlXYVg5V2NCa3RXdXV1OWVGcVBNNG1idkF6YkVFZzVoOXRIcExJT3RQK2c3SGVNbk5ITFZlRy9Ka3ZGN1lXeGMzM2pEcXF5MFpob0VLb3Z6TTFQMERQU2RqdEZ2RzVaVlhMUDB2bjE5ejNLclZUdklIRjNmWUhIZUN2cnVITi9BYmROTjNQTzY5KzE3aUxnempyUnV4OEVsL1N3SU1nME05UDNIRzlIcXNQditoVXJySlhFdmN6aitBQWJSeCtBY1g4OEYwdjFBdkJuS0FubFRHOFJsbjUvNkx1TEhXNS96b3JUK0Qwd2cxcXE4eTV4ZnU4OENTeUNuSDVoM2RXL1pHWHZlOHVPTVpSV1Awbm84Y0lGWTcrWWZzd1VSclQzNlFMMDlmZnNNcHBIWWVnVy9QN0NCV0h2bE1PR0JlNS85anRkalk3Ujh3a1RiK1I5bWVaQTZuMm9KV0FBQUFBQkpSVTVFcmtKZ2dnPT0iOwogIH0gZWxzZSB7CiAgICBMLkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9ucy5pY29uVXJsID0gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmtBQUFBcENBWUFBQURBazRMT0FBQUdta2xFUVZSWXc3VlhlVXlUWnhqdk5uZkVMRnV5SXpPYWJlcm1NWkVlUUMvT2Nsa080OUNwT0hYT0xKbC9DQVVSdVliUWkzS0xnRWhicmhaMWFEd21hb0dxS0lJNm9kQVRtSC9zY0RGYmRDN0x2RnFPQ2MrZTk1czJWRzUwWC9MTG0vZjQvWjduZVkvbmUxOGFBTkNtQXI1RS94WmYxdURPa1RjR2NXUjZobDkyNDd0VDVVN1k2U052V3NLVDYzUDU4cWJmZUxKRzhNNXFjZ1RrbnJ2dnJkRGJzVDdNbCt0djgyWDZ2VnhKRTMzYVJtZ1N5WXRjV1ZNcVg5N1l2Mkp2VzM5VWhSRTJIdXlCTCt0K2dLMTExNmx5MDZFZVdGTmxBbUh4bFFFME9NaVY2bVFDU2N1c0tSbGhTM1FMZVZKZGwxKzIzaDVkWTRGTkIzdGhyYllib3FwdEVGbHBoVEMxaFNwSm5iUnZ4UDROV2dzRTVKeXo4NlFOTmkvNXFTVVRHdUZrMWd1NTR0Tjl3dUsyd2MzbytXYzEzUkNtc29Cd0VxekdjWnN4c3ZDU3kvOXdKS2Y3VVdmMW1FWThKV2Zld2M2N1VVb0RiRGpRQytGcUs0UXFMVk1HR1I5ZDJ3dXJLenFCazNucUlULzl6THhSUmpnWjlicVFndWIrRGRvZUNDMDNROGorMFFoRmhCSFIvZVAzVS96Q2xuN1V1K2hpaEoxK2JCTmZmTEl2bWt5UDBncEJaV1lYaEt1c3NLNm1CejVIVDZNMU5xcGNwK21CQ1BYb3NZUWZyZWtHdnJqZXdkNTkvR3ZLQ0U3VGJLLzA0L1pWNVFaWVZXbUR3SDFtRjN4YTJRM3JhM0RCQzV2QlQxb1A3UFRqNEMwK0NjTDhjN0MyQ3RlanFodUNudUlRSGFLSHp2Y1JmWnBueWxGZlhzWUp4M3BOTHdoS3pSQXdBaEVxRzBTcHVzQkhmQUtreHczdzQ2MjdNUGhvQ0g3OTh6N3MwWm5CSi9NRUpiWlNiWFBoRVIyaWg3cDJvay96U2oyY0VKRGQ0Q0FlKzVXWW5CQ2dSMnVydXlFdzZ6Um9XNi9EV0ovT2VBUDhwZC9CR3R6T1pLcEc4b2tlMFNYNkdNbVJrNkdGbHlBYzU5SzMyT1RFaW5JTFJKUmNoYWg4SFF3TkQ4TjQzNVo5WjBGWTFFcXR4VWcrMFNPNlJKL21tWHo0VnVTK0RweFhDM2dYbVp3SUw3ZEJTSDR6S0U1MHdFU2Y4cXdWZ3JQMUVJbFRPNUpQOUlndTBhZXhkaDI4RjFsbUFFR0pHZmg3akU2RWx5TTVSdy9GRGNZSmpXaGJlaUJZb1lOSXBjMkZUL1NJTGl2cDBGMWlwRFdrNEJJRW8yVnVvZEVKVWlmaGJpbHRuTkJJWFBVRkNNcHRodEF5cXdzL0JQbEVGL1ZiYUl4RXJkeFBwaHNVN3JjQ3A4RG9oQytHdkJJUEpTL3RXMmp0dlRtbUFldU5POEJOT1lRZUc4Ry8yT3pDSjNxK3NvWUI1aTZOaE1hS3IxN0ZTYWw3R0lIaGV1VjN1U0NZOHFZVnVFbTFjT3pxZFdyN2t1L1IwQkRvVFQrRFQrb2hDTTYvQ0N2S0xLTzRSSStkWFBlQXVhTXFrc2FLclo3TDNGRTVGSUZia0ljZWVPWjJPY0hPNndJaFRrTm8wZmZnalJHeEVxb2dYSFlVUEhmV0FDL2xBRHB3R2NMUlkzYWVLNC9vUkdDS1ljWlhQVm9lWC9rZWxWWVk4ZFVHZjhWNUVCUmJnSlhUNVFJUGhQOWVQSmk0MjhKS09pRVloWVhGQnFvdTJHdWgrcC9tRUIxL1JmTXc2clk3Y3hjalRybmVJMUZyRHl1elVTUm05bWl3RUp4OEUvZ1VtcWx5dkhHa25laXdFclIyMUYzdE5PSzVUZjB5WGFUK083RGdDdkFMVFVCWGRNNFloQy9JYXdQVSsyUGR1cU12dWFSNmVveFN3VWs3NWdncXNZSjdWaWNzbndHSWtaQlNYS09Vd3c3M1dHWHlxUCtKMi9iOWMrZ2kxWUFnL3hwd2NrM2dKdXVjTnJoNUp2RFB2UXIwV0ZYZjBwaXl0OGY4L1dJMGhWNHBSeHhrUVpkSkRmREpOT0FtTTBBZzhqeVQ2aHowV0dYV3VQOTRZaDJqY2ZqbVhBR3ZIQ01zbFJpbURIWXVIdURzeTJRdEh1SWF2em5oYllVUnE1UjU3S3B6QkJSWktQSmk4ZVFnNDhoNGo4U0Rkb3dpZmRJckVWZFUrZ2JPNlFOdlJSdDRaQnRoVWFaaFVuamxZT2JOYWdWM2tlb2VydTNyVTdyY3VjZXFVMW1KQnh5K0JXWllsTkVCSCswZUg0dlJpQitPWXliVTJobmJsWWxUdmtIaW5NNG01NFlueFN5YVpZU0Y2UjNqd2dQN3VkS0xHSVg2ci9sYk5hOU42eTVNRnlualdEdHJIZDc1WnZUWUFQTy82UmdGMGs3Nm1RbGEzRkdxN2RPK2NIOHNLbjBWbzduRGxsd0FocXdMUGt4ckh3V21ISk9vK0FLSjRyYWI1T2dyTTdyVnU4ZVdiMlB1MERoNGVEZ1hvT2Z2cDdZN1FlcWtuUm12Y1RCRXlxOW0vSFFRU0NTejZMSHEzejB5enNOeVNSZk1TMjUzd2wyS3lSRGJjWlBjZkpLalptU0VPamN4eWkrWThkVU90c0lFSDZSMndOeWtkcXJrWUowUlY5MkgwVzU4cGtmUWs3Y0tldnNMSzEwUHk4U2RNR2ZYTlhBVFkrcFBieUpSL0VUNm45bklmenROdFpZUlY5WG5pUXU5SUEydk9WZ3k0aXI3R0NMVm1tZCt6amtIMGVBRjlQbzZLNjFwbUNYSHhVNXJITVlkMWZ0YzNvd2p3UlNWUnpMakt2cVpFdHk2Y1JVRDdqR3FpT2R1NUhHNk1kSGpOY05ZR3FmRG01WVJ6TEJCQ0NEbC8yYms4YThnZGJxY2Z3RUN1NjJGZy9IcmdnQUFBQUJKUlU1RXJrSmdnZz09IjsKICB9Cn0K"></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uICgpIHsKCSd1c2Ugc3RyaWN0JzsKCglMLlRpbGVMYXllci5Qcm92aWRlciA9IEwuVGlsZUxheWVyLmV4dGVuZCh7CgkJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGFyZywgb3B0aW9ucykgewoJCQl2YXIgcHJvdmlkZXJzID0gTC5UaWxlTGF5ZXIuUHJvdmlkZXIucHJvdmlkZXJzOwoKCQkJdmFyIHBhcnRzID0gYXJnLnNwbGl0KCcuJyk7CgoJCQl2YXIgcHJvdmlkZXJOYW1lID0gcGFydHNbMF07CgkJCXZhciB2YXJpYW50TmFtZSA9IHBhcnRzWzFdOwoKCQkJaWYgKCFwcm92aWRlcnNbcHJvdmlkZXJOYW1lXSkgewoJCQkJdGhyb3cgJ05vIHN1Y2ggcHJvdmlkZXIgKCcgKyBwcm92aWRlck5hbWUgKyAnKSc7CgkJCX0KCgkJCXZhciBwcm92aWRlciA9IHsKCQkJCXVybDogcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0udXJsLAoJCQkJb3B0aW9uczogcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0ub3B0aW9ucwoJCQl9OwoKCQkJLy8gb3ZlcndyaXRlIHZhbHVlcyBpbiBwcm92aWRlciBmcm9tIHZhcmlhbnQuCgkJCWlmICh2YXJpYW50TmFtZSAmJiAndmFyaWFudHMnIGluIHByb3ZpZGVyc1twcm92aWRlck5hbWVdKSB7CgkJCQlpZiAoISh2YXJpYW50TmFtZSBpbiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS52YXJpYW50cykpIHsKCQkJCQl0aHJvdyAnTm8gc3VjaCB2YXJpYW50IG9mICcgKyBwcm92aWRlck5hbWUgKyAnICgnICsgdmFyaWFudE5hbWUgKyAnKSc7CgkJCQl9CgkJCQl2YXIgdmFyaWFudCA9IHByb3ZpZGVyc1twcm92aWRlck5hbWVdLnZhcmlhbnRzW3ZhcmlhbnROYW1lXTsKCQkJCXZhciB2YXJpYW50T3B0aW9uczsKCQkJCWlmICh0eXBlb2YgdmFyaWFudCA9PT0gJ3N0cmluZycpIHsKCQkJCQl2YXJpYW50T3B0aW9ucyA9IHsKCQkJCQkJdmFyaWFudDogdmFyaWFudAoJCQkJCX07CgkJCQl9IGVsc2UgewoJCQkJCXZhcmlhbnRPcHRpb25zID0gdmFyaWFudC5vcHRpb25zOwoJCQkJfQoJCQkJcHJvdmlkZXIgPSB7CgkJCQkJdXJsOiB2YXJpYW50LnVybCB8fCBwcm92aWRlci51cmwsCgkJCQkJb3B0aW9uczogTC5VdGlsLmV4dGVuZCh7fSwgcHJvdmlkZXIub3B0aW9ucywgdmFyaWFudE9wdGlvbnMpCgkJCQl9OwoJCQl9IGVsc2UgaWYgKHR5cGVvZiBwcm92aWRlci51cmwgPT09ICdmdW5jdGlvbicpIHsKCQkJCXByb3ZpZGVyLnVybCA9IHByb3ZpZGVyLnVybChwYXJ0cy5zcGxpY2UoMSwgcGFydHMubGVuZ3RoIC0gMSkuam9pbignLicpKTsKCQkJfQoKCQkJdmFyIGZvcmNlSFRUUCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCBwcm92aWRlci5vcHRpb25zLmZvcmNlSFRUUDsKCQkJaWYgKHByb3ZpZGVyLnVybC5pbmRleE9mKCcvLycpID09PSAwICYmIGZvcmNlSFRUUCkgewoJCQkJcHJvdmlkZXIudXJsID0gJ2h0dHA6JyArIHByb3ZpZGVyLnVybDsKCQkJfQoKCQkJLy8gcmVwbGFjZSBhdHRyaWJ1dGlvbiBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciB2YWx1ZXMgZnJvbSB0b3BsZXZlbCBwcm92aWRlciBhdHRyaWJ1dGlvbiwKCQkJLy8gcmVjdXJzaXZlbHkKCQkJdmFyIGF0dHJpYnV0aW9uUmVwbGFjZXIgPSBmdW5jdGlvbiAoYXR0cikgewoJCQkJaWYgKGF0dHIuaW5kZXhPZigne2F0dHJpYnV0aW9uLicpID09PSAtMSkgewoJCQkJCXJldHVybiBhdHRyOwoJCQkJfQoJCQkJcmV0dXJuIGF0dHIucmVwbGFjZSgvXHthdHRyaWJ1dGlvbi4oXHcqKVx9LywKCQkJCQlmdW5jdGlvbiAobWF0Y2gsIGF0dHJpYnV0aW9uTmFtZSkgewoJCQkJCQlyZXR1cm4gYXR0cmlidXRpb25SZXBsYWNlcihwcm92aWRlcnNbYXR0cmlidXRpb25OYW1lXS5vcHRpb25zLmF0dHJpYnV0aW9uKTsKCQkJCQl9CgkJCQkpOwoJCQl9OwoJCQlwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb25SZXBsYWNlcihwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uKTsKCgkJCS8vIENvbXB1dGUgZmluYWwgb3B0aW9ucyBjb21iaW5pbmcgcHJvdmlkZXIgb3B0aW9ucyB3aXRoIGFueSB1c2VyIG92ZXJyaWRlcwoJCQl2YXIgbGF5ZXJPcHRzID0gTC5VdGlsLmV4dGVuZCh7fSwgcHJvdmlkZXIub3B0aW9ucywgb3B0aW9ucyk7CgkJCUwuVGlsZUxheWVyLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgcHJvdmlkZXIudXJsLCBsYXllck9wdHMpOwoJCX0KCX0pOwoKCS8qKgoJICogRGVmaW5pdGlvbiBvZiBwcm92aWRlcnMuCgkgKiBzZWUgaHR0cDovL2xlYWZsZXRqcy5jb20vcmVmZXJlbmNlLmh0bWwjdGlsZWxheWVyIGZvciBvcHRpb25zIGluIHRoZSBvcHRpb25zIG1hcC4KCSAqLwoKCUwuVGlsZUxheWVyLlByb3ZpZGVyLnByb3ZpZGVycyA9IHsKCQlPcGVuU3RyZWV0TWFwOiB7CgkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJyZjb3B5OyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodCI+T3BlblN0cmVldE1hcDwvYT4nCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlNYXBuaWs6IHt9LAoJCQkJQmxhY2tBbmRXaGl0ZTogewoJCQkJCXVybDogJ2h0dHA6Ly97c30udGlsZXMud21mbGFicy5vcmcvYnctbWFwbmlrL3t6fS97eH0ve3l9LnBuZycKCQkJCX0sCgkJCQlERTogewoJCQkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLmRlL3RpbGVzL29zbWRlL3t6fS97eH0ve3l9LnBuZycKCQkJCX0sCgkJCQlIT1Q6IHsKCQkJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9ob3Qve3p9L3t4fS97eX0ucG5nJywKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCBUaWxlcyBjb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vaG90Lm9wZW5zdHJlZXRtYXAub3JnLyIgdGFyZ2V0PSJfYmxhbmsiPkh1bWFuaXRhcmlhbiBPcGVuU3RyZWV0TWFwIFRlYW08L2E+JwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJT3BlblNlYU1hcDogewoJCQl1cmw6ICdodHRwOi8vdGlsZXMub3BlbnNlYW1hcC5vcmcvc2VhbWFyay97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiAmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuc2VhbWFwLm9yZyI+T3BlblNlYU1hcDwvYT4gY29udHJpYnV0b3JzJwoJCQl9CgkJfSwKCQlPcGVuVG9wb01hcDogewoJCQl1cmw6ICcvL3tzfS50aWxlLm9wZW50b3BvbWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQltYXhab29tOiAxNiwKCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGE6IHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgPGEgaHJlZj0iaHR0cDovL3ZpZXdmaW5kZXJwYW5vcmFtYXMub3JnIj5TUlRNPC9hPiB8IE1hcCBzdHlsZTogJmNvcHk7IDxhIGhyZWY9Imh0dHBzOi8vb3BlbnRvcG9tYXAub3JnIj5PcGVuVG9wb01hcDwvYT4gKDxhIGhyZWY9Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAvIj5DQy1CWS1TQTwvYT4pJwoJCQl9CgkJfSwKCQlUaHVuZGVyZm9yZXN0OiB7CgkJCXVybDogJy8ve3N9LnRpbGUudGh1bmRlcmZvcmVzdC5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuY3ljbGVtYXAub3JnIj5PcGVuQ3ljbGVNYXA8L2E+LCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJdmFyaWFudDogJ2N5Y2xlJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJT3BlbkN5Y2xlTWFwOiAnY3ljbGUnLAoJCQkJVHJhbnNwb3J0OiAndHJhbnNwb3J0JywKCQkJCVRyYW5zcG9ydERhcms6ICd0cmFuc3BvcnQtZGFyaycsCgkJCQlMYW5kc2NhcGU6ICdsYW5kc2NhcGUnLAoJCQkJT3V0ZG9vcnM6ICdvdXRkb29ycycKCQkJfQoJCX0sCgkJT3Blbk1hcFN1cmZlcjogewoJCQl1cmw6ICdodHRwOi8vb3Blbm1hcHN1cmZlci51bmktaGQuZGUvdGlsZXMve3ZhcmlhbnR9L3g9e3h9Jnk9e3l9Jno9e3p9JywKCQkJb3B0aW9uczogewoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3JvYWRzJywKCQkJCWF0dHJpYnV0aW9uOiAnSW1hZ2VyeSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9naXNjaWVuY2UudW5pLWhkLmRlLyI+R0lTY2llbmNlIFJlc2VhcmNoIEdyb3VwIEAgVW5pdmVyc2l0eSBvZiBIZWlkZWxiZXJnPC9hPiAmbWRhc2g7IE1hcCBkYXRhIHthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfScKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVJvYWRzOiAncm9hZHMnLAoJCQkJQWRtaW5Cb3VuZHM6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdhZG1pbmInLAoJCQkJCQltYXhab29tOiAxOQoJCQkJCX0KCQkJCX0sCgkJCQlHcmF5c2NhbGU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdyb2Fkc2cnLAoJCQkJCQltYXhab29tOiAxOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJSHlkZGE6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAuc2UvaHlkZGEve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCW1pblpvb206IDAsCgkJCQltYXhab29tOiAxOCwKCQkJCXZhcmlhbnQ6ICdmdWxsJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgY291cnRlc3kgb2YgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAuc2UvIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcCBTd2VkZW48L2E+ICZtZGFzaDsgTWFwIGRhdGEge2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJRnVsbDogJ2Z1bGwnLAoJCQkJQmFzZTogJ2Jhc2UnLAoJCQkJUm9hZHNBbmRMYWJlbHM6ICdyb2Fkc19hbmRfbGFiZWxzJwoJCQl9CgkJfSwKCQlNYXBRdWVzdE9wZW46IHsKCQkJLyogTWFwcXVlc3QgZG9lcyBzdXBwb3J0IGh0dHBzLCBidXQgd2l0aCBhIGRpZmZlcmVudCBzdWJkb21haW46CgkJCSAqIGh0dHBzOi8vb3RpbGV7c30tcy5tcWNkbi5jb20vdGlsZXMvMS4wLjAve3R5cGV9L3t6fS97eH0ve3l9LntleHR9CgkJCSAqIHdoaWNoIG1ha2VzIGltcGxlbWVudGluZyBwcm90b2NvbCByZWxhdGl2aXR5IGltcG9zc2libGUuCgkJCSAqLwoJCQl1cmw6ICdodHRwOi8vb3RpbGV7c30ubXFjZG4uY29tL3RpbGVzLzEuMC4wL3t0eXBlfS97en0ve3h9L3t5fS57ZXh0fScsCgkJCW9wdGlvbnM6IHsKCQkJCXR5cGU6ICdtYXAnLAoJCQkJZXh0OiAnanBnJywKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdUaWxlcyBDb3VydGVzeSBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm1hcHF1ZXN0LmNvbS8iPk1hcFF1ZXN0PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJzEyMzQnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlPU006IHt9LAoJCQkJQWVyaWFsOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl0eXBlOiAnc2F0JywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQknVGlsZXMgQ291cnRlc3kgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5tYXBxdWVzdC5jb20vIj5NYXBRdWVzdDwvYT4gJm1kYXNoOyAnICsKCQkJCQkJCSdQb3J0aW9ucyBDb3VydGVzeSBOQVNBL0pQTC1DYWx0ZWNoIGFuZCBVLlMuIERlcGFydC4gb2YgQWdyaWN1bHR1cmUsIEZhcm0gU2VydmljZSBBZ2VuY3knCgkJCQkJfQoJCQkJfSwKCQkJCUh5YnJpZE92ZXJsYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXR5cGU6ICdoeWInLAoJCQkJCQlleHQ6ICdwbmcnLAoJCQkJCQlvcGFjaXR5OiAwLjkKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU1hcEJveDogewoJCQl1cmw6IGZ1bmN0aW9uIChpZCkgewoJCQkJcmV0dXJuICcvL3tzfS50aWxlcy5tYXBib3guY29tL3YzLycgKyBpZCArICcve3p9L3t4fS97eX0ucG5nJzsKCQkJfSwKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ0ltYWdlcnkgZnJvbSA8YSBocmVmPSJodHRwOi8vbWFwYm94LmNvbS9hYm91dC9tYXBzLyI+TWFwQm94PC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnCgkJCX0KCQl9LAoJCVN0YW1lbjogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGUuc3RhbWVuLmNvbS97dmFyaWFudH0ve3p9L3t4fS97eX0ue2V4dH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknTWFwIHRpbGVzIGJ5IDxhIGhyZWY9Imh0dHA6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPiwgJyArCgkJCQkJJzxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPiAmbWRhc2g7ICcgKwoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLAoJCQkJc3ViZG9tYWluczogJ2FiY2QnLAoJCQkJbWluWm9vbTogMCwKCQkJCW1heFpvb206IDIwLAoJCQkJdmFyaWFudDogJ3RvbmVyJywKCQkJCWV4dDogJ3BuZycKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCVRvbmVyOiAndG9uZXInLAoJCQkJVG9uZXJCYWNrZ3JvdW5kOiAndG9uZXItYmFja2dyb3VuZCcsCgkJCQlUb25lckh5YnJpZDogJ3RvbmVyLWh5YnJpZCcsCgkJCQlUb25lckxpbmVzOiAndG9uZXItbGluZXMnLAoJCQkJVG9uZXJMYWJlbHM6ICd0b25lci1sYWJlbHMnLAoJCQkJVG9uZXJMaXRlOiAndG9uZXItbGl0ZScsCgkJCQlXYXRlcmNvbG9yOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnd2F0ZXJjb2xvcicsCgkJCQkJCW1pblpvb206IDEsCgkJCQkJCW1heFpvb206IDE2CgkJCQkJfQoJCQkJfSwKCQkJCVRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluJywKCQkJCQkJbWluWm9vbTogNCwKCQkJCQkJbWF4Wm9vbTogMTgsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs3MCwgLTU2XV0KCQkJCQl9CgkJCQl9LAoJCQkJVGVycmFpbkJhY2tncm91bmQ6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLWJhY2tncm91bmQnLAoJCQkJCQltaW5ab29tOiA0LAoJCQkJCQltYXhab29tOiAxOCwKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzcwLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01SZWxpZWY6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tY29sb3ItcmVsaWVmJywKCQkJCQkJZXh0OiAnanBnJywKCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzUxLCAtNTZdXQoJCQkJCX0KCQkJCX0sCgkJCQlUb3BPU01GZWF0dXJlczogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ3RvcG9zbS1mZWF0dXJlcycsCgkJCQkJCWJvdW5kczogW1syMiwgLTEzMl0sIFs1MSwgLTU2XV0sCgkJCQkJCW9wYWNpdHk6IDAuOQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0sCgkJRXNyaTogewoJCQl1cmw6ICcvL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL3t2YXJpYW50fS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsCgkJCW9wdGlvbnM6IHsKCQkJCXZhcmlhbnQ6ICdXb3JsZF9TdHJlZXRfTWFwJywKCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmknCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlXb3JsZFN0cmVldE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVTR1MsIEludGVybWFwLCBpUEMsIE5SQ0FOLCBFc3JpIEphcGFuLCBNRVRJLCBFc3JpIENoaW5hIChIb25nIEtvbmcpLCBFc3JpIChUaGFpbGFuZCksIFRvbVRvbSwgMjAxMicKCQkJCQl9CgkJCQl9LAoJCQkJRGVMb3JtZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1NwZWNpYWx0eS9EZUxvcm1lX1dvcmxkX0Jhc2VfTWFwJywKCQkJCQkJbWluWm9vbTogMSwKCQkJCQkJbWF4Wm9vbTogMTEsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkVG9wb01hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1RvcG9fTWFwJywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknRXNyaSwgRGVMb3JtZSwgTkFWVEVRLCBUb21Ub20sIEludGVybWFwLCBpUEMsIFVTR1MsIEZBTywgTlBTLCBOUkNBTiwgR2VvQmFzZSwgS2FkYXN0ZXIgTkwsIE9yZG5hbmNlIFN1cnZleSwgRXNyaSBKYXBhbiwgTUVUSSwgRXNyaSBDaGluYSAoSG9uZyBLb25nKSwgYW5kIHRoZSBHSVMgVXNlciBDb21tdW5pdHknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkSW1hZ2VyeTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX0ltYWdlcnknLAoJCQkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkJCSd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyAnICsKCQkJCQkJCSdTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5JwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFRlcnJhaW46IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9UZXJyYWluX0Jhc2UnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246CgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArCgkJCQkJCQknU291cmNlOiBVU0dTLCBFc3JpLCBUQU5BLCBEZUxvcm1lLCBhbmQgTlBTJwoJCQkJCX0KCQkJCX0sCgkJCQlXb3JsZFNoYWRlZFJlbGllZjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1dvcmxkX1NoYWRlZF9SZWxpZWYnLAoJCQkJCQltYXhab29tOiAxMywKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBTb3VyY2U6IEVzcmknCgkJCQkJfQoJCQkJfSwKCQkJCVdvcmxkUGh5c2ljYWw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9QaHlzaWNhbF9NYXAnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogVVMgTmF0aW9uYWwgUGFyayBTZXJ2aWNlJwoJCQkJCX0KCQkJCX0sCgkJCQlPY2VhbkJhc2VtYXA6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdPY2Vhbl9CYXNlbWFwJywKCQkJCQkJbWF4Wm9vbTogMTMsCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgU291cmNlczogR0VCQ08sIE5PQUEsIENIUywgT1NVLCBVTkgsIENTVU1CLCBOYXRpb25hbCBHZW9ncmFwaGljLCBEZUxvcm1lLCBOQVZURVEsIGFuZCBFc3JpJwoJCQkJCX0KCQkJCX0sCgkJCQlOYXRHZW9Xb3JsZE1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ05hdEdlb19Xb3JsZF9NYXAnLAoJCQkJCQltYXhab29tOiAxNiwKCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyBOYXRpb25hbCBHZW9ncmFwaGljLCBFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFVORVAtV0NNQywgVVNHUywgTkFTQSwgRVNBLCBNRVRJLCBOUkNBTiwgR0VCQ08sIE5PQUEsIGlQQycKCQkJCQl9CgkJCQl9LAoJCQkJV29ybGRHcmF5Q2FudmFzOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQl2YXJpYW50OiAnQ2FudmFzL1dvcmxkX0xpZ2h0X0dyYXlfQmFzZScsCgkJCQkJCW1heFpvb206IDE2LAoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IEVzcmksIERlTG9ybWUsIE5BVlRFUScKCQkJCQl9CgkJCQl9CgkJCX0KCQl9LAoJCU9wZW5XZWF0aGVyTWFwOiB7CgkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVud2VhdGhlcm1hcC5vcmcvbWFwL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPSJodHRwOi8vb3BlbndlYXRoZXJtYXAub3JnIj5PcGVuV2VhdGhlck1hcDwvYT4nLAoJCQkJb3BhY2l0eTogMC41CgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQlDbG91ZHM6ICdjbG91ZHMnLAoJCQkJQ2xvdWRzQ2xhc3NpYzogJ2Nsb3Vkc19jbHMnLAoJCQkJUHJlY2lwaXRhdGlvbjogJ3ByZWNpcGl0YXRpb24nLAoJCQkJUHJlY2lwaXRhdGlvbkNsYXNzaWM6ICdwcmVjaXBpdGF0aW9uX2NscycsCgkJCQlSYWluOiAncmFpbicsCgkJCQlSYWluQ2xhc3NpYzogJ3JhaW5fY2xzJywKCQkJCVByZXNzdXJlOiAncHJlc3N1cmUnLAoJCQkJUHJlc3N1cmVDb250b3VyOiAncHJlc3N1cmVfY250cicsCgkJCQlXaW5kOiAnd2luZCcsCgkJCQlUZW1wZXJhdHVyZTogJ3RlbXAnLAoJCQkJU25vdzogJ3Nub3cnCgkJCX0KCQl9LAoJCUhFUkU6IHsKCQkJLyoKCQkJICogSEVSRSBtYXBzLCBmb3JtZXJseSBOb2tpYSBtYXBzLgoJCQkgKiBUaGVzZSBiYXNlbWFwcyBhcmUgZnJlZSwgYnV0IHlvdSBuZWVkIGFuIEFQSSBrZXkuIFBsZWFzZSBzaWduIHVwIGF0CgkJCSAqIGh0dHA6Ly9kZXZlbG9wZXIuaGVyZS5jb20vZ2V0dGluZy1zdGFydGVkCgkJCSAqCgkJCSAqIE5vdGUgdGhhdCB0aGUgYmFzZSB1cmxzIGNvbnRhaW4gJy5jaXQnIHdoaWNocyBpcyBIRVJFJ3MKCQkJICogJ0N1c3RvbWVyIEludGVncmF0aW9uIFRlc3RpbmcnIGVudmlyb25tZW50LiBQbGVhc2UgcmVtb3ZlIGZvciBwcm9kdWN0aW9uCgkJCSAqIGVudmlyaW9ubWVudHMuCgkJCSAqLwoJCQl1cmw6CgkJCQknLy97c30ue2Jhc2V9Lm1hcHMuY2l0LmFwaS5oZXJlLmNvbS9tYXB0aWxlLzIuMS8nICsKCQkJCSdtYXB0aWxlL3ttYXBJRH0ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LzI1Ni9wbmc4PycgKwoJCQkJJ2FwcF9pZD17YXBwX2lkfSZhcHBfY29kZT17YXBwX2NvZGV9JywKCQkJb3B0aW9uczogewoJCQkJYXR0cmlidXRpb246CgkJCQkJJ01hcCAmY29weTsgMTk4Ny0yMDE0IDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuaGVyZS5jb20iPkhFUkU8L2E+JywKCQkJCXN1YmRvbWFpbnM6ICcxMjM0JywKCQkJCW1hcElEOiAnbmV3ZXN0JywKCQkJCSdhcHBfaWQnOiAnPGluc2VydCB5b3VyIGFwcF9pZCBoZXJlPicsCgkJCQknYXBwX2NvZGUnOiAnPGluc2VydCB5b3VyIGFwcF9jb2RlIGhlcmU+JywKCQkJCWJhc2U6ICdiYXNlJywKCQkJCXZhcmlhbnQ6ICdub3JtYWwuZGF5JywKCQkJCW1pblpvb206IDAsCgkJCQltYXhab29tOiAyMAoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJbm9ybWFsRGF5OiAnbm9ybWFsLmRheScsCgkJCQlub3JtYWxEYXlDdXN0b206ICdub3JtYWwuZGF5LmN1c3RvbScsCgkJCQlub3JtYWxEYXlHcmV5OiAnbm9ybWFsLmRheS5ncmV5JywKCQkJCW5vcm1hbERheU1vYmlsZTogJ25vcm1hbC5kYXkubW9iaWxlJywKCQkJCW5vcm1hbERheUdyZXlNb2JpbGU6ICdub3JtYWwuZGF5LmdyZXkubW9iaWxlJywKCQkJCW5vcm1hbERheVRyYW5zaXQ6ICdub3JtYWwuZGF5LnRyYW5zaXQnLAoJCQkJbm9ybWFsRGF5VHJhbnNpdE1vYmlsZTogJ25vcm1hbC5kYXkudHJhbnNpdC5tb2JpbGUnLAoJCQkJbm9ybWFsTmlnaHQ6ICdub3JtYWwubmlnaHQnLAoJCQkJbm9ybWFsTmlnaHRNb2JpbGU6ICdub3JtYWwubmlnaHQubW9iaWxlJywKCQkJCW5vcm1hbE5pZ2h0R3JleTogJ25vcm1hbC5uaWdodC5ncmV5JywKCQkJCW5vcm1hbE5pZ2h0R3JleU1vYmlsZTogJ25vcm1hbC5uaWdodC5ncmV5Lm1vYmlsZScsCgoJCQkJY2FybmF2RGF5R3JleTogJ2Nhcm5hdi5kYXkuZ3JleScsCgkJCQloeWJyaWREYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnaHlicmlkLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJaHlicmlkRGF5TW9iaWxlOiB7CgkJCQkJb3B0aW9uczogewoJCQkJCQliYXNlOiAnYWVyaWFsJywKCQkJCQkJdmFyaWFudDogJ2h5YnJpZC5kYXkubW9iaWxlJwoJCQkJCX0KCQkJCX0sCgkJCQlwZWRlc3RyaWFuRGF5OiAncGVkZXN0cmlhbi5kYXknLAoJCQkJcGVkZXN0cmlhbk5pZ2h0OiAncGVkZXN0cmlhbi5uaWdodCcsCgkJCQlzYXRlbGxpdGVEYXk6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCWJhc2U6ICdhZXJpYWwnLAoJCQkJCQl2YXJpYW50OiAnc2F0ZWxsaXRlLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJdGVycmFpbkRheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLmRheScKCQkJCQl9CgkJCQl9LAoJCQkJdGVycmFpbkRheU1vYmlsZTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJYmFzZTogJ2FlcmlhbCcsCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLmRheS5tb2JpbGUnCgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCQlBY2V0YXRlOiB7CgkJCXVybDogJ2h0dHA6Ly9he3N9LmFjZXRhdGUuZ2VvaXEuY29tL3RpbGVzL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQknJmNvcHk7MjAxMiBFc3JpICYgU3RhbWVuLCBEYXRhIGZyb20gT1NNIGFuZCBOYXR1cmFsIEVhcnRoJywKCQkJCXN1YmRvbWFpbnM6ICcwMTIzJywKCQkJCW1pblpvb206IDIsCgkJCQltYXhab29tOiAxOCwKCQkJCXZhcmlhbnQ6ICdhY2V0YXRlLWJhc2UnCgkJCX0sCgkJCXZhcmlhbnRzOiB7CgkJCQliYXNlbWFwOiAnYWNldGF0ZS1iYXNlJywKCQkJCXRlcnJhaW46ICd0ZXJyYWluJywKCQkJCWFsbDogJ2FjZXRhdGUtaGlsbHNoYWRpbmcnLAoJCQkJZm9yZWdyb3VuZDogJ2FjZXRhdGUtZmcnLAoJCQkJcm9hZHM6ICdhY2V0YXRlLXJvYWRzJywKCQkJCWxhYmVsczogJ2FjZXRhdGUtbGFiZWxzJywKCQkJCWhpbGxzaGFkaW5nOiAnaGlsbHNoYWRpbmcnCgkJCX0KCQl9LAoJCUZyZWVNYXBTSzogewoJCQl1cmw6ICdodHRwOi8ve3N9LmZyZWVtYXAuc2svVC97en0ve3h9L3t5fS5qcGVnJywKCQkJb3B0aW9uczogewoJCQkJbWluWm9vbTogOCwKCQkJCW1heFpvb206IDE2LAoJCQkJc3ViZG9tYWluczogWyd0MScsICd0MicsICd0MycsICd0NCddLAoJCQkJYXR0cmlidXRpb246CgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgdml6dWFsaXphdGlvbiBDQy1CeS1TQSAyLjAgPGEgaHJlZj0iaHR0cDovL2ZyZWVtYXAuc2siPkZyZWVtYXAuc2s8L2E+JwoJCQl9CgkJfSwKCQlNdGJNYXA6IHsKCQkJdXJsOiAnaHR0cDovL3RpbGUubXRibWFwLmN6L210Ym1hcF90aWxlcy97en0ve3h9L3t5fS5wbmcnLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjoKCQkJCQkne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZhbXA7IFVTR1MnCgkJCX0KCQl9LAoJCUNhcnRvREI6IHsKCQkJdXJsOiAnaHR0cDovL3tzfS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vY2FydG9kYi5jb20vYXR0cmlidXRpb25zIj5DYXJ0b0RCPC9hPicsCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsCgkJCQltaW5ab29tOiAwLAoJCQkJbWF4Wm9vbTogMTgsCgkJCQl2YXJpYW50OiAnbGlnaHRfYWxsJwoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJUG9zaXRyb246ICdsaWdodF9hbGwnLAoJCQkJUG9zaXRyb25Ob0xhYmVsczogJ2xpZ2h0X25vbGFiZWxzJywKCQkJCURhcmtNYXR0ZXI6ICdkYXJrX2FsbCcsCgkJCQlEYXJrTWF0dGVyTm9MYWJlbHM6ICdkYXJrX25vbGFiZWxzJwoJCQl9CgkJfSwKCQlIaWtlQmlrZTogewoJCQl1cmw6ICdodHRwOi8ve3N9LnRpbGVzLndtZmxhYnMub3JnL2hpa2ViaWtlL3t6fS97eH0ve3l9LnBuZycsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JwoJCQl9CgkJfSwKCQlCYXNlbWFwQVQ6IHsKCQkJdXJsOiAnLy9tYXBze3N9LndpZW4uZ3YuYXQvYmFzZW1hcC97dmFyaWFudH0vbm9ybWFsL2dvb2dsZTM4NTcve3p9L3t5fS97eH0ue2Zvcm1hdH0nLAoJCQlvcHRpb25zOiB7CgkJCQlhdHRyaWJ1dGlvbjogJ0RhdGVucXVlbGxlOiA8YSBocmVmPSJ3d3cuYmFzZW1hcC5hdCI+YmFzZW1hcC5hdDwvYT4nLAoJCQkJc3ViZG9tYWluczogWycnLCAnMScsICcyJywgJzMnLCAnNCddLAoJCQkJYm91bmRzOiBbWzQ2LjM1ODc3MCwgOC43ODIzNzldLCBbNDkuMDM3ODcyLCAxNy4xODk1MzJdXQoJCQl9LAoJCQl2YXJpYW50czogewoJCQkJYmFzZW1hcDogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2dlb2xhbmRiYXNlbWFwJywKCQkJCQkJZm9ybWF0OiAnanBlZycKCQkJCQl9CgkJCQl9LAoJCQkJaGlnaGRwaTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2JtYXBoaWRwaScsCgkJCQkJCWZvcm1hdDogJ2pwZWcnCgkJCQkJfQoJCQkJfSwKCQkJCWdyYXU6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdibWFwZ3JhdScsCgkJCQkJCWZvcm1hdDogJ3BuZycKCQkJCQl9CgkJCQl9LAoJCQkJb3ZlcmxheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ2JtYXBvdmVybGF5JywKCQkJCQkJZm9ybWF0OiAncG5nJwoJCQkJCX0KCQkJCX0sCgkJCQlvcnRob2ZvdG86IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdibWFwb3J0aG9mb3RvMzBjbScsCgkJCQkJCWZvcm1hdDogJ2pwZWcnCgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCQlOQVNBR0lCUzogewoJCQl1cmw6ICcvL21hcDEudmlzLmVhcnRoZGF0YS5uYXNhLmdvdi93bXRzLXdlYm1lcmMve3ZhcmlhbnR9L2RlZmF1bHQve3RpbWV9L3t0aWxlbWF0cml4c2V0fXttYXhab29tfS97en0ve3l9L3t4fS57Zm9ybWF0fScsCgkJCW9wdGlvbnM6IHsKCQkJCWF0dHJpYnV0aW9uOgoJCQkJCSdJbWFnZXJ5IHByb3ZpZGVkIGJ5IHNlcnZpY2VzIGZyb20gdGhlIEdsb2JhbCBJbWFnZXJ5IEJyb3dzZSBTZXJ2aWNlcyAoR0lCUyksIG9wZXJhdGVkIGJ5IHRoZSBOQVNBL0dTRkMvRWFydGggU2NpZW5jZSBEYXRhIGFuZCBJbmZvcm1hdGlvbiBTeXN0ZW0gJyArCgkJCQkJJyg8YSBocmVmPSJodHRwczovL2VhcnRoZGF0YS5uYXNhLmdvdiI+RVNESVM8L2E+KSB3aXRoIGZ1bmRpbmcgcHJvdmlkZWQgYnkgTkFTQS9IUS4nLAoJCQkJYm91bmRzOiBbWy04NS4wNTExMjg3Nzc2LCAtMTc5Ljk5OTk5OTk3NV0sIFs4NS4wNTExMjg3Nzc2LCAxNzkuOTk5OTk5OTc1XV0sCgkJCQltaW5ab29tOiAxLAoJCQkJbWF4Wm9vbTogOSwKCQkJCWZvcm1hdDogJ2pwZycsCgkJCQl0aW1lOiAnJywKCQkJCXRpbGVtYXRyaXhzZXQ6ICdHb29nbGVNYXBzQ29tcGF0aWJsZV9MZXZlbCcKCQkJfSwKCQkJdmFyaWFudHM6IHsKCQkJCU1vZGlzVGVycmFUcnVlQ29sb3JDUjogJ01PRElTX1RlcnJhX0NvcnJlY3RlZFJlZmxlY3RhbmNlX1RydWVDb2xvcicsCgkJCQlNb2Rpc1RlcnJhQmFuZHMzNjdDUjogJ01PRElTX1RlcnJhX0NvcnJlY3RlZFJlZmxlY3RhbmNlX0JhbmRzMzY3JywKCQkJCVZpaXJzRWFydGhBdE5pZ2h0MjAxMjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ1ZJSVJTX0NpdHlMaWdodHNfMjAxMicsCgkJCQkJCW1heFpvb206IDgKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYUxTVERheTogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ01PRElTX1RlcnJhX0xhbmRfU3VyZmFjZV9UZW1wX0RheScsCgkJCQkJCWZvcm1hdDogJ3BuZycsCgkJCQkJCW1heFpvb206IDcsCgkJCQkJCW9wYWNpdHk6IDAuNzUKCQkJCQl9CgkJCQl9LAoJCQkJTW9kaXNUZXJyYVNub3dDb3ZlcjogewoJCQkJCW9wdGlvbnM6IHsKCQkJCQkJdmFyaWFudDogJ01PRElTX1RlcnJhX1Nub3dfQ292ZXInLAoJCQkJCQlmb3JtYXQ6ICdwbmcnLAoJCQkJCQltYXhab29tOiA4LAoJCQkJCQlvcGFjaXR5OiAwLjc1CgkJCQkJfQoJCQkJfSwKCQkJCU1vZGlzVGVycmFBT0Q6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9BZXJvc29sJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogNiwKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0sCgkJCQlNb2Rpc1RlcnJhQ2hsb3JvcGh5bGw6IHsKCQkJCQlvcHRpb25zOiB7CgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9DaGxvcm9waHlsbF9BJywKCQkJCQkJZm9ybWF0OiAncG5nJywKCQkJCQkJbWF4Wm9vbTogNywKCQkJCQkJb3BhY2l0eTogMC43NQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX07CgoJTC50aWxlTGF5ZXIucHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHsKCQlyZXR1cm4gbmV3IEwuVGlsZUxheWVyLlByb3ZpZGVyKHByb3ZpZGVyLCBvcHRpb25zKTsKCX07Cn0oKSk7Cg=="></script>
<script src="data:application/x-javascript;base64,TGVhZmxldFdpZGdldC5tZXRob2RzLmFkZFByb3ZpZGVyVGlsZXMgPSBmdW5jdGlvbihwcm92aWRlciwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllci5wcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9Owo="></script>
</head>
<body style="background-color:white;">
<div id="htmlwidget_container">
<div id="htmlwidget-19a9d30317d2c444e351" style="width:100%;height:400px;" class="leaflet html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-19a9d30317d2c444e351">{"x":{"calls":[{"method":"addProviderTiles","args":["CartoDB.Positron",null,null,{"errorTileUrl":"","noWrap":false,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false}]},{"method":"addPolygons","args":[[[{"lng":[-73.168937,-73.166162,-73.163527,-73.15753,-73.156255,-73.156223,-73.155143,-73.159621,-73.15946,-73.157322,-73.156383,-73.153954,-73.152832,-73.148841,-73.146616,-73.148948,-73.151364,-73.15128,-73.152319,-73.151928,-73.152471,-73.155535,-73.157391,-73.157791,-73.159486,-73.161364,-73.164344,-73.165623,-73.160818,-73.158911,-73.157859,-73.155472,-73.154384,-73.14996,-73.150138,-73.151175,-73.153032,-73.15533,-73.155971,-73.15581,-73.155026,-73.152159,-73.151471,-73.151972,-73.147412,-73.147296,-73.148775,-73.14626,-73.146708,-73.145934,-73.139766,-73.13393,-73.132955,-73.132714,-73.126748,-73.126072,-73.126606,-73.123352,-73.1237,-73.122441,-73.120996,-73.119546,-73.119588,-73.11903,-73.11922,-73.121848,-73.12086,-73.116564,-73.117358,-73.116966,-73.115909,-73.119698,-73.121436,-73.120712,-73.117815,-73.108532,-73.102149,-73.099698,-73.099618,-73.097576,-73.097041,-73.091407,-73.092584,-73.090003,-73.087078,-73.084497,-73.081645,-73.075312,-73.074093,-73.071599,-73.068477,-73.068195,-73.072061,-73.06892,-73.067013,-73.064854,-73.064761,-73.062741,-73.061187,-73.062627,-73.063141,-73.06285,-73.061279,-73.058948,-73.065192,-73.066466,-73.072802,-73.075689,-73.078182,-73.07127,-73.067671,-73.07619,-73.076683,-73.080743,-73.08254,-73.082166,-73.079069,-73.069814,-73.067827,-73.066258,-73.069708,-73.071611,-73.06786,-73.068894,-73.072579,-73.075838,-73.074847,-73.071395,-73.068605,-73.06825,-73.069384,-73.06843,-73.071168,-73.073287,-73.075033,-73.077614,-73.079111,-73.080447,-73.079107,-73.078001,-73.081653,-73.082936,-73.083241,-73.086227,-73.08622,-73.086822,-73.093447,-73.096321,-73.095711,-73.094761,-73.104496,-73.104661,-73.106875,-73.108894,-73.108031,-73.108125,-73.110284,-73.112093,-73.11247,-73.117155,-73.118297,-73.119771,-73.120389,-73.116191,-73.116387,-73.117066,-73.118274,-73.117186,-73.121273,-73.122017,-73.124554,-73.151335,-73.150623,-73.151609,-73.153081,-73.153644,-73.153308,-73.154543,-73.154138,-73.158592,-73.163181,-73.1679,-73.167643,-73.168937],"lat":[41.800563,41.800866,41.810289,41.809408,41.812414,41.815818,41.821129,41.823559,41.824322,41.823422,41.822277,41.822422,41.821107,41.819404,41.820262,41.827219,41.830637,41.833246,41.837169,41.838903,41.842062,41.847078,41.85126,41.853778,41.854014,41.858396,41.860307,41.86259,41.859278,41.856558,41.854091,41.855474,41.857276,41.859928,41.857116,41.855453,41.85474,41.855002,41.85299,41.850561,41.846986,41.842104,41.839742,41.83658,41.833275,41.831233,41.827863,41.825178,41.823062,41.819984,41.815442,41.8136,41.813394,41.815789,41.815014,41.819672,41.821038,41.820535,41.82195,41.825,41.826792,41.829938,41.833301,41.83569,41.838991,41.844107,41.845269,41.842345,41.836717,41.834099,41.831283,41.829468,41.824988,41.82347,41.822948,41.829548,41.836519,41.840754,41.846282,41.848517,41.851187,41.858647,41.859754,41.862193,41.865662,41.867275,41.866941,41.872345,41.869688,41.869121,41.869821,41.870907,41.872907,41.876375,41.875583,41.884312,41.885545,41.885869,41.884618,41.880729,41.876784,41.87409,41.86966,41.866571,41.840818,41.84,41.840798,41.840543,41.830991,41.830084,41.830378,41.799177,41.798451,41.798407,41.798184,41.796537,41.794108,41.791265,41.791735,41.789685,41.787927,41.7862,41.784782,41.784195,41.785863,41.789357,41.787292,41.783279,41.781063,41.779119,41.774984,41.771465,41.771729,41.773953,41.776761,41.777826,41.779492,41.778896,41.777255,41.774132,41.773508,41.776484,41.779152,41.780874,41.777985,41.790316,41.788037,41.785091,41.78186,41.779945,41.77878,41.780827,41.783108,41.786127,41.788487,41.790171,41.78791,41.784943,41.782222,41.781366,41.777278,41.775642,41.774097,41.76981,41.764704,41.763493,41.764408,41.768207,41.774037,41.776558,41.776835,41.783051,41.778837,41.778916,41.780004,41.782213,41.782856,41.783557,41.783705,41.784762,41.793993,41.793502,41.794562,41.800563]},{"lng":[-73.09869,-73.095587,-73.095428,-73.096387,-73.09614,-73.095459,-73.091043,-73.090052,-73.095204,-73.095705,-73.097505,-73.095729,-73.093275,-73.090562,-73.088282,-73.086862,-73.083395,-73.081244,-73.081325,-73.079118,-73.079929,-73.082898,-73.08432,-73.081827,-73.080945,-73.07932,-73.07744,-73.075683,-73.075707,-73.072294,-73.069255,-73.065642,-73.065062,-73.070394,-73.069871,-73.067677,-73.065989,-73.065116,-73.062008,-73.060461,-73.059446,-73.058376,-73.057012,-73.054556,-73.054995,-73.05332,-73.054505,-73.051314,-73.048702,-73.046412,-73.042432,-73.038059,-73.038223,-73.042218,-73.042656,-73.045696,-73.045926,-73.045647,-73.045394,-73.044211,-73.047669,-73.046052,-73.041575,-73.039082,-73.03851,-73.044848,-73.047883,-73.049231,-73.054807,-73.05545,-73.055813,-73.059131,-73.064846,-73.066367,-73.066162,-73.064761,-73.0714,-73.071068,-73.071534,-73.072152,-73.074508,-73.073224,-73.074354,-73.074422,-73.075143,-73.083582,-73.086543,-73.088586,-73.092004,-73.09428,-73.095413,-73.097278,-73.095692,-73.090996,-73.090755,-73.088603,-73.088155,-73.089163,-73.089011,-73.090665,-73.0891,-73.091313,-73.092981,-73.093695,-73.091734,-73.08982,-73.090736,-73.09021,-73.092803,-73.094782,-73.092137,-73.092239,-73.095488,-73.097446,-73.098908,-73.09703,-73.099821,-73.09869],"lat":[41.902672,41.903465,41.907571,41.909967,41.91278,41.91408,41.916892,41.918572,41.917449,41.918879,41.919079,41.920152,41.92069,41.922117,41.922409,41.923689,41.925628,41.925908,41.92771,41.927728,41.930532,41.931502,41.936675,41.93453,41.932575,41.931602,41.928099,41.928783,41.930116,41.929279,41.931559,41.934985,41.933812,41.928022,41.927406,41.928586,41.928661,41.930041,41.929614,41.930452,41.933697,41.934678,41.933667,41.93442,41.93669,41.939065,41.939778,41.943196,41.946677,41.947631,41.947126,41.947609,41.946888,41.9316,41.931248,41.929033,41.928378,41.92737,41.924644,41.924392,41.910417,41.910354,41.913118,41.912522,41.911605,41.909321,41.909458,41.910236,41.91483,41.913916,41.910492,41.906748,41.897452,41.892775,41.88909,41.885545,41.884458,41.888207,41.888051,41.884314,41.883925,41.889159,41.890442,41.886481,41.883837,41.882603,41.884243,41.88619,41.887018,41.888094,41.890765,41.890846,41.892076,41.889143,41.892723,41.892688,41.893909,41.896714,41.902025,41.903025,41.903796,41.906701,41.907418,41.909191,41.911049,41.911453,41.913372,41.9164,41.914331,41.909267,41.902937,41.901847,41.901327,41.902602,41.902054,41.899704,41.901745,41.902672]},{"lng":[-73.06843,-73.068147,-73.066959,-73.066094,-73.06544,-73.067882,-73.068386,-73.06843],"lat":[41.771465,41.771606,41.772379,41.77258,41.770378,41.770207,41.771374,41.771465]},{"lng":[-73.168991,-73.166987,-73.165614,-73.165623,-73.165927,-73.16846,-73.171686,-73.168991],"lat":[41.86452,41.864412,41.862696,41.86259,41.862786,41.864231,41.864378,41.86452]}],[{"lng":[-73.083752,-73.078852,-73.071251,-73.068751,-73.065251,-73.065051,-73.066151,-73.067851,-73.066414,-73.065027,-73.061746,-73.058984,-73.056701,-73.053126,-73.04911,-73.040707,-73.033576,-73.028064,-73.020627,-73.014778,-73.013074,-73.008764,-73.000697,-72.998048,-72.997111,-72.99639,-72.99504,-72.98894,-72.988743,-72.985015,-72.98331,-72.977248,-72.974068,-72.970186,-72.972909,-72.968329,-72.968547,-72.965072,-72.962268,-72.964563,-72.961048,-72.9568,-72.954009,-72.952788,-72.948511,-72.945543,-72.946243,-72.945857,-72.938849,-72.94006,-72.939792,-72.942615,-72.943985,-72.943125,-72.942564,-72.93893,-72.940152,-72.95256,-72.950713,-72.953241,-72.953015,-72.953631,-72.952127,-72.949772,-72.949273,-72.951292,-72.949638,-72.943153,-72.943602,-72.942179,-72.941829,-72.936835,-72.935077,-72.93301,-72.92476,-72.923454,-72.917262,-72.915431,-72.913985,-72.91524,-72.914319,-72.912734,-72.911988,-72.909989,-72.911317,-72.912556,-72.91222,-72.913883,-72.914255,-72.915611,-72.915384,-72.916646,-72.917027,-72.917718,-72.917133,-72.920175,-72.920394,-72.923538,-72.925851,-72.926589,-72.929012,-72.931873,-72.933892,-72.935356,-72.938247,-72.939822,-72.940469,-72.938007,-72.93599,-72.932318,-72.929386,-72.931659,-72.932009,-72.934455,-72.931043,-72.933417,-72.933849,-72.935845,-72.934782,-72.935366,-72.933022,-72.933503,-72.934914,-72.935933,-72.940555,-72.943177,-72.94245,-72.947695,-72.946162,-72.942995,-72.943438,-72.946378,-72.947053,-72.948988,-72.950141,-72.944111,-72.938699,-72.937414,-72.936768,-72.93602,-72.934499,-72.935308,-72.938311,-72.938788,-72.941373,-72.945838,-72.947251,-72.948312,-72.947393,-72.946197,-72.943061,-72.940986,-72.937932,-72.932296,-72.930174,-72.932835,-72.930924,-72.929594,-72.928687,-72.925397,-72.923979,-72.923453,-72.923905,-72.922254,-72.919478,-72.919119,-72.917541,-72.916766,-72.91483,-72.913529,-72.912325,-72.911029,-72.908646,-72.907404,-72.905011,-72.905016,-72.903582,-72.901856,-72.9027,-72.903495,-72.913594,-72.917225,-72.917805,-72.919961,-72.924669,-72.925582,-72.926399,-72.917271,-72.915648,-72.883885,-72.879256,-72.879748,-72.873956,-72.873306,-72.871823,-72.871857,-72.871916,-72.869514,-72.868227,-72.867806,-72.852707,-72.849831,-72.847035,-72.844147,-72.845149,-72.845295,-72.845741,-72.848541,-72.840244,-72.827644,-72.829644,-72.825743,-72.825837,-72.828158,-72.829189,-72.828407,-72.827726,-72.826144,-72.825142,-72.821243,-72.819145,-72.810242,-72.809243,-72.805243,-72.801243,-72.779721,-72.767821,-72.770019,-72.774362,-72.77528,-72.775241,-72.775859,-72.775657,-72.773277,-72.769658,-72.766585,-72.765719,-72.762583,-72.76151,-72.758459,-72.754418,-72.75024,-72.748931,-72.751226,-72.757153,-72.759141,-72.759307,-72.75646,-72.752551,-72.752578,-72.749807,-72.747242,-72.747142,-72.746038,-72.74566,-72.748237,-72.751353,-72.75271,-72.752966,-72.751104,-72.752014,-72.751883,-72.749424,-72.748237,-72.749608,-72.751029,-72.753828,-72.754841,-72.753545,-72.751905,-72.75149,-72.749281,-72.747114,-72.748275,-72.745946,-72.755277,-72.756828,-72.759208,-72.761365,-72.763809,-72.765663,-72.766955,-72.765615,-72.766312,-72.802477,-72.8007,-72.798915,-72.799206,-72.797856,-72.801598,-72.800281,-72.801097,-72.803637,-72.805171,-72.807312,-72.807116,-72.805478,-72.80368,-72.801487,-72.797479,-72.79465,-72.790474,-72.790374,-72.786016,-72.785836,-72.782417,-72.782471,-72.782324,-72.782078,-72.779738,-72.779389,-72.776493,-72.747756,-72.745879,-72.744736,-72.73801,-72.730471,-72.734015,-72.737184,-72.732447,-72.729048,-72.728135,-72.729067,-72.732696,-72.735123,-72.736254,-72.739933,-72.742054,-72.741941,-72.743086,-72.740804,-72.742744,-72.74464,-72.74543,-72.747923,-72.749496,-72.752096,-72.754326,-72.75543,-72.758066,-72.760303,-72.76497,-72.766429,-72.767699,-72.768132,-72.773459,-72.777631,-72.777289,-72.773335,-72.7735,-72.775994,-72.776875,-72.778654,-72.78357,-72.781623,-72.782725,-72.781981,-72.784921,-72.791018,-72.793852,-72.793664,-72.794172,-72.796099,-72.792797,-72.792886,-72.796466,-72.798443,-72.800407,-72.808204,-72.809834,-72.811601,-72.817069,-72.817752,-72.816613,-72.815189,-72.81455,-72.810002,-72.809085,-72.806307,-72.80586,-72.803176,-72.800323,-72.798955,-72.797953,-72.794876,-72.793842,-72.79118,-72.790507,-72.788131,-72.787771,-72.779439,-72.775049,-72.7723,-72.769948,-72.769392,-72.770785,-72.772109,-72.769832,-72.766782,-72.768592,-72.769598,-72.768952,-72.767096,-72.765755,-72.766343,-72.765904,-72.764502,-72.762911,-72.762981,-72.761275,-72.763179,-72.76382,-72.755586,-72.756894,-72.754873,-72.753505,-72.749476,-72.74892,-72.749452,-72.752928,-72.752695,-72.754378,-72.752949,-72.751889,-72.75256,-72.751337,-72.747721,-72.747104,-72.743597,-72.743616,-72.737224,-72.728476,-72.728827,-72.730268,-72.725146,-72.721484,-72.720684,-72.719767,-72.717968,-72.717402,-72.719435,-72.717542,-72.718956,-72.717372,-72.715058,-72.713442,-72.712509,-72.710343,-72.710177,-72.711323,-72.710011,-72.70805,-72.704904,-72.706045,-72.705656,-72.701683,-72.700798,-72.699944,-72.698334,-72.697654,-72.696507,-72.696098,-72.694756,-72.693261,-72.695553,-72.69377,-72.694842,-72.695045,-72.694078,-72.693986,-72.69469,-72.692274,-72.691042,-72.687614,-72.687672,-72.69072,-72.69249,-72.695792,-72.700879,-72.705629,-72.705888,-72.703614,-72.704,-72.705161,-72.705159,-72.704477,-72.704163,-72.701227,-72.697142,-72.698308,-72.699134,-72.699165,-72.701177,-72.699295,-72.697312,-72.695015,-72.695874,-72.697498,-72.697209,-72.69386,-72.695141,-72.694992,-72.691133,-72.685722,-72.68703,-72.686232,-72.685503,-72.685778,-72.687969,-72.689666,-72.691249,-72.691656,-72.689714,-72.688135,-72.686964,-72.687248,-72.684864,-72.684702,-72.683001,-72.681459,-72.678151,-72.677253,-72.669604,-72.666952,-72.668339,-72.671897,-72.670928,-72.671459,-72.668195,-72.665734,-72.664066,-72.661042,-72.660524,-72.661772,-72.659043,-72.651905,-72.648827,-72.646704,-72.64739,-72.649029,-72.648343,-72.642415,-72.64335,-72.643409,-72.64022,-72.637882,-72.638959,-72.63814,-72.637213,-72.632434,-72.617601,-72.612563,-72.612655,-72.611605,-72.612834,-72.61139,-72.611213,-72.612705,-72.612689,-72.614405,-72.613604,-72.614963,-72.614407,-72.612077,-72.61149,-72.608399,-72.605226,-72.60251,-72.600567,-72.599513,-72.597005,-72.595708,-72.59479,-72.592343,-72.589445,-72.587341,-72.586417,-72.585768,-72.585318,-72.587809,-72.589596,-72.587062,-72.585445,-72.584846,-72.586493,-72.587643,-72.58781,-72.588407,-72.588567,-72.588589,-72.588181,-72.586834,-72.58607,-72.585859,-72.585706,-72.585691,-72.585632,-72.585239,-72.58374,-72.582277,-72.581163,-72.581861,-72.581817,-72.57904,-72.576452,-72.575989,-72.573471,-72.571963,-72.569977,-72.570808,-72.570146,-72.567559,-72.565628,-72.563934,-72.561132,-72.559139,-72.557434,-72.557236,-72.554894,-72.551128,-72.548873,-72.545986,-72.548046,-72.546253,-72.544744,-72.545001,-72.546941,-72.547102,-72.547241,-72.549983,-72.552005,-72.553678,-72.549576,-72.548688,-72.547517,-72.546688,-72.547998,-72.548275,-72.545734,-72.5363300022319,-72.536759,-72.543941,-72.5469155277365,-72.5706046900754,-72.5710754110575,-72.571136,-72.583336,-72.5851810549313,-72.5909667135432,-72.598036,-72.601192,-72.60408,-72.6078132585328,-72.607956,-72.610358532227,-72.617237,-72.6175211803484,-72.6179830151926,-72.631362962314,-72.641538,-72.653838,-72.6545317521677,-72.658424,-72.661028,-72.6621840014098,-72.663421,-72.663099,-72.658292,-72.656263,-72.652074,-72.648335,-72.651985,-72.655901,-72.653946,-72.654251,-72.652511,-72.649429,-72.647583,-72.648949,-72.646683,-72.644592,-72.644165,-72.644412,-72.644432,-72.646847,-72.647502,-72.649422,-72.648109,-72.649422,-72.652199,-72.654053,-72.654411,-72.654602,-72.654739,-72.654884,-72.6549,-72.65438,-72.655533,-72.659332,-72.662903,-72.665253,-72.666068,-72.66515,-72.666164,-72.665667,-72.6675584984645,-72.667806,-72.6704141809992,-72.672339,-72.6743362465055,-72.6746045953868,-72.678701,-72.677477,-72.6787609009579,-72.684939,-72.6849926868204,-72.685539,-72.6902367263958,-72.690781,-72.691203,-72.691967,-72.692361,-72.692927,-72.6936562134629,-72.694744,-72.6951593809353,-72.696992,-72.696076,-72.695937,-72.696854,-72.697952,-72.698948,-72.700715,-72.701959,-72.701682,-72.702308,-72.7037721282991,-72.7091031250813,-72.709231,-72.706778,-72.706788,-72.705275,-72.70481,-72.707632,-72.708482,-72.711573,-72.7123689302891,-72.7136053158668,-72.713674,-72.7115167440085,-72.709005,-72.706213,-72.704017,-72.702737,-72.704514,-72.705074,-72.706725,-72.710688,-72.715807,-72.7171258679402,-72.718289020539,-72.717918,-72.715845,-72.714755,-72.715552,-72.714832,-72.715981,-72.716945,-72.71886,-72.720733,-72.7237293512205,-72.724733193091,-72.723331,-72.725032,-72.726546,-72.726662,-72.728119,-72.727295,-72.728317,-72.729416,-72.730811,-72.730843,-72.7329012702703,-72.7335026324757,-72.732635,-72.732117,-72.732277,-72.732635,-72.733582,-72.73391,-72.734917,-72.7356973142673,-72.7366507117962,-72.737712,-72.7356976506951,-72.73358,-72.730967,-72.727484,-72.725223,-72.725575,-72.718071,-72.71803,-72.714493,-72.714149,-72.715025,-72.712672,-72.706637,-72.70536,-72.704318,-72.703262,-72.700383,-72.694416,-72.69368,-72.69569,-72.696783,-72.700162,-72.701804,-72.697837,-72.694435,-72.693436,-72.695198,-72.694181,-72.694335,-72.695912,-72.694618,-72.696578,-72.694349,-72.697453,-72.701689,-72.702202,-72.704836,-72.702895,-72.70023,-72.700112,-72.707004,-72.708501,-72.710127,-72.712417,-72.714157,-72.715309,-72.717952,-72.725934,-72.735296,-72.734108,-72.733729,-72.732481,-72.729223,-72.727823,-72.723697,-72.722748,-72.742038,-72.746695,-72.745359,-72.746015,-72.74611,-72.764532,-72.762147,-72.7649,-72.768788,-72.765335,-72.766458,-72.765651,-72.762913,-72.762296,-72.760891,-72.76045,-72.764486,-72.760089,-72.762892,-72.759168,-72.757589,-72.754259,-72.75395,-72.751123,-72.749043,-72.74841,-72.747564,-72.744849,-72.743214,-72.743039,-72.745118,-72.73827,-72.738991,-72.73593,-72.731558,-72.73225,-72.739645,-72.739044,-72.739344,-72.7400712986465,-72.740774,-72.748707303792,-72.75147,-72.7516041706922,-72.750092,-72.748916,-72.749854,-72.7517463310656,-72.752166,-72.7522198206543,-72.751497,-72.754044,-72.754442,-72.757147,-72.75798,-72.7576213000309,-72.7607110631591,-72.762751,-72.762205,-72.766346,-72.767722,-72.768478,-72.771657,-72.7730799583059,-72.777629,-72.7841847330823,-72.786142,-72.787650597561,-72.7880952684294,-72.790687,-72.7914290920895,-72.793038,-72.795242,-72.796551,-72.799483,-72.7999117913023,-72.800114922249,-72.801985,-72.804299,-72.805768,-72.806422,-72.806714,-72.806488,-72.806837,-72.81124,-72.8125526065049,-72.811376,-72.81187,-72.813678,-72.816379,-72.816496,-72.818004,-72.818542,-72.8188009952806,-72.81886,-72.818489,-72.817572,-72.817485,-72.817863,-72.818481,-72.8193700022368,-72.819372,-72.823563,-72.821823,-72.827052,-72.8274549425704,-72.82867,-72.829198,-72.829314,-72.831358,-72.831482,-72.8301112601922,-72.830142,-72.832281,-72.835846,-72.8369870912041,-72.83564,-72.83857,-72.837399,-72.835989,-72.83716,-72.839697,-72.840695,-72.838507,-72.840259,-72.841322,-72.841425,-72.845069,-72.8450446336288,-72.8450467371865,-72.846115,-72.846631,-72.847396,-72.849817,-72.850137,-72.850799,-72.85109,-72.850552,-72.8502344129681,-72.8505834089403,-72.85495,-72.854176,-72.857002,-72.858653,-72.858852,-72.860411,-72.859589,-72.8624823484083,-72.8631428520656,-72.8718221529641,-72.874545,-72.879936,-72.8811154451865,-72.8813838959827,-72.881445,-72.8846484024644,-72.887011,-72.889963,-72.890509,-72.8919524993885,-72.8952442553886,-72.895445,-72.9005669949007,-72.9008033370427,-72.900408,-72.899722,-72.899595,-72.9009,-72.903627,-72.903883,-72.9028077380474,-72.894745,-72.894729565167,-72.893845,-72.8963698914716,-72.897496,-72.905481,-72.905187789998,-72.904104,-72.9060492973471,-72.906194,-72.906432,-72.9073407391115,-72.907621,-72.913087,-72.921881,-72.9269914417402,-72.927229,-72.9283405714876,-72.932815,-72.932731,-72.936489,-72.937717,-72.9381977329184,-72.93856,-72.938023,-72.936566,-72.936413,-72.9360587100794,-72.934597,-72.9303827157441,-72.930081,-72.9291193141172,-72.9288761366032,-72.930843,-72.9307891132608,-72.935322,-72.939137,-72.953612,-72.957213,-72.962047,-72.9665310209584,-72.9712165620157,-72.975136,-72.978347,-72.981134,-72.985143,-72.9858113738396,-72.986904,-72.992699,-72.993232,-72.992127,-72.993146,-72.994622,-72.993548,-72.992051,-72.995014,-73.000617,-73.012715,-73.017985,-73.02698,-73.030307,-73.035161,-73.044144,-73.051511,-73.072277,-73.078556,-73.086852,-73.083752],"lat":[41.281496,41.284496,41.287296,41.289196,41.294896,41.297596,41.299496,41.300996,41.302949,41.306127,41.310079,41.311627,41.312168,41.311494,41.3113,41.313891,41.313129,41.311879,41.311095,41.310823,41.310319,41.31041,41.312623,41.314097,41.322194,41.32375,41.324893,41.328893,41.330186,41.333017,41.337307,41.339992,41.341594,41.342897,41.347396,41.347975,41.350423,41.350935,41.358749,41.359836,41.369236,41.374619,41.378905,41.381674,41.387916,41.387606,41.391815,41.39308,41.393363,41.39939,41.400553,41.402188,41.405285,41.406443,41.407128,41.408584,41.411224,41.419374,41.427813,41.428407,41.4311,41.432708,41.433915,41.438166,41.440283,41.440733,41.443703,41.442202,41.440563,41.438593,41.435052,41.434272,41.440855,41.440288,41.439042,41.439838,41.438793,41.439391,41.443052,41.44397,41.446199,41.443629,41.447822,41.449046,41.449485,41.451204,41.45246,41.452999,41.454448,41.455327,41.457017,41.457714,41.459731,41.461376,41.463264,41.466047,41.4677,41.471994,41.471998,41.469221,41.468886,41.471109,41.470431,41.468967,41.467455,41.468848,41.472263,41.47218,41.473555,41.472863,41.47717,41.479008,41.480562,41.482022,41.482839,41.486505,41.489705,41.489968,41.491326,41.493148,41.496529,41.499054,41.500773,41.503964,41.502488,41.50228,41.503037,41.505025,41.507709,41.51005,41.51544,41.516348,41.519659,41.521385,41.522506,41.521257,41.52095,41.521867,41.523628,41.528627,41.531549,41.532758,41.534497,41.535687,41.537617,41.539015,41.536263,41.537673,41.539463,41.540349,41.540908,41.540704,41.539428,41.536451,41.537568,41.537721,41.53891,41.538459,41.539437,41.537959,41.536779,41.537674,41.540231,41.541603,41.54208,41.543458,41.543974,41.545351,41.545307,41.546125,41.545492,41.54877,41.549988,41.551295,41.549751,41.551796,41.552302,41.554006,41.558263,41.555608,41.557373,41.554263,41.552371,41.549931,41.549845,41.556003,41.558919,41.560101,41.560396,41.563812,41.563152,41.562454,41.559154,41.556486,41.556761,41.555569,41.554873,41.554531,41.552236,41.54898,41.546291,41.54533,41.545131,41.544697,41.547411,41.548528,41.553497,41.567329,41.569098,41.570999,41.562397,41.564298,41.561514,41.559156,41.557391,41.555589,41.554715,41.556479,41.555397,41.554195,41.554298,41.562397,41.561997,41.566598,41.573098,41.575936,41.577339,41.573545,41.564855,41.56224,41.559961,41.559085,41.557145,41.549176,41.550911,41.550768,41.552145,41.553912,41.555509,41.555461,41.556888,41.559177,41.545673,41.543869,41.540226,41.53857,41.53776,41.535295,41.533139,41.532024,41.529742,41.528659,41.527899,41.513555,41.508922,41.505365,41.505426,41.502315,41.498155,41.497145,41.495878,41.492418,41.492136,41.488872,41.484024,41.48393,41.485087,41.481143,41.480985,41.476008,41.473371,41.47453,41.473745,41.471041,41.470573,41.467983,41.465445,41.467409,41.465824,41.466871,41.466092,41.464829,41.462984,41.460409,41.432867,41.430567,41.425231,41.42371,41.420286,41.420757,41.419851,41.416638,41.417936,41.41561,41.415592,41.412397,41.411036,41.406511,41.406565,41.409604,41.408334,41.41146,41.412155,41.41243,41.409756,41.410905,41.412073,41.412522,41.412791,41.412232,41.412193,41.413367,41.422796,41.421992,41.423578,41.424669,41.425928,41.422669,41.418418,41.418252,41.420917,41.420303,41.418909,41.415635,41.415969,41.414972,41.415622,41.414615,41.408272,41.404462,41.404338,41.403004,41.399628,41.40343,41.403654,41.405381,41.405381,41.406737,41.409068,41.408549,41.409155,41.408057,41.406577,41.406608,41.409659,41.40904,41.407336,41.402778,41.40272,41.401201,41.399893,41.398568,41.397795,41.389131,41.385099,41.380193,41.379807,41.380973,41.38088,41.380292,41.377381,41.371768,41.368415,41.367968,41.3669,41.367225,41.365064,41.361976,41.362961,41.360025,41.360349,41.359727,41.339982,41.339613,41.342071,41.34632,41.346804,41.347786,41.34465,41.339315,41.339152,41.339028,41.339004,41.336905,41.335357,41.333484,41.331339,41.331702,41.330515,41.330141,41.326711,41.325494,41.325582,41.326576,41.327807,41.329694,41.330107,41.331014,41.330044,41.331785,41.334756,41.335702,41.335612,41.336608,41.338867,41.340252,41.341084,41.343612,41.345806,41.347769,41.349531,41.351136,41.35193,41.357753,41.357948,41.350969,41.351959,41.350389,41.348507,41.347159,41.344489,41.342105,41.340795,41.341439,41.342706,41.34338,41.343084,41.344423,41.346645,41.344685,41.346523,41.350266,41.353044,41.356075,41.35865,41.359683,41.357102,41.359538,41.359907,41.361905,41.364904,41.367735,41.368881,41.370498,41.370293,41.371008,41.372535,41.37396,41.37528,41.375887,41.377285,41.377988,41.381578,41.385596,41.386606,41.384166,41.385586,41.389633,41.392883,41.397591,41.399526,41.40321,41.403233,41.401068,41.399301,41.397423,41.394758,41.392487,41.39231,41.390546,41.388366,41.389504,41.391488,41.393799,41.393229,41.391112,41.388466,41.385126,41.383221,41.379529,41.37802,41.372554,41.36962,41.367053,41.362892,41.362183,41.357165,41.355066,41.355551,41.356957,41.359878,41.362234,41.362458,41.364744,41.365219,41.364475,41.362597,41.360148,41.358271,41.357706,41.354726,41.352687,41.352158,41.352884,41.35151,41.347548,41.346267,41.343829,41.341881,41.341098,41.339276,41.336963,41.330324,41.328733,41.328551,41.331493,41.332145,41.334569,41.335163,41.336638,41.337264,41.33422,41.335245,41.337809,41.339278,41.344348,41.34627,41.347861,41.349943,41.348465,41.348342,41.350401,41.353187,41.354916,41.351787,41.356424,41.357287,41.352243,41.350321,41.348862,41.346947,41.347781,41.348889,41.351436,41.357147,41.357957,41.359384,41.360805,41.360117,41.360799,41.357404,41.357205,41.353834,41.352327,41.350219,41.347096,41.343233,41.342414,41.340866,41.337002,41.336223,41.333588,41.329966,41.32922,41.327476,41.328181,41.327609,41.325977,41.325837,41.327263,41.328545,41.328035,41.326125,41.323244,41.322663,41.324326,41.324217,41.322976,41.318618,41.316045,41.315694,41.313706,41.314239,41.312993,41.312998,41.312444,41.312087,41.31195,41.311824,41.311588,41.311374,41.31094,41.310298,41.310139,41.309887,41.309678,41.307346,41.307022,41.306539,41.30621,41.304942,41.304306,41.303878,41.303687,41.302153,41.3009,41.299103,41.298413,41.296646,41.295776,41.294419,41.294174,41.292393,41.288698,41.2875,41.284731,41.283695,41.281992,41.280587,41.280583,41.281892,41.280335,41.277415,41.275977,41.274683,41.273353,41.271974,41.271425,41.268467,41.268758,41.268039,41.268232,41.267704,41.268522,41.268159,41.266765,41.26446,41.261705,41.260238,41.2548110883025,41.250897,41.248704,41.2508252719589,41.2677190985594,41.2680547912502,41.268098,41.271698,41.2713214581773,41.2701407115218,41.268698,41.269517,41.270771,41.2704473738733,41.270435,41.2708396070327,41.271998,41.2719395290835,41.2718445052482,41.2690915429994,41.266998,41.265897,41.2657632719328,41.265013,41.268533,41.2689332022557,41.269663,41.271228,41.269383,41.269373,41.267086,41.267541,41.267361,41.269687,41.271458,41.273602,41.274478,41.274364,41.275928,41.27927,41.280872,41.280548,41.280899,41.28163,41.280933,41.281122,41.281196,41.279453,41.275959,41.274673,41.275097,41.274277,41.273991,41.273724,41.273411,41.272827,41.272411,41.271472,41.270176,41.270603,41.271832,41.271002,41.272464,41.273571,41.272616,41.270139,41.2661897563616,41.265673,41.2664347982888,41.266997,41.2655070704315,41.2653068843594,41.262251,41.254767,41.2552539257184,41.257597,41.2570332883862,41.251297,41.246886889506,41.247514,41.247536,41.24738,41.247086,41.246701,41.2454063780138,41.24497,41.2449571593806,41.246098,41.24658,41.247207,41.247789,41.247653,41.247114,41.247375,41.246454,41.246093,41.245331,41.2446909145879,41.2445261181446,41.245527,41.245758,41.247059,41.247718,41.248632,41.247648,41.248151,41.246929,41.2470881787654,41.2489060149168,41.249007,41.2507662221407,41.251012,41.253263,41.254358,41.256274,41.257999,41.259482,41.259933,41.257743,41.25643,41.2564912839493,41.2570707038881,41.257602,41.257917,41.259748,41.260406,41.261157,41.262459,41.262842,41.261724,41.26018,41.2585893457457,41.2581625145822,41.26034,41.260017,41.261151,41.257618,41.256916,41.258522,41.259499,41.25806,41.259251,41.256405,41.2547767297297,41.2551155253384,41.25555,41.255955,41.256435,41.256268,41.256271,41.256397,41.25631,41.2563519657844,41.2568890911528,41.257487,41.2604528257333,41.26096,41.259989,41.262367,41.2645,41.265541,41.266289,41.264867,41.261857,41.26104,41.258489,41.258227,41.260073,41.259774,41.259017,41.257584,41.255544,41.25909,41.264086,41.269492,41.270598,41.27229,41.27543,41.277039,41.276403,41.277017,41.279384,41.279854,41.281998,41.283797,41.286327,41.288146,41.288664,41.291335,41.291855,41.290594,41.291847,41.293909,41.293192,41.294197,41.298732,41.300283,41.30321,41.305219,41.306062,41.305331,41.307113,41.309064,41.310434,41.307396,41.304495,41.301457,41.301462,41.302579,41.299303,41.29754,41.297198,41.30804,41.307517,41.310443,41.310633,41.306889,41.305383,41.302766,41.302196,41.300789,41.300398,41.299097,41.300041,41.298819,41.298718,41.29746,41.296902,41.295938,41.295035,41.291462,41.286449,41.286964,41.285369,41.285573,41.283136,41.278578,41.277708,41.278274,41.27778,41.27636,41.274077,41.272754,41.271279,41.269521,41.265946,41.26557,41.267382,41.263195,41.26207,41.2619622103803,41.2621,41.2593171133295,41.258348,41.2604720862329,41.261501,41.262045,41.262631,41.2624024807446,41.26563,41.2656603125107,41.267176,41.266798,41.269012,41.269502,41.271758,41.2668743958377,41.2660478006068,41.267863,41.270159,41.266542,41.264956,41.265966,41.265794,41.2632759550897,41.265425,41.2649406165736,41.264796,41.262774246921,41.2621783194712,41.258705,41.2586291499533,41.260225,41.260249,41.260035,41.258349,41.2577621239595,41.2577413617226,41.257654,41.25709,41.256451,41.256013,41.255379,41.254983,41.254441,41.250201,41.2498988236737,41.251077,41.251474,41.250428,41.249664,41.251143,41.249595,41.24852,41.2502490275299,41.251048,41.251293,41.251465,41.251999,41.252633,41.253333,41.2540476631258,41.254061,41.255564,41.260671,41.263529,41.2629466241038,41.264111,41.263345,41.261563,41.260332,41.259627,41.259107428473,41.259063,41.254596,41.248341,41.248984513992,41.250478,41.251321,41.252047,41.254308,41.25297,41.251513,41.253455,41.255585,41.257063,41.256457,41.25913,41.258158,41.2566985340639,41.2566985274696,41.257123,41.25675,41.257264,41.257076,41.256694,41.256513,41.256073,41.255878,41.2553878953542,41.2531562989128,41.252371,41.256114,41.253999,41.254309,41.250155,41.248243,41.247386,41.2451440951344,41.2450553751765,41.2438895569373,41.244776,41.243496,41.2426412663547,41.242605207594,41.242597,41.2428486959079,41.244455,41.244582,41.244484,41.2434225892377,41.2436812272091,41.243697,41.245768818162,41.2458644172307,41.24649,41.246897,41.247707,41.246442,41.247744,41.250926,41.2528941916432,41.256197,41.2562604543135,41.259897,41.2639488595268,41.265756,41.270125,41.2714526429645,41.27636,41.2826929201672,41.283164,41.292183,41.2952539114803,41.296201,41.296737,41.289326,41.2823282877966,41.282003,41.2815765593094,41.27986,41.281929,41.281698,41.281986,41.2808688519725,41.280027,41.278009,41.276972,41.273052,41.2727597498342,41.271554,41.2681366596667,41.267892,41.2671340837161,41.2669424325739,41.26505,41.2624911439826,41.259803,41.258383,41.255086,41.252432,41.251597,41.2455100503179,41.2391495419898,41.233829,41.23331,41.234534,41.235574,41.2348282615352,41.235535,41.234519,41.237386,41.239001,41.240991,41.241596,41.244171,41.244909,41.245711,41.246683,41.249511,41.250077,41.252309,41.252779,41.254378,41.256815,41.2595,41.269716,41.273346,41.276596,41.281496]},{"lng":[-72.921334,-72.916025,-72.913069,-72.908839,-72.909646,-72.903657,-72.901942,-72.903599,-72.903286,-72.903838,-72.9063,-72.904601,-72.902776,-72.901544,-72.899073,-72.900159,-72.897429,-72.897266,-72.895438,-72.894191,-72.89477,-72.896969,-72.899679,-72.900036,-72.891444,-72.889068,-72.888195,-72.888007,-72.88637,-72.886301,-72.887797,-72.890945,-72.890433,-72.892885,-72.892791,-72.885813,-72.883076,-72.883515,-72.881652,-72.879427,-72.880141,-72.882757,-72.877345,-72.874213,-72.871564,-72.871403,-72.868096,-72.866244,-72.864049,-72.863684,-72.862021,-72.861782,-72.85831,-72.85436,-72.85136,-72.85546,-72.87061,-72.869927,-72.868068,-72.866716,-72.863542,-72.861924,-72.862587,-72.861386,-72.861902,-72.859322,-72.857524,-72.855877,-72.859412,-72.864955,-72.871584,-72.873787,-72.876739,-72.886667,-72.887617,-72.886702,-72.885912,-72.886117,-72.884831,-72.883383,-72.878127,-72.876644,-72.87738,-72.87351,-72.871264,-72.873083,-72.874128,-72.877943,-72.883634,-72.885479,-72.887175,-72.887423,-72.890417,-72.892964,-72.894485,-72.900987,-72.899311,-72.896735,-72.898038,-72.899579,-72.901308,-72.901792,-72.899998,-72.900199,-72.895635,-72.900098,-72.902538,-72.902095,-72.903131,-72.903683,-72.904895,-72.903857,-72.906781,-72.907137,-72.909369,-72.909842,-72.908238,-72.910397,-72.910775,-72.909726,-72.914256,-72.917012,-72.918589,-72.921334],"lat":[41.431137,41.428693,41.435082,41.436881,41.438532,41.439306,41.438216,41.434498,41.432928,41.429714,41.428512,41.420786,41.420517,41.418843,41.417355,41.416377,41.415339,41.416734,41.4142,41.415262,41.417646,41.416997,41.419495,41.420444,41.422494,41.420622,41.419694,41.416306,41.411295,41.410154,41.40985,41.406861,41.408568,41.405731,41.40398,41.405038,41.403797,41.408895,41.410081,41.414356,41.417721,41.423192,41.424481,41.426306,41.426271,41.425964,41.425687,41.425657,41.426202,41.42583,41.425502,41.425927,41.42953,41.430843,41.434382,41.435825,41.441751,41.443331,41.443224,41.445748,41.444848,41.442185,41.441085,41.440579,41.43945,41.438467,41.440706,41.444062,41.444915,41.446671,41.447412,41.446673,41.444233,41.447957,41.448343,41.448993,41.451271,41.451973,41.453043,41.451817,41.457515,41.459675,41.461182,41.46603,41.469466,41.469871,41.471167,41.470893,41.471603,41.474091,41.474983,41.476059,41.475451,41.474618,41.471331,41.471279,41.468298,41.467715,41.462573,41.459817,41.459346,41.456838,41.455102,41.453638,41.45138,41.452988,41.45232,41.450454,41.449988,41.447839,41.448453,41.449842,41.44923,41.450519,41.450641,41.449008,41.447176,41.446129,41.44154,41.43863,41.439372,41.436439,41.431895,41.431137]},{"lng":[-72.745452,-72.742223,-72.740489,-72.741832,-72.741141,-72.742189,-72.742584,-72.741151,-72.741517,-72.743597,-72.745452],"lat":[41.367051,41.36803,41.365484,41.362075,41.357145,41.3558,41.352987,41.351172,41.348526,41.346645,41.367051]},{"lng":[-72.707938,-72.705525,-72.7056,-72.705914,-72.706147,-72.706468,-72.706924,-72.707272,-72.707809,-72.708343,-72.707938],"lat":[41.429601,41.43008,41.429468,41.428839,41.428623,41.428589,41.428315,41.428462,41.429022,41.429443,41.429601]}],[{"lng":[-73.6924347867723,-73.686594,-73.683904,-73.681547,-73.677439,-73.673741,-73.674864,-73.670886,-73.669356,-73.666571,-73.663388,-73.662517,-73.660196,-73.657923,-73.654534,-73.655676,-73.657414,-73.654963,-73.653453,-73.651597,-73.649291,-73.648078,-73.646709,-73.645648,-73.644211,-73.642831,-73.642683,-73.640565,-73.640495,-73.640168,-73.640143,-73.640542,-73.640462,-73.640692,-73.642733,-73.642341,-73.640869,-73.639707,-73.64004,-73.640543,-73.641827,-73.643263,-73.64181,-73.642641,-73.64652,-73.648535,-73.642911,-73.648791,-73.652817,-73.651283,-73.653745,-73.654822,-73.655369,-73.659245,-73.661628,-73.665628,-73.662297,-73.66189,-73.654165,-73.651194,-73.648771,-73.638769,-73.637323,-73.638104,-73.639655,-73.642936,-73.642797,-73.644268,-73.641629,-73.641899,-73.640512,-73.642031,-73.641143,-73.639601,-73.640291,-73.637292,-73.637144,-73.63387,-73.628427,-73.627161,-73.625595,-73.626881,-73.626593,-73.624175,-73.622452,-73.622494,-73.620194,-73.61718,-73.611081,-73.608451,-73.607053,-73.605941,-73.60201,-73.60356,-73.599163,-73.603226,-73.606346,-73.606092,-73.603105,-73.601496,-73.597809,-73.597109,-73.595741,-73.595169,-73.598866,-73.598158,-73.598842,-73.600586,-73.600103,-73.59842,-73.597691,-73.599666,-73.600745,-73.601582,-73.600878,-73.601184,-73.599818,-73.598169,-73.596617,-73.596101,-73.594168,-73.591386,-73.591165,-73.59305,-73.597022,-73.595714,-73.594323,-73.596298,-73.596225,-73.6055792760596,-73.5970698847306,-73.595682,-73.59026,-73.58844,-73.588923,-73.586251,-73.58491,-73.582258,-73.578504,-73.576756,-73.575311,-73.571695,-73.570743,-73.570362,-73.571173,-73.573956,-73.5756220746875,-73.571909138331,-73.564941,-73.5546500736944,-73.553603,-73.551937,-73.550813,-73.550848,-73.542705,-73.542073,-73.538893,-73.535433,-73.533917,-73.531999,-73.52918,-73.530008,-73.53428,-73.533669,-73.534166,-73.536242,-73.5400811263874,-73.5237966673738,-73.514617,-73.5139431783104,-73.509487,-73.5039465925692,-73.502228,-73.501576,-73.498414,-73.496868,-73.496157,-73.495494,-73.492347,-73.493485,-73.491756,-73.492363,-73.4940080975092,-73.4874757682943,-73.4851229436582,-73.4849111933569,-73.482709,-73.5025525269551,-73.502022,-73.501708,-73.503443,-73.500857,-73.499413,-73.499343,-73.498351,-73.500032,-73.500313,-73.502126,-73.503531,-73.505193,-73.505,-73.506156,-73.508117,-73.507843,-73.511016,-73.513463,-73.514837,-73.515599,-73.5174274449493,-73.518384,-73.5237365661173,-73.5262955113812,-73.5368369261184,-73.5405370946926,-73.538816,-73.539511,-73.537552,-73.533763,-73.53257,-73.527047,-73.526922,-73.525729,-73.524536,-73.525426,-73.528971,-73.533714,-73.533601,-73.527668,-73.528963,-73.532282,-73.536102,-73.540755,-73.546346,-73.547252,-73.5493621478447,-73.548973,-73.5485829823632,-73.5481110375857,-73.54069,-73.536737,-73.540044,-73.541132,-73.539886,-73.538761,-73.53832,-73.535892,-73.535319,-73.53075,-73.531229,-73.532314,-73.533001,-73.527551,-73.527914,-73.52921,-73.53061,-73.529846,-73.525427,-73.521054,-73.518459,-73.515575,-73.515628,-73.512997,-73.512781,-73.510357,-73.50716,-73.503679,-73.499434,-73.50092,-73.499227,-73.496753,-73.492776,-73.49105,-73.489661,-73.489775,-73.488364,-73.489508,-73.488417,-73.488841,-73.48741,-73.486549,-73.482763,-73.484697,-73.483897,-73.484255,-73.479985,-73.478538,-73.479314,-73.479169,-73.477148,-73.474077,-73.473538,-73.474237,-73.471387,-73.46979,-73.469049,-73.467226,-73.467043,-73.464951,-73.46387,-73.462961,-73.462642,-73.462358,-73.460972,-73.459509,-73.456674,-73.453894,-73.450832,-73.45005,-73.450866,-73.448665,-73.446358,-73.453132,-73.451994,-73.450142,-73.450574,-73.454074,-73.456523,-73.45512,-73.450752,-73.44957,-73.448535,-73.445817,-73.446121,-73.445413,-73.444787,-73.444793,-73.444112,-73.44085,-73.439888,-73.439288,-73.43819,-73.431161,-73.427372,-73.425984,-73.42682,-73.428384,-73.426863,-73.426732,-73.424701,-73.424905,-73.422859,-73.421544,-73.420407,-73.421586,-73.421216,-73.42548,-73.423909,-73.416078,-73.415596,-73.41361,-73.414301,-73.414252,-73.413682,-73.412497,-73.412745,-73.409654,-73.407924,-73.404564,-73.404594,-73.403061,-73.399664,-73.397432,-73.394926,-73.393631,-73.390998,-73.385793,-73.383556,-73.380972,-73.379453,-73.374709,-73.372629,-73.374126,-73.370865,-73.366118,-73.364963,-73.36391,-73.363923,-73.360785,-73.360949,-73.360339,-73.357689,-73.357387,-73.360339,-73.361823,-73.363207,-73.3642,-73.36338,-73.361775,-73.356817,-73.356626,-73.354685,-73.351473,-73.350148,-73.350297,-73.345137,-73.344836,-73.343213,-73.342765,-73.341432,-73.336789,-73.333892,-73.331364,-73.332674,-73.334797,-73.335881,-73.336281,-73.339429,-73.342396,-73.345662,-73.339682,-73.336321,-73.336549,-73.333409,-73.331439,-73.327321,-73.324902,-73.325674,-73.327823,-73.325431,-73.326034,-73.327652,-73.32824,-73.329014,-73.330354,-73.3301,-73.330803,-73.331138,-73.330699,-73.331266,-73.330951,-73.331059,-73.331844,-73.330345,-73.330221,-73.328735,-73.330681,-73.332608,-73.337439,-73.336107,-73.335789,-73.332592,-73.330366,-73.328174,-73.325232,-73.322388,-73.318489,-73.317232,-73.312177,-73.310164,-73.303916,-73.30287,-73.304609,-73.305177,-73.303874,-73.302448,-73.30059,-73.296915,-73.295428,-73.286012,-73.297459,-73.299799,-73.302647,-73.306231,-73.309425,-73.310555,-73.314834,-73.317151,-73.31784,-73.318313,-73.301756,-73.299824,-73.296572,-73.295435,-73.29267,-73.290956,-73.289296,-73.286916,-73.285687,-73.282939,-73.281534,-73.275018,-73.270999,-73.270761,-73.268905,-73.267139,-73.263012,-73.262098,-73.263296,-73.264795,-73.269433,-73.279564,-73.277252,-73.2789,-73.278835,-73.276742,-73.273928,-73.270758,-73.267436,-73.268711,-73.266729,-73.265192,-73.26292,-73.260784,-73.257422,-73.25666,-73.253926,-73.255314,-73.251881,-73.248246,-73.247912,-73.243834,-73.246237,-73.246854,-73.24854,-73.25371,-73.270678,-73.271144,-73.271769,-73.271419,-73.272372,-73.272509,-73.273251,-73.272959,-73.273723,-73.273809,-73.274326,-73.274413,-73.27506,-73.275248,-73.274371,-73.265849,-73.265697,-73.263941,-73.266095,-73.266354,-73.264049,-73.261036,-73.258981,-73.253403,-73.25273,-73.253493,-73.254784,-73.254697,-73.255346,-73.254045,-73.252499,-73.249197,-73.24939,-73.25088,-73.250852,-73.252669,-73.25476,-73.255542,-73.259432,-73.262093,-73.26155,-73.261989,-73.264929,-73.26964,-73.268147,-73.268937,-73.270727,-73.270631,-73.274521,-73.279013,-73.283776,-73.297754,-73.297421,-73.299329,-73.300459,-73.30167,-73.299761,-73.297292,-73.296089,-73.294986,-73.292717,-73.293593,-73.2935,-73.296687,-73.295971,-73.296709,-73.292867,-73.290458,-73.286086,-73.285361,-73.283755,-73.278648,-73.276661,-73.274795,-73.272774,-73.272341,-73.271046,-73.270835,-73.272001,-73.271435,-73.269816,-73.269721,-73.272092,-73.270656,-73.269173,-73.271453,-73.275134,-73.275687,-73.278115,-73.281815,-73.283793,-73.282604,-73.282923,-73.281236,-73.279931,-73.276054,-73.274827,-73.274829,-73.277399,-73.275107,-73.272133,-73.269322,-73.267786,-73.266529,-73.265989,-73.267006,-73.266383,-73.259542,-73.248006,-73.246424,-73.247027,-73.247977,-73.24752,-73.244334,-73.242344,-73.242289,-73.238411,-73.235911,-73.229969,-73.226479,-73.220857,-73.220195,-73.217911,-73.216028,-73.218217,-73.221824,-73.22558,-73.229759,-73.230969,-73.232862,-73.232713,-73.230721,-73.234967,-73.232364,-73.230942,-73.22786,-73.22485,-73.224068,-73.229023,-73.227533,-73.228093,-73.224925,-73.223814,-73.220244,-73.218571,-73.219689,-73.223387,-73.223818,-73.225286,-73.224286,-73.219916,-73.211456,-73.210861,-73.211679,-73.213714,-73.212132,-73.214774,-73.215924,-73.215103,-73.212043,-73.20794,-73.206534,-73.204607,-73.202947,-73.206105,-73.209508,-73.210824,-73.210098,-73.211172,-73.21226,-73.213602,-73.215997,-73.216393,-73.218021,-73.223074,-73.223803,-73.220671,-73.219175,-73.220284,-73.2224,-73.222546,-73.223826,-73.223287,-73.223679,-73.227559,-73.231512,-73.230271,-73.229854,-73.23303,-73.235579,-73.238394,-73.239012,-73.241203,-73.243512,-73.242016,-73.246141,-73.245976,-73.245236,-73.247458,-73.245508,-73.246456,-73.249048,-73.25041,-73.250123,-73.251456,-73.252807,-73.253761,-73.255208,-73.25831,-73.258433,-73.25929,-73.258866,-73.25898,-73.259532,-73.257975,-73.257351,-73.255521,-73.254901,-73.253527,-73.254106,-73.255941,-73.26137,-73.271237,-73.272276,-73.268479,-73.262992,-73.260774,-73.259686,-73.259914,-73.257603,-73.255872,-73.251309,-73.250135,-73.24798,-73.245982,-73.244525,-73.242276,-73.24012,-73.2387,-73.237059,-73.23475,-73.232324,-73.231264,-73.229714,-73.22846,-73.227961,-73.225265,-73.2227,-73.220041,-73.218677,-73.215135,-73.211736,-73.212937,-73.209255,-73.205479,-73.205887,-73.204324,-73.203215,-73.201664,-73.19976,-73.197709,-73.197055,-73.196283,-73.197752,-73.20035,-73.19778,-73.19696,-73.194903,-73.193182,-73.188764,-73.188377,-73.192546,-73.191918,-73.19292,-73.191747,-73.192346,-73.192879,-73.196598,-73.197039,-73.192709,-73.18655,-73.184145,-73.18275,-73.180116,-73.176858,-73.170657,-73.159442,-73.15965,-73.157055,-73.150955,-73.147555,-73.139573,-73.138155,-73.136054,-73.126154,-73.124654,-73.123454,-73.122854,-73.120854,-73.115754,-73.114754,-73.096853,-73.09324,-73.090938,-73.086704,-73.085259,-73.082052,-73.078952,-73.077652,-73.075352,-73.067851,-73.066151,-73.065051,-73.065251,-73.068751,-73.071251,-73.078852,-73.083752,-73.086852,-73.088682,-73.087752,-73.087852,-73.086752,-73.08735,-73.09115,-73.093402,-73.101573,-73.104952,-73.107553,-73.109953,-73.110553,-73.110453,-73.108353,-73.110253,-73.110653,-73.109253,-73.110572,-73.115353,-73.118253,-73.120753,-73.121352,-73.122453,-73.122353,-73.121453,-73.119853,-73.116053,-73.1080084493287,-73.110352,-73.1100202017132,-73.107039,-73.1041943445566,-73.10109,-73.10302,-73.1043153747194,-73.104575,-73.104756,-73.105149,-73.106449,-73.10804,-73.108838,-73.109063,-73.109615,-73.1105413917178,-73.1108215128562,-73.116449,-73.118127,-73.120174,-73.1211783115229,-73.130253,-73.130255972157,-73.1389161713772,-73.1494729504704,-73.162979,-73.16441,-73.1647956314162,-73.1720222131426,-73.172196,-73.1721381285271,-73.170148,-73.168585,-73.166881,-73.167511,-73.170167,-73.169731,-73.171708,-73.172743,-73.175855,-73.177611,-73.17531,-73.176595,-73.180455,-73.177355,-73.179283,-73.1777541560296,-73.177774,-73.1787189356548,-73.184359,-73.1846121599728,-73.1857528196045,-73.186186,-73.1890832300949,-73.190153,-73.19685,-73.202733,-73.2026732851486,-73.213994,-73.2152850296227,-73.2155169569947,-73.216167,-73.216247,-73.21699,-73.217091,-73.216489,-73.210222,-73.206947,-73.206642,-73.211257,-73.214157,-73.216991,-73.217767,-73.219554,-73.223707,-73.222522,-73.225149,-73.2276276325472,-73.228295,-73.2342699568523,-73.2348411938807,-73.235058,-73.236588135665,-73.2422156793845,-73.242565,-73.2431750261472,-73.24602,-73.252451,-73.2556,-73.262139,-73.264055,-73.266478,-73.270892,-73.273549,-73.2755636502525,-73.2761354561139,-73.277713,-73.2860953484072,-73.286319367717,-73.286759,-73.2915774324206,-73.296359,-73.297458647259,-73.2975262590239,-73.2976901854783,-73.299559,-73.30664,-73.309602,-73.311576,-73.31363,-73.3176646238028,-73.320475,-73.3299945314077,-73.331548,-73.334544,-73.334143,-73.336123,-73.334991,-73.332932,-73.333298,-73.334525,-73.338843,-73.338757,-73.340253,-73.339911,-73.341828,-73.342734,-73.342748,-73.345587,-73.345767,-73.344591,-73.346274,-73.344953,-73.3470345062531,-73.350351,-73.3526336459335,-73.352671,-73.3529310090308,-73.3568235209679,-73.357071,-73.354466,-73.354532,-73.360941,-73.364613,-73.365486,-73.367837,-73.368463,-73.371235,-73.367695,-73.369042,-73.369399,-73.371038,-73.371863,-73.37269,-73.37318,-73.37529,-73.373122,-73.374564,-73.373844,-73.376776,-73.378841,-73.380616,-73.383155,-73.382452,-73.379251,-73.377453,-73.374393,-73.371336,-73.369144,-73.369208,-73.367495,-73.368493,-73.3672503278828,-73.365396,-73.369199,-73.3722143912961,-73.3787816283801,-73.379367,-73.382014,-73.381222,-73.377922,-73.376193,-73.381605,-73.382884,-73.383647,-73.385737,-73.385048,-73.385703,-73.3869,-73.387018,-73.388934,-73.388285,-73.389882,-73.389332,-73.390573,-73.389993,-73.390902,-73.387679,-73.389546,-73.386801,-73.38649,-73.3902607322749,-73.392162,-73.3927937704666,-73.392967,-73.398196,-73.3997345099662,-73.398419,-73.402488,-73.401565,-73.400308,-73.401164,-73.404037,-73.403745,-73.40582,-73.407242,-73.407439,-73.410248,-73.41167,-73.414472,-73.415399,-73.413797,-73.412048,-73.4126,-73.410532,-73.410337,-73.411557,-73.411544,-73.410859,-73.407924,-73.407896,-73.40916,-73.4077134735783,-73.4073016711971,-73.407228,-73.4081675708006,-73.408416,-73.411877,-73.413065,-73.414392,-73.416874,-73.415625,-73.415494,-73.418339,-73.420464,-73.421835,-73.421719,-73.423323,-73.420682,-73.424485,-73.423405,-73.424581,-73.424363,-73.426242,-73.428789,-73.429565,-73.430565,-73.429876,-73.430594,-73.430746,-73.432176,-73.434904,-73.432745,-73.433932,-73.4331301040929,-73.43325,-73.435063,-73.4352811544998,-73.4379849955389,-73.438152,-73.4385988351135,-73.440841,-73.4436931754112,-73.443694,-73.4466868081709,-73.450364,-73.4506365544591,-73.452283,-73.453697,-73.45366,-73.459592,-73.461224,-73.461508,-73.458607,-73.456243,-73.458542,-73.457672,-73.456678,-73.453981,-73.454583,-73.456186,-73.458101,-73.460494,-73.461879,-73.462554,-73.463294,-73.462771,-73.465433,-73.463794,-73.466174,-73.467385,-73.468218,-73.471911,-73.470316,-73.472452,-73.473102,-73.475608,-73.477404,-73.479352,-73.478548,-73.478831,-73.47753,-73.4764786573995,-73.477364,-73.4792182834994,-73.480059,-73.481379,-73.482542,-73.483862,-73.48279,-73.482132,-73.481082,-73.481728,-73.480561,-73.478849,-73.481041,-73.480685,-73.483294,-73.485035,-73.484686,-73.482822,-73.482568,-73.484823,-73.484581,-73.485908,-73.486748,-73.489967,-73.48882,-73.487124,-73.487637,-73.489819,-73.489139,-73.4908433250917,-73.493327,-73.4956630331328,-73.495857,-73.496682,-73.496975,-73.500778,-73.5000973891212,-73.5023182652403,-73.503093,-73.502576,-73.503489,-73.50392,-73.505988,-73.507362,-73.509269,-73.510182,-73.513003,-73.51842,-73.5181852503611,-73.5224274265734,-73.522978,-73.5226029007147,-73.521077,-73.5205949647912,-73.517156641692,-73.516766,-73.5188092730657,-73.5206650832346,-73.522370507094,-73.525131,-73.527045,-73.528815,-73.5292185791445,-73.531169,-73.5310470300616,-73.5303044939718,-73.530189,-73.5318478340212,-73.532201,-73.53175,-73.531544,-73.532366,-73.532982,-73.5344100876717,-73.535338,-73.5361079438119,-73.536257,-73.533898,-73.530306,-73.530136,-73.530993,-73.536985,-73.537574,-73.539704,-73.540298,-73.540879,-73.539872,-73.541329,-73.543974,-73.543661,-73.544654,-73.546119,-73.545091,-73.545323,-73.542621,-73.544318,-73.543912,-73.545058,-73.545862,-73.547631,-73.5471640629382,-73.547436,-73.5482853080191,-73.548574,-73.550582,-73.549698,-73.550045,-73.548327,-73.54879,-73.55035,-73.550278,-73.552939,-73.553359,-73.554729,-73.555592,-73.555686,-73.555324,-73.555991,-73.554454,-73.5547330362368,-73.55644,-73.557168,-73.560726718517,-73.561968,-73.5640016832044,-73.567668,-73.5679371028184,-73.570068,-73.5704465316084,-73.5721742792775,-73.5798976093122,-73.583968,-73.585115,-73.5876581088922,-73.593191,-73.5941402880043,-73.594196,-73.592526,-73.591547,-73.593069,-73.593084,-73.594048,-73.595005,-73.595439105875,-73.5956251100873,-73.596028,-73.593777,-73.593489,-73.595441,-73.594555,-73.594627,-73.596037,-73.59515,-73.595323,-73.596881,-73.59865,-73.601311,-73.600578,-73.600621,-73.601635,-73.601729,-73.600131,-73.602842,-73.603886,-73.603952,-73.6075146941375,-73.6143308544272,-73.614249,-73.616212,-73.614169,-73.612975,-73.611584,-73.61073,-73.608041,-73.61044,-73.612468,-73.612601,-73.614164,-73.613934,-73.615898,-73.61733,-73.616619,-73.617958,-73.619001,-73.619112,-73.620411,-73.62142,-73.621388,-73.622119,-73.624204,-73.625297,-73.6241860733442,-73.624943,-73.627086,-73.6294780368366,-73.629739,-73.630954,-73.631331,-73.632752,-73.633883,-73.633782,-73.634116,-73.6348086505547,-73.6380946373976,-73.639507,-73.640606,-73.641867,-73.641561,-73.644825,-73.644529,-73.64582,-73.646611,-73.646126,-73.649473,-73.649234,-73.651235,-73.6518688939798,-73.653722054959,-73.656829806646,-73.6570634178626,-73.657336,-73.6576158881351,-73.659671,-73.6590564797074,-73.6576680699537,-73.657228,-73.6595274390271,-73.659639,-73.659309,-73.660268,-73.656065,-73.655241,-73.655255,-73.6556623079508,-73.656117,-73.658679,-73.662672,-73.670472,-73.6787097923273,-73.6799646641282,-73.679973,-73.6817755657382,-73.6828708535385,-73.6828743005723,-73.687173,-73.6924347867723],"lat":[41.0570696907683,41.05941,41.05681,41.059681,41.060846,41.057682,41.059925,41.054798,41.053779,41.049875,41.051767,41.049462,41.04774,41.047792,41.053096,41.053471,41.055575,41.057159,41.0572,41.056154,41.05901,41.062168,41.060217,41.056463,41.054934,41.055473,41.056966,41.057227,41.058846,41.059783,41.060384,41.061208,41.06191,41.063078,41.064935,41.065379,41.065565,41.066465,41.068168,41.068506,41.068591,41.069096,41.076702,41.076515,41.073609,41.074587,41.077369,41.075276,41.082511,41.085123,41.084649,41.083166,41.079921,41.08008,41.078682,41.085916,41.086096,41.087658,41.093666,41.09563,41.095651,41.097701,41.097662,41.096538,41.096753,41.095982,41.092587,41.090612,41.085885,41.08495,41.082428,41.078106,41.076822,41.082455,41.083975,41.083839,41.086628,41.086358,41.087306,41.085601,41.08641,41.089058,41.090021,41.089611,41.089899,41.088615,41.08801,41.088044,41.088897,41.087693,41.093215,41.093693,41.093903,41.097307,41.099018,41.104387,41.108427,41.109302,41.110007,41.108435,41.106812,41.107206,41.108474,41.110729,41.115074,41.117294,41.121192,41.123581,41.125684,41.12888,41.132153,41.133388,41.134932,41.138274,41.141645,41.143759,41.146897,41.148145,41.14706,41.145695,41.146882,41.147192,41.149057,41.152119,41.150838,41.15335,41.153554,41.156266,41.157906,41.1568805991113,41.1607102809882,41.15807,41.159136,41.15873,41.161356,41.16312,41.160629,41.162329,41.163403,41.162611,41.160851,41.162612,41.164041,41.166639,41.169512,41.16869,41.1703629442923,41.1720339645246,41.17517,41.1799273346628,41.178671,41.179937,41.178929,41.176543,41.17014,41.169018,41.169601,41.169235,41.170521,41.170647,41.175627,41.177011,41.181584,41.184266,41.185353,41.185468,41.1866623316851,41.1941903830025,41.198434,41.1987466112322,41.200814,41.2032856449013,41.199511,41.200153,41.200783,41.199205,41.195863,41.197054,41.198699,41.200516,41.200902,41.205046,41.2077193315839,41.2106334851728,41.2116831096071,41.2117775740592,41.21276,41.2372113413152,41.237176,41.238262,41.242084,41.24324,41.245431,41.247615,41.248961,41.250816,41.252146,41.252371,41.253592,41.258276,41.259359,41.262526,41.266008,41.266883,41.263696,41.260051,41.260052,41.257505,41.255540325761,41.256719,41.2630780989483,41.266118245633,41.2786419394837,41.2830379128492,41.28407,41.285294,41.284556,41.286428,41.285875,41.287291,41.288789,41.290192,41.290238,41.292622,41.294968,41.296996,41.298557,41.305023,41.306623,41.309204,41.309912,41.313497,41.317429,41.318605,41.3195850090541,41.326297,41.329979244252,41.3344349810691,41.333799,41.336593,41.342609,41.346956,41.350632,41.350974,41.352975,41.353154,41.355652,41.354771,41.353383,41.353514,41.351889,41.350551,41.347655,41.34365,41.341712,41.336817,41.336664,41.337899,41.340242,41.340572,41.341891,41.34265,41.341186,41.338318,41.338825,41.339869,41.340133,41.341832,41.343381,41.343071,41.343737,41.343576,41.341503,41.339582,41.337129,41.33438,41.333662,41.330792,41.330847,41.32881,41.327421,41.325282,41.32319,41.319271,41.317316,41.317609,41.318864,41.320803,41.320984,41.326205,41.326238,41.325181,41.324824,41.325772,41.326015,41.327514,41.328149,41.329078,41.329167,41.329062,41.32888,41.328387,41.326439,41.326313,41.321695,41.321106,41.321752,41.31735,41.314392,41.313494,41.315092,41.307833,41.303966,41.300131,41.300303,41.300116,41.29837,41.296568,41.292389,41.293594,41.287234,41.287385,41.286021,41.280888,41.279062,41.2761,41.274154,41.268981,41.270282,41.269621,41.265187,41.26766,41.263068,41.263436,41.26527,41.266725,41.26869,41.270013,41.271446,41.27306,41.275788,41.276014,41.274535,41.271462,41.268589,41.264509,41.256402,41.258986,41.257516,41.256341,41.255282,41.251417,41.248558,41.246669,41.244852,41.243495,41.242056,41.240667,41.239486,41.237383,41.237827,41.236538,41.233184,41.233108,41.234335,41.235608,41.23572,41.236617,41.23638,41.238702,41.239099,41.242718,41.240555,41.245117,41.247616,41.248269,41.246198,41.244871,41.242532,41.241164,41.242342,41.24053,41.235127,41.234938,41.236403,41.235411,41.233968,41.234687,41.233653,41.231841,41.232978,41.233596,41.232187,41.230989,41.232614,41.237146,41.239308,41.244539,41.245625,41.240163,41.23582,41.233466,41.233207,41.231199,41.231764,41.230097,41.227563,41.226978,41.224695,41.21657,41.218194,41.219878,41.220488,41.219952,41.221528,41.220519,41.216213,41.214129,41.214802,41.213191,41.211138,41.212341,41.213425,41.21103,41.210612,41.210856,41.210437,41.208857,41.208183,41.207947,41.2075,41.205859,41.203972,41.201979,41.199068,41.197545,41.199098,41.193152,41.191451,41.191009,41.191676,41.1932,41.193881,41.192896,41.194621,41.198315,41.197735,41.199036,41.195672,41.197341,41.193803,41.194217,41.192861,41.191645,41.192216,41.19165,41.19314,41.191511,41.194344,41.207812,41.206683,41.206035,41.204222,41.208268,41.207209,41.208294,41.207491,41.208218,41.212742,41.212788,41.213794,41.216388,41.217471,41.216001,41.214404,41.211486,41.20868,41.207825,41.204441,41.203817,41.204199,41.2033,41.204207,41.208592,41.209216,41.211715,41.212876,41.21254,41.214459,41.220121,41.231594,41.234297,41.236694,41.239199,41.240387,41.23825,41.240135,41.242987,41.243965,41.246221,41.245706,41.248305,41.248142,41.245394,41.242685,41.241105,41.244481,41.244468,41.245716,41.246342,41.247488,41.25043,41.251009,41.253405,41.259135,41.279252,41.279521,41.280636,41.281124,41.2823,41.283826,41.284112,41.285638,41.286275,41.287993,41.288559,41.289673,41.290447,41.291628,41.293806,41.29471,41.29678,41.296839,41.303929,41.306223,41.306555,41.304955,41.305325,41.304209,41.307652,41.313502,41.316027,41.320668,41.323812,41.324961,41.329338,41.332564,41.336966,41.335847,41.334349,41.331413,41.329657,41.327687,41.325926,41.322656,41.321799,41.318674,41.322395,41.32096,41.319802,41.319082,41.319731,41.32322,41.322609,41.323545,41.322997,41.328701,41.333662,41.333431,41.333709,41.334375,41.335465,41.336627,41.338721,41.338459,41.340067,41.341183,41.343218,41.345876,41.348078,41.35074,41.350396,41.351079,41.356007,41.358341,41.359984,41.35966,41.362128,41.36211,41.364013,41.367111,41.367182,41.368653,41.371539,41.374125,41.376717,41.377985,41.379214,41.380249,41.383482,41.383574,41.385979,41.38833,41.390264,41.394148,41.395465,41.395668,41.397802,41.396998,41.398183,41.395067,41.398326,41.400934,41.404853,41.405241,41.406545,41.407508,41.406891,41.407227,41.407989,41.411967,41.413585,41.421066,41.432415,41.436234,41.43823,41.439005,41.439193,41.439558,41.436072,41.429841,41.426253,41.426153,41.429124,41.430309,41.429577,41.428497,41.427658,41.425702,41.42686,41.426937,41.427971,41.427751,41.427193,41.424546,41.423327,41.422734,41.421222,41.418473,41.419709,41.420675,41.420125,41.418669,41.417636,41.415024,41.412691,41.409266,41.406651,41.407369,41.406531,41.404955,41.405261,41.403307,41.402938,41.40044,41.40193,41.3997,41.39805,41.396488,41.396146,41.393653,41.394358,41.392608,41.391497,41.390892,41.388863,41.385784,41.385009,41.382229,41.383668,41.38167,41.381591,41.379262,41.377671,41.377651,41.374364,41.372051,41.370151,41.369597,41.370888,41.371959,41.372726,41.375768,41.376727,41.37999,41.382027,41.386439,41.387936,41.391714,41.392758,41.394852,41.39619,41.401362,41.406967,41.406514,41.40447,41.403334,41.403014,41.399929,41.396905,41.394615,41.389647,41.388562,41.385933,41.383593,41.382087,41.381997,41.38018,41.377564,41.374474,41.374826,41.3791,41.378325,41.37932,41.376772,41.373054,41.369694,41.368757,41.368474,41.367066,41.366384,41.364717,41.364406,41.364185,41.36399,41.363664,41.355112,41.349685,41.343525,41.344299,41.344331,41.343319,41.345745,41.348606,41.349297,41.347967,41.346362,41.345321,41.342013,41.340144,41.34263,41.344209,41.346889,41.351517,41.353406,41.357025,41.359482,41.361971,41.363414,41.365699,41.365168,41.365289,41.364055,41.36423,41.362852,41.362784,41.361552,41.365402,41.366217,41.361931,41.360976,41.361997,41.366233,41.365832,41.367785,41.367911,41.373923,41.376007,41.37847,41.380368,41.382151,41.382931,41.386499,41.387291,41.386971,41.386511,41.380039,41.376569,41.369729,41.365721,41.360684,41.359263,41.356602,41.355588,41.355361,41.358507,41.359134,41.358809,41.356846,41.358286,41.357934,41.372914,41.374905,41.376696,41.370196,41.367696,41.361211,41.353896,41.351196,41.346596,41.345296,41.343596,41.341396,41.338496,41.332196,41.331596,41.322596,41.321007,41.319256,41.314558,41.3137,41.313096,41.311596,41.307696,41.305596,41.300996,41.299496,41.297596,41.294896,41.289196,41.287296,41.284496,41.281496,41.276596,41.271737,41.265296,41.260096,41.254596,41.251792,41.246483,41.244617,41.240088,41.236595,41.232496,41.229396,41.227396,41.225296,41.218296,41.213996,41.207797,41.204097,41.20027,41.193497,41.190497,41.188497,41.187496,41.182897,41.179797,41.177597,41.175697,41.173697,41.1687516729814,41.159697,41.1592795731182,41.155529,41.1548652948806,41.154141,41.151412,41.1513128148092,41.151483,41.152015,41.152223,41.152454,41.152354,41.151953,41.151585,41.151091,41.1508360966252,41.1508146481067,41.151313,41.151109,41.150224,41.1486874616378,41.146797,41.1467978699705,41.1493327689006,41.1524228095969,41.157678,41.157961,41.1569078620246,41.1590231314105,41.159074,41.1593012665,41.160594,41.163504,41.164421,41.167046,41.168005,41.168615,41.16958,41.168577,41.170696,41.172322,41.176564,41.176733,41.171296,41.169096,41.168817,41.1666920845983,41.166697,41.1663703980941,41.164421,41.1637096024629,41.1605042677341,41.159287,41.15907749174,41.160574,41.159783,41.158163,41.1580830841613,41.149624,41.1459045180557,41.1452363306981,41.147176,41.148422,41.152215,41.152451,41.153423,41.1578,41.16083,41.161456,41.157796,41.155996,41.154859,41.153384,41.153587,41.150467,41.14836,41.145021,41.1425372228507,41.142602,41.1438335673299,41.143951311588,41.143996,41.1407749084968,41.1289283554932,41.128193,41.1278633152783,41.127544,41.125246,41.123248,41.118036,41.118251,41.119998,41.12068,41.120352,41.1214565058251,41.1221440760633,41.124041,41.1276131814183,41.1277086484136,41.127896,41.1267917759036,41.125696,41.1238300360574,41.1237153073438,41.1234371446415,41.120266,41.116522,41.114947,41.116588,41.116769,41.1161962804036,41.116148,41.1103979600176,41.111601,41.112312,41.113631,41.11665,41.119267,41.119137,41.121265,41.121533,41.119474,41.12251,41.122619,41.120797,41.120665,41.118765,41.116788,41.117595,41.114828,41.113829,41.112813,41.111095,41.1076577346387,41.106377,41.1016877368453,41.101611,41.1017396180365,41.1036651174745,41.105063,41.105168,41.106854,41.106198,41.106301,41.108831,41.10782,41.109094,41.108543,41.119591,41.119276,41.117559,41.115812,41.113243,41.112973,41.116843,41.116758,41.116366,41.114032,41.112539,41.111801,41.108613,41.104469,41.10593,41.103959,41.10449,41.102524,41.100471,41.099331,41.099447,41.097575,41.097581,41.101375,41.1003914724926,41.097343,41.095552,41.095518268805,41.0954448054523,41.097089,41.099314,41.09972,41.098159,41.099185,41.102515,41.100105,41.100382,41.099267,41.098262,41.096417,41.096852,41.094903,41.095035,41.0984,41.097945,41.096781,41.0957,41.094855,41.093126,41.093646,41.091884,41.093431,41.092575,41.0892586446472,41.087696,41.0833175559835,41.082117,41.081938,41.0834196879525,41.08593,41.086476,41.089363,41.090873,41.092613,41.092872,41.096095,41.097095,41.09939,41.096475,41.096102,41.096613,41.098949,41.098552,41.095499,41.09461,41.093232,41.092446,41.090525,41.08974,41.086457,41.084516,41.084529,41.082871,41.07972,41.079879896825,41.0761544756048,41.075488,41.0719448373851,41.071008,41.071008,41.075257,41.076136,41.07523,41.077042,41.078579,41.07595,41.078108,41.081166,41.078004,41.077647,41.076291,41.070933,41.070444,41.067265,41.066036,41.065959,41.063417,41.063851,41.067299,41.070538,41.070324,41.070428,41.069056,41.060739,41.060174,41.058641,41.055897694743,41.055808,41.056696,41.0566125942168,41.0555788498765,41.055515,41.0555728276755,41.055863,41.0576324884255,41.057633,41.0573920497769,41.057096,41.0568426336808,41.057844,41.057361,41.054891,41.052479,41.053226,41.054604,41.055604,41.058316,41.057684,41.059579,41.059249,41.061468,41.062028,41.06071,41.060616,41.058908,41.059045,41.061373,41.060621,41.058677,41.057908,41.059715,41.061263,41.060356,41.061202,41.061568,41.058399,41.058972,41.057903,41.0569,41.057927,41.054719,41.052662,41.043681,41.043728,41.0420801604485,41.035997,41.0365906100787,41.039802,41.041301,41.044578,41.045066,41.046318,41.049827,41.052259,41.053489,41.053704,41.055793,41.056778,41.056158,41.053082,41.053285,41.051231,41.05154,41.050639,41.050106,41.046658,41.04618,41.044571,41.043872,41.042616,41.043237,41.041172,41.040353,41.042467,41.0424594339553,41.048173,41.0467841986782,41.048646,41.049188,41.047042,41.045897,41.0441479178091,41.0428275787924,41.045031,41.048686,41.047419,41.043813,41.042628,41.03845,41.038468,41.03944,41.039633,41.039438,41.0384372252239,41.0374421468531,41.037313,41.036216313084,41.031755,41.0315025213404,41.0297016088937,41.029497,41.0259645618187,41.0227562120351,41.0198078521426,41.020153,41.019632,41.018205,41.0172423938497,41.021919,41.0227724161914,41.0279678957503,41.028776,41.0306245428022,41.031942,41.032589,41.034018,41.032697,41.032251,41.0318290994976,41.03192,41.0314274368082,41.034035,41.037148,41.040489,41.042146,41.040881,41.03571,41.0319,41.035326,41.03704,41.035634,41.033333,41.033059,41.03933,41.040367,41.042838,41.042657,41.038051,41.037128,41.029809,41.028398,41.02763,41.025917,41.02724,41.026829,41.0231913504021,41.022881,41.0231855202483,41.024858,41.025731,41.026499,41.027724,41.028602,41.031144,41.02824,41.026214,41.025347,41.023881,41.024891,41.028109,41.027593,41.025635,41.023876,41.023014,41.0220046273751,41.020776,41.017158,41.0168903547115,41.016797,41.0146919594902,41.010897,41.0098542265785,41.001597,41.0015779372571,41.0014909283817,41.0011019837037,41.000897,41.005464,41.0076522198727,41.012413,41.0137688012884,41.014504,41.014879,41.015412,41.015148,41.015817,41.016031,41.015372,41.0156238115009,41.0158894682347,41.017376,41.017433,41.019215,41.019321,41.023102,41.030812,41.030512,41.030669,41.029236,41.027786,41.027384,41.028015,41.026588,41.024337,41.024237,41.022453,41.017962,41.017374,41.018197,41.015054,41.0129855202932,41.0090280968679,41.009796,41.011065,41.012856,41.016162,41.016596,41.018183,41.019963,41.018524,41.016689,41.019325,41.021169,41.018094,41.018296,41.014205,41.01246,41.010367,41.010098,41.012755,41.014347,41.016861,41.0126,41.010958,41.010123,41.008215,41.0066426245998,41.00647,41.001809,41.0020536422548,41.002244,41.004122,41.004501,41.004491,41.003547,41.003053,41.002619,41.0025988233906,41.0029348931443,41.003632,41.007443,41.007564,41.009951,41.005836,41.004732,41.003821,41.001784,41.000499,40.997852,40.997506,40.995613,40.9940961992129,40.9910708635323,40.9859973744123,40.98561599775,40.985171,40.98549919431,40.987909,40.9886648876296,40.9903726941421,40.990914,40.9941805195637,40.994339,40.997171,41.000484,41.008923,41.011852,41.012246,41.0126660658565,41.013135,41.016706,41.020497,41.030097,41.040241423769,41.0417867347964,41.041797,41.0440251715376,41.0453790689573,41.0453833298741,41.050697,41.0570696907683]},{"lng":[-73.48732,-73.487122,-73.48838,-73.486859,-73.488598,-73.487087,-73.483808,-73.481361,-73.479615,-73.478018,-73.476167,-73.475221,-73.473306,-73.479391,-73.475182,-73.472331,-73.472347,-73.47063,-73.466358,-73.463103,-73.458881,-73.458629,-73.455943,-73.45463,-73.455975,-73.45516,-73.453691,-73.454324,-73.456097,-73.455224,-73.454257,-73.452032,-73.451232,-73.449029,-73.446514,-73.446572,-73.444369,-73.442748,-73.440887,-73.44181,-73.439586,-73.438372,-73.43644,-73.433812,-73.431827,-73.432888,-73.431911,-73.430856,-73.43102,-73.430239,-73.431265,-73.432659,-73.431617,-73.432025,-73.434468,-73.435638,-73.435187,-73.436794,-73.438488,-73.440343,-73.442097,-73.443753,-73.445902,-73.4428,-73.442262,-73.445651,-73.446071,-73.443712,-73.440329,-73.440049,-73.446752,-73.44648,-73.445193,-73.446103,-73.447885,-73.448183,-73.450411,-73.453763,-73.454329,-73.456488,-73.463409,-73.463926,-73.468251,-73.46744,-73.468278,-73.470304,-73.467976,-73.469404,-73.469066,-73.467345,-73.466959,-73.465024,-73.466232,-73.467512,-73.469433,-73.470242,-73.471174,-73.474004,-73.473882,-73.475519,-73.473226,-73.47207,-73.472186,-73.474958,-73.476723,-73.476939,-73.479932,-73.48975,-73.48732],"lat":[41.263426,41.261829,41.260933,41.259097,41.251294,41.249421,41.249772,41.246562,41.247346,41.24552,41.245169,41.24048,41.234851,41.229496,41.219411,41.219413,41.218012,41.213825,41.212209,41.211804,41.210087,41.214197,41.218455,41.219167,41.217833,41.21657,41.216532,41.215082,41.214055,41.210827,41.209636,41.208615,41.206902,41.205184,41.204026,41.202642,41.201846,41.202044,41.199815,41.19864,41.198163,41.195753,41.197473,41.197782,41.195625,41.196863,41.197873,41.196428,41.198616,41.205571,41.205793,41.209952,41.210163,41.212988,41.214408,41.216972,41.218673,41.220979,41.220441,41.221183,41.220287,41.218225,41.218707,41.221248,41.222568,41.224544,41.225504,41.228041,41.22979,41.231175,41.231484,41.234935,41.238899,41.239267,41.243714,41.24569,41.248905,41.248317,41.251904,41.257381,41.254378,41.252819,41.249564,41.247405,41.245775,41.24485,41.239568,41.237957,41.235377,41.235048,41.232861,41.232451,41.231342,41.233016,41.233702,41.237534,41.239949,41.242518,41.244115,41.246212,41.250278,41.252113,41.253652,41.256481,41.259733,41.262061,41.265923,41.266864,41.263426]},{"lng":[-73.420407,-73.420174,-73.419345,-73.420375,-73.417561,-73.412799,-73.410405,-73.407113,-73.414621,-73.415626,-73.412016,-73.412218,-73.415374,-73.416291,-73.415786,-73.420384,-73.420407],"lat":[41.274535,41.275128,41.277112,41.277847,41.280393,41.282578,41.281992,41.278414,41.275417,41.27093,41.265686,41.264439,41.263386,41.264319,41.268559,41.274451,41.274535]},{"lng":[-73.324869,-73.321594,-73.322785,-73.319706,-73.317775,-73.317023,-73.314403,-73.312688,-73.315032,-73.314761,-73.318313,-73.324035,-73.324869],"lat":[41.214689,41.218332,41.222073,41.226675,41.225418,41.222685,41.219994,41.217316,41.215572,41.214759,41.212742,41.213179,41.214689]},{"lng":[-73.465024,-73.464909,-73.462292,-73.461624,-73.462183,-73.4602,-73.459595,-73.456839,-73.460337,-73.456773,-73.455729,-73.450833,-73.450446,-73.4515,-73.454549,-73.455971,-73.460148,-73.459748,-73.461051,-73.463103,-73.46495,-73.465024],"lat":[41.232451,41.232709,41.235219,41.239294,41.240427,41.244316,41.24277,41.242097,41.235726,41.235589,41.236847,41.23591,41.233664,41.229957,41.229919,41.232875,41.232662,41.230005,41.229944,41.232021,41.232461,41.232451]},{"lng":[-73.708387,-73.707597,-73.703082,-73.702574,-73.699675,-73.695957,-73.695523,-73.696318,-73.697438,-73.697992,-73.694862,-73.695023,-73.6942630233972,-73.694273,-73.6946727798982,-73.706163059899,-73.7102985413629,-73.708387],"lat":[41.080896,41.080677,41.075793,41.074858,41.072441,41.072512,41.071491,41.070745,41.071844,41.070921,41.062571,41.060807,41.0592839170694,41.059296,41.0597965650438,41.0741835628326,41.0793616057238,41.080896]},{"lng":[-73.7170343653088,-73.713704,-73.709801,-73.705849,-73.708387,-73.710813,-73.7136819478232,-73.7140534619791,-73.716875,-73.7170343653088],"lat":[41.0877637529566,41.090043,41.091231,41.091129,41.080896,41.082289,41.0835979743119,41.0840631477749,41.087596,41.0877637529566]},{"lng":[-73.194021,-73.190913,-73.187919,-73.186804,-73.187117,-73.186198,-73.187117,-73.188878,-73.186794,-73.187366,-73.183615,-73.180947,-73.17828,-73.177477,-73.179124,-73.182044,-73.18396,-73.188764,-73.188529,-73.190062,-73.190892,-73.19096,-73.194021],"lat":[41.398864,41.398266,41.395427,41.393135,41.391401,41.390184,41.389118,41.388507,41.387829,41.38709,41.386757,41.385395,41.382287,41.380593,41.383047,41.385952,41.38649,41.386971,41.387397,41.388286,41.391422,41.394353,41.398864]},{"lng":[-73.229881,-73.228106,-73.226377,-73.227051,-73.22846,-73.229266,-73.229405,-73.229333,-73.228983,-73.228459,-73.22808,-73.228525,-73.229007,-73.229881],"lat":[41.375091,41.374412,41.371444,41.366912,41.365699,41.366386,41.366946,41.367511,41.368192,41.368242,41.368609,41.369855,41.370303,41.375091]},{"lng":[-73.385593,-73.382877,-73.380633,-73.382249,-73.3794821100463,-73.382787,-73.3826494939678,-73.383255,-73.383295,-73.384843,-73.385593],"lat":[41.093649,41.099716,41.096766,41.096048,41.0954369696256,41.0954,41.0951802303396,41.095683,41.095192,41.092782,41.093649]},{"lng":[-73.440417,-73.439978,-73.437801,-73.437974,-73.438833,-73.439888,-73.439888,-73.439911,-73.440409,-73.440417],"lat":[41.275101,41.27646,41.277228,41.276289,41.272583,41.270535,41.270282,41.270305,41.272686,41.275101]},{"lng":[-73.474164,-73.47368,-73.473199,-73.472831,-73.473287,-73.473325,-73.472976,-73.473151,-73.473538,-73.473284,-73.473443,-73.474325,-73.474164],"lat":[41.329801,41.329851,41.331976,41.332085,41.330026,41.329338,41.328002,41.326796,41.326238,41.327544,41.328115,41.32829,41.329801]},{"lng":[-73.450142,-73.450075,-73.448965,-73.448818,-73.449751,-73.450141,-73.450142],"lat":[41.300131,41.300087,41.297648,41.29624,41.296848,41.299795,41.300131]}],[{"lng":[-73.133006,-73.130591,-73.128692,-73.130217,-73.128571,-73.129136,-73.130403,-73.127285,-73.128872,-73.118857,-73.093853,-73.092353,-73.089113,-73.082955,-73.078131,-73.077825,-73.069844,-73.069024,-73.066074,-73.064209,-73.05801,-73.057424,-73.059458,-73.06015,-73.0607,-73.058946,-73.059469,-73.058024,-73.050362,-73.036156,-73.034777,-73.01865,-73.021471,-73.003146,-73.001876,-73.003518,-73.006849,-73.006329,-73.009825,-73.009247,-73.007456,-73.00422,-72.999627,-73.00211,-72.998594,-72.997731,-72.993505,-72.991225,-72.988868,-72.986332,-72.985787,-72.984313,-72.985637,-72.984674,-72.984004,-72.981577,-72.977552,-72.977689,-72.98081,-72.97736,-72.974658,-72.974959,-72.972954,-72.963009,-72.961549,-72.962488,-72.965935,-72.969161,-72.969547,-72.96944,-72.965301,-72.962654,-72.963875,-72.968067,-72.970313,-72.971136,-72.970899,-72.971718,-72.977298,-72.979909,-72.981886,-72.980672,-72.982448,-72.98281,-72.981289,-72.977891,-72.973167,-72.972504,-72.972973,-72.971145,-72.960209,-72.947752,-72.948146,-72.94736,-72.95364,-72.95231,-72.951738,-72.952806,-72.954847,-72.954391,-72.951907,-72.948247,-72.952647,-72.954389,-72.95388,-72.954546,-72.956236,-72.959433,-72.959844,-72.96166,-72.962105,-72.96022,-72.953985,-72.952322,-72.951238,-72.949639,-72.948697,-72.947274,-72.947703,-72.94959,-72.952506,-72.955167,-72.955324,-72.951962,-72.953281,-72.956561,-72.957715,-72.959241,-72.958466,-72.957985,-72.956971,-72.955358,-72.956418,-72.953445,-72.952636,-72.950747,-72.953565,-72.956206,-72.959286,-72.962028,-72.965863,-72.966633,-72.965735,-72.963018,-72.960363,-72.958935,-72.959271,-72.950908,-72.950141,-72.948988,-72.950178,-72.954178,-72.955713,-72.955217,-72.956033,-72.956932,-72.956455,-72.95933,-72.959002,-72.960954,-72.962991,-72.965795,-72.966816,-72.963074,-72.959803,-72.955906,-72.953182,-72.953708,-72.951918,-72.948022,-72.949155,-72.950396,-72.949895,-72.950068,-72.951201,-72.953647,-72.957338,-72.961058,-72.966755,-72.966019,-72.966192,-72.970856,-72.974692,-72.976016,-72.977355,-72.978692,-72.977156,-72.979036,-72.979063,-72.98116,-72.982922,-72.984277,-72.988506,-72.986575,-72.985562,-72.980009,-72.979876,-72.980829,-72.985822,-72.987006,-72.991297,-72.992183,-72.997032,-72.998709,-73.00226,-73.001811,-73.003503,-73.004229,-73.025751,-73.024952,-73.026142,-73.028553,-73.03116,-73.036072,-73.040977,-73.04255,-73.045052,-73.050013,-73.051792,-73.054367,-73.059145,-73.062223,-73.063916,-73.068062,-73.068457,-73.067413,-73.064873,-73.061485,-73.060936,-73.061768,-73.06044,-73.054977,-73.054031,-73.054184,-73.05291,-73.051224,-73.050924,-73.052046,-73.052457,-73.052921,-73.052904,-73.057654,-73.059323,-73.060119,-73.061566,-73.063144,-73.065381,-73.070957,-73.07131,-73.067987,-73.067857,-73.068678,-73.070355,-73.072015,-73.071944,-73.081252,-73.085926,-73.088779,-73.093978,-73.101868,-73.099592,-73.097384,-73.095404,-73.096038,-73.095757,-73.09552,-73.09895,-73.103888,-73.104706,-73.10718,-73.103689,-73.106076,-73.110025,-73.112561,-73.114795,-73.118757,-73.119485,-73.122638,-73.120825,-73.121944,-73.121824,-73.127883,-73.128604,-73.126652,-73.12594,-73.124029,-73.123708,-73.121882,-73.119222,-73.118254,-73.117084,-73.121163,-73.120771,-73.122862,-73.12627,-73.128074,-73.131453,-73.133006],"lat":[41.547914,41.548263,41.551199,41.554714,41.555847,41.558131,41.559776,41.559718,41.561337,41.56377,41.570196,41.570496,41.575654,41.585616,41.586799,41.58748,41.588112,41.588112,41.588321,41.588491,41.588647,41.589324,41.591605,41.593484,41.600811,41.602721,41.606179,41.60674,41.609748,41.615197,41.615134,41.614097,41.627104,41.629083,41.627191,41.626901,41.627374,41.625279,41.624523,41.621284,41.620182,41.616921,41.614675,41.611378,41.610443,41.612143,41.612797,41.613586,41.610186,41.610331,41.612737,41.610362,41.607604,41.605234,41.605309,41.60821,41.610395,41.612738,41.612807,41.617026,41.618244,41.619091,41.618954,41.626093,41.628018,41.631987,41.63046,41.630262,41.630895,41.632609,41.631799,41.632486,41.635282,41.634946,41.636033,41.635424,41.630314,41.628903,41.626058,41.625239,41.623432,41.627594,41.628496,41.630026,41.63073,41.633707,41.63694,41.638851,41.640461,41.640499,41.641969,41.643222,41.6406,41.63791,41.633672,41.632711,41.629675,41.627952,41.626327,41.622208,41.620414,41.619403,41.618889,41.616831,41.615429,41.611478,41.610402,41.606428,41.60409,41.603891,41.600794,41.596249,41.586564,41.583333,41.578129,41.576063,41.57276,41.564474,41.558935,41.557185,41.555892,41.555487,41.554293,41.553485,41.551079,41.552006,41.549876,41.549029,41.548013,41.544532,41.545309,41.544964,41.543282,41.542271,41.543473,41.541722,41.541433,41.540436,41.537902,41.536744,41.536753,41.535264,41.533556,41.532042,41.527531,41.526891,41.526365,41.523225,41.522506,41.521385,41.519469,41.518429,41.514531,41.51352,41.510258,41.509144,41.508022,41.504655,41.502958,41.502049,41.502049,41.501065,41.500116,41.499641,41.49878,41.498708,41.493127,41.491499,41.488801,41.479085,41.476294,41.474453,41.471834,41.469119,41.467303,41.46604,41.465325,41.461709,41.459521,41.462175,41.46625,41.48234,41.491514,41.495592,41.493912,41.493822,41.498434,41.500853,41.502661,41.503319,41.500522,41.500825,41.4923,41.491827,41.490563,41.489265,41.488536,41.48737,41.488711,41.490046,41.485766,41.485406,41.47629,41.473887,41.472705,41.471159,41.467092,41.462557,41.459596,41.450094,41.449405,41.446179,41.443386,41.439484,41.438793,41.43791,41.437812,41.436918,41.437467,41.436167,41.436145,41.441964,41.443199,41.444805,41.446006,41.449856,41.45245,41.454487,41.456764,41.456268,41.458057,41.461075,41.463261,41.465431,41.467991,41.474644,41.477088,41.481855,41.482048,41.482797,41.478837,41.478655,41.479288,41.478484,41.479309,41.477872,41.478251,41.482724,41.484195,41.48316,41.485502,41.486827,41.486532,41.488925,41.489836,41.493649,41.494646,41.496801,41.497851,41.496955,41.498036,41.500665,41.501501,41.507485,41.510483,41.511193,41.511931,41.515337,41.516985,41.517782,41.518608,41.520494,41.519483,41.525222,41.529109,41.528081,41.526058,41.527583,41.524832,41.524316,41.522489,41.521452,41.523841,41.523991,41.527498,41.527289,41.53369,41.53674,41.538064,41.541166,41.542206,41.543613,41.544992,41.546848,41.547379,41.545866,41.545542,41.547914]},{"lng":[-72.989143,-72.98793,-72.976058,-72.974213,-72.96831,-72.966755,-72.966937,-72.96836,-72.968524,-72.973171,-72.977122,-72.979862,-72.982529,-72.983775,-72.988027,-72.989143],"lat":[41.453388,41.456081,41.457086,41.456925,41.458967,41.459521,41.458878,41.453817,41.451335,41.43933,41.440104,41.439509,41.439956,41.445679,41.450585,41.453388]}],[{"lng":[-72.227991,-72.223496,-72.22609,-72.226813,-72.227794,-72.227945,-72.227576,-72.228794,-72.227991],"lat":[41.705752,41.702607,41.703338,41.70241,41.702719,41.702981,41.703627,41.704018,41.705752]},{"lng":[-72.241776,-72.240904,-72.239575,-72.237889,-72.236171,-72.239296,-72.240376,-72.241242,-72.241776],"lat":[41.708456,41.711026,41.712149,41.713117,41.711646,41.711193,41.710331,41.708515,41.708456]},{"lng":[-72.166975,-72.158827,-72.157546,-72.158271,-72.159424,-72.166975],"lat":[41.663703,41.658448,41.657627,41.656348,41.658001,41.663703]}],[{"lng":[-72.99574,-72.991294,-72.99068,-72.993058,-72.992782,-72.991385,-72.989788,-72.988065,-72.986086,-72.986444,-72.978358,-72.978934,-72.971476,-72.961364,-72.961558,-72.96447,-72.96104,-72.957474,-72.954918,-72.948016,-72.949793,-72.947661,-72.945987,-72.944054,-72.94172,-72.940094,-72.940999,-72.935364,-72.928359,-72.926551,-72.926951,-72.919957,-72.916379,-72.914476,-72.905025,-72.89827,-72.89983,-72.903959,-72.903601,-72.908735,-72.909951,-72.907494,-72.906442,-72.906674,-72.907698,-72.907462,-72.905394,-72.907376,-72.904246,-72.904927,-72.908424,-72.909349,-72.916437,-72.919615,-72.921331,-72.922797,-72.924182,-72.925931,-72.926436,-72.928732,-72.928504,-72.930458,-72.929491,-72.930957,-72.933645,-72.935672,-72.939612,-72.937194,-72.935443,-72.93844,-72.940141,-72.936661,-72.934043,-72.932605,-72.931538,-72.930475,-72.930926,-72.931857,-72.934529,-72.937076,-72.937637,-72.940214,-72.941861,-72.936985,-72.934153,-72.933945,-72.934723,-72.933195,-72.931471,-72.930741,-72.929863,-72.92923,-72.928034,-72.926942,-72.925229,-72.923165,-72.922256,-72.922997,-72.923087,-72.924572,-72.923699,-72.925134,-72.927385,-72.920607,-72.91977,-72.921183,-72.924133,-72.925901,-72.925594,-72.922175,-72.923207,-72.927838,-72.929729,-72.929682,-72.927171,-72.928081,-72.937258,-72.93762,-72.934619,-72.93514,-72.936027,-72.934196,-72.934975,-72.940073,-72.941232,-72.937529,-72.93641,-72.933929,-72.931946,-72.92996,-72.929605,-72.930538,-72.930267,-72.928202,-72.929978,-72.929185,-72.927277,-72.928096,-72.929955,-72.930231,-72.933297,-72.93679,-72.941689,-72.946526,-72.951569,-72.951935,-72.953844,-72.953647,-72.953523,-72.953294,-72.951932,-72.948681,-72.949913,-72.948023,-72.948742,-72.951934,-72.952528,-72.949903,-72.947562,-72.946368,-72.941961,-72.939292,-72.938719,-72.932895,-72.929791,-72.929844,-72.928265,-72.925138,-72.926136,-72.922912,-72.921026,-72.920709,-72.917476,-72.915736,-72.915818,-72.915701,-72.915429,-72.915069,-72.914702,-72.913681,-72.913349,-72.914491,-72.918751,-72.919903,-72.917731,-72.925479,-72.916814,-72.913654,-72.911072,-72.908144,-72.90774,-72.903894,-72.901966,-72.900426,-72.90138,-72.903098,-72.905734,-72.906879,-72.906639,-72.906156,-72.908329,-72.907876,-72.908566,-72.903188,-72.901422,-72.899443,-72.898334,-72.893162,-72.890009,-72.887816,-72.886252,-72.883501,-72.881158,-72.882058,-72.881615,-72.882852,-72.882874,-72.883959,-72.88458,-72.885913,-72.887483,-72.887005,-72.888002,-72.891909,-72.891569,-72.892915,-72.889033,-72.886167,-72.883619,-72.880758,-72.87867,-72.877588,-72.874339,-72.874872,-72.870771,-72.870201,-72.86286,-72.861528,-72.857578,-72.855397,-72.85236,-72.850761,-72.848566,-72.845942,-72.844942,-72.840313,-72.83813,-72.836913,-72.836796,-72.834084,-72.832344,-72.833292,-72.834842,-72.834139,-72.83396,-72.842157,-72.842877,-72.844682,-72.843079,-72.836667,-72.836263,-72.832871,-72.831515,-72.829584,-72.830334,-72.834685,-72.843706,-72.846401,-72.844291,-72.847016,-72.846362,-72.84774,-72.846988,-72.843587,-72.84416,-72.839103,-72.837394,-72.835591,-72.834749,-72.832648,-72.82928,-72.822224,-72.817244,-72.815411,-72.817841,-72.811621,-72.806788,-72.804296,-72.798884,-72.796966,-72.798472,-72.795335,-72.793719,-72.793236,-72.790864,-72.790957,-72.796654,-72.797142,-72.799145,-72.803622,-72.806356,-72.812124,-72.810609,-72.810352,-72.81361,-72.814698,-72.816183,-72.821656,-72.824392,-72.823351,-72.821538,-72.815559,-72.815323,-72.81192,-72.80719,-72.812012,-72.814384,-72.818443,-72.821693,-72.822685,-72.8224,-72.82176,-72.820833,-72.82279,-72.823042,-72.822465,-72.82301,-72.822766,-72.820823,-72.817891,-72.8163539318513,-72.816741,-72.8086150252177,-72.7747567856785,-72.774986,-72.783516,-72.796819,-72.799555,-72.800943,-72.800843,-72.800569,-72.79593,-72.797527,-72.797752,-72.796132,-72.795636,-72.791429,-72.792977,-72.792873,-72.792324,-72.791433,-72.789502,-72.786345,-72.786391,-72.785007,-72.784542,-72.782583,-72.779105,-72.780117,-72.783356,-72.782542,-72.780376,-72.778539,-72.777071,-72.775847,-72.773454,-72.771528,-72.773775,-72.768419,-72.773452,-72.773008,-72.774895,-72.777321,-72.779442,-72.780543,-72.780634,-72.780986,-72.781079,-72.77941,-72.778829,-72.781981,-72.780676,-72.782065,-72.782035,-72.790146,-72.791471,-72.790609,-72.789787,-72.791443,-72.789059,-72.788197,-72.78464,-72.78294,-72.78264,-72.782146,-72.781936,-72.778227,-72.775098,-72.774298,-72.773064,-72.772741,-72.77349,-72.7736,-72.772836,-72.771307,-72.770683,-72.770205,-72.769707,-72.769405,-72.772018,-72.772392,-72.775452,-72.77623,-72.77468,-72.774825,-72.772679,-72.771641,-72.771309,-72.768258,-72.768413,-72.766753,-72.765166,-72.766158,-72.765116,-72.761547,-72.761307,-72.761306,-72.760211,-72.759037,-72.758964,-72.759529,-72.760585,-72.765054,-72.766639,-72.768343,-72.768776,-72.774489,-72.780756,-72.783903,-72.786128,-72.787963,-72.789229,-72.791182,-72.793919,-72.792972,-72.794436,-72.789429,-72.787819,-72.786278,-72.786407,-72.78994,-72.79216,-72.798561,-72.799538,-72.801605,-72.80159,-72.803322,-72.807952,-72.808062,-72.809304,-72.809342,-72.810295,-72.81041,-72.808235,-72.80692,-72.808976,-72.810436,-72.81012,-72.80899,-72.809013,-72.81266,-72.81456,-72.817558,-72.818558,-72.819679,-72.819308,-72.819344,-72.820595,-72.823746,-72.823257,-72.82106,-72.819649,-72.819733,-72.822375,-72.8185,-72.817216,-72.817458,-72.8157,-72.813776,-72.811821,-72.809518,-72.807997,-72.807282,-72.808747,-72.807994,-72.808701,-72.809678,-72.810517,-72.816747,-72.818936,-72.814462,-72.807833,-72.808466,-72.80591,-72.804087,-72.802997,-72.801807,-72.803736,-72.805849,-72.808053,-72.807439,-72.810283,-72.810845,-72.81486,-72.817513,-72.821144,-72.825295,-72.825668,-72.83075,-72.832527,-72.832031,-72.832108,-72.830154,-72.830414,-72.829346,-72.82415,-72.822953,-72.824054,-72.828221,-72.830083,-72.830772,-72.830669,-72.83223,-72.832299,-72.833844,-72.835898,-72.839508,-72.844263,-72.845548,-72.853144,-72.855039,-72.850887,-72.846408,-72.845375,-72.846243,-72.835611,-72.834912,-72.834299,-72.83367,-72.829681,-72.828925,-72.829161,-72.829994,-72.827742,-72.827745,-72.828299,-72.830049,-72.833405,-72.836996,-72.839497,-72.84037,-72.84657,-72.854866,-72.859357,-72.859852,-72.859972,-72.861176,-72.859441,-72.859646,-72.857819,-72.857454,-72.855348,-72.856953,-72.857372,-72.846431,-72.840543,-72.837667,-72.835322,-72.834009,-72.831063,-72.826597,-72.828111,-72.827709,-72.82606,-72.824742,-72.823345,-72.824983,-72.822229,-72.823278,-72.826289,-72.824692,-72.822935,-72.819404,-72.81662,-72.816679,-72.813821,-72.812396,-72.812482,-72.8095,-72.808364,-72.804766,-72.807996,-72.805634,-72.804077,-72.796033,-72.793066,-72.791789,-72.789642,-72.788075,-72.787467,-72.783853,-72.781984,-72.782176,-72.781228,-72.774549,-72.775624,-72.778967,-72.779476,-72.782087,-72.781653,-72.78216,-72.780705,-72.78005,-72.780122,-72.776648,-72.779231,-72.77781,-72.777876,-72.779349,-72.777903,-72.77924,-72.779455,-72.778954,-72.777192,-72.775494,-72.775549,-72.774602,-72.774412,-72.775229,-72.776641,-72.778954,-72.785213,-72.785297,-72.781928,-72.780393,-72.779962,-72.781421,-72.78181,-72.774701,-72.776432,-72.779601,-72.781136,-72.782013,-72.783378,-72.782481,-72.783093,-72.78318,-72.783943,-72.784492,-72.782889,-72.780258,-72.776159,-72.775522,-72.774253,-72.771391,-72.771687,-72.771122,-72.770039,-72.770886,-72.770841,-72.770375,-72.769036,-72.767157,-72.7647,-72.762672,-72.762264,-72.758416,-72.752209,-72.742763,-72.741504,-72.744176,-72.743421,-72.744421,-72.743243,-72.74228,-72.743644,-72.744394,-72.744335,-72.750674,-72.754884,-72.758111,-72.75653,-72.756101,-72.753975,-72.751537,-72.749452,-72.750718,-72.749494,-72.7437,-72.741291,-72.740557,-72.738496,-72.733353,-72.731056,-72.7285,-72.725176,-72.719263,-72.717457,-72.716062,-72.715043,-72.713758,-72.710158,-72.70758,-72.706508,-72.705216,-72.701843,-72.70047,-72.697906,-72.695804,-72.694008,-72.689302,-72.688031,-72.688692,-72.68662,-72.686554,-72.687458,-72.687076,-72.68233,-72.679642,-72.677577,-72.673184,-72.671216,-72.668454,-72.669652,-72.66864,-72.666745,-72.6638,-72.662177,-72.659827,-72.661796,-72.664285,-72.665607,-72.667635,-72.666636,-72.661196,-72.658112,-72.657417,-72.65345,-72.648994,-72.647774,-72.647552,-72.648546,-72.650427,-72.649555,-72.646826,-72.643392,-72.642952,-72.638872,-72.636913,-72.636232,-72.637027,-72.638261,-72.639644,-72.63654,-72.634081,-72.631763,-72.631669,-72.634565,-72.639457,-72.64233,-72.644403,-72.645169,-72.647176,-72.648485,-72.64564,-72.646035,-72.639895,-72.639333,-72.639478,-72.633194,-72.631302,-72.630824,-72.628273,-72.62681,-72.622735,-72.6219,-72.621794,-72.620979,-72.609298,-72.606563,-72.611235,-72.618023,-72.615493,-72.604465,-72.604128,-72.606737,-72.607934,-72.611473,-72.612312,-72.613976,-72.611815,-72.607313,-72.603109,-72.605601,-72.603387,-72.599067,-72.595261,-72.587988,-72.556832,-72.55754,-72.565258,-72.563204,-72.559144,-72.553523,-72.548832,-72.547879,-72.547085,-72.54964,-72.544402,-72.541819,-72.541665,-72.539991,-72.538805,-72.539415,-72.535943,-72.537142,-72.536476,-72.535518,-72.534535,-72.531034,-72.531382,-72.529743,-72.525887,-72.521562,-72.516924,-72.51733,-72.51833,-72.501927,-72.49681,-72.498733,-72.49905,-72.50543,-72.507531,-72.487364,-72.485207,-72.476029,-72.473468,-72.472281,-72.46509,-72.470987,-72.472766,-72.470464,-72.470193,-72.473152,-72.475276,-72.475951,-72.477577,-72.475945,-72.47728,-72.480747,-72.489799,-72.489212,-72.490391,-72.488868,-72.490103,-72.487461,-72.486948,-72.490301,-72.491549,-72.4941,-72.495328,-72.496209,-72.496799,-72.499477,-72.498522,-72.502126,-72.50222,-72.50741,-72.511649,-72.515394,-72.512944,-72.509911,-72.509057,-72.511307,-72.511352,-72.510277,-72.516256,-72.517132,-72.5182,-72.517516,-72.517763,-72.508366,-72.507774,-72.505944,-72.505395,-72.503838,-72.505247,-72.510281,-72.511931,-72.516675,-72.519006,-72.520376,-72.522147,-72.524895,-72.52647,-72.526747,-72.523933,-72.519908,-72.514204,-72.509579,-72.50406,-72.498019,-72.493399,-72.489014,-72.485198,-72.484016,-72.483066,-72.480978,-72.476524,-72.474508,-72.473851,-72.471658,-72.467476,-72.465215,-72.468068,-72.467554,-72.471858,-72.467099,-72.465109,-72.459506,-72.456433,-72.454516,-72.452972,-72.452229,-72.451748,-72.448142,-72.451408,-72.464866,-72.46623,-72.4634,-72.463786,-72.461232,-72.461108,-72.462947,-72.461073,-72.462545,-72.46098,-72.469875,-72.471046,-72.47426,-72.475941,-72.472126,-72.471207,-72.478066,-72.480677,-72.48355,-72.483567,-72.484269,-72.484528,-72.484068,-72.487897,-72.494427,-72.495363,-72.499324,-72.495923,-72.497707,-72.501959,-72.503206,-72.507107,-72.511273,-72.514041,-72.51632,-72.518195,-72.516063,-72.517316,-72.521221,-72.520559,-72.518975,-72.517814,-72.51385,-72.513932,-72.51709,-72.517382,-72.519397,-72.521408,-72.522666,-72.524657,-72.527258,-72.521045,-72.519777,-72.523064,-72.526014,-72.526468,-72.531143,-72.533097,-72.536304,-72.535528,-72.534185,-72.532354,-72.532389,-72.534055,-72.537535,-72.542109,-72.543578,-72.544763,-72.545281,-72.546428,-72.544556,-72.542104,-72.540196,-72.54151,-72.541003,-72.541823,-72.541561,-72.543125,-72.543206,-72.543815,-72.545724,-72.548143,-72.550409,-72.550695,-72.548932,-72.551472,-72.55529,-72.558915,-72.561522,-72.563412,-72.563341,-72.563407,-72.563603,-72.563791,-72.564223,-72.564465,-72.564787,-72.564904,-72.566745,-72.566794,-72.566349,-72.568703,-72.570834,-72.571081,-72.572669,-72.575223,-72.577039,-72.578751,-72.579289,-72.58143,-72.58006,-72.57814,-72.578095,-72.582304,-72.589113,-72.591814,-72.596064,-72.596848,-72.599264,-72.604392,-72.603872,-72.600541,-72.601653,-72.604301,-72.603827,-72.607168,-72.608342,-72.607438,-72.605111,-72.605598,-72.605957,-72.605047,-72.630524,-72.627836,-72.630149,-72.647136,-72.650837,-72.713897,-72.71521,-72.715914,-72.715527,-72.713287,-72.713079,-72.711274,-72.712567,-72.712767,-72.713644,-72.715924,-72.714538,-72.723679,-72.727175,-72.72994,-72.73161,-72.739077,-72.74284,-72.752941,-72.752591,-72.753707,-72.758451,-72.767821,-72.779721,-72.777546,-72.774813,-72.772204,-72.770855,-72.7658,-72.765343,-72.766175,-72.767465,-72.768951,-72.769047,-72.773341,-72.774254,-72.774142,-72.771963,-72.77594,-72.777241,-72.777838,-72.779846,-72.785734,-72.785979,-72.788481,-72.789127,-72.78718,-72.785322,-72.783794,-72.782395,-72.780653,-72.780499,-72.778824,-72.77921,-72.784678,-72.788681,-72.788618,-72.790123,-72.791749,-72.791924,-72.793812,-72.795509,-72.799369,-72.799338,-72.802573,-72.803821,-72.805704,-72.80708,-72.806733,-72.805368,-72.805667,-72.79747,-72.794839,-72.793331,-72.793382,-72.795298,-72.799199,-72.799261,-72.802187,-72.804385,-72.803992,-72.802082,-72.792357,-72.788337,-72.78906,-72.793527,-72.794476,-72.798835,-72.797563,-72.809612,-72.811477,-72.812005,-72.814188,-72.814322,-72.814828,-72.815374,-72.815308,-72.816011,-72.816186,-72.816954,-72.817473,-72.817642,-72.817196,-72.819442,-72.820739,-72.822573,-72.846766,-72.846688,-72.848304,-72.847083,-72.846139,-72.846351,-72.845805,-72.841617,-72.840621,-72.838486,-72.834781,-72.834671,-72.833214,-72.833691,-72.832331,-72.830541,-72.83076,-72.829083,-72.828224,-72.827625,-72.825014,-72.826064,-72.821347,-72.821366,-72.819339,-72.82285,-72.822774,-72.819365,-72.818326,-72.820199,-72.82346,-72.824077,-72.820101,-72.818,-72.814476,-72.807452,-72.80519,-72.806075,-72.808174,-72.810339,-72.809366,-72.811589,-72.812694,-72.814272,-72.813329,-72.818126,-72.816162,-72.816261,-72.818382,-72.821055,-72.82408,-72.826507,-72.829846,-72.837951,-72.841276,-72.842337,-72.842099,-72.842852,-72.833874,-72.836535,-72.840244,-72.848541,-72.845741,-72.845295,-72.845149,-72.844147,-72.847035,-72.849831,-72.852707,-72.867806,-72.868227,-72.869514,-72.871916,-72.871857,-72.871823,-72.873306,-72.873956,-72.879748,-72.879256,-72.883885,-72.915648,-72.917271,-72.926399,-72.926569,-72.925666,-72.928909,-72.933072,-72.938605,-72.935389,-72.939033,-72.941313,-72.942536,-72.944682,-72.942615,-72.93924,-72.933686,-72.928284,-72.930661,-72.927221,-72.926911,-72.924204,-72.924374,-72.925044,-72.926295,-72.925654,-72.925673,-72.928338,-72.929156,-72.925195,-72.924924,-72.925512,-72.924095,-72.921955,-72.921613,-72.921701,-72.923136,-72.922663,-72.921346,-72.921496,-72.920688,-72.921954,-72.924489,-72.925071,-72.922623,-72.923649,-72.926204,-72.928133,-72.928604,-72.938501,-72.947752,-72.960209,-72.971145,-72.972973,-72.98325,-72.98555,-72.986661,-72.987394,-72.988249,-72.99325,-72.993549,-72.99574],"lat":[41.699155,41.699858,41.700941,41.703809,41.708273,41.709712,41.709954,41.70895,41.709161,41.710837,41.71196,41.71459,41.715618,41.71648,41.718037,41.719067,41.720124,41.718936,41.719624,41.720009,41.725494,41.725302,41.723133,41.723792,41.726048,41.726331,41.73157,41.727508,41.72834,41.724291,41.720376,41.721042,41.721404,41.721513,41.722177,41.723177,41.732046,41.729797,41.728468,41.727443,41.727587,41.730627,41.733926,41.737626,41.741047,41.74261,41.744854,41.746493,41.750236,41.75809,41.775662,41.775502,41.776841,41.777942,41.779647,41.782345,41.782291,41.781646,41.779574,41.775765,41.773226,41.771902,41.769469,41.766586,41.762467,41.762164,41.762454,41.764189,41.766451,41.766767,41.769542,41.774382,41.774202,41.77106,41.772732,41.772873,41.779763,41.780693,41.779202,41.779514,41.778839,41.778811,41.780178,41.782267,41.781885,41.783783,41.788601,41.79386,41.794363,41.797462,41.798234,41.795475,41.793701,41.789431,41.787518,41.783009,41.783047,41.78452,41.785217,41.787763,41.789892,41.799207,41.802829,41.80498,41.80695,41.807117,41.808723,41.809161,41.808445,41.806839,41.805177,41.803665,41.80158,41.803777,41.806413,41.808876,41.807892,41.808536,41.816917,41.818844,41.819437,41.823121,41.823771,41.825099,41.827275,41.837272,41.839988,41.838165,41.83403,41.831128,41.829107,41.826831,41.8248,41.824118,41.825904,41.828396,41.830102,41.83289,41.835822,41.835807,41.838659,41.840736,41.843327,41.843628,41.842758,41.843102,41.848578,41.853885,41.854207,41.85478,41.858226,41.858731,41.857295,41.856667,41.85413,41.855223,41.853646,41.852638,41.850711,41.848464,41.845026,41.843943,41.84267,41.83896,41.836197,41.840103,41.842408,41.84541,41.847287,41.84974,41.85047,41.85222,41.854342,41.856666,41.857055,41.857543,41.85779,41.857977,41.858103,41.858575,41.858694,41.857496,41.851277,41.850374,41.848646,41.840844,41.839039,41.839571,41.841985,41.843288,41.844179,41.84378,41.845091,41.845314,41.840634,41.840717,41.839094,41.83764,41.833314,41.831849,41.829725,41.826202,41.82517,41.826402,41.826432,41.82749,41.826648,41.824286,41.823626,41.823924,41.826065,41.833156,41.834424,41.836812,41.838414,41.840133,41.843574,41.845391,41.84825,41.849015,41.853764,41.856439,41.857915,41.858095,41.86062,41.863594,41.865484,41.865529,41.866658,41.865927,41.866403,41.868036,41.870927,41.884039,41.88325,41.881184,41.877079,41.875469,41.872913,41.872483,41.871045,41.872471,41.876033,41.874955,41.876061,41.87512,41.872743,41.873579,41.875713,41.873781,41.875278,41.877341,41.877709,41.879945,41.882989,41.884285,41.885254,41.885215,41.887153,41.887917,41.887829,41.884451,41.888249,41.889478,41.889655,41.88768,41.893732,41.896698,41.906381,41.906409,41.908067,41.909682,41.910316,41.909572,41.913491,41.912939,41.910908,41.911741,41.9109,41.911303,41.910584,41.91528,41.916705,41.916589,41.918692,41.918595,41.924367,41.928345,41.93127,41.932748,41.933419,41.935671,41.935625,41.940123,41.946094,41.948744,41.949555,41.952229,41.953841,41.952194,41.952171,41.953258,41.957508,41.96351,41.96772,41.967923,41.970633,41.970587,41.970914,41.977375,41.98434,41.978458,41.979691,41.981934,41.981506,41.982681,41.982021,41.983181,41.984982,41.986973,41.98902,41.990106,41.992214,41.994628,41.997974,42.001342,42.003325,42.006071,42.005585,42.003841,42.0023001762237,41.997595,41.9984725701737,42.0021291137822,42.00128,41.998441,41.995533,41.991236,41.985584,41.983806,41.98297,41.982847,41.981355,41.979763,41.980319,41.977384,41.977124,41.973072,41.969324,41.967512,41.966981,41.967625,41.967706,41.9713,41.972331,41.976387,41.98004,41.976461,41.973761,41.96769,41.964476,41.963215,41.964549,41.964521,41.962682,41.965482,41.960507,41.954195,41.953246,41.944061,41.940656,41.940098,41.942887,41.945617,41.944163,41.943272,41.942935,41.942214,41.941366,41.938626,41.928982,41.934243,41.935258,41.936911,41.937333,41.936098,41.935327,41.93175,41.922661,41.922064,41.920887,41.920197,41.918097,41.917997,41.920017,41.919985,41.917765,41.91792,41.917116,41.916281,41.916424,41.916737,41.917149,41.917351,41.917345,41.917202,41.917735,41.917933,41.917829,41.915005,41.911652,41.907017,41.904032,41.90491,41.907775,41.910008,41.912609,41.915331,41.917448,41.915621,41.914726,41.914994,41.914588,41.91259,41.910488,41.910303,41.909048,41.908839,41.907851,41.907269,41.907236,41.905705,41.902614,41.897597,41.899222,41.897659,41.898779,41.895021,41.894614,41.895431,41.894156,41.891693,41.889931,41.888445,41.886309,41.884293,41.883469,41.88224,41.879646,41.87775,41.873169,41.869656,41.869339,41.868543,41.865803,41.862297,41.858448,41.855271,41.855396,41.854327,41.85469,41.853291,41.851078,41.848789,41.845365,41.843845,41.841173,41.83812,41.833839,41.832672,41.828831,41.82793,41.826042,41.825184,41.822327,41.822434,41.820652,41.818417,41.814949,41.813896,41.813446,41.811752,41.81012,41.806739,41.805456,41.807479,41.809694,41.809712,41.811345,41.814398,41.814173,41.814723,41.812999,41.810598,41.810195,41.807906,41.809214,41.807768,41.807225,41.801841,41.801043,41.802426,41.805031,41.80503,41.802708,41.798982,41.797511,41.797643,41.79423,41.792454,41.79103,41.788051,41.785171,41.785462,41.784293,41.785608,41.786092,41.784256,41.784569,41.786022,41.787643,41.792404,41.797455,41.800274,41.803356,41.805325,41.80693,41.805613,41.804388,41.802835,41.800058,41.796534,41.793521,41.788075,41.788219,41.791073,41.790855,41.777963,41.775078,41.762099,41.758595,41.757632,41.758183,41.759429,41.761289,41.760041,41.758797,41.758925,41.758119,41.757697,41.757941,41.759227,41.759382,41.759118,41.752473,41.74378,41.742237,41.741633,41.742011,41.741527,41.736317,41.7397,41.741058,41.743281,41.740551,41.739981,41.731273,41.732798,41.73459,41.734428,41.730668,41.730077,41.727778,41.725191,41.719108,41.71672,41.716166,41.71998,41.721418,41.723398,41.727387,41.728594,41.729866,41.729202,41.730229,41.729809,41.726515,41.725354,41.723224,41.720562,41.719622,41.721318,41.721827,41.724414,41.72846,41.732926,41.737195,41.740811,41.741332,41.742325,41.743327,41.743223,41.745676,41.748626,41.748491,41.744651,41.746296,41.747769,41.748747,41.749482,41.74862,41.750356,41.748173,41.746086,41.750409,41.751925,41.752935,41.754669,41.755648,41.758999,41.760969,41.764213,41.768015,41.76973,41.770534,41.771104,41.7744,41.775793,41.776774,41.777403,41.779382,41.782553,41.783302,41.782912,41.778079,41.776376,41.776721,41.783144,41.788564,41.7906,41.790676,41.791567,41.792744,41.794033,41.797041,41.799468,41.800155,41.805006,41.805209,41.806402,41.806069,41.807049,41.808228,41.812089,41.815716,41.816314,41.821805,41.822431,41.826411,41.825538,41.825599,41.826585,41.829141,41.831576,41.829957,41.831608,41.83552,41.835521,41.840932,41.845542,41.852491,41.854054,41.854247,41.857158,41.862531,41.860591,41.856302,41.851351,41.850933,41.853454,41.854122,41.855423,41.85702,41.861603,41.862336,41.867121,41.871325,41.873296,41.871946,41.872098,41.87261,41.879896,41.883612,41.886311,41.887425,41.891192,41.89366,41.89681,41.892606,41.893282,41.893327,41.89239,41.88995,41.890339,41.89259,41.893898,41.894767,41.895711,41.897863,41.901469,41.902973,41.903797,41.905965,41.908929,41.910553,41.911481,41.913205,41.914253,41.914045,41.914692,41.912377,41.911411,41.90983,41.906016,41.90359,41.901966,41.900237,41.899134,41.899858,41.90157,41.901592,41.900982,41.898314,41.89579,41.893079,41.892316,41.892096,41.891398,41.888577,41.887403,41.890005,41.890252,41.889056,41.887574,41.883726,41.880028,41.875099,41.873329,41.87392,41.873623,41.871353,41.868998,41.866507,41.864531,41.86188,41.859661,41.858251,41.856986,41.855142,41.853144,41.850921,41.849912,41.84611,41.844736,41.845168,41.843757,41.843005,41.83776,41.832241,41.827709,41.821624,41.817157,41.811231,41.806095,41.805834,41.797599,41.798287,41.803665,41.805509,41.803261,41.803068,41.804473,41.802984,41.804433,41.812058,41.814758,41.820269,41.823473,41.819381,41.827178,41.826724,41.829054,41.836485,41.832716,41.833704,41.835695,41.837364,41.83791,41.839533,41.840066,41.845453,41.852337,41.860252,41.868038,41.868155,41.870085,41.868254,41.868313,41.869098,41.867132,41.862134,41.861466,41.862721,41.865497,41.867088,41.869284,41.871014,41.872027,41.878205,41.881357,41.878146,41.877806,41.875281,41.871849,41.8728,41.8751,41.876641,41.87643,41.873191,41.874191,41.883484,41.881495,41.875595,41.87423,41.873639,41.869897,41.856899,41.859457,41.860616,41.853329,41.850308,41.820298,41.809698,41.811751,41.812276,41.812997,41.798264,41.79096,41.750025,41.754958,41.757229,41.753567,41.751612,41.750588,41.752071,41.757399,41.759418,41.761939,41.764031,41.768012,41.765172,41.763903,41.762141,41.760574,41.759707,41.758235,41.756472,41.756838,41.754934,41.754744,41.752363,41.753052,41.755554,41.754955,41.753131,41.753207,41.751319,41.751266,41.750584,41.75038,41.749374,41.747218,41.745768,41.743669,41.742022,41.740502,41.739824,41.739935,41.737387,41.733056,41.730495,41.731339,41.727941,41.726587,41.723879,41.723344,41.722084,41.721516,41.72062,41.720255,41.720938,41.71878,41.717186,41.717564,41.714317,41.712123,41.711222,41.710912,41.709788,41.710137,41.709227,41.709855,41.709161,41.709914,41.709904,41.708567,41.708871,41.707695,41.70771,41.706851,41.709875,41.711946,41.710155,41.707979,41.707447,41.705626,41.705014,41.701004,41.700241,41.699104,41.697406,41.694897,41.69205,41.688799,41.687436,41.671954,41.670616,41.669031,41.678046,41.678407,41.675795,41.677292,41.678554,41.681282,41.685556,41.685962,41.687968,41.68679,41.693961,41.693706,41.694181,41.696069,41.699625,41.698757,41.698879,41.697077,41.693385,41.692573,41.695097,41.697129,41.694399,41.697352,41.698167,41.699773,41.701517,41.702068,41.705239,41.704686,41.706869,41.707351,41.706335,41.70655,41.704749,41.702418,41.699138,41.696371,41.692596,41.692714,41.688448,41.681613,41.680198,41.67883,41.676031,41.674154,41.670767,41.669944,41.667198,41.664916,41.662198,41.661019,41.662107,41.661283,41.661991,41.663041,41.663038,41.661788,41.659402,41.659067,41.656529,41.654832,41.656412,41.657325,41.662232,41.661646,41.663577,41.667051,41.668255,41.671056,41.671791,41.674062,41.675126,41.676456,41.679504,41.681589,41.680541,41.678678,41.676656,41.677852,41.680063,41.678355,41.680666,41.680825,41.684385,41.685762,41.681454,41.680955,41.679149,41.678522,41.677873,41.677187,41.676757,41.676082,41.675582,41.67463,41.674443,41.672843,41.672248,41.670496,41.670269,41.669052,41.667027,41.666201,41.66344,41.662267,41.662488,41.663512,41.663912,41.659039,41.657706,41.655916,41.657291,41.656349,41.658531,41.658164,41.658788,41.657733,41.657084,41.652873,41.65008,41.649531,41.649873,41.650999,41.649412,41.647972,41.647155,41.64827,41.646769,41.640331,41.635977,41.633282,41.640199,41.639784,41.637199,41.636899,41.627705,41.625885,41.624999,41.622821,41.620839,41.619286,41.617693,41.616684,41.614064,41.610736,41.606424,41.60431,41.603045,41.601994,41.601498,41.595865,41.594794,41.594398,41.592497,41.586558,41.584029,41.578271,41.577339,41.575936,41.578885,41.581155,41.583935,41.586524,41.600725,41.603639,41.606185,41.602504,41.60202,41.5995,41.597746,41.599308,41.601614,41.6066,41.605947,41.603833,41.601329,41.599306,41.598585,41.597436,41.596895,41.597479,41.600859,41.602206,41.602347,41.606121,41.607862,41.60971,41.610929,41.61246,41.612312,41.611718,41.609141,41.609009,41.61027,41.611428,41.611261,41.607853,41.607587,41.609739,41.609909,41.611642,41.60933,41.609392,41.610951,41.612192,41.613111,41.613893,41.613665,41.61434,41.62072,41.619427,41.620497,41.62331,41.624421,41.627094,41.628102,41.628534,41.629632,41.635878,41.643057,41.642707,41.643567,41.643033,41.647069,41.64605,41.64507,41.645918,41.645706,41.645699,41.645125,41.644656,41.644399,41.643944,41.643717,41.644174,41.64423,41.644614,41.645179,41.645579,41.655715,41.65571,41.653409,41.650404,41.650027,41.637561,41.634168,41.63164,41.629434,41.628975,41.629758,41.634106,41.633902,41.630825,41.630551,41.62745,41.624979,41.623189,41.620803,41.615898,41.61457,41.611108,41.609889,41.611587,41.611849,41.613459,41.614578,41.616838,41.617599,41.615599,41.606866,41.606895,41.604333,41.597013,41.598971,41.601272,41.60107,41.601844,41.601799,41.600177,41.598505,41.595872,41.595349,41.593266,41.590522,41.590547,41.589516,41.584931,41.590828,41.59341,41.595641,41.595414,41.596696,41.595816,41.593355,41.592587,41.593519,41.593273,41.58672,41.58417,41.583244,41.580535,41.569098,41.567329,41.553497,41.548528,41.547411,41.544697,41.545131,41.54533,41.546291,41.54898,41.552236,41.554531,41.554873,41.555569,41.556761,41.556486,41.559154,41.562454,41.563152,41.563812,41.560396,41.560101,41.558919,41.561668,41.563932,41.564236,41.563163,41.561547,41.563943,41.563893,41.564678,41.563183,41.562862,41.571126,41.569641,41.566263,41.570629,41.572609,41.573696,41.575354,41.575356,41.582061,41.58616,41.588399,41.591574,41.592161,41.59309,41.595615,41.595398,41.597161,41.605347,41.606927,41.610456,41.61893,41.623655,41.628027,41.62986,41.631763,41.635084,41.636805,41.64114,41.641004,41.642551,41.643628,41.644342,41.643713,41.643353,41.645454,41.644311,41.643222,41.641969,41.640499,41.640461,41.639598,41.649399,41.655884,41.659673,41.662997,41.687798,41.690197,41.699155]},{"lng":[-72.487404,-72.484347,-72.480541,-72.478674,-72.478322,-72.479887,-72.480715,-72.482566,-72.481535,-72.479137,-72.476359,-72.477923,-72.479465,-72.481504,-72.478318,-72.477849,-72.472725,-72.467813,-72.464866,-72.46185,-72.461423,-72.461437,-72.460054,-72.457524,-72.451795,-72.446393,-72.444968,-72.445182,-72.442454,-72.44288,-72.440714,-72.443491,-72.446463,-72.448608,-72.445833,-72.448474,-72.449275,-72.44521,-72.442575,-72.436279,-72.433853,-72.43302,-72.435765,-72.438885,-72.439755,-72.441562,-72.448719,-72.453379,-72.456772,-72.460833,-72.461977,-72.463453,-72.472301,-72.472042,-72.473095,-72.472191,-72.473714,-72.474477,-72.476375,-72.47784,-72.478077,-72.480127,-72.48508,-72.485448,-72.487294,-72.487404],"lat":[41.645195,41.645034,41.645652,41.64651,41.647794,41.647949,41.6501,41.650533,41.653619,41.655724,41.660243,41.663494,41.663473,41.667518,41.668429,41.666521,41.665265,41.667177,41.669031,41.653003,41.648459,41.640676,41.637266,41.635702,41.638314,41.638774,41.634201,41.633411,41.633921,41.630106,41.627618,41.629098,41.632465,41.631565,41.629506,41.62994,41.629309,41.627415,41.62513,41.617203,41.611347,41.610088,41.609981,41.612722,41.614105,41.614961,41.620028,41.627079,41.629881,41.627123,41.627197,41.624056,41.616146,41.619463,41.620927,41.623771,41.626137,41.630966,41.635767,41.638599,41.641024,41.638765,41.638641,41.640555,41.644201,41.645195]},{"lng":[-72.749094,-72.747168,-72.747525,-72.747156,-72.745413,-72.743711,-72.739621,-72.729646,-72.732296,-72.734369,-72.734448,-72.735137,-72.733447,-72.736239,-72.737444,-72.740581,-72.746206,-72.748137,-72.749094],"lat":[41.897448,41.900887,41.906513,41.909222,41.912388,41.914134,41.917232,41.914345,41.907348,41.907753,41.906753,41.904541,41.90413,41.89663,41.898945,41.902528,41.90101,41.89736,41.897448]},{"lng":[-72.801315,-72.799287,-72.799538,-72.799248,-72.79821,-72.792488,-72.794222,-72.794274,-72.792214,-72.794682,-72.795586,-72.799955,-72.801254,-72.801315],"lat":[41.865795,41.86831,41.868543,41.868752,41.869205,41.869282,41.867465,41.866093,41.866002,41.862719,41.858826,41.86095,41.862537,41.865795]},{"lng":[-72.478691,-72.476654,-72.476467,-72.474696,-72.474429,-72.473527,-72.472596,-72.472301,-72.472294,-72.473034,-72.471359,-72.473092,-72.473941,-72.478924,-72.478691],"lat":[41.629509,41.62957,41.621931,41.61948,41.615633,41.615033,41.615864,41.616146,41.616093,41.612059,41.610027,41.610214,41.612376,41.619056,41.629509]},{"lng":[-72.7727168826899,-72.7705168645667,-72.769356,-72.767395,-72.763573,-72.758453,-72.757462,-72.75203,-72.752405,-72.76415,-72.768715,-72.769083,-72.770592,-72.7727168826899],"lat":[42.0023494144929,42.0025870069465,42.001362,42.001015,41.999252,42.002308,42.003387,42.003247,42.000653,41.998178,41.997827,41.999475,42.001362,42.0023494144929]},{"lng":[-72.855583,-72.853291,-72.851765,-72.847238,-72.847055,-72.84711,-72.850041,-72.851663,-72.851595,-72.855084,-72.855583],"lat":[41.911751,41.916116,41.916344,41.913949,41.913942,41.913743,41.912979,41.908994,41.90592,41.907291,41.911751]},{"lng":[-72.760361,-72.758114,-72.75336,-72.749094,-72.749117,-72.749188,-72.749212,-72.754623,-72.758749,-72.760282,-72.760361],"lat":[41.905184,41.902314,41.900617,41.897448,41.897411,41.897299,41.897263,41.900795,41.902265,41.90368,41.905184]},{"lng":[-72.532389,-72.532048,-72.530124,-72.529349,-72.529633,-72.532135,-72.532326,-72.532389],"lat":[41.654832,41.654663,41.654013,41.653083,41.652541,41.654295,41.654606,41.654832]},{"lng":[-72.847055,-72.84653,-72.84588,-72.84416,-72.844461,-72.844784,-72.844969,-72.845765,-72.846858,-72.846597,-72.846958,-72.847055],"lat":[41.913942,41.913921,41.913859,41.913491,41.913313,41.912872,41.912868,41.913026,41.913139,41.91364,41.913696,41.913942]}],[{"lng":[-72.744192,-72.744734,-72.743072,-72.741037,-72.739077,-72.73161,-72.72994,-72.727175,-72.723679,-72.714538,-72.715924,-72.713644,-72.712767,-72.712567,-72.711274,-72.713079,-72.713287,-72.715527,-72.715914,-72.71521,-72.713897,-72.650837,-72.647136,-72.630149,-72.627836,-72.630524,-72.605047,-72.58805,-72.588635,-72.591708,-72.588975,-72.590473,-72.589234,-72.592446,-72.592735,-72.599539,-72.604543,-72.601644,-72.600737,-72.599132,-72.599163,-72.601943,-72.598361,-72.596551,-72.596066,-72.591869,-72.58509,-72.584082,-72.583343,-72.581259,-72.58024,-72.577896,-72.577812,-72.581459,-72.585573,-72.591512,-72.594106,-72.597887,-72.598329,-72.596352,-72.592819,-72.587367,-72.590261,-72.593187,-72.595899,-72.594787,-72.594685,-72.601354,-72.601548,-72.607302,-72.608229,-72.60788,-72.611068,-72.612298,-72.610339,-72.609338,-72.611829,-72.612535,-72.612389,-72.607053,-72.606591,-72.608247,-72.61232,-72.616686,-72.619246,-72.625669,-72.626253,-72.625399,-72.624536,-72.623848,-72.619757,-72.619745,-72.61344,-72.610856,-72.612496,-72.613693,-72.615871,-72.620163,-72.621654,-72.621447,-72.619572,-72.619033,-72.617495,-72.616927,-72.615111,-72.613336,-72.611801,-72.609167,-72.611241,-72.609575,-72.606286,-72.605047,-72.607116,-72.606146,-72.604533,-72.604803,-72.602344,-72.600253,-72.598814,-72.592869,-72.595084,-72.594381,-72.587721,-72.586086,-72.585855,-72.585109,-72.583748,-72.583185,-72.583479,-72.583426,-72.582927,-72.579806,-72.572362,-72.562553,-72.558405,-72.556692,-72.557596,-72.556542,-72.558916,-72.559644,-72.556708,-72.557138,-72.55686,-72.556204,-72.553174,-72.553642,-72.546715,-72.541671,-72.535636,-72.531563,-72.531712,-72.534042,-72.530094,-72.528174,-72.527679,-72.522747,-72.524429,-72.519436,-72.518234,-72.515207,-72.511858,-72.512974,-72.51471,-72.514392,-72.51386,-72.514034,-72.514476,-72.517281,-72.518649,-72.518698,-72.519752,-72.520381,-72.524709,-72.528891,-72.529091,-72.530318,-72.529689,-72.530797,-72.530234,-72.534452,-72.535343,-72.537593,-72.539862,-72.538642,-72.5391,-72.538779,-72.53907,-72.537516,-72.536413,-72.535004,-72.534988,-72.536144,-72.538468,-72.541099,-72.542846,-72.543141,-72.550853,-72.554449,-72.555097,-72.557687,-72.555815,-72.556258,-72.556382,-72.558164,-72.560012,-72.561777,-72.565729,-72.569237,-72.568459,-72.569045,-72.572133,-72.57331,-72.577736,-72.574507,-72.576365,-72.575022,-72.571957,-72.574072,-72.58325,-72.586414,-72.58674,-72.589632,-72.590443,-72.589271,-72.591848,-72.595097,-72.598593,-72.604839,-72.599304,-72.596561,-72.594021,-72.591328,-72.589334,-72.588401,-72.593133,-72.598749,-72.600589,-72.606796,-72.608604,-72.612845,-72.612607,-72.614018,-72.613446,-72.619583,-72.623333,-72.626513,-72.627872,-72.631092,-72.631941,-72.630086,-72.633461,-72.63356,-72.637265,-72.638755,-72.638768,-72.640246,-72.638149,-72.639729,-72.637846,-72.638479,-72.640863,-72.64771,-72.64869,-72.648512,-72.649167,-72.650906,-72.651987,-72.654848,-72.658585,-72.662429,-72.663317,-72.669134,-72.670022,-72.67177,-72.6734,-72.67782,-72.674985,-72.671706,-72.671501,-72.677595,-72.677896,-72.679054,-72.680459,-72.680313,-72.681269,-72.680863,-72.682575,-72.686435,-72.687362,-72.688199,-72.694554,-72.700899,-72.711334,-72.712268,-72.713119,-72.712152,-72.713379,-72.714432,-72.715341,-72.718365,-72.716895,-72.717063,-72.715756,-72.714939,-72.715247,-72.7133,-72.719108,-72.718736,-72.717135,-72.716141,-72.720781,-72.721162,-72.728255,-72.730065,-72.732619,-72.735748,-72.736209,-72.737397,-72.745728,-72.744192],"lat":[41.579376,41.580769,41.587018,41.591612,41.594794,41.595865,41.601498,41.601994,41.603045,41.60431,41.606424,41.610736,41.614064,41.616684,41.617693,41.619286,41.620839,41.622821,41.624999,41.625885,41.627705,41.636899,41.637199,41.639784,41.640199,41.633282,41.635977,41.637776,41.636375,41.634994,41.634058,41.63391,41.632027,41.632506,41.633689,41.632702,41.632331,41.625714,41.621029,41.616574,41.613771,41.609076,41.608866,41.609955,41.612083,41.614202,41.614961,41.616335,41.620462,41.621008,41.620227,41.616842,41.614724,41.614985,41.614644,41.61361,41.611905,41.607228,41.60196,41.598624,41.599468,41.599193,41.598312,41.599117,41.597474,41.592711,41.589848,41.589008,41.587046,41.586789,41.58895,41.590046,41.590573,41.588113,41.584462,41.580724,41.579749,41.578742,41.575198,41.57738,41.575521,41.575706,41.574258,41.570607,41.569755,41.568829,41.566817,41.562454,41.561015,41.560561,41.561129,41.558893,41.560501,41.556578,41.556542,41.55874,41.55937,41.558305,41.557311,41.555351,41.553143,41.549825,41.55014,41.548625,41.539532,41.540262,41.542672,41.539904,41.538028,41.536189,41.535597,41.533411,41.531496,41.530963,41.525852,41.524209,41.521269,41.516954,41.515479,41.512497,41.512134,41.510236,41.506515,41.505742,41.505862,41.50599,41.505885,41.505978,41.506407,41.507091,41.507174,41.5065,41.503034,41.497852,41.496785,41.499221,41.499613,41.503068,41.506019,41.507737,41.509344,41.510854,41.510906,41.509006,41.503659,41.503084,41.499514,41.499055,41.497233,41.495371,41.495146,41.491975,41.489118,41.486949,41.48439,41.48489,41.483379,41.481195,41.485364,41.48192,41.479637,41.477678,41.47621,41.471358,41.46873,41.466148,41.465817,41.46981,41.473992,41.477088,41.477517,41.476273,41.474655,41.473695,41.475846,41.47607,41.479399,41.479756,41.482962,41.481909,41.482587,41.478396,41.478787,41.482058,41.486711,41.487091,41.487449,41.48832,41.489522,41.490419,41.49095,41.493536,41.495121,41.496632,41.49685,41.496888,41.498096,41.497329,41.494032,41.489728,41.478751,41.47141,41.473014,41.474417,41.480513,41.483777,41.488735,41.493337,41.491534,41.490776,41.490859,41.489859,41.487541,41.490581,41.492238,41.494563,41.496388,41.497936,41.50388,41.505496,41.501755,41.500691,41.499743,41.498058,41.497923,41.497096,41.497168,41.498295,41.498755,41.501995,41.50282,41.504312,41.506299,41.506424,41.509089,41.512866,41.514537,41.522457,41.524223,41.527315,41.524952,41.524319,41.520189,41.520345,41.521341,41.520926,41.521892,41.522755,41.521089,41.519362,41.519275,41.521599,41.521135,41.523284,41.521387,41.518134,41.519933,41.516435,41.513512,41.512075,41.512523,41.511148,41.514025,41.516229,41.5208,41.519839,41.517531,41.516345,41.514016,41.512292,41.515406,41.515695,41.51037,41.506827,41.502232,41.496329,41.496078,41.497257,41.495685,41.494838,41.49623,41.507989,41.514708,41.5162,41.516869,41.522705,41.531089,41.535126,41.536157,41.538631,41.549531,41.54891,41.547887,41.548608,41.554091,41.562362,41.562694,41.565697,41.566223,41.565728,41.571091,41.57241,41.575757,41.579478,41.580988,41.583783,41.584097,41.585588,41.587938,41.588571,41.588642,41.590621,41.590257,41.589273,41.584214,41.583672,41.579903,41.577002,41.57596,41.579376]},{"lng":[-72.568151,-72.565877,-72.559963,-72.55856,-72.55627,-72.556883,-72.555134,-72.554793,-72.554696,-72.555164,-72.557793,-72.555142,-72.555774,-72.552064,-72.549414,-72.552021,-72.555065,-72.558568,-72.561144,-72.561578,-72.56248,-72.566795,-72.568151],"lat":[41.44298,41.448723,41.454057,41.456512,41.457705,41.45946,41.459984,41.460107,41.45981,41.451587,41.447851,41.447349,41.442995,41.440448,41.441518,41.439003,41.43412,41.430146,41.432859,41.437515,41.440274,41.441006,41.44298]},{"lng":[-72.559611,-72.557099,-72.558425,-72.556258,-72.556725,-72.557574,-72.557602,-72.5563,-72.554927,-72.554715,-72.553497,-72.550534,-72.549474,-72.553295,-72.554125,-72.554793,-72.556349,-72.558194,-72.559319,-72.559611],"lat":[41.46574,41.470578,41.473295,41.47141,41.470463,41.468964,41.467149,41.465295,41.465388,41.463655,41.463402,41.464025,41.462971,41.460466,41.460307,41.460107,41.463708,41.462633,41.46418,41.46574]},{"lng":[-72.722738,-72.720816,-72.719123,-72.719108,-72.719071,-72.719494,-72.721167,-72.722738],"lat":[41.578367,41.584292,41.584099,41.584097,41.58355,41.580663,41.578692,41.578367]}],[{"lng":[-73.133998,-73.133042,-73.132234,-73.130812,-73.129059,-73.128266,-73.126915,-73.126309,-73.125563,-73.125398,-73.121905,-73.119084,-73.113811,-73.113385,-73.111097,-73.111867,-73.110779,-73.106514,-73.103601,-73.102634,-73.100693,-73.098948,-73.098632,-73.099831,-73.098026,-73.095286,-73.092372,-73.091025,-73.087009,-73.083702,-73.076701,-73.075618,-73.075446,-73.072923,-73.071456,-73.068781,-73.069614,-73.068404,-73.066111,-73.064638,-73.064542,-73.06564,-73.064304,-73.064171,-73.062424,-73.05966,-73.059152,-73.057738,-73.056365,-73.058447,-73.056252,-73.052948,-73.052158,-73.053161,-73.053754,-73.052908,-73.0493,-73.046445,-73.046853,-73.045822,-73.043277,-73.040417,-73.039848,-73.040457,-73.041927,-73.040904,-73.041402,-73.043357,-73.046843,-73.048764,-73.051332,-73.04754,-73.051035,-73.051743,-73.049164,-73.048506,-73.047153,-73.043263,-73.042586,-73.044002,-73.050549,-73.051953,-73.051394,-73.051635,-73.055665,-73.05939,-73.06138,-73.061732,-73.064391,-73.064002,-73.066522,-73.06942,-73.069524,-73.072008,-73.074784,-73.077351,-73.076123,-73.07609,-73.077177,-73.079499,-73.077947,-73.077079,-73.07898,-73.080202,-73.079864,-73.080853,-73.081329,-73.081037,-73.082681,-73.093071,-73.094925,-73.100361,-73.105739,-73.106524,-73.108511,-73.112872,-73.115272,-73.121163,-73.116575,-73.113994,-73.111647,-73.110299,-73.111349,-73.120763,-73.122306,-73.125408,-73.129357,-73.13171,-73.132088,-73.133288,-73.133216,-73.133998],"lat":[41.675963,41.676436,41.676196,41.67652,41.676733,41.676936,41.677499,41.677879,41.67937,41.680097,41.682001,41.685009,41.69151,41.693312,41.694584,41.695723,41.694948,41.697438,41.696848,41.695716,41.695314,41.693158,41.694035,41.697107,41.696386,41.697262,41.695891,41.696245,41.698314,41.699271,41.703024,41.701586,41.699656,41.697271,41.693839,41.692203,41.688889,41.687776,41.687357,41.686089,41.684407,41.682539,41.68082,41.682978,41.689604,41.69193,41.69387,41.695207,41.698922,41.686544,41.684912,41.684976,41.681162,41.678611,41.674668,41.671961,41.671508,41.672559,41.674719,41.677146,41.67398,41.674369,41.672622,41.671327,41.671007,41.669289,41.667634,41.668916,41.669752,41.66935,41.667933,41.661957,41.657911,41.654639,41.654712,41.6557,41.653258,41.651778,41.649887,41.648802,41.649883,41.651497,41.650068,41.646208,41.646885,41.646853,41.646292,41.644902,41.643297,41.645528,41.647304,41.647501,41.648428,41.648726,41.646967,41.647498,41.651973,41.65343,41.656303,41.657249,41.65623,41.651645,41.644759,41.64229,41.641473,41.64221,41.645272,41.647451,41.647612,41.651602,41.654831,41.656598,41.657803,41.65686,41.657916,41.660874,41.661627,41.66231,41.662614,41.662179,41.662466,41.661939,41.663051,41.66299,41.663288,41.664781,41.664236,41.665452,41.667304,41.668842,41.674317,41.675963]},{"lng":[-73.04366,-73.041807,-73.04089,-73.041714,-73.040831,-73.036795,-73.034151,-73.033562,-73.032114,-73.029747,-73.029852,-73.026651,-73.026051,-73.028484,-73.022861,-73.022189,-73.018626,-73.015097,-73.011921,-73.007056,-73.004777,-73.004951,-73.006941,-73.007997,-73.000318,-72.999241,-72.99574,-72.993549,-72.99325,-72.988249,-72.987394,-72.990369,-72.993706,-72.997907,-73.003204,-73.002673,-73.006977,-73.008295,-73.011903,-73.015751,-73.017933,-73.019281,-73.022889,-73.025011,-73.031004,-73.029785,-73.029313,-73.02973,-73.032659,-73.032929,-73.035058,-73.036054,-73.03613,-73.040417,-73.040125,-73.042628,-73.043103,-73.04366],"lat":[41.683472,41.685427,41.687277,41.690994,41.692751,41.694291,41.694952,41.692649,41.689007,41.689351,41.690698,41.691698,41.689998,41.689275,41.688602,41.687901,41.689803,41.690727,41.690682,41.691219,41.691993,41.693902,41.699491,41.701662,41.702474,41.699695,41.699155,41.690197,41.687798,41.662997,41.659673,41.661125,41.660245,41.659987,41.661166,41.662212,41.663776,41.667623,41.668205,41.66817,41.668767,41.67012,41.670469,41.671137,41.672179,41.667899,41.660999,41.658943,41.65747,41.65645,41.654723,41.657114,41.675041,41.674369,41.676712,41.680086,41.682981,41.683472]},{"lng":[-73.03482,-73.032368,-73.030432,-73.032676,-73.033111,-73.031937,-73.033679,-73.012188,-73.011498,-73.01172,-73.014168,-73.016904,-73.014973,-73.016714,-73.016807,-73.018017,-73.01877,-73.024613,-73.025831,-73.027119,-73.028169,-73.033545,-73.033655,-73.032364,-73.032034,-73.034746,-73.03482],"lat":[41.870296,41.877271,41.884074,41.884264,41.887394,41.887513,41.88868,41.890207,41.88751,41.885296,41.882343,41.873847,41.8735,41.865765,41.864173,41.86458,41.866639,41.867809,41.869245,41.868557,41.870184,41.872396,41.870484,41.869662,41.868113,41.868583,41.870296]},{"lng":[-73.002994,-73.00027,-73.002546,-73.00261,-73.001248,-72.999255,-73.000706,-72.999954,-72.996157,-72.994146,-72.992366,-72.992706,-72.990891,-72.990857,-72.987595,-72.987783,-72.991145,-72.990869,-72.986661,-72.98555,-72.98325,-72.999222,-73.002414,-73.003531,-73.002994],"lat":[41.63849,41.641674,41.64419,41.645394,41.646158,41.64554,41.647105,41.64863,41.649044,41.650716,41.651019,41.651959,41.65251,41.653494,41.653946,41.6549,41.654426,41.655683,41.655884,41.649399,41.639598,41.631122,41.631683,41.634775,41.63849]},{"lng":[-72.988206,-72.98451,-72.984154,-72.983322,-72.981585,-72.980557,-72.972623,-72.973598,-72.973906,-72.975077,-72.977151,-72.976895,-72.974804,-72.973051,-72.969675,-72.968278,-72.965052,-72.961874,-72.960277,-72.963587,-72.964651,-72.964085,-72.964247,-72.96125,-72.960885,-72.954245,-72.954187,-72.957404,-72.958721,-72.95862,-72.956117,-72.953523,-72.953647,-72.955263,-72.956714,-72.957792,-72.958794,-72.959298,-72.95823,-72.958384,-72.9591,-72.963668,-72.96638,-72.967832,-72.97134,-72.97732,-72.979286,-72.9818,-72.982588,-72.980321,-72.980318,-72.98424,-72.985282,-72.985669,-72.989577,-72.988206],"lat":[41.896694,41.892155,41.890784,41.886722,41.888274,41.89245,41.893008,41.888538,41.885014,41.883104,41.882314,41.881125,41.88169,41.881327,41.882146,41.88071,41.879987,41.879893,41.878878,41.878854,41.878125,41.87565,41.874998,41.872336,41.870666,41.866798,41.865702,41.862743,41.859993,41.858787,41.855041,41.854207,41.853885,41.854338,41.854959,41.855449,41.856262,41.858933,41.865706,41.86699,41.867886,41.870164,41.872118,41.87528,41.877697,41.877452,41.875486,41.875451,41.875936,41.87813,41.879602,41.887599,41.892099,41.89269,41.896619,41.896694]},{"lng":[-73.012842,-73.01114,-73.007508,-73.00593,-72.999815,-72.996882,-72.993161,-72.989577,-72.990813,-72.992034,-72.994904,-72.998041,-72.997275,-72.997548,-73.012188,-73.016041,-73.012842],"lat":[41.900549,41.900959,41.900865,41.900471,41.899966,41.900954,41.900908,41.896619,41.895435,41.898164,41.899716,41.899969,41.896256,41.891182,41.890207,41.898502,41.900549]},{"lng":[-73.038705,-73.0311,-73.032401,-73.033044,-73.028354,-73.026294,-73.022656,-73.021712,-73.023996,-73.028597,-73.034151,-73.037199,-73.036563,-73.038705],"lat":[41.710004,41.710876,41.710506,41.706194,41.706493,41.702459,41.699275,41.697434,41.696716,41.696632,41.694952,41.702209,41.708922,41.710004]},{"lng":[-72.957202,-72.956083,-72.955337,-72.954586,-72.951932,-72.953294,-72.956392,-72.957202],"lat":[41.859039,41.859712,41.861042,41.857974,41.858226,41.85478,41.857859,41.859039]},{"lng":[-73.038408,-73.034784,-73.033679,-73.035706,-73.035277,-73.035163,-73.03564,-73.035823,-73.036502,-73.036939,-73.040046,-73.038408],"lat":[41.890454,41.891769,41.88868,41.88857,41.887318,41.884977,41.88539,41.886339,41.888487,41.890788,41.889283,41.890454]},{"lng":[-73.016807,-73.016657,-73.011936,-73.010474,-73.012443,-73.012184,-73.014212,-73.015057,-73.016809,-73.016807],"lat":[41.864173,41.864105,41.863037,41.861523,41.862302,41.862889,41.863354,41.86311,41.863844,41.864173]}],[{"lng":[-72.417568,-72.413454,-72.409568,-72.410367,-72.414288,-72.417172,-72.418413,-72.417568],"lat":[41.605547,41.607143,41.607999,41.602581,41.60213,41.602529,41.604581,41.605547]}],[{"lng":[-72.446554,-72.442768,-72.438068,-72.429743,-72.431124,-72.431932,-72.434242,-72.432288,-72.437635,-72.438262,-72.442143,-72.443946,-72.446853,-72.446554],"lat":[41.550657,41.549038,41.549554,41.548471,41.548393,41.546531,41.546271,41.542825,41.541783,41.543764,41.543334,41.546422,41.550377,41.550657]}],[{"lng":[-72.585657,-72.582618,-72.582173,-72.579647,-72.579201,-72.57746,-72.578257,-72.576829,-72.577621,-72.573739,-72.573292,-72.570135,-72.571541,-72.574417,-72.573581,-72.558821,-72.552098,-72.554319,-72.556715,-72.557969,-72.563818,-72.566469,-72.568041,-72.567075,-72.565024,-72.562949,-72.562316,-72.563524,-72.568523,-72.57033,-72.573034,-72.574822,-72.57041,-72.565202,-72.562903,-72.559866,-72.554885,-72.554585,-72.553244,-72.551614,-72.549044,-72.548498,-72.548802,-72.531728,-72.530901,-72.530888,-72.529411,-72.526817,-72.523732,-72.521593,-72.515758,-72.515419,-72.513476,-72.513015,-72.515239,-72.516285,-72.518723,-72.518277,-72.51699,-72.516277,-72.515239,-72.513437,-72.509941,-72.509197,-72.506491,-72.505619,-72.503181,-72.502947,-72.500691,-72.49956,-72.498405,-72.497505,-72.498448,-72.496454,-72.494514,-72.493344,-72.493311,-72.491692,-72.492977,-72.490616,-72.489358,-72.490375,-72.489503,-72.487312,-72.485952,-72.488256,-72.488383,-72.490404,-72.493306,-72.494302,-72.493115,-72.492968,-72.492225,-72.497855,-72.499579,-72.499559,-72.498815,-72.498174,-72.4985,-72.496547,-72.497342,-72.496534,-72.495251,-72.496734,-72.495744,-72.494277,-72.49163,-72.489784,-72.487691,-72.4829,-72.479219,-72.479205,-72.480875,-72.485998,-72.487288,-72.488109,-72.492221,-72.493862,-72.493052,-72.491462,-72.492481,-72.489911,-72.488528,-72.487606,-72.485451,-72.483872,-72.483289,-72.480603,-72.478776,-72.479532,-72.478826,-72.473823,-72.473376,-72.472313,-72.47272,-72.476059,-72.476923,-72.475326,-72.472794,-72.470188,-72.470344,-72.468795,-72.466134,-72.46283,-72.459732,-72.45778,-72.458235,-72.456115,-72.450752,-72.450159,-72.452097,-72.452698,-72.453562,-72.455112,-72.458643,-72.460047,-72.461379,-72.460205,-72.461365,-72.458672,-72.457537,-72.454225,-72.45373,-72.452239,-72.452019,-72.450237,-72.447377,-72.447116,-72.44495,-72.445617,-72.447073,-72.443153,-72.441185,-72.439662,-72.439443,-72.443457,-72.441205,-72.439481,-72.439604,-72.438418,-72.437545,-72.435346,-72.432924,-72.430315,-72.428879,-72.428366,-72.425525,-72.426473,-72.431892,-72.433129,-72.432611,-72.430298,-72.429281,-72.427612,-72.424012,-72.42135,-72.421368,-72.42397,-72.423326,-72.420563,-72.417763,-72.415288,-72.413635,-72.414132,-72.410765,-72.409115,-72.405818,-72.397024,-72.393977,-72.395249,-72.393381,-72.389917,-72.392018,-72.389171,-72.387854,-72.38658,-72.384058,-72.382423,-72.383849,-72.384276,-72.38215,-72.383085,-72.382588,-72.378447,-72.377828,-72.378952,-72.381363,-72.381953,-72.381009,-72.379585,-72.378902,-72.377477,-72.377217,-72.377091,-72.37592,-72.374396,-72.373215,-72.371671,-72.373397,-72.369905,-72.370887,-72.369437,-72.371517,-72.370302,-72.367752,-72.366837,-72.368698,-72.367248,-72.36662,-72.362074,-72.359865,-72.361333,-72.360496,-72.355778,-72.356767,-72.355288,-72.354502,-72.355776,-72.35521,-72.351482,-72.350739,-72.350329,-72.352024,-72.351543,-72.35208,-72.353775,-72.354573,-72.356447,-72.35842,-72.358182,-72.359398,-72.35865,-72.360528,-72.359144,-72.359937,-72.358669,-72.359352,-72.358391,-72.356716,-72.357595,-72.357745,-72.359316,-72.363021,-72.363467,-72.366524,-72.366763,-72.368158,-72.366768,-72.367537,-72.367119,-72.365656,-72.364965,-72.362107,-72.358652,-72.357052,-72.3547475230813,-72.3498457397633,-72.349765,-72.35114,-72.348964,-72.352121,-72.353889,-72.356922,-72.358741,-72.360342,-72.361586,-72.363478,-72.364299,-72.365274,-72.367137,-72.368926,-72.370328,-72.37144,-72.372618,-72.37247,-72.372228,-72.373385,-72.373399,-72.373726,-72.373428,-72.373209,-72.372904,-72.372912,-72.373239,-72.373305,-72.373123,-72.372922,-72.372236,-72.37209,-72.371748,-72.37161,-72.371435,-72.371273,-72.371188,-72.370752,-72.370017,-72.369384,-72.368221,-72.365769,-72.363864,-72.362452,-72.36035,-72.360205,-72.359195,-72.356976,-72.355056,-72.354081,-72.35203,-72.350473,-72.347469,-72.3455498068036,-72.345513,-72.3439719887267,-72.34261,-72.348101,-72.359063,-72.3599756709937,-72.367617,-72.3701250316982,-72.3714762145217,-72.378573,-72.386629,-72.398688,-72.4025324788991,-72.402866,-72.403586,-72.404517,-72.405811,-72.405652,-72.405238,-72.405565,-72.4064048825837,-72.4075764773927,-72.4166552242223,-72.417699,-72.421679,-72.426161,-72.4311009477311,-72.4362252938947,-72.437966,-72.4436748526654,-72.451925,-72.4613794657987,-72.462256,-72.4628523039658,-72.468102,-72.472539,-72.485693,-72.4862274061012,-72.4917028342226,-72.499534,-72.5046647988048,-72.507133,-72.506974,-72.51031,-72.514529,-72.51802,-72.5182780735869,-72.5208602186631,-72.519759,-72.519844,-72.523097,-72.525716,-72.535333,-72.537828,-72.541131,-72.54474,-72.546187,-72.546594,-72.54564,-72.54655,-72.546549,-72.542374,-72.541679,-72.54055,-72.536591,-72.534164,-72.539345,-72.540596,-72.541718,-72.542519,-72.544479,-72.54641,-72.546638,-72.544212,-72.54438,-72.546253,-72.548046,-72.545986,-72.548873,-72.551128,-72.554894,-72.557236,-72.557434,-72.559139,-72.561132,-72.563934,-72.565628,-72.567559,-72.570146,-72.570808,-72.569977,-72.571963,-72.573448,-72.574189,-72.575953,-72.57634,-72.577627,-72.579875,-72.581498,-72.581802,-72.581123,-72.581287,-72.582502,-72.585181,-72.585657],"lat":[41.309852,41.311302,41.307685,41.306391,41.307378,41.306961,41.305911,41.305417,41.304369,41.303399,41.306427,41.307872,41.309213,41.314672,41.314829,41.322306,41.326003,41.326478,41.329933,41.33055,41.327863,41.330297,41.330687,41.332317,41.333978,41.334882,41.336012,41.338651,41.338861,41.339559,41.336762,41.339943,41.341036,41.344751,41.347275,41.347662,41.339545,41.337206,41.335194,41.331506,41.331407,41.329601,41.3277,41.336764,41.335426,41.331697,41.329725,41.33039,41.330099,41.330939,41.324905,41.324021,41.323284,41.321635,41.321552,41.316007,41.311652,41.308021,41.307644,41.303801,41.303457,41.304893,41.306092,41.307138,41.308283,41.307218,41.307682,41.308401,41.308158,41.307427,41.308238,41.312622,41.31633,41.318366,41.325517,41.325551,41.329799,41.330498,41.333439,41.333893,41.330761,41.330199,41.32906,41.328965,41.327776,41.327207,41.326012,41.324414,41.324435,41.321744,41.316946,41.312668,41.308841,41.308419,41.306852,41.306224,41.30455,41.300083,41.298596,41.295809,41.298124,41.297845,41.295162,41.292938,41.291645,41.292191,41.293189,41.294306,41.294955,41.294312,41.293143,41.292475,41.293064,41.292854,41.292318,41.293387,41.292786,41.291529,41.291819,41.289122,41.287528,41.286669,41.287064,41.288969,41.287483,41.28705,41.285881,41.284428,41.282919,41.281624,41.280993,41.281128,41.279332,41.277872,41.276813,41.276263,41.274899,41.274889,41.275642,41.277484,41.280149,41.28292,41.284034,41.287542,41.288799,41.289142,41.290347,41.291721,41.292018,41.293774,41.29504,41.296675,41.295482,41.295394,41.295963,41.297957,41.299659,41.300432,41.303932,41.301458,41.30227,41.302605,41.301151,41.301148,41.30025,41.298686,41.300251,41.298867,41.295024,41.293172,41.29189,41.29228,41.294385,41.297585,41.300717,41.300972,41.301629,41.30349,41.304395,41.305493,41.308566,41.311011,41.317793,41.321757,41.325713,41.32461,41.324221,41.321814,41.317116,41.315188,41.313254,41.312474,41.311223,41.311981,41.311186,41.30819,41.307246,41.305361,41.302379,41.302545,41.299878,41.298579,41.299568,41.300864,41.297959,41.294974,41.294193,41.29684,41.298036,41.299731,41.299028,41.300189,41.298632,41.297919,41.297014,41.297641,41.302168,41.304284,41.307292,41.310558,41.310528,41.313613,41.314873,41.322106,41.325694,41.33076,41.333751,41.334452,41.334693,41.335585,41.336784,41.337354,41.336067,41.333009,41.332601,41.333988,41.333121,41.33392,41.3357,41.334799,41.334164,41.333369,41.33164,41.330572,41.331323,41.328846,41.322337,41.321292,41.32141,41.319571,41.321403,41.322385,41.32518,41.32319,41.322048,41.319782,41.321001,41.321104,41.323003,41.32284,41.322193,41.317506,41.314207,41.31311,41.31097,41.310239,41.304855,41.299806,41.300464,41.304305,41.304843,41.306923,41.307882,41.306549,41.304914,41.303773,41.302033,41.300118,41.298439,41.296249,41.292051,41.291771,41.293706,41.296796,41.297321,41.295093,41.293106,41.292283,41.289501,41.286071,41.285051,41.284881,41.287132,41.287935,41.289697,41.2896418716018,41.2850989565717,41.283592,41.281775,41.280826,41.281154,41.281598,41.279901,41.280213,41.281228,41.28165,41.281353,41.280096,41.280902,41.281384,41.280719,41.278326,41.277294,41.27568,41.27349,41.271877,41.271788,41.271492,41.270339,41.270652,41.270696,41.271009,41.271163,41.271399,41.27169,41.271767,41.27176,41.271739,41.271734,41.271712,41.271647,41.271597,41.271529,41.271493,41.271395,41.271329,41.271357,41.272181,41.272231,41.272517,41.271536,41.272135,41.272941,41.273573,41.274205,41.274403,41.274118,41.274053,41.273647,41.275174,41.2757634374343,41.275677,41.2720508725429,41.268846,41.270141,41.268114,41.2676248023724,41.263529,41.2637684488094,41.2638974500173,41.264575,41.261798,41.278172,41.2774222445845,41.277926,41.278415,41.278415,41.278578,41.278371,41.278163,41.277433,41.2768946788366,41.2770544639896,41.2782926471396,41.278435,41.275074,41.274128,41.2760566928499,41.2780573799712,41.278737,41.2787975279887,41.278885,41.2748574030607,41.274484,41.2739258447997,41.269012,41.270103,41.270881,41.2706873690053,41.2687034609041,41.265866,41.2620045658159,41.260147,41.256896,41.256613,41.258529,41.257762,41.258376453455,41.2645243432203,41.267466,41.270435,41.269207,41.269362,41.268064,41.267225,41.264887,41.263071,41.263214,41.26485,41.267709,41.268834,41.269153,41.270069,41.271309,41.270634,41.2733,41.275692,41.271999,41.270794,41.271446,41.270157,41.269646,41.270142,41.271687,41.273262,41.275265,41.275977,41.277415,41.280335,41.281892,41.280583,41.280587,41.281992,41.283695,41.284731,41.2875,41.288698,41.292393,41.294174,41.294419,41.295776,41.296646,41.298413,41.299175,41.2998,41.300921,41.302425,41.303313,41.304002,41.303884,41.304218,41.304932,41.305511,41.306386,41.307099,41.309852]},{"lng":[-72.479678,-72.48107,-72.479782,-72.4795,-72.477818,-72.476851,-72.4749,-72.469504,-72.470765,-72.475586,-72.46975,-72.468551,-72.464981,-72.463789,-72.459513,-72.455399,-72.454942,-72.451007,-72.44486,-72.443047,-72.441605,-72.438989,-72.436689,-72.436289,-72.437479,-72.438954,-72.435284,-72.434726,-72.436245,-72.437405,-72.439881,-72.439492,-72.437832,-72.437085,-72.434005,-72.433288,-72.431763,-72.43145,-72.426603,-72.425603,-72.425652,-72.429112,-72.428909,-72.425289,-72.42802,-72.431198,-72.433627,-72.435006,-72.438023,-72.43739,-72.432139,-72.435389,-72.439654,-72.440696,-72.441399,-72.438605,-72.436637,-72.430264,-72.431852,-72.432058,-72.430963,-72.425515,-72.417816,-72.418142,-72.415689,-72.414612,-72.410904,-72.409853,-72.408399,-72.410199,-72.410003,-72.408691,-72.406481,-72.40374,-72.401744,-72.402318,-72.401116,-72.398173,-72.394975,-72.391389,-72.388117,-72.38752,-72.388491,-72.388034,-72.390322,-72.390177,-72.391629,-72.38795,-72.388163,-72.387283,-72.387343,-72.384322,-72.384433,-72.389041,-72.391766,-72.390273,-72.3908,-72.388056,-72.384881,-72.385814,-72.387646,-72.391039,-72.393404,-72.395837,-72.401091,-72.403707,-72.405416,-72.406873,-72.411116,-72.407938,-72.408883,-72.40863,-72.410486,-72.412227,-72.415815,-72.416689,-72.418861,-72.419454,-72.419723,-72.420801,-72.424899,-72.427918,-72.428879,-72.432029,-72.435001,-72.435785,-72.452961,-72.453756,-72.456519,-72.457455,-72.458507,-72.459855,-72.460372,-72.461523,-72.464791,-72.464636,-72.465299,-72.465944,-72.466895,-72.467291,-72.467806,-72.468873,-72.469212,-72.469857,-72.470034,-72.472724,-72.468943,-72.448385,-72.448103,-72.447038,-72.450894,-72.453704,-72.455549,-72.45902,-72.457777,-72.456976,-72.454527,-72.452735,-72.452363,-72.451802,-72.452965,-72.453667,-72.452204,-72.449632,-72.447996,-72.45044,-72.447778,-72.446143,-72.450693,-72.452063,-72.453818,-72.44676,-72.453775,-72.455312,-72.45772,-72.461509,-72.460658,-72.463246,-72.464009,-72.466004,-72.464203,-72.466528,-72.466991,-72.470879,-72.467091,-72.46514,-72.463502,-72.461897,-72.45645,-72.452817,-72.452089,-72.452206,-72.450745,-72.450831,-72.446425,-72.442329,-72.448239,-72.453038,-72.455689,-72.459083,-72.462751,-72.464784,-72.46631,-72.466583,-72.469291,-72.473479,-72.478423,-72.483037,-72.479678],"lat":[41.455297,41.455895,41.457682,41.460391,41.458674,41.456269,41.454135,41.450834,41.450542,41.447812,41.443387,41.444467,41.442336,41.439646,41.436886,41.43309,41.433157,41.430011,41.428313,41.426819,41.424279,41.421044,41.417359,41.414605,41.414673,41.412731,41.413041,41.411254,41.410871,41.411717,41.411129,41.409711,41.409288,41.407593,41.407317,41.406624,41.401386,41.400569,41.394756,41.392125,41.39064,41.379205,41.376273,41.36747,41.369853,41.375437,41.37878,41.377388,41.37664,41.374902,41.367937,41.36753,41.365711,41.361658,41.361292,41.361348,41.359853,41.355204,41.352403,41.349862,41.348365,41.349018,41.352246,41.355387,41.354621,41.352768,41.353058,41.354482,41.355334,41.356444,41.35852,41.359819,41.360516,41.359769,41.360886,41.362551,41.363524,41.362944,41.363196,41.366334,41.367642,41.366881,41.364602,41.363052,41.361307,41.360281,41.357941,41.358123,41.356034,41.355006,41.353102,41.351399,41.348704,41.351132,41.350199,41.348926,41.3472,41.345039,41.34195,41.341029,41.340493,41.340833,41.337944,41.337544,41.346829,41.34996,41.348462,41.341711,41.33861,41.336452,41.331361,41.329651,41.328999,41.331032,41.33266,41.334279,41.333741,41.330492,41.333825,41.334016,41.330821,41.327949,41.325713,41.326548,41.330042,41.330963,41.332474,41.334705,41.335998,41.336842,41.337076,41.336438,41.33497,41.333124,41.33339,41.332637,41.332553,41.332649,41.332939,41.332621,41.332527,41.332586,41.332742,41.333431,41.333823,41.334209,41.345381,41.35502,41.358611,41.359699,41.367447,41.369664,41.369812,41.3689,41.369519,41.371854,41.370302,41.371168,41.36898,41.369522,41.375001,41.376701,41.380001,41.380205,41.381259,41.380798,41.384821,41.385563,41.387713,41.388712,41.388745,41.391225,41.396139,41.398129,41.399055,41.39765,41.395488,41.396576,41.39901,41.398634,41.399619,41.406991,41.409885,41.409734,41.410384,41.409189,41.410183,41.408594,41.407516,41.407775,41.406852,41.40895,41.41178,41.412925,41.414505,41.416425,41.425257,41.430531,41.433052,41.436233,41.438428,41.440142,41.43847,41.440559,41.442268,41.442607,41.441224,41.456299,41.455297]},{"lng":[-72.733324,-72.726665,-72.724248,-72.718631,-72.715774,-72.711092,-72.714954,-72.719109,-72.721777,-72.720982,-72.7232,-72.722618,-72.720434,-72.717151,-72.714299,-72.71246,-72.713084,-72.713509,-72.710459,-72.704034,-72.704061,-72.701647,-72.701402,-72.703482,-72.702575,-72.697243,-72.683158,-72.679636,-72.678913,-72.680058,-72.681978,-72.681065,-72.682581,-72.682514,-72.683666,-72.684253,-72.685675,-72.686317,-72.681759,-72.680456,-72.679162,-72.677896,-72.677595,-72.671501,-72.654672,-72.658252,-72.660436,-72.66502,-72.65627,-72.655897,-72.656421,-72.659288,-72.661719,-72.664545,-72.666201,-72.668435,-72.670271,-72.670482,-72.675338,-72.677221,-72.676244,-72.676952,-72.674385,-72.673625,-72.673029,-72.66833,-72.665981,-72.662059,-72.65757,-72.655377,-72.652365,-72.653106,-72.652898,-72.657099,-72.657906,-72.661665,-72.663317,-72.665073,-72.663966,-72.666491,-72.668193,-72.671899,-72.670016,-72.665816,-72.662385,-72.664679,-72.663937,-72.665017,-72.6646,-72.666868,-72.67066,-72.671988,-72.673251,-72.678853,-72.680289,-72.678828,-72.678738,-72.681652,-72.683682,-72.682882,-72.682769,-72.684524,-72.685596,-72.686208,-72.683549,-72.683668,-72.688018,-72.689281,-72.691558,-72.690523,-72.690134,-72.687688,-72.691143,-72.694034,-72.695509,-72.694656,-72.698656,-72.700668,-72.701805,-72.701928,-72.704685,-72.707232,-72.710281,-72.708964,-72.705272,-72.706851,-72.707939,-72.709946,-72.710395,-72.709255,-72.708343,-72.71042,-72.714732,-72.722311,-72.725506,-72.727595,-72.730471,-72.73801,-72.733324],"lat":[41.428026,41.434574,41.436317,41.43742,41.438721,41.441934,41.444415,41.443449,41.445409,41.447084,41.44897,41.453324,41.455153,41.456597,41.45976,41.459575,41.46893,41.472111,41.472258,41.474872,41.473187,41.4673,41.464713,41.462757,41.458118,41.458371,41.460237,41.462829,41.465999,41.469521,41.469295,41.471399,41.471475,41.475375,41.478491,41.48356,41.484345,41.486418,41.486454,41.492136,41.494593,41.49623,41.494838,41.495685,41.497743,41.495058,41.492158,41.489416,41.490258,41.48622,41.484939,41.481732,41.480264,41.478912,41.479071,41.477802,41.477922,41.479591,41.479689,41.479159,41.476911,41.47389,41.473874,41.471967,41.465826,41.465958,41.466991,41.467594,41.466363,41.467786,41.465717,41.464457,41.462108,41.461752,41.459532,41.45969,41.460384,41.460018,41.458427,41.458846,41.456843,41.455058,41.452964,41.449818,41.44476,41.444244,41.445363,41.445957,41.447498,41.450286,41.452489,41.452385,41.453491,41.454027,41.453524,41.452886,41.449889,41.450429,41.447883,41.445805,41.443026,41.441914,41.439327,41.435969,41.435846,41.433969,41.434553,41.43276,41.432437,41.432833,41.438398,41.443344,41.444259,41.443764,41.445384,41.45048,41.450657,41.448858,41.452237,41.45052,41.449201,41.450135,41.450308,41.449501,41.445632,41.444736,41.439876,41.438811,41.433791,41.4331,41.429443,41.429073,41.433788,41.433663,41.430474,41.429598,41.425928,41.424669,41.428026]},{"lng":[-72.746038,-72.744151,-72.739931,-72.738853,-72.733855,-72.730388,-72.728632,-72.728383,-72.722762,-72.721369,-72.719269,-72.720603,-72.719114,-72.719062,-72.716695,-72.715699,-72.712703,-72.712828,-72.7134,-72.713426,-72.712243,-72.708988,-72.708173,-72.703333,-72.702736,-72.703233,-72.700716,-72.700899,-72.694554,-72.688199,-72.687362,-72.687778,-72.686796,-72.688476,-72.690952,-72.691898,-72.692875,-72.695229,-72.696856,-72.697638,-72.69234,-72.691379,-72.692758,-72.694631,-72.694502,-72.697606,-72.695963,-72.69694,-72.701693,-72.708545,-72.708656,-72.706714,-72.705618,-72.706244,-72.708439,-72.709572,-72.712283,-72.712279,-72.713981,-72.716837,-72.71652,-72.719467,-72.720064,-72.718934,-72.718823,-72.722758,-72.721216,-72.719333,-72.720992,-72.719956,-72.720338,-72.719729,-72.720965,-72.721229,-72.728699,-72.726448,-72.729041,-72.729639,-72.727422,-72.730737,-72.729052,-72.728864,-72.730114,-72.732807,-72.733807,-72.73514,-72.736946,-72.739153,-72.74566,-72.746038],"lat":[41.513555,41.512915,41.514638,41.516824,41.519751,41.521004,41.520715,41.517025,41.517853,41.520052,41.520558,41.518864,41.517154,41.515659,41.516666,41.518731,41.519372,41.520429,41.524389,41.530403,41.532976,41.533061,41.541509,41.541509,41.543938,41.546699,41.547561,41.54891,41.549531,41.538631,41.536157,41.532903,41.530796,41.529826,41.530049,41.529585,41.528525,41.528603,41.52555,41.5216,41.521732,41.520589,41.519808,41.520597,41.518117,41.517998,41.515517,41.511356,41.511448,41.510311,41.512993,41.517651,41.519378,41.520296,41.519881,41.519239,41.516025,41.513134,41.511468,41.506929,41.502042,41.502525,41.499487,41.495095,41.488171,41.487481,41.490872,41.493476,41.49553,41.497488,41.500115,41.50255,41.504044,41.508234,41.506982,41.510336,41.510433,41.511534,41.512064,41.513359,41.516374,41.519248,41.52066,41.519191,41.51772,41.512896,41.512674,41.510556,41.508922,41.513555]},{"lng":[-72.750864,-72.746631,-72.745607,-72.742878,-72.740306,-72.738484,-72.737755,-72.742633,-72.743105,-72.744774,-72.746833,-72.747627,-72.75024,-72.750864],"lat":[41.564441,41.564455,41.566493,41.568368,41.568585,41.567555,41.565812,41.565062,41.560804,41.557656,41.557086,41.558376,41.559177,41.564441]},{"lng":[-72.588555,-72.584417,-72.585442,-72.58097,-72.579738,-72.575486,-72.574822,-72.574895,-72.581067,-72.582333,-72.589167,-72.588555],"lat":[41.339061,41.338692,41.34445,41.344481,41.341975,41.340103,41.339943,41.339915,41.335878,41.336806,41.337618,41.339061]},{"lng":[-72.731036,-72.722758,-72.724147,-72.724209,-72.725944,-72.727994,-72.730069,-72.730068,-72.731036],"lat":[41.485993,41.487481,41.485089,41.482279,41.478771,41.476666,41.478055,41.480417,41.485993]},{"lng":[-72.5428,-72.542174,-72.537985,-72.532258,-72.528402,-72.524604,-72.5241328640738,-72.5269821827017,-72.529416,-72.5301865058436,-72.533247,-72.5342871374258,-72.537628,-72.537738,-72.537003,-72.5362680401403,-72.5363300022319,-72.545734,-72.5428],"lat":[41.259619,41.26025,41.260359,41.264518,41.265258,41.267177,41.2651896102242,41.2647750807743,41.264421,41.2640728544465,41.26269,41.2607628513044,41.258109,41.256671,41.255875,41.2553764178122,41.2548110883025,41.260238,41.259619]},{"lng":[-72.667803,-72.664711,-72.664679,-72.664741,-72.665267,-72.666846,-72.667883,-72.667803],"lat":[41.445196,41.444244,41.444244,41.444173,41.44344,41.442984,41.44243,41.445196]},{"lng":[-72.486298,-72.4841,-72.483121,-72.483037,-72.483229,-72.48542,-72.4861,-72.486298],"lat":[41.459404,41.459768,41.456574,41.456299,41.456541,41.458507,41.457569,41.459404]}],[{"lng":[-73.177429,-73.176982,-73.175132,-73.174587,-73.172198,-73.171253,-73.167543,-73.163706,-73.163917,-73.16363,-73.164124,-73.166392,-73.165168,-73.164803,-73.164002,-73.165489,-73.163388,-73.161748,-73.161666,-73.157984,-73.157574,-73.1546,-73.150377,-73.145125,-73.143928,-73.145616,-73.141406,-73.138314,-73.139482,-73.140614,-73.142178,-73.144795,-73.142561,-73.143951,-73.143722,-73.14165,-73.140748,-73.13841,-73.138786,-73.135782,-73.13232,-73.130445,-73.1308,-73.128589,-73.131862,-73.132743,-73.134374,-73.138553,-73.138771,-73.141156,-73.127555,-73.128666,-73.127536,-73.127697,-73.12901,-73.120303,-73.114111,-73.113182,-73.114271,-73.112051,-73.106306,-73.105664,-73.106575,-73.106213,-73.112615,-73.114491,-73.115405,-73.113162,-73.109091,-73.108162,-73.109158,-73.112146,-73.11593,-73.114767,-73.112736,-73.108825,-73.107587,-73.108055,-73.107319,-73.104673,-73.101753,-73.101492,-73.097827,-73.095689,-73.093607,-73.091277,-73.090783,-73.088034,-73.085512,-73.086402,-73.084831,-73.082818,-73.077095,-73.076958,-73.0783,-73.076117,-73.074002,-73.073019,-73.068726,-73.066782,-73.06686,-73.063631,-73.062462,-73.060203,-73.061407,-73.061326,-73.066669,-73.066325,-73.067947,-73.06979,-73.070893,-73.07016,-73.068536,-73.06788,-73.067517,-73.06703,-73.066115,-73.065848,-73.06291,-73.060452,-73.05798,-73.054494,-73.053276,-73.051898,-73.049821,-73.049803,-73.041651,-73.047179,-73.048375,-73.049246,-73.049792,-73.049037,-73.0479,-73.047543,-73.043935,-73.042848,-73.04405,-73.041483,-73.039656,-73.042357,-73.043687,-73.044194,-73.041743,-73.040779,-73.042218,-73.042143,-73.038459,-73.038573,-73.036071,-73.036193,-73.032394,-73.030102,-73.030462,-73.024444,-73.025156,-73.017708,-73.015727,-73.010765,-73.009803,-73.009211,-73.004177,-73.006082,-73.001373,-73.002842,-73.006206,-73.00853,-73.010052,-73.010784,-73.01464,-73.01759,-73.021127,-73.026927,-73.028472,-73.028037,-73.028912,-73.030928,-73.029978,-73.023217,-73.022675,-73.019765,-73.019333,-73.013832,-73.010307,-73.010547,-73.006953,-73.004822,-73.002783,-73.000377,-73.001598,-73.001302,-72.999077,-72.997923,-72.997629,-72.996529,-72.99431,-72.992901,-72.991267,-72.990023,-72.989353,-72.985493,-72.983626,-72.983419,-72.979925,-72.979627,-72.981805,-72.983757,-72.983871,-72.98191,-72.978558,-72.978953,-72.975832,-72.97288,-72.977603,-72.977248,-72.98331,-72.985015,-72.988743,-72.98894,-72.99504,-72.99639,-72.997111,-72.998048,-73.000697,-73.008764,-73.013074,-73.014778,-73.020627,-73.028064,-73.033576,-73.040707,-73.04911,-73.053126,-73.056701,-73.058984,-73.061746,-73.065027,-73.066414,-73.067851,-73.075352,-73.077652,-73.078952,-73.082052,-73.085259,-73.086704,-73.090938,-73.09324,-73.096853,-73.114754,-73.115754,-73.120854,-73.122854,-73.123454,-73.124654,-73.126154,-73.136054,-73.138155,-73.139573,-73.147555,-73.146889,-73.150041,-73.154927,-73.157388,-73.158532,-73.157416,-73.157779,-73.15834,-73.162787,-73.167126,-73.171441,-73.171305,-73.17372,-73.175301,-73.173937,-73.175286,-73.176997,-73.177429],"lat":[41.390471,41.392347,41.394356,41.395946,41.397546,41.397833,41.401307,41.40162,41.400504,41.397432,41.395973,41.392537,41.391002,41.388767,41.390895,41.392414,41.393745,41.395561,41.397645,41.399148,41.402587,41.402589,41.404255,41.406832,41.408139,41.410417,41.413696,41.418483,41.420015,41.424365,41.426594,41.429183,41.429926,41.431979,41.433826,41.435192,41.43512,41.432978,41.430651,41.430139,41.432158,41.434643,41.436066,41.439435,41.441749,41.444286,41.445649,41.448009,41.450174,41.45128,41.451735,41.454787,41.455121,41.458214,41.465105,41.46554,41.465561,41.461215,41.453522,41.453481,41.45473,41.456014,41.45187,41.450913,41.451773,41.451591,41.447046,41.445842,41.446574,41.444638,41.443777,41.443714,41.439341,41.434548,41.432592,41.43225,41.435418,41.437147,41.438833,41.441139,41.44102,41.442239,41.44205,41.441373,41.44729,41.442094,41.438289,41.435682,41.43587,41.433728,41.429573,41.427857,41.429829,41.431271,41.433144,41.437714,41.440595,41.43989,41.438913,41.439438,41.443853,41.442622,41.441677,41.436881,41.434937,41.433625,41.430556,41.428732,41.4258,41.418534,41.415041,41.410683,41.410768,41.41076,41.410107,41.409818,41.408735,41.412141,41.41589,41.42033,41.419342,41.420698,41.420632,41.418129,41.418727,41.421972,41.420896,41.398067,41.397794,41.398735,41.399059,41.397445,41.396396,41.395834,41.394925,41.395649,41.398954,41.400787,41.403961,41.403459,41.405867,41.408129,41.407122,41.410033,41.411107,41.412298,41.411689,41.409427,41.409313,41.411308,41.41302,41.413243,41.411511,41.410637,41.407573,41.407668,41.41526,41.414154,41.414738,41.417067,41.416133,41.409483,41.408322,41.403653,41.404138,41.403754,41.404283,41.40563,41.406519,41.405039,41.401235,41.401344,41.395913,41.393011,41.392588,41.389188,41.388532,41.388956,41.387772,41.387784,41.386586,41.382782,41.380039,41.383468,41.383453,41.38454,41.384554,41.383612,41.380788,41.377913,41.3747,41.369583,41.364714,41.363372,41.362834,41.361358,41.358502,41.355557,41.359384,41.360448,41.359849,41.356745,41.357144,41.356019,41.353664,41.353907,41.351333,41.348759,41.346273,41.344412,41.342481,41.343011,41.340843,41.339992,41.337307,41.333017,41.330186,41.328893,41.324893,41.32375,41.322194,41.314097,41.312623,41.31041,41.310319,41.310823,41.311095,41.311879,41.313129,41.313891,41.3113,41.311494,41.312168,41.311627,41.310079,41.306127,41.302949,41.300996,41.305596,41.307696,41.311596,41.313096,41.3137,41.314558,41.319256,41.321007,41.322596,41.331596,41.332196,41.338496,41.341396,41.343596,41.345296,41.346596,41.351196,41.353896,41.361211,41.367696,41.367902,41.370222,41.375834,41.377869,41.379697,41.380923,41.383207,41.383721,41.384188,41.383616,41.383948,41.384829,41.386204,41.389255,41.390909,41.391762,41.389931,41.390471]},{"lng":[-73.264886,-73.263069,-73.264198,-73.260304,-73.260096,-73.257987,-73.254025,-73.252261,-73.250019,-73.250404,-73.24858,-73.252265,-73.250309,-73.246048,-73.242765,-73.242282,-73.239017,-73.241646,-73.241745,-73.239998,-73.238129,-73.237312,-73.236732,-73.236673,-73.208006,-73.20684,-73.204197,-73.1812,-73.178828,-73.177325,-73.175193,-73.173743,-73.174554,-73.174855,-73.170771,-73.170371,-73.15792,-73.1608,-73.163225,-73.162312,-73.160299,-73.158341,-73.151524,-73.141725,-73.143914,-73.142145,-73.142834,-73.1418,-73.140232,-73.140263,-73.138441,-73.136988,-73.135097,-73.135982,-73.13406,-73.133943,-73.135413,-73.136013,-73.138756,-73.139941,-73.138275,-73.137231,-73.133739,-73.130814,-73.128494,-73.12516,-73.123772,-73.124054,-73.125593,-73.12485,-73.125711,-73.124879,-73.140094,-73.138403,-73.137076,-73.137654,-73.141247,-73.14397,-73.147066,-73.149821,-73.151586,-73.153473,-73.15793,-73.158867,-73.161428,-73.162097,-73.164774,-73.173932,-73.171681,-73.170186,-73.167045,-73.16678,-73.169688,-73.170693,-73.170546,-73.168182,-73.166426,-73.163922,-73.160053,-73.158657,-73.157287,-73.158123,-73.157971,-73.159953,-73.160792,-73.160796,-73.161306,-73.162727,-73.163666,-73.162754,-73.160763,-73.158215,-73.157843,-73.158071,-73.160049,-73.161921,-73.165038,-73.165852,-73.164751,-73.166043,-73.164059,-73.167118,-73.166223,-73.166199,-73.165516,-73.169116,-73.170512,-73.176007,-73.175308,-73.176117,-73.175896,-73.177215,-73.177102,-73.176155,-73.174028,-73.172775,-73.169292,-73.16727,-73.164251,-73.162887,-73.160861,-73.156744,-73.15624,-73.153451,-73.151597,-73.146322,-73.14864,-73.147529,-73.148564,-73.15139,-73.153006,-73.154646,-73.157173,-73.159603,-73.159681,-73.158143,-73.157829,-73.160864,-73.159941,-73.160292,-73.161728,-73.164666,-73.165919,-73.170078,-73.172415,-73.174932,-73.175539,-73.176915,-73.180096,-73.181334,-73.183638,-73.187998,-73.188778,-73.188548,-73.188928,-73.188874,-73.191984,-73.191259,-73.192478,-73.194965,-73.19582,-73.20058,-73.203463,-73.201184,-73.20154,-73.204604,-73.209423,-73.21097,-73.2135,-73.215034,-73.219208,-73.224435,-73.224985,-73.217262,-73.216666,-73.216915,-73.219819,-73.220284,-73.223427,-73.226513,-73.228267,-73.228149,-73.226311,-73.224642,-73.22471,-73.221573,-73.220857,-73.226479,-73.229969,-73.235911,-73.238411,-73.242289,-73.242344,-73.244334,-73.24752,-73.247989,-73.250739,-73.256662,-73.258971,-73.258703,-73.259582,-73.261759,-73.261966,-73.260126,-73.260395,-73.258572,-73.258024,-73.254917,-73.252419,-73.252675,-73.249695,-73.247383,-73.243755,-73.238268,-73.235684,-73.237473,-73.240693,-73.244346,-73.248346,-73.249692,-73.257523,-73.259398,-73.260893,-73.25995,-73.25907,-73.259358,-73.261669,-73.263824,-73.262779,-73.26385,-73.265495,-73.264886],"lat":[41.494734,41.49448,41.497074,41.495198,41.494033,41.497397,41.501993,41.505372,41.506631,41.508333,41.509769,41.512134,41.512253,41.512774,41.512985,41.512955,41.512594,41.511353,41.510944,41.510376,41.509338,41.509743,41.512325,41.512318,41.509007,41.508803,41.508527,41.511288,41.510853,41.510485,41.510217,41.51048,41.510854,41.511994,41.512544,41.512587,41.513966,41.506656,41.501924,41.496663,41.497443,41.496868,41.501729,41.507395,41.510246,41.513206,41.513829,41.516033,41.516604,41.520086,41.522821,41.521838,41.522788,41.519829,41.519537,41.517751,41.517445,41.519293,41.517757,41.516182,41.511169,41.506242,41.503035,41.5019,41.499935,41.498985,41.497547,41.493329,41.492378,41.490368,41.490223,41.487578,41.488273,41.493494,41.498524,41.499243,41.497835,41.495665,41.495735,41.497755,41.501327,41.500152,41.496509,41.493847,41.493055,41.493711,41.492522,41.489058,41.486019,41.47976,41.480255,41.478187,41.477535,41.476642,41.475143,41.473628,41.470779,41.471133,41.4739,41.475808,41.47631,41.474449,41.473968,41.473047,41.471829,41.469368,41.468104,41.466938,41.466769,41.465867,41.465331,41.465178,41.464762,41.462554,41.461433,41.457706,41.458185,41.456748,41.45397,41.452544,41.44914,41.450417,41.454224,41.457058,41.458506,41.461091,41.460472,41.455657,41.45138,41.447299,41.443581,41.440043,41.439153,41.434412,41.434659,41.433907,41.434523,41.431078,41.430073,41.42801,41.429185,41.429391,41.427743,41.429307,41.430933,41.428885,41.426673,41.42298,41.420893,41.420354,41.421466,41.42365,41.422346,41.423324,41.419158,41.418818,41.41632,41.416298,41.420109,41.424409,41.427302,41.426158,41.424722,41.422775,41.421088,41.421073,41.428721,41.427913,41.427266,41.425363,41.424895,41.42493,41.431123,41.431881,41.431732,41.434164,41.437885,41.434493,41.431373,41.430061,41.428814,41.428285,41.429067,41.43031,41.431788,41.434063,41.434662,41.435383,41.437959,41.438806,41.43721,41.43675,41.438525,41.439685,41.440715,41.44308,41.444733,41.446424,41.445794,41.441377,41.440372,41.438511,41.433117,41.43174,41.430818,41.430745,41.429577,41.430309,41.429124,41.426153,41.426253,41.429841,41.436072,41.439558,41.439193,41.43999,41.439736,41.438183,41.440042,41.443029,41.444222,41.445387,41.448664,41.450667,41.451985,41.452002,41.450088,41.445273,41.446266,41.447685,41.449249,41.451896,41.453783,41.457696,41.459861,41.460872,41.461744,41.463543,41.466883,41.467249,41.472936,41.473144,41.475292,41.476945,41.480786,41.483201,41.483268,41.485058,41.486279,41.491901,41.492752,41.494734]},{"lng":[-73.122453,-73.121352,-73.120753,-73.118253,-73.115353,-73.110572,-73.109253,-73.110653,-73.110253,-73.108353,-73.110453,-73.110553,-73.109953,-73.107553,-73.104952,-73.101573,-73.093402,-73.09115,-73.08735,-73.086752,-73.087852,-73.087752,-73.088682,-73.086852,-73.078556,-73.072277,-73.051511,-73.044144,-73.035161,-73.030307,-73.02698,-73.017985,-73.012715,-73.000617,-72.995014,-72.992051,-72.993548,-72.994622,-72.993146,-72.992127,-72.993232,-72.992699,-72.986904,-72.9858113738396,-72.987035,-72.987546,-72.992042,-72.9977542161967,-72.997948,-72.9996906530439,-73.001439,-73.002743,-73.004533,-73.004301,-73.007548,-73.0134651172266,-73.014948,-73.020149,-73.020449,-73.022549,-73.029645,-73.034251,-73.0374242514685,-73.037941,-73.044497,-73.0456020141911,-73.05065,-73.0589343699178,-73.05935,-73.0595617242875,-73.0651210190724,-73.065858,-73.068994267766,-73.0797045507602,-73.08015,-73.0808050495963,-73.087842,-73.0926742624665,-73.0933567669717,-73.097115,-73.1004125789875,-73.101493,-73.103288,-73.105458,-73.108005,-73.1080084493287,-73.116053,-73.119853,-73.121453,-73.122353,-73.122453],"lat":[41.182897,41.187496,41.188497,41.190497,41.193497,41.20027,41.204097,41.207797,41.213996,41.218296,41.225296,41.227396,41.229396,41.232496,41.236595,41.240088,41.244617,41.246483,41.251792,41.254596,41.260096,41.265296,41.271737,41.276596,41.273346,41.269716,41.2595,41.256815,41.254378,41.252779,41.252309,41.250077,41.249511,41.246683,41.245711,41.244909,41.244171,41.241596,41.240991,41.239001,41.237386,41.234519,41.235535,41.2348282615352,41.233463,41.231098,41.223724,41.2227306972513,41.222697,41.2220381218934,41.22317,41.222731,41.221272,41.220295,41.210197,41.2054792984275,41.204297,41.204097,41.206397,41.207197,41.207532,41.206167,41.2024235952189,41.201814,41.20954,41.2096579903012,41.210197,41.2068642075043,41.206697,41.2064062857663,41.1987729332467,41.197761,41.1969411639817,41.1941414426504,41.194025,41.1934998191809,41.187858,41.1824446987488,41.1816801288362,41.17747,41.1747245282299,41.173825,41.174076,41.172159,41.168765,41.1687516729814,41.173697,41.175697,41.177597,41.179797,41.182897]}],[{"lng":[-72.332318,-72.331106,-72.328938,-72.326988,-72.326979,-72.321835,-72.31753,-72.316132,-72.316285,-72.314915,-72.313223,-72.310307,-72.308367,-72.305663,-72.30384,-72.301925,-72.297048,-72.295228,-72.292205,-72.294061,-72.290683,-72.289945,-72.286527,-72.286188,-72.284019,-72.281751,-72.28169,-72.278212,-72.270001,-72.269728,-72.265797,-72.261455,-72.260087,-72.256809,-72.258006,-72.256769,-72.259147,-72.260712,-72.262903,-72.261624,-72.265093,-72.266311,-72.265274,-72.25983,-72.258329,-72.257225,-72.256141,-72.255023,-72.251573,-72.250636,-72.249437,-72.251797,-72.250269,-72.248234,-72.247871,-72.246011,-72.246804,-72.246872,-72.245353,-72.242542,-72.242139,-72.242402,-72.243895,-72.243821,-72.241136,-72.237535,-72.23555,-72.234124,-72.230499,-72.230822,-72.229,-72.226311,-72.22763,-72.228818,-72.228439,-72.227304,-72.227034,-72.228157,-72.228857,-72.230658,-72.231166,-72.232994,-72.233875,-72.234467,-72.235837,-72.238686,-72.239584,-72.241062,-72.242411,-72.24416,-72.246241,-72.244379,-72.239506,-72.238918,-72.238656,-72.23719,-72.23488,-72.233768,-72.232103,-72.230859,-72.229275,-72.227795,-72.226755,-72.225165,-72.222784,-72.219579,-72.219172,-72.215349,-72.214082,-72.209632,-72.21134,-72.212195,-72.213506,-72.216562,-72.217827,-72.219792,-72.220411,-72.223045,-72.22337,-72.221847,-72.222719,-72.223237,-72.224017,-72.225346,-72.22622,-72.228819,-72.229792,-72.233354,-72.23465,-72.233438,-72.232922,-72.231064,-72.228527,-72.226721,-72.225753,-72.225141,-72.222112,-72.222376,-72.224434,-72.222983,-72.2288,-72.220098,-72.217371,-72.223796,-72.225847,-72.227955,-72.228117,-72.229888,-72.229115,-72.231188,-72.232984,-72.23474,-72.237394,-72.239238,-72.236568,-72.233565,-72.228574,-72.22757,-72.223276,-72.222725,-72.223481,-72.221935,-72.222077,-72.219298,-72.216652,-72.214201,-72.212512,-72.214604,-72.217356,-72.215311,-72.217706,-72.220206,-72.222712,-72.22387,-72.224708,-72.223213,-72.220267,-72.219916,-72.22068,-72.219311,-72.220356,-72.219307,-72.217439,-72.217896,-72.221037,-72.221789,-72.22286,-72.225867,-72.223721,-72.22372,-72.222036,-72.222013,-72.222909,-72.222442,-72.221377,-72.221937,-72.220282,-72.217645,-72.217528,-72.215382,-72.215628,-72.214853,-72.21319,-72.211183,-72.209301,-72.209521,-72.21137,-72.211136,-72.209935,-72.210708,-72.206182,-72.20461,-72.204957,-72.20671,-72.208947,-72.209559,-72.207196,-72.205341,-72.203604,-72.199952,-72.193195,-72.187464,-72.184359,-72.182401,-72.1837,-72.189104,-72.190542,-72.192363,-72.191561,-72.190195,-72.187525,-72.187303,-72.188178,-72.186055,-72.18625,-72.184503,-72.178801,-72.172685,-72.167193,-72.164847,-72.164348,-72.164716,-72.164509,-72.16552,-72.165076,-72.162768,-72.160515,-72.15947,-72.158543,-72.157882,-72.15378,-72.15267,-72.149009,-72.143225,-72.141296,-72.142428,-72.142305,-72.143801,-72.147626,-72.152958,-72.153247,-72.15251,-72.150478,-72.149238,-72.142723,-72.141065,-72.139062,-72.141311,-72.143032,-72.144601,-72.145273,-72.144153,-72.145041,-72.146899,-72.14721,-72.14828,-72.150727,-72.152962,-72.151422,-72.146557,-72.144752,-72.141272,-72.138171,-72.136549,-72.137995,-72.135919,-72.131161,-72.126909,-72.123321,-72.12112,-72.11716,-72.116814,-72.111959,-72.109357,-72.108917,-72.109406,-72.108747,-72.110248,-72.111277,-72.121257,-72.120117,-72.112934,-72.114389,-72.117626,-72.118103,-72.119962,-72.124832,-72.124774,-72.126852,-72.127802,-72.13548,-72.130109,-72.130576,-72.131312,-72.131466,-72.132985,-72.145967,-72.146639,-72.146233,-72.145608,-72.144842,-72.137129,-72.139033,-72.140212,-72.141454,-72.142718,-72.139653,-72.140153,-72.140971,-72.14567,-72.147398,-72.148632,-72.150734,-72.15319,-72.142182,-72.139538,-72.142088,-72.14319,-72.142435,-72.144824,-72.148573,-72.149511,-72.150138,-72.151115,-72.151652,-72.15231,-72.155461,-72.157443,-72.160336,-72.156919,-72.156586,-72.157935,-72.159666,-72.161457,-72.162842,-72.16311,-72.164617,-72.164351,-72.164219,-72.165001,-72.167349,-72.173266,-72.17657,-72.179007,-72.179889,-72.182729,-72.185592,-72.185446,-72.188502,-72.190205,-72.187986,-72.190531,-72.189795,-72.18994,-72.194677,-72.19659,-72.196066,-72.202706,-72.203206,-72.2053,-72.203459,-72.203737,-72.200543,-72.203229,-72.203837,-72.202637,-72.205001,-72.205985,-72.209433,-72.208489,-72.209007,-72.211958,-72.214204,-72.216626,-72.216766,-72.21783,-72.216111,-72.21435,-72.21567,-72.216227,-72.217347,-72.217024,-72.218357,-72.223749,-72.227395,-72.225908,-72.227922,-72.229122,-72.234014,-72.231138,-72.227984,-72.22602,-72.219437,-72.218794,-72.217167,-72.220358,-72.220119,-72.221221,-72.219612,-72.21255,-72.211075,-72.214029,-72.218197,-72.217224,-72.217742,-72.216324,-72.214551,-72.211826,-72.209491,-72.205806,-72.20501,-72.212968,-72.216725,-72.21464,-72.212806,-72.209772,-72.211682,-72.209964,-72.207623,-72.204962,-72.204215,-72.208001,-72.207557,-72.209411,-72.208724,-72.202046,-72.202368,-72.200813,-72.201054,-72.198427,-72.198193,-72.195946,-72.195493,-72.188145,-72.183931,-72.1854,-72.18862,-72.190769,-72.190911,-72.183641,-72.177478,-72.176051,-72.172303,-72.168487,-72.166853,-72.169959,-72.168362,-72.165099,-72.162354,-72.160436,-72.158403,-72.157913,-72.159585,-72.159233,-72.16094,-72.16082,-72.157342,-72.147819,-72.146923,-72.145648,-72.146819,-72.146041,-72.142134,-72.139327,-72.138042,-72.137759,-72.137351,-72.137679,-72.138212,-72.13905,-72.139956,-72.138992,-72.13823,-72.133996,-72.134337,-72.13612,-72.137603,-72.135216,-72.136903,-72.139035,-72.139577,-72.135136,-72.130621,-72.121889,-72.12189,-72.129785,-72.124314,-72.119989,-72.118627,-72.117647,-72.115818,-72.117207,-72.116303,-72.115022,-72.115128,-72.11695,-72.116347,-72.115684,-72.114241,-72.115557,-72.118639,-72.123704,-72.123058,-72.126416,-72.132934,-72.135036,-72.132885,-72.134151,-72.132884,-72.133556,-72.139058,-72.138568,-72.138634,-72.140268,-72.140609,-72.140548,-72.141075,-72.140898,-72.139368,-72.137577,-72.136202,-72.135446,-72.13677,-72.135037,-72.134533,-72.13332,-72.132854,-72.132136,-72.136323,-72.136443,-72.134557,-72.133037,-72.132535,-72.136038,-72.140231,-72.145075,-72.147551,-72.149873,-72.154093,-72.15468,-72.158172,-72.158862,-72.156144,-72.155354,-72.159431,-72.161133,-72.165049,-72.169104,-72.17116,-72.175182,-72.171563,-72.169403,-72.166531,-72.161291,-72.159321,-72.155465,-72.155217,-72.154173,-72.14916,-72.148057,-72.141966,-72.140309,-72.139893,-72.137728,-72.136816,-72.134744,-72.132152,-72.130807,-72.126974,-72.126088,-72.125195,-72.124607,-72.123477,-72.124563,-72.118743,-72.116059,-72.114253,-72.111971,-72.110566,-72.10858,-72.101806,-72.101653,-72.102792,-72.103112,-72.101288,-72.099311,-72.10144,-72.101944,-72.103302,-72.106566,-72.104788,-72.093757,-72.091525,-72.087922,-72.087296,-72.088869,-72.087919,-72.089159,-72.088246,-72.084512,-72.074232,-72.072653,-72.072661,-72.070164,-72.067424,-72.065844,-72.064865,-72.064568,-72.063873,-72.066504,-72.069253,-72.06562,-72.062067,-72.058365,-72.057295,-72.057528,-72.060753,-72.063237,-72.063274,-72.064303,-72.068891,-72.068821,-72.065159,-72.066526,-72.065363,-72.063602,-72.063658,-72.066924,-72.070118,-72.07099,-72.073008,-72.074648,-72.079605,-72.084502,-72.089322,-72.089588,-72.09288,-72.092904,-72.097999,-72.096135,-72.101152,-72.105511,-72.108454,-72.110622,-72.112809,-72.112473,-72.110777,-72.110909,-72.110032,-72.108833,-72.10745,-72.104906,-72.103885,-72.0976,-72.094722,-72.092863,-72.08921,-72.088045,-72.088881,-72.085298,-72.083536,-72.078848,-72.079087,-72.084932,-72.082179,-72.079087,-72.076608,-72.074349,-72.073427,-72.0707,-72.068704,-72.066694,-72.064771,-72.059902,-72.059127,-72.054581,-72.053309,-72.056057,-72.053631,-72.05252,-72.050701,-72.049247,-72.047676,-72.046729,-72.045429,-72.045546,-72.043837,-72.047441,-72.047574,-72.046616,-72.045184,-72.044569,-72.039776,-72.040205,-72.036349,-72.035279,-72.032842,-72.030219,-72.034455,-72.038838,-72.038747,-72.034394,-72.031471,-72.045045,-72.045616,-72.046213,-72.048089,-72.048974,-72.046133,-72.046535,-72.049888,-72.0535,-72.051577,-72.049467,-72.045066,-72.046904,-72.04352,-72.040317,-72.051902,-72.058641,-72.067703,-72.071721,-72.07203,-72.072871,-72.070171,-72.067679,-72.06634,-72.063966,-72.063374,-72.058313,-72.058237,-72.060061,-72.056279,-72.056601,-72.05608,-72.054015,-72.050197,-72.049569,-72.050006,-72.053988,-72.049288,-72.046491,-72.045936,-72.044102,-72.043371,-72.041178,-72.040454,-72.039351,-72.039942,-72.037906,-72.040428,-72.040921,-72.040198,-72.038074,-72.034599,-72.036704,-72.033045,-72.033722,-72.033833,-72.035529,-72.041128,-72.042005,-72.041708,-72.042625,-72.043699,-72.045348,-72.047275,-72.047632,-72.053249,-72.050968,-72.050459,-72.051751,-72.049908,-72.053489,-72.057636,-72.058412,-72.061486,-72.060538,-72.058912,-72.060955,-72.060282,-72.058917,-72.058677,-72.059717,-72.05898,-72.06156,-72.058728,-72.057607,-72.059507,-72.061661,-72.060043,-72.057988,-72.055836,-72.052073,-72.048008,-72.048561,-72.050805,-72.058389,-72.063962,-72.066956,-72.067634,-72.070261,-72.073244,-72.069665,-72.071966,-72.073907,-72.074189,-72.076751,-72.077725,-72.075482,-72.071887,-72.070146,-72.072475,-72.070855,-72.068969,-72.066319,-72.065745,-72.067855,-72.068567,-72.067229,-72.065468,-72.06484,-72.062312,-72.060258,-72.058319,-72.056829,-72.054716,-72.056113,-72.055789,-72.053858,-72.049914,-72.046661,-72.047241,-72.045128,-72.045566,-72.049399,-72.051367,-72.055694,-72.055049,-72.060034,-72.061264,-72.06504,-72.066971,-72.068137,-72.071622,-72.072249,-72.074965,-72.075315,-72.077858,-72.07012,-72.06939,-72.070139,-72.071824,-72.07203,-72.074838,-72.077534,-72.077787,-72.079019,-72.079564,-72.079179,-72.076256,-72.075923,-72.073669,-72.07163,-72.071291,-72.066936,-72.062761,-72.058608,-72.057112,-72.054876,-72.052534,-72.048589,-72.046392,-72.044824,-72.043803,-72.043687,-72.045488,-72.046159,-72.042821,-72.043851,-72.043662,-72.04066,-72.038314,-72.035753,-72.037814,-72.037684,-72.034611,-72.03393,-72.033733,-72.02927,-72.029385,-72.028177,-72.027809,-72.018814,-72.015298,-72.015578,-72.017355,-72.017014,-72.020343,-72.02159,-72.020018,-72.020692,-72.019564,-72.019465,-72.020179,-72.019977,-72.020865,-72.007679,-72.002098,-72.003654,-72.003354,-72.004014,-72.006434,-72.003102,-72.00336,-72.001894,-72.001086,-71.999384,-71.999585,-71.998265,-72.007376,-72.009189,-72.008021,-72.006915,-72.007094,-71.99953,-71.999506,-71.996714,-72.002325,-72.005169,-72.00501,-72.007312,-72.010649,-72.014447,-72.022315,-72.027446,-72.027416,-72.028687,-72.032153,-72.033857,-72.035244,-72.033838,-72.032557,-72.027656,-72.027191,-72.023988,-72.023078,-72.023224,-72.022372,-72.019827,-72.015352,-72.00709,-72.007568,-72.00491,-72.001868,-72.000178,-71.99929,-71.999478,-71.998951,-71.997629,-71.995621,-71.993407,-71.992987,-71.984786,-71.987214,-71.984956,-71.981603,-71.980497,-71.981264,-71.981286,-71.983512,-71.984499,-71.984372,-71.982666,-71.985697,-71.986572,-71.985299,-71.98614,-71.985324,-71.983603,-71.984629,-71.984405,-71.98592,-71.988994,-71.992038,-71.998398,-71.997758,-71.991096,-71.982834,-71.979456,-71.976199,-71.973159,-71.972258,-71.96895,-71.970414,-71.970939,-71.969306,-71.966641,-71.964179,-71.965989,-71.9675,-71.972192,-71.971464,-71.97297,-71.974925,-71.972251,-71.969608,-71.968599,-71.970753,-71.972053,-71.976122,-71.979002,-71.97955,-71.978938,-71.976268,-71.975267,-71.973816,-71.973421,-71.982718,-71.983036,-71.981782,-71.97966,-71.97465,-71.975979,-71.97951,-71.977714,-71.974775,-71.972164,-71.972772,-71.974596,-71.971467,-71.96522,-71.962473,-71.962066,-71.96075,-71.961435,-71.963067,-71.961756,-71.957501,-71.958136,-71.959637,-71.961378,-71.958632,-71.960644,-71.962755,-71.961867,-71.965393,-71.962618,-71.965314,-71.965611,-71.961295,-71.959073,-71.958607,-71.954954,-71.9554,-71.949238,-71.944232,-71.9465,-71.948557,-71.95098,-71.953001,-71.955866,-71.957977,-71.959704,-71.959859,-71.959595,-71.957511,-71.957781,-71.954402,-71.946497,-71.944558,-71.945268,-71.944814,-71.941638,-71.941186,-71.942898,-71.943061,-71.946325,-71.947766,-71.950095,-71.948084,-71.942883,-71.944876,-71.945624,-71.94902,-71.950582,-71.944636,-71.938269,-71.938921,-71.937343,-71.935256,-71.937208,-71.937631,-71.937422,-71.93683,-71.938352,-71.93664,-71.936436,-71.937207,-71.936552,-71.937549,-71.937089,-71.933662,-71.926088,-71.927461,-71.919762,-71.918932,-71.917659,-71.912078,-71.911335,-71.912996,-71.909022,-71.906937,-71.906888,-71.909451,-71.907864,-71.904767,-71.903329,-71.903401,-71.895735,-71.895587,-71.892526,-71.890961,-71.892544,-71.89347,-71.894989,-71.894878,-71.89671,-71.899313,-71.8975,-71.895402,-71.892019,-71.889923,-71.891192,-71.891012,-71.893021,-71.893299,-71.895819,-71.897894,-71.897988,-71.899343,-71.901068,-71.903042,-71.902707,-71.904855,-71.904027,-71.9051670579552,-71.9057103436312,-71.906945,-71.907862,-71.907272,-71.909083,-71.91078,-71.90799,-71.908026,-71.911571,-71.909453,-71.908608,-71.909597,-71.911585,-71.915029,-71.913128,-71.913732,-71.919623,-71.920581,-71.92671,-71.928428,-71.930973,-71.932095,-71.92962,-71.929188,-71.927419,-71.926661,-71.92839,-71.928332,-71.929861,-71.929759,-71.931455,-71.9331295334766,-71.9333325383289,-71.933377,-71.93377,-71.933785,-71.93321,-71.933137,-71.933348,-71.934528,-71.935387,-71.9361116599624,-71.936284,-71.945652,-71.947748455275,-71.949132578618,-71.953083,-71.954009,-71.952269,-71.950122,-71.952192,-71.95393,-71.95385,-71.95538,-71.957861,-71.958276,-71.95987,-71.959529,-71.961648,-71.961312,-71.963089,-71.962469,-71.9623,-71.964306,-71.963359,-71.964516,-71.962477,-71.96244,-71.969266,-71.979447,-71.9802752216186,-71.982194,-71.988153,-71.989231,-71.9908606263986,-71.991917,-71.991876,-71.992771,-71.995942,-71.998213,-71.99926,-71.999011691448,-71.9997103120774,-72.000731,-72.001435,-72.002499,-72.003703,-72.003573,-72.00455,-72.004239,-72.003577,-72.0036509005825,-72.005143,-72.0056918504038,-72.0102887045407,-72.010838,-72.021898,-72.027497,-72.030262,-72.035341,-72.0357776297516,-72.036447,-72.041527,-72.0419997912178,-72.049123,-72.0537574511244,-72.056325,-72.060507,-72.063614,-72.065048,-72.066956,-72.074104,-72.0820020402424,-72.088478,-72.094443,-72.093097,-72.098438,-72.1006102997276,-72.1011707464175,-72.101358,-72.107782,-72.11182,-72.123044,-72.1250818585511,-72.1336651411307,-72.13387282104,-72.134221,-72.1381330456147,-72.144041,-72.1481994855432,-72.148276,-72.15064,-72.153936,-72.156535,-72.160342,-72.160888,-72.162177,-72.163918,-72.164005,-72.1617718726939,-72.164401,-72.1663617643688,-72.165978,-72.16552,-72.165068,-72.166283,-72.166799,-72.167025,-72.166923,-72.1673733067818,-72.1675724603383,-72.1695052691599,-72.169281,-72.16971,-72.170962,-72.172715,-72.1731505950534,-72.173922,-72.1744953970793,-72.1774650579298,-72.1775630159151,-72.177622,-72.184122,-72.1905843147668,-72.191022,-72.1913033098274,-72.1961932231956,-72.201422,-72.203022,-72.2035265811487,-72.2039543102256,-72.204022,-72.2023852143826,-72.202594,-72.203087,-72.203066,-72.203349,-72.203917,-72.20495,-72.2061501313467,-72.209992,-72.2128462561676,-72.212924,-72.2200201637111,-72.220203,-72.219417,-72.216514,-72.21727,-72.214948,-72.214934,-72.216595,-72.216108,-72.218511,-72.217376,-72.218237,-72.220512,-72.221527,-72.223825,-72.225664,-72.224702,-72.22676,-72.2275321600702,-72.2301147049761,-72.231815,-72.2352620329083,-72.235531,-72.241173,-72.24545,-72.2460444805639,-72.248161,-72.2486551497444,-72.251895,-72.2509154874491,-72.250515,-72.2508127684928,-72.2512593560239,-72.252416,-72.254796,-72.2557027912346,-72.261487,-72.268805,-72.2712030774014,-72.27798,-72.284687,-72.2906978865517,-72.290908566479,-72.298804,-72.3106653982949,-72.3151655811087,-72.319478,-72.325898,-72.327209,-72.321887,-72.313285,-72.314536,-72.317375,-72.320115,-72.32013,-72.318167,-72.314485,-72.314754,-72.312291,-72.315315,-72.317062,-72.318475,-72.321226,-72.323409,-72.322462,-72.326422,-72.328918,-72.331989,-72.331735,-72.333423,-72.332318],"lat":[41.304597,41.304918,41.303828,41.304894,41.303517,41.300716,41.298921,41.299789,41.301558,41.303969,41.303193,41.305241,41.305622,41.308632,41.3125,41.312566,41.316165,41.315896,41.313228,41.311876,41.310922,41.308021,41.30809,41.309321,41.31157,41.312595,41.314489,41.315682,41.315723,41.314099,41.312804,41.312419,41.313595,41.313673,41.31639,41.316563,41.322103,41.328841,41.334389,41.334421,41.339274,41.342211,41.342518,41.345075,41.346039,41.347324,41.349881,41.351707,41.35467,41.357495,41.358696,41.361493,41.365976,41.367457,41.370411,41.369847,41.368799,41.367117,41.36493,41.365218,41.36394,41.362322,41.3616,41.359515,41.360435,41.362275,41.364346,41.365211,41.366528,41.367195,41.37052,41.370361,41.3706,41.371858,41.372826,41.373555,41.375467,41.376822,41.378487,41.37894,41.377115,41.375741,41.375663,41.377222,41.378376,41.378526,41.37952,41.38019,41.381907,41.382003,41.382526,41.384515,41.382117,41.380239,41.381268,41.380887,41.37905,41.377502,41.377219,41.379277,41.379284,41.376475,41.375944,41.376243,41.374646,41.369404,41.367612,41.366167,41.365909,41.366209,41.371144,41.374755,41.377096,41.378738,41.381511,41.383597,41.383133,41.383251,41.387926,41.38833,41.391545,41.396806,41.399877,41.40042,41.402299,41.403533,41.404694,41.40467,41.405811,41.405972,41.407811,41.408824,41.408128,41.406484,41.406737,41.410503,41.41278,41.414392,41.416872,41.417125,41.425169,41.427854,41.429351,41.434388,41.437494,41.439397,41.440712,41.441948,41.442455,41.444827,41.447016,41.446373,41.447903,41.450785,41.45184,41.447787,41.448753,41.446796,41.446967,41.446125,41.442891,41.44262,41.440174,41.438675,41.439291,41.436723,41.436764,41.432774,41.429318,41.427832,41.427272,41.425736,41.425356,41.423254,41.423392,41.421044,41.41947,41.417094,41.415969,41.413989,41.413527,41.412123,41.409566,41.4085,41.406625,41.403557,41.405216,41.405607,41.40282,41.401672,41.40091,41.399091,41.397721,41.395647,41.39477,41.391528,41.391177,41.391929,41.393083,41.394132,41.392474,41.387817,41.386941,41.387543,41.387327,41.385742,41.385609,41.3835,41.382804,41.380763,41.377954,41.377577,41.374623,41.372266,41.371314,41.369739,41.366327,41.367107,41.369547,41.371514,41.376184,41.380541,41.382693,41.382691,41.381115,41.377752,41.374827,41.374739,41.37307,41.372383,41.372503,41.371115,41.369578,41.369172,41.368165,41.366898,41.361823,41.357794,41.356199,41.354287,41.35737,41.359303,41.364364,41.367083,41.369159,41.372194,41.376711,41.376002,41.373006,41.368597,41.368641,41.368171,41.368433,41.36935,41.369952,41.370709,41.371749,41.371774,41.374727,41.375182,41.375614,41.377456,41.377431,41.378795,41.375894,41.374832,41.375352,41.379256,41.380633,41.382705,41.386631,41.386629,41.387843,41.39377,41.394734,41.395843,41.400272,41.400595,41.401781,41.403139,41.401787,41.402795,41.402589,41.404323,41.406724,41.407786,41.408219,41.412736,41.408022,41.406519,41.405017,41.406188,41.403975,41.406077,41.407135,41.409687,41.41401,41.417375,41.418472,41.424895,41.424902,41.426012,41.431593,41.435785,41.43453,41.43362,41.432999,41.431112,41.431699,41.430099,41.428566,41.42559,41.424435,41.42408,41.4235,41.423286,41.421434,41.422682,41.424137,41.424211,41.426776,41.428275,41.433238,41.435205,41.434689,41.436332,41.438025,41.440796,41.44211,41.438954,41.440516,41.44281,41.444489,41.447833,41.450926,41.452479,41.454168,41.455526,41.456499,41.458385,41.460219,41.460789,41.46113,41.46153,41.461594,41.461551,41.462938,41.463472,41.462041,41.45869,41.456734,41.45546,41.454636,41.456378,41.456145,41.455674,41.457475,41.459419,41.459466,41.461536,41.460161,41.458582,41.458577,41.45761,41.457821,41.462625,41.462157,41.460757,41.460432,41.459521,41.457479,41.453439,41.452376,41.450264,41.450254,41.449047,41.447932,41.444466,41.446025,41.448508,41.450092,41.451978,41.453393,41.456244,41.457927,41.462354,41.472753,41.475677,41.476026,41.476563,41.477968,41.47901,41.481446,41.480511,41.485706,41.497181,41.497093,41.496212,41.497553,41.498788,41.500105,41.500971,41.500452,41.498021,41.498914,41.500972,41.501707,41.49955,41.501952,41.503154,41.502744,41.501603,41.502177,41.501627,41.503554,41.506609,41.508458,41.510558,41.511569,41.511745,41.510428,41.510041,41.508931,41.508298,41.50542,41.502899,41.502139,41.503751,41.505917,41.503891,41.502197,41.501997,41.501083,41.500536,41.497373,41.496601,41.495116,41.492904,41.494366,41.494637,41.492576,41.490308,41.491347,41.491063,41.488817,41.489168,41.487753,41.486666,41.485492,41.485248,41.483675,41.484489,41.485501,41.483263,41.48256,41.479685,41.478934,41.477592,41.475979,41.471866,41.467318,41.464985,41.463795,41.461963,41.462158,41.466849,41.469805,41.47135,41.470509,41.467886,41.466355,41.466961,41.468718,41.471448,41.472197,41.473578,41.471541,41.470871,41.471907,41.47753,41.477967,41.48019,41.478963,41.477538,41.477064,41.475801,41.475295,41.475294,41.475186,41.475207,41.474722,41.473927,41.473356,41.47103,41.470813,41.470096,41.467922,41.463942,41.460759,41.45953,41.456822,41.455485,41.451657,41.451665,41.449124,41.448893,41.446651,41.444129,41.445073,41.448132,41.456548,41.456384,41.460997,41.460752,41.462532,41.473638,41.475847,41.484986,41.490766,41.498196,41.499359,41.500591,41.501998,41.503135,41.502606,41.503622,41.506186,41.506187,41.508908,41.512362,41.529732,41.53003,41.531507,41.536143,41.536096,41.536816,41.538557,41.538754,41.539854,41.541913,41.543726,41.54467,41.545406,41.547287,41.547601,41.547929,41.548247,41.560103,41.557759,41.558658,41.560764,41.560829,41.562244,41.562468,41.563757,41.56641,41.567494,41.567751,41.564764,41.562484,41.560532,41.560593,41.562419,41.563774,41.562524,41.563573,41.564424,41.564008,41.567401,41.569721,41.568942,41.566383,41.565333,41.564638,41.563725,41.564014,41.566785,41.568049,41.569267,41.569032,41.570028,41.569734,41.566735,41.566299,41.567706,41.567668,41.563872,41.563368,41.562361,41.564012,41.563345,41.561856,41.561222,41.564527,41.574378,41.573361,41.576967,41.578475,41.576781,41.576351,41.576553,41.572486,41.568532,41.565074,41.566025,41.564222,41.562896,41.561515,41.562027,41.55761,41.55642,41.568574,41.570119,41.571899,41.563411,41.560033,41.556119,41.552456,41.550675,41.553226,41.566054,41.565096,41.560251,41.55955,41.561702,41.563613,41.564277,41.569483,41.571515,41.574717,41.581066,41.582813,41.583767,41.584177,41.58602,41.586955,41.586643,41.588723,41.590528,41.591901,41.593361,41.59455,41.600058,41.601787,41.602429,41.605779,41.606919,41.607444,41.607054,41.608544,41.609231,41.610675,41.614012,41.615612,41.616183,41.611742,41.611735,41.614955,41.614997,41.617197,41.617326,41.618202,41.617897,41.617712,41.61791,41.618859,41.619222,41.619513,41.619809,41.619046,41.618751,41.619421,41.618643,41.623342,41.619701,41.619904,41.618962,41.61992,41.624012,41.62505,41.620475,41.618181,41.616968,41.617367,41.616452,41.616524,41.615712,41.614335,41.612201,41.609655,41.609068,41.607647,41.607729,41.606653,41.605989,41.6038,41.601758,41.603948,41.599745,41.599267,41.59637,41.596073,41.593039,41.585034,41.58246,41.580386,41.578603,41.573396,41.57233,41.572562,41.566121,41.566285,41.567598,41.568876,41.569987,41.571264,41.570131,41.56555,41.563093,41.560016,41.558077,41.557786,41.556297,41.558075,41.557014,41.556957,41.555734,41.55309,41.55045,41.549238,41.546198,41.535309,41.534631,41.541598,41.540563,41.535165,41.532508,41.531096,41.517442,41.512078,41.517534,41.497898,41.494002,41.491819,41.489178,41.487582,41.48891,41.489025,41.48615,41.483939,41.484923,41.486032,41.485815,41.488098,41.490152,41.487658,41.487996,41.490038,41.491558,41.494563,41.493877,41.492402,41.490314,41.487431,41.487323,41.488494,41.491916,41.493207,41.494028,41.49584,41.499921,41.501485,41.502626,41.502999,41.501038,41.498211,41.49645,41.494655,41.491638,41.485936,41.486489,41.484557,41.483295,41.481313,41.475393,41.475655,41.476592,41.478411,41.479636,41.480279,41.481701,41.483684,41.484955,41.48544,41.484936,41.482906,41.478577,41.476022,41.474855,41.472065,41.471482,41.470148,41.467655,41.465351,41.464403,41.461493,41.460861,41.459067,41.457718,41.458339,41.457277,41.457085,41.454711,41.452826,41.453623,41.449708,41.451468,41.45219,41.453472,41.453854,41.450949,41.45302,41.450505,41.449309,41.446314,41.445598,41.446679,41.446181,41.443127,41.442324,41.442071,41.4406,41.439824,41.437863,41.438162,41.437296,41.435712,41.435397,41.434357,41.428457,41.428629,41.426203,41.426988,41.424971,41.42475,41.427217,41.427069,41.424789,41.422984,41.421266,41.419549,41.416619,41.414584,41.41,41.40916,41.412352,41.414749,41.412436,41.408784,41.408352,41.412457,41.413874,41.412973,41.41072,41.408519,41.407292,41.405617,41.402941,41.40009,41.399898,41.39723,41.395171,41.394347,41.392976,41.39317,41.393219,41.394774,41.394803,41.393066,41.391207,41.387203,41.38439,41.384748,41.38336,41.382108,41.382766,41.382548,41.384079,41.382947,41.377999,41.37548,41.373775,41.374448,41.370909,41.370286,41.368562,41.367739,41.362615,41.358858,41.355938,41.352914,41.351355,41.351651,41.350012,41.347853,41.346688,41.34579,41.345795,41.349213,41.34985,41.354581,41.358591,41.361322,41.36237,41.360957,41.357542,41.357327,41.354728,41.353847,41.352546,41.351636,41.34498,41.343735,41.339112,41.338419,41.335361,41.333355,41.325312,41.323346,41.331051,41.333714,41.336194,41.3381,41.336422,41.339486,41.3431,41.344268,41.344937,41.345396,41.351899,41.351393,41.354096,41.356376,41.361654,41.366724,41.370008,41.370812,41.371724,41.376648,41.378609,41.380523,41.387255,41.385247,41.384229,41.383489,41.382802,41.386372,41.386432,41.388485,41.390238,41.39332,41.394471,41.392186,41.389976,41.393425,41.393608,41.394495,41.397758,41.399342,41.399267,41.388599,41.38785,41.395318,41.396529,41.398841,41.399662,41.401338,41.402641,41.405484,41.406332,41.402803,41.399956,41.398776,41.398596,41.402348,41.401624,41.402476,41.403602,41.405462,41.407619,41.41045,41.414586,41.421634,41.430229,41.432529,41.434251,41.435883,41.438175,41.439333,41.439257,41.442898,41.444174,41.446153,41.446854,41.445462,41.44731,41.447868,41.448137,41.447472,41.447644,41.449286,41.446584,41.444156,41.439859,41.439493,41.437613,41.438301,41.435793,41.434965,41.432439,41.4315,41.430886,41.429415,41.426953,41.425797,41.423189,41.418277,41.415435,41.413343,41.411164,41.41122,41.41262,41.411101,41.409504,41.406624,41.403266,41.400467,41.398297,41.398498,41.397054,41.3929,41.389322,41.388953,41.387915,41.388426,41.379822,41.3786,41.373396,41.371858,41.371236,41.37161,41.373634,41.3751,41.377485,41.380449,41.382534,41.383392,41.385019,41.384866,41.386004,41.385211,41.385756,41.388115,41.390051,41.389959,41.391473,41.391225,41.393264,41.396786,41.397964,41.397899,41.396381,41.398053,41.400537,41.399188,41.402649,41.404299,41.40232,41.401603,41.400643,41.399085,41.397536,41.39432,41.393077,41.391398,41.38967,41.389376,41.388381,41.387491,41.386448,41.385408,41.384109,41.379405,41.379309,41.377924,41.377546,41.37442,41.374804,41.375874,41.37554,41.37387,41.369682,41.364413,41.36327,41.361914,41.358308,41.358892,41.361904,41.363636,41.365048,41.36464,41.362328,41.357392,41.356433,41.355894,41.35362,41.352255,41.350417,41.349294,41.34734,41.345556,41.342108,41.342669,41.345593,41.352784,41.353945,41.356548,41.354213,41.353584,41.351891,41.349047,41.350004,41.350068,41.34614,41.345588,41.342507,41.342863,41.349026,41.352814,41.353244,41.351647,41.351999,41.351319,41.350135,41.346375,41.345027,41.343135,41.343767,41.341382,41.340209,41.340408,41.341686,41.340929,41.340087,41.33897,41.338652,41.336298,41.333963,41.333874,41.33506,41.334319,41.334978,41.333525,41.33233,41.331851,41.329344,41.3273707585201,41.3273896000389,41.329997,41.330403,41.332296,41.335062,41.335019,41.338382,41.33937,41.341625,41.341742,41.343566,41.344277,41.344006,41.34504,41.345752,41.348627,41.345445,41.347221,41.344372,41.344628,41.341822,41.33847,41.338937,41.336758,41.33709,41.334411,41.334298,41.33265,41.332909,41.335229,41.336059,41.3339420861255,41.3342005935472,41.334845,41.334972,41.335347,41.335818,41.33659,41.336821,41.337456,41.337726,41.3377395413109,41.337959,41.337799,41.3353543719216,41.3337403776577,41.332676,41.33498,41.335672,41.33835,41.34068,41.338459,41.340571,41.340928,41.336965,41.33819,41.33889,41.339912,41.34012,41.338775,41.338627,41.336827,41.333595,41.327279,41.326828,41.325084,41.323828,41.321535,41.321033,41.329987,41.3299490109487,41.329861,41.320577,41.315856,41.3171907485303,41.320919,41.324317,41.324365,41.320637,41.321317,41.320454,41.3185482647122,41.318417763102,41.320401,41.320729,41.320137,41.317295,41.315369,41.314093,41.312545,41.311843,41.3105467420542,41.306687,41.3067203454328,41.3069996275278,41.307033,41.316838,41.316034,41.312121,41.312821,41.3140246926878,41.31587,41.318488,41.3185277727209,41.319127,41.3143498904137,41.315672,41.315466,41.314999,41.315238,41.318893,41.318993,41.3172242653722,41.315774,41.314164,41.309429,41.307642,41.3047622149844,41.3040192392526,41.303771,41.302861,41.299098,41.301751,41.3013219867432,41.2995150203024,41.2994712991941,41.299398,41.3007970941139,41.30291,41.3087861530248,41.311352,41.313108,41.314275,41.31434,41.313456,41.311669,41.311759,41.310086,41.308337,41.3062540670559,41.303715,41.305101968397,41.305557,41.305343,41.305886,41.306628,41.307424,41.307308,41.306211,41.3058174941284,41.3059583676028,41.3073255613338,41.309268,41.309553,41.309737,41.309596,41.3124834863483,41.317597,41.3183563636996,41.3222891577989,41.3224188859416,41.322497,41.323997,41.323247746114,41.323197,41.322994132336,41.3194677525031,41.315697,41.313197,41.3060824058035,41.3000514258192,41.299097,41.292463086668,41.290166,41.289561,41.288552,41.287185,41.286478,41.285724,41.2853742032198,41.286065,41.2912244671515,41.291365,41.2925358523326,41.29488,41.295671,41.29552,41.294678,41.29364,41.296207,41.297386,41.300099,41.302472,41.303025,41.308184,41.306524,41.304277,41.301812,41.302032,41.300813,41.29985,41.298193737444,41.2972170386288,41.296574,41.3001351300686,41.300413,41.300153,41.297466,41.2979093934711,41.299488,41.2993731306968,41.29862,41.2956147419273,41.294386,41.2927685421842,41.2903427096669,41.291209,41.289847,41.2869500200886,41.282926,41.28443,41.2843338155331,41.284062,41.280805,41.280002384632,41.2799742531832,41.27892,41.278207915633,41.2779377527273,41.278005,41.278475,41.27926,41.278652,41.278822,41.28063,41.281471,41.281262,41.282959,41.284586,41.286399,41.288433,41.28971,41.294577,41.295895,41.298367,41.297755,41.296109,41.297713,41.300872,41.298781,41.299483,41.300388,41.302177,41.304597]},{"lng":[-71.890961,-71.888514,-71.886763,-71.886308,-71.886306,-71.884049,-71.880577,-71.879478,-71.876157,-71.876783,-71.878045,-71.876555,-71.875492,-71.876083,-71.874934,-71.873269,-71.871224,-71.868347,-71.863598,-71.855658,-71.857862,-71.862961,-71.863123,-71.860238,-71.860037,-71.864955,-71.866702,-71.86873,-71.868447,-71.866331,-71.868724,-71.863139,-71.860504,-71.852433,-71.847808,-71.846369,-71.844776,-71.8428165698118,-71.843472,-71.843256,-71.841726,-71.84115,-71.842244,-71.8421660144265,-71.842131,-71.83817,-71.835204,-71.832655,-71.833531,-71.830637,-71.832674,-71.831613,-71.832499,-71.837633,-71.837873,-71.8371717188438,-71.839489,-71.838232,-71.837197,-71.837757,-71.836679,-71.835958,-71.832178,-71.833743,-71.831791,-71.830538,-71.831753,-71.830588,-71.8336,-71.834895,-71.837052,-71.839051,-71.840036,-71.842515,-71.841957,-71.843623,-71.843088,-71.84399,-71.843624,-71.846017,-71.852036,-71.858476,-71.864688,-71.867019,-71.870072,-71.874618,-71.876141,-71.877343,-71.879602,-71.880981,-71.883591,-71.887984,-71.888311,-71.889862,-71.89072,-71.890961],"lat":[41.351319,41.351898,41.352316,41.352477,41.359576,41.360461,41.359708,41.359135,41.361356,41.364094,41.365128,41.364474,41.363342,41.361396,41.361928,41.362561,41.366711,41.366784,41.3717,41.382615,41.383449,41.383795,41.385132,41.386482,41.388767,41.388226,41.386149,41.385568,41.389513,41.393632,41.396479,41.402073,41.405449,41.407498,41.40255,41.404159,41.408839,41.4087322073789,41.40583,41.404461,41.403241,41.39923,41.396879,41.3958299905162,41.395359,41.390595,41.389558,41.387156,41.382368,41.378772,41.375621,41.370899,41.36944,41.365499,41.360145,41.3569451270681,41.356818,41.35549,41.353104,41.35216,41.350678,41.351578,41.349993,41.348545,41.346268,41.346186,41.344012,41.342888,41.342119,41.342509,41.338266,41.336019,41.335801,41.336897,41.340202,41.341521,41.342422,41.344405,41.346537,41.34964,41.352521,41.354228,41.355456,41.356353,41.354118,41.359613,41.36046,41.360314,41.358646,41.355289,41.351356,41.349814,41.349755,41.350009,41.351054,41.351319]},{"lng":[-72.336881,-72.333413,-72.332591,-72.328348,-72.328472,-72.324709,-72.323902,-72.322045,-72.321033,-72.316686,-72.312637,-72.311574,-72.309338,-72.306112,-72.302616,-72.310449,-72.316894,-72.317197,-72.31719,-72.314642,-72.304511,-72.307647,-72.309684,-72.314528,-72.315933,-72.315362,-72.30981,-72.307251,-72.301543,-72.299089,-72.294064,-72.292581,-72.294024,-72.29071,-72.292419,-72.293225,-72.291945,-72.295073,-72.295477,-72.29513,-72.296011,-72.290845,-72.286823,-72.282617,-72.289424,-72.290045,-72.288691,-72.290924,-72.294175,-72.296516,-72.297303,-72.299308,-72.302583,-72.310288,-72.314091,-72.317815,-72.323021,-72.321042,-72.325182,-72.327655,-72.329802,-72.325666,-72.325303,-72.328397,-72.32999,-72.33551,-72.336881],"lat":[41.313621,41.316434,41.321302,41.326807,41.330148,41.330055,41.334992,41.335445,41.3377,41.336576,41.339511,41.342733,41.344774,41.345805,41.350266,41.353453,41.357094,41.358485,41.358548,41.359018,41.361172,41.361932,41.364049,41.363796,41.365071,41.367311,41.368284,41.367047,41.367371,41.368891,41.368929,41.36715,41.365323,41.364823,41.364398,41.3623,41.36073,41.361917,41.354651,41.351125,41.349707,41.350818,41.351063,41.349287,41.350645,41.346855,41.345944,41.343569,41.343643,41.342829,41.33921,41.336962,41.336658,41.337488,41.335054,41.334188,41.330614,41.328937,41.326252,41.323333,41.316095,41.314262,41.311797,41.30881,41.306283,41.311333,41.313621]},{"lng":[-72.016983,-72.012394,-72.009699,-72.006577,-72.003518,-71.998165,-71.99764,-71.990539,-71.989043,-71.990033,-71.992202,-71.996634,-71.998738,-72.001263,-72.00123,-72.000429,-72.010771,-72.00669,-72.005922,-72.000902,-71.999019,-71.998398,-71.998417,-72.003416,-72.012872,-72.018156,-72.016983],"lat":[41.453295,41.458766,41.46366,41.466049,41.469433,41.470484,41.472827,41.474499,41.468795,41.465866,41.466906,41.467636,41.465966,41.465315,41.461462,41.457317,41.456015,41.451884,41.449751,41.447375,41.447481,41.44731,41.447289,41.445995,41.446975,41.445908,41.453295]},{"lng":[-71.944134,-71.941209,-71.937851,-71.935446,-71.930771,-71.928236,-71.924953,-71.927772,-71.928808,-71.927576,-71.928313,-71.929842,-71.928197,-71.930887,-71.932436,-71.944054,-71.944232,-71.944134],"lat":[41.404391,41.40745,41.412937,41.418068,41.424207,41.428299,41.424435,41.421837,41.419771,41.416415,41.412652,41.40964,41.40752,41.405713,41.406044,41.404348,41.404299,41.404391]},{"lng":[-72.333146,-72.333963,-72.327367,-72.318956,-72.317188,-72.31719,-72.317878,-72.334182,-72.333146],"lat":[41.359057,41.360998,41.358437,41.359417,41.358568,41.358548,41.358419,41.355598,41.359057]},{"lng":[-72.048194,-72.045822,-72.043593,-72.040226,-72.03898,-72.039368,-72.03798,-72.037356,-72.044092,-72.046608,-72.046981,-72.048194],"lat":[41.596178,41.599633,41.600929,41.604607,41.605339,41.604076,41.602321,41.597746,41.600246,41.595738,41.59531,41.596178]},{"lng":[-72.048666,-72.04643,-72.044357,-72.047753,-72.048168,-72.043933,-72.043208,-72.042665,-72.045742,-72.04707,-72.048008,-72.047036,-72.049271,-72.048666],"lat":[41.458853,41.458329,41.46335,41.464311,41.465919,41.468032,41.468061,41.464752,41.458327,41.453638,41.453623,41.456497,41.457265,41.458853]},{"lng":[-72.182388,-72.178555,-72.176922,-72.174833,-72.16766,-72.170762,-72.176172,-72.17759,-72.180199,-72.181933,-72.182401,-72.182388],"lat":[41.382708,41.388263,41.393072,41.39337,41.396105,41.393557,41.391116,41.387188,41.383726,41.382836,41.382691,41.382708]},{"lng":[-72.3405,-72.341318,-72.340461,-72.340243,-72.33575,-72.335751,-72.335078,-72.331247,-72.331452,-72.339223,-72.340157,-72.342115,-72.3405],"lat":[41.322805,41.325134,41.327201,41.324113,41.323889,41.324972,41.323921,41.323762,41.323187,41.320395,41.322048,41.322305,41.322805]},{"lng":[-72.23783,-72.238479,-72.238488,-72.235323,-72.234776,-72.23465,-72.234763,-72.24021,-72.23783],"lat":[41.411409,41.412614,41.415293,41.408491,41.406124,41.405811,41.405758,41.407495,41.411409]},{"lng":[-72.070146,-72.070075,-72.067547,-72.063214,-72.061932,-72.061382,-72.058738,-72.059094,-72.062626,-72.063822,-72.067585,-72.070108,-72.070146],"lat":[41.4406,41.440645,41.442858,41.444139,41.446242,41.44444,41.44423,41.44255,41.443068,41.441293,41.441727,41.440566,41.4406]},{"lng":[-72.087921,-72.087813,-72.086581,-72.081749,-72.085152,-72.085512,-72.087771,-72.087922,-72.087921],"lat":[41.572001,41.573894,41.576549,41.576488,41.575254,41.573088,41.571973,41.571899,41.572001]},{"lng":[-71.974591,-71.972426,-71.967793,-71.967481,-71.971508,-71.974508,-71.97465,-71.974591],"lat":[41.389015,41.390063,41.390634,41.390613,41.389036,41.388941,41.388953,41.389015]},{"lng":[-72.161833,-72.159511,-72.158862,-72.159031,-72.160748,-72.15984,-72.162934,-72.161833],"lat":[41.560838,41.56068,41.560593,41.560466,41.559786,41.559628,41.559154,41.560838]},{"lng":[-72.215311,-72.215096,-72.212603,-72.211568,-72.210406,-72.211034,-72.215276,-72.215311],"lat":[41.427832,41.427938,41.427374,41.427833,41.427294,41.426293,41.427812,41.427832]}],[{"lng":[-72.730625,-72.728767,-72.72555,-72.722365,-72.720035,-72.717604,-72.715641,-72.714763,-72.709053,-72.707896,-72.715675,-72.717833,-72.716201,-72.713619,-72.714638,-72.713344,-72.712776,-72.714992,-72.715688,-72.714111,-72.718037,-72.715212,-72.711689,-72.707258,-72.708465,-72.711162,-72.712419,-72.715366,-72.716195,-72.704171,-72.703746,-72.703451,-72.69958,-72.701516,-72.699553,-72.696978,-72.693557,-72.688195,-72.687691,-72.686071,-72.684058,-72.68341,-72.681691,-72.682591,-72.681273,-72.678631,-72.675254,-72.670799,-72.666531,-72.665336,-72.665141,-72.667387,-72.66976,-72.671549,-72.659512,-72.651744,-72.637678,-72.644319,-72.645821,-72.648755,-72.64766,-72.646002,-72.649418,-72.655361,-72.653881,-72.653419,-72.656172,-72.657435,-72.656998,-72.659962,-72.660961,-72.662499,-72.66817,-72.670395,-72.667946,-72.663228,-72.663157,-72.664503,-72.665277,-72.665441,-72.668367,-72.669394,-72.657818,-72.658104,-72.65711,-72.655934,-72.655814,-72.656247,-72.655208,-72.65406,-72.65353,-72.654449,-72.652035,-72.652333,-72.650803,-72.646806,-72.64526,-72.644422,-72.641685,-72.638746,-72.637032,-72.6369699626683,-72.607933,-72.606933,-72.590233,-72.582332,-72.573231,-72.5315724231202,-72.528131,-72.50919168706,-72.49973,-72.499428,-72.499406,-72.500744,-72.499709,-72.500803,-72.50368,-72.503962,-72.506032,-72.506475,-72.509707,-72.510479,-72.515151,-72.515802,-72.516356,-72.52006,-72.519489,-72.519834,-72.521646,-72.523951,-72.524624,-72.528403,-72.531503,-72.532602,-72.534077,-72.533366,-72.532565,-72.533676,-72.532619,-72.533017,-72.530333,-72.527681,-72.527226,-72.523153,-72.523411,-72.517878,-72.515475,-72.51363,-72.514128,-72.518255,-72.519797,-72.521951,-72.522325,-72.525065,-72.526198,-72.528021,-72.530674,-72.531983,-72.532828,-72.536798,-72.536322,-72.533963,-72.533119,-72.529901,-72.529107,-72.529799,-72.529022,-72.52229,-72.521607,-72.52653,-72.533195,-72.54013,-72.543288,-72.54278,-72.541854,-72.540668,-72.541959,-72.541378,-72.542657,-72.542484,-72.545604,-72.553533,-72.553388,-72.556041,-72.557004,-72.554102,-72.557934,-72.557979,-72.563283,-72.567141,-72.567814,-72.566455,-72.564332,-72.562124,-72.55791,-72.554755,-72.554413,-72.555603,-72.553281,-72.550339,-72.548361,-72.546136,-72.54453,-72.544478,-72.54954,-72.546786,-72.548715,-72.557424,-72.564282,-72.562084,-72.56082,-72.559645,-72.560937,-72.565807,-72.5695,-72.571289,-72.572849,-72.560016,-72.559891,-72.577367,-72.576984,-72.581071,-72.57826,-72.576486,-72.576285,-72.578914,-72.578481,-72.584994,-72.593253,-72.594446,-72.590931,-72.590932,-72.588833,-72.590732,-72.590432,-72.591731,-72.590423,-72.602794,-72.599362,-72.596679,-72.594791,-72.594542,-72.587965,-72.588262,-72.589873,-72.595214,-72.595294,-72.597742,-72.599593,-72.601726,-72.60291,-72.606235,-72.607007,-72.611081,-72.605151,-72.60456,-72.602709,-72.604721,-72.607835,-72.607472,-72.613304,-72.613276,-72.612563,-72.615064,-72.616164,-72.618543,-72.619285,-72.620898,-72.620985,-72.622678,-72.624898,-72.625291,-72.624302,-72.625038,-72.625117,-72.627812,-72.627639,-72.624717,-72.624869,-72.627827,-72.628827,-72.629649,-72.632952,-72.635956,-72.641902,-72.642773,-72.640113,-72.642925,-72.643828,-72.643199,-72.642362,-72.642662,-72.645513,-72.648094,-72.653277,-72.656993,-72.659432,-72.662172,-72.666908,-72.664843,-72.661642,-72.659512,-72.659284,-72.660385,-72.662536,-72.666128,-72.668346,-72.668654,-72.66805,-72.673059,-72.676331,-72.679169,-72.680714,-72.683586,-72.686539,-72.68579,-72.686363,-72.687604,-72.687472,-72.691281,-72.69626,-72.698832,-72.700794,-72.703101,-72.704894,-72.707244,-72.708808,-72.711709,-72.714544,-72.716967,-72.717413,-72.718485,-72.721871,-72.722775,-72.722813,-72.724908,-72.726973,-72.729559,-72.730625],"lat":[41.902787,41.903599,41.902403,41.902939,41.909808,41.909596,41.910784,41.913634,41.915272,41.918797,41.917357,41.917817,41.921321,41.923195,41.924052,41.926941,41.92852,41.929454,41.932173,41.933908,41.938475,41.942603,41.945,41.943585,41.941901,41.94139,41.940139,41.9392,41.938388,41.935946,41.936904,41.936925,41.93693,41.93955,41.939887,41.945649,41.946502,41.946196,41.947909,41.947769,41.945,41.945293,41.947742,41.949171,41.950381,41.950193,41.950863,41.954266,41.95596,41.955906,41.954952,41.951687,41.949747,41.947,41.946307,41.946083,41.944717,41.95297,41.953325,41.952523,41.954614,41.955055,41.959295,41.96068,41.961911,41.964691,41.966625,41.971417,41.973003,41.972939,41.967495,41.962369,41.964626,41.965197,41.969904,41.971756,41.97225,41.971396,41.975495,41.981872,41.981857,41.983293,41.983958,41.985999,41.987036,41.986635,41.989604,41.992392,41.994911,41.995004,41.99665,41.997045,41.998592,42.000559,42.002027,42.002841,42.002653,42.005824,42.011573,42.024791,42.028697,42.0321148244445,42.030795,42.024995,42.024695,42.024695,42.030141,42.0339780228017,42.034295,42.0342165401236,41.984295,41.981694,41.98159,41.980485,41.980088,41.978502,41.978068,41.979729,41.981912,41.983433,41.982423,41.980662,41.980692,41.982807,41.979568,41.977644,41.974986,41.972766,41.972013,41.972093,41.969553,41.969085,41.966966,41.962963,41.95965,41.956542,41.955619,41.954369,41.951068,41.950298,41.949956,41.948363,41.946805,41.945873,41.944575,41.945036,41.943524,41.942997,41.932564,41.931261,41.932694,41.931255,41.932875,41.934069,41.9315,41.931805,41.931074,41.929044,41.929841,41.927234,41.924193,41.923494,41.921382,41.921493,41.921003,41.918883,41.917755,41.917173,41.914317,41.912332,41.910541,41.909302,41.909592,41.905058,41.904791,41.902311,41.901941,41.900253,41.894813,41.893199,41.895873,41.89616,41.899774,41.899209,41.899638,41.902537,41.902711,41.909301,41.907378,41.907019,41.907818,41.910002,41.911134,41.910581,41.911007,41.910693,41.913872,41.914256,41.916097,41.917474,41.919166,41.919468,41.921942,41.923011,41.923644,41.92634,41.926817,41.925841,41.925672,41.926733,41.92964,41.930552,41.937204,41.936014,41.935442,41.935929,41.937158,41.939317,41.940335,41.938657,41.941197,41.943272,41.944291,41.943836,41.944901,41.946303,41.949105,41.950402,41.950577,41.948509,41.944477,41.943185,41.943297,41.941807,41.940414,41.938325,41.937514,41.936404,41.934557,41.934443,41.933633,41.932185,41.930135,41.928322,41.927694,41.927689,41.926456,41.925868,41.926268,41.92574,41.92457,41.924105,41.922009,41.917071,41.918336,41.91688,41.915156,41.91313,41.912864,41.910347,41.909228,41.905571,41.90385,41.901347,41.898825,41.897794,41.906856,41.910974,41.917517,41.917109,41.916492,41.913489,41.904381,41.90428,41.903163,41.888784,41.887093,41.879268,41.87838,41.873226,41.868397,41.866079,41.861788,41.858931,41.863298,41.866169,41.870505,41.871798,41.873918,41.87826,41.880494,41.883083,41.887528,41.89037,41.888513,41.88569,41.882797,41.885268,41.88871,41.889736,41.886816,41.887682,41.889543,41.890915,41.89282,41.892524,41.893397,41.895455,41.8999,41.902475,41.902554,41.901443,41.899726,41.899743,41.901164,41.904463,41.907108,41.908019,41.911669,41.915362,41.916042,41.915433,41.915823,41.915197,41.915432,41.912227,41.908122,41.904784,41.903917,41.901606,41.897111,41.896057,41.895183,41.895375,41.898273,41.900632,41.901592,41.901783,41.902787]},{"lng":[-72.766139,-72.7660548890976,-72.763265,-72.763238,-72.761238,-72.759738,-72.761354,-72.76231,-72.762151,-72.760558,-72.758151,-72.757467,-72.754038,-72.751738,-72.753538,-72.757538,-72.755838,-72.7540992696252,-72.7516053156989,-72.749708,-72.747663,-72.745528,-72.750586,-72.750631,-72.748063,-72.748982,-72.751949,-72.756162,-72.760115,-72.761826,-72.762479,-72.765016,-72.7663047683742,-72.766139],"lat":[42.007695,42.0077549078,42.009742,42.012795,42.014595,42.016995,42.018183,42.019775,42.021527,42.021846,42.020865,42.020947,42.025395,42.030195,42.032095,42.033295,42.036195,42.03621220998,42.0362368951743,42.03239,42.017281,42.012107,42.011556,42.010253,42.010547,42.008375,42.005375,42.004785,42.005688,42.005558,42.007668,42.007299,42.006396481069,42.007695]},{"lng":[-72.573134,-72.571653,-72.568939,-72.565905,-72.563246,-72.559771,-72.557004,-72.561696,-72.566938,-72.568529,-72.569657,-72.572218,-72.572833,-72.573134],"lat":[41.896329,41.898313,41.900055,41.900459,41.901564,41.901607,41.899638,41.894528,41.890401,41.890046,41.892033,41.893951,41.894155,41.896329]},{"lng":[-72.733168,-72.729737,-72.723845,-72.724351,-72.726118,-72.72241,-72.718244,-72.718037,-72.71832,-72.724013,-72.729944,-72.729306,-72.733294,-72.732753,-72.734366,-72.733168],"lat":[41.951595,41.952525,41.951008,41.946214,41.943159,41.9416,41.938664,41.938475,41.938293,41.939981,41.942142,41.943777,41.944409,41.945763,41.948725,41.951595]},{"lng":[-72.612488,-72.605211,-72.602955,-72.600075,-72.595724,-72.597429,-72.597756,-72.607164,-72.607674,-72.60807,-72.610913,-72.612295,-72.612563,-72.612488],"lat":[41.903891,41.908472,41.908097,41.909063,41.907584,41.905938,41.903409,41.902369,41.901322,41.902277,41.901933,41.903441,41.90385,41.903891]}],[{"lng":[-72.366421,-72.362738,-72.359777,-72.359116,-72.355573,-72.349615,-72.346093,-72.344967,-72.344165,-72.343014,-72.342899,-72.336936,-72.333717,-72.333205,-72.330607,-72.327895,-72.324747,-72.325009,-72.328095,-72.343348,-72.34416,-72.344036,-72.347445,-72.348975,-72.356428,-72.357111,-72.362305,-72.364344,-72.366421],"lat":[41.614707,41.618563,41.620392,41.619371,41.620535,41.619326,41.620134,41.623106,41.619592,41.623155,41.625155,41.627254,41.62486,41.623065,41.621288,41.621194,41.617719,41.616746,41.605471,41.599325,41.609318,41.61415,41.614706,41.614033,41.613153,41.615413,41.614997,41.614436,41.614707]}],[{"lng":[-73.544728,-73.5435773624548,-73.541357,-73.54059,-73.539887,-73.539492,-73.538608,-73.538232,-73.537297,-73.536655,-73.539116,-73.540604,-73.540251,-73.540523,-73.53894,-73.533906,-73.530304,-73.520462,-73.51825,-73.517502,-73.526887,-73.525427,-73.524306,-73.525581,-73.531014,-73.525399,-73.521993,-73.520913,-73.516638,-73.518954,-73.521381,-73.520094,-73.51655,-73.516429,-73.521859,-73.521112,-73.522047,-73.524287,-73.525112,-73.521411,-73.520691,-73.521616,-73.520934,-73.521216,-73.53633,-73.5371022733491,-73.5371000886862,-73.536969,-73.536067,-73.5360668139182,-73.535986,-73.535885,-73.535857,-73.535769,-73.534369,-73.534269,-73.534269,-73.53415,-73.534055,-73.533969,-73.5339344194328,-73.5330852144834,-73.5330452968229,-73.530049,-73.530036,-73.527254,-73.526039,-73.52401,-73.521512,-73.518942,-73.517087,-73.515335,-73.51029,-73.508998,-73.507501,-73.504526,-73.50237,-73.500652,-73.498184,-73.49686,-73.496807,-73.494663,-73.491939,-73.490444,-73.491482,-73.490163,-73.48974,-73.490931,-73.488241,-73.484298,-73.485911,-73.487505,-73.48763,-73.489237,-73.494351,-73.492045,-73.492031,-73.490872,-73.490721,-73.488773,-73.486586,-73.483717,-73.483178,-73.485625,-73.482165,-73.481629,-73.479184,-73.475229,-73.473912,-73.471495,-73.470592,-73.472805,-73.473814,-73.477702,-73.481768,-73.482792,-73.483098,-73.482897,-73.483542,-73.484567,-73.484424,-73.482336,-73.481973,-73.48248,-73.483709,-73.487462,-73.48905,-73.490671,-73.488995,-73.488924,-73.492176,-73.492355,-73.490615,-73.491023,-73.489039,-73.487195,-73.487487,-73.483093,-73.482142,-73.485131,-73.481621,-73.479937,-73.477949,-73.475236,-73.473334,-73.472434,-73.471066,-73.467849,-73.466034,-73.463748,-73.462199,-73.459247,-73.457842,-73.458449,-73.459925,-73.460662,-73.463847,-73.46436,-73.465938,-73.466273,-73.464819,-73.466185,-73.465205,-73.463546,-73.462485,-73.462813,-73.46076,-73.460626,-73.464096,-73.46563,-73.466515,-73.470255,-73.470942,-73.46693,-73.46568,-73.463301,-73.46349,-73.466403,-73.468164,-73.46804,-73.469258,-73.469435,-73.46855,-73.46611,-73.463064,-73.460266,-73.459117,-73.45923,-73.45837,-73.458107,-73.454573,-73.452769,-73.452455,-73.452943,-73.451278,-73.450204,-73.446641,-73.445371,-73.445051,-73.439366,-73.431294,-73.433354,-73.435145,-73.432472,-73.42797,-73.428067,-73.426942,-73.424776,-73.423987,-73.424432,-73.423884,-73.425548,-73.427723,-73.429716,-73.431285,-73.433379,-73.434934,-73.438291,-73.438254,-73.43543,-73.434846,-73.43562,-73.437635,-73.44016,-73.442145,-73.443335,-73.444409,-73.44297,-73.443459,-73.443394,-73.442095,-73.438776,-73.436692,-73.433386,-73.432918,-73.435196,-73.434035,-73.43748,-73.439752,-73.430765,-73.425465,-73.419085,-73.402464,-73.395064,-73.391212,-73.388129,-73.386735,-73.386744,-73.389411,-73.390072,-73.388481,-73.384158,-73.380002,-73.378564,-73.378698,-73.377285,-73.381958,-73.383535,-73.384372,-73.382502,-73.381276,-73.381588,-73.379346,-73.377712,-73.376663,-73.371481,-73.371535,-73.372342,-73.37089,-73.370506,-73.367138,-73.36532,-73.362229,-73.360148,-73.360327,-73.358982,-73.356812,-73.356827,-73.355913,-73.357634,-73.356802,-73.354588,-73.351949,-73.34824,-73.350498,-73.351685,-73.353535,-73.357305,-73.360754,-73.359422,-73.356683,-73.353708,-73.35229,-73.35993,-73.364032,-73.363271,-73.364439,-73.364731,-73.363876,-73.362446,-73.359552,-73.354634,-73.355724,-73.35453,-73.35254,-73.351576,-73.349899,-73.346521,-73.336765,-73.334249,-73.332282,-73.331858,-73.334622,-73.335149,-73.334056,-73.330604,-73.330251,-73.324471,-73.323655,-73.320132,-73.315899,-73.318644,-73.320639,-73.322715,-73.325902,-73.330093,-73.335835,-73.335205,-73.33358,-73.333549,-73.325551,-73.325229,-73.327556,-73.328038,-73.333313,-73.335685,-73.337993,-73.337826,-73.33919,-73.340504,-73.34145,-73.341183,-73.336842,-73.335082,-73.333528,-73.332828,-73.3348,-73.334588,-73.332436,-73.330477,-73.329021,-73.329595,-73.334885,-73.336306,-73.337175,-73.338386,-73.341051,-73.339759,-73.33772,-73.335864,-73.339613,-73.332684,-73.33295,-73.329515,-73.328107,-73.326103,-73.324983,-73.325508,-73.327214,-73.325337,-73.325527,-73.324544,-73.323821,-73.320056,-73.317579,-73.314547,-73.307516,-73.304675,-73.303715,-73.303716,-73.30369,-73.300423,-73.296098,-73.291407,-73.289998,-73.284656,-73.279745,-73.274783,-73.271655,-73.270001,-73.267916,-73.26692,-73.268415,-73.270821,-73.268814,-73.266192,-73.264596,-73.262146,-73.258958,-73.255704,-73.251711,-73.249137,-73.247027,-73.246424,-73.248006,-73.259542,-73.266383,-73.267006,-73.265989,-73.266529,-73.267786,-73.269322,-73.272133,-73.277927,-73.278901,-73.281789,-73.281966,-73.282689,-73.285964,-73.286915,-73.288568,-73.291339,-73.29415,-73.296197,-73.293112,-73.291516,-73.291014,-73.291404,-73.291504,-73.291553,-73.291904,-73.292004,-73.292155,-73.292595,-73.293111,-73.293914,-73.294354,-73.297296,-73.299222,-73.294642,-73.293153,-73.292989,-73.289936,-73.289419,-73.287225,-73.28546,-73.288047,-73.286089,-73.284949,-73.284524,-73.283,-73.28534,-73.288893,-73.290451,-73.291986,-73.293567,-73.296188,-73.29973,-73.299905,-73.297677,-73.297386,-73.298901,-73.300587,-73.299766,-73.304151,-73.304681,-73.303818,-73.304147,-73.299927,-73.300252,-73.299839,-73.298751,-73.29912,-73.300479,-73.300151,-73.301587,-73.302039,-73.308661,-73.308958,-73.308674,-73.309461,-73.312008,-73.31238,-73.311554,-73.31134,-73.312279,-73.31234,-73.313172,-73.316489,-73.317777,-73.314114,-73.317434,-73.32154,-73.325865,-73.329175,-73.328763,-73.329994,-73.331735,-73.333775,-73.33344,-73.335014,-73.33454,-73.335516,-73.337314,-73.340093,-73.344539,-73.34651,-73.347643,-73.348353,-73.347446,-73.345607,-73.343477,-73.342185,-73.337134,-73.339708,-73.341282,-73.343042,-73.34447,-73.348321,-73.347979,-73.349249,-73.350486,-73.353315,-73.354858,-73.356634,-73.358968,-73.362293,-73.367356,-73.371068,-73.374076,-73.376128,-73.375358,-73.378175,-73.381452,-73.381365,-73.385488,-73.385161,-73.386841,-73.389108,-73.390156,-73.393767,-73.397662,-73.399232,-73.396819,-73.398696,-73.402351,-73.407227,-73.409849,-73.41035,-73.411234,-73.413159,-73.413746,-73.414191,-73.415413,-73.418401,-73.418461,-73.420576,-73.421,-73.423045,-73.417452,-73.416859,-73.41553,-73.414222,-73.414465,-73.418249,-73.417412,-73.419452,-73.420596,-73.421703,-73.421777,-73.423836,-73.425382,-73.427639,-73.429577,-73.430938,-73.433457,-73.437396,-73.435397,-73.436954,-73.436859,-73.439743,-73.441921,-73.443255,-73.441393,-73.440022,-73.43826,-73.435888,-73.4313,-73.431444,-73.435428,-73.435515,-73.436109,-73.433335,-73.431144,-73.428289,-73.427817,-73.425517,-73.430577,-73.432329,-73.432679,-73.433083,-73.434564,-73.433704,-73.435021,-73.433845,-73.435297,-73.437904,-73.439559,-73.440128,-73.442463,-73.444347,-73.445326,-73.446424,-73.450654,-73.451325,-73.454384,-73.457119,-73.456374,-73.458066,-73.455669,-73.455687,-73.456724,-73.457249,-73.458685,-73.458192,-73.461085,-73.46367,-73.464506,-73.462862,-73.463087,-73.464679,-73.464788,-73.465883,-73.466344,-73.468965,-73.469879,-73.475417,-73.474061,-73.473237,-73.473962,-73.474492,-73.475567,-73.477799,-73.479248,-73.482758,-73.48116,-73.480498,-73.480402,-73.481647,-73.485199,-73.485168,-73.487466,-73.490959,-73.491634,-73.49337,-73.494662,-73.494373,-73.495885,-73.501573,-73.501805,-73.502584,-73.505809,-73.509616,-73.508917,-73.509443,-73.508067,-73.509717,-73.510729,-73.511688,-73.515794,-73.516374,-73.524615,-73.53363,-73.5452425041353,-73.544728],"lat":[41.366375,41.3754237973337,41.375113,41.374828,41.374799,41.374954,41.375701,41.375662,41.375676,41.378684,41.38375,41.388842,41.389517,41.390745,41.391672,41.393017,41.393629,41.393874,41.393519,41.394553,41.394305,41.397759,41.398085,41.399467,41.403258,41.407431,41.407608,41.409652,41.411655,41.416635,41.417979,41.417655,41.418677,41.421593,41.425615,41.427976,41.430927,41.433437,41.435737,41.436395,41.439689,41.440356,41.44183,41.443994,41.440529,41.4397068909828,41.439729628954,41.441094,41.451331,41.4513349720427,41.45306,41.455236,41.455709,41.457159,41.475894,41.476394,41.476911,41.47806,41.478968,41.479693,41.4801139665613,41.4904517636663,41.4909377013371,41.49321,41.491535,41.489135,41.484863,41.48472,41.485636,41.485476,41.486529,41.48632,41.486746,41.485998,41.482335,41.485612,41.487479,41.484863,41.483436,41.481212,41.479057,41.479492,41.47805,41.475713,41.474024,41.4729,41.470703,41.469852,41.468016,41.469312,41.470815,41.473506,41.475296,41.477087,41.481401,41.482677,41.484235,41.486197,41.488172,41.490164,41.495706,41.497654,41.499534,41.501649,41.501112,41.503452,41.507465,41.508777,41.508234,41.509359,41.511256,41.512592,41.514533,41.518237,41.523992,41.528372,41.535633,41.540269,41.543957,41.54561,41.54719,41.548429,41.55021,41.552137,41.553094,41.554562,41.556105,41.559639,41.558961,41.559914,41.563474,41.565903,41.567028,41.5698,41.56452,41.562879,41.561969,41.560159,41.558624,41.558411,41.556339,41.552488,41.551372,41.54899,41.546159,41.542337,41.539067,41.535967,41.532388,41.529467,41.529379,41.526534,41.521638,41.520934,41.522747,41.521113,41.521588,41.526017,41.526826,41.523669,41.52233,41.521565,41.519341,41.517521,41.513306,41.511653,41.508797,41.50304,41.506432,41.507331,41.508577,41.511094,41.510243,41.506024,41.504206,41.497414,41.496399,41.495718,41.497277,41.498707,41.500709,41.499518,41.494683,41.490926,41.487238,41.486741,41.485535,41.488317,41.489499,41.49236,41.49151,41.489266,41.486159,41.48145,41.476654,41.470726,41.467733,41.462676,41.45999,41.460994,41.450524,41.45534,41.461276,41.461874,41.459297,41.460964,41.463834,41.463387,41.464493,41.466778,41.466676,41.468815,41.468516,41.469735,41.468826,41.472111,41.471898,41.47406,41.473001,41.470864,41.467938,41.466233,41.465733,41.469825,41.470591,41.472593,41.477561,41.479307,41.480917,41.484023,41.485573,41.484178,41.482257,41.476178,41.476387,41.481539,41.486328,41.490469,41.492401,41.497994,41.499294,41.501438,41.509094,41.511794,41.513381,41.514295,41.513407,41.511385,41.510634,41.507225,41.505397,41.503864,41.501414,41.500097,41.497077,41.493553,41.493912,41.492984,41.489199,41.490717,41.490416,41.491848,41.492447,41.491533,41.488717,41.486171,41.4817,41.477874,41.476188,41.477568,41.476235,41.472396,41.473296,41.473201,41.475808,41.476195,41.473769,41.471965,41.471196,41.470464,41.468189,41.467259,41.467299,41.464706,41.462803,41.463167,41.462349,41.464168,41.464574,41.459756,41.456768,41.452626,41.450103,41.442697,41.437577,41.437263,41.435616,41.433566,41.428977,41.427266,41.426748,41.428746,41.423913,41.418675,41.418957,41.420376,41.420532,41.419813,41.418916,41.419602,41.419189,41.420429,41.422235,41.423257,41.424338,41.423244,41.420124,41.418883,41.419742,41.421159,41.421869,41.423966,41.426328,41.427176,41.427502,41.429218,41.431202,41.432616,41.432187,41.434139,41.435291,41.437664,41.439544,41.441143,41.444663,41.443591,41.44444,41.44549,41.446847,41.449723,41.448953,41.450989,41.451282,41.449653,41.450054,41.451287,41.45558,41.456978,41.458802,41.458693,41.459883,41.461121,41.465399,41.467207,41.466224,41.468297,41.470179,41.472188,41.471108,41.472022,41.475027,41.471355,41.471105,41.467445,41.467898,41.466092,41.462428,41.460985,41.460839,41.457811,41.456277,41.454946,41.452048,41.448325,41.447854,41.449237,41.447108,41.444333,41.444069,41.444322,41.445225,41.44695,41.446939,41.447423,41.448744,41.451168,41.452221,41.451741,41.448632,41.445337,41.44328,41.439139,41.439626,41.438663,41.438487,41.436692,41.434835,41.433632,41.432935,41.433773,41.436756,41.436911,41.43823,41.436234,41.432415,41.421066,41.413585,41.411967,41.407989,41.407227,41.406891,41.407508,41.406545,41.408308,41.410026,41.412001,41.413391,41.414962,41.413903,41.414817,41.414006,41.413672,41.417413,41.417046,41.415383,41.413276,41.41089,41.409136,41.409115,41.409105,41.409038,41.409019,41.408993,41.408913,41.408821,41.408671,41.408589,41.408131,41.407886,41.402259,41.400701,41.399091,41.395926,41.394409,41.393624,41.391395,41.389303,41.388021,41.38548,41.382557,41.380636,41.379397,41.378737,41.376405,41.377334,41.376083,41.375419,41.37152,41.370582,41.369449,41.36735,41.36427,41.365447,41.370257,41.371822,41.37406,41.375655,41.378803,41.380499,41.382894,41.387394,41.388881,41.393986,41.396616,41.397482,41.398661,41.400748,41.402906,41.3977,41.395474,41.394397,41.394485,41.395761,41.397265,41.399645,41.402423,41.400265,41.397665,41.397069,41.397521,41.400991,41.400687,41.401546,41.396536,41.394303,41.392048,41.389093,41.383168,41.37975,41.375512,41.372518,41.371199,41.36997,41.370557,41.373273,41.375016,41.372851,41.373214,41.37201,41.370108,41.368873,41.364715,41.364231,41.360244,41.35934,41.357758,41.357393,41.357761,41.360484,41.36486,41.368928,41.369152,41.367666,41.367738,41.369341,41.36906,41.37377,41.373426,41.371834,41.372247,41.370961,41.369623,41.370038,41.369036,41.365661,41.367206,41.363264,41.364178,41.366526,41.366477,41.362315,41.356144,41.355381,41.351061,41.35211,41.356284,41.358239,41.361811,41.357959,41.355031,41.353263,41.349774,41.352607,41.354604,41.357404,41.350607,41.343661,41.339385,41.335499,41.336249,41.3376,41.337382,41.337261,41.336883,41.333394,41.33195,41.329139,41.328755,41.326159,41.324462,41.323427,41.321553,41.323629,41.323151,41.324381,41.324759,41.32334,41.324577,41.324606,41.327274,41.328806,41.329317,41.331517,41.331984,41.330217,41.329364,41.329438,41.330193,41.331579,41.332633,41.333299,41.334702,41.33581,41.338119,41.338804,41.34045,41.338267,41.355726,41.36288,41.362959,41.364602,41.36713,41.367366,41.372399,41.375888,41.375766,41.373174,41.374396,41.376202,41.37827,41.379306,41.381756,41.380896,41.379735,41.37817,41.381275,41.378575,41.377924,41.376725,41.374101,41.373403,41.373905,41.3753,41.376738,41.377441,41.37797,41.379455,41.377684,41.375504,41.374144,41.374042,41.375941,41.376491,41.375461,41.374102,41.3726,41.370789,41.366243,41.362595,41.363658,41.366277,41.367366,41.368372,41.367179,41.366579,41.364636,41.362292,41.359078,41.358667,41.359418,41.358357,41.357976,41.359421,41.361105,41.363514,41.363076,41.361839,41.360095,41.361995,41.363,41.362647,41.363246,41.362683,41.359873,41.357287,41.35391,41.352817,41.356368,41.357549,41.357008,41.36183,41.360755,41.361976,41.3615174507099,41.366375]},{"lng":[-73.381708,-73.380414,-73.37667,-73.374153,-73.370355,-73.367216,-73.365754,-73.362549,-73.362019,-73.364254,-73.363277,-73.364338,-73.363963,-73.358048,-73.357875,-73.355569,-73.353933,-73.351586,-73.350326,-73.349373,-73.350021,-73.347157,-73.344746,-73.341992,-73.342369,-73.341626,-73.345942,-73.344439,-73.347855,-73.34828,-73.356246,-73.357131,-73.363212,-73.365326,-73.367714,-73.36945,-73.369838,-73.376179,-73.378138,-73.375501,-73.37529,-73.371634,-73.380309,-73.381577,-73.380888,-73.381052,-73.381708],"lat":[41.359872,41.359911,41.356849,41.353606,41.351149,41.347065,41.345956,41.345883,41.344196,41.345158,41.343641,41.343038,41.33889,41.32878,41.325919,41.32486,41.325098,41.327533,41.329582,41.327703,41.326549,41.323306,41.322554,41.320134,41.317965,41.317012,41.315681,41.313029,41.311496,41.310407,41.322278,41.322643,41.322659,41.324013,41.324303,41.325452,41.326862,41.333387,41.336766,41.339263,41.342817,41.344876,41.343279,41.344252,41.350405,41.35781,41.359872]},{"lng":[-73.3319,-73.329368,-73.324011,-73.321084,-73.320757,-73.317671,-73.316158,-73.311621,-73.309597,-73.310049,-73.308086,-73.304783,-73.304151,-73.304179,-73.30597,-73.310044,-73.312004,-73.318811,-73.318898,-73.320679,-73.324607,-73.325373,-73.328131,-73.330507,-73.3319],"lat":[41.368587,41.36983,41.369908,41.370644,41.372314,41.374767,41.372824,41.368891,41.368831,41.371137,41.372422,41.372324,41.371822,41.371813,41.368913,41.36546,41.365492,41.363233,41.360112,41.358644,41.357787,41.360271,41.363211,41.367841,41.368587]},{"lng":[-73.29285,-73.290253,-73.285273,-73.284248,-73.282215,-73.28485,-73.286394,-73.283588,-73.285157,-73.287426,-73.289501,-73.284843,-73.28871,-73.29183,-73.292576,-73.292994,-73.29285],"lat":[41.402301,41.405152,41.407606,41.406989,41.402946,41.403685,41.402363,41.401811,41.40008,41.401074,41.398449,41.397015,41.395182,41.398112,41.400007,41.402306,41.402301]},{"lng":[-73.470364,-73.469106,-73.468967,-73.467272,-73.468602,-73.470839,-73.470364],"lat":[41.576362,41.577743,41.577494,41.573588,41.574144,41.574828,41.576362]},{"lng":[-73.375312,-73.373603,-73.37303,-73.370784,-73.370381,-73.371978,-73.373474,-73.375304,-73.375358,-73.375312],"lat":[41.369643,41.368872,41.36757,41.367572,41.365464,41.365119,41.368106,41.369514,41.369623,41.369643]},{"lng":[-73.294345,-73.293673,-73.293039,-73.293287,-73.292994,-73.293522,-73.293895,-73.294642,-73.294134,-73.29495,-73.294345],"lat":[41.406313,41.406497,41.405865,41.404426,41.402306,41.402336,41.402344,41.402259,41.403725,41.405403,41.406313]},{"lng":[-73.524683,-73.52341,-73.52237,-73.521381,-73.521615,-73.523613,-73.52466,-73.524683],"lat":[41.418987,41.419866,41.418978,41.417979,41.417884,41.417461,41.418697,41.418987]},{"lng":[-73.385161,-73.383861,-73.381708,-73.385079,-73.383956,-73.383227,-73.384879,-73.385161],"lat":[41.363264,41.362566,41.359872,41.359434,41.360123,41.361001,41.362847,41.363264]},{"lng":[-73.445084,-73.444409,-73.443351,-73.443018,-73.441997,-73.44155,-73.444611,-73.445676,-73.445084],"lat":[41.332027,41.332506,41.332697,41.332902,41.332622,41.332132,41.33154,41.331845,41.332027]}],[{"lng":[-73.472284,-73.472665,-73.470989,-73.46798,-73.466144,-73.464672,-73.463836,-73.461219,-73.461081,-73.456976,-73.455108,-73.453823,-73.451196,-73.450082,-73.449313,-73.452521,-73.453685,-73.452798,-73.451103,-73.448907,-73.449195,-73.44841,-73.44911,-73.449866,-73.448677,-73.446239,-73.445765,-73.446417,-73.448698,-73.450099,-73.451017,-73.44051,-73.44062,-73.439772,-73.438697,-73.436437,-73.43456,-73.433233,-73.433513,-73.430792,-73.429945,-73.43001,-73.430793,-73.428976,-73.427564,-73.427399,-73.428995,-73.428554,-73.427439,-73.423603,-73.422263,-73.420818,-73.421589,-73.420478,-73.422921,-73.421891,-73.419307,-73.418714,-73.416645,-73.415418,-73.41337,-73.412855,-73.411155,-73.4094,-73.409107,-73.406551,-73.404286,-73.401566,-73.400666,-73.398031,-73.394265,-73.393803,-73.392744,-73.390675,-73.39126,-73.389518,-73.390424,-73.38974,-73.386405,-73.385444,-73.385304,-73.383292,-73.383246,-73.382393,-73.380133,-73.37815,-73.374683,-73.373312,-73.372355,-73.372068,-73.372746,-73.369931,-73.36596,-73.367259,-73.366777,-73.369284,-73.370498,-73.371956,-73.373821,-73.373302,-73.370528,-73.372522,-73.376567,-73.379885,-73.383104,-73.385223,-73.388155,-73.389461,-73.384872,-73.384256,-73.378209,-73.376154,-73.376105,-73.371939,-73.370925,-73.368134,-73.368233,-73.364343,-73.361325,-73.356892,-73.356091,-73.353276,-73.351878,-73.353757,-73.353014,-73.364635,-73.372047,-73.379074,-73.388344,-73.391144,-73.393119,-73.393927,-73.392628,-73.390964,-73.39334,-73.3928,-73.397962,-73.404288,-73.405587,-73.407081,-73.406034,-73.405063,-73.406176,-73.40674,-73.40563,-73.401376,-73.397676,-73.394637,-73.393921,-73.392395,-73.388129,-73.391212,-73.395064,-73.402464,-73.419085,-73.425465,-73.430765,-73.439752,-73.441437,-73.442116,-73.442822,-73.442136,-73.439864,-73.438587,-73.437775,-73.438748,-73.439339,-73.441392,-73.441436,-73.440253,-73.438163,-73.437908,-73.436498,-73.435183,-73.435584,-73.436659,-73.436936,-73.438039,-73.438864,-73.438543,-73.438777,-73.440063,-73.441956,-73.442928,-73.443593,-73.442803,-73.442168,-73.443659,-73.44417,-73.442892,-73.440494,-73.439639,-73.439544,-73.440386,-73.440378,-73.442402,-73.442663,-73.442142,-73.439806,-73.432696,-73.432156,-73.430418,-73.43239,-73.437377,-73.439431,-73.442857,-73.449714,-73.45116,-73.453627,-73.456036,-73.458976,-73.460045,-73.460758,-73.461482,-73.461045,-73.461957,-73.465247,-73.469106,-73.474005,-73.472284],"lat":[41.588843,41.592104,41.592709,41.590988,41.591016,41.592748,41.59505,41.595672,41.596713,41.5972,41.597874,41.595947,41.594466,41.593003,41.593443,41.598066,41.602018,41.6049,41.605954,41.609776,41.609909,41.611435,41.614135,41.614827,41.615879,41.615902,41.618789,41.619669,41.619897,41.618985,41.619727,41.623898,41.621903,41.617418,41.617103,41.613564,41.613695,41.612199,41.611256,41.610751,41.614305,41.616913,41.619771,41.620036,41.621193,41.622526,41.62418,41.625149,41.624182,41.623895,41.623017,41.619345,41.618042,41.614136,41.608939,41.609243,41.606454,41.603462,41.602135,41.603924,41.604525,41.607528,41.610587,41.611732,41.613623,41.617408,41.619432,41.621113,41.622579,41.624039,41.624338,41.625312,41.63158,41.63388,41.635221,41.635899,41.63838,41.639857,41.643953,41.64324,41.639157,41.638498,41.634639,41.633968,41.629789,41.625031,41.620811,41.617241,41.613336,41.610015,41.60878,41.607138,41.607135,41.604521,41.601777,41.601524,41.602922,41.601483,41.600784,41.598024,41.593909,41.592123,41.590858,41.589089,41.588263,41.586915,41.586531,41.585306,41.582027,41.583958,41.585839,41.584937,41.583619,41.581992,41.581009,41.581772,41.578756,41.57414,41.573163,41.574206,41.573712,41.570095,41.56808,41.567527,41.565489,41.564886,41.565105,41.562143,41.557578,41.560866,41.563888,41.562244,41.558822,41.556637,41.556941,41.553353,41.549289,41.550013,41.550596,41.544699,41.54162,41.540301,41.537515,41.533848,41.529856,41.521267,41.51751,41.517138,41.516873,41.516242,41.514295,41.513381,41.511794,41.509094,41.501438,41.499294,41.497994,41.492401,41.49463,41.496828,41.501381,41.504304,41.502863,41.502751,41.504294,41.507554,41.513507,41.513017,41.515589,41.515893,41.518188,41.519306,41.518494,41.519134,41.522409,41.524392,41.527679,41.526198,41.530141,41.531749,41.535477,41.535512,41.537276,41.539055,41.542648,41.54343,41.547069,41.549643,41.552213,41.552907,41.550573,41.551642,41.556361,41.560101,41.564285,41.567735,41.569924,41.568651,41.568074,41.57845,41.579918,41.581758,41.582253,41.582745,41.582443,41.583967,41.591216,41.593328,41.594181,41.594193,41.59612,41.595478,41.592471,41.587491,41.586044,41.583655,41.582312,41.577743,41.588341,41.588843]},{"lng":[-73.384357,-73.377858,-73.37575,-73.37424,-73.373081,-73.37107,-73.370043,-73.368853,-73.358546,-73.362286,-73.368717,-73.373122,-73.375954,-73.374194,-73.370412,-73.37187,-73.373308,-73.373825,-73.377758,-73.384524,-73.382463,-73.385587,-73.384357],"lat":[41.659978,41.658984,41.660014,41.659999,41.660941,41.662121,41.663451,41.663405,41.669804,41.6613,41.6625,41.660847,41.65801,41.657461,41.655286,41.654481,41.652832,41.651738,41.650326,41.647297,41.651839,41.658171,41.659978]},{"lng":[-73.467088,-73.465611,-73.460456,-73.461033,-73.461333,-73.467272,-73.467088],"lat":[41.573571,41.57267,41.562709,41.561543,41.560719,41.573588,41.573571]}],[{"lng":[-73.235986,-73.23411,-73.233689,-73.231462,-73.231462,-73.22868,-73.228046,-73.229123,-73.223748,-73.223566,-73.222792,-73.223408,-73.22777,-73.229388,-73.227401,-73.223598,-73.222716,-73.218658,-73.219885,-73.221049,-73.221565,-73.21934,-73.21772,-73.215116,-73.212672,-73.213081,-73.209917,-73.211375,-73.210707,-73.212265,-73.210507,-73.209392,-73.207157,-73.205395,-73.203773,-73.20329,-73.201726,-73.200757,-73.201946,-73.200079,-73.201437,-73.197668,-73.196153,-73.19172,-73.191547,-73.194394,-73.197432,-73.199228,-73.200942,-73.20327,-73.208792,-73.206686,-73.203935,-73.206603,-73.20724,-73.207857,-73.213575,-73.214392,-73.217217,-73.216468,-73.213622,-73.213954,-73.210943,-73.208147,-73.20839,-73.2098,-73.210845,-73.207376,-73.206687,-73.203744,-73.200033,-73.199905,-73.197499,-73.196332,-73.189257,-73.189458,-73.188185,-73.189741,-73.186439,-73.18471,-73.181841,-73.179928,-73.17911,-73.183114,-73.179793,-73.182666,-73.186513,-73.190255,-73.192813,-73.192997,-73.194386,-73.199507,-73.200975,-73.20127,-73.199053,-73.197775,-73.197519,-73.196226,-73.194713,-73.193968,-73.190178,-73.189751,-73.195203,-73.197061,-73.199327,-73.200124,-73.202358,-73.203969,-73.204504,-73.203824,-73.204757,-73.20684,-73.208006,-73.236673,-73.235986],"lat":[41.514769,41.516699,41.519809,41.521274,41.522031,41.523965,41.525811,41.52666,41.534645,41.538324,41.541372,41.540542,41.54087,41.541718,41.542068,41.547072,41.549856,41.550098,41.547055,41.546913,41.545342,41.543863,41.545041,41.543911,41.546265,41.5474,41.54889,41.556071,41.556624,41.557908,41.559555,41.559118,41.560654,41.560766,41.558791,41.560219,41.561069,41.560385,41.558218,41.556207,41.555035,41.552606,41.552313,41.553009,41.550028,41.551427,41.551983,41.551402,41.549762,41.548632,41.543795,41.537583,41.535749,41.535204,41.538481,41.537741,41.540424,41.539391,41.538351,41.537375,41.536539,41.53535,41.533616,41.533068,41.531523,41.529425,41.526695,41.526948,41.526347,41.52991,41.530546,41.531703,41.533748,41.536504,41.538249,41.536781,41.534004,41.533005,41.530027,41.531115,41.531083,41.528492,41.523143,41.524653,41.525837,41.526671,41.530006,41.529706,41.52813,41.525313,41.527534,41.528457,41.526869,41.524905,41.524635,41.523678,41.52122,41.519484,41.51905,41.517485,41.517344,41.516702,41.517598,41.519104,41.519685,41.517625,41.515805,41.51688,41.514425,41.513385,41.510905,41.508803,41.509007,41.512318,41.514769]},{"lng":[-73.244772,-73.243004,-73.240544,-73.238259,-73.23405,-73.231696,-73.229554,-73.229388,-73.229536,-73.231692,-73.239205,-73.24415,-73.249282,-73.244772],"lat":[41.560424,41.560565,41.553656,41.551485,41.545934,41.544754,41.541844,41.541718,41.541678,41.54044,41.545245,41.549844,41.556883,41.560424]},{"lng":[-73.252023,-73.248327,-73.246792,-73.247284,-73.246153,-73.244647,-73.242282,-73.242765,-73.246048,-73.247748,-73.24941,-73.249393,-73.252023],"lat":[41.530802,41.530872,41.526209,41.521272,41.517241,41.515102,41.512955,41.512985,41.512774,41.514706,41.518943,41.523544,41.530802]},{"lng":[-73.217378,-73.214409,-73.215036,-73.212634,-73.212265,-73.212382,-73.212915,-73.216913,-73.215658,-73.215739,-73.217449,-73.217378],"lat":[41.567217,41.563298,41.560422,41.558184,41.557908,41.557692,41.556204,41.55886,41.562205,41.563972,41.565403,41.567217]},{"lng":[-73.175003,-73.174764,-73.174213,-73.17213,-73.171928,-73.170371,-73.170771,-73.174855,-73.175003],"lat":[41.512726,41.513317,41.513645,41.514238,41.514176,41.512587,41.512544,41.511994,41.512726]}],[{"lng":[-71.944631,-71.937894,-71.936316,-71.938352,-71.930572,-71.931792,-71.930434,-71.926866,-71.924324,-71.922526,-71.920172,-71.919199,-71.919238,-71.896761,-71.896026,-71.895208,-71.893876,-71.894137,-71.893417,-71.890902,-71.890616,-71.890013,-71.889065,-71.88941,-71.888872,-71.888321,-71.889032,-71.889138,-71.887713,-71.885302,-71.883344,-71.884204,-71.886764,-71.888957,-71.888893,-71.890136,-71.888697,-71.889217,-71.891426,-71.89555,-71.899311,-71.899288,-71.894664,-71.894057,-71.896879,-71.900937,-71.905673,-71.904096,-71.904214,-71.902721,-71.907629,-71.911579,-71.913833,-71.921074,-71.918996,-71.918467,-71.916432,-71.915243,-71.908285,-71.907165,-71.903766,-71.903956,-71.902626,-71.900429,-71.897555,-71.896401,-71.891568,-71.889022,-71.888039,-71.884583,-71.884581,-71.882939,-71.879972,-71.877635,-71.877091,-71.877645,-71.879032,-71.878945,-71.877883,-71.87803,-71.875835,-71.8773747298185,-71.8729388750864,-71.871294,-71.871045,-71.872691,-71.872892,-71.871762,-71.870272,-71.871242,-71.870896,-71.871573,-71.872009,-71.873336,-71.874463,-71.874893,-71.876182,-71.875508,-71.880198,-71.881787,-71.882105,-71.883496,-71.886217,-71.874125,-71.8767,-71.877413,-71.87825,-71.880856,-71.881876,-71.884081,-71.884963,-71.886584,-71.888192,-71.888255,-71.889368,-71.894187,-71.894837,-71.893203,-71.892076,-71.886662,-71.883904,-71.879274,-71.88426,-71.885898,-71.887074,-71.888706,-71.892598,-71.893679,-71.893893,-71.893043,-71.894288,-71.894592,-71.891397,-71.894403,-71.893634,-71.891792,-71.889246,-71.892218,-71.892944,-71.892034,-71.892342,-71.888918,-71.887011,-71.885607,-71.881614,-71.88067,-71.877873,-71.875246,-71.874873,-71.875734,-71.867986,-71.869003,-71.871064,-71.86505,-71.860849,-71.859118,-71.858034,-71.85933,-71.860805,-71.861533,-71.865456,-71.865622,-71.867838,-71.870003,-71.872142,-71.872347,-71.875145,-71.880003,-71.881982,-71.88317,-71.88115,-71.883696,-71.885947,-71.886407,-71.882421,-71.879667,-71.879803,-71.873132,-71.870614,-71.86532,-71.8649,-71.865849,-71.866805,-71.867181,-71.872751,-71.874882,-71.874758,-71.874121,-71.870572,-71.869648,-71.869998,-71.871745,-71.875391,-71.876039,-71.86875,-71.871888,-71.87207,-71.869099,-71.869032,-71.871968,-71.872582,-71.874863,-71.874282,-71.868951,-71.875463,-71.874702,-71.875692,-71.87431,-71.875406,-71.879007,-71.881861,-71.883041,-71.885686,-71.886242,-71.883325,-71.879845,-71.882165,-71.883169,-71.883407,-71.886318,-71.888954,-71.888424,-71.890867,-71.892414,-71.896209,-71.900081,-71.90016,-71.899521,-71.899952,-71.902482,-71.905266,-71.906588,-71.90668,-71.9069,-71.906841,-71.906794,-71.906431,-71.906158,-71.902379,-71.902464,-71.903427,-71.905494,-71.904599,-71.907221,-71.905588,-71.903858,-71.901019,-71.900468,-71.900463,-71.899077,-71.89652,-71.89658,-71.89542,-71.892923,-71.893597,-71.892928,-71.893468,-71.889977,-71.882382,-71.881534,-71.878264,-71.876088,-71.873055,-71.870399,-71.87047,-71.868633,-71.868931,-71.866621,-71.867465,-71.864217,-71.863488,-71.861146,-71.857311,-71.857074,-71.860104,-71.856769,-71.855707,-71.857845,-71.856852,-71.858127,-71.859415,-71.864013,-71.863606,-71.861381,-71.871772,-71.874517,-71.87741,-71.879028,-71.878011,-71.878928,-71.878096,-71.876653,-71.877382,-71.879612,-71.87933,-71.876324,-71.875779,-71.873507,-71.873787,-71.875375,-71.872247,-71.874083,-71.876174,-71.886653,-71.884955,-71.884174,-71.885033,-71.886219,-71.891146,-71.892521,-71.892503,-71.893818,-71.896497,-71.899542,-71.901063,-71.903262,-71.903117,-71.903528,-71.904026,-71.904823,-71.905313,-71.902382,-71.899099,-71.905382,-71.906779,-71.908161,-71.909529,-71.908631,-71.910746,-71.91401,-71.912512,-71.914735,-71.915282,-71.917018,-71.924358,-71.926752,-71.923343,-71.916411,-71.915529,-71.912011,-71.908859,-71.908339,-71.910374,-71.913044,-71.916405,-71.913918,-71.913064,-71.912124,-71.910039,-71.907651,-71.910696,-71.915938,-71.914796,-71.913899,-71.912714,-71.91449,-71.915308,-71.914088,-71.913943,-71.923412,-71.920943,-71.920937,-71.926221,-71.927791,-71.932596,-71.931748,-71.930672,-71.934125,-71.934832,-71.938551,-71.938284,-71.935091,-71.936556,-71.93595,-71.937195,-71.936708,-71.935246,-71.933359,-71.932652,-71.930938,-71.927865,-71.926459,-71.923728,-71.922099,-71.91913,-71.916479,-71.915747,-71.915468,-71.917084,-71.923311,-71.922937,-71.927346,-71.932224,-71.933585,-71.93304,-71.932982,-71.906181,-71.905114,-71.904298,-71.904115,-71.904517,-71.907488,-71.910446,-71.912145,-71.909803,-71.909782,-71.907737,-71.903109,-71.895273,-71.894738,-71.894072,-71.89582,-71.901944,-71.903504,-71.905691,-71.906051,-71.905149,-71.908253,-71.908213,-71.908989,-71.907083,-71.904782,-71.904203,-71.900038,-71.899622,-71.893496,-71.892904,-71.895472,-71.896004,-71.896209,-71.895777,-71.89627,-71.898007,-71.898915,-71.901123,-71.904315,-71.908041,-71.908045,-71.910422,-71.922782,-71.91873,-71.9154,-71.914473,-71.916276,-71.920367,-71.926133,-71.928085,-71.933847,-71.936939,-71.941104,-71.944631],"lat":[41.922165,41.92442,41.925908,41.927067,41.927727,41.931574,41.931608,41.931627,41.931634,41.932664,41.935766,41.932219,41.931697,41.931893,41.93334,41.941395,41.942525,41.942156,41.941988,41.943073,41.943713,41.943697,41.944477,41.944662,41.945778,41.947141,41.946819,41.947487,41.950854,41.952558,41.95555,41.956761,41.95748,41.960675,41.962521,41.963344,41.964615,41.965351,41.966122,41.971115,41.973337,41.972503,41.96954,41.968278,41.970726,41.972745,41.970739,41.974298,41.978082,41.979681,41.980606,41.980728,41.979736,41.982766,41.984967,41.987063,41.986768,41.985169,41.981432,41.982733,41.982209,41.983551,41.98693,41.986149,41.987712,41.989639,41.98206,41.984792,41.988047,41.993831,41.995228,41.996362,42.001737,42.002936,42.004591,42.006807,42.007597,42.009397,42.010658,42.014421,42.017947,42.0242491626442,42.0242098389126,42.023941,42.021544,42.017952,42.015257,42.011683,42.009759,42.00668,42.003974,42.001107,41.996121,41.991435,41.993503,41.998317,41.994016,41.992616,41.9849,41.984033,41.981318,41.980761,41.975131,41.96695,41.963137,41.959504,41.95792,41.954962,41.956485,41.954015,41.952605,41.951179,41.947451,41.945496,41.943612,41.940097,41.935971,41.93621,41.935345,41.932596,41.932043,41.931974,41.924363,41.924263,41.922698,41.922112,41.924229,41.924291,41.920328,41.918414,41.916928,41.90894,41.90938,41.904476,41.902154,41.899277,41.898457,41.895634,41.890207,41.886555,41.881935,41.882781,41.879705,41.876321,41.871619,41.868331,41.872956,41.876588,41.88335,41.885913,41.88782,41.882824,41.879983,41.879688,41.876854,41.880079,41.880169,41.877311,41.876707,41.872887,41.872978,41.871061,41.869043,41.869716,41.867708,41.868463,41.867673,41.865721,41.8659,41.8639,41.85704,41.851375,41.849408,41.845571,41.844263,41.845183,41.843038,41.839264,41.838449,41.839337,41.838494,41.838017,41.836319,41.836405,41.833331,41.833157,41.832193,41.828285,41.821569,41.817919,41.815515,41.815826,41.81493,41.810506,41.809238,41.808098,41.805659,41.805675,41.80234,41.802352,41.800619,41.797238,41.793629,41.789888,41.792486,41.791588,41.790292,41.788704,41.788072,41.788325,41.790154,41.790325,41.785303,41.782215,41.783352,41.783724,41.78101,41.778355,41.774402,41.772552,41.772626,41.768971,41.769992,41.769852,41.766678,41.76494,41.761696,41.7576,41.755617,41.751767,41.749288,41.747253,41.745734,41.743493,41.742742,41.742585,41.741896,41.741502,41.734625,41.733418,41.731038,41.727827,41.727533,41.723027,41.72211,41.725065,41.727268,41.726277,41.719391,41.719385,41.721829,41.719221,41.720908,41.722517,41.720332,41.718991,41.717095,41.721392,41.72926,41.731792,41.73463,41.735809,41.738319,41.743799,41.746792,41.746231,41.744114,41.742573,41.739983,41.73821,41.735794,41.734469,41.734551,41.733407,41.730831,41.728619,41.726185,41.724253,41.723138,41.722109,41.719438,41.718771,41.717761,41.717016,41.717558,41.71859,41.717089,41.714537,41.713099,41.710479,41.711082,41.709908,41.707172,41.70663,41.705845,41.703796,41.702544,41.703715,41.70171,41.701614,41.697498,41.695336,41.691846,41.702325,41.70433,41.706404,41.70913,41.710468,41.710816,41.712202,41.715834,41.71639,41.718671,41.718581,41.717602,41.717471,41.716281,41.714844,41.715011,41.711215,41.705957,41.707742,41.708227,41.705344,41.701467,41.69932,41.701657,41.70283,41.701014,41.702692,41.703728,41.707929,41.710923,41.710766,41.714141,41.714586,41.717203,41.719854,41.717811,41.717956,41.719968,41.721602,41.720292,41.719429,41.720276,41.721904,41.725326,41.727072,41.729235,41.734417,41.734387,41.733509,41.735179,41.738397,41.739081,41.747002,41.746706,41.743922,41.74233,41.74378,41.744951,41.749122,41.750302,41.752034,41.751515,41.755672,41.756569,41.759209,41.761083,41.768121,41.773228,41.776222,41.780772,41.782628,41.78283,41.784389,41.784222,41.78797,41.791159,41.79411,41.795785,41.79316,41.790528,41.788358,41.787941,41.790754,41.800866,41.815631,41.816386,41.816449,41.820876,41.820703,41.820045,41.823423,41.826727,41.82677,41.826817,41.828048,41.831278,41.833226,41.835844,41.837383,41.841137,41.841836,41.842652,41.842671,41.844347,41.84803,41.846813,41.852972,41.856796,41.856658,41.853815,41.855459,41.855049,41.853266,41.850923,41.85152,41.855886,41.856504,41.857983,41.861936,41.863622,41.865068,41.866754,41.867151,41.872628,41.878144,41.881201,41.88318,41.891582,41.893929,41.896709,41.899398,41.900902,41.905833,41.908465,41.907742,41.907313,41.903701,41.907555,41.907279,41.908737,41.911851,41.915675,41.916156,41.917029,41.916861,41.916788,41.92012,41.922165]},{"lng":[-71.9583204454481,-71.9465511797168,-71.9442166672623,-71.928854994084,-71.9010193905414,-71.903906,-71.911835,-71.914671,-71.91552,-71.91702,-71.9144,-71.913448,-71.911209,-71.908755,-71.906635,-71.905015,-71.904018,-71.902774,-71.900209,-71.900103,-71.898617,-71.898047,-71.901849,-71.904923,-71.907679,-71.911956,-71.920274,-71.925257,-71.930272,-71.935091,-71.939446,-71.942045,-71.945686,-71.946057,-71.946672,-71.946459,-71.948224,-71.953522,-71.953729,-71.956011,-71.9583204454481],"lat":[42.0261253136014,42.0258190927791,42.025758351834,42.0253586612924,42.0246344154811,42.022716,42.01862,42.016902,42.013126,42.010675,42.010182,42.009437,42.009312,42.007863,42.00488,42.003907,42.002125,42.002542,42.001566,42.000368,41.997409,41.993153,41.996896,41.999321,42.00245,42.005667,42.009387,42.011034,42.012431,42.014861,42.018539,42.019954,42.017128,42.014658,42.014829,42.014483,42.014538,42.018707,42.021686,42.022761,42.0261253136014]},{"lng":[-71.8456912727418,-71.8335164438506,-71.833814,-71.835572,-71.833739,-71.834984,-71.840215,-71.83648,-71.836337,-71.837412,-71.834527,-71.837562,-71.837533,-71.836355,-71.837102,-71.842746,-71.842272,-71.84339,-71.845355,-71.845127,-71.84546,-71.844362,-71.845052,-71.844082,-71.8456912727418],"lat":[42.0239682896585,42.0238603601313,42.021544,42.019818,42.01896,42.018407,42.018565,42.016756,42.014978,42.014455,42.014001,42.013379,42.009391,42.007898,42.004882,42.004274,42.00278,42.002736,42.003574,42.007192,42.009196,42.012294,42.01557,42.021146,42.0239682896585]},{"lng":[-71.868951,-71.86842,-71.866517,-71.862946,-71.862736,-71.861539,-71.859925,-71.859665,-71.85038,-71.846556,-71.847747,-71.845343,-71.84194,-71.842399,-71.841015,-71.838013,-71.835493,-71.832953,-71.832885,-71.831609,-71.83215,-71.835256,-71.838497,-71.841865,-71.835245,-71.833204,-71.842299,-71.845655,-71.851023,-71.863544,-71.867459,-71.868942,-71.868951],"lat":[41.789888,41.789747,41.789524,41.789582,41.792253,41.794033,41.793156,41.790126,41.789911,41.790865,41.793231,41.792061,41.791965,41.798357,41.802081,41.801939,41.804191,41.802125,41.798295,41.797395,41.793325,41.793912,41.793511,41.791966,41.791733,41.790431,41.789577,41.788512,41.78891,41.78885,41.789133,41.789795,41.789888]},{"lng":[-71.943207,-71.941988,-71.938476,-71.934455,-71.934398,-71.928789,-71.932107,-71.933004,-71.922782,-71.92663,-71.925748,-71.929108,-71.934502,-71.940197,-71.943441,-71.943207],"lat":[41.898719,41.898201,41.900778,41.901356,41.900477,41.902049,41.905848,41.909933,41.903701,41.899561,41.897761,41.898053,41.897331,41.897169,41.896793,41.898719]},{"lng":[-71.857074,-71.856999,-71.855772,-71.853181,-71.852439,-71.851526,-71.853081,-71.855345,-71.854575,-71.856693,-71.85703,-71.857074],"lat":[41.733407,41.733456,41.739588,41.747766,41.748443,41.7452,41.742915,41.735081,41.733932,41.733264,41.733291,41.733407]},{"lng":[-71.833739,-71.833387,-71.832748,-71.826831,-71.825674,-71.827672,-71.826812,-71.828281,-71.830764,-71.833721,-71.833739],"lat":[42.01896,42.019269,42.021074,42.017091,42.016091,42.014845,42.013353,42.012693,42.016716,42.01895,42.01896]},{"lng":[-71.935724,-71.935272,-71.934201,-71.934774,-71.93255,-71.932646,-71.931567,-71.930306,-71.931435,-71.932982,-71.933915,-71.935621,-71.935839,-71.935724],"lat":[41.833407,41.833059,41.833116,41.831875,41.830901,41.829575,41.829137,41.828909,41.827265,41.82677,41.828416,41.830981,41.831716,41.833407]}],[{"lng":[-72.345773,-72.338836,-72.341991,-72.339042,-72.34045,-72.339035,-72.337511,-72.333909,-72.335864,-72.336982,-72.340152,-72.339203,-72.342554,-72.34011,-72.331217,-72.333376,-72.328192,-72.322368,-72.316105,-72.314641,-72.311748,-72.310047,-72.308166,-72.314137,-72.314731,-72.311554,-72.308315,-72.305116,-72.300787,-72.297867,-72.294017,-72.294171,-72.292378,-72.293593,-72.28405,-72.280082,-72.27755,-72.274588,-72.273608,-72.272257,-72.27026,-72.26886,-72.267071,-72.264644,-72.262383,-72.260647,-72.258715,-72.257369,-72.25221,-72.250254,-72.248881,-72.245778,-72.241702,-72.244134,-72.246697,-72.250416,-72.253443,-72.257382,-72.257683,-72.254092,-72.252291,-72.251506,-72.254238,-72.254879,-72.260648,-72.259969,-72.259153,-72.255114,-72.252311,-72.249349,-72.247579,-72.247149,-72.245454,-72.244296,-72.24346,-72.245091,-72.250888,-72.259244,-72.260477,-72.265118,-72.265501,-72.26565,-72.266415,-72.265686,-72.266468,-72.27456,-72.276291,-72.279282,-72.282389,-72.283599,-72.287357,-72.287223,-72.288863,-72.291871,-72.293001,-72.299121,-72.305679,-72.314659,-72.323288,-72.326091,-72.327313,-72.329313,-72.329736,-72.333435,-72.332664,-72.335399,-72.338455,-72.341658,-72.343898,-72.345773],"lat":[41.764595,41.766418,41.770151,41.7718,41.774326,41.778065,41.779428,41.7847,41.785167,41.783214,41.784525,41.785771,41.787114,41.790471,41.796604,41.797537,41.798233,41.798257,41.799339,41.797698,41.791877,41.789337,41.787728,41.782569,41.781363,41.779513,41.776348,41.770249,41.771214,41.771399,41.772206,41.770849,41.768656,41.766498,41.763001,41.761748,41.760048,41.761123,41.763508,41.762704,41.763171,41.762517,41.762534,41.763075,41.762907,41.762305,41.762424,41.762226,41.762267,41.761904,41.761921,41.761276,41.759682,41.75777,41.757081,41.755143,41.755256,41.753764,41.751584,41.751997,41.749423,41.74702,41.747446,41.746288,41.744763,41.740243,41.738879,41.734577,41.733352,41.735575,41.735953,41.734052,41.73176,41.728813,41.728174,41.728297,41.728197,41.733301,41.734518,41.747741,41.75191,41.752564,41.753868,41.75068,41.749076,41.757531,41.759035,41.758896,41.75989,41.761044,41.760226,41.759065,41.758178,41.757629,41.758585,41.761761,41.765435,41.758072,41.763959,41.764745,41.763558,41.763963,41.762698,41.764065,41.762598,41.762465,41.763573,41.760927,41.762497,41.764595]},{"lng":[-72.217826,-72.213096,-72.206972,-72.2045,-72.201351,-72.199233,-72.195792,-72.192384,-72.191646,-72.19267,-72.189664,-72.18567,-72.188327,-72.185885,-72.182379,-72.179989,-72.178136,-72.178041,-72.181168,-72.182274,-72.187656,-72.187985,-72.185886,-72.186654,-72.188351,-72.189404,-72.188771,-72.189418,-72.192875,-72.193845,-72.195644,-72.195689,-72.194439,-72.192911,-72.190998,-72.190895,-72.192104,-72.194969,-72.197081,-72.197712,-72.198968,-72.199012,-72.198126,-72.216443,-72.215762,-72.215308,-72.215621,-72.219107,-72.217826],"lat":[41.740326,41.740659,41.742634,41.742857,41.74392,41.743936,41.745083,41.748947,41.751221,41.753786,41.754251,41.757416,41.76098,41.761487,41.763059,41.761585,41.759031,41.757977,41.7559,41.756211,41.755181,41.753741,41.75235,41.751211,41.751004,41.750097,41.747626,41.746704,41.744344,41.743209,41.739611,41.73703,41.734945,41.734719,41.73258,41.731581,41.730413,41.72997,41.730821,41.731775,41.731068,41.729398,41.728176,41.728035,41.730692,41.733315,41.735652,41.739148,41.740326]}],[{"lng":[-72.252083,-72.252643,-72.250888,-72.245091,-72.24346,-72.216443,-72.198126,-72.199012,-72.198968,-72.197712,-72.197081,-72.194969,-72.192104,-72.190895,-72.190998,-72.192911,-72.194439,-72.195689,-72.195644,-72.193845,-72.192875,-72.189418,-72.188771,-72.189404,-72.188351,-72.186654,-72.185886,-72.187985,-72.187656,-72.182274,-72.181168,-72.181779,-72.179559,-72.180219,-72.17674,-72.173838,-72.171955,-72.168064,-72.168305,-72.169212,-72.168123,-72.166291,-72.164859,-72.162876,-72.157626,-72.155045,-72.153477,-72.150614,-72.149441,-72.149031,-72.147708,-72.145994,-72.144754,-72.142951,-72.141417,-72.138923,-72.134092,-72.139251,-72.140399,-72.142576,-72.144871,-72.146936,-72.148697,-72.15021,-72.152079,-72.155502,-72.156023,-72.169933,-72.179566,-72.170757,-72.168039,-72.167285,-72.167038,-72.168204,-72.170212,-72.171062,-72.170301,-72.170529,-72.16905,-72.16818,-72.167924,-72.166907,-72.167024,-72.165152,-72.163939,-72.162653,-72.163528,-72.161728,-72.153981,-72.152,-72.175224,-72.17958,-72.179713,-72.18301,-72.183313,-72.177844,-72.172038,-72.170459,-72.169093,-72.166111,-72.161897,-72.163044,-72.160498,-72.158827,-72.166975,-72.169384,-72.170538,-72.17397,-72.175771,-72.174819,-72.17656,-72.177846,-72.178318,-72.175842,-72.174511,-72.173775,-72.174233,-72.174106,-72.173029,-72.172679,-72.172917,-72.173825,-72.182206,-72.182463,-72.182537,-72.186057,-72.198835,-72.20436,-72.206227,-72.20764,-72.211178,-72.217176,-72.223496,-72.227991,-72.236171,-72.237889,-72.237814,-72.241179,-72.242616,-72.24419,-72.244859,-72.246612,-72.247508,-72.252994,-72.252083],"lat":[41.727062,41.728202,41.728197,41.728297,41.728174,41.728035,41.728176,41.729398,41.731068,41.731775,41.730821,41.72997,41.730413,41.731581,41.73258,41.734719,41.734945,41.73703,41.739611,41.743209,41.744344,41.746704,41.747626,41.750097,41.751004,41.751211,41.75235,41.753741,41.755181,41.756211,41.7559,41.755118,41.754311,41.751359,41.74963,41.749602,41.748065,41.749447,41.751402,41.751501,41.75232,41.75206,41.750002,41.749865,41.751804,41.752845,41.753157,41.754373,41.755071,41.754402,41.754149,41.755677,41.756365,41.756999,41.757197,41.756999,41.755664,41.756737,41.756937,41.756893,41.756213,41.754746,41.752552,41.752773,41.749128,41.748283,41.746053,41.73849,41.734802,41.737865,41.739115,41.737908,41.733381,41.728964,41.727757,41.725837,41.724778,41.722512,41.720893,41.718145,41.714204,41.712217,41.710114,41.709255,41.70611,41.704279,41.7029,41.703169,41.705607,41.700175,41.698217,41.698698,41.695787,41.698854,41.69729,41.690097,41.684965,41.683163,41.681315,41.674181,41.66955,41.669107,41.665235,41.658448,41.663703,41.669338,41.6698,41.668782,41.669426,41.672723,41.673086,41.670879,41.67123,41.67424,41.677737,41.678049,41.67886,41.679401,41.679983,41.68075,41.681398,41.682659,41.691323,41.692622,41.694465,41.696905,41.693525,41.693553,41.692916,41.693563,41.694145,41.698012,41.702607,41.705752,41.711646,41.713117,41.713561,41.715321,41.716632,41.717048,41.719682,41.723209,41.723655,41.724921,41.727062]},{"lng":[-72.158325,-72.156039,-72.156023,-72.155948,-72.154151,-72.154989,-72.156271,-72.158325],"lat":[41.744616,41.745997,41.746053,41.746048,41.744677,41.74383,41.743671,41.744616]}],[{"lng":[-72.415178,-72.410629,-72.408928,-72.407328,-72.404461,-72.401195,-72.394103,-72.385935,-72.38415,-72.381933,-72.378407,-72.368053,-72.361222,-72.357565,-72.358507,-72.34823,-72.345386,-72.339907,-72.338825,-72.345831,-72.342034,-72.341322,-72.338521,-72.340678,-72.343465,-72.344599,-72.348071,-72.349147,-72.352262,-72.343348,-72.328095,-72.325009,-72.323656,-72.325037,-72.322424,-72.319042,-72.317242,-72.315547,-72.315615,-72.320694,-72.320867,-72.323639,-72.324069,-72.31818,-72.316857,-72.311152,-72.313449,-72.318327,-72.322457,-72.317933,-72.316098,-72.309957,-72.305862,-72.302089,-72.313194,-72.315961,-72.318695,-72.315527,-72.31508,-72.313822,-72.313841,-72.312217,-72.312185,-72.313782,-72.314686,-72.315975,-72.315385,-72.313862,-72.312611,-72.321848,-72.322931,-72.323394,-72.340891,-72.344566,-72.341315,-72.340216,-72.337996,-72.340377,-72.344219,-72.345564,-72.346513,-72.348856,-72.35139,-72.354529,-72.355101,-72.357705,-72.361408,-72.364112,-72.371104,-72.371849,-72.374696,-72.378732,-72.379192,-72.381146,-72.385066,-72.387119,-72.379089,-72.376556,-72.364284,-72.359748,-72.361038,-72.362594,-72.364118,-72.366878,-72.365157,-72.363638,-72.364217,-72.368343,-72.370596,-72.36831,-72.365379,-72.36423,-72.361113,-72.36034,-72.361517,-72.365791,-72.374545,-72.379385,-72.382651,-72.386882,-72.392412,-72.394026,-72.395799,-72.399428,-72.400867,-72.398674,-72.396416,-72.396033,-72.400923,-72.402052,-72.400302,-72.399805,-72.398391,-72.394191,-72.393407,-72.395257,-72.397422,-72.406452,-72.409292,-72.413583,-72.415178],"lat":[41.593991,41.601798,41.601898,41.599398,41.597162,41.595491,41.592803,41.589083,41.588652,41.586862,41.585813,41.586125,41.583489,41.582451,41.581885,41.575397,41.573939,41.579391,41.579331,41.584003,41.58763,41.589453,41.591378,41.596039,41.594127,41.595275,41.595625,41.597375,41.599059,41.599325,41.605471,41.616746,41.614665,41.612787,41.610229,41.608815,41.609112,41.606463,41.605773,41.595306,41.594421,41.590265,41.587811,41.58543,41.58525,41.5821,41.581203,41.58106,41.579261,41.57577,41.575055,41.573566,41.573843,41.570499,41.564026,41.561396,41.560593,41.556243,41.553472,41.550813,41.546178,41.541414,41.539906,41.536365,41.530404,41.527106,41.523554,41.519258,41.512951,41.512221,41.518119,41.53425,41.532747,41.532417,41.53756,41.536522,41.540142,41.54658,41.547191,41.546605,41.544749,41.543263,41.542768,41.546027,41.548676,41.552351,41.55013,41.54902,41.547831,41.54666,41.54444,41.552726,41.554596,41.552353,41.551087,41.551384,41.555462,41.556314,41.559323,41.561559,41.56368,41.563521,41.565021,41.566695,41.568095,41.570248,41.572374,41.577867,41.579959,41.582491,41.581605,41.580624,41.580637,41.581281,41.581989,41.58286,41.583183,41.584007,41.585293,41.587799,41.590188,41.589986,41.588916,41.584565,41.580318,41.579873,41.578102,41.574341,41.572359,41.579942,41.583541,41.585803,41.587711,41.590979,41.59206,41.592575,41.591426,41.590184,41.590269,41.592116,41.593991]},{"lng":[-72.358843,-72.354332,-72.351929,-72.353032,-72.351285,-72.349553,-72.348537,-72.348831,-72.358576,-72.358843],"lat":[41.533198,41.533732,41.534428,41.536661,41.536758,41.536034,41.533372,41.532164,41.531436,41.533198]}],[{"lng":[-72.50919168706,-72.4920693595077,-72.493552,-72.495767,-72.496161,-72.499626,-72.501447,-72.501424,-72.49512,-72.492574,-72.492505,-72.491976,-72.486182,-72.486875,-72.484593,-72.484457,-72.483365,-72.47986,-72.478828,-72.481983,-72.480901,-72.477746,-72.476423,-72.474728,-72.470042,-72.465885,-72.461456,-72.461971,-72.459867,-72.45783,-72.457783,-72.459787,-72.460539,-72.459619,-72.460164,-72.455139,-72.452932,-72.450612,-72.453461,-72.451942,-72.449085,-72.446342,-72.444346,-72.441285,-72.439695,-72.438308,-72.435844,-72.436105,-72.435037,-72.436347,-72.433918,-72.432976,-72.433205,-72.431428,-72.427234,-72.424485,-72.422169,-72.42088,-72.420272,-72.421891,-72.422626,-72.422326,-72.423148,-72.428676,-72.429881,-72.435004,-72.433812,-72.435104,-72.435291,-72.432629,-72.433024,-72.427653,-72.426662,-72.42571,-72.42446,-72.420304,-72.417615,-72.414244,-72.410257,-72.410721,-72.407785,-72.403922,-72.40449,-72.411382,-72.413573,-72.413507,-72.415598,-72.41735,-72.418494,-72.420626,-72.424039,-72.428503,-72.433159,-72.438174,-72.4418,-72.443271,-72.445691,-72.447572,-72.447596,-72.444006,-72.443685,-72.442353,-72.439835,-72.43797,-72.439102,-72.441135,-72.439416,-72.435477,-72.434339,-72.435088,-72.437565,-72.44072,-72.444095,-72.443995,-72.442311,-72.448085,-72.454892,-72.458303,-72.460464,-72.461461,-72.464009,-72.460552,-72.459672,-72.462722,-72.465057,-72.46891,-72.469198,-72.472413,-72.474163,-72.474381,-72.477208,-72.485106,-72.488087,-72.488128,-72.491805,-72.495047,-72.499406,-72.499428,-72.49973,-72.50919168706],"lat":[42.0342165401236,42.0341456074711,42.032561,42.031996,42.033253,42.03258,42.03045,42.027745,42.025955,42.025857,42.021743,42.018084,42.018208,42.020694,42.020753,42.018687,42.015654,42.015633,42.013819,42.011684,42.00804,42.003283,42.003697,42.001691,41.997893,41.997323,41.996111,41.996534,42.001426,42.002434,42.003323,42.003624,42.006871,42.007004,42.008871,42.01043,42.011486,42.014839,42.019089,42.02274,42.019502,42.019817,42.021051,42.02037,42.021717,42.02167,42.019978,42.015705,42.014711,42.014161,42.012715,42.011355,42.009634,42.008326,42.010065,42.008012,42.010643,42.009819,42.007426,42.005799,42.003976,42.001649,42.000493,41.996066,41.994749,41.991473,41.990635,41.990111,41.986658,41.986012,41.984555,41.983994,41.989016,41.989031,41.9837,41.983127,41.983596,41.985032,41.983867,41.982199,41.982235,41.984354,41.979801,41.981916,41.97371,41.972159,41.972094,41.974475,41.977234,41.979326,41.980735,41.981669,41.982289,41.98336,41.982531,41.982652,41.983974,41.983756,41.981507,41.974979,41.972691,41.972327,41.970427,41.969939,41.968225,41.967354,41.964002,41.963051,41.961229,41.959884,41.960861,41.960801,41.959057,41.960596,41.963041,41.963938,41.963387,41.965043,41.961293,41.963482,41.963664,41.964912,41.965958,41.967621,41.965891,41.966154,41.96792,41.971327,41.970877,41.972217,41.972881,41.977198,41.980957,41.982569,41.982016,41.980686,41.98159,41.981694,41.984295,42.0342165401236]},{"lng":[-72.4596911701656,-72.4581852392999,-72.45668,-72.4355546940274,-72.4355027182577,-72.435123,-72.431722,-72.432104,-72.434875,-72.443371,-72.455779,-72.457308,-72.455431,-72.454082,-72.458621,-72.458867,-72.4596911701656],"lat":[42.0340114743722,42.0340052357536,42.033999,42.0336822687835,42.033681489512,42.032613,42.031145,42.029557,42.031637,42.032303,42.032974,42.032872,42.031609,42.028848,42.028569,42.032544,42.0340114743722]},{"lng":[-72.40449,-72.401256,-72.398978,-72.392685,-72.393002,-72.390185,-72.396785,-72.400017,-72.400038,-72.401075,-72.402427,-72.402471,-72.402695,-72.404212,-72.40449],"lat":[41.979801,41.979558,41.981884,41.983237,41.981613,41.977387,41.979154,41.97948,41.979306,41.978551,41.977001,41.976806,41.977173,41.978748,41.979801]}],[{"lng":[-72.334616,-72.322721,-72.321542,-72.322532,-72.322701,-72.320452,-72.318771,-72.323175,-72.323751,-72.318226,-72.315569,-72.314836,-72.314157,-72.314308,-72.316839,-72.316943,-72.318884,-72.316059,-72.315249,-72.314014,-72.314978,-72.3171,-72.314856,-72.315132,-72.31309,-72.313632,-72.312606,-72.312235,-72.308935,-72.30508,-72.295895,-72.290197,-72.294486,-72.295184,-72.2902,-72.289766,-72.29226,-72.291832,-72.291335,-72.289261,-72.287754,-72.286527,-72.284746,-72.283003,-72.282046,-72.278888,-72.276957,-72.276946,-72.268781,-72.265668,-72.263832,-72.261669,-72.2609,-72.261217,-72.260541,-72.260943,-72.263873,-72.263286,-72.262257,-72.259003,-72.253893,-72.250105,-72.247703,-72.25057,-72.250991,-72.253369,-72.254792,-72.257214,-72.258927,-72.259185,-72.256755,-72.257501,-72.256357,-72.258347,-72.258172,-72.259307,-72.259697,-72.25788,-72.259101,-72.26338,-72.266522,-72.272247,-72.274863,-72.278119,-72.281736,-72.288347,-72.289912,-72.290697,-72.291204,-72.290438,-72.286027,-72.280605,-72.276852,-72.276182,-72.272056,-72.266394,-72.263363,-72.258953,-72.256624,-72.250583,-72.25671,-72.261868,-72.269753,-72.283464,-72.282518,-72.283383,-72.284865,-72.287274,-72.290603,-72.290657,-72.300987,-72.301372,-72.300331,-72.301222,-72.303082,-72.30471,-72.307265,-72.306876,-72.304764,-72.30694,-72.311975,-72.316071,-72.317604,-72.318127,-72.314499,-72.314372,-72.326247,-72.326855,-72.325411,-72.323555,-72.321713,-72.321263,-72.322562,-72.321904,-72.324593,-72.330197,-72.333202,-72.335096,-72.334616],"lat":[41.95778,41.954227,41.953736,41.954957,41.957184,41.959237,41.959715,41.964016,41.964994,41.96431,41.962485,41.972133,41.975264,41.978347,41.982538,41.984817,41.98742,41.99118,41.994736,41.993012,41.991117,41.987522,41.984566,41.980398,41.978454,41.975598,41.976869,41.975195,41.974211,41.976465,41.983458,41.985558,41.985177,41.986889,41.985791,41.987414,41.995174,41.995994,41.993961,41.991623,41.990936,41.988418,41.990661,41.99043,41.991898,41.99316,41.993309,41.996748,41.994457,41.994428,41.99342,41.993972,41.998206,41.999584,42.005122,42.007356,42.015187,42.016236,42.017466,42.019205,42.020524,42.023413,42.022816,42.022933,42.021479,42.019999,42.017722,42.015852,42.017135,42.016413,42.015714,42.013973,42.012023,42.007555,42.005142,42.000372,41.996056,41.996362,41.993462,41.992569,41.993548,41.994009,41.993842,41.99282,41.989956,41.985157,41.98445,41.982241,41.975481,41.970928,41.969081,41.966428,41.966327,41.965366,41.963497,41.961862,41.962975,41.963259,41.962461,41.962375,41.959188,41.957072,41.951775,41.956521,41.954227,41.952089,41.950345,41.9464,41.943543,41.940631,41.940735,41.945762,41.949381,41.952096,41.953297,41.952431,41.949546,41.951,41.952965,41.952037,41.951567,41.95069,41.949949,41.94508,41.941794,41.940792,41.941093,41.942814,41.943427,41.947011,41.948567,41.95009,41.95171,41.953709,41.953342,41.95391,41.956764,41.95718,41.95778]},{"lng":[-72.318633,-72.318521,-72.316034,-72.315009,-72.31565,-72.317294,-72.317979,-72.317221,-72.314843,-72.315249,-72.316196,-72.31629,-72.318358,-72.319549,-72.318633],"lat":[42.005866,42.00973,42.013541,42.010157,42.007744,42.007413,42.002076,41.999285,41.995982,41.994736,41.994904,41.996904,41.999183,42.001879,42.005866]},{"lng":[-72.317415,-72.31566,-72.314147,-72.312701,-72.313525,-72.312691,-72.310208,-72.311586,-72.316034,-72.31671,-72.317415],"lat":[42.015502,42.015878,42.018183,42.018507,42.022056,42.021396,42.018908,42.016278,42.013541,42.013686,42.015502]},{"lng":[-72.321209,-72.320961,-72.31779,-72.317461,-72.321496,-72.321209],"lat":[42.031798,42.025303,42.021284,42.017481,42.025532,42.031798]}],[{"lng":[-72.51733,-72.516924,-72.50983,-72.510047,-72.499181,-72.499107,-72.498041,-72.487626,-72.485806,-72.486748,-72.484725,-72.48501,-72.483161,-72.482357,-72.478976,-72.480914,-72.477719,-72.475104,-72.474376,-72.466989,-72.463793,-72.464197,-72.464137,-72.461757,-72.460113,-72.46085,-72.464031,-72.463022,-72.460556,-72.462475,-72.462834,-72.465163,-72.463254,-72.459704,-72.459287,-72.466425,-72.470277,-72.477778,-72.477171,-72.482684,-72.485782,-72.484567,-72.49019,-72.493689,-72.492477,-72.493105,-72.492631,-72.490044,-72.489905,-72.491176,-72.489644,-72.48378,-72.485435,-72.485114,-72.483369,-72.484274,-72.487843,-72.487787,-72.484459,-72.482619,-72.481422,-72.478875,-72.474978,-72.477497,-72.478052,-72.480893,-72.481011,-72.478247,-72.47843,-72.481705,-72.485446,-72.485137,-72.490489,-72.491878,-72.481103,-72.481187,-72.480891,-72.453334,-72.449714,-72.448601,-72.450445,-72.452364,-72.452408,-72.449524,-72.44643,-72.445519,-72.444273,-72.444777,-72.449815,-72.454087,-72.452253,-72.445623,-72.438497,-72.433645,-72.43186,-72.430691,-72.430543,-72.43694,-72.440499,-72.441779,-72.444916,-72.445446,-72.446588,-72.44661,-72.447905,-72.444671,-72.445394,-72.448346,-72.449782,-72.450532,-72.449961,-72.450008,-72.450515,-72.449603,-72.448861,-72.446762,-72.443538,-72.441702,-72.441805,-72.440858,-72.441849,-72.438463,-72.437971,-72.438231,-72.439051,-72.43802,-72.429383,-72.432827,-72.432526,-72.431476,-72.429758,-72.427324,-72.426939,-72.421747,-72.417866,-72.418509,-72.414977,-72.415996,-72.41325,-72.409527,-72.405026,-72.404717,-72.40315,-72.405942,-72.413106,-72.417758,-72.41649,-72.411789,-72.408381,-72.405652,-72.398604,-72.397547,-72.395518,-72.388891,-72.386892,-72.385335,-72.380811,-72.378964,-72.378689,-72.379958,-72.383226,-72.382177,-72.380049,-72.380898,-72.384424,-72.388433,-72.390241,-72.394663,-72.397212,-72.399534,-72.397145,-72.394692,-72.393985,-72.396787,-72.399044,-72.398503,-72.3988,-72.400197,-72.402261,-72.403163,-72.399574,-72.398009,-72.397461,-72.394865,-72.392355,-72.393173,-72.39063,-72.38848,-72.388879,-72.387696,-72.385585,-72.383118,-72.380484,-72.380459,-72.381705,-72.380957,-72.377716,-72.376576,-72.376745,-72.375418,-72.373387,-72.371024,-72.369252,-72.367913,-72.364293,-72.365942,-72.366836,-72.366518,-72.367799,-72.366791,-72.365378,-72.364564,-72.365787,-72.36501,-72.367137,-72.365777,-72.359368,-72.35755,-72.355634,-72.355273,-72.353064,-72.354502,-72.353845,-72.352195,-72.347043,-72.344668,-72.335758,-72.321575,-72.320584,-72.317182,-72.315955,-72.313221,-72.310789,-72.307983,-72.312313,-72.318584,-72.321846,-72.322963,-72.325202,-72.326388,-72.330881,-72.333658,-72.335941,-72.336823,-72.338676,-72.337966,-72.339419,-72.341071,-72.340107,-72.33895,-72.336747,-72.340019,-72.339079,-72.339467,-72.342287,-72.342542,-72.348844,-72.348119,-72.350306,-72.350782,-72.353935,-72.356462,-72.35773,-72.359696,-72.363292,-72.364373,-72.362744,-72.362246,-72.360979,-72.357345,-72.357061,-72.359093,-72.365889,-72.365949,-72.3668,-72.365829,-72.364418,-72.363375,-72.359527,-72.358561,-72.359773,-72.362415,-72.367329,-72.361936,-72.361927,-72.357308,-72.347278,-72.346762,-72.345473,-72.344354,-72.337353,-72.336802,-72.33455,-72.326825,-72.32422,-72.323087,-72.325103,-72.327369,-72.325194,-72.327462,-72.322884,-72.319709,-72.316437,-72.313973,-72.314483,-72.312881,-72.312722,-72.310229,-72.310125,-72.312132,-72.316139,-72.314304,-72.320832,-72.327355,-72.329434,-72.33204,-72.335374,-72.337451,-72.342675,-72.340036,-72.33927,-72.344622,-72.345274,-72.349749,-72.35175,-72.351414,-72.35219,-72.352602,-72.358339,-72.359527,-72.363174,-72.368971,-72.368943,-72.36733,-72.363869,-72.363019,-72.363528,-72.366405,-72.373495,-72.377447,-72.378399,-72.377797,-72.389626,-72.388938,-72.386872,-72.386557,-72.388539,-72.388423,-72.390785,-72.39439,-72.395004,-72.393404,-72.393651,-72.395261,-72.399756,-72.405826,-72.408735,-72.414641,-72.418558,-72.423726,-72.424627,-72.428217,-72.429404,-72.433682,-72.44351,-72.445894,-72.460941,-72.459593,-72.461429,-72.46219,-72.464016,-72.466596,-72.463247,-72.458207,-72.454141,-72.449014,-72.4472,-72.446689,-72.445065,-72.442208,-72.439906,-72.432399,-72.428113,-72.422804,-72.421102,-72.42104,-72.422362,-72.424319,-72.42585,-72.42523,-72.422828,-72.42214,-72.420821,-72.418891,-72.418995,-72.416161,-72.413184,-72.413178,-72.416269,-72.416523,-72.420283,-72.432569,-72.434011,-72.4358,-72.438583,-72.443758,-72.44616,-72.451058,-72.454115,-72.460389,-72.46252,-72.458747,-72.456553,-72.455602,-72.456621,-72.455499,-72.45665,-72.458132,-72.455933,-72.448662,-72.443672,-72.443028,-72.441434,-72.440316,-72.437794,-72.436645,-72.436884,-72.439839,-72.445352,-72.445483,-72.444597,-72.445601,-72.445542,-72.448679,-72.448895,-72.446505,-72.448819,-72.448387,-72.451597,-72.456177,-72.459222,-72.459949,-72.458083,-72.457425,-72.45754,-72.460103,-72.462113,-72.464669,-72.46509,-72.472281,-72.473468,-72.476029,-72.485207,-72.487364,-72.507531,-72.50543,-72.49905,-72.498733,-72.49681,-72.501927,-72.51833,-72.51733],"lat":[41.869897,41.873639,41.872904,41.878095,41.878237,41.874829,41.875115,41.877352,41.878088,41.880995,41.881246,41.882526,41.882079,41.885093,41.88173,41.879715,41.878728,41.877149,41.875936,41.877014,41.878035,41.881626,41.885147,41.883935,41.885296,41.886375,41.886538,41.890308,41.896158,41.897001,41.896221,41.896857,41.899152,41.899196,41.90049,41.903338,41.903859,41.902927,41.906189,41.908448,41.911086,41.916731,41.917566,41.918994,41.921232,41.923365,41.926149,41.926296,41.928035,41.929031,41.931354,41.931976,41.929132,41.926581,41.92494,41.923975,41.923764,41.921274,41.919257,41.916513,41.916533,41.918754,41.919358,41.926778,41.932856,41.932652,41.935414,41.93622,41.937859,41.947112,41.947911,41.948524,41.94768,41.947553,41.953814,41.950445,41.949176,41.952389,41.951578,41.950882,41.942154,41.937648,41.936348,41.936557,41.934351,41.934499,41.932251,41.931919,41.932511,41.912931,41.91119,41.911676,41.912607,41.908999,41.90963,41.909063,41.907463,41.907798,41.908938,41.908437,41.905731,41.903188,41.901734,41.898455,41.894722,41.892022,41.89145,41.892869,41.891656,41.889007,41.887163,41.883694,41.880325,41.878153,41.878016,41.879915,41.88014,41.881693,41.88329,41.884306,41.886868,41.884661,41.883643,41.879777,41.876591,41.873299,41.874487,41.87136,41.868704,41.87158,41.872211,41.870775,41.8674,41.867758,41.869048,41.870896,41.874594,41.879067,41.877619,41.877832,41.877551,41.880153,41.88291,41.884265,41.88285,41.889306,41.891992,41.892419,41.89352,41.892647,41.893443,41.895347,41.897408,41.899452,41.902797,41.908143,41.913298,41.916428,41.918537,41.918416,41.919856,41.918055,41.916087,41.913819,41.9112,41.913465,41.913153,41.913808,41.914643,41.913837,41.915088,41.919508,41.920605,41.92171,41.9245,41.925853,41.92926,41.931518,41.933065,41.93494,41.933813,41.933919,41.93114,41.931575,41.928407,41.927441,41.926857,41.927783,41.925279,41.925702,41.92856,41.929709,41.93741,41.938755,41.940296,41.941699,41.941858,41.941788,41.944627,41.94573,41.945111,41.948545,41.953224,41.954484,41.951376,41.949912,41.946823,41.944591,41.943889,41.941501,41.938971,41.935205,41.932819,41.931386,41.931075,41.930318,41.929547,41.927473,41.926788,41.925707,41.924501,41.929327,41.931118,41.929383,41.926007,41.925325,41.926389,41.928145,41.926417,41.925638,41.92465,41.924326,41.923432,41.923969,41.920382,41.916227,41.917586,41.9189,41.919638,41.921393,41.922838,41.925621,41.926103,41.923477,41.921524,41.920635,41.91906,41.91875,41.915217,41.915934,41.913567,41.914696,41.908493,41.905908,41.903312,41.901466,41.901008,41.897966,41.899337,41.900858,41.900307,41.902249,41.900342,41.899147,41.898398,41.897488,41.895529,41.891777,41.891618,41.892426,41.890359,41.887733,41.883804,41.880537,41.879099,41.87641,41.875572,41.873017,41.872376,41.870843,41.870574,41.871861,41.869649,41.86559,41.86479,41.865684,41.87026,41.868248,41.866723,41.860891,41.861478,41.860204,41.859248,41.859933,41.861395,41.860574,41.858286,41.858582,41.855638,41.85164,41.847954,41.844089,41.84238,41.841639,41.840573,41.837577,41.836278,41.835567,41.83484,41.83507,41.837123,41.837384,41.842162,41.847964,41.850305,41.851675,41.852006,41.852918,41.852298,41.847391,41.845063,41.844251,41.846388,41.84649,41.852367,41.854646,41.856353,41.859917,41.861597,41.862697,41.862514,41.860008,41.857165,41.854887,41.851914,41.85041,41.845595,41.842267,41.843019,41.844779,41.841291,41.837972,41.836979,41.83493,41.8351,41.834196,41.833884,41.832343,41.831641,41.829591,41.830679,41.832071,41.833641,41.833581,41.831316,41.836425,41.83855,41.840268,41.84378,41.843049,41.850331,41.853037,41.854735,41.852742,41.844944,41.843423,41.835555,41.834856,41.832826,41.833533,41.833461,41.832266,41.825353,41.828063,41.828464,41.826548,41.827286,41.82906,41.828441,41.828573,41.824349,41.822043,41.822036,41.819686,41.819222,41.818136,41.816021,41.814411,41.814508,41.81289,41.810771,41.808436,41.806198,41.806559,41.806973,41.810464,41.796599,41.795913,41.795768,41.796953,41.797197,41.796125,41.795894,41.795258,41.793216,41.790099,41.789868,41.78828,41.785519,41.781074,41.778898,41.781142,41.78054,41.780075,41.778503,41.777882,41.775979,41.775698,41.774337,41.770796,41.770893,41.766785,41.762705,41.757113,41.757429,41.756752,41.755353,41.754939,41.753713,41.751462,41.749177,41.7473,41.745264,41.746053,41.749817,41.753662,41.75703,41.761025,41.761928,41.764977,41.764348,41.761497,41.758824,41.755858,41.753116,41.749467,41.748913,41.749006,41.750025,41.79096,41.798264,41.812997,41.812276,41.811751,41.809698,41.820298,41.850308,41.853329,41.860616,41.859457,41.856899,41.869897]},{"lng":[-72.317208,-72.311434,-72.306863,-72.305844,-72.305349,-72.305102,-72.300531,-72.301302,-72.299978,-72.299556,-72.298505,-72.293492,-72.29209,-72.287599,-72.283128,-72.276995,-72.276207,-72.277847,-72.27311,-72.273405,-72.271717,-72.269795,-72.267407,-72.261885,-72.255391,-72.254756,-72.248806,-72.246748,-72.242714,-72.243924,-72.248323,-72.245839,-72.239911,-72.236261,-72.233243,-72.234665,-72.238708,-72.243843,-72.243659,-72.241054,-72.240207,-72.237429,-72.239003,-72.236761,-72.236094,-72.237717,-72.240265,-72.242886,-72.230626,-72.234113,-72.244747,-72.245491,-72.247229,-72.248006,-72.248967,-72.249309,-72.253919,-72.257371,-72.258068,-72.255959,-72.25884,-72.264422,-72.27141,-72.274042,-72.275935,-72.276024,-72.277621,-72.276299,-72.27643,-72.275456,-72.276223,-72.280591,-72.281383,-72.283699,-72.289038,-72.285594,-72.284179,-72.283996,-72.280967,-72.28091,-72.278739,-72.278301,-72.279357,-72.275598,-72.274552,-72.276718,-72.279999,-72.278238,-72.279006,-72.282342,-72.286169,-72.290261,-72.290889,-72.295252,-72.296152,-72.295731,-72.296757,-72.295923,-72.296406,-72.294031,-72.295762,-72.29914,-72.299251,-72.300537,-72.301799,-72.302888,-72.308583,-72.310605,-72.31062,-72.312152,-72.311414,-72.308565,-72.308097,-72.308141,-72.310229,-72.310145,-72.309744,-72.308835,-72.309541,-72.308952,-72.309833,-72.313386,-72.316461,-72.317208],"lat":[41.85365,41.855817,41.855828,41.855108,41.854344,41.85587,41.85534,41.853073,41.852956,41.851086,41.85189,41.852661,41.852386,41.854985,41.857214,41.858735,41.855387,41.849733,41.850592,41.846571,41.839431,41.836018,41.828177,41.823314,41.818773,41.817422,41.820648,41.820727,41.815708,41.813581,41.810946,41.810369,41.810927,41.812323,41.811936,41.809905,41.808794,41.804504,41.804265,41.801125,41.80169,41.800724,41.799556,41.79859,41.794553,41.792262,41.790289,41.788389,41.78173,41.779073,41.784642,41.786546,41.787977,41.790626,41.791516,41.788205,41.788084,41.791719,41.793164,41.79528,41.795586,41.794025,41.793238,41.793766,41.792866,41.789942,41.788219,41.785938,41.781961,41.779412,41.778753,41.784181,41.783661,41.785188,41.791624,41.787684,41.78753,41.786015,41.784752,41.785548,41.786552,41.789235,41.790433,41.793465,41.798634,41.801796,41.802876,41.805492,41.806876,41.809621,41.811883,41.814918,41.817847,41.813357,41.812409,41.811418,41.810808,41.809308,41.808386,41.805912,41.805774,41.808554,41.805247,41.806324,41.805995,41.804001,41.813724,41.820846,41.824261,41.82459,41.827963,41.831571,41.83266,41.835318,41.835567,41.836059,41.837772,41.840882,41.842929,41.844511,41.847153,41.849024,41.851927,41.85365]},{"lng":[-72.43587,-72.431097,-72.428069,-72.429981,-72.429607,-72.422414,-72.422818,-72.418418,-72.419159,-72.418684,-72.416645,-72.418286,-72.420377,-72.421501,-72.426156,-72.42432,-72.428656,-72.430232,-72.431227,-72.43544,-72.436387,-72.43587],"lat":[41.72662,41.725199,41.726301,41.729597,41.730335,41.73119,41.73196,41.732106,41.729258,41.724598,41.721728,41.723848,41.722004,41.722168,41.720897,41.716725,41.716199,41.717248,41.718998,41.717648,41.719856,41.72662]},{"lng":[-72.436884,-72.431064,-72.431971,-72.428061,-72.426253,-72.427147,-72.429631,-72.427477,-72.426363,-72.424189,-72.420373,-72.418908,-72.41537,-72.415553,-72.414757,-72.415065,-72.414041,-72.418418,-72.419149,-72.421053,-72.422822,-72.426317,-72.429888,-72.431341,-72.435084,-72.437011,-72.436884],"lat":[41.755353,41.755318,41.75805,41.75848,41.756653,41.755978,41.755885,41.753081,41.750518,41.747617,41.743962,41.741816,41.740509,41.739247,41.735229,41.733786,41.732695,41.732106,41.735243,41.74008,41.743221,41.747544,41.74713,41.749813,41.750826,41.752949,41.755353]},{"lng":[-72.440208,-72.435543,-72.430932,-72.431853,-72.437329,-72.448142,-72.440208],"lat":[41.672981,41.667872,41.664063,41.663618,41.666598,41.671954,41.672981]},{"lng":[-72.4462,-72.44616,-72.445904,-72.435857,-72.43344,-72.43542,-72.439775,-72.444621,-72.44692,-72.4462],"lat":[41.789658,41.789868,41.789782,41.784529,41.783625,41.781853,41.784629,41.786413,41.784297,41.789658]},{"lng":[-72.357211,-72.354044,-72.351919,-72.349432,-72.346162,-72.350343,-72.35041,-72.353237,-72.355416,-72.357211],"lat":[41.873243,41.874422,41.880957,41.882387,41.882805,41.880681,41.87747,41.872346,41.871466,41.873243]},{"lng":[-72.403396,-72.399756,-72.398571,-72.3988,-72.405163,-72.403396],"lat":[41.82811,41.831316,41.829977,41.827721,41.827019,41.82811]},{"lng":[-72.499144,-72.499146,-72.494188,-72.494055,-72.496867,-72.499047,-72.499181,-72.499144],"lat":[41.879639,41.880832,41.881193,41.879743,41.879532,41.878245,41.878237,41.879639]},{"lng":[-72.448483,-72.446333,-72.446335,-72.447031,-72.448011,-72.448483],"lat":[41.744239,41.742339,41.739702,41.73974,41.742123,41.744239]},{"lng":[-72.369067,-72.365941,-72.364701,-72.365571,-72.367466,-72.36789,-72.367913,-72.368145,-72.369067],"lat":[41.954943,41.95966,41.963108,41.958753,41.957106,41.9545,41.954484,41.954571,41.954943]},{"lng":[-72.452972,-72.452202,-72.451748,-72.452229,-72.452972],"lat":[41.69205,41.691762,41.687436,41.688799,41.69205]}],[{"lng":[-72.340891,-72.323394,-72.322931,-72.321848,-72.319345,-72.32531,-72.326394,-72.326862,-72.325118,-72.327543,-72.328942,-72.330316,-72.331867,-72.332923,-72.335666,-72.337425,-72.334672,-72.336161,-72.339315,-72.340891],"lat":[41.532747,41.53425,41.518119,41.512221,41.499047,41.497669,41.500671,41.504752,41.508728,41.509034,41.512955,41.511818,41.513065,41.517057,41.52162,41.522479,41.522719,41.529269,41.53014,41.532747]},{"lng":[-72.349347,-72.348092,-72.348831,-72.344985,-72.344566,-72.346931,-72.347427,-72.34673,-72.348434,-72.348217,-72.348981,-72.349347],"lat":[41.528559,41.53035,41.532164,41.532456,41.532417,41.525246,41.521366,41.519932,41.519919,41.521526,41.527582,41.528559]}],[{"lng":[-72.548454,-72.546244,-72.542952,-72.540083,-72.537654,-72.535371,-72.535785,-72.538328,-72.530411,-72.530796,-72.529523,-72.529763,-72.52743,-72.528672,-72.526828,-72.52644,-72.529596,-72.52634,-72.526753,-72.528309,-72.527048,-72.526261,-72.524673,-72.525253,-72.521987,-72.521965,-72.517346,-72.517117,-72.518142,-72.51862,-72.520566,-72.519902,-72.514533,-72.514801,-72.512244,-72.511719,-72.509545,-72.509686,-72.509079,-72.511824,-72.510142,-72.507311,-72.507173,-72.505177,-72.505865,-72.507207,-72.504976,-72.502335,-72.498395,-72.494644,-72.493454,-72.493886,-72.483012,-72.481842,-72.481537,-72.485574,-72.486996,-72.485622,-72.484869,-72.482957,-72.481431,-72.479013,-72.481204,-72.481999,-72.483767,-72.485293,-72.486059,-72.490377,-72.493167,-72.492481,-72.489295,-72.487055,-72.485123,-72.481983,-72.480502,-72.47283,-72.465593,-72.461608,-72.45993,-72.456199,-72.454833,-72.45185,-72.453556,-72.452264,-72.455139,-72.456272,-72.459176,-72.462731,-72.463846,-72.46625,-72.470724,-72.473006,-72.47288,-72.477193,-72.478949,-72.48257,-72.489501,-72.49393,-72.497852,-72.502158,-72.503805,-72.50723,-72.508687,-72.508784,-72.512085,-72.51372,-72.514078,-72.512907,-72.513432,-72.512722,-72.509226,-72.510518,-72.512994,-72.518062,-72.521606,-72.527273,-72.529059,-72.52929,-72.538367,-72.536269,-72.537221,-72.54194,-72.542623,-72.543664,-72.550403,-72.548454],"lat":[41.558116,41.560937,41.563218,41.564617,41.566935,41.567556,41.569144,41.5744,41.575263,41.577087,41.579109,41.581793,41.583779,41.585287,41.588017,41.590071,41.594336,41.594751,41.598961,41.605554,41.606111,41.609347,41.609725,41.61285,41.614517,41.61544,41.616092,41.61314,41.613016,41.611122,41.609751,41.608219,41.609642,41.610622,41.61081,41.618115,41.620071,41.622482,41.623934,41.628806,41.628964,41.624022,41.622969,41.623104,41.625088,41.626551,41.627268,41.622622,41.618714,41.613055,41.609087,41.606797,41.608209,41.60818,41.607741,41.603833,41.601043,41.601197,41.599589,41.598212,41.596156,41.594709,41.591299,41.588624,41.586694,41.584139,41.581555,41.580911,41.579636,41.578272,41.579881,41.579853,41.579087,41.575737,41.57489,41.572321,41.570938,41.568485,41.565567,41.563625,41.563459,41.558567,41.55827,41.554919,41.558116,41.56193,41.564051,41.565553,41.568231,41.567792,41.567662,41.567084,41.565599,41.564615,41.564867,41.566279,41.567734,41.567633,41.56699,41.564345,41.563926,41.564375,41.562965,41.560949,41.556597,41.552771,41.553806,41.556185,41.557538,41.559657,41.562887,41.564869,41.565342,41.564709,41.563627,41.563352,41.562808,41.564221,41.563991,41.560393,41.5535,41.553111,41.554272,41.555669,41.553966,41.558116]},{"lng":[-72.586611,-72.584735,-72.578071,-72.573507,-72.56934,-72.566554,-72.568878,-72.567845,-72.564106,-72.56322,-72.561504,-72.559273,-72.557951,-72.556221,-72.554919,-72.55165,-72.550067,-72.55064,-72.552782,-72.553307,-72.551642,-72.551452,-72.548836,-72.555775,-72.556807,-72.557449,-72.557221,-72.552791,-72.552657,-72.551478,-72.549585,-72.548831,-72.550899,-72.550403,-72.549766,-72.551892,-72.55302,-72.551119,-72.55137,-72.55329,-72.553839,-72.559808,-72.561992,-72.562187,-72.561969,-72.5619,-72.561177,-72.560877,-72.560654,-72.559274,-72.558938,-72.55889,-72.559248,-72.561961,-72.563652,-72.567023,-72.569822,-72.577646,-72.579164,-72.577769,-72.579982,-72.581294,-72.585913,-72.5865,-72.588581,-72.586611],"lat":[41.583043,41.585596,41.586274,41.579634,41.572991,41.57336,41.57521,41.575436,41.572891,41.571718,41.572138,41.574889,41.574536,41.574373,41.575934,41.576407,41.577726,41.576539,41.575842,41.574457,41.572337,41.571126,41.567993,41.568171,41.569845,41.566471,41.564428,41.562229,41.562122,41.561844,41.561925,41.561703,41.554923,41.553966,41.552364,41.551295,41.552043,41.555304,41.555591,41.557402,41.558329,41.558652,41.556175,41.556744,41.556829,41.557577,41.558619,41.559863,41.560187,41.561182,41.562371,41.565237,41.566281,41.565806,41.564814,41.564915,41.564394,41.564603,41.566247,41.567802,41.571128,41.574142,41.577139,41.579532,41.58214,41.583043]},{"lng":[-72.452264,-72.450245,-72.448737,-72.447945,-72.446554,-72.449336,-72.45038,-72.452264],"lat":[41.554919,41.553187,41.553534,41.552864,41.550657,41.552552,41.551744,41.554919]}],[{"lng":[-73.639672,-73.6377403764798,-73.636478,-73.635727,-73.638249,-73.638456,-73.639672],"lat":[41.141495,41.1423751359463,41.140236,41.13798,41.137566,41.138379,41.141495]},{"lng":[-73.6892675660774,-73.6860514347761,-73.685561,-73.686934,-73.687685,-73.688627,-73.68916,-73.6892675660774],"lat":[41.1185281373461,41.120017473021,41.118726,41.118171,41.117747,41.117681,41.118093,41.1185281373461]}],[{"lng":[-73.205333,-73.204807,-73.197361,-73.197413,-73.199505,-73.200016,-73.197535,-73.198195,-73.191924,-73.191609,-73.186546,-73.19197,-73.1901,-73.187429,-73.185455,-73.181889,-73.181877,-73.183358,-73.182619,-73.179486,-73.17941,-73.180261,-73.183075,-73.182255,-73.184067,-73.181769,-73.184845,-73.188047,-73.188609,-73.187895,-73.194497,-73.195353,-73.196514,-73.202872,-73.204835,-73.205333],"lat":[41.745153,41.745112,41.74643,41.750687,41.750541,41.753383,41.753555,41.75525,41.756133,41.75904,41.757263,41.755314,41.747409,41.748521,41.751803,41.753304,41.750733,41.749796,41.747691,41.747219,41.746282,41.743616,41.743539,41.741599,41.734225,41.733603,41.730183,41.731245,41.734481,41.737814,41.737469,41.736031,41.738327,41.737838,41.743553,41.745153]},{"lng":[-73.251251,-73.243913,-73.240046,-73.237884,-73.235151,-73.235347,-73.233608,-73.232406,-73.226608,-73.224532,-73.224716,-73.222185,-73.225451,-73.226628,-73.229987,-73.234026,-73.234342,-73.236239,-73.238683,-73.239932,-73.244108,-73.24704,-73.247769,-73.251251],"lat":[41.762205,41.758864,41.760391,41.760524,41.756699,41.754824,41.75287,41.752442,41.748502,41.746448,41.745388,41.743192,41.744571,41.745749,41.745783,41.745171,41.744001,41.742706,41.742022,41.744389,41.753894,41.754093,41.754755,41.762205]},{"lng":[-73.249382,-73.246549,-73.246928,-73.246146,-73.246953,-73.245985,-73.23312,-73.230609,-73.230171,-73.229717,-73.242044,-73.242241,-73.241145,-73.237775,-73.244037,-73.246383,-73.246034,-73.248879,-73.249382],"lat":[41.721985,41.723012,41.724312,41.726281,41.727379,41.73059,41.730521,41.725918,41.725752,41.718814,41.718947,41.721295,41.722319,41.723493,41.722818,41.720768,41.719005,41.719005,41.721985]},{"lng":[-73.222973,-73.221495,-73.222185,-73.218944,-73.217288,-73.215558,-73.211909,-73.210443,-73.212321,-73.213763,-73.215739,-73.214401,-73.214379,-73.212542,-73.208146,-73.205333,-73.208518,-73.208611,-73.207877,-73.208668,-73.20979,-73.212567,-73.215365,-73.215794,-73.215609,-73.21749,-73.21963,-73.219716,-73.220896,-73.2224,-73.222973],"lat":[41.736004,41.740385,41.743192,41.742889,41.740888,41.74077,41.741808,41.742802,41.745,41.751798,41.752941,41.757978,41.76078,41.756551,41.751573,41.745153,41.744529,41.741624,41.738449,41.737542,41.73883,41.739233,41.740305,41.739557,41.733804,41.730678,41.728707,41.73022,41.730806,41.733167,41.736004]},{"lng":[-73.237744,-73.236997,-73.23591,-73.235689,-73.234514,-73.234183,-73.234667,-73.234363,-73.23312,-73.23439,-73.235461,-73.238683,-73.237744],"lat":[41.742121,41.740648,41.739519,41.737982,41.737766,41.736225,41.735645,41.733615,41.730521,41.732545,41.735701,41.742022,41.742121]}],[{"lng":[-72.465174,-72.457539,-72.45073,-72.447924,-72.450809,-72.452875,-72.453592,-72.451658,-72.449576,-72.448166,-72.44549,-72.444428,-72.441684,-72.440508,-72.437588,-72.434793,-72.433656,-72.43398,-72.431383,-72.428202,-72.426923,-72.424486,-72.420475,-72.416203,-72.41879,-72.418311,-72.413544,-72.416095,-72.414308,-72.413653,-72.412075,-72.411857,-72.416144,-72.411925,-72.409515,-72.407554,-72.407309,-72.408217,-72.407889,-72.408525,-72.407504,-72.408964,-72.413849,-72.415079,-72.416454,-72.417091,-72.417891,-72.422769,-72.423492,-72.425018,-72.42501,-72.427089,-72.428236,-72.429416,-72.430873,-72.435775,-72.439327,-72.441479,-72.443104,-72.441692,-72.440882,-72.442437,-72.44502,-72.444221,-72.450457,-72.446797,-72.453634,-72.449426,-72.4476,-72.445465,-72.445851,-72.44758,-72.446027,-72.446102,-72.446964,-72.448196,-72.449151,-72.453151,-72.458362,-72.460094,-72.459219,-72.460919,-72.46361,-72.466258,-72.465174],"lat":[41.500211,41.501278,41.502547,41.504605,41.5066,41.513043,41.517617,41.516724,41.512584,41.508694,41.508363,41.507544,41.50873,41.510212,41.51135,41.511892,41.513096,41.514402,41.514752,41.51359,41.515629,41.516928,41.518329,41.520465,41.524563,41.525784,41.526238,41.512507,41.512041,41.513531,41.513834,41.5115,41.511812,41.511153,41.511396,41.510051,41.509476,41.508725,41.507203,41.504069,41.503119,41.502053,41.501199,41.501654,41.4999,41.503607,41.505247,41.502189,41.501222,41.499914,41.497942,41.492814,41.491803,41.488046,41.486816,41.485781,41.484557,41.484518,41.483134,41.481804,41.478198,41.476236,41.475967,41.47154,41.470753,41.475187,41.476172,41.476542,41.477782,41.478051,41.479775,41.480549,41.48108,41.483154,41.486911,41.49412,41.492662,41.490873,41.491065,41.493508,41.494508,41.496184,41.497063,41.49658,41.500211]},{"lng":[-72.465488,-72.464213,-72.461657,-72.457245,-72.457213,-72.45704,-72.456786,-72.459044,-72.458566,-72.460878,-72.463065,-72.46421,-72.464644,-72.468041,-72.465488],"lat":[41.4677,41.463043,41.46098,41.460115,41.460135,41.460008,41.458963,41.454575,41.450568,41.450507,41.452139,41.455826,41.463261,41.467214,41.4677]},{"lng":[-72.457381,-72.456451,-72.456246,-72.456247,-72.456496,-72.455901,-72.45557,-72.455476,-72.448157,-72.444955,-72.449787,-72.452001,-72.457213,-72.457465,-72.457381],"lat":[41.460676,41.460873,41.461405,41.462058,41.463014,41.463222,41.463671,41.46247,41.464535,41.46381,41.463179,41.461653,41.460135,41.460315,41.460676]},{"lng":[-72.455551,-72.455237,-72.45277,-72.451431,-72.450797,-72.453527,-72.455423,-72.45557,-72.455551],"lat":[41.463766,41.465134,41.467475,41.469177,41.466481,41.466316,41.463697,41.463671,41.463766]}],[{"lng":[-71.946092,-71.941787,-71.935467,-71.932883,-71.933674,-71.931554,-71.930117,-71.92683,-71.917252,-71.912632,-71.910782,-71.908946,-71.910428,-71.91302,-71.914132,-71.90722,-71.906958,-71.904986,-71.906644,-71.905691,-71.908319,-71.90879,-71.910696,-71.910039,-71.911174,-71.912698,-71.916664,-71.915366,-71.919843,-71.920949,-71.923518,-71.921959,-71.922384,-71.921506,-71.921068,-71.921561,-71.923926,-71.923148,-71.926192,-71.925167,-71.925241,-71.927992,-71.931411,-71.931785,-71.928529,-71.929936,-71.946666,-71.946092],"lat":[41.687717,41.686529,41.686443,41.687257,41.690379,41.690314,41.6879,41.687766,41.68688,41.695673,41.696523,41.69635,41.692083,41.688715,41.686174,41.684388,41.686659,41.686568,41.685335,41.68357,41.679815,41.674727,41.669325,41.669243,41.664748,41.664006,41.663086,41.665636,41.664314,41.663302,41.666756,41.670588,41.671159,41.674508,41.678366,41.676281,41.675962,41.677433,41.676581,41.675313,41.671654,41.672576,41.670897,41.672076,41.673826,41.677266,41.685759,41.687717]},{"lng":[-71.909992,-71.908463,-71.899572,-71.897826,-71.894262,-71.891631,-71.889552,-71.883745,-71.886486,-71.88519,-71.890569,-71.892132,-71.891466,-71.893123,-71.896409,-71.903374,-71.903912,-71.9096,-71.910039,-71.909992],"lat":[41.66956,41.671613,41.670887,41.669842,41.670771,41.670247,41.668509,41.667051,41.661033,41.651978,41.651645,41.655151,41.656439,41.660982,41.665342,41.667391,41.668904,41.669204,41.669243,41.66956]},{"lng":[-71.944996,-71.943395,-71.940794,-71.939316,-71.935915,-71.931318,-71.924467,-71.920949,-71.919773,-71.92158,-71.921369,-71.923468,-71.927696,-71.929648,-71.930634,-71.932309,-71.936091,-71.930572,-71.932202,-71.934835,-71.934325,-71.936897,-71.940218,-71.937148,-71.939223,-71.942091,-71.943506,-71.943585,-71.944996],"lat":[41.663382,41.663434,41.664606,41.665957,41.665157,41.66159,41.660608,41.663302,41.66177,41.659631,41.657818,41.655798,41.657556,41.655328,41.652328,41.650225,41.647431,41.656158,41.655622,41.656466,41.65731,41.658117,41.659963,41.660386,41.661052,41.659873,41.660889,41.662136,41.663382]},{"lng":[-71.955929,-71.954467,-71.952871,-71.951831,-71.936091,-71.940554,-71.941824,-71.945127,-71.946626,-71.94804,-71.952027,-71.954983,-71.958458,-71.955929],"lat":[41.638705,41.637862,41.637998,41.637921,41.647431,41.640243,41.63894,41.637296,41.636962,41.635852,41.634342,41.634799,41.635387,41.638705]}],[{"lng":[-71.991549,-71.986347,-71.984506,-71.981012,-71.979361,-71.97864,-71.97537,-71.966224,-71.96608,-71.965878,-71.963723,-71.961357,-71.957666,-71.953489,-71.951629,-71.95563,-71.959217,-71.960458,-71.948738,-71.945806,-71.947482,-71.952286,-71.955325,-71.955291,-71.958601,-71.957472,-71.955709,-71.961274,-71.961575,-71.95707,-71.952248,-71.947675,-71.944595,-71.943235,-71.93799,-71.942879,-71.94104,-71.93339,-71.930376,-71.929593,-71.923774,-71.919036,-71.91016,-71.912058,-71.915277,-71.917588,-71.918356,-71.920842,-71.921959,-71.920477,-71.92421,-71.92218,-71.924547,-71.926819,-71.932361,-71.93555,-71.936651,-71.939971,-71.939545,-71.936882,-71.940881,-71.943788,-71.95035,-71.951954,-71.95166,-71.952322,-71.956148,-71.960133,-71.964022,-71.972085,-71.976137,-71.976488,-71.977998,-71.980125,-71.984719,-71.985758,-71.985106,-71.987182,-71.988229,-71.9916,-71.991549],"lat":[41.60553,41.609304,41.609502,41.616135,41.617732,41.616622,41.620165,41.626149,41.62624,41.626112,41.625354,41.62705,41.627417,41.62646,41.627753,41.620756,41.618937,41.6146,41.613861,41.614096,41.608893,41.607048,41.607674,41.608905,41.609112,41.60465,41.602426,41.598974,41.596583,41.592574,41.594596,41.595051,41.596704,41.592334,41.591664,41.590898,41.584565,41.58498,41.583028,41.585141,41.585112,41.583101,41.582865,41.580708,41.580159,41.578148,41.57905,41.576694,41.573863,41.569379,41.570933,41.567583,41.565061,41.56647,41.574638,41.577644,41.575837,41.576067,41.578955,41.580077,41.584411,41.581613,41.579512,41.581533,41.586011,41.588369,41.591305,41.592121,41.591531,41.593584,41.591539,41.595164,41.595009,41.599338,41.598408,41.599873,41.603787,41.602091,41.603534,41.604782,41.60553]},{"lng":[-71.97425,-71.972836,-71.970912,-71.970535,-71.958458,-71.954983,-71.952027,-71.9556,-71.96608,-71.968738,-71.966666,-71.968952,-71.968795,-71.973057,-71.97425],"lat":[41.631142,41.635084,41.634714,41.637349,41.635387,41.634799,41.634342,41.632883,41.62624,41.626501,41.629106,41.629339,41.630165,41.629205,41.631142]}],[{"lng":[-73.164923,-73.161129,-73.159969,-73.155971,-73.153107,-73.151186,-73.147906,-73.147125,-73.147347,-73.148797,-73.14641,-73.148674,-73.143562,-73.142467,-73.141271,-73.140575,-73.138462,-73.130693,-73.123718,-73.122277,-73.120062,-73.118967,-73.116568,-73.113398,-73.10876,-73.10763,-73.110481,-73.109182,-73.105794,-73.103809,-73.101803,-73.094125,-73.091419,-73.088831,-73.086565,-73.084189,-73.082946,-73.079878,-73.07813,-73.07599,-73.074799,-73.074092,-73.069048,-73.067124,-73.065187,-73.064651,-73.062818,-73.061625,-73.058853,-73.058074,-73.058669,-73.058597,-73.058024,-73.059469,-73.058946,-73.0607,-73.06015,-73.059458,-73.057424,-73.05801,-73.064209,-73.066074,-73.069024,-73.069844,-73.077825,-73.078131,-73.082955,-73.089113,-73.092353,-73.093853,-73.118857,-73.119201,-73.122593,-73.124336,-73.123744,-73.124008,-73.125761,-73.122879,-73.125796,-73.128662,-73.130648,-73.138184,-73.149121,-73.148864,-73.151422,-73.152694,-73.155411,-73.15032,-73.138183,-73.139969,-73.140917,-73.140965,-73.142293,-73.140474,-73.142826,-73.145074,-73.150757,-73.152615,-73.155067,-73.154462,-73.152219,-73.149102,-73.14573,-73.146736,-73.14738,-73.148779,-73.154807,-73.15945,-73.160549,-73.159265,-73.159243,-73.158672,-73.158781,-73.160251,-73.161609,-73.164923],"lat":[41.643533,41.642981,41.638987,41.635904,41.632631,41.633377,41.633347,41.638567,41.640295,41.64234,41.64269,41.645498,41.646323,41.643907,41.643559,41.639962,41.634258,41.635406,41.634106,41.632299,41.630979,41.629503,41.628612,41.62659,41.629356,41.626195,41.623945,41.622734,41.620826,41.618069,41.616465,41.61213,41.608329,41.609495,41.610196,41.610552,41.610485,41.609535,41.6093,41.609847,41.60969,41.609556,41.609595,41.610219,41.610655,41.611086,41.614055,41.614807,41.615514,41.615574,41.610919,41.606796,41.60674,41.606179,41.602721,41.600811,41.593484,41.591605,41.589324,41.588647,41.588491,41.588321,41.588112,41.588112,41.58748,41.586799,41.585616,41.575654,41.570496,41.570196,41.56377,41.564378,41.564731,41.566898,41.567884,41.570815,41.573128,41.575253,41.575305,41.579159,41.578385,41.577005,41.575354,41.574229,41.573543,41.576616,41.577573,41.580653,41.590889,41.592752,41.595487,41.597333,41.601151,41.601932,41.603866,41.606609,41.605584,41.606753,41.607338,41.608209,41.608406,41.607196,41.608632,41.611694,41.615648,41.621236,41.621117,41.620452,41.625073,41.625795,41.626322,41.627398,41.62912,41.629326,41.629914,41.643533]},{"lng":[-73.046774,-73.046162,-73.042736,-73.041488,-73.038649,-73.036156,-73.050362,-73.046774],"lat":[41.613313,41.615146,41.616332,41.619132,41.618044,41.615197,41.609748,41.613313]}]],null,null,{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null,"className":"","stroke":true,"color":"#BDBDC3","weight":1,"opacity":0.5,"fill":true,"fillColor":["#F7FCFD","#760B72","#863190","#760B72","#CCDDEC","#4D004B","#E5EFF6","#F7FCFD","#4D004B","#CCDDEC","#E5EFF6","#760B72","#CCDDEC","#4D004B","#F7FCFD","#863190","#F7FCFD","#F7FCFD","#F7FCFD","#F7FCFD","#F7FCFD","#CCDDEC","#F7FCFD","#F7FCFD","#F7FCFD","#E5EFF6","#E5EFF6","#863190","#F7FCFD","#E5EFF6","#F7FCFD","#CCDDEC","#F7FCFD"],"fillOpacity":0.7,"dashArray":null,"smoothFactor":1,"noClip":false},["<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431","<strong>County: \u003c/strong>New Haven<br><strong>Median Household Income: \u003c/strong>$60,391<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Fairfield<br><strong>Median Household Income: \u003c/strong>$85,925<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>New Haven<br><strong>Median Household Income: \u003c/strong>$60,391<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>New London<br><strong>Median Household Income: \u003c/strong>$66,148<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Hartford<br><strong>Median Household Income: \u003c/strong>$65,894<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Middlesex<br><strong>Median Household Income: \u003c/strong>$77,931<br><strong>Average Female Income: \u003c/strong>$58,007","<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431","<strong>County: \u003c/strong>Hartford<br><strong>Median Household Income: \u003c/strong>$65,894<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>New London<br><strong>Median Household Income: \u003c/strong>$66,148<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Middlesex<br><strong>Median Household Income: \u003c/strong>$77,931<br><strong>Average Female Income: \u003c/strong>$58,007","<strong>County: \u003c/strong>New Haven<br><strong>Median Household Income: \u003c/strong>$60,391<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>New London<br><strong>Median Household Income: \u003c/strong>$66,148<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Hartford<br><strong>Median Household Income: \u003c/strong>$65,894<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Tolland<br><strong>Median Household Income: \u003c/strong>$79,988<br><strong>Average Female Income: \u003c/strong>$53,610","<strong>County: \u003c/strong>Fairfield<br><strong>Median Household Income: \u003c/strong>$85,925<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431","<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431","<strong>County: \u003c/strong>Windham<br><strong>Median Household Income: \u003c/strong>$59,218<br><strong>Average Female Income: \u003c/strong>$43,552","<strong>County: \u003c/strong>Tolland<br><strong>Median Household Income: \u003c/strong>$79,988<br><strong>Average Female Income: \u003c/strong>$53,610","<strong>County: \u003c/strong>Windham<br><strong>Median Household Income: \u003c/strong>$59,218<br><strong>Average Female Income: \u003c/strong>$43,552","<strong>County: \u003c/strong>New London<br><strong>Median Household Income: \u003c/strong>$66,148<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Tolland<br><strong>Median Household Income: \u003c/strong>$79,988<br><strong>Average Female Income: \u003c/strong>$53,610","<strong>County: \u003c/strong>Tolland<br><strong>Median Household Income: \u003c/strong>$79,988<br><strong>Average Female Income: \u003c/strong>$53,610","<strong>County: \u003c/strong>Tolland<br><strong>Median Household Income: \u003c/strong>$79,988<br><strong>Average Female Income: \u003c/strong>$53,610","<strong>County: \u003c/strong>Middlesex<br><strong>Median Household Income: \u003c/strong>$77,931<br><strong>Average Female Income: \u003c/strong>$58,007","<strong>County: \u003c/strong>Middlesex<br><strong>Median Household Income: \u003c/strong>$77,931<br><strong>Average Female Income: \u003c/strong>$58,007","<strong>County: \u003c/strong>Fairfield<br><strong>Median Household Income: \u003c/strong>$85,925<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431","<strong>County: \u003c/strong>Middlesex<br><strong>Median Household Income: \u003c/strong>$77,931<br><strong>Average Female Income: \u003c/strong>$58,007","<strong>County: \u003c/strong>Windham<br><strong>Median Household Income: \u003c/strong>$59,218<br><strong>Average Female Income: \u003c/strong>$43,552","<strong>County: \u003c/strong>New London<br><strong>Median Household Income: \u003c/strong>$66,148<br><strong>Average Female Income: \u003c/strong>$60,656","<strong>County: \u003c/strong>Litchfield<br><strong>Median Household Income: \u003c/strong>$72,068<br><strong>Average Female Income: \u003c/strong>$55,431"]]},{"method":"addLegend","args":[{"colors":["#F7FCFD","#E5EFF6","#CCDDEC","#B2CAE1","#9AB4D6","#8C96C6","#8C74B5","#8A53A5","#863190","#760B72","#4D004B"],"labels":["20,000 – 40,000","40,000 – 60,000","60,000 – 80,000","80,000 – 100,000","100,000 – 120,000","120,000 – 140,000","140,000 – 160,000","160,000 – 180,000","180,000 – 200,000","200,000 – 220,000","220,000 – 240,000"],"na_color":null,"na_label":"NA","opacity":1,"position":"bottomleft","type":"bin","title":"Total Votes","extra":null,"layerId":null,"className":"info legend"}]}],"limits":{"lat":[40.985171,42.0362368951743],"lng":[-73.7170343653088,-71.825674]}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-19a9d30317d2c444e351">{"viewer":{"width":"100%","height":400,"padding":0,"fill":true},"browser":{"width":"100%","height":400,"padding":0,"fill":true}}</script>
</body>
</html>