Skip to content

Instantly share code, notes, and snippets.

@El-Khatib
Created February 2, 2022 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save El-Khatib/114cef5a5d2b2d06d8e40082a9d32028 to your computer and use it in GitHub Desktop.
Save El-Khatib/114cef5a5d2b2d06d8e40082a9d32028 to your computer and use it in GitHub Desktop.
NM Chinese Map
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<style>body{background-color:white;}</style>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpIHsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGV2YWwoY29kZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsKICAgIHZhciBzaXppbmcgPSBzaXppbmdQb2xpY3koZWwpOwogICAgaWYgKCFzaXppbmcpCiAgICAgIHJldHVybjsKCiAgICB2YXIgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWx3aWRnZXRfY29udGFpbmVyIik7CiAgICBpZiAoIWNlbCkKICAgICAgcmV0dXJuOwoKICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICIwIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ1RvQ3NzKHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpKTsKICAgIH0KCiAgICBpZiAoc2l6aW5nLmZpbGwpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBpZiAoY2VsKSB7CiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICB2YXIgcGFkID0gdW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZyk7CiAgICAgICAgY2VsLnN0eWxlLnRvcCA9IHBhZC50b3AgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmJvdHRvbSA9IHBhZC5ib3R0b20gKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5sZWZ0ID0gcGFkLmxlZnQgKyAicHgiOwogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKCiAgICB9IGVsc2UgewogICAgICBlbC5zdHlsZS53aWR0aCA9IHB4KHNpemluZy53aWR0aCk7CiAgICAgIGVsLnN0eWxlLmhlaWdodCA9IHB4KHNpemluZy5oZWlnaHQpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CiAgICB9CiAgfQoKICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgbWV0aG9kcwogIHZhciBkZWZhdWx0cyA9IHsKICAgIGZpbmQ6IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCAiLiIgKyB0aGlzLm5hbWUpOwogICAgfSwKICAgIHJlbmRlckVycm9yOiBmdW5jdGlvbihlbCwgZXJyKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKCiAgICAgIHRoaXMuY2xlYXJFcnJvcihlbCk7CgogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMKICAgICAgdmFyIGVyckNsYXNzID0gInNoaW55LW91dHB1dC1lcnJvciI7CiAgICAgIGlmIChlcnIudHlwZSAhPT0gbnVsbCkgewogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcwogICAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiICIgKyAkLm1hcChhc0FycmF5KGVyci50eXBlKSwgZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgcmV0dXJuIGVyckNsYXNzICsgIi0iICsgdHlwZTsKICAgICAgICB9KS5qb2luKCIgIik7CiAgICAgIH0KICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgaHRtbHdpZGdldHMtZXJyb3IiOwoKICAgICAgLy8gSXMgZWwgaW5saW5lIG9yIGJsb2NrPyBJZiBpbmxpbmUgb3IgaW5saW5lLWJsb2NrLCBqdXN0IGRpc3BsYXk6bm9uZSBpdAogICAgICAvLyBhbmQgYWRkIGFuIGlubGluZSBlcnJvci4KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIGRpc3BsYXkpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgJGVsLmhpZGUoKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOwogICAgICAgICAgZXJyb3JTcGFuLnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yU3Bhbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpIHsKICAgICAgICAvLyBJZiBibG9jaywgYWRkIGFuIGVycm9yIGp1c3QgYWZ0ZXIgdGhlIGVsLCBzZXQgdmlzaWJpbGl0eTpub25lIG9uIHRoZQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuCiAgICAgICAgLy8gTWFyayBpdCB3aXRoIGEgdW5pcXVlIElEIGFuZCBDU1MgY2xhc3Mgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlci4KICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvckRpdiA9ICQoIjxkaXY+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKQogICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAvLyBzZXR0aW5nIHdpZHRoIGNhbiBwdXNoIG91dCB0aGUgcGFnZSBzaXplLCBmb3JjaW5nIG90aGVyd2lzZQogICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXJzIHRvIGFwcGVhciBhbmQgbWFraW5nIGl0IGltcG9zc2libGUgZm9yCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkCiAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvckRpdik7CgogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aAogICAgICAgICAgLy8gdGhlIHBhcmVudCBlbGVtZW50IGFzIHRoZSB3aW5kb3cgaXMgcmVzaXplZCBvciB3aGF0ZXZlci4KICAgICAgICAgIHZhciBpbnRJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludElkKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3JEaXYKICAgICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgfSwgNTAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckVycm9yOiBmdW5jdGlvbihlbCkgewogICAgICB2YXIgJGVsID0gJChlbCk7CiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIG51bGwpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgaWYgKGRpc3BsYXkpCiAgICAgICAgICAkZWwuY3NzKCJkaXNwbGF5IiwgZGlzcGxheSk7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKXsKICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9CiAgICB9LAogICAgc2l6aW5nOiB7fQogIH07CgogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uCiAgLy8gb2JqZWN0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAvLyAtIG5hbWUgKHJlcXVpcmVkKSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJpbmRpbmcgbmFtZSwgd2hpY2ggd2lsbCBiZQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLgogIC8vIC0gaW5pdGlhbGl6ZSAob3B0aW9uYWwpIC0gQSBmdW5jdGlvbihlbCkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgd2lkZ2V0IGVsZW1lbnQ7IGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSB0aGlyZAogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuCiAgLy8gLSByZW5kZXJWYWx1ZSAocmVxdWlyZWQpIC0gQSBmdW5jdGlvbihlbCwgZGF0YSwgaW5pdFZhbHVlKSB0aGF0IHdpbGwgYmUKICAvLyAgIGNhbGxlZCB3aXRoIGRhdGEuIFN0YXRpYyBjb250ZXh0cyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyCiAgLy8gICBlbGVtZW50LCBhcyB0aGUgZGF0YSBjaGFuZ2VzLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXQgPSBmdW5jdGlvbihkZWZpbml0aW9uKSB7CiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICB9CiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSB0eXBlIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzCiAgICBpZiAoZGVmaW5pdGlvbi50eXBlICE9PSAib3V0cHV0IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB3aWRnZXQgdHlwZSAnIiArIGRlZmluaXRpb24udHlwZSArICInIik7CiAgICB9CiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCAubmFtZSBpcyBhIHZhbGlkIENTUyBjbGFzc25hbWUKCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kCiAgICAvLyBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQgIm9iamVjdCIgcGVyIHdpZGdldCBwZXIgdHlwZS9jbGFzcyBvZgogICAgLy8gd2lkZ2V0OyB0aGUgcmVuZGVyVmFsdWUgYW5kIHJlc2l6ZSBtZXRob2RzIG9uIHN1Y2ggd2lkZ2V0IG9iamVjdHMKICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndAogICAgLy8gc3RvcmUgdGhlbS4gTmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldAogICAgLy8gb2JqZWN0IHBlciB3aWRnZXQgaW5zdGFuY2U7IHRoZSBkZWZpbml0aW9uIHRoYXQncyBwYXNzZWQgaW4gZG9lc24ndAogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QKICAgIC8vICAgZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkKICAgIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGFzIHJlbmRlclZhbHVlKHgpIGFuZCByZXNpemUodywgaCkuCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0CiAgICAvLyBhdXRob3IsIHdobyBjYW4gc3RvcmUgcGVyLWluc3RhbmNlIHN0YXRlIHVzaW5nIGVpdGhlciBPTy1zdHlsZQogICAgLy8gaW5zdGFuY2UgZmllbGRzIG9yIGZ1bmN0aW9uYWwtc3R5bGUgY2xvc3VyZSB2YXJpYWJsZXMgKEkgZ3Vlc3MgdGhpcwogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMKICAgIC8vIHdoYXQgd2UgcmVxdWlyZWQgYmVmb3JlKS4KICAgIGlmIChkZWZpbml0aW9uLmZhY3RvcnkpIHsKICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOwogICAgfQoKICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSByZW5kZXJWYWx1ZSBmdW5jdGlvbiIpOwogICAgfQoKICAgIC8vIEZvciBzdGF0aWMgcmVuZGVyaW5nIChub24tU2hpbnkpLCB1c2UgYSBzaW1wbGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbgogICAgLy8gc2NoZW1lLiBXZSBhbHNvIHVzZSB0aGlzIHNjaGVtZSBmb3IgU2hpbnkgYXBwcy9kb2N1bWVudHMgdGhhdCBhbHNvCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLgogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIC8vIE1lcmdlIGRlZmF1bHRzIGludG8gdGhlIGRlZmluaXRpb247IGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CiAgICBvdmVycmlkZU1ldGhvZChzdGF0aWNCaW5kaW5nLCAiZmluZCIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CiAgICAgICAgLy8gRmlsdGVyIG91dCBTaGlueSBvdXRwdXRzLCB3ZSBvbmx5IHdhbnQgdGhlIHN0YXRpYyBraW5kCiAgICAgICAgcmV0dXJuIGZpbHRlckJ5Q2xhc3MocmVzdWx0cywgImh0bWwtd2lkZ2V0LW91dHB1dCIsIGZhbHNlKTsKICAgICAgfTsKICAgIH0pOwogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMucHVzaChzdGF0aWNCaW5kaW5nKTsKCiAgICBpZiAoc2hpbnlNb2RlKSB7CiAgICAgIC8vIFNoaW55IGlzIHJ1bm5pbmcuIFJlZ2lzdGVyIHRoZSBkZWZpbml0aW9uIHdpdGggYW4gb3V0cHV0IGJpbmRpbmcuCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQKICAgICAgLy8gd2Ugd2lsbCBtYWtlIGFuIG91dHB1dCBiaW5kaW5nIG9iamVjdCB0aGF0IGRlbGVnYXRlcyB0byB0aGUKICAgICAgLy8gZGVmaW5pdGlvbi4gVGhpcyBpcyBiZWNhdXNlIHdlIGZvb2xpc2hseSB1c2VkIHRoZSBzYW1lIG1ldGhvZAogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzCiAgICAgIC8vIGJ1dCB0aGV5IGFjdHVhbGx5IGhhdmUgcXVpdGUgZGlmZmVyZW50IHNlbWFudGljcyAodGhlIFNoaW55CiAgICAgIC8vIGJpbmRpbmdzIHJlY2VpdmUgZGF0YSB0aGF0IGluY2x1ZGVzIGxvdHMgb2YgbWV0YWRhdGEgdGhhdCBpdAogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QKICAgICAgLy8ganVzdCBpZ25vcmUgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBpbiBzb21lIHdpZGdldHMgaXQncyBoZWxwZnVsCiAgICAgIC8vIHRvIGNhbGwgdGhpcy5yZW5kZXJWYWx1ZSgpIGZyb20gaW5zaWRlIG9mIHJlc2l6ZSgpLCBhbmQgaWYKICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55CiAgICAgIC8vIHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgaHRtbHdpZGdldHMgdmVyc2lvbi4KCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCiAgICAgIHZhciBiaW5kaW5nRGVmID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IG5ldyBTaGlueS5PdXRwdXRCaW5kaW5nKCk7CgogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzCiAgICAgIC8vIHZlcnNpb24gb2YgbWV0aG9kcyBpZiB0aGV5IGFyZSBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KICAgICAgLy8gU2hpbnkncyBkZWZhdWx0cy4gTk9URTogSWYgU2hpbnkncyBvdXRwdXQgYmluZGluZ3MgZ2FpbiBhZGRpdGlvbmFsCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkKICAgICAgLy8gSFRNTFdpZGdldCBiaW5kaW5nIGRlZmluaXRpb25zLCB0aGVuIHdlJ2xsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhpcwogICAgICAvLyBsaXN0LgogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlQ2hhbmdlIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJjbGVhckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInNob3dQcm9ncmVzcyIpOwoKICAgICAgLy8gVGhlIGZpbmQsIHJlbmRlclZhbHVlLCBhbmQgcmVzaXplIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHdlCiAgICAgIC8vIHdhbnQgdG8gYWN0dWFsbHkgZGVjb3JhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5kaW5nRGVmIG1ldGhvZHMuCgogICAgICBzaGlueUJpbmRpbmcuZmluZCA9IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBiaW5kaW5nRGVmLmZpbmQoc2NvcGUpOwoKICAgICAgICAvLyBPbmx5IHJldHVybiBlbGVtZW50cyB0aGF0IGFyZSBTaGlueSBvdXRwdXRzLCBub3Qgc3RhdGljIG9uZXMKICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2hhdGV2ZXIgY2F1c2VkIFNoaW55IHRvIHRoaW5rIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgLy8gbmV3IGR5bmFtaWMgb3V0cHV0cywgYWxzbyBjYXVzZWQgdGhlcmUgdG8gYmUgbmV3IHN0YXRpYyBvdXRwdXRzLgogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgIC8vIHNjaGVkdWxlIGV4ZWN1dGlvbiBmb3IgbGF0ZXItLW5vIG5lZWQgdG8gc3RhdGljUmVuZGVyIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlcigpOwoKICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7CiAgICAgIH07CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgIGlmIChkYXRhLnggPT09IG51bGwpIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImluaGVyaXQiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIsIHRydWUpOwogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmluZGluZ0RlZi5pbml0aWFsaXplKGVsLCBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYmluZGluZ0RlZi5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpLCBbZWwsIGRhdGEueF0pOwogICAgICB9OwoKICAgICAgLy8gT25seSBvdmVycmlkZSByZXNpemUgaWYgYmluZGluZ0RlZiBpbXBsZW1lbnRzIGl0CiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgewogICAgICAgIHNoaW55QmluZGluZy5yZXNpemUgPSBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIGJpbmRpbmdEZWYucmVzaXplKGVsLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgYmluZGluZ0RlZi5uYW1lKTsKICAgIH0KICB9OwoKICB2YXIgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsKICAgIGlmICghc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkKSB7CiAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0sIDEpOwogICAgfQogIH0KCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nCiAgLy8gU3RhdGljYWxseSByZW5kZXIgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIG9mIHRoaXMgd2lkZ2V0J3MgY2xhc3MKICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKICAgICAgdmFyIG1hdGNoZXMgPSBiaW5kaW5nLmZpbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgewogICAgICAgIHZhciBzaXplT2JqID0gaW5pdFNpemluZyhlbCwgYmluZGluZyk7CgogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSArICIgaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIjsKCiAgICAgICAgdmFyIGluaXRSZXN1bHQ7CiAgICAgICAgaWYgKGJpbmRpbmcuaW5pdGlhbGl6ZSkgewogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgKTsKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCBpbml0UmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChiaW5kaW5nLnJlc2l6ZSkgewogICAgICAgICAgdmFyIGxhc3RTaXplID0gewogICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyBzaG93bi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgaW5pdFJlc3VsdCwgW2VsLCBkYXRhLnhdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCk7CiAgfQoKCiAgZnVuY3Rpb24gaGFzX2pRdWVyeTMoKSB7CiAgICBpZiAoIXdpbmRvdy5qUXVlcnkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyICR2ZXJzaW9uID0gd2luZG93LmpRdWVyeS5mbi5qcXVlcnk7CiAgICB2YXIgJG1ham9yX3ZlcnNpb24gPSBwYXJzZUludCgkdmVyc2lvbi5zcGxpdCgiLiIpWzBdKTsKICAgIHJldHVybiAkbWFqb3JfdmVyc2lvbiA+PSAzOwogIH0KCiAgLyoKICAvIFNoaW55IDEuNCBidW1wZWQgalF1ZXJ5IGZyb20gMS54IHRvIDMueCB3aGljaCBtZWFucyBqUXVlcnkncwogIC8gb24tcmVhZHkgaGFuZGxlciAoaS5lLiwgJChmbikpIGlzIG5vdyBhc3luY3Jvbm91cyAoaS5lLiwgaXQgbm93CiAgLyByZWFsbHkgbWVhbnMgJChzZXRUaW1lb3V0KGZuKSkuCiAgLyBodHRwczovL2pxdWVyeS5jb20vdXBncmFkZS1ndWlkZS8zLjAvI2JyZWFraW5nLWNoYW5nZS1kb2N1bWVudC1yZWFkeS1oYW5kbGVycy1hcmUtbm93LWFzeW5jaHJvbm91cwogIC8KICAvIFNpbmNlIFNoaW55IHVzZXMgJCgpIHRvIHNjaGVkdWxlIGluaXRTaGlueSwgc2hpbnk+PTEuNCBjYWxscyBpbml0U2hpbnkKICAvIG9uZSB0aWNrIGxhdGVyIHRoYW4gaXQgZGlkIGJlZm9yZSwgd2hpY2ggbWVhbnMgc3RhdGljUmVuZGVyKCkgaXMKICAvIGNhbGxlZCByZW5kZXJWYWx1ZSgpIGVhcmxpZXIgdGhhbiAoYWR2YW5jZWQpIHdpZGdldCBhdXRob3JzIG1pZ2h0IGJlIGV4cGVjdGluZy4KICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3NoaW55L2lzc3Vlcy8yNjMwCiAgLwogIC8gRm9yIGEgY29uY3JldGUgZXhhbXBsZSwgbGVhZmxldCBoYXMgc29tZSBtZXRob2RzIChlLmcuLCB1cGRhdGVCb3VuZHMpCiAgLyB3aGljaCByZWZlcmVuY2UgU2hpbnkgbWV0aG9kcyByZWdpc3RlcmVkIGluIGluaXRTaGlueSAoZS5nLiwgc2V0SW5wdXRWYWx1ZSkuCiAgLyBTaW5jZSBsZWFmbGV0IGlzIHByaXZ5IHRvIHRoaXMgbGlmZS1jeWNsZSwgaXQga25vd3MgdG8gdXNlIHNldFRpbWVvdXQoKSB0bwogIC8gZGVsYXkgZXhlY3V0aW9uIG9mIHRob3NlIG1ldGhvZHMgKHVudGlsIFNoaW55IG1ldGhvZHMgYXJlIHJlYWR5KQogIC8gaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vbGVhZmxldC9ibG9iLzE4ZWM5ODEvamF2YXNjcmlwdC9zcmMvaW5kZXguanMjTDI2Ni1MMjY4CiAgLwogIC8gSWRlYWxseSB3aWRnZXQgYXV0aG9ycyB3b3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHNldFRpbWVvdXQoKSBoYWNrIHRoYXQKICAvIGxlYWZsZXQgdXNlcyB0byBjYWxsIFNoaW55IG1ldGhvZHMgb24gYSBzdGF0aWNSZW5kZXIoKS4gSW4gdGhlIGxvbmcgcnVuLAogIC8gdGhlIGxvZ2ljIGluaXRTaGlueSBzaG91bGQgYmUgYnJva2VuIHVwIHNvIHRoYXQgbWV0aG9kIHJlZ2lzdHJhdGlvbiBoYXBwZW5zCiAgLyByaWdodCBhd2F5LCBidXQgYmluZGluZyBoYXBwZW5zIGxhdGVyLgogICovCiAgZnVuY3Rpb24gbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpIHsKICAgIGlmIChzaGlueU1vZGUgJiYgaGFzX2pRdWVyeTMoKSkgewogICAgICB3aW5kb3cualF1ZXJ5KHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfQogIH0KCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gdHJ5RXZhbChvW3BhcnRdKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSB2MS4xMi40IHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT0iMS4xMi40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmUuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZWFjaCh0aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpnLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbi5leHRlbmQ9bi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG4uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihuLmlzUGxhaW5PYmplY3QoYyl8fChiPW4uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbi5pc0FycmF5KGEpP2E6W10pOmY9YSYmbi5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1uLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbi5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKG0rTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW4udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bi50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1hJiZhLnRvU3RyaW5nKCk7cmV0dXJuIW4uaXNBcnJheShhKSYmYi1wYXJzZUZsb2F0KGIpKzE+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1uLnR5cGUoYSl8fGEubm9kZVR5cGV8fG4uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFrLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWsuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKCFsLm93bkZpcnN0KWZvcihiIGluIGEpcmV0dXJuIGsuY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxrLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aVtqLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZuLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYocyhhKSl7Zm9yKGM9YS5sZW5ndGg7Yz5kO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShvLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGgpcmV0dXJuIGguY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIoYVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9Ziksbi5pc0Z1bmN0aW9uKGEpPyhjPWUuY2FsbChhcmd1bWVudHMsMiksZD1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpKX0sZC5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omx9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEmJiJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitMKyIqXFxdIixPPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4qKVxcKXwpIixQPW5ldyBSZWdFeHAoTCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoIl4iK00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhcZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT14JiYobz0kLmV4ZWMoYSkpKWlmKGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZih3JiYoaj13LmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihvWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1vWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgpdz1iLHM9YTtlbHNlIGlmKCJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLGs9dSkscj1nKGEpLGg9ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitrKyInXSI7d2hpbGUoaC0tKXJbaF09bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gZ2EoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGhhKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBqYShhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbWEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9jdW1lbnRFbGVtZW50LHA9IWYobiksKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1pYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLE8pfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsIj0nJDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIgIl0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGZhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1mYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpoYSxtYXRjaDpXLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2EpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVS50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShQLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2hhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBWLnRlc3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1SLmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1TLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFEsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGosaz1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGo9Ylt1XXx8KGJbdV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJRF09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihpW2RdPWssa1syXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJihjJiYhYyhmLGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkpLGUmJiFlW3VdJiYoZT12YShlLGYpKSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1mfHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShmdW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShzYShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gdmEoaT4xJiZzYShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYmd2EoYS5zbGljZShpLGUpKSxmPmUmJndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNoKGMpfXJldHVybiBzYShtKX1mdW5jdGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1GLmNhbGwoaSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEmJmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9oYShmKTpmfXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj13YShiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksXy50ZXN0KGpbMF0udHlwZSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGphKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geihhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBuLmluQXJyYXkoYSxiKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobi5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyluLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9uLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheih0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxBLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hLmNoYXJBdCgwKSYmIj4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlmb3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihlLGJbZV0pO3JldHVybiB0aGlzfWlmKGY9ZC5nZXRFbGVtZW50QnlJZChlWzJdKSxmJiZmLnBhcmVudE5vZGUpe2lmKGYuaWQhPT1lWzJdKXJldHVybiBBLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWZ9cmV0dXJuIHRoaXMuY29udGV4dD1kLHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpPyJ1bmRlZmluZWQiIT10eXBlb2YgYy5yZWFkeT9jLnJlYWR5KGEpOmEobik6KHZvaWQgMCE9PWEuc2VsZWN0b3ImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCksbi5tYWtlQXJyYXkoYSx0aGlzKSl9O0MucHJvdG90eXBlPW4uZm4sQT1uKGQpO3ZhciBEPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEU9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07bi5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW4oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihuLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP24udW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP24uaW5BcnJheSh0aGlzWzBdLG4oYSkpOm4uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWVTb3J0KG4ubWVyZ2UodGhpcy5nZXQoKSxuKGEsYikpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEYoYSxiKXtkbyBhPWFbYl07d2hpbGUoYSYmMSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW4uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB1KGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gdigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHwoZT1uLnVuaXF1ZVNvcnQoZSkpLEQudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRz0vXFMrL2c7ZnVuY3Rpb24gSChhKXt2YXIgYj17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRyl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/SChhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmPVtdLGc9W10saD0tMSxpPWZ1bmN0aW9uKCl7Zm9yKGU9YS5vbmNlLGQ9Yj0hMDtnLmxlbmd0aDtoPS0xKXtjPWcuc2hpZnQoKTt3aGlsZSgrK2g8Zi5sZW5ndGgpZltoXS5hcHBseShjWzBdLGNbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2UmJihoPWYubGVuZ3RoLGM9ITEpfWEubWVtb3J5fHwoYz0hMSksYj0hMSxlJiYoZj1jP1tdOiIiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXtuLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09bi50eXBlKGMpJiZkKGMpfSl9KGFyZ3VtZW50cyksYyYmIWImJmkoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxiKXt2YXIgYzt3aGlsZSgoYz1uLmluQXJyYXkoYixmLGMpKT4tMSlmLnNwbGljZShjLDEpLGg+PWMmJmgtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9uLmluQXJyYXkoYSxmKT4tMTpmLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBmJiYoZj1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBlPWc9W10sZj1jPSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxjfHxqLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMpLGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVzcyhjLm5vdGlmeSkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1lLmNhbGwoYXJndW1lbnRzKSxkPWMubGVuZ3RoLGY9MSE9PWR8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2Q6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZS5jYWxsKGFyZ3VtZW50cyk6ZCxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGQ+MSlmb3IoaT1uZXcgQXJyYXkoZCksaj1uZXcgQXJyYXkoZCksaz1uZXcgQXJyYXkoZCk7ZD5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5wcm9ncmVzcyhoKGIsaixpKSkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0hMCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEkucmVzb2x2ZVdpdGgoZCxbbl0pLG4uZm4udHJpZ2dlckhhbmRsZXImJihuKGQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4oZCkub2ZmKCJyZWFkeSIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLmFkZEV2ZW50TGlzdGVuZXI/KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixLKSk6KGQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5kZXRhY2hFdmVudCgib25sb2FkIixLKSl9ZnVuY3Rpb24gSygpeyhkLmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWEuZXZlbnQudHlwZXx8ImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZSkmJihKKCksbi5yZWFkeSgpKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIUkpaWYoST1uLkRlZmVycmVkKCksImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpYS5zZXRUaW1lb3V0KG4ucmVhZHkpO2Vsc2UgaWYoZC5hZGRFdmVudExpc3RlbmVyKWQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixLKTtlbHNle2QuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5hdHRhY2hFdmVudCgib25sb2FkIixLKTt2YXIgYz0hMTt0cnl7Yz1udWxsPT1hLmZyYW1lRWxlbWVudCYmZC5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZSl7fWMmJmMuZG9TY3JvbGwmJiFmdW5jdGlvbiBmKCl7aWYoIW4uaXNSZWFkeSl7dHJ5e2MuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChiKXtyZXR1cm4gYS5zZXRUaW1lb3V0KGYsNTApfUooKSxuLnJlYWR5KCl9fSgpfXJldHVybiBJLnByb21pc2UoYil9LG4ucmVhZHkucHJvbWlzZSgpO3ZhciBMO2ZvcihMIGluIG4obCkpYnJlYWs7bC5vd25GaXJzdD0iMCI9PT1MLGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxuKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGU7Yz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGIuc3R5bGUuem9vbSYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsbC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChlKSl9KSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2wuZGVsZXRlRXhwYW5kbz0hMX1hPW51bGx9KCk7dmFyIE09ZnVuY3Rpb24oYSl7dmFyIGI9bi5ub0RhdGFbKGEubm9kZU5hbWUrIiAiKS50b0xvd2VyQ2FzZSgpXSxjPSthLm5vZGVUeXBlfHwxO3JldHVybiAxIT09YyYmOSE9PWM/ITE6IWJ8fGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9LE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE8sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpOLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bi5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwOwp9cmV0dXJuIGN9ZnVuY3Rpb24gUShhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbi5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoYSxiLGQsZSl7aWYoTShhKSl7dmFyIGYsZyxoPW4uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP24uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoO2lmKGsmJmpba10mJihlfHxqW2tdLmRhdGEpfHx2b2lkIDAhPT1kfHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGt8fChrPWk/YVtoXT1jLnBvcCgpfHxuLmd1aWQrKzpoKSxqW2tdfHwoaltrXT1pP3t9Ont0b0pTT046bi5ub29wfSksIm9iamVjdCIhPXR5cGVvZiBiJiYiZnVuY3Rpb24iIT10eXBlb2YgYnx8KGU/altrXT1uLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1uLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbi5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbi5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFMoYSxiLGMpe2lmKE0oYSkpe3ZhciBkLGUsZj1hLm5vZGVUeXBlLGc9Zj9uLmNhY2hlOmEsaD1mP2Fbbi5leHBhbmRvXTpuLmV4cGFuZG87aWYoZ1toXSl7aWYoYiYmKGQ9Yz9nW2hdOmdbaF0uZGF0YSkpe24uaXNBcnJheShiKT9iPWIuY29uY2F0KG4ubWFwKGIsbi5jYW1lbENhc2UpKTpiIGluIGQ/Yj1bYl06KGI9bi5jYW1lbENhc2UoYiksYj1iIGluIGQ/W2JdOmIuc3BsaXQoIiAiKSksZT1iLmxlbmd0aDt3aGlsZShlLS0pZGVsZXRlIGRbYltlXV07aWYoYz8hUShkKTohbi5pc0VtcHR5T2JqZWN0KGQpKXJldHVybn0oY3x8KGRlbGV0ZSBnW2hdLmRhdGEsUShnW2hdKSkpJiYoZj9uLmNsZWFuRGF0YShbYV0sITApOmwuZGVsZXRlRXhwYW5kb3x8ZyE9Zy53aW5kb3c/ZGVsZXRlIGdbaF06Z1toXT12b2lkIDApfX19bi5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP24uY2FjaGVbYVtuLmV4cGFuZG9dXTphW24uZXhwYW5kb10sISFhJiYhUShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFIoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBSKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyhhLGIsITApfX0pLG4uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bi5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbi5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW4uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLFAoZixkLGVbZF0pKSk7bi5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhLGIpfSk6Zj9QKGYsYSxuLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1uLl9kYXRhKGEsYiksYyYmKCFkfHxuLmlzQXJyYXkoYyk/ZD1uLl9kYXRhKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbi5fZGF0YShhLGMpfHxuLl9kYXRhKGEsYyx7ZW1wdHk6bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bi5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbi5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW4uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSksZnVuY3Rpb24oKXt2YXIgYTtsLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxlO3JldHVybiBjPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoYiksInVuZGVmaW5lZCIhPXR5cGVvZiBiLnN0eWxlLnpvb20mJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChlKSxhKTp2b2lkIDB9fSgpO3ZhciBUPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1QrIikoW2EteiVdKikkIiwiaSIpLFY9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxXPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX07ZnVuY3Rpb24gWChhLGIsYyxkKXt2YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gbi5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNdfHwobi5jc3NOdW1iZXJbYl0/IiI6InB4Iiksaz0obi5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYraSkmJlUuZXhlYyhuLmNzcyhhLGIpKTtpZihrJiZrWzNdIT09ail7aj1qfHxrWzNdLGM9Y3x8W10saz0raXx8MTtkbyBmPWZ8fCIuNSIsay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBZPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1uLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYylZKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LFo9L14oPzpjaGVja2JveHxyYWRpbykkL2ksJD0vPChbXHc6LV0rKS8sXz0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksYWE9L15ccysvLGJhPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZGlhbG9nfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1haW58bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHBpY3R1cmV8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRlbXBsYXRlfHRpbWV8dmlkZW8iO2Z1bmN0aW9uIGNhKGEpe3ZhciBiPWJhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfSFmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTthLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixsLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUsbC50Ym9keT0hYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsbC5odG1sU2VyaWFsaXplPSEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxsLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09ZC5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxjLnR5cGU9ImNoZWNrYm94IixjLmNoZWNrZWQ9ITAsYi5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoZWNrZWQ9Yy5jaGVja2VkLGEuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixsLm5vQ2xvbmVDaGVja2VkPSEhYS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYi5hcHBlbmRDaGlsZChhKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYy5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksYy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksYS5hcHBlbmRDaGlsZChjKSxsLmNoZWNrQ2xvbmU9YS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsbC5ub0Nsb25lRXZlbnQ9ISFhLmFkZEV2ZW50TGlzdGVuZXIsYVtuLmV4cGFuZG9dPTEsbC5hdHRyaWJ1dGVzPSFhLmdldEF0dHJpYnV0ZShuLmV4cGFuZG8pfSgpO3ZhciBkYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6bC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19O2RhLm9wdGdyb3VwPWRhLm9wdGlvbixkYS50Ym9keT1kYS50Zm9vdD1kYS5jb2xncm91cD1kYS5jYXB0aW9uPWRhLnRoZWFkLGRhLnRoPWRhLnRkO2Z1bmN0aW9uIGVhKGEsYil7dmFyIGMsZCxlPTAsZj0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOiJ1bmRlZmluZWQiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOnZvaWQgMDtpZighZilmb3IoZj1bXSxjPWEuY2hpbGROb2Rlc3x8YTtudWxsIT0oZD1jW2VdKTtlKyspIWJ8fG4ubm9kZU5hbWUoZCxiKT9mLnB1c2goZCk6bi5tZXJnZShmLGVhKGQsYikpO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sZik6Zn1mdW5jdGlvbiBmYShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW4uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG4uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX12YXIgZ2E9Lzx8JiM/XHcrOy8saGE9Lzx0Ym9keS9pO2Z1bmN0aW9uIGlhKGEpe1oudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGphKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaCxpLGosayxtLG89YS5sZW5ndGgscD1jYShiKSxxPVtdLHI9MDtvPnI7cisrKWlmKGc9YVtyXSxnfHwwPT09ZylpZigib2JqZWN0Ij09PW4udHlwZShnKSluLm1lcmdlKHEsZy5ub2RlVHlwZT9bZ106Zyk7ZWxzZSBpZihnYS50ZXN0KGcpKXtpPWl8fHAuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaj0oJC5leGVjKGcpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09ZGFbal18fGRhLl9kZWZhdWx0LGkuaW5uZXJIVE1MPW1bMV0rbi5odG1sUHJlZmlsdGVyKGcpK21bMl0sZj1tWzBdO3doaWxlKGYtLSlpPWkubGFzdENoaWxkO2lmKCFsLmxlYWRpbmdXaGl0ZXNwYWNlJiZhYS50ZXN0KGcpJiZxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShhYS5leGVjKGcpWzBdKSksIWwudGJvZHkpe2c9InRhYmxlIiE9PWp8fGhhLnRlc3QoZyk/Ijx0YWJsZT4iIT09bVsxXXx8aGEudGVzdChnKT8wOmk6aS5maXJzdENoaWxkLGY9ZyYmZy5jaGlsZE5vZGVzLmxlbmd0aDt3aGlsZShmLS0pbi5ub2RlTmFtZShrPWcuY2hpbGROb2Rlc1tmXSwidGJvZHkiKSYmIWsuY2hpbGROb2Rlcy5sZW5ndGgmJmcucmVtb3ZlQ2hpbGQoayl9bi5tZXJnZShxLGkuY2hpbGROb2RlcyksaS50ZXh0Q29udGVudD0iIjt3aGlsZShpLmZpcnN0Q2hpbGQpaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpO2k9cC5sYXN0Q2hpbGR9ZWxzZSBxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShnKSk7aSYmcC5yZW1vdmVDaGlsZChpKSxsLmFwcGVuZENoZWNrZWR8fG4uZ3JlcChlYShxLCJpbnB1dCIpLGlhKSxyPTA7d2hpbGUoZz1xW3IrK10paWYoZCYmbi5pbkFycmF5KGcsZCk+LTEpZSYmZS5wdXNoKGcpO2Vsc2UgaWYoaD1uLmNvbnRhaW5zKGcub3duZXJEb2N1bWVudCxnKSxpPWVhKHAuYXBwZW5kQ2hpbGQoZyksInNjcmlwdCIpLGgmJmZhKGkpLGMpe2Y9MDt3aGlsZShnPWlbZisrXSlfLnRlc3QoZy50eXBlfHwiIikmJmMucHVzaChnKX1yZXR1cm4gaT1udWxsLHB9IWZ1bmN0aW9uKCl7dmFyIGIsYyxlPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGIgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSljPSJvbiIrYiwobFtiXT1jIGluIGEpfHwoZS5zZXRBdHRyaWJ1dGUoYywidCIpLGxbYl09ZS5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMSk7ZT1udWxsfSgpO3ZhciBrYT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksbGE9L15rZXkvLG1hPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxuYT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sb2E9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHBhKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWEoKXtyZXR1cm4hMX1mdW5jdGlvbiByYSgpe3RyeXtyZXR1cm4gZC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVuY3Rpb24gc2EoYSxiLGMsZCxlLGYpe3ZhciBnLGg7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXsic3RyaW5nIiE9dHlwZW9mIGMmJihkPWR8fGMsYz12b2lkIDApO2ZvcihoIGluIGIpc2EoYSxoLGMsZCxiW2hdLGYpO3JldHVybiBhfWlmKG51bGw9PWQmJm51bGw9PWU/KGU9YyxkPWM9dm9pZCAwKTpudWxsPT1lJiYoInN0cmluZyI9PXR5cGVvZiBjPyhlPWQsZD12b2lkIDApOihlPWQsZD1jLGM9dm9pZCAwKSksZT09PSExKWU9cWE7ZWxzZSBpZighZSlyZXR1cm4gYTtyZXR1cm4gMT09PWYmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1uLmd1aWQrKykpLGEuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYixlLGQsYyl9KX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW4uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygbnx8YSYmbi5ldmVudC50cmlnZ2VyZWQ9PT1hLnR5cGU/dm9pZCAwOm4uZXZlbnQuZGlzcGF0Y2guYXBwbHkoay5lbGVtLGFyZ3VtZW50cyl9LGsuZWxlbT1hKSxiPShifHwiIikubWF0Y2goRyl8fFsiIl0saD1iLmxlbmd0aDt3aGlsZShoLS0pZj1vYS5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChtPWdbb10pfHwobT1nW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP20uc3BsaWNlKG0uZGVsZWdhdGVDb3VudCsrLDAsbCk6bS5wdXNoKGwpLG4uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9bi5oYXNEYXRhKGEpJiZuLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEcpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9b2EuZXhlYyhiW2pdKXx8W10sbz1xPWhbMV0scD0oaFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8pe2w9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG09a1tvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGk9Zj1tLmxlbmd0aDt3aGlsZShmLS0pZz1tW2ZdLCFlJiZxIT09Zy5vcmlnVHlwZXx8YyYmYy5ndWlkIT09Zy5ndWlkfHxoJiYhaC50ZXN0KGcubmFtZXNwYWNlKXx8ZCYmZCE9PWcuc2VsZWN0b3ImJigiKioiIT09ZHx8IWcuc2VsZWN0b3IpfHwobS5zcGxpY2UoZiwxKSxnLnNlbGVjdG9yJiZtLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGcpKTtpJiYhbS5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxwLHIuaGFuZGxlKSE9PSExfHxuLnJlbW92ZUV2ZW50KGEsbyxyLmhhbmRsZSksZGVsZXRlIGtbb10pfWVsc2UgZm9yKG8gaW4gayluLmV2ZW50LnJlbW92ZShhLG8rYltqXSxjLGQsITApO24uaXNFbXB0eU9iamVjdChrKSYmKGRlbGV0ZSByLmhhbmRsZSxuLl9yZW1vdmVEYXRhKGEsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosbCxtLG8scD1bZXx8ZF0scT1rLmNhbGwoYiwidHlwZSIpP2IudHlwZTpiLHI9ay5jYWxsKGIsIm5hbWVzcGFjZSIpP2IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYoaT1tPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFuYS50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKCIuIik+LTEmJihyPXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSksaD1xLmluZGV4T2YoIjoiKTwwJiYib24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChxLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9Zj8yOjMsYi5uYW1lc3BhY2U9ci5qb2luKCIuIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1lKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxsPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30sZnx8IWwudHJpZ2dlcnx8bC50cmlnZ2VyLmFwcGx5KGUsYykhPT0hMSkpe2lmKCFmJiYhbC5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZSkpe2ZvcihqPWwuZGVsZWdhdGVUeXBlfHxxLG5hLnRlc3QoaitxKXx8KGk9aS5wYXJlbnROb2RlKTtpO2k9aS5wYXJlbnROb2RlKXAucHVzaChpKSxtPWk7bT09PShlLm93bmVyRG9jdW1lbnR8fGQpJiZwLnB1c2gobS5kZWZhdWx0Vmlld3x8bS5wYXJlbnRXaW5kb3d8fGEpfW89MDt3aGlsZSgoaT1wW28rK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWIudHlwZT1vPjE/ajpsLmJpbmRUeXBlfHxxLGc9KG4uX2RhdGEoaSwiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZuLl9kYXRhKGksImhhbmRsZSIpLGcmJmcuYXBwbHkoaSxjKSxnPWgmJmlbaF0sZyYmZy5hcHBseSYmTShpKSYmKGIucmVzdWx0PWcuYXBwbHkoaSxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO2lmKGIudHlwZT1xLCFmJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFsLl9kZWZhdWx0fHxsLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYyk9PT0hMSkmJk0oZSkmJmgmJmVbcV0mJiFuLmlzV2luZG93KGUpKXttPWVbaF0sbSYmKGVbaF09bnVsbCksbi5ldmVudC50cmlnZ2VyZWQ9cTt0cnl7ZVtxXSgpfWNhdGNoKHMpe31uLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbSYmKGVbaF09bSl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGQsZixnLGg9W10saT1lLmNhbGwoYXJndW1lbnRzKSxqPShuLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KGcubmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoImNsaWNrIiE9PWEudHlwZXx8aXNOYU4oYS5idXR0b24pfHxhLmJ1dHRvbjwxKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZD1bXSxjPTA7aD5jO2MrKylmPWJbY10sZT1mLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1kW2VdJiYoZFtlXT1mLm5lZWRzQ29udGV4dD9uKGUsdGhpcykuaW5kZXgoaSk+LTE6bi5maW5kKGUsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxkW2VdJiZkLnB1c2goZik7ZC5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmR9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW24uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxlLGY9YS50eXBlLGc9YSxoPXRoaXMuZml4SG9va3NbZl07aHx8KHRoaXMuZml4SG9va3NbZl09aD1tYS50ZXN0KGYpP3RoaXMubW91c2VIb29rczpsYS50ZXN0KGYpP3RoaXMua2V5SG9va3M6e30pLGU9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IG4uRXZlbnQoZyksYj1lLmxlbmd0aDt3aGlsZShiLS0pYz1lW2JdLGFbY109Z1tjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGQpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT0hIWEubWV0YUtleSxoLmZpbHRlcj9oLmZpbHRlcihhLGcpOmF9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGc9Yi5idXR0b24saD1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGQsZj1lLmRvY3VtZW50RWxlbWVudCxjPWUuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmgmJihhLnJlbGF0ZWRUYXJnZXQ9aD09PWEudGFyZ2V0P2IudG9FbGVtZW50OmgpLGEud2hpY2h8fHZvaWQgMD09PWd8fChhLndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09cmEoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1yYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbi5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24uZXZlbnQudHJpZ2dlcihkLG51bGwsYiksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbi5yZW1vdmVFdmVudD1kLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYyl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXSYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/cGE6cWEpOnRoaXMudHlwZT1hLGImJm4uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG4ubm93KCksdm9pZCh0aGlzW24uZXhwYW5kb109ITApKTpuZXcgbi5FdmVudChhLGIpfSxuLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bi5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6cWEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cWEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cWEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGEsYSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1wYSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9cGEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybiBlJiYoZT09PWR8fG4uY29udGFpbnMoZCxlKSl8fChhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLGwuc3VibWl0fHwobi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBuLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9bi5ub2RlTmFtZShiLCJpbnB1dCIpfHxuLm5vZGVOYW1lKGIsImJ1dHRvbiIpP24ucHJvcChiLCJmb3JtIik6dm9pZCAwO2MmJiFuLl9kYXRhKGMsInN1Ym1pdCIpJiYobi5ldmVudC5hZGQoYywic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdEJ1YmJsZT0hMH0pLG4uX2RhdGEoYywic3VibWl0IiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihhKXthLl9zdWJtaXRCdWJibGUmJihkZWxldGUgYS5fc3VibWl0QnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZuLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbi5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxsLmNoYW5nZXx8KG4uZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIGthLnRlc3QodGhpcy5ub2RlTmFtZSk/KCJjaGVja2JveCIhPT10aGlzLnR5cGUmJiJyYWRpbyIhPT10aGlzLnR5cGV8fChuLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXsiY2hlY2tlZCI9PT1hLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdENoYW5nZWQ9ITApfSksbi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdENoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RDaGFuZ2VkPSExKSxuLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSl9KSksITEpOnZvaWQgbi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7a2EudGVzdChiLm5vZGVOYW1lKSYmIW4uX2RhdGEoYiwiY2hhbmdlIikmJihuLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7IXRoaXMucGFyZW50Tm9kZXx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fG4uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEpfSksbi5fZGF0YShiLCJjaGFuZ2UiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBuLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFrYS50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGwuZm9jdXNpbnx8bi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe24uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxuLmV2ZW50LmZpeChhKSl9O24uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1uLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbi5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW4uX2RhdGEoZCxiKS0xO2U/bi5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG4uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG4uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gc2EodGhpcyxhLGIsYyxkKX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBzYSh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGIhPT0hMSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fChjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9cWEpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIHRhPS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csdWE9bmV3IFJlZ0V4cCgiPCg/OiIrYmErIilbXFxzLz5dIiwiaSIpLHZhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzotXSspW14+XSopXC8+L2dpLHdhPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLHhhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHlhPS9edHJ1ZVwvKC4qKS8semE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEFhPWNhKGQpLEJhPUFhLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2Z1bmN0aW9uIENhKGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSwidGFibGUiKSYmbi5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBEYShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bi5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24gRWEoYSl7dmFyIGI9eWEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiBGYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZuLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW4uX2RhdGEoYSksZz1uLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyluLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW4uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBHYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWwubm9DbG9uZUV2ZW50JiZiW24uZXhwYW5kb10pe2U9bi5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyluLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobi5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oRGEoYikudGV4dD1hLnRleHQsRWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGwuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFuLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmWi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOiJpbnB1dCIhPT1jJiYidGV4dGFyZWEiIT09Y3x8KGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX19ZnVuY3Rpb24gSGEoYSxiLGMsZCl7Yj1mLmFwcGx5KFtdLGIpO3ZhciBlLGcsaCxpLGosayxtPTAsbz1hLmxlbmd0aCxwPW8tMSxxPWJbMF0scj1uLmlzRnVuY3Rpb24ocSk7aWYocnx8bz4xJiYic3RyaW5nIj09dHlwZW9mIHEmJiFsLmNoZWNrQ2xvbmUmJnhhLnRlc3QocSkpcmV0dXJuIGEuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1hLmVxKGUpO3ImJihiWzBdPXEuY2FsbCh0aGlzLGUsZi5odG1sKCkpKSxIYShmLGIsYyxkKX0pO2lmKG8mJihrPWphKGIsYVswXS5vd25lckRvY3VtZW50LCExLGEsZCksZT1rLmZpcnN0Q2hpbGQsMT09PWsuY2hpbGROb2Rlcy5sZW5ndGgmJihrPWUpLGV8fGQpKXtmb3IoaT1uLm1hcChlYShrLCJzY3JpcHQiKSxEYSksaD1pLmxlbmd0aDtvPm07bSsrKWc9ayxtIT09cCYmKGc9bi5jbG9uZShnLCEwLCEwKSxoJiZuLm1lcmdlKGksZWEoZywic2NyaXB0IikpKSxjLmNhbGwoYVttXSxnLG0pO2lmKGgpZm9yKGo9aVtpLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG4ubWFwKGksRWEpLG09MDtoPm07bSsrKWc9aVttXSxfLnRlc3QoZy50eXBlfHwiIikmJiFuLl9kYXRhKGcsImdsb2JhbEV2YWwiKSYmbi5jb250YWlucyhqLGcpJiYoZy5zcmM/bi5fZXZhbFVybCYmbi5fZXZhbFVybChnLnNyYyk6bi5nbG9iYWxFdmFsKChnLnRleHR8fGcudGV4dENvbnRlbnR8fGcuaW5uZXJIVE1MfHwiIikucmVwbGFjZSh6YSwiIikpKTtrPWU9bnVsbH1yZXR1cm4gYX1mdW5jdGlvbiBJYShhLGIsYyl7Zm9yKHZhciBkLGU9Yj9uLmZpbHRlcihiLGEpOmEsZj0wO251bGwhPShkPWVbZl0pO2YrKyljfHwxIT09ZC5ub2RlVHlwZXx8bi5jbGVhbkRhdGEoZWEoZCkpLGQucGFyZW50Tm9kZSYmKGMmJm4uY29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZmYShlYShkLCJzY3JpcHQiKSksZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpKTtyZXR1cm4gYX1uLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHZhLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1uLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihsLmh0bWw1Q2xvbmV8fG4uaXNYTUxEb2MoYSl8fCF1YS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KEJhLmlubmVySFRNTD1hLm91dGVySFRNTCxCYS5yZW1vdmVDaGlsZChmPUJhLmZpcnN0Q2hpbGQpKSwhKGwubm9DbG9uZUV2ZW50JiZsLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZD1lYShmKSxoPWVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmR2EoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8ZWEoYSksZD1kfHxlYShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUZhKGUsZFtnXSk7ZWxzZSBGYShhLGYpO3JldHVybiBkPWVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJmZhKGQsIWkmJmVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZCxlLGYsZyxoPTAsaT1uLmV4cGFuZG8saj1uLmNhY2hlLGs9bC5hdHRyaWJ1dGVzLG09bi5ldmVudC5zcGVjaWFsO251bGwhPShkPWFbaF0pO2grKylpZigoYnx8TShkKSkmJihmPWRbaV0sZz1mJiZqW2ZdKSl7aWYoZy5ldmVudHMpZm9yKGUgaW4gZy5ldmVudHMpbVtlXT9uLmV2ZW50LnJlbW92ZShkLGUpOm4ucmVtb3ZlRXZlbnQoZCxlLGcuaGFuZGxlKTtqW2ZdJiYoZGVsZXRlIGpbZl0sa3x8InVuZGVmaW5lZCI9PXR5cGVvZiBkLnJlbW92ZUF0dHJpYnV0ZT9kW2ldPXZvaWQgMDpkLnJlbW92ZUF0dHJpYnV0ZShpKSxjLnB1c2goZikpfX19KSxuLmZuLmV4dGVuZCh7ZG9tTWFuaXA6SGEsZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiBJYSh0aGlzLGEsITApfSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIElhKHRoaXMsYSl9LHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9uLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1DYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPUNhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm4uY2xlYW5EYXRhKGVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbi5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UodGEsIiIpOnZvaWQgMDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiF3YS50ZXN0KGEpJiYobC5odG1sU2VyaWFsaXplfHwhdWEudGVzdChhKSkmJihsLmxlYWRpbmdXaGl0ZXNwYWNlfHwhYWEudGVzdChhKSkmJiFkYVsoJC5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1uLmh0bWxQcmVmaWx0ZXIoYSk7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEoZWEoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5wYXJlbnROb2RlO24uaW5BcnJheSh0aGlzLGEpPDAmJihuLmNsZWFuRGF0YShlYSh0aGlzKSksYyYmYy5yZXBsYWNlQ2hpbGQoYix0aGlzKSl9LGEpfX0pLG4uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD0wLGU9W10sZj1uKGEpLGg9Zi5sZW5ndGgtMTtoPj1kO2QrKyljPWQ9PT1oP3RoaXM6dGhpcy5jbG9uZSghMCksbihmW2RdKVtiXShjKSxnLmFwcGx5KGUsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBKYSxLYT17SFRNTDoiYmxvY2siLEJPRFk6ImJsb2NrIn07ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uKGIuY3JlYXRlRWxlbWVudChhKSkuYXBwZW5kVG8oYi5ib2R5KSxkPW4uY3NzKGNbMF0sImRpc3BsYXkiKTtyZXR1cm4gYy5kZXRhY2goKSxkfWZ1bmN0aW9uIE1hKGEpe3ZhciBiPWQsYz1LYVthXTtyZXR1cm4gY3x8KGM9TGEoYSxiKSwibm9uZSIhPT1jJiZjfHwoSmE9KEphfHxuKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPShKYVswXS5jb250ZW50V2luZG93fHxKYVswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz1MYShhLGIpLEphLmRldGFjaCgpKSxLYVthXT1jKSxjfXZhciBOYT0vXm1hcmdpbi8sT2E9bmV3IFJlZ0V4cCgiXigiK1QrIikoPyFweClbYS16JV0rJCIsImkiKSxQYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX0sUWE9ZC5kb2N1bWVudEVsZW1lbnQ7IWZ1bmN0aW9uKCl7dmFyIGIsYyxlLGYsZyxoLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxqPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoai5zdHlsZSl7ai5zdHlsZS5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGwub3BhY2l0eT0iMC41Ij09PWouc3R5bGUub3BhY2l0eSxsLmNzc0Zsb2F0PSEhai5zdHlsZS5jc3NGbG9hdCxqLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsai5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGwuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1qLnN0eWxlLmJhY2tncm91bmRDbGlwLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7cGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIixqLmlubmVySFRNTD0iIixpLmFwcGVuZENoaWxkKGopLGwuYm94U2l6aW5nPSIiPT09ai5zdHlsZS5ib3hTaXppbmd8fCIiPT09ai5zdHlsZS5Nb3pCb3hTaXppbmd8fCIiPT09ai5zdHlsZS5XZWJraXRCb3hTaXppbmcsbi5leHRlbmQobCx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxmfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZX0scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksY30scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksYn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZ30scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxofX0pO2Z1bmN0aW9uIGsoKXt2YXIgayxsLG09ZC5kb2N1bWVudEVsZW1lbnQ7bS5hcHBlbmRDaGlsZChpKSxqLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsYj1lPWg9ITEsYz1nPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9YS5nZXRDb21wdXRlZFN0eWxlKGopLGI9IjElIiE9PShsfHx7fSkudG9wLGg9IjJweCI9PT0obHx8e30pLm1hcmdpbkxlZnQsZT0iNHB4Ij09PShsfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxqLnN0eWxlLm1hcmdpblJpZ2h0PSI1MCUiLGM9IjRweCI9PT0obHx8e21hcmdpblJpZ2h0OiI0cHgifSkubWFyZ2luUmlnaHQsaz1qLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGsuc3R5bGUuY3NzVGV4dD1qLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsay5zdHlsZS5tYXJnaW5SaWdodD1rLnN0eWxlLndpZHRoPSIwIixqLnN0eWxlLndpZHRoPSIxcHgiLGc9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShrKXx8e30pLm1hcmdpblJpZ2h0KSxqLnJlbW92ZUNoaWxkKGspKSxqLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWouZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgsZiYmKGouc3R5bGUuZGlzcGxheT0iIixqLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsai5jaGlsZE5vZGVzWzBdLnN0eWxlLmJvcmRlckNvbGxhcHNlPSJzZXBhcmF0ZSIsaz1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGtbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZj0wPT09a1swXS5vZmZzZXRIZWlnaHQsZiYmKGtbMF0uc3R5bGUuZGlzcGxheT0iIixrWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWtbMF0ub2Zmc2V0SGVpZ2h0KSksbS5yZW1vdmVDaGlsZChpKX19fSgpO3ZhciBSYSxTYSxUYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhSYT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIGMmJmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUoYil9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsIiIhPT1nJiZ2b2lkIDAhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSxjJiYhbC5waXhlbE1hcmdpblJpZ2h0KCkmJk9hLnRlc3QoZykmJk5hLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9Ziksdm9pZCAwPT09Zz9nOmcrIiJ9KTpRYS5jdXJyZW50U3R5bGUmJihSYT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jdXJyZW50U3R5bGV9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2NbYl06dm9pZCAwLG51bGw9PWcmJmgmJmhbYl0mJihnPWhbYl0pLE9hLnRlc3QoZykmJiFUYS50ZXN0KGIpJiYoZD1oLmxlZnQsZT1hLnJ1bnRpbWVTdHlsZSxmPWUmJmUubGVmdCxmJiYoZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGgubGVmdD0iZm9udFNpemUiPT09Yj8iMWVtIjpnLGc9aC5waXhlbExlZnQrInB4IixoLmxlZnQ9ZCxmJiYoZS5sZWZ0PWYpKSx2b2lkIDA9PT1nP2c6ZysiInx8ImF1dG8ifSk7ZnVuY3Rpb24gVWEoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19dmFyIFZhPS9hbHBoYVwoW14pXSpcKS9pLFdhPS9vcGFjaXR5XHMqPVxzKihbXildKikvaSxYYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sWWE9bmV3IFJlZ0V4cCgiXigiK1QrIikoLiopJCIsImkiKSxaYT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sJGE9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LF9hPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl0sYWI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZTtmdW5jdGlvbiBiYihhKXtpZihhIGluIGFiKXJldHVybiBhO3ZhciBiPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSxjPV9hLmxlbmd0aDt3aGlsZShjLS0paWYoYT1fYVtjXStiLGEgaW4gYWIpcmV0dXJuIGF9ZnVuY3Rpb24gY2IoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bi5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlcoZCkmJihmW2ddPW4uX2RhdGEoZCwib2xkZGlzcGxheSIsTWEoZC5ub2RlTmFtZSkpKSk6KGU9VyhkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZuLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzpuLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIGRiKGEsYixjKXt2YXIgZD1ZYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIGViKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrVltmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gZmIoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPVJhKGEpLGc9bC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1TYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLE9hLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK2ViKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPVNhKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6bC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1iYihoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLHZvaWQgMD09PWMpcmV0dXJuIGcmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdO2lmKGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1VLmV4ZWMoYykpJiZlWzFdJiYoYz1YKGEsYixlKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiPT09ZiYmKGMrPWUmJmVbM118fChuLmNzc051bWJlcltoXT8iIjoicHgiKSksbC5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPWJiKGgpfHxoKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZj1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1mJiYoZj1TYShhLGIsZCkpLCJub3JtYWwiPT09ZiYmYiBpbiAkYSYmKGY9JGFbYl0pLCIiPT09Y3x8Yz8oZT1wYXJzZUZsb2F0KGYpLGM9PT0hMHx8aXNGaW5pdGUoZSk/ZXx8MDpmKTpmfX0pLG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP1hhLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/UGEoYSxaYSxmdW5jdGlvbigpe3JldHVybiBmYihhLGIsZCl9KTpmYihhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJlJhKGEpO3JldHVybiBkYihhLGMsZD9lYihhLGIsZCxsLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksbC5vcGFjaXR5fHwobi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gV2EudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW4uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1uLnRyaW0oZi5yZXBsYWNlKFZhLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPVZhLnRlc3QoZik/Zi5yZXBsYWNlKFZhLGUpOmYrIiAiK2UpfX0pLG4uY3NzSG9va3MubWFyZ2luUmlnaHQ9VWEobC5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/UGEoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sU2EsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG4uY3NzSG9va3MubWFyZ2luTGVmdD1VYShsLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihhLGIpe3JldHVybiBiPyhwYXJzZUZsb2F0KFNhKGEsIm1hcmdpbkxlZnQiKSl8fChuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKT9hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtUGEoYSx7Cm1hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSk6MCkpKyJweCI6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxOYS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1kYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPVJhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtXKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gZ2IoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGdiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1nYixnYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdiLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fG4uZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWdiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpnYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1nYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmdiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGdiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1nYi5wcm90b3R5cGUsZ2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsIT1hLmVsZW1bYS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/YS5lbGVtW2EucHJvcF06KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sZ2IucHJvcEhvb2tzLnNjcm9sbFRvcD1nYi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LG4uZng9Z2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBoYixpYixqYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sa2I9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBsYigpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtoYj12b2lkIDB9KSxoYj1uLm5vdygpfWZ1bmN0aW9uIG1iKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VltlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIG5iKGEsYixjKXtmb3IodmFyIGQsZT0ocWIudHdlZW5lcnNbYl18fFtdKS5jb25jYXQocWIudHdlZW5lcnNbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gb2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbT10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVyhhKSxyPW4uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG0uYWx3YXlzKGZ1bmN0aW9uKCl7bS5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP24uX2RhdGEoYSwib2xkZGlzcGxheSIpfHxNYShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09ayYmIm5vbmUiPT09bi5jc3MoYSwiZmxvYXQiKSYmKGwuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1NYShhLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLnNocmlua1dyYXBCbG9ja3MoKXx8bS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGpiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChvKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP01hKGEubm9kZU5hbWUpOmopJiYocC5kaXNwbGF5PWopO2Vsc2V7cj8iaGlkZGVuImluIHImJihxPXIuaGlkZGVuKTpyPW4uX2RhdGEoYSwiZnhzaG93Iix7fSksZiYmKHIuaGlkZGVuPSFxKSxxP24oYSkuc2hvdygpOm0uZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbS5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7bi5fcmVtb3ZlRGF0YShhLCJmeHNob3ciKTtmb3IoYiBpbiBvKW4uc3R5bGUoYSxiLG9bYl0pfSk7Zm9yKGQgaW4gbylnPW5iKHE/cltkXTowLGQsbSksZCBpbiByfHwocltkXT1nLnN0YXJ0LHEmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gcGIoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1uLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG4uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bi5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBxYihhLGIsYyl7dmFyIGQsZSxmPTAsZz1xYi5wcmVmaWx0ZXJzLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPWhifHxsYigpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpuLmVhc2luZy5fZGVmYXVsdH0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOmhifHxsYigpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj8oaC5ub3RpZnlXaXRoKGEsW2osMSwwXSksaC5yZXNvbHZlV2l0aChhLFtqLGJdKSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihwYihrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9cWIucHJlZmlsdGVyc1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIG4uaXNGdW5jdGlvbihkLnN0b3ApJiYobi5fcXVldWVIb29rcyhqLmVsZW0sai5vcHRzLnF1ZXVlKS5zdG9wPW4ucHJveHkoZC5zdG9wLGQpKSxkO3JldHVybiBuLm1hcChrLG5iLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQocWIse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpO3JldHVybiBYKGMuZWxlbSxhLFUuZXhlYyhiKSxjKSxjfV19LHR3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtuLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEubWF0Y2goRyk7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLHFiLnR3ZWVuZXJzW2NdPXFiLnR3ZWVuZXJzW2NdfHxbXSxxYi50d2VlbmVyc1tjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXJzOltvYl0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9xYi5wcmVmaWx0ZXJzLnVuc2hpZnQoYSk6cWIucHJlZmlsdGVycy5wdXNoKGEpfX0pLG4uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbi5meC5zcGVlZHM/bi5meC5zcGVlZHNbZC5kdXJhdGlvbl06bi5meC5zcGVlZHMuX2RlZmF1bHQsbnVsbCE9ZC5xdWV1ZSYmZC5xdWV1ZSE9PSEwfHwoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtuLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm4uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxuLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihXKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9cWIodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8bi5fZGF0YSh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW4udGltZXJzLGc9bi5fZGF0YSh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZrYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyFiJiZjfHxuLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1uLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobWIoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOm1iKCJzaG93Iiksc2xpZGVVcDptYigiaGlkZSIpLHNsaWRlVG9nZ2xlOm1iKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW4udGltZXJzLGM9MDtmb3IoaGI9bi5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxuLmZ4LnN0b3AoKSxoYj12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtpYnx8KGliPWEuc2V0SW50ZXJ2YWwobi5meC50aWNrLG4uZnguaW50ZXJ2YWwpKX0sbi5meC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhckludGVydmFsKGliKSxpYj1udWxsfSxuLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxuLmZuLmRlbGF5PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9bi5meD9uLmZ4LnNwZWVkc1tiXXx8YjpiLGM9Y3x8ImZ4Iix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYSxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGY9ZS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxjLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxiLnNldEF0dHJpYnV0ZSgidHlwZSIsImNoZWNrYm94IiksYy5hcHBlbmRDaGlsZChiKSxhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxhLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGwuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWMuY2xhc3NOYW1lLGwuc3R5bGU9L3RvcC8udGVzdChhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksbC5ocmVmTm9ybWFsaXplZD0iL2EiPT09YS5nZXRBdHRyaWJ1dGUoImhyZWYiKSxsLmNoZWNrT249ISFiLnZhbHVlLGwub3B0U2VsZWN0ZWQ9Zi5zZWxlY3RlZCxsLmVuY3R5cGU9ISFkLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGUuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxlZD0hZi5kaXNhYmxlZCxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxsLmlucHV0PSIiPT09Yi5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYi52YWx1ZT0idCIsYi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGwucmFkaW9WYWx1ZT0idCI9PT1iLnZhbHVlfSgpO3ZhciByYj0vXHIvZyxzYj0vW1x4MjBcdFxyXG5cZl0rL2c7bi5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPW4uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxuKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6bi5pc0FycmF5KGUpJiYoZT1uLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOmErIiJ9KSksYj1uLnZhbEhvb2tzW3RoaXMudHlwZV18fG4udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYic2V0ImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSwidmFsdWUiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1uLnZhbEhvb2tzW2UudHlwZV18fG4udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYiZ2V0ImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsInZhbHVlIikpP2M6KGM9ZS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGM/Yy5yZXBsYWNlKHJiLCIiKTpudWxsPT1jPyIiOmMpfX19KSxuLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW4uZmluZC5hdHRyKGEsInZhbHVlIik7cmV0dXJuIG51bGwhPWI/YjpuLnRyaW0obi50ZXh0KGEpKS5yZXBsYWNlKHNiLCIgIil9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwoYy5zZWxlY3RlZHx8aT09PWUpJiYobC5vcHREaXNhYmxlZD8hYy5kaXNhYmxlZDpudWxsPT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpJiYoIWMucGFyZW50Tm9kZS5kaXNhYmxlZHx8IW4ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0paWYoZD1lW2ddLG4uaW5BcnJheShuLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpdHJ5e2Quc2VsZWN0ZWQ9Yz0hMH1jYXRjaChoKXtkLnNjcm9sbEhlaWdodH1lbHNlIGQuc2VsZWN0ZWQ9ITE7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGV9fX19KSxuLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtuLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5pc0FycmF5KGIpP2EuY2hlY2tlZD1uLmluQXJyYXkobihhKS52YWwoKSxiKT4tMTp2b2lkIDB9fSxsLmNoZWNrT258fChuLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIHRiLHViLHZiPW4uZXhwci5hdHRySGFuZGxlLHdiPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2kseGI9bC5nZXRTZXRBdHRyaWJ1dGUseWI9bC5pbnB1dDtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBZKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYS5nZXRBdHRyaWJ1dGU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxlPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChiKT91Yjp0YikpLHZvaWQgMCE9PWM/bnVsbD09PWM/dm9pZCBuLnJlbW92ZUF0dHIoYSxiKTplJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOihkPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZD92b2lkIDA6ZCkpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFsLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKEcpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKXdoaWxlKGM9ZltlKytdKWQ9bi5wcm9wRml4W2NdfHxjLG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYyk/eWImJnhifHwhd2IudGVzdChjKT9hW2RdPSExOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtkXT0hMTpuLmF0dHIoYSxjLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh4Yj9jOmQpfX0pLHViPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6eWImJnhifHwhd2IudGVzdChjKT9hLnNldEF0dHJpYnV0ZSgheGImJm4ucHJvcEZpeFtjXXx8YyxjKTphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbY109ITAsY319LG4uZWFjaChuLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPXZiW2JdfHxuLmZpbmQuYXR0cjt5YiYmeGJ8fCF3Yi50ZXN0KGIpP3ZiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj12YltiXSx2YltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsdmJbYl09ZiksZX06dmJbYl09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYildP2IudG9Mb3dlckNhc2UoKTpudWxsfX0pLHliJiZ4Ynx8KG4uYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLm5vZGVOYW1lKGEsImlucHV0Iik/dm9pZChhLmRlZmF1bHRWYWx1ZT1iKTp0YiYmdGIuc2V0KGEsYixjKX19KSx4Ynx8KHRiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZHx8YS5zZXRBdHRyaWJ1dGVOb2RlKGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShjKSksZC52YWx1ZT1iKz0iIiwidmFsdWUiPT09Y3x8Yj09PWEuZ2V0QXR0cmlidXRlKGMpP2I6dm9pZCAwfX0sdmIuaWQ9dmIubmFtZT12Yi5jb29yZHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiYiIiE9PWQudmFsdWU/ZC52YWx1ZTpudWxsfSxuLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9jLnZhbHVlOnZvaWQgMH0sc2V0OnRiLnNldH0sbi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RiLnNldChhLCIiPT09Yj8hMTpiLGMpfX0sbi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe24uYXR0ckhvb2tzW2JdPXtzZXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4iIj09PWM/KGEuc2V0QXR0cmlidXRlKGIsImF1dG8iKSxjKTp2b2lkIDB9fX0pKSxsLnN0eWxlfHwobi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fHx2b2lkIDB9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KTt2YXIgemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksQWI9L14oPzphfGFyZWEpJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bi5wcm9wRml4W2FdfHxhLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPXZvaWQgMCxkZWxldGUgdGhpc1thXX1jYXRjaChiKXt9fSl9fSksbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1uLnByb3BGaXhbYl18fGIsZT1uLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTp6Yi50ZXN0KGEubm9kZU5hbWUpfHxBYi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsLmhyZWZOb3JtYWxpemVkfHxuLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXtuLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bi5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGwuZW5jdHlwZXx8KG4ucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpO3ZhciBCYj0vW1x0XHJcblxmXS9nO2Z1bmN0aW9uIENiKGEpe3JldHVybiBuLmF0dHIoYSwiY2xhc3MiKXx8IiJ9bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsQ2IodGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZigiICIrZisiICIpPDAmJihkKz1mKyIgIik7aD1uLnRyaW0oZCksZSE9PWgmJm4uYXR0cihjLCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLENiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZisiICIpPi0xKWQ9ZC5yZXBsYWNlKCIgIitmKyIgIiwiICIpO2g9bi50cmltKGQpLGUhPT1oJiZuLmF0dHIoYywiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6bi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsQ2IodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNoKEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPUNiKHRoaXMpLGImJm4uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsYiksbi5hdHRyKHRoaXMsImNsYXNzIixifHxhPT09ITE/IiI6bi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrQ2IoYykrIiAiKS5yZXBsYWNlKEJiLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIERiPWEubG9jYXRpb24sRWI9bi5ub3coKSxGYj0vXD8vLEdiPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7bi5wYXJzZUpTT049ZnVuY3Rpb24oYil7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKyIiKTt2YXIgYyxkPW51bGwsZT1uLnRyaW0oYisiIik7cmV0dXJuIGUmJiFuLnRyaW0oZS5yZXBsYWNlKEdiLGZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBjJiZiJiYoZD0wKSwwPT09ZD9hOihjPWV8fGIsZCs9IWYtIWUsIiIpfSkpP0Z1bmN0aW9uKCJyZXR1cm4gIitlKSgpOm4uZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0sbi5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYyxkO2lmKCFifHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIG51bGw7dHJ5e2EuRE9NUGFyc2VyPyhkPW5ldyBhLkRPTVBhcnNlcixjPWQucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bi5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIEhiPS8jLiokLyxJYj0vKFs/Jl0pXz1bXiZdKi8sSmI9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxLYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxMYj0vXig/OkdFVHxIRUFEKSQvLE1iPS9eXC9cLy8sTmI9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sT2I9e30sUGI9e30sUWI9IiovIi5jb25jYXQoIioiKSxSYj1EYi5ocmVmLFNiPU5iLmV4ZWMoUmIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIFRiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gVWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09UGI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBWYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZuLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gWGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6UmIsdHlwZToiR0VUIixpc0xvY2FsOktiLnRlc3QoU2JbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6UWIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6bi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9WYihWYihhLG4uYWpheFNldHRpbmdzKSxiKTpWYihuLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpUYihPYiksYWpheFRyYW5zcG9ydDpUYihQYiksYWpheDpmdW5jdGlvbihiLGMpeyJvYmplY3QiPT10eXBlb2YgYiYmKGM9YixiPXZvaWQgMCksYz1jfHx7fTt2YXIgZCxlLGYsZyxoLGksaixrLGw9bi5hamF4U2V0dXAoe30sYyksbT1sLmNvbnRleHR8fGwsbz1sLmNvbnRleHQmJihtLm5vZGVUeXBlfHxtLmpxdWVyeSk/bihtKTpuLmV2ZW50LHA9bi5EZWZlcnJlZCgpLHE9bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHM9e30sdD17fSx1PTAsdj0iY2FuY2VsZWQiLHc9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dSl7aWYoIWspe2s9e307d2hpbGUoYj1KYi5leGVjKGcpKWtbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9a1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT11P2c6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdXx8KGE9dFtjXT10W2NdfHxhLHNbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdXx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dSlmb3IoYiBpbiBhKXJbYl09W3JbYl0sYVtiXV07ZWxzZSB3LmFsd2F5cyhhW3cuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHY7cmV0dXJuIGomJmouYWJvcnQoYikseSgwLGIpLHRoaXN9fTtpZihwLnByb21pc2UodykuY29tcGxldGU9cS5hZGQsdy5zdWNjZXNzPXcuZG9uZSx3LmVycm9yPXcuZmFpbCxsLnVybD0oKGJ8fGwudXJsfHxSYikrIiIpLnJlcGxhY2UoSGIsIiIpLnJlcGxhY2UoTWIsU2JbMV0rIi8vIiksbC50eXBlPWMubWV0aG9kfHxjLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9bi50cmltKGwuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8WyIiXSxudWxsPT1sLmNyb3NzRG9tYWluJiYoZD1OYi5leGVjKGwudXJsLnRvTG93ZXJDYXNlKCkpLGwuY3Jvc3NEb21haW49ISghZHx8ZFsxXT09PVNiWzFdJiZkWzJdPT09U2JbMl0mJihkWzNdfHwoImh0dHA6Ij09PWRbMV0/IjgwIjoiNDQzIikpPT09KFNiWzNdfHwoImh0dHA6Ij09PVNiWzFdPyI4MCI6IjQ0MyIpKSkpLGwuZGF0YSYmbC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBsLmRhdGEmJihsLmRhdGE9bi5wYXJhbShsLmRhdGEsbC50cmFkaXRpb25hbCkpLFViKE9iLGwsYyx3KSwyPT09dSlyZXR1cm4gdztpPW4uZXZlbnQmJmwuZ2xvYmFsLGkmJjA9PT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGwudHlwZT1sLnR5cGUudG9VcHBlckNhc2UoKSxsLmhhc0NvbnRlbnQ9IUxiLnRlc3QobC50eXBlKSxmPWwudXJsLGwuaGFzQ29udGVudHx8KGwuZGF0YSYmKGY9bC51cmwrPShGYi50ZXN0KGYpPyImIjoiPyIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1JYi50ZXN0KGYpP2YucmVwbGFjZShJYiwiJDFfPSIrRWIrKyk6ZisoRmIudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0ViKyspKSxsLmlmTW9kaWZpZWQmJihuLmxhc3RNb2RpZmllZFtmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZl0pLG4uZXRhZ1tmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZl0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJncuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSx3LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsbC5kYXRhVHlwZXNbMF0mJmwuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0/bC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXSsoIioiIT09bC5kYXRhVHlwZXNbMF0/IiwgIitRYisiOyBxPTAuMDEiOiIiKTpsLmFjY2VwdHNbIioiXSk7Zm9yKGUgaW4gbC5oZWFkZXJzKXcuc2V0UmVxdWVzdEhlYWRlcihlLGwuaGVhZGVyc1tlXSk7aWYobC5iZWZvcmVTZW5kJiYobC5iZWZvcmVTZW5kLmNhbGwobSx3LGwpPT09ITF8fDI9PT11KSlyZXR1cm4gdy5hYm9ydCgpO3Y9ImFib3J0Ijtmb3IoZSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl3W2VdKGxbZV0pO2lmKGo9VWIoUGIsbCxjLHcpKXtpZih3LnJlYWR5U3RhdGU9MSxpJiZvLnRyaWdnZXIoImFqYXhTZW5kIixbdyxsXSksMj09PXUpcmV0dXJuIHc7bC5hc3luYyYmbC50aW1lb3V0PjAmJihoPWEuc2V0VGltZW91dChmdW5jdGlvbigpe3cuYWJvcnQoInRpbWVvdXQiKX0sbC50aW1lb3V0KSk7dHJ5e3U9MSxqLnNlbmQocyx5KX1jYXRjaCh4KXtpZighKDI+dSkpdGhyb3cgeDt5KC0xLHgpfX1lbHNlIHkoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHkoYixjLGQsZSl7dmFyIGsscyx0LHYseCx5PWM7MiE9PXUmJih1PTIsaCYmYS5jbGVhclRpbWVvdXQoaCksaj12b2lkIDAsZz1lfHwiIix3LnJlYWR5U3RhdGU9Yj4wPzQ6MCxrPWI+PTIwMCYmMzAwPmJ8fDMwND09PWIsZCYmKHY9V2IobCx3LGQpKSx2PVhiKGwsdix3LGspLGs/KGwuaWZNb2RpZmllZCYmKHg9dy5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHgmJihuLmxhc3RNb2RpZmllZFtmXT14KSx4PXcuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx4JiYobi5ldGFnW2ZdPXgpKSwyMDQ9PT1ifHwiSEVBRCI9PT1sLnR5cGU/eT0ibm9jb250ZW50IjozMDQ9PT1iP3k9Im5vdG1vZGlmaWVkIjooeT12LnN0YXRlLHM9di5kYXRhLHQ9di5lcnJvcixrPSF0KSk6KHQ9eSwhYiYmeXx8KHk9ImVycm9yIiwwPmImJihiPTApKSksdy5zdGF0dXM9Yix3LnN0YXR1c1RleHQ9KGN8fHkpKyIiLGs/cC5yZXNvbHZlV2l0aChtLFtzLHksd10pOnAucmVqZWN0V2l0aChtLFt3LHksdF0pLHcuc3RhdHVzQ29kZShyKSxyPXZvaWQgMCxpJiZvLnRyaWdnZXIoaz8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt3LGwsaz9zOnRdKSxxLmZpcmVXaXRoKG0sW3cseV0pLGkmJihvLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3csbF0pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB3fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheChuLmV4dGVuZCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0sbi5pc1BsYWluT2JqZWN0KGEpJiZhKSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmMT09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxuLmNzcyhhLCJkaXNwbGF5Iil9ZnVuY3Rpb24gWmIoYSl7aWYoIW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50fHxkLGEpKXJldHVybiEwO3doaWxlKGEmJjE9PT1hLm5vZGVUeXBlKXtpZigibm9uZSI9PT1ZYihhKXx8ImhpZGRlbiI9PT1hLnR5cGUpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9bi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBsLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpP2Eub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wJiYhYS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDpaYihhKX0sbi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgJGI9LyUyMC9nLF9iPS9cW1xdJC8sYWM9L1xyP1xuL2csYmM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGNjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBkYyhhLGIsYyxkKXt2YXIgZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxfYi50ZXN0KGEpP2QoYSxlKTpkYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpZGMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlkYyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSgkYiwiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmY2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIWJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFaLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGFjLCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPXZvaWQgMCE9PWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTG9jYWw/aWMoKTpkLmRvY3VtZW50TW9kZT44P2hjKCk6L14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmaGMoKXx8aWMoKX06aGM7dmFyIGVjPTAsZmM9e30sZ2M9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGZjKWZjW2FdKHZvaWQgMCwhMCl9KSxsLmNvcnM9ISFnYyYmIndpdGhDcmVkZW50aWFscyJpbiBnYyxnYz1sLmFqYXg9ISFnYyxnYyYmbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGIpe2lmKCFiLmNyb3NzRG9tYWlufHxsLmNvcnMpe3ZhciBjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7dmFyIGYsZz1iLnhocigpLGg9KytlYztpZihnLm9wZW4oYi50eXBlLGIudXJsLGIuYXN5bmMsYi51c2VybmFtZSxiLnBhc3N3b3JkKSxiLnhockZpZWxkcylmb3IoZiBpbiBiLnhockZpZWxkcylnW2ZdPWIueGhyRmllbGRzW2ZdO2IubWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlKGIubWltZVR5cGUpLGIuY3Jvc3NEb21haW58fGRbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGRbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZiBpbiBkKXZvaWQgMCE9PWRbZl0mJmcuc2V0UmVxdWVzdEhlYWRlcihmLGRbZl0rIiIpO2cuc2VuZChiLmhhc0NvbnRlbnQmJmIuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihhLGQpe3ZhciBmLGksajtpZihjJiYoZHx8ND09PWcucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIGZjW2hdLGM9dm9pZCAwLGcub25yZWFkeXN0YXRlY2hhbmdlPW4ubm9vcCxkKTQhPT1nLnJlYWR5U3RhdGUmJmcuYWJvcnQoKTtlbHNle2o9e30sZj1nLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGcucmVzcG9uc2VUZXh0JiYoai50ZXh0PWcucmVzcG9uc2VUZXh0KTt0cnl7aT1nLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1mfHwhYi5pc0xvY2FsfHxiLmNyb3NzRG9tYWluPzEyMjM9PT1mJiYoZj0yMDQpOmY9ai50ZXh0PzIwMDo0MDR9aiYmZShmLGksaixnLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYi5hc3luYz80PT09Zy5yZWFkeVN0YXRlP2Euc2V0VGltZW91dChjKTpnLm9ucmVhZHlzdGF0ZWNoYW5nZT1mY1toXT1jOmMoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKHZvaWQgMCwhMCl9fX19KTtmdW5jdGlvbiBoYygpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBpYygpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fW4uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPWQuaGVhZHx8bigiaGVhZCIpWzBdfHxkLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe2I9ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxmKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgamM9W10sa2M9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9amMucG9wKCl8fG4uZXhwYW5kbysiXyIrRWIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGtjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYma2MudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGtjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShGYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1mP24oYSkucmVtb3ZlUHJvcChlKTphW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssamMucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGQ7dmFyIGU9eC5leGVjKGEpLGY9IWMmJltdO3JldHVybiBlP1tiLmNyZWF0ZUVsZW1lbnQoZVsxXSldOihlPWphKFthXSxiLGYpLGYmJmYubGVuZ3RoJiZuKGYpLnJlbW92ZSgpLG4ubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9O3ZhciBsYz1uLmZuLmxvYWQ7bi5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJmxjKXJldHVybiBsYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigiICIpO3JldHVybiBoPi0xJiYoZD1uLnRyaW0oYS5zbGljZShoLGEubGVuZ3RoKSksYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxkaXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gbWMoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9uIiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZuLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLG4uZXh0ZW5kKHt9LGgpKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixlKT8oInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1tYyhmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3Atbi5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW4uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxRYX0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO24uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9bWMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bihmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bihmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT1VYShsLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1TYShhLGIpLE9hLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24uZWFjaCh7CnBhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBuYz1hLmpRdWVyeSxvYz1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1vYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9bmMpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pOwo="></script>
<link href="data:text/css,%2Eleaflet%2Dpane%2C%2Eleaflet%2Dtile%2C%2Eleaflet%2Dmarker%2Dicon%2C%2Eleaflet%2Dmarker%2Dshadow%2C%2Eleaflet%2Dtile%2Dcontainer%2C%2Eleaflet%2Dpane%20%3E%20svg%2C%2Eleaflet%2Dpane%20%3E%20canvas%2C%2Eleaflet%2Dzoom%2Dbox%2C%2Eleaflet%2Dimage%2Dlayer%2C%2Eleaflet%2Dlayer%20%7Bposition%3A%20absolute%3Bleft%3A%200%3Btop%3A%200%3B%7D%2Eleaflet%2Dcontainer%20%7Boverflow%3A%20hidden%3B%7D%2Eleaflet%2Dtile%2C%2Eleaflet%2Dmarker%2Dicon%2C%2Eleaflet%2Dmarker%2Dshadow%20%7B%2Dwebkit%2Duser%2Dselect%3A%20none%3B%2Dmoz%2Duser%2Dselect%3A%20none%3Buser%2Dselect%3A%20none%3B%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%7D%2Eleaflet%2Dsafari%20%2Eleaflet%2Dtile%20%7Bimage%2Drendering%3A%20%2Dwebkit%2Doptimize%2Dcontrast%3B%7D%2Eleaflet%2Dsafari%20%2Eleaflet%2Dtile%2Dcontainer%20%7Bwidth%3A%201600px%3Bheight%3A%201600px%3B%2Dwebkit%2Dtransform%2Dorigin%3A%200%200%3B%7D%2Eleaflet%2Dmarker%2Dicon%2C%2Eleaflet%2Dmarker%2Dshadow%20%7Bdisplay%3A%20block%3B%7D%2Eleaflet%2Dcontainer%20%2Eleaflet%2Doverlay%2Dpane%20svg%2C%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dmarker%2Dpane%20img%2C%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dshadow%2Dpane%20img%2C%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dtile%2Dpane%20img%2C%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7Bmax%2Dwidth%3A%20none%20%21important%3Bmax%2Dheight%3A%20none%20%21important%3B%7D%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Dzoom%20%7B%2Dms%2Dtouch%2Daction%3A%20pan%2Dx%20pan%2Dy%3Btouch%2Daction%3A%20pan%2Dx%20pan%2Dy%3B%7D%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Ddrag%20%7B%2Dms%2Dtouch%2Daction%3A%20pinch%2Dzoom%3Btouch%2Daction%3A%20none%3Btouch%2Daction%3A%20pinch%2Dzoom%3B%7D%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Ddrag%2Eleaflet%2Dtouch%2Dzoom%20%7B%2Dms%2Dtouch%2Daction%3A%20none%3Btouch%2Daction%3A%20none%3B%7D%2Eleaflet%2Dcontainer%20%7B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3A%20transparent%3B%7D%2Eleaflet%2Dcontainer%20a%20%7B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3A%20rgba%2851%2C%20181%2C%20229%2C%200%2E4%29%3B%7D%2Eleaflet%2Dtile%20%7Bfilter%3A%20inherit%3Bvisibility%3A%20hidden%3B%7D%2Eleaflet%2Dtile%2Dloaded%20%7Bvisibility%3A%20inherit%3B%7D%2Eleaflet%2Dzoom%2Dbox%20%7Bwidth%3A%200%3Bheight%3A%200%3B%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3Bbox%2Dsizing%3A%20border%2Dbox%3Bz%2Dindex%3A%20800%3B%7D%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%2Dmoz%2Duser%2Dselect%3A%20none%3B%7D%2Eleaflet%2Dpane%20%7B%20z%2Dindex%3A%20400%3B%20%7D%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%20200%3B%20%7D%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%20400%3B%20%7D%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%20500%3B%20%7D%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%20600%3B%20%7D%2Eleaflet%2Dtooltip%2Dpane%20%7B%20z%2Dindex%3A%20650%3B%20%7D%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%20700%3B%20%7D%2Eleaflet%2Dmap%2Dpane%20canvas%20%7B%20z%2Dindex%3A%20100%3B%20%7D%2Eleaflet%2Dmap%2Dpane%20svg%20%7B%20z%2Dindex%3A%20200%3B%20%7D%2Eleaflet%2Dvml%2Dshape%20%7Bwidth%3A%201px%3Bheight%3A%201px%3B%7D%2Elvml%20%7Bbehavior%3A%20url%28%23default%23VML%29%3Bdisplay%3A%20inline%2Dblock%3Bposition%3A%20absolute%3B%7D%2Eleaflet%2Dcontrol%20%7Bposition%3A%20relative%3Bz%2Dindex%3A%20800%3Bpointer%2Devents%3A%20visiblePainted%3B%20pointer%2Devents%3A%20auto%3B%7D%2Eleaflet%2Dtop%2C%2Eleaflet%2Dbottom%20%7Bposition%3A%20absolute%3Bz%2Dindex%3A%201000%3Bpointer%2Devents%3A%20none%3B%7D%2Eleaflet%2Dtop%20%7Btop%3A%200%3B%7D%2Eleaflet%2Dright%20%7Bright%3A%200%3B%7D%2Eleaflet%2Dbottom%20%7Bbottom%3A%200%3B%7D%2Eleaflet%2Dleft%20%7Bleft%3A%200%3B%7D%2Eleaflet%2Dcontrol%20%7Bfloat%3A%20left%3Bclear%3A%20both%3B%7D%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7Bfloat%3A%20right%3B%7D%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7Bmargin%2Dtop%3A%2010px%3B%7D%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7Bmargin%2Dbottom%3A%2010px%3B%7D%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7Bmargin%2Dleft%3A%2010px%3B%7D%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7Bmargin%2Dright%3A%2010px%3B%7D%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%20%7Bwill%2Dchange%3A%20opacity%3B%7D%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7Bopacity%3A%200%3B%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3Btransition%3A%20opacity%200%2E2s%20linear%3B%7D%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7Bopacity%3A%201%3B%7D%2Eleaflet%2Dzoom%2Danimated%20%7B%2Dwebkit%2Dtransform%2Dorigin%3A%200%200%3B%2Dms%2Dtransform%2Dorigin%3A%200%200%3Btransform%2Dorigin%3A%200%200%3B%7D%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7Bwill%2Dchange%3A%20transform%3B%7D%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3Btransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%7D%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%20%7B%2Dwebkit%2Dtransition%3A%20none%3B%2Dmoz%2Dtransition%3A%20none%3B%2Do%2Dtransition%3A%20none%3Btransition%3A%20none%3B%7D%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7Bvisibility%3A%20hidden%3B%7D%2Eleaflet%2Dinteractive%20%7Bcursor%3A%20pointer%3B%7D%2Eleaflet%2Dgrab%20%7Bcursor%3A%20%2Dwebkit%2Dgrab%3Bcursor%3A%20%2Dmoz%2Dgrab%3B%7D%2Eleaflet%2Dcrosshair%2C%2Eleaflet%2Dcrosshair%20%2Eleaflet%2Dinteractive%20%7Bcursor%3A%20crosshair%3B%7D%2Eleaflet%2Dpopup%2Dpane%2C%2Eleaflet%2Dcontrol%20%7Bcursor%3A%20auto%3B%7D%2Eleaflet%2Ddragging%20%2Eleaflet%2Dgrab%2C%2Eleaflet%2Ddragging%20%2Eleaflet%2Dgrab%20%2Eleaflet%2Dinteractive%2C%2Eleaflet%2Ddragging%20%2Eleaflet%2Dmarker%2Ddraggable%20%7Bcursor%3A%20move%3Bcursor%3A%20%2Dwebkit%2Dgrabbing%3Bcursor%3A%20%2Dmoz%2Dgrabbing%3B%7D%2Eleaflet%2Dmarker%2Dicon%2C%2Eleaflet%2Dmarker%2Dshadow%2C%2Eleaflet%2Dimage%2Dlayer%2C%2Eleaflet%2Dpane%20%3E%20svg%20path%2C%2Eleaflet%2Dtile%2Dcontainer%20%7Bpointer%2Devents%3A%20none%3B%7D%2Eleaflet%2Dmarker%2Dicon%2Eleaflet%2Dinteractive%2C%2Eleaflet%2Dimage%2Dlayer%2Eleaflet%2Dinteractive%2C%2Eleaflet%2Dpane%20%3E%20svg%20path%2Eleaflet%2Dinteractive%20%7Bpointer%2Devents%3A%20visiblePainted%3B%20pointer%2Devents%3A%20auto%3B%7D%2Eleaflet%2Dcontainer%20%7Bbackground%3A%20%23ddd%3Boutline%3A%200%3B%7D%2Eleaflet%2Dcontainer%20a%20%7Bcolor%3A%20%230078A8%3B%7D%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7Boutline%3A%202px%20solid%20orange%3B%7D%2Eleaflet%2Dzoom%2Dbox%20%7Bborder%3A%202px%20dotted%20%2338f%3Bbackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%7D%2Eleaflet%2Dcontainer%20%7Bfont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%7D%2Eleaflet%2Dbar%20%7Bbox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3Bborder%2Dradius%3A%204px%3B%7D%2Eleaflet%2Dbar%20a%2C%2Eleaflet%2Dbar%20a%3Ahover%20%7Bbackground%2Dcolor%3A%20%23fff%3Bborder%2Dbottom%3A%201px%20solid%20%23ccc%3Bwidth%3A%2026px%3Bheight%3A%2026px%3Bline%2Dheight%3A%2026px%3Bdisplay%3A%20block%3Btext%2Dalign%3A%20center%3Btext%2Ddecoration%3A%20none%3Bcolor%3A%20black%3B%7D%2Eleaflet%2Dbar%20a%2C%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7Bbackground%2Dposition%3A%2050%25%2050%25%3Bbackground%2Drepeat%3A%20no%2Drepeat%3Bdisplay%3A%20block%3B%7D%2Eleaflet%2Dbar%20a%3Ahover%20%7Bbackground%2Dcolor%3A%20%23f4f4f4%3B%7D%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7Bborder%2Dtop%2Dleft%2Dradius%3A%204px%3Bborder%2Dtop%2Dright%2Dradius%3A%204px%3B%7D%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7Bborder%2Dbottom%2Dleft%2Dradius%3A%204px%3Bborder%2Dbottom%2Dright%2Dradius%3A%204px%3Bborder%2Dbottom%3A%20none%3B%7D%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7Bcursor%3A%20default%3Bbackground%2Dcolor%3A%20%23f4f4f4%3Bcolor%3A%20%23bbb%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7Bwidth%3A%2030px%3Bheight%3A%2030px%3Bline%2Dheight%3A%2030px%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7Bborder%2Dtop%2Dleft%2Dradius%3A%202px%3Bborder%2Dtop%2Dright%2Dradius%3A%202px%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7Bborder%2Dbottom%2Dleft%2Dradius%3A%202px%3Bborder%2Dbottom%2Dright%2Dradius%3A%202px%3B%7D%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7Bfont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3Btext%2Dindent%3A%201px%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%20%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7Bfont%2Dsize%3A%2022px%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%20%7Bbox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3Bbackground%3A%20%23fff%3Bborder%2Dradius%3A%205px%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7Bbackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc%2BqTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6%2Fee%2FXeCQ4D3ykPtL5tHno4n0d%2Fh3%2BxfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi%2FIOB0v7rVC7q45Q3Gr5K6jt%2B3Gl5nCoDD4MtO%2Bj96Wu8atmhGqcNGHObuf8OM%2Fx3AMx38%2B4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp%2BPfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a%2FPG2yutpS%2FVol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6%2FJlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH%2BcmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS%2BTzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay%2BZ%2BZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs%2BW080max1hFCarCfV%2BC1KATwcnvE9gRRuMP2prdbWGowm1KB1y%2BzwMMENkM755cJ2yPDtqhTI6ED1M%2F82yIDtC%2F4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS%2F7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC%29%3Bwidth%3A%2036px%3Bheight%3A%2036px%3B%7D%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7Bbackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP%2BWOmcuhciVnmHVQcJnp7DFvScowZorad%2F%2BV%2FfVzMdMT2g9Cv9guXGv%2F7pYOrXh2U%2BRRR3dSd9JRx6bIFc%2FekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA%2BCNjT%2FIfff%2B%2FkDk2u%2Fw%2F33%2FIeCMOSaWZ4glosqT3DNnNZQ7Cs58%2F3Ce5HL78iZH%2FvKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z%2FPOLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty%2BvF0%2BY2up9d3wwijfjZbabqm%2F3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm%2FayYjHW5%2Fh7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE%2BXSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm%2BfPu3fo5%2F3v61RMCO9Jx2EEYYhb0rmNQMX%2Fvm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA%2Fdpv%2Bon9Shox52WFnx0KY8onHayrJzm87i5h9xGw%2Ftfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3%2FIR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ%2Brroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao%2F6tWWhuuOM4SAK4EI4QmFHA%2BSEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm%2B0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1%2BTBEpF68d%2BDHR6IOWVv2BECtxo46hOFUBd%2FAPU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo%2FUEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc%2F0PstHHcfEdQ%2BUAAAAASUVORK5CYII%3D%29%3Bbackground%2Dsize%3A%2026px%2026px%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7Bwidth%3A%2044px%3Bheight%3A%2044px%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7Bdisplay%3A%20none%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7Bdisplay%3A%20block%3Bposition%3A%20relative%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7Bpadding%3A%206px%2010px%206px%206px%3Bcolor%3A%20%23333%3Bbackground%3A%20%23fff%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dscrollbar%20%7Boverflow%2Dy%3A%20scroll%3Boverflow%2Dx%3A%20hidden%3Bpadding%2Dright%3A%205px%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7Bmargin%2Dtop%3A%202px%3Bposition%3A%20relative%3Btop%3A%201px%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7Bdisplay%3A%20block%3B%7D%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7Bheight%3A%200%3Bborder%2Dtop%3A%201px%20solid%20%23ddd%3Bmargin%3A%205px%20%2D10px%205px%20%2D6px%3B%7D%2Eleaflet%2Ddefault%2Dicon%2Dpath%20%7Bbackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq%2FbXZtrp%2FlWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq%2FRBpykd8oZUb%2FkaJutow8r1aP9II0WmLKLIsJyv1w%2Fkqw9Ch2MYdB%2B%2B12Onxee%2FQMwvf4%2FDk%2FLfp%2Fi4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg%2FFm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B%2BOadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7%2FXZKNH%2B9%2BhBLOHYozuKQPxyMPUKkrX%2FK0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz%2BbXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U%2Bw7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue%2FuDivd3fkWRbS6%2FIA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7%2F6U%2BqH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts%2BHEa73u6dT3FNWwflY86eMHPk%2BYu%2Bi6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU%2BuWDD7zg54mz5%2F2BSnizi9T1Dg4QQXLToGNCkb6tb1NU%2BQAlGr1%2B%2BeADrzhn%2Fu8Q2YZhQVlZ5%2BCAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz%2Bgwh%2BoHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi%2B%2BWDL1g%2FeEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2%2F0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX%2BJ0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60%2B0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2%2B%2BDYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL%2BF1%2BwkdZ2TBOW2gIF88PBTzD%2FgpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF%2F2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC%2BadRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk%2F4kggu40ZTvIEm5g24qtU4KjBrx%2FBTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF%2B0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH%2BUUA7%2BnG6mdG%2FPu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP%2B64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR%2FibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ%2BKiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf%2B%2FFrIjweHQS4%2FpduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON%2BdfNbM%2BGgIwYdwAAAAASUVORK5CYII%3D%29%3B%7D%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7Bbackground%3A%20%23fff%3Bbackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3Bmargin%3A%200%3B%7D%2Eleaflet%2Dcontrol%2Dattribution%2C%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7Bpadding%3A%200%205px%3Bcolor%3A%20%23333%3B%7D%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7Btext%2Ddecoration%3A%20none%3B%7D%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7Btext%2Ddecoration%3A%20underline%3B%7D%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7Bfont%2Dsize%3A%2011px%3B%7D%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7Bmargin%2Dleft%3A%205px%3B%7D%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7Bmargin%2Dbottom%3A%205px%3B%7D%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7Bborder%3A%202px%20solid%20%23777%3Bborder%2Dtop%3A%20none%3Bline%2Dheight%3A%201%2E1%3Bpadding%3A%202px%205px%201px%3Bfont%2Dsize%3A%2011px%3Bwhite%2Dspace%3A%20nowrap%3Boverflow%3A%20hidden%3B%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3Bbox%2Dsizing%3A%20border%2Dbox%3Bbackground%3A%20%23fff%3Bbackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%7D%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7Bborder%2Dtop%3A%202px%20solid%20%23777%3Bborder%2Dbottom%3A%20none%3Bmargin%2Dtop%3A%20%2D2px%3B%7D%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7Bborder%2Dbottom%3A%202px%20solid%20%23777%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7Bbox%2Dshadow%3A%20none%3B%7D%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7Bborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3Bbackground%2Dclip%3A%20padding%2Dbox%3B%7D%2Eleaflet%2Dpopup%20%7Bposition%3A%20absolute%3Btext%2Dalign%3A%20center%3Bmargin%2Dbottom%3A%2020px%3B%7D%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7Bpadding%3A%201px%3Btext%2Dalign%3A%20left%3Bborder%2Dradius%3A%2012px%3B%7D%2Eleaflet%2Dpopup%2Dcontent%20%7Bmargin%3A%2013px%2019px%3Bline%2Dheight%3A%201%2E4%3B%7D%2Eleaflet%2Dpopup%2Dcontent%20p%20%7Bmargin%3A%2018px%200%3B%7D%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7Bwidth%3A%2040px%3Bheight%3A%2020px%3Bposition%3A%20absolute%3Bleft%3A%2050%25%3Bmargin%2Dleft%3A%20%2D20px%3Boverflow%3A%20hidden%3Bpointer%2Devents%3A%20none%3B%7D%2Eleaflet%2Dpopup%2Dtip%20%7Bwidth%3A%2017px%3Bheight%3A%2017px%3Bpadding%3A%201px%3Bmargin%3A%20%2D10px%20auto%200%3B%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%2Do%2Dtransform%3A%20rotate%2845deg%29%3Btransform%3A%20rotate%2845deg%29%3B%7D%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%2Eleaflet%2Dpopup%2Dtip%20%7Bbackground%3A%20white%3Bcolor%3A%20%23333%3Bbox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%7D%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7Bposition%3A%20absolute%3Btop%3A%200%3Bright%3A%200%3Bpadding%3A%204px%204px%200%200%3Bborder%3A%20none%3Btext%2Dalign%3A%20center%3Bwidth%3A%2018px%3Bheight%3A%2014px%3Bfont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3Bcolor%3A%20%23c3c3c3%3Btext%2Ddecoration%3A%20none%3Bfont%2Dweight%3A%20bold%3Bbackground%3A%20transparent%3B%7D%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7Bcolor%3A%20%23999%3B%7D%2Eleaflet%2Dpopup%2Dscrolled%20%7Boverflow%3A%20auto%3Bborder%2Dbottom%3A%201px%20solid%20%23ddd%3Bborder%2Dtop%3A%201px%20solid%20%23ddd%3B%7D%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7Bzoom%3A%201%3B%7D%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7Bwidth%3A%2024px%3Bmargin%3A%200%20auto%3B%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%3Bfilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%7D%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7Bmargin%2Dtop%3A%20%2D1px%3B%7D%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7Bborder%3A%201px%20solid%20%23999%3B%7D%2Eleaflet%2Ddiv%2Dicon%20%7Bbackground%3A%20%23fff%3Bborder%3A%201px%20solid%20%23666%3B%7D%2Eleaflet%2Dtooltip%20%7Bposition%3A%20absolute%3Bpadding%3A%206px%3Bbackground%2Dcolor%3A%20%23fff%3Bborder%3A%201px%20solid%20%23fff%3Bborder%2Dradius%3A%203px%3Bcolor%3A%20%23222%3Bwhite%2Dspace%3A%20nowrap%3B%2Dwebkit%2Duser%2Dselect%3A%20none%3B%2Dmoz%2Duser%2Dselect%3A%20none%3B%2Dms%2Duser%2Dselect%3A%20none%3Buser%2Dselect%3A%20none%3Bpointer%2Devents%3A%20none%3Bbox%2Dshadow%3A%200%201px%203px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%7D%2Eleaflet%2Dtooltip%2Eleaflet%2Dclickable%20%7Bcursor%3A%20pointer%3Bpointer%2Devents%3A%20auto%3B%7D%2Eleaflet%2Dtooltip%2Dtop%3Abefore%2C%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%2C%2Eleaflet%2Dtooltip%2Dleft%3Abefore%2C%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7Bposition%3A%20absolute%3Bpointer%2Devents%3A%20none%3Bborder%3A%206px%20solid%20transparent%3Bbackground%3A%20transparent%3Bcontent%3A%20%22%22%3B%7D%2Eleaflet%2Dtooltip%2Dbottom%20%7Bmargin%2Dtop%3A%206px%3B%7D%2Eleaflet%2Dtooltip%2Dtop%20%7Bmargin%2Dtop%3A%20%2D6px%3B%7D%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%2C%2Eleaflet%2Dtooltip%2Dtop%3Abefore%20%7Bleft%3A%2050%25%3Bmargin%2Dleft%3A%20%2D6px%3B%7D%2Eleaflet%2Dtooltip%2Dtop%3Abefore%20%7Bbottom%3A%200%3Bmargin%2Dbottom%3A%20%2D12px%3Bborder%2Dtop%2Dcolor%3A%20%23fff%3B%7D%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%20%7Btop%3A%200%3Bmargin%2Dtop%3A%20%2D12px%3Bmargin%2Dleft%3A%20%2D6px%3Bborder%2Dbottom%2Dcolor%3A%20%23fff%3B%7D%2Eleaflet%2Dtooltip%2Dleft%20%7Bmargin%2Dleft%3A%20%2D6px%3B%7D%2Eleaflet%2Dtooltip%2Dright%20%7Bmargin%2Dleft%3A%206px%3B%7D%2Eleaflet%2Dtooltip%2Dleft%3Abefore%2C%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7Btop%3A%2050%25%3Bmargin%2Dtop%3A%20%2D6px%3B%7D%2Eleaflet%2Dtooltip%2Dleft%3Abefore%20%7Bright%3A%200%3Bmargin%2Dright%3A%20%2D12px%3Bborder%2Dleft%2Dcolor%3A%20%23fff%3B%7D%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7Bleft%3A%200%3Bmargin%2Dleft%3A%20%2D12px%3Bborder%2Dright%2Dcolor%3A%20%23fff%3B%7D" rel="stylesheet" />
<script src="data:application/javascript;base64,LyogQHByZXNlcnZlCiAqIExlYWZsZXQgMS4zLjErRGV0YWNoZWQ6IGJhNmY5N2ZmZjg2NDdlNzI0ZTRkZmU2NmQyZWQ3ZGExMWY5MDg5ODkuYmE2Zjk3ZiwgYSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzLiBodHRwczovL2xlYWZsZXRqcy5jb20KICogKGMpIDIwMTAtMjAxNyBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlCiAqLwohZnVuY3Rpb24odCxpKXsib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP2koZXhwb3J0cyk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJleHBvcnRzIl0saSk6aSh0Lkw9e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBpLGUsbixvO2ZvcihlPTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspe289YXJndW1lbnRzW2VdO2ZvcihpIGluIG8pdFtpXT1vW2ldfXJldHVybiB0fWZ1bmN0aW9uIGUodCxpKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7aWYodC5iaW5kKXJldHVybiB0LmJpbmQuYXBwbHkodCxlLmNhbGwoYXJndW1lbnRzLDEpKTt2YXIgbj1lLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGksbi5sZW5ndGg/bi5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpOmFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuX2xlYWZsZXRfaWQ9dC5fbGVhZmxldF9pZHx8Kyt0aSx0Ll9sZWFmbGV0X2lkfWZ1bmN0aW9uIG8odCxpLGUpe3ZhciBuLG8scyxyO3JldHVybiByPWZ1bmN0aW9uKCl7bj0hMSxvJiYocy5hcHBseShlLG8pLG89ITEpfSxzPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShlLGFyZ3VtZW50cyksc2V0VGltZW91dChyLGkpLG49ITApfX1mdW5jdGlvbiBzKHQsaSxlKXt2YXIgbj1pWzFdLG89aVswXSxzPW4tbztyZXR1cm4gdD09PW4mJmU/dDooKHQtbyklcytzKSVzK299ZnVuY3Rpb24gcigpe3JldHVybiExfWZ1bmN0aW9uIGEodCxpKXt2YXIgZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1pPzY6aSk7cmV0dXJuIE1hdGgucm91bmQodCplKS9lfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiB1KHQpe3JldHVybiBoKHQpLnNwbGl0KC9ccysvKX1mdW5jdGlvbiBsKHQsaSl7dC5oYXNPd25Qcm9wZXJ0eSgib3B0aW9ucyIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9RdCh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIGUgaW4gaSl0Lm9wdGlvbnNbZV09aVtlXTtyZXR1cm4gdC5vcHRpb25zfWZ1bmN0aW9uIGModCxpLGUpe3ZhciBuPVtdO2Zvcih2YXIgbyBpbiB0KW4ucHVzaChlbmNvZGVVUklDb21wb25lbnQoZT9vLnRvVXBwZXJDYXNlKCk6bykrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0W29dKSk7cmV0dXJuKGkmJi0xIT09aS5pbmRleE9mKCI/Iik/IiYiOiI/Iikrbi5qb2luKCImIil9ZnVuY3Rpb24gXyh0LGkpe3JldHVybiB0LnJlcGxhY2UoaWksZnVuY3Rpb24odCxlKXt2YXIgbj1pW2VdO2lmKHZvaWQgMD09PW4pdGhyb3cgbmV3IEVycm9yKCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgIit0KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmKG49bihpKSksbn0pfWZ1bmN0aW9uIGQodCxpKXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdPT09aSlyZXR1cm4gZTtyZXR1cm4tMX1mdW5jdGlvbiBwKHQpe3JldHVybiB3aW5kb3dbIndlYmtpdCIrdF18fHdpbmRvd1sibW96Iit0XXx8d2luZG93WyJtcyIrdF19ZnVuY3Rpb24gbSh0KXt2YXIgaT0rbmV3IERhdGUsZT1NYXRoLm1heCgwLDE2LShpLW9pKSk7cmV0dXJuIG9pPWkrZSx3aW5kb3cuc2V0VGltZW91dCh0LGUpfWZ1bmN0aW9uIGYodCxpLG4pe2lmKCFufHxzaSE9PW0pcmV0dXJuIHNpLmNhbGwod2luZG93LGUodCxpKSk7dC5jYWxsKGkpfWZ1bmN0aW9uIGcodCl7dCYmcmkuY2FsbCh3aW5kb3csdCl9ZnVuY3Rpb24gdigpe31mdW5jdGlvbiB5KHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgTCYmTCYmTC5NaXhpbil7dD1laSh0KT90Olt0XTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl0W2ldPT09TC5NaXhpbi5FdmVudHMmJmNvbnNvbGUud2FybigiRGVwcmVjYXRlZCBpbmNsdWRlIG9mIEwuTWl4aW4uRXZlbnRzOiB0aGlzIHByb3BlcnR5IHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgcmVsZWFzZXMsIHBsZWFzZSBpbmhlcml0IGZyb20gTC5FdmVudGVkIGluc3RlYWQuIiwobmV3IEVycm9yKS5zdGFjayl9fWZ1bmN0aW9uIHgodCxpLGUpe3RoaXMueD1lP01hdGgucm91bmQodCk6dCx0aGlzLnk9ZT9NYXRoLnJvdW5kKGkpOml9ZnVuY3Rpb24gdyh0LGksZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4P3Q6ZWkodCk/bmV3IHgodFswXSx0WzFdKTp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmIngiaW4gdCYmInkiaW4gdD9uZXcgeCh0LngsdC55KTpuZXcgeCh0LGksZSl9ZnVuY3Rpb24gUCh0LGkpe2lmKHQpZm9yKHZhciBlPWk/W3QsaV06dCxuPTAsbz1lLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGVbbl0pfWZ1bmN0aW9uIGIodCxpKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFA/dDpuZXcgUCh0LGkpfWZ1bmN0aW9uIFQodCxpKXtpZih0KWZvcih2YXIgZT1pP1t0LGldOnQsbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0aGlzLmV4dGVuZChlW25dKX1mdW5jdGlvbiB6KHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUP3Q6bmV3IFQodCxpKX1mdW5jdGlvbiBNKHQsaSxlKXtpZihpc05hTih0KXx8aXNOYU4oaSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitpKyIpIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2ksdm9pZCAwIT09ZSYmKHRoaXMuYWx0PStlKX1mdW5jdGlvbiBDKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIE0/dDplaSh0KSYmIm9iamVjdCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgTSh0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyBNKHRbMF0sdFsxXSk6bnVsbDp2b2lkIDA9PT10fHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmImxhdCJpbiB0P25ldyBNKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbix0LmFsdCk6dm9pZCAwPT09aT9udWxsOm5ldyBNKHQsaSxlKX1mdW5jdGlvbiBaKHQsaSxlLG4pe2lmKGVpKHQpKXJldHVybiB0aGlzLl9hPXRbMF0sdGhpcy5fYj10WzFdLHRoaXMuX2M9dFsyXSx2b2lkKHRoaXMuX2Q9dFszXSk7dGhpcy5fYT10LHRoaXMuX2I9aSx0aGlzLl9jPWUsdGhpcy5fZD1ufWZ1bmN0aW9uIFModCxpLGUsbil7cmV0dXJuIG5ldyBaKHQsaSxlLG4pfWZ1bmN0aW9uIEUodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHQpfWZ1bmN0aW9uIGsodCxpKXt2YXIgZSxuLG8scyxyLGEsaD0iIjtmb3IoZT0wLG89dC5sZW5ndGg7ZTxvO2UrKyl7Zm9yKG49MCxzPShyPXRbZV0pLmxlbmd0aDtuPHM7bisrKWE9cltuXSxoKz0obj8iTCI6Ik0iKSthLngrIiAiK2EueTtoKz1pP1hpPyJ6IjoieCI6IiJ9cmV0dXJuIGh8fCJNMCAwIn1mdW5jdGlvbiBBKHQpe3JldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0KT49MH1mdW5jdGlvbiBJKHQsaSxlLG4pe3JldHVybiJ0b3VjaHN0YXJ0Ij09PWk/Tyh0LGUsbik6InRvdWNobW92ZSI9PT1pP1codCxlLG4pOiJ0b3VjaGVuZCI9PT1pJiZIKHQsZSxuKSx0aGlzfWZ1bmN0aW9uIEIodCxpLGUpe3ZhciBuPXRbIl9sZWFmbGV0XyIraStlXTtyZXR1cm4idG91Y2hzdGFydCI9PT1pP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihRaSxuLCExKToidG91Y2htb3ZlIj09PWk/dC5yZW1vdmVFdmVudExpc3RlbmVyKHRlLG4sITEpOiJ0b3VjaGVuZCI9PT1pJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKGllLG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlZSxuLCExKSksdGhpc31mdW5jdGlvbiBPKHQsaSxuKXt2YXIgbz1lKGZ1bmN0aW9uKHQpe2lmKCJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0Lk1TUE9JTlRFUl9UWVBFX01PVVNFJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSl7aWYoIShuZS5pbmRleE9mKHQudGFyZ2V0LnRhZ05hbWUpPDApKXJldHVybjskKHQpfWoodCxpKX0pO3RbIl9sZWFmbGV0X3RvdWNoc3RhcnQiK25dPW8sdC5hZGRFdmVudExpc3RlbmVyKFFpLG8sITEpLHNlfHwoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoUWksUiwhMCksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGUsRCwhMCksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoaWUsTiwhMCksZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZWUsTiwhMCksc2U9ITApfWZ1bmN0aW9uIFIodCl7b2VbdC5wb2ludGVySWRdPXQscmUrK31mdW5jdGlvbiBEKHQpe29lW3QucG9pbnRlcklkXSYmKG9lW3QucG9pbnRlcklkXT10KX1mdW5jdGlvbiBOKHQpe2RlbGV0ZSBvZVt0LnBvaW50ZXJJZF0scmUtLX1mdW5jdGlvbiBqKHQsaSl7dC50b3VjaGVzPVtdO2Zvcih2YXIgZSBpbiBvZSl0LnRvdWNoZXMucHVzaChvZVtlXSk7dC5jaGFuZ2VkVG91Y2hlcz1bdF0saSh0KX1mdW5jdGlvbiBXKHQsaSxlKXt2YXIgbj1mdW5jdGlvbih0KXsodC5wb2ludGVyVHlwZSE9PXQuTVNQT0lOVEVSX1RZUEVfTU9VU0UmJiJtb3VzZSIhPT10LnBvaW50ZXJUeXBlfHwwIT09dC5idXR0b25zKSYmaih0LGkpfTt0WyJfbGVhZmxldF90b3VjaG1vdmUiK2VdPW4sdC5hZGRFdmVudExpc3RlbmVyKHRlLG4sITEpfWZ1bmN0aW9uIEgodCxpLGUpe3ZhciBuPWZ1bmN0aW9uKHQpe2oodCxpKX07dFsiX2xlYWZsZXRfdG91Y2hlbmQiK2VdPW4sdC5hZGRFdmVudExpc3RlbmVyKGllLG4sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihlZSxuLCExKX1mdW5jdGlvbiBGKHQsaSxlKXtmdW5jdGlvbiBuKHQpe3ZhciBpO2lmKFVpKXtpZighUGl8fCJtb3VzZSI9PT10LnBvaW50ZXJUeXBlKXJldHVybjtpPXJlfWVsc2UgaT10LnRvdWNoZXMubGVuZ3RoO2lmKCEoaT4xKSl7dmFyIGU9RGF0ZS5ub3coKSxuPWUtKHN8fGUpO3I9dC50b3VjaGVzP3QudG91Y2hlc1swXTp0LGE9bj4wJiZuPD1oLHM9ZX19ZnVuY3Rpb24gbyh0KXtpZihhJiYhci5jYW5jZWxCdWJibGUpe2lmKFVpKXtpZighUGl8fCJtb3VzZSI9PT10LnBvaW50ZXJUeXBlKXJldHVybjt2YXIgZSxuLG89e307Zm9yKG4gaW4gcillPXJbbl0sb1tuXT1lJiZlLmJpbmQ/ZS5iaW5kKHIpOmU7cj1vfXIudHlwZT0iZGJsY2xpY2siLGkocikscz1udWxsfX12YXIgcyxyLGE9ITEsaD0yNTA7cmV0dXJuIHRbdWUrYWUrZV09bix0W3VlK2hlK2VdPW8sdFt1ZSsiZGJsY2xpY2siK2VdPWksdC5hZGRFdmVudExpc3RlbmVyKGFlLG4sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihoZSxvLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIixpLCExKSx0aGlzfWZ1bmN0aW9uIFUodCxpKXt2YXIgZT10W3VlK2FlK2ldLG49dFt1ZStoZStpXSxvPXRbdWUrImRibGNsaWNrIitpXTtyZXR1cm4gdC5yZW1vdmVFdmVudExpc3RlbmVyKGFlLGUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihoZSxuLCExKSxQaXx8dC5yZW1vdmVFdmVudExpc3RlbmVyKCJkYmxjbGljayIsbywhMSksdGhpc31mdW5jdGlvbiBWKHQsaSxlLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgaSlmb3IodmFyIG8gaW4gaSlHKHQsbyxpW29dLGUpO2Vsc2UgZm9yKHZhciBzPTAscj0oaT11KGkpKS5sZW5ndGg7czxyO3MrKylHKHQsaVtzXSxlLG4pO3JldHVybiB0aGlzfWZ1bmN0aW9uIHEodCxpLGUsbil7aWYoIm9iamVjdCI9PXR5cGVvZiBpKWZvcih2YXIgbyBpbiBpKUsodCxvLGlbb10sZSk7ZWxzZSBpZihpKWZvcih2YXIgcz0wLHI9KGk9dShpKSkubGVuZ3RoO3M8cjtzKyspSyh0LGlbc10sZSxuKTtlbHNle2Zvcih2YXIgYSBpbiB0W2xlXSlLKHQsYSx0W2xlXVthXSk7ZGVsZXRlIHRbbGVdfXJldHVybiB0aGlzfWZ1bmN0aW9uIEcodCxpLGUsbyl7dmFyIHM9aStuKGUpKyhvPyJfIituKG8pOiIiKTtpZih0W2xlXSYmdFtsZV1bc10pcmV0dXJuIHRoaXM7dmFyIHI9ZnVuY3Rpb24oaSl7cmV0dXJuIGUuY2FsbChvfHx0LGl8fHdpbmRvdy5ldmVudCl9LGE9cjtVaSYmMD09PWkuaW5kZXhPZigidG91Y2giKT9JKHQsaSxyLHMpOiFWaXx8ImRibGNsaWNrIiE9PWl8fCFGfHxVaSYmU2k/ImFkZEV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1pP3QuYWRkRXZlbnRMaXN0ZW5lcigib253aGVlbCJpbiB0PyJ3aGVlbCI6Im1vdXNld2hlZWwiLHIsITEpOiJtb3VzZWVudGVyIj09PWl8fCJtb3VzZWxlYXZlIj09PWk/KHI9ZnVuY3Rpb24oaSl7aT1pfHx3aW5kb3cuZXZlbnQsb3QodCxpKSYmYShpKX0sdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIj09PWk/Im1vdXNlb3ZlciI6Im1vdXNlb3V0IixyLCExKSk6KCJjbGljayI9PT1pJiZUaSYmKHI9ZnVuY3Rpb24odCl7c3QodCxhKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcihpLHIsITEpKToiYXR0YWNoRXZlbnQiaW4gdCYmdC5hdHRhY2hFdmVudCgib24iK2kscik6Rih0LHIscyksdFtsZV09dFtsZV18fHt9LHRbbGVdW3NdPXJ9ZnVuY3Rpb24gSyh0LGksZSxvKXt2YXIgcz1pK24oZSkrKG8/Il8iK24obyk6IiIpLHI9dFtsZV0mJnRbbGVdW3NdO2lmKCFyKXJldHVybiB0aGlzO1VpJiYwPT09aS5pbmRleE9mKCJ0b3VjaCIpP0IodCxpLHMpOiFWaXx8ImRibGNsaWNrIiE9PWl8fCFVfHxVaSYmU2k/InJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1pP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigib253aGVlbCJpbiB0PyJ3aGVlbCI6Im1vdXNld2hlZWwiLHIsITEpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1pPyJtb3VzZW92ZXIiOiJtb3VzZWxlYXZlIj09PWk/Im1vdXNlb3V0IjppLHIsITEpOiJkZXRhY2hFdmVudCJpbiB0JiZ0LmRldGFjaEV2ZW50KCJvbiIraSxyKTpVKHQscyksdFtsZV1bc109bnVsbH1mdW5jdGlvbiBZKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQub3JpZ2luYWxFdmVudD90Lm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQ9ITA6dC5jYW5jZWxCdWJibGU9ITAsbnQodCksdGhpc31mdW5jdGlvbiBYKHQpe3JldHVybiBHKHQsIm1vdXNld2hlZWwiLFkpLHRoaXN9ZnVuY3Rpb24gSih0KXtyZXR1cm4gVih0LCJtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljayIsWSksRyh0LCJjbGljayIsZXQpLHRoaXN9ZnVuY3Rpb24gJCh0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdD90LnByZXZlbnREZWZhdWx0KCk6dC5yZXR1cm5WYWx1ZT0hMSx0aGlzfWZ1bmN0aW9uIFEodCl7cmV0dXJuICQodCksWSh0KSx0aGlzfWZ1bmN0aW9uIHR0KHQsaSl7aWYoIWkpcmV0dXJuIG5ldyB4KHQuY2xpZW50WCx0LmNsaWVudFkpO3ZhciBlPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1lLndpZHRoL2kub2Zmc2V0V2lkdGh8fDEsbz1lLmhlaWdodC9pLm9mZnNldEhlaWdodHx8MTtyZXR1cm4gbmV3IHgodC5jbGllbnRYL24tZS5sZWZ0LWkuY2xpZW50TGVmdCx0LmNsaWVudFkvby1lLnRvcC1pLmNsaWVudFRvcCl9ZnVuY3Rpb24gaXQodCl7cmV0dXJuIFBpP3Qud2hlZWxEZWx0YVkvMjp0LmRlbHRhWSYmMD09PXQuZGVsdGFNb2RlPy10LmRlbHRhWS9jZTp0LmRlbHRhWSYmMT09PXQuZGVsdGFNb2RlPzIwKi10LmRlbHRhWTp0LmRlbHRhWSYmMj09PXQuZGVsdGFNb2RlPzYwKi10LmRlbHRhWTp0LmRlbHRhWHx8dC5kZWx0YVo/MDp0LndoZWVsRGVsdGE/KHQud2hlZWxEZWx0YVl8fHQud2hlZWxEZWx0YSkvMjp0LmRldGFpbCYmTWF0aC5hYnModC5kZXRhaWwpPDMyNzY1PzIwKi10LmRldGFpbDp0LmRldGFpbD90LmRldGFpbC8tMzI3NjUqNjA6MH1mdW5jdGlvbiBldCh0KXtfZVt0LnR5cGVdPSEwfWZ1bmN0aW9uIG50KHQpe3ZhciBpPV9lW3QudHlwZV07cmV0dXJuIF9lW3QudHlwZV09ITEsaX1mdW5jdGlvbiBvdCh0LGkpe3ZhciBlPWkucmVsYXRlZFRhcmdldDtpZighZSlyZXR1cm4hMDt0cnl7Zm9yKDtlJiZlIT09dDspZT1lLnBhcmVudE5vZGV9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuIGUhPT10fWZ1bmN0aW9uIHN0KHQsaSl7dmFyIGU9dC50aW1lU3RhbXB8fHQub3JpZ2luYWxFdmVudCYmdC5vcmlnaW5hbEV2ZW50LnRpbWVTdGFtcCxuPXBpJiZlLXBpO24mJm4+MTAwJiZuPDUwMHx8dC50YXJnZXQuX3NpbXVsYXRlZENsaWNrJiYhdC5fc2ltdWxhdGVkP1EodCk6KHBpPWUsaSh0KSl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpOnR9ZnVuY3Rpb24gYXQodCxpKXt2YXIgZT10LnN0eWxlW2ldfHx0LmN1cnJlbnRTdHlsZSYmdC5jdXJyZW50U3R5bGVbaV07aWYoKCFlfHwiYXV0byI9PT1lKSYmZG9jdW1lbnQuZGVmYXVsdFZpZXcpe3ZhciBuPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodCxudWxsKTtlPW4/bltpXTpudWxsfXJldHVybiJhdXRvIj09PWU/bnVsbDplfWZ1bmN0aW9uIGh0KHQsaSxlKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBuLmNsYXNzTmFtZT1pfHwiIixlJiZlLmFwcGVuZENoaWxkKG4pLG59ZnVuY3Rpb24gdXQodCl7dmFyIGk9dC5wYXJlbnROb2RlO2kmJmkucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gbHQodCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX1mdW5jdGlvbiBjdCh0KXt2YXIgaT10LnBhcmVudE5vZGU7aS5sYXN0Q2hpbGQhPT10JiZpLmFwcGVuZENoaWxkKHQpfWZ1bmN0aW9uIF90KHQpe3ZhciBpPXQucGFyZW50Tm9kZTtpLmZpcnN0Q2hpbGQhPT10JiZpLmluc2VydEJlZm9yZSh0LGkuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZHQodCxpKXtpZih2b2lkIDAhPT10LmNsYXNzTGlzdClyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoaSk7dmFyIGU9Z3QodCk7cmV0dXJuIGUubGVuZ3RoPjAmJm5ldyBSZWdFeHAoIihefFxccykiK2krIihcXHN8JCkiKS50ZXN0KGUpfWZ1bmN0aW9uIHB0KHQsaSl7aWYodm9pZCAwIT09dC5jbGFzc0xpc3QpZm9yKHZhciBlPXUoaSksbj0wLG89ZS5sZW5ndGg7bjxvO24rKyl0LmNsYXNzTGlzdC5hZGQoZVtuXSk7ZWxzZSBpZighZHQodCxpKSl7dmFyIHM9Z3QodCk7ZnQodCwocz9zKyIgIjoiIikraSl9fWZ1bmN0aW9uIG10KHQsaSl7dm9pZCAwIT09dC5jbGFzc0xpc3Q/dC5jbGFzc0xpc3QucmVtb3ZlKGkpOmZ0KHQsaCgoIiAiK2d0KHQpKyIgIikucmVwbGFjZSgiICIraSsiICIsIiAiKSkpfWZ1bmN0aW9uIGZ0KHQsaSl7dm9pZCAwPT09dC5jbGFzc05hbWUuYmFzZVZhbD90LmNsYXNzTmFtZT1pOnQuY2xhc3NOYW1lLmJhc2VWYWw9aX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gdm9pZCAwPT09dC5jbGFzc05hbWUuYmFzZVZhbD90LmNsYXNzTmFtZTp0LmNsYXNzTmFtZS5iYXNlVmFsfWZ1bmN0aW9uIHZ0KHQsaSl7Im9wYWNpdHkiaW4gdC5zdHlsZT90LnN0eWxlLm9wYWNpdHk9aToiZmlsdGVyImluIHQuc3R5bGUmJnl0KHQsaSl9ZnVuY3Rpb24geXQodCxpKXt2YXIgZT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2U9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2godCl7aWYoMT09PWkpcmV0dXJufWk9TWF0aC5yb3VuZCgxMDAqaSksZT8oZS5FbmFibGVkPTEwMCE9PWksZS5PcGFjaXR5PWkpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIraSsiKSJ9ZnVuY3Rpb24geHQodCl7Zm9yKHZhciBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIGkpcmV0dXJuIHRbZV07cmV0dXJuITF9ZnVuY3Rpb24gd3QodCxpLGUpe3ZhciBuPWl8fG5ldyB4KDAsMCk7dC5zdHlsZVtwZV09KE9pPyJ0cmFuc2xhdGUoIituLngrInB4LCIrbi55KyJweCkiOiJ0cmFuc2xhdGUzZCgiK24ueCsicHgsIituLnkrInB4LDApIikrKGU/IiBzY2FsZSgiK2UrIikiOiIiKX1mdW5jdGlvbiBMdCh0LGkpe3QuX2xlYWZsZXRfcG9zPWksTmk/d3QodCxpKToodC5zdHlsZS5sZWZ0PWkueCsicHgiLHQuc3R5bGUudG9wPWkueSsicHgiKX1mdW5jdGlvbiBQdCh0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N8fG5ldyB4KDAsMCl9ZnVuY3Rpb24gYnQoKXtWKHdpbmRvdywiZHJhZ3N0YXJ0IiwkKX1mdW5jdGlvbiBUdCgpe3Eod2luZG93LCJkcmFnc3RhcnQiLCQpfWZ1bmN0aW9uIHp0KHQpe2Zvcig7LTE9PT10LnRhYkluZGV4Oyl0PXQucGFyZW50Tm9kZTt0LnN0eWxlJiYoTXQoKSx2ZT10LHllPXQuc3R5bGUub3V0bGluZSx0LnN0eWxlLm91dGxpbmU9Im5vbmUiLFYod2luZG93LCJrZXlkb3duIixNdCkpfWZ1bmN0aW9uIE10KCl7dmUmJih2ZS5zdHlsZS5vdXRsaW5lPXllLHZlPXZvaWQgMCx5ZT12b2lkIDAscSh3aW5kb3csImtleWRvd24iLE10KSl9ZnVuY3Rpb24gQ3QodCxpKXtpZighaXx8IXQubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9aSppO3JldHVybiB0PWt0KHQsZSksdD1TdCh0LGUpfWZ1bmN0aW9uIFp0KHQsaSxlKXtyZXR1cm4gTWF0aC5zcXJ0KFJ0KHQsaSxlLCEwKSl9ZnVuY3Rpb24gU3QodCxpKXt2YXIgZT10Lmxlbmd0aCxuPW5ldyh0eXBlb2YgVWludDhBcnJheSE9dm9pZCAwKyIiP1VpbnQ4QXJyYXk6QXJyYXkpKGUpO25bMF09bltlLTFdPTEsRXQodCxuLGksMCxlLTEpO3ZhciBvLHM9W107Zm9yKG89MDtvPGU7bysrKW5bb10mJnMucHVzaCh0W29dKTtyZXR1cm4gc31mdW5jdGlvbiBFdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPTA7Zm9yKHI9bisxO3I8PW8tMTtyKyspKGE9UnQodFtyXSx0W25dLHRbb10sITApKT5oJiYocz1yLGg9YSk7aD5lJiYoaVtzXT0xLEV0KHQsaSxlLG4scyksRXQodCxpLGUscyxvKSl9ZnVuY3Rpb24ga3QodCxpKXtmb3IodmFyIGU9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKU90KHRbbl0sdFtvXSk+aSYmKGUucHVzaCh0W25dKSxvPW4pO3JldHVybiBvPHMtMSYmZS5wdXNoKHRbcy0xXSksZX1mdW5jdGlvbiBBdCh0LGksZSxuLG8pe3ZhciBzLHIsYSxoPW4/U2U6QnQodCxlKSx1PUJ0KGksZSk7Zm9yKFNlPXU7Oyl7aWYoIShofHUpKXJldHVyblt0LGldO2lmKGgmdSlyZXR1cm4hMTthPUJ0KHI9SXQodCxpLHM9aHx8dSxlLG8pLGUpLHM9PT1oPyh0PXIsaD1hKTooaT1yLHU9YSl9fWZ1bmN0aW9uIEl0KHQsaSxlLG4sbyl7dmFyIHMscixhPWkueC10LngsaD1pLnktdC55LHU9bi5taW4sbD1uLm1heDtyZXR1cm4gOCZlPyhzPXQueCthKihsLnktdC55KS9oLHI9bC55KTo0JmU/KHM9dC54K2EqKHUueS10LnkpL2gscj11LnkpOjImZT8ocz1sLngscj10LnkraCoobC54LXQueCkvYSk6MSZlJiYocz11Lngscj10LnkraCoodS54LXQueCkvYSksbmV3IHgocyxyLG8pfWZ1bmN0aW9uIEJ0KHQsaSl7dmFyIGU9MDtyZXR1cm4gdC54PGkubWluLng/ZXw9MTp0Lng+aS5tYXgueCYmKGV8PTIpLHQueTxpLm1pbi55P2V8PTQ6dC55PmkubWF4LnkmJihlfD04KSxlfWZ1bmN0aW9uIE90KHQsaSl7dmFyIGU9aS54LXQueCxuPWkueS10Lnk7cmV0dXJuIGUqZStuKm59ZnVuY3Rpb24gUnQodCxpLGUsbil7dmFyIG8scz1pLngscj1pLnksYT1lLngtcyxoPWUueS1yLHU9YSphK2gqaDtyZXR1cm4gdT4wJiYoKG89KCh0LngtcykqYSsodC55LXIpKmgpL3UpPjE/KHM9ZS54LHI9ZS55KTpvPjAmJihzKz1hKm8scis9aCpvKSksYT10LngtcyxoPXQueS1yLG4/YSphK2gqaDpuZXcgeChzLHIpfWZ1bmN0aW9uIER0KHQpe3JldHVybiFlaSh0WzBdKXx8Im9iamVjdCIhPXR5cGVvZiB0WzBdWzBdJiZ2b2lkIDAhPT10WzBdWzBdfWZ1bmN0aW9uIE50KHQpe3JldHVybiBjb25zb2xlLndhcm4oIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuIiksRHQodCl9ZnVuY3Rpb24ganQodCxpLGUpe3ZhciBuLG8scyxyLGEsaCx1LGwsYyxfPVsxLDQsMiw4XTtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKyl0W29dLl9jb2RlPUJ0KHRbb10saSk7Zm9yKHI9MDtyPDQ7cisrKXtmb3IobD1fW3JdLG49W10sbz0wLHM9KHU9dC5sZW5ndGgpLTE7bzx1O3M9bysrKWE9dFtvXSxoPXRbc10sYS5fY29kZSZsP2guX2NvZGUmbHx8KChjPUl0KGgsYSxsLGksZSkpLl9jb2RlPUJ0KGMsaSksbi5wdXNoKGMpKTooaC5fY29kZSZsJiYoKGM9SXQoaCxhLGwsaSxlKSkuX2NvZGU9QnQoYyxpKSxuLnB1c2goYykpLG4ucHVzaChhKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uIFd0KHQsaSl7dmFyIGUsbixvLHMscj0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGE9cj9yLmNvb3JkaW5hdGVzOm51bGwsaD1bXSx1PWkmJmkucG9pbnRUb0xheWVyLGw9aSYmaS5jb29yZHNUb0xhdExuZ3x8SHQ7aWYoIWEmJiFyKXJldHVybiBudWxsO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBlPWwoYSksdT91KHQsZSk6bmV3IFhlKGUpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKG89MCxzPWEubGVuZ3RoO288cztvKyspZT1sKGFbb10pLGgucHVzaCh1P3UodCxlKTpuZXcgWGUoZSkpO3JldHVybiBuZXcgcWUoaCk7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIG49RnQoYSwiTGluZVN0cmluZyI9PT1yLnR5cGU/MDoxLGwpLG5ldyB0bihuLGkpO2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBuPUZ0KGEsIlBvbHlnb24iPT09ci50eXBlPzE6MixsKSxuZXcgZW4obixpKTtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9V3Qoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnQucHJvcGVydGllc30saSk7YyYmaC5wdXNoKGMpfXJldHVybiBuZXcgcWUoaCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgR2VvSlNPTiBvYmplY3QuIil9fWZ1bmN0aW9uIEh0KHQpe3JldHVybiBuZXcgTSh0WzFdLHRbMF0sdFsyXSl9ZnVuY3Rpb24gRnQodCxpLGUpe2Zvcih2YXIgbixvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspbj1pP0Z0KHRbc10saS0xLGUpOihlfHxIdCkodFtzXSksby5wdXNoKG4pO3JldHVybiBvfWZ1bmN0aW9uIFV0KHQsaSl7cmV0dXJuIGk9Im51bWJlciI9PXR5cGVvZiBpP2k6Nix2b2lkIDAhPT10LmFsdD9bYSh0LmxuZyxpKSxhKHQubGF0LGkpLGEodC5hbHQsaSldOlthKHQubG5nLGkpLGEodC5sYXQsaSldfWZ1bmN0aW9uIFZ0KHQsaSxlLG4pe2Zvcih2YXIgbz1bXSxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8ucHVzaChpP1Z0KHRbc10saS0xLGUsbik6VXQodFtzXSxuKSk7cmV0dXJuIWkmJmUmJm8ucHVzaChvWzBdKSxvfWZ1bmN0aW9uIHF0KHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9pKHt9LHQuZmVhdHVyZSx7Z2VvbWV0cnk6ZX0pOkd0KGUpfWZ1bmN0aW9uIEd0KHQpe3JldHVybiJGZWF0dXJlIj09PXQudHlwZXx8IkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZT90Ont0eXBlOiJGZWF0dXJlIixwcm9wZXJ0aWVzOnt9LGdlb21ldHJ5OnR9fWZ1bmN0aW9uIEt0KHQsaSl7cmV0dXJuIG5ldyBubih0LGkpfWZ1bmN0aW9uIFl0KHQsaSl7cmV0dXJuIG5ldyBkbih0LGkpfWZ1bmN0aW9uIFh0KHQpe3JldHVybiBZaT9uZXcgZm4odCk6bnVsbH1mdW5jdGlvbiBKdCh0KXtyZXR1cm4gWGl8fEppP25ldyB4bih0KTpudWxsfXZhciAkdD1PYmplY3QuZnJlZXplO09iamVjdC5mcmVlemU9ZnVuY3Rpb24odCl7cmV0dXJuIHR9O3ZhciBRdD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiB0LnByb3RvdHlwZT1pLG5ldyB0fX0oKSx0aT0wLGlpPS9ceyAqKFtcd18tXSspICpcfS9nLGVpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9LG5pPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9IixvaT0wLHNpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHAoIlJlcXVlc3RBbmltYXRpb25GcmFtZSIpfHxtLHJpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8cCgiQ2FuY2VsQW5pbWF0aW9uRnJhbWUiKXx8cCgiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGZ1bmN0aW9uKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9LGFpPShPYmplY3QuZnJlZXplfHxPYmplY3QpKHtmcmVlemU6JHQsZXh0ZW5kOmksY3JlYXRlOlF0LGJpbmQ6ZSxsYXN0SWQ6dGksc3RhbXA6bix0aHJvdHRsZTpvLHdyYXBOdW06cyxmYWxzZUZuOnIsZm9ybWF0TnVtOmEsdHJpbTpoLHNwbGl0V29yZHM6dSxzZXRPcHRpb25zOmwsZ2V0UGFyYW1TdHJpbmc6Yyx0ZW1wbGF0ZTpfLGlzQXJyYXk6ZWksaW5kZXhPZjpkLGVtcHR5SW1hZ2VVcmw6bmkscmVxdWVzdEZuOnNpLGNhbmNlbEZuOnJpLHJlcXVlc3RBbmltRnJhbWU6ZixjYW5jZWxBbmltRnJhbWU6Z30pO3YuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXplJiZ0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuY2FsbEluaXRIb29rcygpfSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89UXQobik7by5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlPW87Zm9yKHZhciBzIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShzKSYmInByb3RvdHlwZSIhPT1zJiYiX19zdXBlcl9fIiE9PXMmJihlW3NdPXRoaXNbc10pO3JldHVybiB0LnN0YXRpY3MmJihpKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoeSh0LmluY2x1ZGVzKSxpLmFwcGx5KG51bGwsW29dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG8ub3B0aW9ucyYmKHQub3B0aW9ucz1pKFF0KG8ub3B0aW9ucyksdC5vcHRpb25zKSksaShvLHQpLG8uX2luaXRIb29rcz1bXSxvLmNhbGxJbml0SG9va3M9ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdEhvb2tzQ2FsbGVkKXtuLmNhbGxJbml0SG9va3MmJm4uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxpPW8uX2luaXRIb29rcy5sZW5ndGg7dDxpO3QrKylvLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LHYuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZSx0KSx0aGlzfSx2Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LHYuYWRkSW5pdEhvb2s9ZnVuY3Rpb24odCl7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxpKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGUpLHRoaXN9O3ZhciBoaT17b246ZnVuY3Rpb24odCxpLGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vbihuLHRbbl0saSk7ZWxzZSBmb3IodmFyIG89MCxzPSh0PXUodCkpLmxlbmd0aDtvPHM7bysrKXRoaXMuX29uKHRbb10saSxlKTtyZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKHQsaSxlKXtpZih0KWlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGkpO2Vsc2UgZm9yKHZhciBvPTAscz0odD11KHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vZmYodFtvXSxpLGUpO2Vsc2UgZGVsZXRlIHRoaXMuX2V2ZW50cztyZXR1cm4gdGhpc30sX29uOmZ1bmN0aW9uKHQsaSxlKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fTt2YXIgbj10aGlzLl9ldmVudHNbdF07bnx8KG49W10sdGhpcy5fZXZlbnRzW3RdPW4pLGU9PT10aGlzJiYoZT12b2lkIDApO2Zvcih2YXIgbz17Zm46aSxjdHg6ZX0scz1uLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspaWYoc1tyXS5mbj09PWkmJnNbcl0uY3R4PT09ZSlyZXR1cm47cy5wdXNoKG8pfSxfb2ZmOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbixvLHM7aWYodGhpcy5fZXZlbnRzJiYobj10aGlzLl9ldmVudHNbdF0pKWlmKGkpe2lmKGU9PT10aGlzJiYoZT12b2lkIDApLG4pZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspe3ZhciBhPW5bb107aWYoYS5jdHg9PT1lJiZhLmZuPT09aSlyZXR1cm4gYS5mbj1yLHRoaXMuX2ZpcmluZ0NvdW50JiYodGhpcy5fZXZlbnRzW3RdPW49bi5zbGljZSgpKSx2b2lkIG4uc3BsaWNlKG8sMSl9fWVsc2V7Zm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj1yO2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19fSxmaXJlOmZ1bmN0aW9uKHQsZSxuKXtpZighdGhpcy5saXN0ZW5zKHQsbikpcmV0dXJuIHRoaXM7dmFyIG89aSh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXMsc291cmNlVGFyZ2V0OmUmJmUuc291cmNlVGFyZ2V0fHx0aGlzfSk7aWYodGhpcy5fZXZlbnRzKXt2YXIgcz10aGlzLl9ldmVudHNbdF07aWYocyl7dGhpcy5fZmlyaW5nQ291bnQ9dGhpcy5fZmlyaW5nQ291bnQrMXx8MTtmb3IodmFyIHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe3ZhciBoPXNbcl07aC5mbi5jYWxsKGguY3R4fHx0aGlzLG8pfXRoaXMuX2ZpcmluZ0NvdW50LS19fXJldHVybiBuJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChvKSx0aGlzfSxsaXN0ZW5zOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF07aWYoZSYmZS5sZW5ndGgpcmV0dXJuITA7aWYoaSlmb3IodmFyIG4gaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tuXS5saXN0ZW5zKHQsaSkpcmV0dXJuITA7cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxpLG4pe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBvIGluIHQpdGhpcy5vbmNlKG8sdFtvXSxpKTtyZXR1cm4gdGhpc312YXIgcz1lKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxpLG4pLm9mZih0LHMsbil9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsaSxuKS5vbih0LHMsbil9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbbih0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW24odCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tlXS5maXJlKHQudHlwZSxpKHtsYXllcjp0LnRhcmdldCxwcm9wYWdhdGVkRnJvbTp0LnRhcmdldH0sdCksITApfX07aGkuYWRkRXZlbnRMaXN0ZW5lcj1oaS5vbixoaS5yZW1vdmVFdmVudExpc3RlbmVyPWhpLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnM9aGkub2ZmLGhpLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyPWhpLm9uY2UsaGkuZmlyZUV2ZW50PWhpLmZpcmUsaGkuaGFzRXZlbnRMaXN0ZW5lcnM9aGkubGlzdGVuczt2YXIgdWk9di5leHRlbmQoaGkpLGxpPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O3gucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZCh3KHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3Qodyh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1saSh0aGlzLngpLHRoaXMueT1saSh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGk9KHQ9dyh0KSkueC10aGlzLngsZT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD13KHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PXcodCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iUG9pbnQoIithKHRoaXMueCkrIiwgIithKHRoaXMueSkrIikifX0sUC5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD13KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgeCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBpLGU7cmV0dXJuKHQ9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgeD93KHQpOmIodCkpaW5zdGFuY2VvZiBQPyhpPXQubWluLGU9dC5tYXgpOmk9ZT10LGkueD49dGhpcy5taW4ueCYmZS54PD10aGlzLm1heC54JiZpLnk+PXRoaXMubWluLnkmJmUueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PWIodCk7dmFyIGk9dGhpcy5taW4sZT10aGlzLm1heCxuPXQubWluLG89dC5tYXgscz1vLng+PWkueCYmbi54PD1lLngscj1vLnk+PWkueSYmbi55PD1lLnk7cmV0dXJuIHMmJnJ9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Yih0KTt2YXIgaT10aGlzLm1pbixlPXRoaXMubWF4LG49dC5taW4sbz10Lm1heCxzPW8ueD5pLngmJm4ueDxlLngscj1vLnk+aS55JiZuLnk8ZS55O3JldHVybiBzJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxULnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIE0paT10LGU9dDtlbHNle2lmKCEodCBpbnN0YW5jZW9mIFQpKXJldHVybiB0P3RoaXMuZXh0ZW5kKEModCl8fHoodCkpOnRoaXM7aWYoaT10Ll9zb3V0aFdlc3QsZT10Ll9ub3J0aEVhc3QsIWl8fCFlKXJldHVybiB0aGlzfXJldHVybiBufHxvPyhuLmxhdD1NYXRoLm1pbihpLmxhdCxuLmxhdCksbi5sbmc9TWF0aC5taW4oaS5sbmcsbi5sbmcpLG8ubGF0PU1hdGgubWF4KGUubGF0LG8ubGF0KSxvLmxuZz1NYXRoLm1heChlLmxuZyxvLmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IE0oaS5sYXQsaS5sbmcpLHRoaXMuX25vcnRoRWFzdD1uZXcgTShlLmxhdCxlLmxuZykpLHRoaXN9LHBhZDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9zb3V0aFdlc3QsZT10aGlzLl9ub3J0aEVhc3Qsbj1NYXRoLmFicyhpLmxhdC1lLmxhdCkqdCxvPU1hdGguYWJzKGkubG5nLWUubG5nKSp0O3JldHVybiBuZXcgVChuZXcgTShpLmxhdC1uLGkubG5nLW8pLG5ldyBNKGUubGF0K24sZS5sbmcrbykpfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE0oKHRoaXMuX3NvdXRoV2VzdC5sYXQrdGhpcy5fbm9ydGhFYXN0LmxhdCkvMiwodGhpcy5fc291dGhXZXN0LmxuZyt0aGlzLl9ub3J0aEVhc3QubG5nKS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdH0sZ2V0Tm9ydGhFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdH0sZ2V0Tm9ydGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sYXR9LGdldEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxhdH0sY29udGFpbnM6ZnVuY3Rpb24odCl7dD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBNfHwibGF0ImluIHQ/Qyh0KTp6KHQpO3ZhciBpLGUsbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7cmV0dXJuIHQgaW5zdGFuY2VvZiBUPyhpPXQuZ2V0U291dGhXZXN0KCksZT10LmdldE5vcnRoRWFzdCgpKTppPWU9dCxpLmxhdD49bi5sYXQmJmUubGF0PD1vLmxhdCYmaS5sbmc+PW4ubG5nJiZlLmxuZzw9by5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+PWkubGF0JiZuLmxhdDw9ZS5sYXQscj1vLmxuZz49aS5sbmcmJm4ubG5nPD1lLmxuZztyZXR1cm4gcyYmcn0sb3ZlcmxhcHM6ZnVuY3Rpb24odCl7dD16KHQpO3ZhciBpPXRoaXMuX3NvdXRoV2VzdCxlPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCksbz10LmdldE5vcnRoRWFzdCgpLHM9by5sYXQ+aS5sYXQmJm4ubGF0PGUubGF0LHI9by5sbmc+aS5sbmcmJm4ubG5nPGUubG5nO3JldHVybiBzJiZyfSx0b0JCb3hTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXRXZXN0KCksdGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0Tm9ydGgoKV0uam9pbigiLCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PXoodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksaSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19LE0ucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCxpKXtyZXR1cm4hIXQmJih0PUModCksTWF0aC5tYXgoTWF0aC5hYnModGhpcy5sYXQtdC5sYXQpLE1hdGguYWJzKHRoaXMubG5nLXQubG5nKSk8PSh2b2lkIDA9PT1pPzFlLTk6aSkpfSx0b1N0cmluZzpmdW5jdGlvbih0KXtyZXR1cm4iTGF0TG5nKCIrYSh0aGlzLmxhdCx0KSsiLCAiK2EodGhpcy5sbmcsdCkrIikifSxkaXN0YW5jZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBfaS5kaXN0YW5jZSh0aGlzLEModCkpfSx3cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIF9pLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPTE4MCp0LzQwMDc1MDE3LGU9aS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIHooW3RoaXMubGF0LWksdGhpcy5sbmctZV0sW3RoaXMubGF0K2ksdGhpcy5sbmcrZV0pfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgTSh0aGlzLmxhdCx0aGlzLmxuZyx0aGlzLmFsdCl9fTt2YXIgY2k9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoaSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShlLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5zY2FsZShpKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybiBudWxsO3ZhciBpPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsZT10aGlzLnNjYWxlKHQpO3JldHVybiBuZXcgUCh0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1pbixlKSx0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShpLm1heCxlKSl9LGluZmluaXRlOiExLHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy53cmFwTG5nP3ModC5sbmcsdGhpcy53cmFwTG5nLCEwKTp0LmxuZztyZXR1cm4gbmV3IE0odGhpcy53cmFwTGF0P3ModC5sYXQsdGhpcy53cmFwTGF0LCEwKTp0LmxhdCxpLHQuYWx0KX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXt2YXIgaT10LmdldENlbnRlcigpLGU9dGhpcy53cmFwTGF0TG5nKGkpLG49aS5sYXQtZS5sYXQsbz1pLmxuZy1lLmxuZztpZigwPT09biYmMD09PW8pcmV0dXJuIHQ7dmFyIHM9dC5nZXRTb3V0aFdlc3QoKSxyPXQuZ2V0Tm9ydGhFYXN0KCk7cmV0dXJuIG5ldyBUKG5ldyBNKHMubGF0LW4scy5sbmctbyksbmV3IE0oci5sYXQtbixyLmxuZy1vKSl9fSxfaT1pKHt9LGNpLHt3cmFwTG5nOlstMTgwLDE4MF0sUjo2MzcxZTMsZGlzdGFuY2U6ZnVuY3Rpb24odCxpKXt2YXIgZT1NYXRoLlBJLzE4MCxuPXQubGF0KmUsbz1pLmxhdCplLHM9TWF0aC5zaW4oKGkubGF0LXQubGF0KSplLzIpLHI9TWF0aC5zaW4oKGkubG5nLXQubG5nKSplLzIpLGE9cypzK01hdGguY29zKG4pKk1hdGguY29zKG8pKnIqcixoPTIqTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksTWF0aC5zcXJ0KDEtYSkpO3JldHVybiB0aGlzLlIqaH19KSxkaT17Ujo2Mzc4MTM3LE1BWF9MQVRJVFVERTo4NS4wNTExMjg3Nzk4LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLk1BWF9MQVRJVFVERSxuPU1hdGgubWF4KE1hdGgubWluKGUsdC5sYXQpLC1lKSxvPU1hdGguc2luKG4qaSk7cmV0dXJuIG5ldyB4KHRoaXMuUip0LmxuZyppLHRoaXMuUipNYXRoLmxvZygoMStvKS8oMS1vKSkvMil9LHVucHJvamVjdDpmdW5jdGlvbih0KXt2YXIgaT0xODAvTWF0aC5QSTtyZXR1cm4gbmV3IE0oKDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueS90aGlzLlIpKS1NYXRoLlBJLzIpKmksdC54KmkvdGhpcy5SKX0sYm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9NjM3ODEzNypNYXRoLlBJO3JldHVybiBuZXcgUChbLXQsLXRdLFt0LHRdKX0oKX07Wi5wcm90b3R5cGU9e3RyYW5zZm9ybTpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl90cmFuc2Zvcm0odC5jbG9uZSgpLGkpfSxfdHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSx0Lng9aSoodGhpcy5fYSp0LngrdGhpcy5fYiksdC55PWkqKHRoaXMuX2MqdC55K3RoaXMuX2QpLHR9LHVudHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8MSxuZXcgeCgodC54L2ktdGhpcy5fYikvdGhpcy5fYSwodC55L2ktdGhpcy5fZCkvdGhpcy5fYyl9fTt2YXIgcGksbWksZmksZ2ksdmk9aSh7fSxfaSx7Y29kZToiRVBTRzozODU3Iixwcm9qZWN0aW9uOmRpLHRyYW5zZm9ybWF0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9LjUvKE1hdGguUEkqZGkuUik7cmV0dXJuIFModCwuNSwtdCwuNSl9KCl9KSx5aT1pKHt9LHZpLHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSx4aT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsd2k9IkFjdGl2ZVhPYmplY3QiaW4gd2luZG93LExpPXdpJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixQaT0ibXNMYXVuY2hVcmkiaW4gbmF2aWdhdG9yJiYhKCJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQpLGJpPUEoIndlYmtpdCIpLFRpPUEoImFuZHJvaWQiKSx6aT1BKCJhbmRyb2lkIDIiKXx8QSgiYW5kcm9pZCAzIiksTWk9cGFyc2VJbnQoL1dlYktpdFwvKFswLTldKyl8JC8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KVsxXSwxMCksQ2k9VGkmJkEoIkdvb2dsZSIpJiZNaTw1MzcmJiEoIkF1ZGlvTm9kZSJpbiB3aW5kb3cpLFppPSEhd2luZG93Lm9wZXJhLFNpPUEoImNocm9tZSIpLEVpPUEoImdlY2tvIikmJiFiaSYmIVppJiYhd2ksa2k9IVNpJiZBKCJzYWZhcmkiKSxBaT1BKCJwaGFudG9tIiksSWk9Ik9UcmFuc2l0aW9uImluIHhpLEJpPTA9PT1uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiV2luIiksT2k9d2kmJiJ0cmFuc2l0aW9uImluIHhpLFJpPSJXZWJLaXRDU1NNYXRyaXgiaW4gd2luZG93JiYibTExImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhemksRGk9Ik1velBlcnNwZWN0aXZlImluIHhpLE5pPSF3aW5kb3cuTF9ESVNBQkxFXzNEJiYoT2l8fFJpfHxEaSkmJiFJaSYmIUFpLGppPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3JpZW50YXRpb258fEEoIm1vYmlsZSIpLFdpPWppJiZiaSxIaT1qaSYmUmksRmk9IXdpbmRvdy5Qb2ludGVyRXZlbnQmJndpbmRvdy5NU1BvaW50ZXJFdmVudCxVaT0hKCF3aW5kb3cuUG9pbnRlckV2ZW50JiYhRmkpLFZpPSF3aW5kb3cuTF9OT19UT1VDSCYmKFVpfHwib250b3VjaHN0YXJ0ImluIHdpbmRvd3x8d2luZG93LkRvY3VtZW50VG91Y2gmJmRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpLHFpPWppJiZaaSxHaT1qaSYmRWksS2k9KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHx3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkvd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSk+MSxZaT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQsWGk9ISghZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TfHwhRSgic3ZnIikuY3JlYXRlU1ZHUmVjdCksSmk9IVhpJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPSIxIi8+Jzt2YXIgaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGkuc3R5bGUuYmVoYXZpb3I9InVybCgjZGVmYXVsdCNWTUwpIixpJiYib2JqZWN0Ij09dHlwZW9mIGkuYWRqfWNhdGNoKHQpe3JldHVybiExfX0oKSwkaT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7aWU6d2ksaWVsdDk6TGksZWRnZTpQaSx3ZWJraXQ6YmksYW5kcm9pZDpUaSxhbmRyb2lkMjM6emksYW5kcm9pZFN0b2NrOkNpLG9wZXJhOlppLGNocm9tZTpTaSxnZWNrbzpFaSxzYWZhcmk6a2kscGhhbnRvbTpBaSxvcGVyYTEyOklpLHdpbjpCaSxpZTNkOk9pLHdlYmtpdDNkOlJpLGdlY2tvM2Q6RGksYW55M2Q6TmksbW9iaWxlOmppLG1vYmlsZVdlYmtpdDpXaSxtb2JpbGVXZWJraXQzZDpIaSxtc1BvaW50ZXI6RmkscG9pbnRlcjpVaSx0b3VjaDpWaSxtb2JpbGVPcGVyYTpxaSxtb2JpbGVHZWNrbzpHaSxyZXRpbmE6S2ksY2FudmFzOllpLHN2ZzpYaSx2bWw6Sml9KSxRaT1GaT8iTVNQb2ludGVyRG93biI6InBvaW50ZXJkb3duIix0ZT1GaT8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixpZT1GaT8iTVNQb2ludGVyVXAiOiJwb2ludGVydXAiLGVlPUZpPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixuZT1bIklOUFVUIiwiU0VMRUNUIiwiT1BUSU9OIl0sb2U9e30sc2U9ITEscmU9MCxhZT1GaT8iTVNQb2ludGVyRG93biI6VWk/InBvaW50ZXJkb3duIjoidG91Y2hzdGFydCIsaGU9Rmk/Ik1TUG9pbnRlclVwIjpVaT8icG9pbnRlcnVwIjoidG91Y2hlbmQiLHVlPSJfbGVhZmxldF8iLGxlPSJfbGVhZmxldF9ldmVudHMiLGNlPUJpJiZTaT8yKndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOkVpP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjEsX2U9e30sZGU9KE9iamVjdC5mcmVlemV8fE9iamVjdCkoe29uOlYsb2ZmOnEsc3RvcFByb3BhZ2F0aW9uOlksZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uOlgsZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246SixwcmV2ZW50RGVmYXVsdDokLHN0b3A6USxnZXRNb3VzZVBvc2l0aW9uOnR0LGdldFdoZWVsRGVsdGE6aXQsZmFrZVN0b3A6ZXQsc2tpcHBlZDpudCxpc0V4dGVybmFsVGFyZ2V0Om90LGFkZExpc3RlbmVyOlYscmVtb3ZlTGlzdGVuZXI6cX0pLHBlPXh0KFsidHJhbnNmb3JtIiwiV2Via2l0VHJhbnNmb3JtIiwiT1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIl0pLG1lPXh0KFsid2Via2l0VHJhbnNpdGlvbiIsInRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJtc1RyYW5zaXRpb24iXSksZmU9IndlYmtpdFRyYW5zaXRpb24iPT09bWV8fCJPVHJhbnNpdGlvbiI9PT1tZT9tZSsiRW5kIjoidHJhbnNpdGlvbmVuZCI7aWYoIm9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQpbWk9ZnVuY3Rpb24oKXtWKHdpbmRvdywic2VsZWN0c3RhcnQiLCQpfSxmaT1mdW5jdGlvbigpe3Eod2luZG93LCJzZWxlY3RzdGFydCIsJCl9O2Vsc2V7dmFyIGdlPXh0KFsidXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJPVXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7bWk9ZnVuY3Rpb24oKXtpZihnZSl7dmFyIHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2dpPXRbZ2VdLHRbZ2VdPSJub25lIn19LGZpPWZ1bmN0aW9uKCl7Z2UmJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVbZ2VdPWdpLGdpPXZvaWQgMCl9fXZhciB2ZSx5ZSx4ZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7VFJBTlNGT1JNOnBlLFRSQU5TSVRJT046bWUsVFJBTlNJVElPTl9FTkQ6ZmUsZ2V0OnJ0LGdldFN0eWxlOmF0LGNyZWF0ZTpodCxyZW1vdmU6dXQsZW1wdHk6bHQsdG9Gcm9udDpjdCx0b0JhY2s6X3QsaGFzQ2xhc3M6ZHQsYWRkQ2xhc3M6cHQscmVtb3ZlQ2xhc3M6bXQsc2V0Q2xhc3M6ZnQsZ2V0Q2xhc3M6Z3Qsc2V0T3BhY2l0eTp2dCx0ZXN0UHJvcDp4dCxzZXRUcmFuc2Zvcm06d3Qsc2V0UG9zaXRpb246THQsZ2V0UG9zaXRpb246UHQsZGlzYWJsZVRleHRTZWxlY3Rpb246bWksZW5hYmxlVGV4dFNlbGVjdGlvbjpmaSxkaXNhYmxlSW1hZ2VEcmFnOmJ0LGVuYWJsZUltYWdlRHJhZzpUdCxwcmV2ZW50T3V0bGluZTp6dCxyZXN0b3JlT3V0bGluZTpNdH0pLHdlPXVpLmV4dGVuZCh7cnVuOmZ1bmN0aW9uKHQsaSxlLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9kdXJhdGlvbj1lfHwuMjUsdGhpcy5fZWFzZU91dFBvd2VyPTEvTWF0aC5tYXgobnx8LjUsLjIpLHRoaXMuX3N0YXJ0UG9zPVB0KHQpLHRoaXMuX29mZnNldD1pLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZSgic3RhcnQiKSx0aGlzLl9hbmltYXRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9pblByb2dyZXNzJiYodGhpcy5fc3RlcCghMCksdGhpcy5fY29tcGxldGUoKSl9LF9hbmltYXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbUlkPWYodGhpcy5fYW5pbWF0ZSx0aGlzKSx0aGlzLl9zdGVwKCl9LF9zdGVwOmZ1bmN0aW9uKHQpe3ZhciBpPStuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUsZT0xZTMqdGhpcy5fZHVyYXRpb247aTxlP3RoaXMuX3J1bkZyYW1lKHRoaXMuX2Vhc2VPdXQoaS9lKSx0KToodGhpcy5fcnVuRnJhbWUoMSksdGhpcy5fY29tcGxldGUoKSl9LF9ydW5GcmFtZTpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7aSYmZS5fcm91bmQoKSxMdCh0aGlzLl9lbCxlKSx0aGlzLmZpcmUoInN0ZXAiKX0sX2NvbXBsZXRlOmZ1bmN0aW9uKCl7Zyh0aGlzLl9hbmltSWQpLHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5maXJlKCJlbmQiKX0sX2Vhc2VPdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LHRoaXMuX2Vhc2VPdXRQb3dlcil9fSksTGU9dWkuZXh0ZW5kKHtvcHRpb25zOntjcnM6dmksY2VudGVyOnZvaWQgMCx6b29tOnZvaWQgMCxtaW5ab29tOnZvaWQgMCxtYXhab29tOnZvaWQgMCxsYXllcnM6W10sbWF4Qm91bmRzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAsem9vbUFuaW1hdGlvbjohMCx6b29tQW5pbWF0aW9uVGhyZXNob2xkOjQsZmFkZUFuaW1hdGlvbjohMCxtYXJrZXJab29tQW5pbWF0aW9uOiEwLHRyYW5zZm9ybTNETGltaXQ6ODM4ODYwOCx6b29tU25hcDoxLHpvb21EZWx0YToxLHRyYWNrUmVzaXplOiEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7aT1sKHRoaXMsaSksdGhpcy5faW5pdENvbnRhaW5lcih0KSx0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fb25SZXNpemU9ZSh0aGlzLl9vblJlc2l6ZSx0aGlzKSx0aGlzLl9pbml0RXZlbnRzKCksaS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGkubWF4Qm91bmRzKSx2b2lkIDAhPT1pLnpvb20mJih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbShpLnpvb20pKSxpLmNlbnRlciYmdm9pZCAwIT09aS56b29tJiZ0aGlzLnNldFZpZXcoQyhpLmNlbnRlciksaS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fc2l6ZUNoYW5nZWQ9ITAsdGhpcy5jYWxsSW5pdEhvb2tzKCksdGhpcy5fem9vbUFuaW1hdGVkPW1lJiZOaSYmIXFpJiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJih0aGlzLl9jcmVhdGVBbmltUHJveHkoKSxWKHRoaXMuX3Byb3h5LGZlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIoQyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLG49bnx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJiEwIT09biYmKHZvaWQgMCE9PW4uYW5pbWF0ZSYmKG4uem9vbT1pKHthbmltYXRlOm4uYW5pbWF0ZX0sbi56b29tKSxuLnBhbj1pKHthbmltYXRlOm4uYW5pbWF0ZSxkdXJhdGlvbjpuLmR1cmF0aW9ufSxuLnBhbikpLHRoaXMuX3pvb20hPT1lP3RoaXMuX3RyeUFuaW1hdGVkWm9vbSYmdGhpcy5fdHJ5QW5pbWF0ZWRab29tKHQsZSxuLnpvb20pOnRoaXMuX3RyeUFuaW1hdGVkUGFuKHQsbi5wYW4pKT8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcyk6KHRoaXMuX3Jlc2V0Vmlldyh0LGUpLHRoaXMpfSxzZXRab29tOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOml9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxpKXtyZXR1cm4gdD10fHwoTmk/dGhpcy5vcHRpb25zLnpvb21EZWx0YToxKSx0aGlzLnNldFpvb20odGhpcy5fem9vbSt0LGkpfSx6b29tT3V0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQ9dHx8KE5pP3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxpKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxzPSh0IGluc3RhbmNlb2YgeD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSkuc3VidHJhY3QobykubXVsdGlwbHlCeSgxLTEvbikscj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoby5hZGQocykpO3JldHVybiB0aGlzLnNldFZpZXcocixpLHt6b29tOmV9KX0sX2dldEJvdW5kc0NlbnRlclpvb206ZnVuY3Rpb24odCxpKXtpPWl8fHt9LHQ9dC5nZXRCb3VuZHM/dC5nZXRCb3VuZHMoKTp6KHQpO3ZhciBlPXcoaS5wYWRkaW5nVG9wTGVmdHx8aS5wYWRkaW5nfHxbMCwwXSksbj13KGkucGFkZGluZ0JvdHRvbVJpZ2h0fHxpLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGUuYWRkKG4pKTtpZigobz0ibnVtYmVyIj09dHlwZW9mIGkubWF4Wm9vbT9NYXRoLm1pbihpLm1heFpvb20sbyk6byk9PT0xLzApcmV0dXJue2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b307dmFyIHM9bi5zdWJ0cmFjdChlKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGE9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbyk7cmV0dXJue2NlbnRlcjp0aGlzLnVucHJvamVjdChyLmFkZChhKS5kaXZpZGVCeSgyKS5hZGQocyksbyksem9vbTpvfX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsaSl7aWYoISh0PXoodCkpLmlzVmFsaWQoKSl0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBhcmUgbm90IHZhbGlkLiIpO3ZhciBlPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KGUuY2VudGVyLGUuem9vbSxpKX0sZml0V29ybGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLC0xODBdLFs5MCwxODBdXSx0KX0scGFuVG86ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5zZXRWaWV3KHQsdGhpcy5fem9vbSx7cGFuOml9KX0scGFuQnk6ZnVuY3Rpb24odCxpKXtpZih0PXcodCkucm91bmQoKSxpPWl8fHt9LCF0LngmJiF0LnkpcmV0dXJuIHRoaXMuZmlyZSgibW92ZWVuZCIpO2lmKCEwIT09aS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpcmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgd2UsdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxpLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLCExIT09aS5hbmltYXRlKXtwdCh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIik7dmFyIGU9dGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpLnJvdW5kKCk7dGhpcy5fcGFuQW5pbS5ydW4odGhpcy5fbWFwUGFuZSxlLGkuZHVyYXRpb258fC4yNSxpLmVhc2VMaW5lYXJpdHkpfWVsc2UgdGhpcy5fcmF3UGFuQnkodCksdGhpcy5maXJlKCJtb3ZlIikuZmlyZSgibW92ZWVuZCIpO3JldHVybiB0aGlzfSxmbHlUbzpmdW5jdGlvbih0LGksZSl7ZnVuY3Rpb24gbih0KXt2YXIgaT0oZypnLW0qbSsodD8tMToxKSp4Kngqdip2KS8oMioodD9nOm0pKngqdiksZT1NYXRoLnNxcnQoaSppKzEpLWk7cmV0dXJuIGU8MWUtOT8tMTg6TWF0aC5sb2coZSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHModCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn1mdW5jdGlvbiByKHQpe3JldHVybiBvKHQpL3ModCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbSoocyh3KS9zKHcreSp0KSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbSoocyh3KSpyKHcreSp0KS1vKHcpKS94fWZ1bmN0aW9uIHUodCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LDEuNSl9ZnVuY3Rpb24gbCgpe3ZhciBlPShEYXRlLm5vdygpLUwpL2Isbj11KGUpKlA7ZTw9MT8odGhpcy5fZmx5VG9GcmFtZT1mKGwsdGhpcyksdGhpcy5fbW92ZSh0aGlzLnVucHJvamVjdChjLmFkZChfLnN1YnRyYWN0KGMpLm11bHRpcGx5QnkoaChuKS92KSkscCksdGhpcy5nZXRTY2FsZVpvb20obS9hKG4pLHApLHtmbHlUbzohMH0pKTp0aGlzLl9tb3ZlKHQsaSkuX21vdmVFbmQoITApfWlmKCExPT09KGU9ZXx8e30pLmFuaW1hdGV8fCFOaSlyZXR1cm4gdGhpcy5zZXRWaWV3KHQsaSxlKTt0aGlzLl9zdG9wKCk7dmFyIGM9dGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLF89dGhpcy5wcm9qZWN0KHQpLGQ9dGhpcy5nZXRTaXplKCkscD10aGlzLl96b29tO3Q9Qyh0KSxpPXZvaWQgMD09PWk/cDppO3ZhciBtPU1hdGgubWF4KGQueCxkLnkpLGc9bSp0aGlzLmdldFpvb21TY2FsZShwLGkpLHY9Xy5kaXN0YW5jZVRvKGMpfHwxLHk9MS40Mix4PXkqeSx3PW4oMCksTD1EYXRlLm5vdygpLFA9KG4oMSktdykveSxiPWUuZHVyYXRpb24/MWUzKmUuZHVyYXRpb246MWUzKlAqLjg7cmV0dXJuIHRoaXMuX21vdmVTdGFydCghMCxlLm5vTW92ZVN0YXJ0KSxsLmNhbGwodGhpcyksdGhpc30sZmx5VG9Cb3VuZHM6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsaSk7cmV0dXJuIHRoaXMuZmx5VG8oZS5jZW50ZXIsZS56b29tLGkpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9eih0KSkuaXNWYWxpZCgpPyh0aGlzLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzPXQsdGhpcy5fbG9hZGVkJiZ0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMoKSx0aGlzLm9uKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpKToodGhpcy5vcHRpb25zLm1heEJvdW5kcz1udWxsLHRoaXMub2ZmKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpKX0sc2V0TWluWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMubWluWm9vbTtyZXR1cm4gdGhpcy5vcHRpb25zLm1pblpvb209dCx0aGlzLl9sb2FkZWQmJmkhPT10JiYodGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIiksdGhpcy5nZXRab29tKCk8dGhpcy5vcHRpb25zLm1pblpvb20pP3RoaXMuc2V0Wm9vbSh0KTp0aGlzfSxzZXRNYXhab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5tYXhab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWF4Wm9vbT10LHRoaXMuX2xvYWRlZCYmaSE9PXQmJih0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKSx0aGlzLmdldFpvb20oKT50aGlzLm9wdGlvbnMubWF4Wm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHBhbkluc2lkZUJvdW5kczpmdW5jdGlvbih0LGkpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgZT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoZSx0aGlzLl96b29tLHoodCkpO3JldHVybiBlLmVxdWFscyhuKXx8dGhpcy5wYW5UbyhuLGkpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSx0aGlzfSxpbnZhbGlkYXRlU2l6ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fbG9hZGVkKXJldHVybiB0aGlzO3Q9aSh7YW5pbWF0ZTohMSxwYW46ITB9LCEwPT09dD97YW5pbWF0ZTohMH06dCk7dmFyIG49dGhpcy5nZXRTaXplKCk7dGhpcy5fc2l6ZUNoYW5nZWQ9ITAsdGhpcy5fbGFzdENlbnRlcj1udWxsO3ZhciBvPXRoaXMuZ2V0U2l6ZSgpLHM9bi5kaXZpZGVCeSgyKS5yb3VuZCgpLHI9by5kaXZpZGVCeSgyKS5yb3VuZCgpLGE9cy5zdWJ0cmFjdChyKTtyZXR1cm4gYS54fHxhLnk/KHQuYW5pbWF0ZSYmdC5wYW4/dGhpcy5wYW5CeShhKToodC5wYW4mJnRoaXMuX3Jhd1BhbkJ5KGEpLHRoaXMuZmlyZSgibW92ZSIpLHQuZGVib3VuY2VNb3ZlZW5kPyhjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzLl9zaXplVGltZXI9c2V0VGltZW91dChlKHRoaXMuZmlyZSx0aGlzLCJtb3ZlZW5kIiksMjAwKSk6dGhpcy5maXJlKCJtb3ZlZW5kIikpLHRoaXMuZmlyZSgicmVzaXplIix7b2xkU2l6ZTpuLG5ld1NpemU6b30pKTp0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl9saW1pdFpvb20odGhpcy5fem9vbSkpLHRoaXMub3B0aW9ucy56b29tU25hcHx8dGhpcy5maXJlKCJ2aWV3cmVzZXQiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9aSh7dGltZW91dDoxZTQsd2F0Y2g6ITF9LHQpLCEoImdlb2xvY2F0aW9uImluIG5hdmlnYXRvcikpcmV0dXJuIHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3Ioe2NvZGU6MCxtZXNzYWdlOiJHZW9sb2NhdGlvbiBub3Qgc3VwcG9ydGVkLiJ9KSx0aGlzO3ZhciBuPWUodGhpcy5faGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSx0aGlzKSxvPWUodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24obixvLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24obixvLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fbG9jYXRpb25XYXRjaElkKSx0aGlzLl9sb2NhdGVPcHRpb25zJiYodGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3PSExKSx0aGlzfSxfaGFuZGxlR2VvbG9jYXRpb25FcnJvcjpmdW5jdGlvbih0KXt2YXIgaT10LmNvZGUsZT10Lm1lc3NhZ2V8fCgxPT09aT8icGVybWlzc2lvbiBkZW5pZWQiOjI9PT1pPyJwb3NpdGlvbiB1bmF2YWlsYWJsZSI6InRpbWVvdXQiKTt0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXcmJiF0aGlzLl9sb2FkZWQmJnRoaXMuZml0V29ybGQoKSx0aGlzLmZpcmUoImxvY2F0aW9uZXJyb3IiLHtjb2RlOmksbWVzc2FnZToiR2VvbG9jYXRpb24gZXJyb3I6ICIrZSsiLiJ9KX0sX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IE0odC5jb29yZHMubGF0aXR1ZGUsdC5jb29yZHMubG9uZ2l0dWRlKSxlPWkudG9Cb3VuZHModC5jb29yZHMuYWNjdXJhY3kpLG49dGhpcy5fbG9jYXRlT3B0aW9ucztpZihuLnNldFZpZXcpe3ZhciBvPXRoaXMuZ2V0Qm91bmRzWm9vbShlKTt0aGlzLnNldFZpZXcoaSxuLm1heFpvb20/TWF0aC5taW4obyxuLm1heFpvb20pOm8pfXZhciBzPXtsYXRsbmc6aSxib3VuZHM6ZSx0aW1lc3RhbXA6dC50aW1lc3RhbXB9O2Zvcih2YXIgciBpbiB0LmNvb3JkcykibnVtYmVyIj09dHlwZW9mIHQuY29vcmRzW3JdJiYoc1tyXT10LmNvb3Jkc1tyXSk7dGhpcy5maXJlKCJsb2NhdGlvbmZvdW5kIixzKX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiB0aGlzO3ZhciBlPXRoaXNbdF09bmV3IGkodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luaXRFdmVudHMoITApLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBiZWluZyByZXVzZWQgYnkgYW5vdGhlciBpbnN0YW5jZSIpO3RyeXtkZWxldGUgdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkLGRlbGV0ZSB0aGlzLl9jb250YWluZXJJZH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQ9dm9pZCAwLHRoaXMuX2NvbnRhaW5lcklkPXZvaWQgMH12b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSx1dCh0aGlzLl9tYXBQYW5lKSx0aGlzLl9jbGVhckNvbnRyb2xQb3MmJnRoaXMuX2NsZWFyQ29udHJvbFBvcygpLHRoaXMuX2NsZWFySGFuZGxlcnMoKSx0aGlzLl9sb2FkZWQmJnRoaXMuZmlyZSgidW5sb2FkIik7dmFyIHQ7Zm9yKHQgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5yZW1vdmUoKTtmb3IodCBpbiB0aGlzLl9wYW5lcyl1dCh0aGlzLl9wYW5lc1t0XSk7cmV0dXJuIHRoaXMuX2xheWVycz1bXSx0aGlzLl9wYW5lcz1bXSxkZWxldGUgdGhpcy5fbWFwUGFuZSxkZWxldGUgdGhpcy5fcmVuZGVyZXIsdGhpc30sY3JlYXRlUGFuZTpmdW5jdGlvbih0LGkpe3ZhciBlPWh0KCJkaXYiLCJsZWFmbGV0LXBhbmUiKyh0PyIgbGVhZmxldC0iK3QucmVwbGFjZSgiUGFuZSIsIiIpKyItcGFuZSI6IiIpLGl8fHRoaXMuX21hcFBhbmUpO3JldHVybiB0JiYodGhpcy5fcGFuZXNbdF09ZSksZX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9sYXN0Q2VudGVyJiYhdGhpcy5fbW92ZWQoKT90aGlzLl9sYXN0Q2VudGVyOnRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX2dldENlbnRlckxheWVyUG9pbnQoKSl9LGdldFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQaXhlbEJvdW5kcygpO3JldHVybiBuZXcgVCh0aGlzLnVucHJvamVjdCh0LmdldEJvdHRvbUxlZnQoKSksdGhpcy51bnByb2plY3QodC5nZXRUb3BSaWdodCgpKSl9LGdldE1pblpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zLm1pblpvb20/dGhpcy5fbGF5ZXJzTWluWm9vbXx8MDp0aGlzLm9wdGlvbnMubWluWm9vbX0sZ2V0TWF4Wm9vbTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnMubWF4Wm9vbT92b2lkIDA9PT10aGlzLl9sYXllcnNNYXhab29tPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsaSxlKXt0PXoodCksZT13KGV8fFswLDBdKTt2YXIgbj10aGlzLmdldFpvb20oKXx8MCxvPXRoaXMuZ2V0TWluWm9vbSgpLHM9dGhpcy5nZXRNYXhab29tKCkscj10LmdldE5vcnRoV2VzdCgpLGE9dC5nZXRTb3V0aEVhc3QoKSxoPXRoaXMuZ2V0U2l6ZSgpLnN1YnRyYWN0KGUpLHU9Yih0aGlzLnByb2plY3QoYSxuKSx0aGlzLnByb2plY3QocixuKSkuZ2V0U2l6ZSgpLGw9Tmk/dGhpcy5vcHRpb25zLnpvb21TbmFwOjEsYz1oLngvdS54LF89aC55L3UueSxkPWk/TWF0aC5tYXgoYyxfKTpNYXRoLm1pbihjLF8pO3JldHVybiBuPXRoaXMuZ2V0U2NhbGVab29tKGQsbiksbCYmKG49TWF0aC5yb3VuZChuLyhsLzEwMCkpKihsLzEwMCksbj1pP01hdGguY2VpbChuL2wpKmw6TWF0aC5mbG9vcihuL2wpKmwpLE1hdGgubWF4KG8sTWF0aC5taW4ocyxuKSl9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZSYmIXRoaXMuX3NpemVDaGFuZ2VkfHwodGhpcy5fc2l6ZT1uZXcgeCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGh8fDAsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLl9nZXRUb3BMZWZ0UG9pbnQodCxpKTtyZXR1cm4gbmV3IFAoZSxlLmFkZCh0aGlzLmdldFNpemUoKSkpfSxnZXRQaXhlbE9yaWdpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5fcGl4ZWxPcmlnaW59LGdldFBpeGVsV29ybGRCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZ2V0UHJvamVjdGVkQm91bmRzKHZvaWQgMD09PXQ/dGhpcy5nZXRab29tKCk6dCl9LGdldFBhbmU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX3BhbmVzW3RdOnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCxpKXt2YXIgZT10aGlzLm9wdGlvbnMuY3JzO3JldHVybiBpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppLGUuc2NhbGUodCkvZS5zY2FsZShpKX0sZ2V0U2NhbGVab29tOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppO3ZhciBuPWUuem9vbSh0KmUuc2NhbGUoaSkpO3JldHVybiBpc05hTihuKT8xLzA6bn0scHJvamVjdDpmdW5jdGlvbih0LGkpe3JldHVybiBpPXZvaWQgMD09PWk/dGhpcy5fem9vbTppLHRoaXMub3B0aW9ucy5jcnMubGF0TG5nVG9Qb2ludChDKHQpLGkpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT12b2lkIDA9PT1pP3RoaXMuX3pvb206aSx0aGlzLm9wdGlvbnMuY3JzLnBvaW50VG9MYXRMbmcodyh0KSxpKX0sbGF5ZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXcodCkuYWRkKHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSk7cmV0dXJuIHRoaXMudW5wcm9qZWN0KGkpfSxsYXRMbmdUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvamVjdChDKHQpKS5fcm91bmQoKS5fc3VidHJhY3QodGhpcy5nZXRQaXhlbE9yaWdpbigpKX0sd3JhcExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy53cmFwTGF0TG5nKEModCkpfSx3cmFwTGF0TG5nQm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmdCb3VuZHMoeih0KSl9LGRpc3RhbmNlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZGlzdGFuY2UoQyh0KSxDKGkpKX0sY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHcodCkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sbGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHcodCkuYWRkKHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGNvbnRhaW5lclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh3KHQpKTtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcoaSl9LGxhdExuZ1RvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQodGhpcy5sYXRMbmdUb0xheWVyUG9pbnQoQyh0KSkpfSxtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdHQodCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2NvbnRhaW5lcj1ydCh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgbm90IGZvdW5kLiIpO2lmKGkuX2xlYWZsZXRfaWQpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIik7VihpLCJzY3JvbGwiLHRoaXMuX29uU2Nyb2xsLHRoaXMpLHRoaXMuX2NvbnRhaW5lcklkPW4oaSl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyO3RoaXMuX2ZhZGVBbmltYXRlZD10aGlzLm9wdGlvbnMuZmFkZUFuaW1hdGlvbiYmTmkscHQodCwibGVhZmxldC1jb250YWluZXIiKyhWaT8iIGxlYWZsZXQtdG91Y2giOiIiKSsoS2k/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhMaT8iIGxlYWZsZXQtb2xkaWUiOiIiKSsoa2k/IiBsZWFmbGV0LXNhZmFyaSI6IiIpKyh0aGlzLl9mYWRlQW5pbWF0ZWQ/IiBsZWFmbGV0LWZhZGUtYW5pbSI6IiIpKTt2YXIgaT1hdCh0LCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1pJiYicmVsYXRpdmUiIT09aSYmImZpeGVkIiE9PWkmJih0LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMuX2luaXRQYW5lcygpLHRoaXMuX2luaXRDb250cm9sUG9zJiZ0aGlzLl9pbml0Q29udHJvbFBvcygpfSxfaW5pdFBhbmVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGFuZXM9e307dGhpcy5fcGFuZVJlbmRlcmVycz17fSx0aGlzLl9tYXBQYW5lPXRoaXMuY3JlYXRlUGFuZSgibWFwUGFuZSIsdGhpcy5fY29udGFpbmVyKSxMdCh0aGlzLl9tYXBQYW5lLG5ldyB4KDAsMCkpLHRoaXMuY3JlYXRlUGFuZSgidGlsZVBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoInNoYWRvd1BhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoIm92ZXJsYXlQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJtYXJrZXJQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJ0b29sdGlwUGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgicG9wdXBQYW5lIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChwdCh0Lm1hcmtlclBhbmUsImxlYWZsZXQtem9vbS1oaWRlIikscHQodC5zaGFkb3dQYW5lLCJsZWFmbGV0LXpvb20taGlkZSIpKX0sX3Jlc2V0VmlldzpmdW5jdGlvbih0LGkpe0x0KHRoaXMuX21hcFBhbmUsbmV3IHgoMCwwKSk7dmFyIGU9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsaT10aGlzLl9saW1pdFpvb20oaSksdGhpcy5maXJlKCJ2aWV3cHJlcmVzZXQiKTt2YXIgbj10aGlzLl96b29tIT09aTt0aGlzLl9tb3ZlU3RhcnQobiwhMSkuX21vdmUodCxpKS5fbW92ZUVuZChuKSx0aGlzLmZpcmUoInZpZXdyZXNldCIpLGUmJnRoaXMuZmlyZSgibG9hZCIpfSxfbW92ZVN0YXJ0OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IiksaXx8dGhpcy5maXJlKCJtb3Zlc3RhcnQiKSx0aGlzfSxfbW92ZTpmdW5jdGlvbih0LGksZSl7dm9pZCAwPT09aSYmKGk9dGhpcy5fem9vbSk7dmFyIG49dGhpcy5fem9vbSE9PWk7cmV0dXJuIHRoaXMuX3pvb209aSx0aGlzLl9sYXN0Q2VudGVyPXQsdGhpcy5fcGl4ZWxPcmlnaW49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCksKG58fGUmJmUucGluY2gpJiZ0aGlzLmZpcmUoInpvb20iLGUpLHRoaXMuZmlyZSgibW92ZSIsZSl9LF9tb3ZlRW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLmZpcmUoInpvb21lbmQiKSx0aGlzLmZpcmUoIm1vdmVlbmQiKX0sX3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLl9mbHlUb0ZyYW1lKSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzfSxfcmF3UGFuQnk6ZnVuY3Rpb24odCl7THQodGhpcy5fbWFwUGFuZSx0aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3QodCkpfSxfZ2V0Wm9vbVNwYW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRNYXhab29tKCktdGhpcy5nZXRNaW5ab29tKCl9LF9wYW5JbnNpZGVNYXhCb3VuZHM6ZnVuY3Rpb24oKXt0aGlzLl9lbmZvcmNpbmdCb3VuZHN8fHRoaXMucGFuSW5zaWRlQm91bmRzKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpfSxfY2hlY2tJZkxvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC4iKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24odCl7dGhpcy5fdGFyZ2V0cz17fSx0aGlzLl90YXJnZXRzW24odGhpcy5fY29udGFpbmVyKV09dGhpczt2YXIgaT10P3E6VjtpKHRoaXMuX2NvbnRhaW5lciwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlbW92ZSBjb250ZXh0bWVudSBrZXlwcmVzcyIsdGhpcy5faGFuZGxlRE9NRXZlbnQsdGhpcyksdGhpcy5vcHRpb25zLnRyYWNrUmVzaXplJiZpKHdpbmRvdywicmVzaXplIix0aGlzLl9vblJlc2l6ZSx0aGlzKSxOaSYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcywibW92ZWVuZCIsdGhpcy5fb25Nb3ZlRW5kKX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7Zyh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PWYoZnVuY3Rpb24oKXt0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6ITB9KX0sdGhpcyl9LF9vblNjcm9sbDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A9MCx0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdD0wfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO01hdGgubWF4KE1hdGguYWJzKHQueCksTWF0aC5hYnModC55KSk+PXRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0JiZ0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0aGlzLmdldFpvb20oKSl9LF9maW5kRXZlbnRUYXJnZXRzOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG89W10scz0ibW91c2VvdXQiPT09aXx8Im1vdXNlb3ZlciI9PT1pLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxhPSExO3I7KXtpZigoZT10aGlzLl90YXJnZXRzW24ocildKSYmKCJjbGljayI9PT1pfHwicHJlY2xpY2siPT09aSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGUpKXthPSEwO2JyZWFrfWlmKGUmJmUubGlzdGVucyhpLCEwKSl7aWYocyYmIW90KHIsdCkpYnJlYWs7aWYoby5wdXNoKGUpLHMpYnJlYWt9aWYocj09PXRoaXMuX2NvbnRhaW5lcilicmVhaztyPXIucGFyZW50Tm9kZX1yZXR1cm4gby5sZW5ndGh8fGF8fHN8fCFvdChyLHQpfHwobz1bdGhpc10pLG99LF9oYW5kbGVET01FdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFudCh0KSl7dmFyIGk9dC50eXBlOyJtb3VzZWRvd24iIT09aSYmImtleXByZXNzIiE9PWl8fHp0KHQudGFyZ2V0fHx0LnNyY0VsZW1lbnQpLHRoaXMuX2ZpcmVET01FdmVudCh0LGkpfX0sX21vdXNlRXZlbnRzOlsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXSxfZmlyZURPTUV2ZW50OmZ1bmN0aW9uKHQsZSxuKXtpZigiY2xpY2siPT09dC50eXBlKXt2YXIgbz1pKHt9LHQpO28udHlwZT0icHJlY2xpY2siLHRoaXMuX2ZpcmVET01FdmVudChvLG8udHlwZSxuKX1pZighdC5fc3RvcHBlZCYmKG49KG58fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpKSkubGVuZ3RoKXt2YXIgcz1uWzBdOyJjb250ZXh0bWVudSI9PT1lJiZzLmxpc3RlbnMoZSwhMCkmJiQodCk7dmFyIHI9e29yaWdpbmFsRXZlbnQ6dH07aWYoImtleXByZXNzIiE9PXQudHlwZSl7dmFyIGE9cy5nZXRMYXRMbmcmJighcy5fcmFkaXVzfHxzLl9yYWRpdXM8PTEwKTtyLmNvbnRhaW5lclBvaW50PWE/dGhpcy5sYXRMbmdUb0NvbnRhaW5lclBvaW50KHMuZ2V0TGF0TG5nKCkpOnRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksci5sYXllclBvaW50PXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoci5jb250YWluZXJQb2ludCksci5sYXRsbmc9YT9zLmdldExhdExuZygpOnRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHIubGF5ZXJQb2ludCl9Zm9yKHZhciBoPTA7aDxuLmxlbmd0aDtoKyspaWYobltoXS5maXJlKGUsciwhMCksci5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkfHwhMT09PW5baF0ub3B0aW9ucy5idWJibGluZ01vdXNlRXZlbnRzJiYtMSE9PWQodGhpcy5fbW91c2VFdmVudHMsZSkpcmV0dXJufX0sX2RyYWdnYWJsZU1vdmVkOmZ1bmN0aW9uKHQpe3JldHVybih0PXQuZHJhZ2dpbmcmJnQuZHJhZ2dpbmcuZW5hYmxlZCgpP3Q6dGhpcykuZHJhZ2dpbmcmJnQuZHJhZ2dpbmcubW92ZWQoKXx8dGhpcy5ib3hab29tJiZ0aGlzLmJveFpvb20ubW92ZWQoKX0sX2NsZWFySGFuZGxlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxpPXRoaXMuX2hhbmRsZXJzLmxlbmd0aDt0PGk7dCsrKXRoaXMuX2hhbmRsZXJzW3RdLmRpc2FibGUoKX0sd2hlblJlYWR5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90LmNhbGwoaXx8dGhpcyx7dGFyZ2V0OnRoaXN9KTp0aGlzLm9uKCJsb2FkIix0LGkpLHRoaXN9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIFB0KHRoaXMuX21hcFBhbmUpfHxuZXcgeCgwLDApfSxfbW92ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRNYXBQYW5lUG9zKCk7cmV0dXJuIHQmJiF0LmVxdWFscyhbMCwwXSl9LF9nZXRUb3BMZWZ0UG9pbnQ6ZnVuY3Rpb24odCxpKXtyZXR1cm4odCYmdm9pZCAwIT09aT90aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0LGkpOnRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1BpeGVsT3JpZ2luOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxpKS5fc3VidHJhY3QoZSkuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbihlLGkpO3JldHVybiB0aGlzLnByb2plY3QodCxpKS5fc3VidHJhY3Qobil9LF9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzOmZ1bmN0aW9uKHQsaSxlKXt2YXIgbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbihlLGkpO3JldHVybiBiKFt0aGlzLnByb2plY3QodC5nZXRTb3V0aFdlc3QoKSxpKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhXZXN0KCksaSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldFNvdXRoRWFzdCgpLGkpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXROb3J0aEVhc3QoKSxpKS5fc3VidHJhY3QobildKX0sX2dldENlbnRlckxheWVyUG9pbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0aGlzLmdldFNpemUoKS5fZGl2aWRlQnkoMikpfSxfZ2V0Q2VudGVyT2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludCh0KS5zdWJ0cmFjdCh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxfbGltaXRDZW50ZXI6ZnVuY3Rpb24odCxpLGUpe2lmKCFlKXJldHVybiB0O3ZhciBuPXRoaXMucHJvamVjdCh0LGkpLG89dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMikscz1uZXcgUChuLnN1YnRyYWN0KG8pLG4uYWRkKG8pKSxyPXRoaXMuX2dldEJvdW5kc09mZnNldChzLGUsaSk7cmV0dXJuIHIucm91bmQoKS5lcXVhbHMoWzAsMF0pP3Q6dGhpcy51bnByb2plY3Qobi5hZGQociksaSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGkpe2lmKCFpKXJldHVybiB0O3ZhciBlPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxuPW5ldyBQKGUubWluLmFkZCh0KSxlLm1heC5hZGQodCkpO3JldHVybiB0LmFkZCh0aGlzLl9nZXRCb3VuZHNPZmZzZXQobixpKSl9LF9nZXRCb3VuZHNPZmZzZXQ6ZnVuY3Rpb24odCxpLGUpe3ZhciBuPWIodGhpcy5wcm9qZWN0KGkuZ2V0Tm9ydGhFYXN0KCksZSksdGhpcy5wcm9qZWN0KGkuZ2V0U291dGhXZXN0KCksZSkpLG89bi5taW4uc3VidHJhY3QodC5taW4pLHM9bi5tYXguc3VidHJhY3QodC5tYXgpO3JldHVybiBuZXcgeCh0aGlzLl9yZWJvdW5kKG8ueCwtcy54KSx0aGlzLl9yZWJvdW5kKG8ueSwtcy55KSl9LF9yZWJvdW5kOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQraT4wP01hdGgucm91bmQodC1pKS8yOk1hdGgubWF4KDAsTWF0aC5jZWlsKHQpKS1NYXRoLm1heCgwLE1hdGguZmxvb3IoaSkpfSxfbGltaXRab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZ2V0TWluWm9vbSgpLGU9dGhpcy5nZXRNYXhab29tKCksbj1OaT90aGlzLm9wdGlvbnMuem9vbVNuYXA6MTtyZXR1cm4gbiYmKHQ9TWF0aC5yb3VuZCh0L24pKm4pLE1hdGgubWF4KGksTWF0aC5taW4oZSx0KSl9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJtb3ZlIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXttdCh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXBhbi1hbmltIiksdGhpcy5maXJlKCJtb3ZlZW5kIil9LF90cnlBbmltYXRlZFBhbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fdHJ1bmMoKTtyZXR1cm4hKCEwIT09KGkmJmkuYW5pbWF0ZSkmJiF0aGlzLmdldFNpemUoKS5jb250YWlucyhlKSkmJih0aGlzLnBhbkJ5KGUsaSksITApfSxfY3JlYXRlQW5pbVByb3h5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJveHk9aHQoImRpdiIsImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkIik7dGhpcy5fcGFuZXMubWFwUGFuZS5hcHBlbmRDaGlsZCh0KSx0aGlzLm9uKCJ6b29tYW5pbSIsZnVuY3Rpb24odCl7dmFyIGk9cGUsZT10aGlzLl9wcm94eS5zdHlsZVtpXTt3dCh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGU9PT10aGlzLl9wcm94eS5zdHlsZVtpXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKCJsb2FkIG1vdmVlbmQiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRDZW50ZXIoKSxpPXRoaXMuZ2V0Wm9vbSgpO3d0KHRoaXMuX3Byb3h5LHRoaXMucHJvamVjdCh0LGkpLHRoaXMuZ2V0Wm9vbVNjYWxlKGksMSkpfSx0aGlzKSx0aGlzLl9vbigidW5sb2FkIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe3V0KHRoaXMuX3Byb3h5KSxkZWxldGUgdGhpcy5fcHJveHl9LF9jYXRjaFRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nWm9vbSYmdC5wcm9wZXJ0eU5hbWUuaW5kZXhPZigidHJhbnNmb3JtIik+PTAmJnRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQoKX0sX25vdGhpbmdUb0FuaW1hdGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLmxlbmd0aH0sX3RyeUFuaW1hdGVkWm9vbTpmdW5jdGlvbih0LGksZSl7aWYodGhpcy5fYW5pbWF0aW5nWm9vbSlyZXR1cm4hMDtpZihlPWV8fHt9LCF0aGlzLl96b29tQW5pbWF0ZWR8fCExPT09ZS5hbmltYXRlfHx0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCl8fE1hdGguYWJzKGktdGhpcy5fem9vbSk+dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoaSksbz10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2RpdmlkZUJ5KDEtMS9uKTtyZXR1cm4hKCEwIT09ZS5hbmltYXRlJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnMobykpJiYoZihmdW5jdGlvbigpe3RoaXMuX21vdmVTdGFydCghMCwhMSkuX2FuaW1hdGVab29tKHQsaSwhMCl9LHRoaXMpLCEwKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsaSxuLG8pe3RoaXMuX21hcFBhbmUmJihuJiYodGhpcy5fYW5pbWF0aW5nWm9vbT0hMCx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWkscHQodGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSksdGhpcy5maXJlKCJ6b29tYW5pbSIse2NlbnRlcjp0LHpvb206aSxub1VwZGF0ZTpvfSksc2V0VGltZW91dChlKHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQsdGhpcyksMjUwKSl9LF9vblpvb21UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nWm9vbSYmKHRoaXMuX21hcFBhbmUmJm10KHRoaXMuX21hcFBhbmUsImxlYWZsZXQtem9vbS1hbmltIiksdGhpcy5fYW5pbWF0aW5nWm9vbT0hMSx0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tKSxmKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZUVuZCghMCl9LHRoaXMpKX19KSxQZT12LmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246InRvcHJpZ2h0In0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtsKHRoaXMsdCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbn0sc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO3JldHVybiBpJiZpLnJlbW92ZUNvbnRyb2wodGhpcyksdGhpcy5vcHRpb25zLnBvc2l0aW9uPXQsaSYmaS5hZGRDb250cm9sKHRoaXMpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGFkZFRvOmZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQ7dmFyIGk9dGhpcy5fY29udGFpbmVyPXRoaXMub25BZGQodCksZT10aGlzLmdldFBvc2l0aW9uKCksbj10Ll9jb250cm9sQ29ybmVyc1tlXTtyZXR1cm4gcHQoaSwibGVhZmxldC1jb250cm9sIiksLTEhPT1lLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGksbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXA/KHV0KHRoaXMuX2NvbnRhaW5lciksdGhpcy5vblJlbW92ZSYmdGhpcy5vblJlbW92ZSh0aGlzLl9tYXApLHRoaXMuX21hcD1udWxsLHRoaXMpOnRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiZ0JiZ0LnNjcmVlblg+MCYmdC5zY3JlZW5ZPjAmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pLGJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUGUodCl9O0xlLmluY2x1ZGUoe2FkZENvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkVG8odGhpcyksdGhpc30scmVtb3ZlQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW1vdmUoKSx0aGlzfSxfaW5pdENvbnRyb2xQb3M6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbyl7dmFyIHM9ZSt0KyIgIitlK287aVt0K29dPWh0KCJkaXYiLHMsbil9dmFyIGk9dGhpcy5fY29udHJvbENvcm5lcnM9e30sZT0ibGVhZmxldC0iLG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1odCgiZGl2IixlKyJjb250cm9sLWNvbnRhaW5lciIsdGhpcy5fY29udGFpbmVyKTt0KCJ0b3AiLCJsZWZ0IiksdCgidG9wIiwicmlnaHQiKSx0KCJib3R0b20iLCJsZWZ0IiksdCgiYm90dG9tIiwicmlnaHQiKX0sX2NsZWFyQ29udHJvbFBvczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9jb250cm9sQ29ybmVycyl1dCh0aGlzLl9jb250cm9sQ29ybmVyc1t0XSk7dXQodGhpcy5fY29udHJvbENvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRyb2xDb3JuZXJzLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyfX0pO3ZhciBUZT1QZS5leHRlbmQoe29wdGlvbnM6e2NvbGxhcHNlZDohMCxwb3NpdGlvbjoidG9wcmlnaHQiLGF1dG9aSW5kZXg6ITAsaGlkZVNpbmdsZUJhc2U6ITEsc29ydExheWVyczohMSxzb3J0RnVuY3Rpb246ZnVuY3Rpb24odCxpLGUsbil7cmV0dXJuIGU8bj8tMTpuPGU/MTowfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGksZSl7bCh0aGlzLGUpLHRoaXMuX2xheWVyQ29udHJvbElucHV0cz1bXSx0aGlzLl9sYXllcnM9W10sdGhpcy5fbGFzdFpJbmRleD0wLHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITE7Zm9yKHZhciBuIGluIHQpdGhpcy5fYWRkTGF5ZXIodFtuXSxuKTtmb3IobiBpbiBpKXRoaXMuX2FkZExheWVyKGlbbl0sbiwhMCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9tYXA9dCx0Lm9uKCJ6b29tZW5kIix0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLHRoaXMpO2Zvcih2YXIgaT0wO2k8dGhpcy5fbGF5ZXJzLmxlbmd0aDtpKyspdGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9uKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpO3JldHVybiB0aGlzLl9jb250YWluZXJ9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiBQZS5wcm90b3R5cGUuYWRkVG8uY2FsbCh0aGlzLHQpLHRoaXMuX2V4cGFuZElmTm90Q29sbGFwc2VkKCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiem9vbWVuZCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2xheWVycy5sZW5ndGg7dCsrKXRoaXMuX2xheWVyc1t0XS5sYXllci5vZmYoImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyl9LGFkZEJhc2VMYXllcjpmdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGkpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsaSwhMCksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3Qub2ZmKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpO3ZhciBpPXRoaXMuX2dldExheWVyKG4odCkpO3JldHVybiBpJiZ0aGlzLl9sYXllcnMuc3BsaWNlKHRoaXMuX2xheWVycy5pbmRleE9mKGkpLDEpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxleHBhbmQ6ZnVuY3Rpb24oKXtwdCh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiKSx0aGlzLl9mb3JtLnN0eWxlLmhlaWdodD1udWxsO3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkueS0odGhpcy5fY29udGFpbmVyLm9mZnNldFRvcCs1MCk7cmV0dXJuIHQ8dGhpcy5fZm9ybS5jbGllbnRIZWlnaHQ/KHB0KHRoaXMuX2Zvcm0sImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIiksdGhpcy5fZm9ybS5zdHlsZS5oZWlnaHQ9dCsicHgiKTptdCh0aGlzLl9mb3JtLCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhciIpLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKSx0aGlzfSxjb2xsYXBzZTpmdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIixpPXRoaXMuX2NvbnRhaW5lcj1odCgiZGl2Iix0KSxlPXRoaXMub3B0aW9ucy5jb2xsYXBzZWQ7aS5zZXRBdHRyaWJ1dGUoImFyaWEtaGFzcG9wdXAiLCEwKSxKKGkpLFgoaSk7dmFyIG49dGhpcy5fZm9ybT1odCgiZm9ybSIsdCsiLWxpc3QiKTtlJiYodGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5jb2xsYXBzZSx0aGlzKSxUaXx8VihpLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBvPXRoaXMuX2xheWVyc0xpbms9aHQoImEiLHQrIi10b2dnbGUiLGkpO28uaHJlZj0iIyIsby50aXRsZT0iTGF5ZXJzIixWaT8oVihvLCJjbGljayIsUSksVihvLCJjbGljayIsdGhpcy5leHBhbmQsdGhpcykpOlYobywiZm9jdXMiLHRoaXMuZXhwYW5kLHRoaXMpLGV8fHRoaXMuZXhwYW5kKCksdGhpcy5fYmFzZUxheWVyc0xpc3Q9aHQoImRpdiIsdCsiLWJhc2UiLG4pLHRoaXMuX3NlcGFyYXRvcj1odCgiZGl2Iix0KyItc2VwYXJhdG9yIixuKSx0aGlzLl9vdmVybGF5c0xpc3Q9aHQoImRpdiIsdCsiLW92ZXJsYXlzIixuKSxpLmFwcGVuZENoaWxkKG4pfSxfZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTx0aGlzLl9sYXllcnMubGVuZ3RoO2krKylpZih0aGlzLl9sYXllcnNbaV0mJm4odGhpcy5fbGF5ZXJzW2ldLmxheWVyKT09PXQpcmV0dXJuIHRoaXMuX2xheWVyc1tpXX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsaSxuKXt0aGlzLl9tYXAmJnQub24oImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyksdGhpcy5fbGF5ZXJzLnB1c2goe2xheWVyOnQsbmFtZTppLG92ZXJsYXk6bn0pLHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzJiZ0aGlzLl9sYXllcnMuc29ydChlKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5zb3J0RnVuY3Rpb24odC5sYXllcixpLmxheWVyLHQubmFtZSxpLm5hbWUpfSx0aGlzKSksdGhpcy5vcHRpb25zLmF1dG9aSW5kZXgmJnQuc2V0WkluZGV4JiYodGhpcy5fbGFzdFpJbmRleCsrLHQuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpKSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztsdCh0aGlzLl9iYXNlTGF5ZXJzTGlzdCksbHQodGhpcy5fb3ZlcmxheXNMaXN0KSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W107dmFyIHQsaSxlLG4sbz0wO2ZvcihlPTA7ZTx0aGlzLl9sYXllcnMubGVuZ3RoO2UrKyluPXRoaXMuX2xheWVyc1tlXSx0aGlzLl9hZGRJdGVtKG4pLGk9aXx8bi5vdmVybGF5LHQ9dHx8IW4ub3ZlcmxheSxvKz1uLm92ZXJsYXk/MDoxO3JldHVybiB0aGlzLm9wdGlvbnMuaGlkZVNpbmdsZUJhc2UmJih0PXQmJm8+MSx0aGlzLl9iYXNlTGF5ZXJzTGlzdC5zdHlsZS5kaXNwbGF5PXQ/IiI6Im5vbmUiKSx0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheT1pJiZ0PyIiOiJub25lIix0aGlzfSxfb25MYXllckNoYW5nZTpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGluZ0NsaWNrfHx0aGlzLl91cGRhdGUoKTt2YXIgaT10aGlzLl9nZXRMYXllcihuKHQudGFyZ2V0KSksZT1pLm92ZXJsYXk/ImFkZCI9PT10LnR5cGU/Im92ZXJsYXlhZGQiOiJvdmVybGF5cmVtb3ZlIjoiYWRkIj09PXQudHlwZT8iYmFzZWxheWVyY2hhbmdlIjpudWxsO2UmJnRoaXMuX21hcC5maXJlKGUsaSl9LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT0nPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIgbmFtZT0iJyt0KyciJysoaT8nIGNoZWNrZWQ9ImNoZWNrZWQiJzoiIikrIi8+IixuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBuLmlubmVySFRNTD1lLG4uZmlyc3RDaGlsZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpLG89dGhpcy5fbWFwLmhhc0xheWVyKHQubGF5ZXIpO3Qub3ZlcmxheT8oKGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkudHlwZT0iY2hlY2tib3giLGkuY2xhc3NOYW1lPSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yIixpLmRlZmF1bHRDaGVja2VkPW8pOmk9dGhpcy5fY3JlYXRlUmFkaW9FbGVtZW50KCJsZWFmbGV0LWJhc2UtbGF5ZXJzIixvKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMucHVzaChpKSxpLmxheWVySWQ9bih0LmxheWVyKSxWKGksImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyk7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3MuaW5uZXJIVE1MPSIgIit0Lm5hbWU7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuYXBwZW5kQ2hpbGQociksci5hcHBlbmRDaGlsZChpKSxyLmFwcGVuZENoaWxkKHMpLCh0Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0KS5hcHBlbmRDaGlsZChlKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksZX0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe3ZhciB0LGksZT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj1bXSxvPVtdO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITA7Zm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pdD1lW3NdLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmNoZWNrZWQ/bi5wdXNoKGkpOnQuY2hlY2tlZHx8by5wdXNoKGkpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspdGhpcy5fbWFwLmhhc0xheWVyKG9bc10pJiZ0aGlzLl9tYXAucmVtb3ZlTGF5ZXIob1tzXSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIobltzXSl8fHRoaXMuX21hcC5hZGRMYXllcihuW3NdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfY2hlY2tEaXNhYmxlZExheWVyczpmdW5jdGlvbigpe2Zvcih2YXIgdCxpLGU9dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLG49dGhpcy5fbWFwLmdldFpvb20oKSxvPWUubGVuZ3RoLTE7bz49MDtvLS0pdD1lW29dLGk9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmRpc2FibGVkPXZvaWQgMCE9PWkub3B0aW9ucy5taW5ab29tJiZuPGkub3B0aW9ucy5taW5ab29tfHx2b2lkIDAhPT1pLm9wdGlvbnMubWF4Wm9vbSYmbj5pLm9wdGlvbnMubWF4Wm9vbX0sX2V4cGFuZElmTm90Q29sbGFwc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmIXRoaXMub3B0aW9ucy5jb2xsYXBzZWQmJnRoaXMuZXhwYW5kKCksdGhpc30sX2V4cGFuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZCgpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsYXBzZSgpfX0pLHplPVBlLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246InRvcGxlZnQiLHpvb21JblRleHQ6IisiLHpvb21JblRpdGxlOiJab29tIGluIix6b29tT3V0VGV4dDoiJiN4MjIxMjsiLHpvb21PdXRUaXRsZToiWm9vbSBvdXQifSxvbkFkZDpmdW5jdGlvbih0KXt2YXIgaT0ibGVhZmxldC1jb250cm9sLXpvb20iLGU9aHQoImRpdiIsaSsiIGxlYWZsZXQtYmFyIiksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tSW5UZXh0LG4uem9vbUluVGl0bGUsaSsiLWluIixlLHRoaXMuX3pvb21JbiksdGhpcy5fem9vbU91dEJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tT3V0VGV4dCxuLnpvb21PdXRUaXRsZSxpKyItb3V0IixlLHRoaXMuX3pvb21PdXQpLHRoaXMuX3VwZGF0ZURpc2FibGVkKCksdC5vbigiem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKSxlfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZigiem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMCx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHRoaXN9LF96b29tSW46ZnVuY3Rpb24odCl7IXRoaXMuX2Rpc2FibGVkJiZ0aGlzLl9tYXAuX3pvb208dGhpcy5fbWFwLmdldE1heFpvb20oKSYmdGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF96b29tT3V0OmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPnRoaXMuX21hcC5nZXRNaW5ab29tKCkmJnRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSoodC5zaGlmdEtleT8zOjEpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGksZSxuLG8pe3ZhciBzPWh0KCJhIixlLG4pO3JldHVybiBzLmlubmVySFRNTD10LHMuaHJlZj0iIyIscy50aXRsZT1pLHMuc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIikscy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGkpLEoocyksVihzLCJjbGljayIsUSksVihzLCJjbGljayIsbyx0aGlzKSxWKHMsImNsaWNrIix0aGlzLl9yZWZvY3VzT25NYXAsdGhpcyksc30sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGk9ImxlYWZsZXQtZGlzYWJsZWQiO210KHRoaXMuX3pvb21JbkJ1dHRvbixpKSxtdCh0aGlzLl96b29tT3V0QnV0dG9uLGkpLCh0aGlzLl9kaXNhYmxlZHx8dC5fem9vbT09PXQuZ2V0TWluWm9vbSgpKSYmcHQodGhpcy5fem9vbU91dEJ1dHRvbixpKSwodGhpcy5fZGlzYWJsZWR8fHQuX3pvb209PT10LmdldE1heFpvb20oKSkmJnB0KHRoaXMuX3pvb21JbkJ1dHRvbixpKX19KTtMZS5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksTGUuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyB6ZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSk7dmFyIE1lPVBlLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbWxlZnQiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBpPWh0KCJkaXYiLCJsZWFmbGV0LWNvbnRyb2wtc2NhbGUiKSxlPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5fYWRkU2NhbGVzKGUsImxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lIixpKSx0Lm9uKGUudXBkYXRlV2hlbklkbGU/Im1vdmVlbmQiOiJtb3ZlIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKX0sX2FkZFNjYWxlczpmdW5jdGlvbih0LGksZSl7dC5tZXRyaWMmJih0aGlzLl9tU2NhbGU9aHQoImRpdiIsaSxlKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1odCgiZGl2IixpLGUpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxpPXQuZ2V0U2l6ZSgpLnkvMixlPXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGldKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxpXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyhlKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRSb3VuZE51bSh0KSxlPWk8MWUzP2krIiBtIjppLzFlMysiIGttIjt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZSxpL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGksZSxuLG89My4yODA4Mzk5KnQ7bz41MjgwPyhpPW8vNTI4MCxlPXRoaXMuX2dldFJvdW5kTnVtKGkpLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxlKyIgbWkiLGUvaSkpOihuPXRoaXMuX2dldFJvdW5kTnVtKG8pLHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSxuKyIgZnQiLG4vbykpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxpLGUpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqZSkrInB4Iix0LmlubmVySFRNTD1pfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxlPXQvaTtyZXR1cm4gZT1lPj0xMD8xMDplPj01PzU6ZT49Mz8zOmU+PTI/MjoxLGkqZX19KSxDZT1QZS5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwczovL2xlYWZsZXRqcy5jb20iIHRpdGxlPSJBIEpTIGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHMiPkxlYWZsZXQ8L2E+J30saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtsKHRoaXMsdCksdGhpcy5fYXR0cmlidXRpb25zPXt9fSxvbkFkZDpmdW5jdGlvbih0KXt0LmF0dHJpYnV0aW9uQ29udHJvbD10aGlzLHRoaXMuX2NvbnRhaW5lcj1odCgiZGl2IiwibGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIiksSih0aGlzLl9jb250YWluZXIpO2Zvcih2YXIgaSBpbiB0Ll9sYXllcnMpdC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQuX2xheWVyc1tpXS5nZXRBdHRyaWJ1dGlvbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdfHwodGhpcy5fYXR0cmlidXRpb25zW3RdPTApLHRoaXMuX2F0dHJpYnV0aW9uc1t0XSsrLHRoaXMuX3VwZGF0ZSgpLHRoaXMpOnRoaXN9LHJlbW92ZUF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF0mJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF0tLSx0aGlzLl91cGRhdGUoKSksdGhpcyk6dGhpc30sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9W107Zm9yKHZhciBpIGluIHRoaXMuX2F0dHJpYnV0aW9ucyl0aGlzLl9hdHRyaWJ1dGlvbnNbaV0mJnQucHVzaChpKTt2YXIgZT1bXTt0aGlzLm9wdGlvbnMucHJlZml4JiZlLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCksdC5sZW5ndGgmJmUucHVzaCh0LmpvaW4oIiwgIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9ZS5qb2luKCIgfCAiKX19fSk7TGUubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxMZS5hZGRJbml0SG9vayhmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wmJihuZXcgQ2UpLmFkZFRvKHRoaXMpfSk7UGUuTGF5ZXJzPVRlLFBlLlpvb209emUsUGUuU2NhbGU9TWUsUGUuQXR0cmlidXRpb249Q2UsYmUubGF5ZXJzPWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IFRlKHQsaSxlKX0sYmUuem9vbT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHplKHQpfSxiZS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE1lKHQpfSxiZS5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IENlKHQpfTt2YXIgWmU9di5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkP3RoaXM6KHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5hZGRIb29rcygpLHRoaXMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/KHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpLHRoaXMpOnRoaXN9LGVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9fSk7WmUuYWRkVG89ZnVuY3Rpb24odCxpKXtyZXR1cm4gdC5hZGRIYW5kbGVyKGksdGhpcyksdGhpc307dmFyIFNlLEVlPXtFdmVudHM6aGl9LGtlPVZpPyJ0b3VjaHN0YXJ0IG1vdXNlZG93biI6Im1vdXNlZG93biIsQWU9e21vdXNlZG93bjoibW91c2V1cCIsdG91Y2hzdGFydDoidG91Y2hlbmQiLHBvaW50ZXJkb3duOiJ0b3VjaGVuZCIsTVNQb2ludGVyRG93bjoidG91Y2hlbmQifSxJZT17bW91c2Vkb3duOiJtb3VzZW1vdmUiLHRvdWNoc3RhcnQ6InRvdWNobW92ZSIscG9pbnRlcmRvd246InRvdWNobW92ZSIsTVNQb2ludGVyRG93bjoidG91Y2htb3ZlIn0sQmU9dWkuZXh0ZW5kKHtvcHRpb25zOntjbGlja1RvbGVyYW5jZTozfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSxlLG4pe2wodGhpcyxuKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0PWl8fHQsdGhpcy5fcHJldmVudE91dGxpbmU9ZX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZHx8KFYodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LGtlLHRoaXMuX29uRG93bix0aGlzKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJihCZS5fZHJhZ2dpbmc9PT10aGlzJiZ0aGlzLmZpbmlzaERyYWcoKSxxKHRoaXMuX2RyYWdTdGFydFRhcmdldCxrZSx0aGlzLl9vbkRvd24sdGhpcyksdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMSl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYoIXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmKHRoaXMuX21vdmVkPSExLCFkdCh0aGlzLl9lbGVtZW50LCJsZWFmbGV0LXpvb20tYW5pbSIpJiYhKEJlLl9kcmFnZ2luZ3x8dC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbiYmIXQudG91Y2hlc3x8KEJlLl9kcmFnZ2luZz10aGlzLHRoaXMuX3ByZXZlbnRPdXRsaW5lJiZ6dCh0aGlzLl9lbGVtZW50KSxidCgpLG1pKCksdGhpcy5fbW92aW5nKSkpKXt0aGlzLmZpcmUoImRvd24iKTt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKSxWKGRvY3VtZW50LEllW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLFYoZG9jdW1lbnQsQWVbdC50eXBlXSx0aGlzLl9vblVwLHRoaXMpfX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdC5fc2ltdWxhdGVkJiZ0aGlzLl9lbmFibGVkKWlmKHQudG91Y2hlcyYmdC50b3VjaGVzLmxlbmd0aD4xKXRoaXMuX21vdmVkPSEwO2Vsc2V7dmFyIGk9dC50b3VjaGVzJiYxPT09dC50b3VjaGVzLmxlbmd0aD90LnRvdWNoZXNbMF06dCxlPW5ldyB4KGkuY2xpZW50WCxpLmNsaWVudFkpLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9pbnQpOyhlLnh8fGUueSkmJihNYXRoLmFicyhlLngpK01hdGguYWJzKGUueSk8dGhpcy5vcHRpb25zLmNsaWNrVG9sZXJhbmNlfHwoJCh0KSx0aGlzLl9tb3ZlZHx8KHRoaXMuZmlyZSgiZHJhZ3N0YXJ0IiksdGhpcy5fbW92ZWQ9ITAsdGhpcy5fc3RhcnRQb3M9UHQodGhpcy5fZWxlbWVudCkuc3VidHJhY3QoZSkscHQoZG9jdW1lbnQuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCx3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlJiZ0aGlzLl9sYXN0VGFyZ2V0IGluc3RhbmNlb2YgU1ZHRWxlbWVudEluc3RhbmNlJiYodGhpcy5fbGFzdFRhcmdldD10aGlzLl9sYXN0VGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSxwdCh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLGcodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX2FuaW1SZXF1ZXN0PWYodGhpcy5fdXBkYXRlUG9zaXRpb24sdGhpcywhMCkpKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXtvcmlnaW5hbEV2ZW50OnRoaXMuX2xhc3RFdmVudH07dGhpcy5maXJlKCJwcmVkcmFnIix0KSxMdCh0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKCJkcmFnIix0KX0sX29uVXA6ZnVuY3Rpb24odCl7IXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmdGhpcy5maW5pc2hEcmFnKCl9LGZpbmlzaERyYWc6ZnVuY3Rpb24oKXttdChkb2N1bWVudC5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG10KHRoaXMuX2xhc3RUYXJnZXQsImxlYWZsZXQtZHJhZy10YXJnZXQiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpO2Zvcih2YXIgdCBpbiBJZSlxKGRvY3VtZW50LEllW3RdLHRoaXMuX29uTW92ZSx0aGlzKSxxKGRvY3VtZW50LEFlW3RdLHRoaXMuX29uVXAsdGhpcyk7VHQoKSxmaSgpLHRoaXMuX21vdmVkJiZ0aGlzLl9tb3ZpbmcmJihnKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLmZpcmUoImRyYWdlbmQiLHtkaXN0YW5jZTp0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyl9KSksdGhpcy5fbW92aW5nPSExLEJlLl9kcmFnZ2luZz0hMX19KSxPZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7c2ltcGxpZnk6Q3QscG9pbnRUb1NlZ21lbnREaXN0YW5jZTpadCxjbG9zZXN0UG9pbnRPblNlZ21lbnQ6ZnVuY3Rpb24odCxpLGUpe3JldHVybiBSdCh0LGksZSl9LGNsaXBTZWdtZW50OkF0LF9nZXRFZGdlSW50ZXJzZWN0aW9uOkl0LF9nZXRCaXRDb2RlOkJ0LF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudDpSdCxpc0ZsYXQ6RHQsX2ZsYXQ6TnR9KSxSZT0oT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh7Y2xpcFBvbHlnb246anR9KSxEZT17cHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgodC5sbmcsdC5sYXQpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNKHQueSx0LngpfSxib3VuZHM6bmV3IFAoWy0xODAsLTkwXSxbMTgwLDkwXSl9LE5lPXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6bmV3IFAoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5QSS8xODAsZT10aGlzLlIsbj10LmxhdCppLG89dGhpcy5SX01JTk9SL2Uscz1NYXRoLnNxcnQoMS1vKm8pLHI9cypNYXRoLnNpbihuKSxhPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLXIpLygxK3IpLHMvMik7cmV0dXJuIG49LWUqTWF0aC5sb2coTWF0aC5tYXgoYSwxZS0xMCkpLG5ldyB4KHQubG5nKmkqZSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlPTE4MC9NYXRoLlBJLG49dGhpcy5SLG89dGhpcy5SX01JTk9SL24scz1NYXRoLnNxcnQoMS1vKm8pLHI9TWF0aC5leHAoLXQueS9uKSxhPU1hdGguUEkvMi0yKk1hdGguYXRhbihyKSxoPTAsdT0uMTtoPDE1JiZNYXRoLmFicyh1KT4xZS03O2grKylpPXMqTWF0aC5zaW4oYSksaT1NYXRoLnBvdygoMS1pKS8oMStpKSxzLzIpLGErPXU9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIqaSktYTtyZXR1cm4gbmV3IE0oYSplLHQueCplL24pfX0samU9KE9iamVjdC5mcmVlemV8fE9iamVjdCkoe0xvbkxhdDpEZSxNZXJjYXRvcjpOZSxTcGhlcmljYWxNZXJjYXRvcjpkaX0pLFdlPWkoe30sX2kse2NvZGU6IkVQU0c6MzM5NSIscHJvamVjdGlvbjpOZSx0cmFuc2Zvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciB0PS41LyhNYXRoLlBJKk5lLlIpO3JldHVybiBTKHQsLjUsLXQsLjUpfSgpfSksSGU9aSh7fSxfaSx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOkRlLHRyYW5zZm9ybWF0aW9uOlMoMS8xODAsMSwtMS8xODAsLjUpfSksRmU9aSh7fSxjaSx7cHJvamVjdGlvbjpEZSx0cmFuc2Zvcm1hdGlvbjpTKDEsMCwtMSwwKSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sem9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LGRpc3RhbmNlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9aS5sbmctdC5sbmcsbj1pLmxhdC10LmxhdDtyZXR1cm4gTWF0aC5zcXJ0KGUqZStuKm4pfSxpbmZpbml0ZTohMH0pO2NpLkVhcnRoPV9pLGNpLkVQU0czMzk1PVdlLGNpLkVQU0czODU3PXZpLGNpLkVQU0c5MDA5MTM9eWksY2kuRVBTRzQzMjY9SGUsY2kuU2ltcGxlPUZlO3ZhciBVZT11aS5leHRlbmQoe29wdGlvbnM6e3BhbmU6Im92ZXJsYXlQYW5lIixhdHRyaWJ1dGlvbjpudWxsLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUZyb20odGhpcy5fbWFwfHx0aGlzLl9tYXBUb0FkZCl9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQucmVtb3ZlTGF5ZXIodGhpcyksdGhpc30sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLmdldFBhbmUodD90aGlzLm9wdGlvbnNbdF18fHQ6dGhpcy5vcHRpb25zLnBhbmUpfSxhZGRJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLl90YXJnZXRzW24odCldPXRoaXMsdGhpc30scmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9tYXAuX3RhcmdldHNbbih0KV0sdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfbGF5ZXJBZGQ6ZnVuY3Rpb24odCl7dmFyIGk9dC50YXJnZXQ7aWYoaS5oYXNMYXllcih0aGlzKSl7aWYodGhpcy5fbWFwPWksdGhpcy5fem9vbUFuaW1hdGVkPWkuX3pvb21BbmltYXRlZCx0aGlzLmdldEV2ZW50cyl7dmFyIGU9dGhpcy5nZXRFdmVudHMoKTtpLm9uKGUsdGhpcyksdGhpcy5vbmNlKCJyZW1vdmUiLGZ1bmN0aW9uKCl7aS5vZmYoZSx0aGlzKX0sdGhpcyl9dGhpcy5vbkFkZChpKSx0aGlzLmdldEF0dHJpYnV0aW9uJiZpLmF0dHJpYnV0aW9uQ29udHJvbCYmaS5hdHRyaWJ1dGlvbkNvbnRyb2wuYWRkQXR0cmlidXRpb24odGhpcy5nZXRBdHRyaWJ1dGlvbigpKSx0aGlzLmZpcmUoImFkZCIpLGkuZmlyZSgibGF5ZXJhZGQiLHtsYXllcjp0aGlzfSl9fX0pO0xlLmluY2x1ZGUoe2FkZExheWVyOmZ1bmN0aW9uKHQpe2lmKCF0Ll9sYXllckFkZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwcm92aWRlZCBvYmplY3QgaXMgbm90IGEgTGF5ZXIuIik7dmFyIGk9bih0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2ldP3RoaXM6KHRoaXMuX2xheWVyc1tpXT10LHQuX21hcFRvQWRkPXRoaXMsdC5iZWZvcmVBZGQmJnQuYmVmb3JlQWRkKHRoaXMpLHRoaXMud2hlblJlYWR5KHQuX2xheWVyQWRkLHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgaT1uKHQpO3JldHVybiB0aGlzLl9sYXllcnNbaV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSx0LmdldEF0dHJpYnV0aW9uJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2wucmVtb3ZlQXR0cmlidXRpb24odC5nZXRBdHRyaWJ1dGlvbigpKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ldLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSksdC5maXJlKCJyZW1vdmUiKSksdC5fbWFwPXQuX21hcFRvQWRkPW51bGwsdGhpcyk6dGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZuKHQpaW4gdGhpcy5fbGF5ZXJzfSxlYWNoTGF5ZXI6ZnVuY3Rpb24odCxpKXtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKXQuY2FsbChpLHRoaXMuX2xheWVyc1tlXSk7cmV0dXJuIHRoaXN9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBpPTAsZT0odD10P2VpKHQpP3Q6W3RdOltdKS5sZW5ndGg7aTxlO2krKyl0aGlzLmFkZExheWVyKHRbaV0pfSxfYWRkWm9vbUxpbWl0OmZ1bmN0aW9uKHQpeyFpc05hTih0Lm9wdGlvbnMubWF4Wm9vbSkmJmlzTmFOKHQub3B0aW9ucy5taW5ab29tKXx8KHRoaXMuX3pvb21Cb3VuZExheWVyc1tuKHQpXT10LHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSl9LF9yZW1vdmVab29tTGltaXQ6ZnVuY3Rpb24odCl7dmFyIGk9bih0KTt0aGlzLl96b29tQm91bmRMYXllcnNbaV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2ldLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSl9LF91cGRhdGVab29tTGV2ZWxzOmZ1bmN0aW9uKCl7dmFyIHQ9MS8wLGk9LTEvMCxlPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHZhciBuIGluIHRoaXMuX3pvb21Cb3VuZExheWVycyl7dmFyIG89dGhpcy5fem9vbUJvdW5kTGF5ZXJzW25dLm9wdGlvbnM7dD12b2lkIDA9PT1vLm1pblpvb20/dDpNYXRoLm1pbih0LG8ubWluWm9vbSksaT12b2lkIDA9PT1vLm1heFpvb20/aTpNYXRoLm1heChpLG8ubWF4Wm9vbSl9dGhpcy5fbGF5ZXJzTWF4Wm9vbT1pPT09LTEvMD92b2lkIDA6aSx0aGlzLl9sYXllcnNNaW5ab29tPXQ9PT0xLzA/dm9pZCAwOnQsZSE9PXRoaXMuX2dldFpvb21TcGFuKCkmJnRoaXMuZmlyZSgiem9vbWxldmVsc2NoYW5nZSIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tJiZ0aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLmdldFpvb20oKT50aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1pblpvb20mJnRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuZ2V0Wm9vbSgpPHRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNaW5ab29tKX19KTt2YXIgVmU9VWUuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLGkpLHRoaXMuX2xheWVycz17fTt2YXIgZSxuO2lmKHQpZm9yKGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdGhpcy5hZGRMYXllcih0W2VdKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9sYXllcnNbaV09dCx0aGlzLl9tYXAmJnRoaXMuX21hcC5hZGRMYXllcih0KSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgaT10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbaV0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaV0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbaV0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYodCBpbiB0aGlzLl9sYXllcnN8fHRoaXMuZ2V0TGF5ZXJJZCh0KWluIHRoaXMuX2xheWVycyl9LGNsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaExheWVyKHRoaXMucmVtb3ZlTGF5ZXIsdGhpcyl9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgaSxlLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpIGluIHRoaXMuX2xheWVycykoZT10aGlzLl9sYXllcnNbaV0pW3RdJiZlW3RdLmFwcGx5KGUsbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQuYWRkTGF5ZXIsdCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKHQucmVtb3ZlTGF5ZXIsdCl9LGVhY2hMYXllcjpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGksdGhpcy5fbGF5ZXJzW2VdKTtyZXR1cm4gdGhpc30sZ2V0TGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xheWVyc1t0XX0sZ2V0TGF5ZXJzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaExheWVyKHQucHVzaCx0KSx0fSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRaSW5kZXgiLHQpfSxnZXRMYXllcklkOmZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfX0pLHFlPVZlLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSxWZS5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZSgibGF5ZXJhZGQiLHtsYXllcjp0fSkpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT8odCBpbiB0aGlzLl9sYXllcnMmJih0PXRoaXMuX2xheWVyc1t0XSksdC5yZW1vdmVFdmVudFBhcmVudCh0aGlzKSxWZS5wcm90b3R5cGUucmVtb3ZlTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludm9rZSgic2V0U3R5bGUiLHQpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoImJyaW5nVG9Gcm9udCIpfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0JhY2siKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFQ7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl7dmFyIGU9dGhpcy5fbGF5ZXJzW2ldO3QuZXh0ZW5kKGUuZ2V0Qm91bmRzP2UuZ2V0Qm91bmRzKCk6ZS5nZXRMYXRMbmcoKSl9cmV0dXJuIHR9fSksR2U9di5leHRlbmQoe29wdGlvbnM6e3BvcHVwQW5jaG9yOlswLDBdLHRvb2x0aXBBbmNob3I6WzAsMF19LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpfSxjcmVhdGVJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVJY29uKCJpY29uIix0KX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVJY29uKCJzaGFkb3ciLHQpfSxfY3JlYXRlSWNvbjpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMuX2dldEljb25VcmwodCk7aWYoIWUpe2lmKCJpY29uIj09PXQpdGhyb3cgbmV3IEVycm9yKCJpY29uVXJsIG5vdCBzZXQgaW4gSWNvbiBvcHRpb25zIChzZWUgdGhlIGRvY3MpLiIpO3JldHVybiBudWxsfXZhciBuPXRoaXMuX2NyZWF0ZUltZyhlLGkmJiJJTUciPT09aS50YWdOYW1lP2k6bnVsbCk7cmV0dXJuIHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGkpe3ZhciBlPXRoaXMub3B0aW9ucyxuPWVbaSsiU2l6ZSJdOyJudW1iZXIiPT10eXBlb2YgbiYmKG49W24sbl0pO3ZhciBvPXcobikscz13KCJzaGFkb3ciPT09aSYmZS5zaGFkb3dBbmNob3J8fGUuaWNvbkFuY2hvcnx8byYmby5kaXZpZGVCeSgyLCEwKSk7dC5jbGFzc05hbWU9ImxlYWZsZXQtbWFya2VyLSIraSsiICIrKGUuY2xhc3NOYW1lfHwiIikscyYmKHQuc3R5bGUubWFyZ2luTGVmdD0tcy54KyJweCIsdC5zdHlsZS5tYXJnaW5Ub3A9LXMueSsicHgiKSxvJiYodC5zdHlsZS53aWR0aD1vLngrInB4Iix0LnN0eWxlLmhlaWdodD1vLnkrInB4Iil9LF9jcmVhdGVJbWc6ZnVuY3Rpb24odCxpKXtyZXR1cm4gaT1pfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBLaSYmdGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdfHx0aGlzLm9wdGlvbnNbdCsiVXJsIl19fSksS2U9R2UuZXh0ZW5kKHtvcHRpb25zOntpY29uVXJsOiJtYXJrZXItaWNvbi5wbmciLGljb25SZXRpbmFVcmw6Im1hcmtlci1pY29uLTJ4LnBuZyIsc2hhZG93VXJsOiJtYXJrZXItc2hhZG93LnBuZyIsaWNvblNpemU6WzI1LDQxXSxpY29uQW5jaG9yOlsxMiw0MV0scG9wdXBBbmNob3I6WzEsLTM0XSx0b29sdGlwQW5jaG9yOlsxNiwtMjhdLHNoYWRvd1NpemU6WzQxLDQxXX0sX2dldEljb25Vcmw6ZnVuY3Rpb24odCl7cmV0dXJuIEtlLmltYWdlUGF0aHx8KEtlLmltYWdlUGF0aD10aGlzLl9kZXRlY3RJY29uUGF0aCgpKSwodGhpcy5vcHRpb25zLmltYWdlUGF0aHx8S2UuaW1hZ2VQYXRoKStHZS5wcm90b3R5cGUuX2dldEljb25VcmwuY2FsbCh0aGlzLHQpfSxfZGV0ZWN0SWNvblBhdGg6ZnVuY3Rpb24oKXt2YXIgdD1odCgiZGl2IiwibGVhZmxldC1kZWZhdWx0LWljb24tcGF0aCIsZG9jdW1lbnQuYm9keSksaT1hdCh0LCJiYWNrZ3JvdW5kLWltYWdlIil8fGF0KHQsImJhY2tncm91bmRJbWFnZSIpO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGk9bnVsbD09PWl8fDAhPT1pLmluZGV4T2YoInVybCIpPyIiOmkucmVwbGFjZSgvXnVybFwoWyInXT8vLCIiKS5yZXBsYWNlKC9tYXJrZXItaWNvblwucG5nWyInXT9cKSQvLCIiKX19KSxZZT1aZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgQmUodCx0LCEwKSksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmVuYWJsZSgpLHB0KHQsImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSIpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5vZmYoe2RyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxwcmVkcmFnOnRoaXMuX29uUHJlRHJhZyxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcykuZGlzYWJsZSgpLHRoaXMuX21hcmtlci5faWNvbiYmbXQodGhpcy5fbWFya2VyLl9pY29uLCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlJiZ0aGlzLl9kcmFnZ2FibGUuX21vdmVkfSxfYWRqdXN0UGFuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcmtlcixlPWkuX21hcCxuPXRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5TcGVlZCxvPXRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5QYWRkaW5nLHM9TC5Eb21VdGlsLmdldFBvc2l0aW9uKGkuX2ljb24pLHI9ZS5nZXRQaXhlbEJvdW5kcygpLGE9ZS5nZXRQaXhlbE9yaWdpbigpLGg9YihyLm1pbi5fc3VidHJhY3QoYSkuYWRkKG8pLHIubWF4Ll9zdWJ0cmFjdChhKS5zdWJ0cmFjdChvKSk7aWYoIWguY29udGFpbnMocykpe3ZhciB1PXcoKE1hdGgubWF4KGgubWF4Lngscy54KS1oLm1heC54KS8oci5tYXgueC1oLm1heC54KS0oTWF0aC5taW4oaC5taW4ueCxzLngpLWgubWluLngpLyhyLm1pbi54LWgubWluLngpLChNYXRoLm1heChoLm1heC55LHMueSktaC5tYXgueSkvKHIubWF4LnktaC5tYXgueSktKE1hdGgubWluKGgubWluLnkscy55KS1oLm1pbi55KS8oci5taW4ueS1oLm1pbi55KSkubXVsdGlwbHlCeShuKTtlLnBhbkJ5KHUse2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKHUpLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZCh1KSxMLkRvbVV0aWwuc2V0UG9zaXRpb24oaS5faWNvbix0aGlzLl9kcmFnZ2FibGUuX25ld1BvcyksdGhpcy5fb25EcmFnKHQpLHRoaXMuX3BhblJlcXVlc3Q9Zih0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLHQpKX19LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3RoaXMuX29sZExhdExuZz10aGlzLl9tYXJrZXIuZ2V0TGF0TG5nKCksdGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKS5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKX0sX29uUHJlRHJhZzpmdW5jdGlvbih0KXt0aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuJiYoZyh0aGlzLl9wYW5SZXF1ZXN0KSx0aGlzLl9wYW5SZXF1ZXN0PWYodGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcyx0KSkpfSxfb25EcmFnOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcmtlcixlPWkuX3NoYWRvdyxuPVB0KGkuX2ljb24pLG89aS5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhuKTtlJiZMdChlLG4pLGkuX2xhdGxuZz1vLHQubGF0bG5nPW8sdC5vbGRMYXRMbmc9dGhpcy5fb2xkTGF0TG5nLGkuZmlyZSgibW92ZSIsdCkuZmlyZSgiZHJhZyIsdCl9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7Zyh0aGlzLl9wYW5SZXF1ZXN0KSxkZWxldGUgdGhpcy5fb2xkTGF0TG5nLHRoaXMuX21hcmtlci5maXJlKCJtb3ZlZW5kIikuZmlyZSgiZHJhZ2VuZCIsdCl9fSksWGU9VWUuZXh0ZW5kKHtvcHRpb25zOntpY29uOm5ldyBLZSxpbnRlcmFjdGl2ZTohMCxkcmFnZ2FibGU6ITEsYXV0b1BhbjohMSxhdXRvUGFuUGFkZGluZzpbNTAsNTBdLGF1dG9QYW5TcGVlZDoxMCxrZXlib2FyZDohMCx0aXRsZToiIixhbHQ6IiIsekluZGV4T2Zmc2V0OjAsb3BhY2l0eToxLHJpc2VPbkhvdmVyOiExLHJpc2VPZmZzZXQ6MjUwLHBhbmU6Im1hcmtlclBhbmUiLGJ1YmJsaW5nTW91c2VFdmVudHM6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fbGF0bG5nPUModCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10aGlzLl96b29tQW5pbWF0ZWQmJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5lbmFibGVkKCkmJih0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlPSEwLHRoaXMuZHJhZ2dpbmcucmVtb3ZlSG9va3MoKSksZGVsZXRlIHRoaXMuZHJhZ2dpbmcsdGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9mZigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7cmV0dXJue3pvb206dGhpcy51cGRhdGUsdmlld3Jlc2V0OnRoaXMudXBkYXRlfX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2xhdGxuZztyZXR1cm4gdGhpcy5fbGF0bG5nPUModCksdGhpcy51cGRhdGUoKSx0aGlzLmZpcmUoIm1vdmUiLHtvbGRMYXRMbmc6aSxsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LHNldFpJbmRleE9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldD10LHRoaXMudXBkYXRlKCl9LHNldEljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uPXQsdGhpcy5fbWFwJiYodGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpKSx0aGlzLl9wb3B1cCYmdGhpcy5iaW5kUG9wdXAodGhpcy5fcG9wdXAsdGhpcy5fcG9wdXAub3B0aW9ucyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ufSx1cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pY29uJiZ0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpO3RoaXMuX3NldFBvcyh0KX1yZXR1cm4gdGhpc30sX2luaXRJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9ImxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpLGU9dC5pY29uLmNyZWF0ZUljb24odGhpcy5faWNvbiksbj0hMTtlIT09dGhpcy5faWNvbiYmKHRoaXMuX2ljb24mJnRoaXMuX3JlbW92ZUljb24oKSxuPSEwLHQudGl0bGUmJihlLnRpdGxlPXQudGl0bGUpLCJJTUciPT09ZS50YWdOYW1lJiYoZS5hbHQ9dC5hbHR8fCIiKSkscHQoZSxpKSx0LmtleWJvYXJkJiYoZS50YWJJbmRleD0iMCIpLHRoaXMuX2ljb249ZSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSk7dmFyIG89dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLHM9ITE7byE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLHM9ITApLG8mJihwdChvLGkpLG8uYWx0PSIiKSx0aGlzLl9zaGFkb3c9byx0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLG4mJnRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLG8mJnMmJnRoaXMuZ2V0UGFuZSgic2hhZG93UGFuZSIpLmFwcGVuZENoaWxkKHRoaXMuX3NoYWRvdyl9LF9yZW1vdmVJY29uOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyJiZ0aGlzLm9mZih7bW91c2VvdmVyOnRoaXMuX2JyaW5nVG9Gcm9udCxtb3VzZW91dDp0aGlzLl9yZXNldFpJbmRleH0pLHV0KHRoaXMuX2ljb24pLHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbiksdGhpcy5faWNvbj1udWxsfSxfcmVtb3ZlU2hhZG93OmZ1bmN0aW9uKCl7dGhpcy5fc2hhZG93JiZ1dCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe0x0KHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZMdCh0aGlzLl9zaGFkb3csdCksdGhpcy5fekluZGV4PXQueSt0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0LHRoaXMuX3Jlc2V0WkluZGV4KCl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24odCl7dGhpcy5faWNvbi5zdHlsZS56SW5kZXg9dGhpcy5fekluZGV4K3R9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKS5yb3VuZCgpO3RoaXMuX3NldFBvcyhpKX0sX2luaXRJbnRlcmFjdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmKHB0KHRoaXMuX2ljb24sImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLFllKSl7dmFyIHQ9dGhpcy5vcHRpb25zLmRyYWdnYWJsZTt0aGlzLmRyYWdnaW5nJiYodD10aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSx0aGlzLmRyYWdnaW5nLmRpc2FibGUoKSksdGhpcy5kcmFnZ2luZz1uZXcgWWUodGhpcyksdCYmdGhpcy5kcmFnZ2luZy5lbmFibGUoKX19LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTt2dCh0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmdnQodGhpcy5fc2hhZG93LHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KHRoaXMub3B0aW9ucy5yaXNlT2Zmc2V0KX0sX3Jlc2V0WkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlWkluZGV4KDApfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pLEplPVVlLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOiIjMzM4OGZmIix3ZWlnaHQ6MyxvcGFjaXR5OjEsbGluZUNhcDoicm91bmQiLGxpbmVKb2luOiJyb3VuZCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6ImV2ZW5vZGQiLGludGVyYWN0aXZlOiEwLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLHQpLHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpc30sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyJiZ0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXRofSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wcm9qZWN0KCksdGhpcy5fdXBkYXRlKCl9LF9jbGlja1RvbGVyYW5jZTpmdW5jdGlvbigpe3JldHVybih0aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowKSt0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZX19KSwkZT1KZS5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITAscmFkaXVzOjEwfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLGkpLHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMuX3JhZGl1cz10aGlzLm9wdGlvbnMucmFkaXVzfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1DKHQpLHRoaXMucmVkcmF3KCksdGhpcy5maXJlKCJtb3ZlIix7bGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5yYWRpdXM9dGhpcy5fcmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1c30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGk9dCYmdC5yYWRpdXN8fHRoaXMuX3JhZGl1cztyZXR1cm4gSmUucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhpKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxpPXRoaXMuX3JhZGl1c1l8fHQsZT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QrZSxpK2VdO3RoaXMuX3B4Qm91bmRzPW5ldyBQKHRoaXMuX3BvaW50LnN1YnRyYWN0KG4pLHRoaXMuX3BvaW50LmFkZChuKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBhdGgoKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlQ2lyY2xlKHRoaXMpfSxfZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzJiYhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfX0pLFFlPSRlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsbil7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYoZT1pKHt9LG4se3JhZGl1czplfSkpLGwodGhpcyxlKSx0aGlzLl9sYXRsbmc9Qyh0KSxpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IFQodGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6SmUucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF0bG5nLmxuZyxpPXRoaXMuX2xhdGxuZy5sYXQsZT10aGlzLl9tYXAsbj1lLm9wdGlvbnMuY3JzO2lmKG4uZGlzdGFuY2U9PT1faS5kaXN0YW5jZSl7dmFyIG89TWF0aC5QSS8xODAscz10aGlzLl9tUmFkaXVzL19pLlIvbyxyPWUucHJvamVjdChbaStzLHRdKSxhPWUucHJvamVjdChbaS1zLHRdKSxoPXIuYWRkKGEpLmRpdmlkZUJ5KDIpLHU9ZS51bnByb2plY3QoaCkubGF0LGw9TWF0aC5hY29zKChNYXRoLmNvcyhzKm8pLU1hdGguc2luKGkqbykqTWF0aC5zaW4odSpvKSkvKE1hdGguY29zKGkqbykqTWF0aC5jb3ModSpvKSkpL287KGlzTmFOKGwpfHwwPT09bCkmJihsPXMvTWF0aC5jb3MoTWF0aC5QSS8xODAqaSkpLHRoaXMuX3BvaW50PWguc3VidHJhY3QoZS5nZXRQaXhlbE9yaWdpbigpKSx0aGlzLl9yYWRpdXM9aXNOYU4obCk/MDpoLngtZS5wcm9qZWN0KFt1LHQtbF0pLngsdGhpcy5fcmFkaXVzWT1oLnktci55fWVsc2V7dmFyIGM9bi51bnByb2plY3Qobi5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsMF0pKTt0aGlzLl9wb2ludD1lLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHRoaXMuX3JhZGl1cz10aGlzLl9wb2ludC54LWUubGF0TG5nVG9MYXllclBvaW50KGMpLnh9dGhpcy5fdXBkYXRlQm91bmRzKCl9fSksdG49SmUuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlLG49MS8wLG89bnVsbCxzPVJ0LHI9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtyPGE7cisrKWZvcih2YXIgaD10aGlzLl9wYXJ0c1tyXSx1PTEsbD1oLmxlbmd0aDt1PGw7dSsrKXt2YXIgYz1zKHQsaT1oW3UtMV0sZT1oW3VdLCEwKTtjPG4mJihuPWMsbz1zKHQsaSxlKSl9cmV0dXJuIG8mJihvLmRpc3RhbmNlPU1hdGguc3FydChuKSksb30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhPXRoaXMuX3JpbmdzWzBdLGg9YS5sZW5ndGg7aWYoIWgpcmV0dXJuIG51bGw7Zm9yKHQ9MCxpPTA7dDxoLTE7dCsrKWkrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWkpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKHQ9MCxuPTA7dDxoLTE7dCsrKWlmKG89YVt0XSxzPWFbdCsxXSxlPW8uZGlzdGFuY2VUbyhzKSwobis9ZSk+aSlyZXR1cm4gcj0obi1pKS9lLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW3MueC1yKihzLngtby54KSxzLnktcioocy55LW8ueSldKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sYWRkTGF0TG5nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8dGhpcy5fZGVmYXVsdFNoYXBlKCksdD1DKHQpLGkucHVzaCh0KSx0aGlzLl9ib3VuZHMuZXh0ZW5kKHQpLHRoaXMucmVkcmF3KCl9LF9zZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3RoaXMuX2JvdW5kcz1uZXcgVCx0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpfSxfZGVmYXVsdFNoYXBlOmZ1bmN0aW9uKCl7cmV0dXJuIER0KHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaT1bXSxlPUR0KHQpLG49MCxvPXQubGVuZ3RoO248bztuKyspZT8oaVtuXT1DKHRbbl0pLHRoaXMuX2JvdW5kcy5leHRlbmQoaVtuXSkpOmlbbl09dGhpcy5fY29udmVydExhdExuZ3ModFtuXSk7cmV0dXJuIGl9LF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFA7dGhpcy5fcmluZ3M9W10sdGhpcy5fcHJvamVjdExhdGxuZ3ModGhpcy5fbGF0bG5ncyx0aGlzLl9yaW5ncyx0KTt2YXIgaT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLGU9bmV3IHgoaSxpKTt0aGlzLl9ib3VuZHMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKSYmKHQubWluLl9zdWJ0cmFjdChlKSx0Lm1heC5fYWRkKGUpLHRoaXMuX3B4Qm91bmRzPXQpfSxfcHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24odCxpLGUpe3ZhciBuLG8scz10WzBdaW5zdGFuY2VvZiBNLHI9dC5sZW5ndGg7aWYocyl7Zm9yKG89W10sbj0wO248cjtuKyspb1tuXT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRbbl0pLGUuZXh0ZW5kKG9bbl0pO2kucHVzaChvKX1lbHNlIGZvcihuPTA7bjxyO24rKyl0aGlzLl9wcm9qZWN0TGF0bG5ncyh0W25dLGksZSl9LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcztpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2V7dmFyIGksZSxuLG8scyxyLGEsaD10aGlzLl9wYXJ0cztmb3IoaT0wLG49MCxvPXRoaXMuX3JpbmdzLmxlbmd0aDtpPG87aSsrKWZvcihlPTAscz0oYT10aGlzLl9yaW5nc1tpXSkubGVuZ3RoO2U8cy0xO2UrKykocj1BdChhW2VdLGFbZSsxXSx0LGUsITApKSYmKGhbbl09aFtuXXx8W10saFtuXS5wdXNoKHJbMF0pLHJbMV09PT1hW2UrMV0mJmUhPT1zLTJ8fChoW25dLnB1c2goclsxXSksbisrKSl9fSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsaT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspdFtlXT1DdCh0W2VdLGkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKCF0aGlzLl9weEJvdW5kc3x8IXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHQpKXJldHVybiExO2ZvcihlPTAscz10aGlzLl9wYXJ0cy5sZW5ndGg7ZTxzO2UrKylmb3Iobj0wLG89KHI9KGE9dGhpcy5fcGFydHNbZV0pLmxlbmd0aCktMTtuPHI7bz1uKyspaWYoKGl8fDAhPT1uKSYmWnQodCxhW29dLGFbbl0pPD1oKXJldHVybiEwO3JldHVybiExfX0pO3RuLl9mbGF0PU50O3ZhciBlbj10bi5leHRlbmQoe29wdGlvbnM6e2ZpbGw6ITB9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh8fCF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aH0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxpLGUsbixvLHMscixhLGgsdT10aGlzLl9yaW5nc1swXSxsPXUubGVuZ3RoO2lmKCFsKXJldHVybiBudWxsO2ZvcihzPXI9YT0wLHQ9MCxpPWwtMTt0PGw7aT10KyspZT11W3RdLG49dVtpXSxvPWUueSpuLngtbi55KmUueCxyKz0oZS54K24ueCkqbyxhKz0oZS55K24ueSkqbyxzKz0zKm87cmV0dXJuIGg9MD09PXM/dVswXTpbci9zLGEvc10sdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhoKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe3ZhciBpPXRuLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGU9aS5sZW5ndGg7cmV0dXJuIGU+PTImJmlbMF1pbnN0YW5jZW9mIE0mJmlbMF0uZXF1YWxzKGlbZS0xXSkmJmkucG9wKCksaX0sX3NldExhdExuZ3M6ZnVuY3Rpb24odCl7dG4ucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxEdCh0aGlzLl9sYXRsbmdzKSYmKHRoaXMuX2xhdGxuZ3M9W3RoaXMuX2xhdGxuZ3NdKX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBEdCh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzWzBdOnRoaXMuX2xhdGxuZ3NbMF1bMF19LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcyxpPXRoaXMub3B0aW9ucy53ZWlnaHQsZT1uZXcgeChpLGkpO2lmKHQ9bmV3IFAodC5taW4uc3VidHJhY3QoZSksdC5tYXguYWRkKGUpKSx0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSlpZih0aGlzLm9wdGlvbnMubm9DbGlwKXRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzO2Vsc2UgZm9yKHZhciBuLG89MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtvPHM7bysrKShuPWp0KHRoaXMuX3JpbmdzW29dLHQsITApKS5sZW5ndGgmJnRoaXMuX3BhcnRzLnB1c2gobil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcywhMCl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBpLGUsbixvLHMscixhLGgsdT0hMTtpZighdGhpcy5fcHhCb3VuZHMuY29udGFpbnModCkpcmV0dXJuITE7Zm9yKG89MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtvPGE7bysrKWZvcihzPTAscj0oaD0oaT10aGlzLl9wYXJ0c1tvXSkubGVuZ3RoKS0xO3M8aDtyPXMrKyllPWlbc10sbj1pW3JdLGUueT50LnkhPW4ueT50LnkmJnQueDwobi54LWUueCkqKHQueS1lLnkpLyhuLnktZS55KStlLngmJih1PSF1KTtyZXR1cm4gdXx8dG4ucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcyx0LCEwKX19KSxubj1xZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxpKXtsKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgaSxlLG4sbz1laSh0KT90OnQuZmVhdHVyZXM7aWYobyl7Zm9yKGk9MCxlPW8ubGVuZ3RoO2k8ZTtpKyspKChuPW9baV0pLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEobik7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5vcHRpb25zO2lmKHMuZmlsdGVyJiYhcy5maWx0ZXIodCkpcmV0dXJuIHRoaXM7dmFyIHI9V3QodCxzKTtyZXR1cm4gcj8oci5mZWF0dXJlPUd0KHQpLHIuZGVmYXVsdE9wdGlvbnM9ci5vcHRpb25zLHRoaXMucmVzZXRTdHlsZShyKSxzLm9uRWFjaEZlYXR1cmUmJnMub25FYWNoRmVhdHVyZSh0LHIpLHRoaXMuYWRkTGF5ZXIocikpOnRoaXN9LHJlc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQub3B0aW9ucz1pKHt9LHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCx0aGlzLm9wdGlvbnMuc3R5bGUpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihpKXt0aGlzLl9zZXRMYXllclN0eWxlKGksdCl9LHRoaXMpfSxfc2V0TGF5ZXJTdHlsZTpmdW5jdGlvbih0LGkpeyJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHQuZmVhdHVyZSkpLHQuc2V0U3R5bGUmJnQuc2V0U3R5bGUoaSl9fSksb249e3RvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gcXQodGhpcyx7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOlV0KHRoaXMuZ2V0TGF0TG5nKCksdCl9KX19O1hlLmluY2x1ZGUob24pLFFlLmluY2x1ZGUob24pLCRlLmluY2x1ZGUob24pLHRuLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbih0KXt2YXIgaT0hRHQodGhpcy5fbGF0bG5ncyksZT1WdCh0aGlzLl9sYXRsbmdzLGk/MTowLCExLHQpO3JldHVybiBxdCh0aGlzLHt0eXBlOihpPyJNdWx0aSI6IiIpKyJMaW5lU3RyaW5nIixjb29yZGluYXRlczplfSl9fSksZW4uaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBpPSFEdCh0aGlzLl9sYXRsbmdzKSxlPWkmJiFEdCh0aGlzLl9sYXRsbmdzWzBdKSxuPVZ0KHRoaXMuX2xhdGxuZ3MsZT8yOmk/MTowLCEwLHQpO3JldHVybiBpfHwobj1bbl0pLHF0KHRoaXMse3R5cGU6KGU/Ik11bHRpIjoiIikrIlBvbHlnb24iLGNvb3JkaW5hdGVzOm59KX19KSxWZS5pbmNsdWRlKHt0b011bHRpUG9pbnQ6ZnVuY3Rpb24odCl7dmFyIGk9W107cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe2kucHVzaChlLnRvR2VvSlNPTih0KS5nZW9tZXRyeS5jb29yZGluYXRlcyl9KSxxdCh0aGlzLHt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczppfSl9LHRvR2VvSlNPTjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7aWYoIk11bHRpUG9pbnQiPT09aSlyZXR1cm4gdGhpcy50b011bHRpUG9pbnQodCk7dmFyIGU9Ikdlb21ldHJ5Q29sbGVjdGlvbiI9PT1pLG49W107cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGkpe2lmKGkudG9HZW9KU09OKXt2YXIgbz1pLnRvR2VvSlNPTih0KTtpZihlKW4ucHVzaChvLmdlb21ldHJ5KTtlbHNle3ZhciBzPUd0KG8pOyJGZWF0dXJlQ29sbGVjdGlvbiI9PT1zLnR5cGU/bi5wdXNoLmFwcGx5KG4scy5mZWF0dXJlcyk6bi5wdXNoKHMpfX19KSxlP3F0KHRoaXMse2dlb21ldHJpZXM6bix0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24ifSk6e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpufX19KTt2YXIgc249S3Qscm49VWUuZXh0ZW5kKHtvcHRpb25zOntvcGFjaXR5OjEsYWx0OiIiLGludGVyYWN0aXZlOiExLGNyb3NzT3JpZ2luOiExLGVycm9yT3ZlcmxheVVybDoiIix6SW5kZXg6MSxjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxpLGUpe3RoaXMuX3VybD10LHRoaXMuX2JvdW5kcz16KGkpLGwodGhpcyxlKX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbWFnZXx8KHRoaXMuX2luaXRJbWFnZSgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSksdGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiYocHQodGhpcy5faW1hZ2UsImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7dXQodGhpcy5faW1hZ2UpLHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5faW1hZ2UmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGFjaXR5JiZ0aGlzLnNldE9wYWNpdHkodC5vcGFjaXR5KSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZjdCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZfdCh0aGlzLl9pbWFnZSksdGhpc30sc2V0VXJsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cmw9dCx0aGlzLl9pbWFnZSYmKHRoaXMuX2ltYWdlLnNyYz10KSx0aGlzfSxzZXRCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2JvdW5kcz16KHQpLHRoaXMuX21hcCYmdGhpcy5fcmVzZXQoKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl9yZXNldCx2aWV3cmVzZXQ6dGhpcy5fcmVzZXR9O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy56SW5kZXg9dCx0aGlzLl91cGRhdGVaSW5kZXgoKSx0aGlzfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm91bmRzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ltYWdlfSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9IklNRyI9PT10aGlzLl91cmwudGFnTmFtZSxpPXRoaXMuX2ltYWdlPXQ/dGhpcy5fdXJsOmh0KCJpbWciKTtwdChpLCJsZWFmbGV0LWltYWdlLWxheWVyIiksdGhpcy5fem9vbUFuaW1hdGVkJiZwdChpLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZwdChpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGkub25zZWxlY3RzdGFydD1yLGkub25tb3VzZW1vdmU9cixpLm9ubG9hZD1lKHRoaXMuZmlyZSx0aGlzLCJsb2FkIiksaS5vbmVycm9yPWUodGhpcy5fb3ZlcmxheU9uRXJyb3IsdGhpcywiZXJyb3IiKSx0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4mJihpLmNyb3NzT3JpZ2luPSIiKSx0aGlzLm9wdGlvbnMuekluZGV4JiZ0aGlzLl91cGRhdGVaSW5kZXgoKSx0P3RoaXMuX3VybD1pLnNyYzooaS5zcmM9dGhpcy5fdXJsLGkuYWx0PXRoaXMub3B0aW9ucy5hbHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLmdldFpvb21TY2FsZSh0Lnpvb20pLGU9dGhpcy5fbWFwLl9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzKHRoaXMuX2JvdW5kcyx0Lnpvb20sdC5jZW50ZXIpLm1pbjt3dCh0aGlzLl9pbWFnZSxlLGkpfSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxpPW5ldyBQKHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSx0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXRTb3V0aEVhc3QoKSkpLGU9aS5nZXRTaXplKCk7THQodCxpLm1pbiksdC5zdHlsZS53aWR0aD1lLngrInB4Iix0LnN0eWxlLmhlaWdodD1lLnkrInB4In0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2dCh0aGlzLl9pbWFnZSx0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF91cGRhdGVaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl9pbWFnZSYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnpJbmRleCYmbnVsbCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJih0aGlzLl9pbWFnZS5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9vdmVybGF5T25FcnJvcjpmdW5jdGlvbigpe3RoaXMuZmlyZSgiZXJyb3IiKTt2YXIgdD10aGlzLm9wdGlvbnMuZXJyb3JPdmVybGF5VXJsO3QmJnRoaXMuX3VybCE9PXQmJih0aGlzLl91cmw9dCx0aGlzLl9pbWFnZS5zcmM9dCl9fSksYW49cm4uZXh0ZW5kKHtvcHRpb25zOnthdXRvcGxheTohMCxsb29wOiEwfSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9IlZJREVPIj09PXRoaXMuX3VybC50YWdOYW1lLGk9dGhpcy5faW1hZ2U9dD90aGlzLl91cmw6aHQoInZpZGVvIik7aWYocHQoaSwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX3pvb21BbmltYXRlZCYmcHQoaSwibGVhZmxldC16b29tLWFuaW1hdGVkIiksaS5vbnNlbGVjdHN0YXJ0PXIsaS5vbm1vdXNlbW92ZT1yLGkub25sb2FkZWRkYXRhPWUodGhpcy5maXJlLHRoaXMsImxvYWQiKSx0KXtmb3IodmFyIG49aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic291cmNlIiksbz1bXSxzPTA7czxuLmxlbmd0aDtzKyspby5wdXNoKG5bc10uc3JjKTt0aGlzLl91cmw9bi5sZW5ndGg+MD9vOltpLnNyY119ZWxzZXtlaSh0aGlzLl91cmwpfHwodGhpcy5fdXJsPVt0aGlzLl91cmxdKSxpLmF1dG9wbGF5PSEhdGhpcy5vcHRpb25zLmF1dG9wbGF5LGkubG9vcD0hIXRoaXMub3B0aW9ucy5sb29wO2Zvcih2YXIgYT0wO2E8dGhpcy5fdXJsLmxlbmd0aDthKyspe3ZhciBoPWh0KCJzb3VyY2UiKTtoLnNyYz10aGlzLl91cmxbYV0saS5hcHBlbmRDaGlsZChoKX19fX0pLGhuPVVlLmV4dGVuZCh7b3B0aW9uczp7b2Zmc2V0OlswLDddLGNsYXNzTmFtZToiIixwYW5lOiJwb3B1cFBhbmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7bCh0aGlzLHQpLHRoaXMuX3NvdXJjZT1pfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl96b29tQW5pbWF0ZWQ9dC5fem9vbUFuaW1hdGVkLHRoaXMuX2NvbnRhaW5lcnx8dGhpcy5faW5pdExheW91dCgpLHQuX2ZhZGVBbmltYXRlZCYmdnQodGhpcy5fY29udGFpbmVyLDApLGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMudXBkYXRlKCksdC5fZmFkZUFuaW1hdGVkJiZ2dCh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyh2dCh0aGlzLl9jb250YWluZXIsMCksdGhpcy5fcmVtb3ZlVGltZW91dD1zZXRUaW1lb3V0KGUodXQsdm9pZCAwLHRoaXMuX2NvbnRhaW5lciksMjAwKSk6dXQodGhpcy5fY29udGFpbmVyKX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9Qyh0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FkanVzdFBhbigpKSx0aGlzfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9LHNldENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQ9dCx0aGlzLnVwZGF0ZSgpLHRoaXN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl91cGRhdGVDb250ZW50KCksdGhpcy5fdXBkYXRlTGF5b3V0KCksdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iIix0aGlzLl9hZGp1c3RQYW4oKSl9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3VwZGF0ZVBvc2l0aW9uLHZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcyl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmN0KHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZfdCh0aGlzLl9jb250YWluZXIpLHRoaXN9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGVudCl7dmFyIHQ9dGhpcy5fY29udGVudE5vZGUsaT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fY29udGVudD90aGlzLl9jb250ZW50KHRoaXMuX3NvdXJjZXx8dGhpcyk6dGhpcy5fY29udGVudDtpZigic3RyaW5nIj09dHlwZW9mIGkpdC5pbm5lckhUTUw9aTtlbHNle2Zvcig7dC5oYXNDaGlsZE5vZGVzKCk7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTt0LmFwcGVuZENoaWxkKGkpfXRoaXMuZmlyZSgiY29udGVudHVwZGF0ZSIpfX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksaT13KHRoaXMub3B0aW9ucy5vZmZzZXQpLGU9dGhpcy5fZ2V0QW5jaG9yKCk7dGhpcy5fem9vbUFuaW1hdGVkP0x0KHRoaXMuX2NvbnRhaW5lcix0LmFkZChlKSk6aT1pLmFkZCh0KS5hZGQoZSk7dmFyIG49dGhpcy5fY29udGFpbmVyQm90dG9tPS1pLnksbz10aGlzLl9jb250YWluZXJMZWZ0PS1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoLzIpK2kueDt0aGlzLl9jb250YWluZXIuc3R5bGUuYm90dG9tPW4rInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdD1vKyJweCJ9fSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksdW49aG4uZXh0ZW5kKHtvcHRpb25zOnttYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xvc2VPbkVzY2FwZUtleTohMCxjbGFzc05hbWU6IiJ9LG9wZW5PbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGVuUG9wdXAodGhpcyksdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7aG4ucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyx0KSx0LmZpcmUoInBvcHVwb3BlbiIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIEplfHx0aGlzLl9zb3VyY2Uub24oInByZWNsaWNrIixZKSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe2huLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIEplfHx0aGlzLl9zb3VyY2Uub2ZmKCJwcmVjbGljayIsWSkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1obi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuKHZvaWQgMCE9PXRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0aGlzLm9wdGlvbnMua2VlcEluVmlldyYmKHQubW92ZWVuZD10aGlzLl9hZGp1c3RQYW4pLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlUG9wdXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtcG9wdXAiLGk9dGhpcy5fY29udGFpbmVyPWh0KCJkaXYiLHQrIiAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSxlPXRoaXMuX3dyYXBwZXI9aHQoImRpdiIsdCsiLWNvbnRlbnQtd3JhcHBlciIsaSk7aWYodGhpcy5fY29udGVudE5vZGU9aHQoImRpdiIsdCsiLWNvbnRlbnQiLGUpLEooZSksWCh0aGlzLl9jb250ZW50Tm9kZSksVihlLCJjb250ZXh0bWVudSIsWSksdGhpcy5fdGlwQ29udGFpbmVyPWh0KCJkaXYiLHQrIi10aXAtY29udGFpbmVyIixpKSx0aGlzLl90aXA9aHQoImRpdiIsdCsiLXRpcCIsdGhpcy5fdGlwQ29udGFpbmVyKSx0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pe3ZhciBuPXRoaXMuX2Nsb3NlQnV0dG9uPWh0KCJhIix0KyItY2xvc2UtYnV0dG9uIixpKTtuLmhyZWY9IiNjbG9zZSIsbi5pbm5lckhUTUw9IiYjMjE1OyIsVihuLCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpfX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRlbnROb2RlLGk9dC5zdHlsZTtpLndpZHRoPSIiLGkud2hpdGVTcGFjZT0ibm93cmFwIjt2YXIgZT10Lm9mZnNldFdpZHRoO2U9TWF0aC5taW4oZSx0aGlzLm9wdGlvbnMubWF4V2lkdGgpLGU9TWF0aC5tYXgoZSx0aGlzLm9wdGlvbnMubWluV2lkdGgpLGkud2lkdGg9ZSsxKyJweCIsaS53aGl0ZVNwYWNlPSIiLGkuaGVpZ2h0PSIiO3ZhciBuPXQub2Zmc2V0SGVpZ2h0LG89dGhpcy5vcHRpb25zLm1heEhlaWdodDtvJiZuPm8/KGkuaGVpZ2h0PW8rInB4IixwdCh0LCJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkIikpOm10KHQsImxlYWZsZXQtcG9wdXAtc2Nyb2xsZWQiKSx0aGlzLl9jb250YWluZXJXaWR0aD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKSxlPXRoaXMuX2dldEFuY2hvcigpO0x0KHRoaXMuX2NvbnRhaW5lcixpLmFkZChlKSl9LF9hZGp1c3RQYW46ZnVuY3Rpb24oKXtpZighKCF0aGlzLm9wdGlvbnMuYXV0b1Bhbnx8dGhpcy5fbWFwLl9wYW5BbmltJiZ0aGlzLl9tYXAuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpKXt2YXIgdD10aGlzLl9tYXAsaT1wYXJzZUludChhdCh0aGlzLl9jb250YWluZXIsIm1hcmdpbkJvdHRvbSIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQraSxuPXRoaXMuX2NvbnRhaW5lcldpZHRoLG89bmV3IHgodGhpcy5fY29udGFpbmVyTGVmdCwtZS10aGlzLl9jb250YWluZXJCb3R0b20pO28uX2FkZChQdCh0aGlzLl9jb250YWluZXIpKTt2YXIgcz10LmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KG8pLHI9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcpLGE9dyh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdUb3BMZWZ0fHxyKSxoPXcodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHR8fHIpLHU9dC5nZXRTaXplKCksbD0wLGM9MDtzLngrbitoLng+dS54JiYobD1zLngrbi11LngraC54KSxzLngtbC1hLng8MCYmKGw9cy54LWEueCkscy55K2UraC55PnUueSYmKGM9cy55K2UtdS55K2gueSkscy55LWMtYS55PDAmJihjPXMueS1hLnkpLChsfHxjKSYmdC5maXJlKCJhdXRvcGFuc3RhcnQiKS5wYW5CeShbbCxjXSl9fSxfb25DbG9zZUJ1dHRvbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlKCksUSh0KX0sX2dldEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiB3KHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcj90aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCk6WzAsMF0pfX0pO0xlLm1lcmdlT3B0aW9ucyh7Y2xvc2VQb3B1cE9uQ2xpY2s6ITB9KSxMZS5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24odCxpLGUpe3JldHVybiB0IGluc3RhbmNlb2YgdW58fCh0PW5ldyB1bihlKS5zZXRDb250ZW50KHQpKSxpJiZ0LnNldExhdExuZyhpKSx0aGlzLmhhc0xheWVyKHQpP3RoaXM6KHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5vcHRpb25zLmF1dG9DbG9zZSYmdGhpcy5jbG9zZVBvcHVwKCksdGhpcy5fcG9wdXA9dCx0aGlzLmFkZExheWVyKHQpKX0sY2xvc2VQb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdCE9PXRoaXMuX3BvcHVwfHwodD10aGlzLl9wb3B1cCx0aGlzLl9wb3B1cD1udWxsKSx0JiZ0aGlzLnJlbW92ZUxheWVyKHQpLHRoaXN9fSksVWUuaW5jbHVkZSh7YmluZFBvcHVwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1bj8obCh0LGkpLHRoaXMuX3BvcHVwPXQsdC5fc291cmNlPXRoaXMpOih0aGlzLl9wb3B1cCYmIWl8fCh0aGlzLl9wb3B1cD1uZXcgdW4oaSx0aGlzKSksdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbih7Y2xpY2s6dGhpcy5fb3BlblBvcHVwLGtleXByZXNzOnRoaXMuX29uS2V5UHJlc3MscmVtb3ZlOnRoaXMuY2xvc2VQb3B1cCxtb3ZlOnRoaXMuX21vdmVQb3B1cH0pLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdGhpc30sdW5iaW5kUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLm9mZih7Y2xpY2s6dGhpcy5fb3BlblBvcHVwLGtleXByZXNzOnRoaXMuX29uS2V5UHJlc3MscmVtb3ZlOnRoaXMuY2xvc2VQb3B1cCxtb3ZlOnRoaXMuX21vdmVQb3B1cH0pLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSx0aGlzLl9wb3B1cD1udWxsKSx0aGlzfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCxpKXtpZih0IGluc3RhbmNlb2YgVWV8fChpPXQsdD10aGlzKSx0IGluc3RhbmNlb2YgcWUpZm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dD10aGlzLl9sYXllcnNbZV07YnJlYWt9cmV0dXJuIGl8fChpPXQuZ2V0Q2VudGVyP3QuZ2V0Q2VudGVyKCk6dC5nZXRMYXRMbmcoKSksdGhpcy5fcG9wdXAmJnRoaXMuX21hcCYmKHRoaXMuX3BvcHVwLl9zb3VyY2U9dCx0aGlzLl9wb3B1cC51cGRhdGUoKSx0aGlzLl9tYXAub3BlblBvcHVwKHRoaXMuX3BvcHVwLGkpKSx0aGlzfSxjbG9zZVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5fY2xvc2UoKSx0aGlzfSx0b2dnbGVQb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzLl9wb3B1cC5fbWFwP3RoaXMuY2xvc2VQb3B1cCgpOnRoaXMub3BlblBvcHVwKHQpKSx0aGlzfSxpc1BvcHVwT3BlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLmlzT3BlbigpfSxzZXRQb3B1cENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRDb250ZW50KHQpLHRoaXN9LGdldFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxfb3BlblBvcHVwOmZ1bmN0aW9uKHQpe3ZhciBpPXQubGF5ZXJ8fHQudGFyZ2V0O3RoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJihRKHQpLGkgaW5zdGFuY2VvZiBKZT90aGlzLm9wZW5Qb3B1cCh0LmxheWVyfHx0LnRhcmdldCx0LmxhdGxuZyk6dGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKSYmdGhpcy5fcG9wdXAuX3NvdXJjZT09PWk/dGhpcy5jbG9zZVBvcHVwKCk6dGhpcy5vcGVuUG9wdXAoaSx0LmxhdGxuZykpfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9LF9vbktleVByZXNzOmZ1bmN0aW9uKHQpezEzPT09dC5vcmlnaW5hbEV2ZW50LmtleUNvZGUmJnRoaXMuX29wZW5Qb3B1cCh0KX19KTt2YXIgbG49aG4uZXh0ZW5kKHtvcHRpb25zOntwYW5lOiJ0b29sdGlwUGFuZSIsb2Zmc2V0OlswLDBdLGRpcmVjdGlvbjoiYXV0byIscGVybWFuZW50OiExLHN0aWNreTohMSxpbnRlcmFjdGl2ZTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtobi5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3BhY2l0eSksdC5maXJlKCJ0b29sdGlwb3BlbiIse3Rvb2x0aXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInRvb2x0aXBvcGVuIix7dG9vbHRpcDp0aGlzfSwhMCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe2huLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsdCksdC5maXJlKCJ0b29sdGlwY2xvc2UiLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKCJ0b29sdGlwY2xvc2UiLHt0b29sdGlwOnRoaXN9LCEwKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9aG4ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiBWaSYmIXRoaXMub3B0aW9ucy5wZXJtYW5lbnQmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0fSxfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5jbG9zZVRvb2x0aXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtdG9vbHRpcCAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikrIiBsZWFmbGV0LXpvb20tIisodGhpcy5fem9vbUFuaW1hdGVkPyJhbmltYXRlZCI6ImhpZGUiKTt0aGlzLl9jb250ZW50Tm9kZT10aGlzLl9jb250YWluZXI9aHQoImRpdiIsdCl9LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt9LF9hZGp1c3RQYW46ZnVuY3Rpb24oKXt9LF9zZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXAsZT10aGlzLl9jb250YWluZXIsbj1pLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoaS5nZXRDZW50ZXIoKSksbz1pLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHQpLHM9dGhpcy5vcHRpb25zLmRpcmVjdGlvbixyPWUub2Zmc2V0V2lkdGgsYT1lLm9mZnNldEhlaWdodCxoPXcodGhpcy5vcHRpb25zLm9mZnNldCksdT10aGlzLl9nZXRBbmNob3IoKTsidG9wIj09PXM/dD10LmFkZCh3KC1yLzIraC54LC1hK2gueSt1LnksITApKToiYm90dG9tIj09PXM/dD10LnN1YnRyYWN0KHcoci8yLWgueCwtaC55LCEwKSk6ImNlbnRlciI9PT1zP3Q9dC5zdWJ0cmFjdCh3KHIvMitoLngsYS8yLXUueStoLnksITApKToicmlnaHQiPT09c3x8ImF1dG8iPT09cyYmby54PG4ueD8ocz0icmlnaHQiLHQ9dC5hZGQodyhoLngrdS54LHUueS1hLzIraC55LCEwKSkpOihzPSJsZWZ0Iix0PXQuc3VidHJhY3QodyhyK3UueC1oLngsYS8yLXUueS1oLnksITApKSksbXQoZSwibGVhZmxldC10b29sdGlwLXJpZ2h0IiksbXQoZSwibGVhZmxldC10b29sdGlwLWxlZnQiKSxtdChlLCJsZWFmbGV0LXRvb2x0aXAtdG9wIiksbXQoZSwibGVhZmxldC10b29sdGlwLWJvdHRvbSIpLHB0KGUsImxlYWZsZXQtdG9vbHRpcC0iK3MpLEx0KGUsdCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX2NvbnRhaW5lciYmdnQodGhpcy5fY29udGFpbmVyLHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24oaSl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdyh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pO0xlLmluY2x1ZGUoe29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxufHwodD1uZXcgbG4oZSkuc2V0Q29udGVudCh0KSksaSYmdC5zZXRMYXRMbmcoaSksdGhpcy5oYXNMYXllcih0KT90aGlzOnRoaXMuYWRkTGF5ZXIodCl9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLFVlLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsbj8obCh0LGkpLHRoaXMuX3Rvb2x0aXA9dCx0Ll9zb3VyY2U9dGhpcyk6KHRoaXMuX3Rvb2x0aXAmJiFpfHwodGhpcy5fdG9vbHRpcD1uZXcgbG4oaSx0aGlzKSksdGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KHQpKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7aWYodHx8IXRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKXt2YXIgaT10PyJvZmYiOiJvbiIsZT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9O3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/ZS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGUubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGUubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGUubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSxWaSYmKGUuY2xpY2s9dGhpcy5fb3BlblRvb2x0aXApKSx0aGlzW2ldKGUpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0fX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCxpKXtpZih0IGluc3RhbmNlb2YgVWV8fChpPXQsdD10aGlzKSx0IGluc3RhbmNlb2YgcWUpZm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dD10aGlzLl9sYXllcnNbZV07YnJlYWt9cmV0dXJuIGl8fChpPXQuZ2V0Q2VudGVyP3QuZ2V0Q2VudGVyKCk6dC5nZXRMYXRMbmcoKSksdGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiYodGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5fdG9vbHRpcC51cGRhdGUoKSx0aGlzLl9tYXAub3BlblRvb2x0aXAodGhpcy5fdG9vbHRpcCxpKSx0aGlzLl90b29sdGlwLm9wdGlvbnMuaW50ZXJhY3RpdmUmJnRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciYmKHB0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwibGVhZmxldC1jbGlja2FibGUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikpKSx0aGlzfSxjbG9zZVRvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmKHRoaXMuX3Rvb2x0aXAuX2Nsb3NlKCksdGhpcy5fdG9vbHRpcC5vcHRpb25zLmludGVyYWN0aXZlJiZ0aGlzLl90b29sdGlwLl9jb250YWluZXImJihtdCh0aGlzLl90b29sdGlwLl9jb250YWluZXIsImxlYWZsZXQtY2xpY2thYmxlIiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl90b29sdGlwLl9jb250YWluZXIpKSksdGhpc30sdG9nZ2xlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmKHRoaXMuX3Rvb2x0aXAuX21hcD90aGlzLmNsb3NlVG9vbHRpcCgpOnRoaXMub3BlblRvb2x0aXAodCkpLHRoaXN9LGlzVG9vbHRpcE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcC5pc09wZW4oKX0sc2V0VG9vbHRpcENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXB9LF9vcGVuVG9vbHRpcDpmdW5jdGlvbih0KXt2YXIgaT10LmxheWVyfHx0LnRhcmdldDt0aGlzLl90b29sdGlwJiZ0aGlzLl9tYXAmJnRoaXMub3BlblRvb2x0aXAoaSx0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5P3QubGF0bG5nOnZvaWQgMCl9LF9tb3ZlVG9vbHRpcDpmdW5jdGlvbih0KXt2YXIgaSxlLG49dC5sYXRsbmc7dGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmdC5vcmlnaW5hbEV2ZW50JiYoaT10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC5vcmlnaW5hbEV2ZW50KSxlPXRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpKSxuPXRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoZSkpLHRoaXMuX3Rvb2x0aXAuc2V0TGF0TG5nKG4pfX0pO3ZhciBjbj1HZS5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0saHRtbDohMSxiZ1BvczpudWxsLGNsYXNzTmFtZToibGVhZmxldC1kaXYtaWNvbiJ9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGk9dCYmIkRJViI9PT10LnRhZ05hbWU/dDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPXRoaXMub3B0aW9ucztpZihpLmlubmVySFRNTD0hMSE9PWUuaHRtbD9lLmh0bWw6IiIsZS5iZ1Bvcyl7dmFyIG49dyhlLmJnUG9zKTtpLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj0tbi54KyJweCAiKy1uLnkrInB4In1yZXR1cm4gdGhpcy5fc2V0SWNvblN0eWxlcyhpLCJpY29uIiksaX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSk7R2UuRGVmYXVsdD1LZTt2YXIgX249VWUuZXh0ZW5kKHtvcHRpb25zOnt0aWxlU2l6ZToyNTYsb3BhY2l0eToxLHVwZGF0ZVdoZW5JZGxlOmppLHVwZGF0ZVdoZW5ab29taW5nOiEwLHVwZGF0ZUludGVydmFsOjIwMCx6SW5kZXg6MSxib3VuZHM6bnVsbCxtaW5ab29tOjAsbWF4Wm9vbTp2b2lkIDAsbWF4TmF0aXZlWm9vbTp2b2lkIDAsbWluTmF0aXZlWm9vbTp2b2lkIDAsbm9XcmFwOiExLHBhbmU6InRpbGVQYW5lIixjbGFzc05hbWU6IiIsa2VlcEJ1ZmZlcjoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2wodGhpcyx0KX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fbGV2ZWxzPXt9LHRoaXMuX3RpbGVzPXt9LHRoaXMuX3Jlc2V0VmlldygpLHRoaXMuX3VwZGF0ZSgpfSxiZWZvcmVBZGQ6ZnVuY3Rpb24odCl7dC5fYWRkWm9vbUxpbWl0KHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHV0KHRoaXMuX2NvbnRhaW5lciksdC5fcmVtb3ZlWm9vbUxpbWl0KHRoaXMpLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3RpbGVab29tPXZvaWQgMH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKGN0KHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKF90KHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbikpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkaW5nfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl91cGRhdGUoKSksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdwcmVyZXNldDp0aGlzLl9pbnZhbGlkYXRlQWxsLHZpZXdyZXNldDp0aGlzLl9yZXNldFZpZXcsem9vbTp0aGlzLl9yZXNldFZpZXcsbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmR9O3JldHVybiB0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9vbk1vdmV8fCh0aGlzLl9vbk1vdmU9byh0aGlzLl9vbk1vdmVFbmQsdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLHRoaXMpKSx0Lm1vdmU9dGhpcy5fb25Nb3ZlKSx0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxjcmVhdGVUaWxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSxnZXRUaWxlU2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy50aWxlU2l6ZTtyZXR1cm4gdCBpbnN0YW5jZW9mIHg/dDpuZXcgeCh0LHQpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyJiZ2b2lkIDAhPT10aGlzLm9wdGlvbnMuekluZGV4JiZudWxsIT09dGhpcy5vcHRpb25zLnpJbmRleCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9zZXRBdXRvWkluZGV4OmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxlPXRoaXMuZ2V0UGFuZSgpLmNoaWxkcmVuLG49LXQoLTEvMCwxLzApLG89MCxzPWUubGVuZ3RoO288cztvKyspaT1lW29dLnN0eWxlLnpJbmRleCxlW29dIT09dGhpcy5fY29udGFpbmVyJiZpJiYobj10KG4sK2kpKTtpc0Zpbml0ZShuKSYmKHRoaXMub3B0aW9ucy56SW5kZXg9bit0KC0xLDEpLHRoaXMuX3VwZGF0ZVpJbmRleCgpKX0sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXAmJiFMaSl7dnQodGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucy5vcGFjaXR5KTt2YXIgdD0rbmV3IERhdGUsaT0hMSxlPSExO2Zvcih2YXIgbiBpbiB0aGlzLl90aWxlcyl7dmFyIG89dGhpcy5fdGlsZXNbbl07aWYoby5jdXJyZW50JiZvLmxvYWRlZCl7dmFyIHM9TWF0aC5taW4oMSwodC1vLmxvYWRlZCkvMjAwKTt2dChvLmVsLHMpLHM8MT9pPSEwOihvLmFjdGl2ZT9lPSEwOnRoaXMuX29uT3BhcXVlVGlsZShvKSxvLmFjdGl2ZT0hMCl9fWUmJiF0aGlzLl9ub1BydW5lJiZ0aGlzLl9wcnVuZVRpbGVzKCksaSYmKGcodGhpcy5fZmFkZUZyYW1lKSx0aGlzLl9mYWRlRnJhbWU9Zih0aGlzLl91cGRhdGVPcGFjaXR5LHRoaXMpKX19LF9vbk9wYXF1ZVRpbGU6cixfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1odCgiZGl2IiwibGVhZmxldC1sYXllciAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpKX0sX3VwZGF0ZUxldmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGk9dGhpcy5vcHRpb25zLm1heFpvb207aWYodm9pZCAwIT09dCl7Zm9yKHZhciBlIGluIHRoaXMuX2xldmVscyl0aGlzLl9sZXZlbHNbZV0uZWwuY2hpbGRyZW4ubGVuZ3RofHxlPT09dD8odGhpcy5fbGV2ZWxzW2VdLmVsLnN0eWxlLnpJbmRleD1pLU1hdGguYWJzKHQtZSksdGhpcy5fb25VcGRhdGVMZXZlbChlKSk6KHV0KHRoaXMuX2xldmVsc1tlXS5lbCksdGhpcy5fcmVtb3ZlVGlsZXNBdFpvb20oZSksdGhpcy5fb25SZW1vdmVMZXZlbChlKSxkZWxldGUgdGhpcy5fbGV2ZWxzW2VdKTt2YXIgbj10aGlzLl9sZXZlbHNbdF0sbz10aGlzLl9tYXA7cmV0dXJuIG58fCgobj10aGlzLl9sZXZlbHNbdF09e30pLmVsPWh0KCJkaXYiLCJsZWFmbGV0LXRpbGUtY29udGFpbmVyIGxlYWZsZXQtem9vbS1hbmltYXRlZCIsdGhpcy5fY29udGFpbmVyKSxuLmVsLnN0eWxlLnpJbmRleD1pLG4ub3JpZ2luPW8ucHJvamVjdChvLnVucHJvamVjdChvLmdldFBpeGVsT3JpZ2luKCkpLHQpLnJvdW5kKCksbi56b29tPXQsdGhpcy5fc2V0Wm9vbVRyYW5zZm9ybShuLG8uZ2V0Q2VudGVyKCksby5nZXRab29tKCkpLG4uZWwub2Zmc2V0V2lkdGgsdGhpcy5fb25DcmVhdGVMZXZlbChuKSksdGhpcy5fbGV2ZWw9bixufX0sX29uVXBkYXRlTGV2ZWw6cixfb25SZW1vdmVMZXZlbDpyLF9vbkNyZWF0ZUxldmVsOnIsX3BydW5lVGlsZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0LGksZT10aGlzLl9tYXAuZ2V0Wm9vbSgpO2lmKGU+dGhpcy5vcHRpb25zLm1heFpvb218fGU8dGhpcy5vcHRpb25zLm1pblpvb20pdGhpcy5fcmVtb3ZlQWxsVGlsZXMoKTtlbHNle2Zvcih0IGluIHRoaXMuX3RpbGVzKShpPXRoaXMuX3RpbGVzW3RdKS5yZXRhaW49aS5jdXJyZW50O2Zvcih0IGluIHRoaXMuX3RpbGVzKWlmKChpPXRoaXMuX3RpbGVzW3RdKS5jdXJyZW50JiYhaS5hY3RpdmUpe3ZhciBuPWkuY29vcmRzO3RoaXMuX3JldGFpblBhcmVudChuLngsbi55LG4ueixuLnotNSl8fHRoaXMuX3JldGFpbkNoaWxkcmVuKG4ueCxuLnksbi56LG4ueisyKX1mb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5yZXRhaW58fHRoaXMuX3JlbW92ZVRpbGUodCl9fX0sX3JlbW92ZVRpbGVzQXRab29tOmZ1bmN0aW9uKHQpe2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1tpXS5jb29yZHMuej09PXQmJnRoaXMuX3JlbW92ZVRpbGUoaSl9LF9yZW1vdmVBbGxUaWxlczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl9yZW1vdmVUaWxlKHQpfSxfaW52YWxpZGF0ZUFsbDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sZXZlbHMpdXQodGhpcy5fbGV2ZWxzW3RdLmVsKSx0aGlzLl9vblJlbW92ZUxldmVsKHQpLGRlbGV0ZSB0aGlzLl9sZXZlbHNbdF07dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl90aWxlWm9vbT12b2lkIDB9LF9yZXRhaW5QYXJlbnQ6ZnVuY3Rpb24odCxpLGUsbil7dmFyIG89TWF0aC5mbG9vcih0LzIpLHM9TWF0aC5mbG9vcihpLzIpLHI9ZS0xLGE9bmV3IHgoK28sK3MpO2Euej0rcjt2YXIgaD10aGlzLl90aWxlQ29vcmRzVG9LZXkoYSksdT10aGlzLl90aWxlc1toXTtyZXR1cm4gdSYmdS5hY3RpdmU/KHUucmV0YWluPSEwLCEwKToodSYmdS5sb2FkZWQmJih1LnJldGFpbj0hMCkscj5uJiZ0aGlzLl9yZXRhaW5QYXJlbnQobyxzLHIsbikpfSxfcmV0YWluQ2hpbGRyZW46ZnVuY3Rpb24odCxpLGUsbil7Zm9yKHZhciBvPTIqdDtvPDIqdCsyO28rKylmb3IodmFyIHM9MippO3M8MippKzI7cysrKXt2YXIgcj1uZXcgeChvLHMpO3Iuej1lKzE7dmFyIGE9dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHIpLGg9dGhpcy5fdGlsZXNbYV07aCYmaC5hY3RpdmU/aC5yZXRhaW49ITA6KGgmJmgubG9hZGVkJiYoaC5yZXRhaW49ITApLGUrMTxuJiZ0aGlzLl9yZXRhaW5DaGlsZHJlbihvLHMsZSsxLG4pKX19LF9yZXNldFZpZXc6ZnVuY3Rpb24odCl7dmFyIGk9dCYmKHQucGluY2h8fHQuZmx5VG8pO3RoaXMuX3NldFZpZXcodGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCksaSxpKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3RoaXMuX3NldFZpZXcodC5jZW50ZXIsdC56b29tLCEwLHQubm9VcGRhdGUpfSxfY2xhbXBab29tOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucztyZXR1cm4gdm9pZCAwIT09aS5taW5OYXRpdmVab29tJiZ0PGkubWluTmF0aXZlWm9vbT9pLm1pbk5hdGl2ZVpvb206dm9pZCAwIT09aS5tYXhOYXRpdmVab29tJiZpLm1heE5hdGl2ZVpvb208dD9pLm1heE5hdGl2ZVpvb206dH0sX3NldFZpZXc6ZnVuY3Rpb24odCxpLGUsbil7dmFyIG89dGhpcy5fY2xhbXBab29tKE1hdGgucm91bmQoaSkpOyh2b2lkIDAhPT10aGlzLm9wdGlvbnMubWF4Wm9vbSYmbz50aGlzLm9wdGlvbnMubWF4Wm9vbXx8dm9pZCAwIT09dGhpcy5vcHRpb25zLm1pblpvb20mJm88dGhpcy5vcHRpb25zLm1pblpvb20pJiYobz12b2lkIDApO3ZhciBzPXRoaXMub3B0aW9ucy51cGRhdGVXaGVuWm9vbWluZyYmbyE9PXRoaXMuX3RpbGVab29tO24mJiFzfHwodGhpcy5fdGlsZVpvb209byx0aGlzLl9hYm9ydExvYWRpbmcmJnRoaXMuX2Fib3J0TG9hZGluZygpLHRoaXMuX3VwZGF0ZUxldmVscygpLHRoaXMuX3Jlc2V0R3JpZCgpLHZvaWQgMCE9PW8mJnRoaXMuX3VwZGF0ZSh0KSxlfHx0aGlzLl9wcnVuZVRpbGVzKCksdGhpcy5fbm9QcnVuZT0hIWUpLHRoaXMuX3NldFpvb21UcmFuc2Zvcm1zKHQsaSl9LF9zZXRab29tVHJhbnNmb3JtczpmdW5jdGlvbih0LGkpe2Zvcih2YXIgZSBpbiB0aGlzLl9sZXZlbHMpdGhpcy5fc2V0Wm9vbVRyYW5zZm9ybSh0aGlzLl9sZXZlbHNbZV0sdCxpKX0sX3NldFpvb21UcmFuc2Zvcm06ZnVuY3Rpb24odCxpLGUpe3ZhciBuPXRoaXMuX21hcC5nZXRab29tU2NhbGUoZSx0Lnpvb20pLG89dC5vcmlnaW4ubXVsdGlwbHlCeShuKS5zdWJ0cmFjdCh0aGlzLl9tYXAuX2dldE5ld1BpeGVsT3JpZ2luKGksZSkpLnJvdW5kKCk7Tmk/d3QodC5lbCxvLG4pOkx0KHQuZWwsbyl9LF9yZXNldEdyaWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10Lm9wdGlvbnMuY3JzLGU9dGhpcy5fdGlsZVNpemU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dGhpcy5fdGlsZVpvb20sbz10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcyh0aGlzLl90aWxlWm9vbSk7byYmKHRoaXMuX2dsb2JhbFRpbGVSYW5nZT10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKG8pKSx0aGlzLl93cmFwWD1pLndyYXBMbmcmJiF0aGlzLm9wdGlvbnMubm9XcmFwJiZbTWF0aC5mbG9vcih0LnByb2plY3QoWzAsaS53cmFwTG5nWzBdXSxuKS54L2UueCksTWF0aC5jZWlsKHQucHJvamVjdChbMCxpLndyYXBMbmdbMV1dLG4pLngvZS55KV0sdGhpcy5fd3JhcFk9aS53cmFwTGF0JiYhdGhpcy5vcHRpb25zLm5vV3JhcCYmW01hdGguZmxvb3IodC5wcm9qZWN0KFtpLndyYXBMYXRbMF0sMF0sbikueS9lLngpLE1hdGguY2VpbCh0LnByb2plY3QoW2kud3JhcExhdFsxXSwwXSxuKS55L2UueSldfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiZ0aGlzLl91cGRhdGUoKX0sX2dldFRpbGVkUGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5fYW5pbWF0aW5nWm9vbT9NYXRoLm1heChpLl9hbmltYXRlVG9ab29tLGkuZ2V0Wm9vbSgpKTppLmdldFpvb20oKSxuPWkuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fdGlsZVpvb20pLG89aS5wcm9qZWN0KHQsdGhpcy5fdGlsZVpvb20pLmZsb29yKCkscz1pLmdldFNpemUoKS5kaXZpZGVCeSgyKm4pO3JldHVybiBuZXcgUChvLnN1YnRyYWN0KHMpLG8uYWRkKHMpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYoaSl7dmFyIGU9dGhpcy5fY2xhbXBab29tKGkuZ2V0Wm9vbSgpKTtpZih2b2lkIDA9PT10JiYodD1pLmdldENlbnRlcigpKSx2b2lkIDAhPT10aGlzLl90aWxlWm9vbSl7dmFyIG49dGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyh0KSxvPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2Uobikscz1vLmdldENlbnRlcigpLHI9W10sYT10aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixoPW5ldyBQKG8uZ2V0Qm90dG9tTGVmdCgpLnN1YnRyYWN0KFthLC1hXSksby5nZXRUb3BSaWdodCgpLmFkZChbYSwtYV0pKTtpZighKGlzRmluaXRlKG8ubWluLngpJiZpc0Zpbml0ZShvLm1pbi55KSYmaXNGaW5pdGUoby5tYXgueCkmJmlzRmluaXRlKG8ubWF4LnkpKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBsb2FkIGFuIGluZmluaXRlIG51bWJlciBvZiB0aWxlcyIpO2Zvcih2YXIgdSBpbiB0aGlzLl90aWxlcyl7dmFyIGw9dGhpcy5fdGlsZXNbdV0uY29vcmRzO2wuej09PXRoaXMuX3RpbGVab29tJiZoLmNvbnRhaW5zKG5ldyB4KGwueCxsLnkpKXx8KHRoaXMuX3RpbGVzW3VdLmN1cnJlbnQ9ITEpfWlmKE1hdGguYWJzKGUtdGhpcy5fdGlsZVpvb20pPjEpdGhpcy5fc2V0Vmlldyh0LGUpO2Vsc2V7Zm9yKHZhciBjPW8ubWluLnk7Yzw9by5tYXgueTtjKyspZm9yKHZhciBfPW8ubWluLng7Xzw9by5tYXgueDtfKyspe3ZhciBkPW5ldyB4KF8sYyk7aWYoZC56PXRoaXMuX3RpbGVab29tLHRoaXMuX2lzVmFsaWRUaWxlKGQpKXt2YXIgcD10aGlzLl90aWxlc1t0aGlzLl90aWxlQ29vcmRzVG9LZXkoZCldO3A/cC5jdXJyZW50PSEwOnIucHVzaChkKX19aWYoci5zb3J0KGZ1bmN0aW9uKHQsaSl7cmV0dXJuIHQuZGlzdGFuY2VUbyhzKS1pLmRpc3RhbmNlVG8ocyl9KSwwIT09ci5sZW5ndGgpe3RoaXMuX2xvYWRpbmd8fCh0aGlzLl9sb2FkaW5nPSEwLHRoaXMuZmlyZSgibG9hZGluZyIpKTt2YXIgbT1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKF89MDtfPHIubGVuZ3RoO18rKyl0aGlzLl9hZGRUaWxlKHJbX10sbSk7dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQobSl9fX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFpLmluZmluaXRlKXt2YXIgZT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWkud3JhcExuZyYmKHQueDxlLm1pbi54fHx0Lng+ZS5tYXgueCl8fCFpLndyYXBMYXQmJih0Lnk8ZS5taW4ueXx8dC55PmUubWF4LnkpKXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuYm91bmRzKXJldHVybiEwO3ZhciBuPXRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyh0KTtyZXR1cm4geih0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyhuKX0sX2tleVRvQm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpKX0sX3RpbGVDb29yZHNUb053U2U6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dC5zY2FsZUJ5KGUpLG89bi5hZGQoZSk7cmV0dXJuW2kudW5wcm9qZWN0KG4sdC56KSxpLnVucHJvamVjdChvLHQueildfSxfdGlsZUNvb3Jkc1RvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksZT1uZXcgVChpWzBdLGlbMV0pO3JldHVybiB0aGlzLm9wdGlvbnMubm9XcmFwfHwoZT10aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyhlKSksZX0sX3RpbGVDb29yZHNUb0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdC54KyI6Iit0LnkrIjoiK3Quen0sX2tleVRvVGlsZUNvb3JkczpmdW5jdGlvbih0KXt2YXIgaT10LnNwbGl0KCI6IiksZT1uZXcgeCgraVswXSwraVsxXSk7cmV0dXJuIGUuej0raVsyXSxlfSxfcmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlc1t0XTtpJiYoQ2l8fGkuZWwuc2V0QXR0cmlidXRlKCJzcmMiLG5pKSx1dChpLmVsKSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5maXJlKCJ0aWxldW5sb2FkIix7dGlsZTppLmVsLGNvb3Jkczp0aGlzLl9rZXlUb1RpbGVDb29yZHModCl9KSl9LF9pbml0VGlsZTpmdW5jdGlvbih0KXtwdCh0LCJsZWFmbGV0LXRpbGUiKTt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4Iix0Lm9uc2VsZWN0c3RhcnQ9cix0Lm9ubW91c2Vtb3ZlPXIsTGkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnZ0KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLFRpJiYhemkmJih0LnN0eWxlLldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eT0iaGlkZGVuIil9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49dGhpcy5fZ2V0VGlsZVBvcyh0KSxvPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxzPXRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKHQpLGUodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKHMpLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmZihlKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxzKSksTHQocyxuKSx0aGlzLl90aWxlc1tvXT17ZWw6cyxjb29yZHM6dCxjdXJyZW50OiEwfSxpLmFwcGVuZENoaWxkKHMpLHRoaXMuZmlyZSgidGlsZWxvYWRzdGFydCIse3RpbGU6cyxjb29yZHM6dH0pfSxfdGlsZVJlYWR5OmZ1bmN0aW9uKHQsaSxuKXtpZih0aGlzLl9tYXApe2kmJnRoaXMuZmlyZSgidGlsZWVycm9yIix7ZXJyb3I6aSx0aWxlOm4sY29vcmRzOnR9KTt2YXIgbz10aGlzLl90aWxlQ29vcmRzVG9LZXkodCk7KG49dGhpcy5fdGlsZXNbb10pJiYobi5sb2FkZWQ9K25ldyBEYXRlLHRoaXMuX21hcC5fZmFkZUFuaW1hdGVkPyh2dChuLmVsLDApLGcodGhpcy5fZmFkZUZyYW1lKSx0aGlzLl9mYWRlRnJhbWU9Zih0aGlzLl91cGRhdGVPcGFjaXR5LHRoaXMpKToobi5hY3RpdmU9ITAsdGhpcy5fcHJ1bmVUaWxlcygpKSxpfHwocHQobi5lbCwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuZmlyZSgidGlsZWxvYWQiLHt0aWxlOm4uZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoImxvYWQiKSxMaXx8IXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkP2YodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKTpzZXRUaW1lb3V0KGUodGhpcy5fcHJ1bmVUaWxlcyx0aGlzKSwyNTApKSl9fSxfZ2V0VGlsZVBvczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zY2FsZUJ5KHRoaXMuZ2V0VGlsZVNpemUoKSkuc3VidHJhY3QodGhpcy5fbGV2ZWwub3JpZ2luKX0sX3dyYXBDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGk9bmV3IHgodGhpcy5fd3JhcFg/cyh0LngsdGhpcy5fd3JhcFgpOnQueCx0aGlzLl93cmFwWT9zKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gaS56PXQueixpfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBQKHQubWluLnVuc2NhbGVCeShpKS5mbG9vcigpLHQubWF4LnVuc2NhbGVCeShpKS5jZWlsKCkuc3VidHJhY3QoWzEsMV0pKX0sX25vVGlsZXNUb0xvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpaWYoIXRoaXMuX3RpbGVzW3RdLmxvYWRlZClyZXR1cm4hMTtyZXR1cm4hMH19KSxkbj1fbi5leHRlbmQoe29wdGlvbnM6e21pblpvb206MCxtYXhab29tOjE4LHN1YmRvbWFpbnM6ImFiYyIsZXJyb3JUaWxlVXJsOiIiLHpvb21PZmZzZXQ6MCx0bXM6ITEsem9vbVJldmVyc2U6ITEsZGV0ZWN0UmV0aW5hOiExLGNyb3NzT3JpZ2luOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsaSl7dGhpcy5fdXJsPXQsKGk9bCh0aGlzLGkpKS5kZXRlY3RSZXRpbmEmJktpJiZpLm1heFpvb20+MCYmKGkudGlsZVNpemU9TWF0aC5mbG9vcihpLnRpbGVTaXplLzIpLGkuem9vbVJldmVyc2U/KGkuem9vbU9mZnNldC0tLGkubWluWm9vbSsrKTooaS56b29tT2Zmc2V0KyssaS5tYXhab29tLS0pLGkubWluWm9vbT1NYXRoLm1heCgwLGkubWluWm9vbSkpLCJzdHJpbmciPT10eXBlb2YgaS5zdWJkb21haW5zJiYoaS5zdWJkb21haW5zPWkuc3ViZG9tYWlucy5zcGxpdCgiIikpLFRpfHx0aGlzLm9uKCJ0aWxldW5sb2FkIix0aGlzLl9vblRpbGVSZW1vdmUpfSxzZXRVcmw6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5fdXJsPXQsaXx8dGhpcy5yZWRyYXcoKSx0aGlzfSxjcmVhdGVUaWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIFYobiwibG9hZCIsZSh0aGlzLl90aWxlT25Mb2FkLHRoaXMsaSxuKSksVihuLCJlcnJvciIsZSh0aGlzLl90aWxlT25FcnJvcix0aGlzLGksbikpLHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmKG4uY3Jvc3NPcmlnaW49IiIpLG4uYWx0PSIiLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicHJlc2VudGF0aW9uIiksbi5zcmM9dGhpcy5nZXRUaWxlVXJsKHQpLG59LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9e3I6S2k/IkAyeCI6IiIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSl7dmFyIG49dGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55LXQueTt0aGlzLm9wdGlvbnMudG1zJiYoZS55PW4pLGVbIi15Il09bn1yZXR1cm4gXyh0aGlzLl91cmwsaShlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGkpe0xpP3NldFRpbWVvdXQoZSh0LHRoaXMsbnVsbCxpKSwwKTp0KG51bGwsaSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGksZSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZpLmdldEF0dHJpYnV0ZSgic3JjIikhPT1uJiYoaS5zcmM9biksdChlLGkpfSxfb25UaWxlUmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGlsZS5vbmxvYWQ9bnVsbH0sX2dldFpvb21Gb3JVcmw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlWm9vbSxpPXRoaXMub3B0aW9ucy5tYXhab29tLGU9dGhpcy5vcHRpb25zLnpvb21SZXZlcnNlLG49dGhpcy5vcHRpb25zLnpvb21PZmZzZXQ7cmV0dXJuIGUmJih0PWktdCksdCtufSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBpPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaV19LF9hYm9ydExvYWRpbmc6ZnVuY3Rpb24oKXt2YXIgdCxpO2Zvcih0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmNvb3Jkcy56IT09dGhpcy5fdGlsZVpvb20mJigoaT10aGlzLl90aWxlc1t0XS5lbCkub25sb2FkPXIsaS5vbmVycm9yPXIsaS5jb21wbGV0ZXx8KGkuc3JjPW5pLHV0KGkpLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSkpfX0pLHBuPWRuLmV4dGVuZCh7ZGVmYXVsdFdtc1BhcmFtczp7c2VydmljZToiV01TIixyZXF1ZXN0OiJHZXRNYXAiLGxheWVyczoiIixzdHlsZXM6IiIsZm9ybWF0OiJpbWFnZS9qcGVnIix0cmFuc3BhcmVudDohMSx2ZXJzaW9uOiIxLjEuMSJ9LG9wdGlvbnM6e2NyczpudWxsLHVwcGVyY2FzZTohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3RoaXMuX3VybD10O3ZhciBuPWkoe30sdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtmb3IodmFyIG8gaW4gZSlvIGluIHRoaXMub3B0aW9uc3x8KG5bb109ZVtvXSk7dmFyIHM9KGU9bCh0aGlzLGUpKS5kZXRlY3RSZXRpbmEmJktpPzI6MSxyPXRoaXMuZ2V0VGlsZVNpemUoKTtuLndpZHRoPXIueCpzLG4uaGVpZ2h0PXIueSpzLHRoaXMud21zUGFyYW1zPW59LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX2Nycz10aGlzLm9wdGlvbnMuY3JzfHx0Lm9wdGlvbnMuY3JzLHRoaXMuX3dtc1ZlcnNpb249cGFyc2VGbG9hdCh0aGlzLndtc1BhcmFtcy52ZXJzaW9uKTt2YXIgaT10aGlzLl93bXNWZXJzaW9uPj0xLjM/ImNycyI6InNycyI7dGhpcy53bXNQYXJhbXNbaV09dGhpcy5fY3JzLmNvZGUsZG4ucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyx0KX0sZ2V0VGlsZVVybDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGU9dGhpcy5fY3JzLG49YihlLnByb2plY3QoaVswXSksZS5wcm9qZWN0KGlbMV0pKSxvPW4ubWluLHM9bi5tYXgscj0odGhpcy5fd21zVmVyc2lvbj49MS4zJiZ0aGlzLl9jcnM9PT1IZT9bby55LG8ueCxzLnkscy54XTpbby54LG8ueSxzLngscy55XSkuam9pbigiLCIpLGE9TC5UaWxlTGF5ZXIucHJvdG90eXBlLmdldFRpbGVVcmwuY2FsbCh0aGlzLHQpO3JldHVybiBhK2ModGhpcy53bXNQYXJhbXMsYSx0aGlzLm9wdGlvbnMudXBwZXJjYXNlKSsodGhpcy5vcHRpb25zLnVwcGVyY2FzZT8iJkJCT1g9IjoiJmJib3g9Iikrcn0sc2V0UGFyYW1zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pO2RuLldNUz1wbixZdC53bXM9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IHBuKHQsaSl9O3ZhciBtbj1VZS5leHRlbmQoe29wdGlvbnM6e3BhZGRpbmc6LjEsdG9sZXJhbmNlOjB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7bCh0aGlzLHQpLG4odGhpcyksdGhpcy5fbGF5ZXJzPXRoaXMuX2xheWVyc3x8e319LG9uQWRkOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyfHwodGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3pvb21BbmltYXRlZCYmcHQodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl91cGRhdGUoKSx0aGlzLm9uKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpLHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl9yZXNldCx6b29tOnRoaXMuX29uWm9vbSxtb3ZlZW5kOnRoaXMuX3VwZGF0ZSx6b29tZW5kOnRoaXMuX29uWm9vbUVuZH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fb25BbmltWm9vbSksdH0sX29uQW5pbVpvb206ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlVHJhbnNmb3JtKHQuY2VudGVyLHQuem9vbSl9LF9vblpvb206ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCkpfSxfdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKHQsaSl7dmFyIGU9dGhpcy5fbWFwLmdldFpvb21TY2FsZShpLHRoaXMuX3pvb20pLG49UHQodGhpcy5fY29udGFpbmVyKSxvPXRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSguNSt0aGlzLm9wdGlvbnMucGFkZGluZykscz10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsaSkscj10aGlzLl9tYXAucHJvamVjdCh0LGkpLnN1YnRyYWN0KHMpLGE9by5tdWx0aXBseUJ5KC1lKS5hZGQobikuYWRkKG8pLnN1YnRyYWN0KHIpO05pP3d0KHRoaXMuX2NvbnRhaW5lcixhLGUpOkx0KHRoaXMuX2NvbnRhaW5lcixhKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKTtmb3IodmFyIHQgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5fcmVzZXQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9wcm9qZWN0KCl9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl91cGRhdGUoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5wYWRkaW5nLGk9dGhpcy5fbWFwLmdldFNpemUoKSxlPXRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChpLm11bHRpcGx5QnkoLXQpKS5yb3VuZCgpO3RoaXMuX2JvdW5kcz1uZXcgUChlLGUuYWRkKGkubXVsdGlwbHlCeSgxKzIqdCkpLnJvdW5kKCkpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fem9vbT10aGlzLl9tYXAuZ2V0Wm9vbSgpfX0pLGZuPW1uLmV4dGVuZCh7Z2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9bW4ucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe21uLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Vih0LCJtb3VzZW1vdmUiLG8odGhpcy5fb25Nb3VzZU1vdmUsMzIsdGhpcyksdGhpcyksVih0LCJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjb250ZXh0bWVudSIsdGhpcy5fb25DbGljayx0aGlzKSxWKHQsIm1vdXNlb3V0Iix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0aGlzLl9jdHg9dC5nZXRDb250ZXh0KCIyZCIpfSxfZGVzdHJveUNvbnRhaW5lcjpmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jdHgsdXQodGhpcy5fY29udGFpbmVyKSxxKHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lcn0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMpe3RoaXMuX3JlZHJhd0JvdW5kcz1udWxsO2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl91cGRhdGUoKTt0aGlzLl9yZWRyYXcoKX19LF91cGRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwhdGhpcy5fYm91bmRzKXt0aGlzLl9kcmF3bkxheWVycz17fSxtbi5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuX2JvdW5kcyxpPXRoaXMuX2NvbnRhaW5lcixlPXQuZ2V0U2l6ZSgpLG49S2k/MjoxO0x0KGksdC5taW4pLGkud2lkdGg9biplLngsaS5oZWlnaHQ9biplLnksaS5zdHlsZS53aWR0aD1lLngrInB4IixpLnN0eWxlLmhlaWdodD1lLnkrInB4IixLaSYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKCJ1cGRhdGUiKX19LF9yZXNldDpmdW5jdGlvbigpe21uLnByb3RvdHlwZS5fcmVzZXQuY2FsbCh0aGlzKSx0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzJiYodGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocz0hMSx0aGlzLl91cGRhdGVQYXRocygpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZURhc2hBcnJheSh0KSx0aGlzLl9sYXllcnNbbih0KV09dDt2YXIgaT10Ll9vcmRlcj17bGF5ZXI6dCxwcmV2OnRoaXMuX2RyYXdMYXN0LG5leHQ6bnVsbH07dGhpcy5fZHJhd0xhc3QmJih0aGlzLl9kcmF3TGFzdC5uZXh0PWkpLHRoaXMuX2RyYXdMYXN0PWksdGhpcy5fZHJhd0ZpcnN0PXRoaXMuX2RyYXdGaXJzdHx8dGhpcy5fZHJhd0xhc3R9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF9yZW1vdmVQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX29yZGVyLGU9aS5uZXh0LG49aS5wcmV2O2U/ZS5wcmV2PW46dGhpcy5fZHJhd0xhc3Q9bixuP24ubmV4dD1lOnRoaXMuX2RyYXdGaXJzdD1lLGRlbGV0ZSB0Ll9vcmRlcixkZWxldGUgdGhpcy5fbGF5ZXJzW0wuc3RhbXAodCldLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyh0KSx0Ll9wcm9qZWN0KCksdC5fdXBkYXRlKCksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZURhc2hBcnJheSh0KSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlRGFzaEFycmF5OmZ1bmN0aW9uKHQpe2lmKHQub3B0aW9ucy5kYXNoQXJyYXkpe3ZhciBpLGU9dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgiLCIpLG49W107Zm9yKGk9MDtpPGUubGVuZ3RoO2krKyluLnB1c2goTnVtYmVyKGVbaV0pKTt0Lm9wdGlvbnMuX2Rhc2hBcnJheT1ufX0sX3JlcXVlc3RSZWRyYXc6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYodGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHRoaXMuX3JlZHJhd1JlcXVlc3Q9dGhpcy5fcmVkcmF3UmVxdWVzdHx8Zih0aGlzLl9yZWRyYXcsdGhpcykpfSxfZXh0ZW5kUmVkcmF3Qm91bmRzOmZ1bmN0aW9uKHQpe2lmKHQuX3B4Qm91bmRzKXt2YXIgaT0odC5vcHRpb25zLndlaWdodHx8MCkrMTt0aGlzLl9yZWRyYXdCb3VuZHM9dGhpcy5fcmVkcmF3Qm91bmRzfHxuZXcgUCx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbaSxpXSkpLHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQodC5fcHhCb3VuZHMubWF4LmFkZChbaSxpXSkpfX0sX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuX3JlZHJhd1JlcXVlc3Q9bnVsbCx0aGlzLl9yZWRyYXdCb3VuZHMmJih0aGlzLl9yZWRyYXdCb3VuZHMubWluLl9mbG9vcigpLHRoaXMuX3JlZHJhd0JvdW5kcy5tYXguX2NlaWwoKSksdGhpcy5fY2xlYXIoKSx0aGlzLl9kcmF3KCksdGhpcy5fcmVkcmF3Qm91bmRzPW51bGx9LF9jbGVhcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlZHJhd0JvdW5kcztpZih0KXt2YXIgaT10LmdldFNpemUoKTt0aGlzLl9jdHguY2xlYXJSZWN0KHQubWluLngsdC5taW4ueSxpLngsaS55KX1lbHNlIHRoaXMuX2N0eC5jbGVhclJlY3QoMCwwLHRoaXMuX2NvbnRhaW5lci53aWR0aCx0aGlzLl9jb250YWluZXIuaGVpZ2h0KX0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMuX3JlZHJhd0JvdW5kcztpZih0aGlzLl9jdHguc2F2ZSgpLGkpe3ZhciBlPWkuZ2V0U2l6ZSgpO3RoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHgucmVjdChpLm1pbi54LGkubWluLnksZS54LGUueSksdGhpcy5fY3R4LmNsaXAoKX10aGlzLl9kcmF3aW5nPSEwO2Zvcih2YXIgbj10aGlzLl9kcmF3Rmlyc3Q7bjtuPW4ubmV4dCl0PW4ubGF5ZXIsKCFpfHx0Ll9weEJvdW5kcyYmdC5fcHhCb3VuZHMuaW50ZXJzZWN0cyhpKSkmJnQuX3VwZGF0ZVBhdGgoKTt0aGlzLl9kcmF3aW5nPSExLHRoaXMuX2N0eC5yZXN0b3JlKCl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5fZHJhd2luZyl7dmFyIGUsbixvLHMscj10Ll9wYXJ0cyxhPXIubGVuZ3RoLGg9dGhpcy5fY3R4O2lmKGEpe2Zvcih0aGlzLl9kcmF3bkxheWVyc1t0Ll9sZWFmbGV0X2lkXT10LGguYmVnaW5QYXRoKCksZT0wO2U8YTtlKyspe2ZvcihuPTAsbz1yW2VdLmxlbmd0aDtuPG87bisrKXM9cltlXVtuXSxoW24/ImxpbmVUbyI6Im1vdmVUbyJdKHMueCxzLnkpO2kmJmguY2xvc2VQYXRoKCl9dGhpcy5fZmlsbFN0cm9rZShoLHQpfX19LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7aWYodGhpcy5fZHJhd2luZyYmIXQuX2VtcHR5KCkpe3ZhciBpPXQuX3BvaW50LGU9dGhpcy5fY3R4LG49TWF0aC5tYXgoTWF0aC5yb3VuZCh0Ll9yYWRpdXMpLDEpLG89KE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fG4pL247dGhpcy5fZHJhd25MYXllcnNbdC5fbGVhZmxldF9pZF09dCwxIT09byYmKGUuc2F2ZSgpLGUuc2NhbGUoMSxvKSksZS5iZWdpblBhdGgoKSxlLmFyYyhpLngsaS55L28sbiwwLDIqTWF0aC5QSSwhMSksMSE9PW8mJmUucmVzdG9yZSgpLHRoaXMuX2ZpbGxTdHJva2UoZSx0KX19LF9maWxsU3Ryb2tlOmZ1bmN0aW9uKHQsaSl7dmFyIGU9aS5vcHRpb25zO2UuZmlsbCYmKHQuZ2xvYmFsQWxwaGE9ZS5maWxsT3BhY2l0eSx0LmZpbGxTdHlsZT1lLmZpbGxDb2xvcnx8ZS5jb2xvcix0LmZpbGwoZS5maWxsUnVsZXx8ImV2ZW5vZGQiKSksZS5zdHJva2UmJjAhPT1lLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goaS5vcHRpb25zJiZpLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9ZS5vcGFjaXR5LHQubGluZVdpZHRoPWUud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9ZS5jb2xvcix0LmxpbmVDYXA9ZS5saW5lQ2FwLHQubGluZUpvaW49ZS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBpLGUsbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShpPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmkuX2NvbnRhaW5zUG9pbnQobikmJiF0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGkpJiYoZT1pKTtlJiYoZXQodCksdGhpcy5fZmlyZUV2ZW50KFtlXSx0KSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9tYXAmJiF0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pe3ZhciBpPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO3RoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxpKX19LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9ob3ZlcmVkTGF5ZXI7aSYmKG10KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbaV0sdCwibW91c2VvdXQiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCl9LF9oYW5kbGVNb3VzZUhvdmVyOmZ1bmN0aW9uKHQsaSl7Zm9yKHZhciBlLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoZT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZlLl9jb250YWluc1BvaW50KGkpJiYobj1lKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKHB0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbbl0sdCwibW91c2VvdmVyIiksdGhpcy5faG92ZXJlZExheWVyPW4pKSx0aGlzLl9ob3ZlcmVkTGF5ZXImJnRoaXMuX2ZpcmVFdmVudChbdGhpcy5faG92ZXJlZExheWVyXSx0KX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGksZSl7dGhpcy5fbWFwLl9maXJlRE9NRXZlbnQoaSxlfHxpLnR5cGUsdCl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dC5fb3JkZXIsZT1pLm5leHQsbj1pLnByZXY7ZSYmKGUucHJldj1uLG4/bi5uZXh0PWU6ZSYmKHRoaXMuX2RyYXdGaXJzdD1lKSxpLnByZXY9dGhpcy5fZHJhd0xhc3QsdGhpcy5fZHJhd0xhc3QubmV4dD1pLGkubmV4dD1udWxsLHRoaXMuX2RyYXdMYXN0PWksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXt2YXIgaT10Ll9vcmRlcixlPWkubmV4dCxuPWkucHJldjtuJiYobi5uZXh0PWUsZT9lLnByZXY9bjpuJiYodGhpcy5fZHJhd0xhc3Q9biksaS5wcmV2PW51bGwsaS5uZXh0PXRoaXMuX2RyYXdGaXJzdCx0aGlzLl9kcmF3Rmlyc3QucHJldj1pLHRoaXMuX2RyYXdGaXJzdD1pLHRoaXMuX3JlcXVlc3RSZWRyYXcodCkpfX0pLGduPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCgibHZtbCIsInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSx2bj17X2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9aHQoImRpdiIsImxlYWZsZXQtdm1sLWNvbnRhaW5lciIpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9hbmltYXRpbmdab29tfHwobW4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0aGlzLmZpcmUoInVwZGF0ZSIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX2NvbnRhaW5lcj1nbigic2hhcGUiKTtwdChpLCJsZWFmbGV0LXZtbC1zaGFwZSAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikpLGkuY29vcmRzaXplPSIxIDEiLHQuX3BhdGg9Z24oInBhdGgiKSxpLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1tuKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgaT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGkpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChpKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGk9dC5fY29udGFpbmVyO3V0KGkpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoaSksZGVsZXRlIHRoaXMuX2xheWVyc1tuKHQpXX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3N0cm9rZSxlPXQuX2ZpbGwsbj10Lm9wdGlvbnMsbz10Ll9jb250YWluZXI7by5zdHJva2VkPSEhbi5zdHJva2Usby5maWxsZWQ9ISFuLmZpbGwsbi5zdHJva2U/KGl8fChpPXQuX3N0cm9rZT1nbigic3Ryb2tlIikpLG8uYXBwZW5kQ2hpbGQoaSksaS53ZWlnaHQ9bi53ZWlnaHQrInB4IixpLmNvbG9yPW4uY29sb3IsaS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9pLmRhc2hTdHlsZT1laShuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbigiICIpOm4uZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywiICIpOmkuZGFzaFN0eWxlPSIiLGkuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKCJidXR0IiwiZmxhdCIpLGkuam9pbnN0eWxlPW4ubGluZUpvaW4pOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGV8fChlPXQuX2ZpbGw9Z24oImZpbGwiKSksby5hcHBlbmRDaGlsZChlKSxlLmNvbG9yPW4uZmlsbENvbG9yfHxuLmNvbG9yLGUub3BhY2l0eT1uLmZpbGxPcGFjaXR5KTplJiYoby5yZW1vdmVDaGlsZChlKSx0Ll9maWxsPW51bGwpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BvaW50LnJvdW5kKCksZT1NYXRoLnJvdW5kKHQuX3JhZGl1cyksbj1NYXRoLnJvdW5kKHQuX3JhZGl1c1l8fGUpO3RoaXMuX3NldFBhdGgodCx0Ll9lbXB0eSgpPyJNMCAwIjoiQUwgIitpLngrIiwiK2kueSsiICIrZSsiLCIrbisiIDAsMjM1OTI2MDAiKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnY9aX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbih0KXtjdCh0Ll9jb250YWluZXIpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7X3QodC5fY29udGFpbmVyKX19LHluPUppP2duOkUseG49bW4uZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1tbi5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHQuem9vbXN0YXJ0PXRoaXMuX29uWm9vbVN0YXJ0LHR9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPXluKCJzdmciKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl9yb290R3JvdXA9eW4oImciKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdEdyb3VwKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXt1dCh0aGlzLl9jb250YWluZXIpLHEodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyLGRlbGV0ZSB0aGlzLl9yb290R3JvdXAsZGVsZXRlIHRoaXMuX3N2Z1NpemV9LF9vblpvb21TdGFydDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbXx8IXRoaXMuX2JvdW5kcyl7bW4ucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTt2YXIgdD10aGlzLl9ib3VuZHMsaT10LmdldFNpemUoKSxlPXRoaXMuX2NvbnRhaW5lcjt0aGlzLl9zdmdTaXplJiZ0aGlzLl9zdmdTaXplLmVxdWFscyhpKXx8KHRoaXMuX3N2Z1NpemU9aSxlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGkueCksZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsaS55KSksTHQoZSx0Lm1pbiksZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFt0Lm1pbi54LHQubWluLnksaS54LGkueV0uam9pbigiICIpKSx0aGlzLmZpcmUoInVwZGF0ZSIpfX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBpPXQuX3BhdGg9eW4oInBhdGgiKTt0Lm9wdGlvbnMuY2xhc3NOYW1lJiZwdChpLHQub3B0aW9ucy5jbGFzc05hbWUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmcHQoaSwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1tuKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9yb290R3JvdXB8fHRoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl9yb290R3JvdXAuYXBwZW5kQ2hpbGQodC5fcGF0aCksdC5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0Ll9wYXRoKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dXQodC5fcGF0aCksdC5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0Ll9wYXRoKSxkZWxldGUgdGhpcy5fbGF5ZXJzW24odCldfSxfdXBkYXRlUGF0aDpmdW5jdGlvbih0KXt0Ll9wcm9qZWN0KCksdC5fdXBkYXRlKCl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbih0KXt2YXIgaT10Ll9wYXRoLGU9dC5vcHRpb25zO2kmJihlLnN0cm9rZT8oaS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsZS5jb2xvciksaS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1vcGFjaXR5IixlLm9wYWNpdHkpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUud2VpZ2h0KSxpLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLGUubGluZUNhcCksaS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsZS5saW5lSm9pbiksZS5kYXNoQXJyYXk/aS5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLGUuZGFzaEFycmF5KTppLnJlbW92ZUF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIpLGUuZGFzaE9mZnNldD9pLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiLGUuZGFzaE9mZnNldCk6aS5yZW1vdmVBdHRyaWJ1dGUoInN0cm9rZS1kYXNob2Zmc2V0IikpOmkuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJub25lIiksZS5maWxsPyhpLnNldEF0dHJpYnV0ZSgiZmlsbCIsZS5maWxsQ29sb3J8fGUuY29sb3IpLGkuc2V0QXR0cmlidXRlKCJmaWxsLW9wYWNpdHkiLGUuZmlsbE9wYWNpdHkpLGkuc2V0QXR0cmlidXRlKCJmaWxsLXJ1bGUiLGUuZmlsbFJ1bGV8fCJldmVub2RkIikpOmkuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpKX0sX3VwZGF0ZVBvbHk6ZnVuY3Rpb24odCxpKXt0aGlzLl9zZXRQYXRoKHQsayh0Ll9wYXJ0cyxpKSl9LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5fcG9pbnQsZT1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbj0iYSIrZSsiLCIrKE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fGUpKyIgMCAxLDAgIixvPXQuX2VtcHR5KCk/Ik0wIDAiOiJNIisoaS54LWUpKyIsIitpLnkrbisyKmUrIiwwICIrbisyKi1lKyIsMCAiO3RoaXMuX3NldFBhdGgodCxvKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxpKXt0Ll9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsaSl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7Y3QodC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtfdCh0Ll9wYXRoKX19KTtKaSYmeG4uaW5jbHVkZSh2biksTGUuaW5jbHVkZSh7Z2V0UmVuZGVyZXI6ZnVuY3Rpb24odCl7dmFyIGk9dC5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9nZXRQYW5lUmVuZGVyZXIodC5vcHRpb25zLnBhbmUpfHx0aGlzLm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX3JlbmRlcmVyO3JldHVybiBpfHwoaT10aGlzLl9yZW5kZXJlcj10aGlzLm9wdGlvbnMucHJlZmVyQ2FudmFzJiZYdCgpfHxKdCgpKSx0aGlzLmhhc0xheWVyKGkpfHx0aGlzLmFkZExheWVyKGkpLGl9LF9nZXRQYW5lUmVuZGVyZXI6ZnVuY3Rpb24odCl7aWYoIm92ZXJsYXlQYW5lIj09PXR8fHZvaWQgMD09PXQpcmV0dXJuITE7dmFyIGk9dGhpcy5fcGFuZVJlbmRlcmVyc1t0XTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9eG4mJkp0KHtwYW5lOnR9KXx8Zm4mJlh0KHtwYW5lOnR9KSx0aGlzLl9wYW5lUmVuZGVyZXJzW3RdPWkpLGl9fSk7dmFyIHduPWVuLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGkpe2VuLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksaSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9eih0KSxbdC5nZXRTb3V0aFdlc3QoKSx0LmdldE5vcnRoV2VzdCgpLHQuZ2V0Tm9ydGhFYXN0KCksdC5nZXRTb3V0aEVhc3QoKV19fSk7eG4uY3JlYXRlPXluLHhuLnBvaW50c1RvUGF0aD1rLG5uLmdlb21ldHJ5VG9MYXllcj1XdCxubi5jb29yZHNUb0xhdExuZz1IdCxubi5jb29yZHNUb0xhdExuZ3M9RnQsbm4ubGF0TG5nVG9Db29yZHM9VXQsbm4ubGF0TG5nc1RvQ29vcmRzPVZ0LG5uLmdldEZlYXR1cmU9cXQsbm4uYXNGZWF0dXJlPUd0LExlLm1lcmdlT3B0aW9ucyh7Ym94Wm9vbTohMH0pO3ZhciBMbj1aZS5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXQuX2NvbnRhaW5lcix0aGlzLl9wYW5lPXQuX3BhbmVzLm92ZXJsYXlQYW5lLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTAsdC5vbigidW5sb2FkIix0aGlzLl9kZXN0cm95LHRoaXMpfSxhZGRIb29rczpmdW5jdGlvbigpe1YodGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3EodGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZlZH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt1dCh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCksbWkoKSxidCgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLFYoZG9jdW1lbnQse2NvbnRleHRtZW51OlEsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVkfHwodGhpcy5fbW92ZWQ9ITAsdGhpcy5fYm94PWh0KCJkaXYiLCJsZWFmbGV0LXpvb20tYm94Iix0aGlzLl9jb250YWluZXIpLHB0KHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jcm9zc2hhaXIiKSx0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpLHRoaXMuX3BvaW50PXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KTt2YXIgaT1uZXcgUCh0aGlzLl9wb2ludCx0aGlzLl9zdGFydFBvaW50KSxlPWkuZ2V0U2l6ZSgpO0x0KHRoaXMuX2JveCxpLm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9ZS55KyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKHV0KHRoaXMuX2JveCksbXQodGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWNyb3NzaGFpciIpKSxmaSgpLFR0KCkscShkb2N1bWVudCx7Y29udGV4dG1lbnU6USxtb3VzZW1vdmU6dGhpcy5fb25Nb3VzZU1vdmUsbW91c2V1cDp0aGlzLl9vbk1vdXNlVXAsa2V5ZG93bjp0aGlzLl9vbktleURvd259LHRoaXMpfSxfb25Nb3VzZVVwOmZ1bmN0aW9uKHQpe2lmKCgxPT09dC53aGljaHx8MT09PXQuYnV0dG9uKSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX21vdmVkKSl7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD1zZXRUaW1lb3V0KGUodGhpcy5fcmVzZXRTdGF0ZSx0aGlzKSwwKTt2YXIgaT1uZXcgVCh0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9zdGFydFBvaW50KSx0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludCkpO3RoaXMuX21hcC5maXRCb3VuZHMoaSkuZmlyZSgiYm94em9vbWVuZCIse2JveFpvb21Cb3VuZHM6aX0pfX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmdGhpcy5fZmluaXNoKCl9fSk7TGUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJib3hab29tIixMbiksTGUubWVyZ2VPcHRpb25zKHtkb3VibGVDbGlja1pvb206ITB9KTt2YXIgUG49WmUuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcCxlPWkuZ2V0Wm9vbSgpLG49aS5vcHRpb25zLnpvb21EZWx0YSxvPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9lLW46ZStuOyJjZW50ZXIiPT09aS5vcHRpb25zLmRvdWJsZUNsaWNrWm9vbT9pLnNldFpvb20obyk6aS5zZXRab29tQXJvdW5kKHQuY29udGFpbmVyUG9pbnQsbyl9fSk7TGUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkb3VibGVDbGlja1pvb20iLFBuKSxMZS5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IXppLGluZXJ0aWFEZWNlbGVyYXRpb246MzQwMCxpbmVydGlhTWF4U3BlZWQ6MS8wLGVhc2VMaW5lYXJpdHk6LjIsd29ybGRDb3B5SnVtcDohMSxtYXhCb3VuZHNWaXNjb3NpdHk6MH0pO3ZhciBibj1aZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RyYWdnYWJsZSl7dmFyIHQ9dGhpcy5fbWFwO3RoaXMuX2RyYWdnYWJsZT1uZXcgQmUodC5fbWFwUGFuZSx0Ll9jb250YWluZXIpLHRoaXMuX2RyYWdnYWJsZS5vbih7ZHJhZ3N0YXJ0OnRoaXMuX29uRHJhZ1N0YXJ0LGRyYWc6dGhpcy5fb25EcmFnLGRyYWdlbmQ6dGhpcy5fb25EcmFnRW5kfSx0aGlzKSx0aGlzLl9kcmFnZ2FibGUub24oInByZWRyYWciLHRoaXMuX29uUHJlRHJhZ0xpbWl0LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWdXcmFwLHRoaXMpLHQub24oInpvb21lbmQiLHRoaXMuX29uWm9vbUVuZCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblpvb21FbmQsdGhpcykpfXB0KHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnIiksdGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpLHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXttdCh0aGlzLl9tYXAuX2NvbnRhaW5lciwibGVhZmxldC1ncmFiIiksbXQodGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtdG91Y2gtZHJhZyIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcDtpZih0Ll9zdG9wKCksdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpe3ZhciBpPXoodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTt0aGlzLl9vZmZzZXRMaW1pdD1iKHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Tm9ydGhXZXN0KCkpLm11bHRpcGx5QnkoLTEpLHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0U291dGhFYXN0KCkpLm11bHRpcGx5QnkoLTEpLmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSksdGhpcy5fdmlzY29zaXR5PU1hdGgubWluKDEsTWF0aC5tYXgoMCx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHNWaXNjb3NpdHkpKX1lbHNlIHRoaXMuX29mZnNldExpbWl0PW51bGw7dC5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJkcmFnc3RhcnQiKSx0Lm9wdGlvbnMuaW5lcnRpYSYmKHRoaXMuX3Bvc2l0aW9ucz1bXSx0aGlzLl90aW1lcz1bXSl9LF9vbkRyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIGk9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M7dGhpcy5fcG9zaXRpb25zLnB1c2goZSksdGhpcy5fdGltZXMucHVzaChpKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhpKX10aGlzLl9tYXAuZmlyZSgibW92ZSIsdCkuZmlyZSgiZHJhZyIsdCl9LF9wcnVuZVBvc2l0aW9uczpmdW5jdGlvbih0KXtmb3IoO3RoaXMuX3Bvc2l0aW9ucy5sZW5ndGg+MSYmdC10aGlzLl90aW1lc1swXT41MDspdGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFswLDBdKTt0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQ9aS5zdWJ0cmFjdCh0KS54LHRoaXMuX3dvcmxkV2lkdGg9dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHMoKS5nZXRTaXplKCkueH0sX3Zpc2NvdXNMaW1pdDpmdW5jdGlvbih0LGkpe3JldHVybiB0LSh0LWkpKnRoaXMuX3Zpc2Nvc2l0eX0sX29uUHJlRHJhZ0xpbWl0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdmlzY29zaXR5JiZ0aGlzLl9vZmZzZXRMaW1pdCl7dmFyIHQ9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3Muc3VidHJhY3QodGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcyksaT10aGlzLl9vZmZzZXRMaW1pdDt0Lng8aS5taW4ueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWluLngpKSx0Lnk8aS5taW4ueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWluLnkpKSx0Lng+aS5tYXgueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGkubWF4LngpKSx0Lnk+aS5tYXgueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGkubWF4LnkpKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcz10aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZCh0KX19LF9vblByZURyYWdXcmFwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd29ybGRXaWR0aCxpPU1hdGgucm91bmQodC8yKSxlPXRoaXMuX2luaXRpYWxXb3JsZE9mZnNldCxuPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsbz0obi1pK2UpJXQraS1lLHM9KG4raStlKSV0LWktZSxyPU1hdGguYWJzKG8rZSk8TWF0aC5hYnMocytlKT9vOnM7dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3M9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PXJ9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwLGU9aS5vcHRpb25zLG49IWUuaW5lcnRpYXx8dGhpcy5fdGltZXMubGVuZ3RoPDI7aWYoaS5maXJlKCJkcmFnZW5kIix0KSxuKWkuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKTt2YXIgbz10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSkscz0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxyPWUuZWFzZUxpbmVhcml0eSxhPW8ubXVsdGlwbHlCeShyL3MpLGg9YS5kaXN0YW5jZVRvKFswLDBdKSx1PU1hdGgubWluKGUuaW5lcnRpYU1heFNwZWVkLGgpLGw9YS5tdWx0aXBseUJ5KHUvaCksYz11LyhlLmluZXJ0aWFEZWNlbGVyYXRpb24qciksXz1sLm11bHRpcGx5QnkoLWMvMikucm91bmQoKTtfLnh8fF8ueT8oXz1pLl9saW1pdE9mZnNldChfLGkub3B0aW9ucy5tYXhCb3VuZHMpLGYoZnVuY3Rpb24oKXtpLnBhbkJ5KF8se2R1cmF0aW9uOmMsZWFzZUxpbmVhcml0eTpyLG5vTW92ZVN0YXJ0OiEwLGFuaW1hdGU6ITB9KX0pKTppLmZpcmUoIm1vdmVlbmQiKX19fSk7TGUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkcmFnZ2luZyIsYm4pLExlLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pO3ZhciBUbj1aZS5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD0iMCIpLFYodCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxxKHRoaXMuX21hcC5fY29udGFpbmVyLHtmb2N1czp0aGlzLl9vbkZvY3VzLGJsdXI6dGhpcy5fb25CbHVyLG1vdXNlZG93bjp0aGlzLl9vbk1vdXNlRG93bn0sdGhpcyksdGhpcy5fbWFwLm9mZih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LF9vbk1vdXNlRG93bjpmdW5jdGlvbigpe2lmKCF0aGlzLl9mb2N1c2VkKXt2YXIgdD1kb2N1bWVudC5ib2R5LGk9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9dC5zY3JvbGxUb3B8fGkuc2Nyb2xsVG9wLG49dC5zY3JvbGxMZWZ0fHxpLnNjcm9sbExlZnQ7dGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx3aW5kb3cuc2Nyb2xsVG8obixlKX19LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZSgiZm9jdXMiKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5fbWFwLmZpcmUoImJsdXIiKX0sX3NldFBhbkRlbHRhOmZ1bmN0aW9uKHQpe3ZhciBpLGUsbj10aGlzLl9wYW5LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoaT0wLGU9by5sZWZ0Lmxlbmd0aDtpPGU7aSsrKW5bby5sZWZ0W2ldXT1bLTEqdCwwXTtmb3IoaT0wLGU9by5yaWdodC5sZW5ndGg7aTxlO2krKyluW28ucmlnaHRbaV1dPVt0LDBdO2ZvcihpPTAsZT1vLmRvd24ubGVuZ3RoO2k8ZTtpKyspbltvLmRvd25baV1dPVswLHRdO2ZvcihpPTAsZT1vLnVwLmxlbmd0aDtpPGU7aSsrKW5bby51cFtpXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGksZSxuPXRoaXMuX3pvb21LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoaT0wLGU9by56b29tSW4ubGVuZ3RoO2k8ZTtpKyspbltvLnpvb21JbltpXV09dDtmb3IoaT0wLGU9by56b29tT3V0Lmxlbmd0aDtpPGU7aSsrKW5bby56b29tT3V0W2ldXT0tdH0sX2FkZEhvb2tzOmZ1bmN0aW9uKCl7Vihkb2N1bWVudCwia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLHRoaXMpfSxfcmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtxKGRvY3VtZW50LCJrZXlkb3duIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9vbktleURvd246ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgaSxlPXQua2V5Q29kZSxuPXRoaXMuX21hcDtpZihlIGluIHRoaXMuX3BhbktleXMpe2lmKG4uX3BhbkFuaW0mJm4uX3BhbkFuaW0uX2luUHJvZ3Jlc3MpcmV0dXJuO2k9dGhpcy5fcGFuS2V5c1tlXSx0LnNoaWZ0S2V5JiYoaT13KGkpLm11bHRpcGx5QnkoMykpLG4ucGFuQnkoaSksbi5vcHRpb25zLm1heEJvdW5kcyYmbi5wYW5JbnNpZGVCb3VuZHMobi5vcHRpb25zLm1heEJvdW5kcyl9ZWxzZSBpZihlIGluIHRoaXMuX3pvb21LZXlzKW4uc2V0Wm9vbShuLmdldFpvb20oKSsodC5zaGlmdEtleT8zOjEpKnRoaXMuX3pvb21LZXlzW2VdKTtlbHNle2lmKDI3IT09ZXx8IW4uX3BvcHVwfHwhbi5fcG9wdXAub3B0aW9ucy5jbG9zZU9uRXNjYXBlS2V5KXJldHVybjtuLmNsb3NlUG9wdXAoKX1RKHQpfX19KTtMZS5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImtleWJvYXJkIixUbiksTGUubWVyZ2VPcHRpb25zKHtzY3JvbGxXaGVlbFpvb206ITAsd2hlZWxEZWJvdW5jZVRpbWU6NDAsd2hlZWxQeFBlclpvb21MZXZlbDo2MH0pO3ZhciB6bj1aZS5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7Vih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKSx0aGlzLl9kZWx0YT0wfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3EodGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyl9LF9vbldoZWVsU2Nyb2xsOmZ1bmN0aW9uKHQpe3ZhciBpPWl0KHQpLG49dGhpcy5fbWFwLm9wdGlvbnMud2hlZWxEZWJvdW5jZVRpbWU7dGhpcy5fZGVsdGErPWksdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgbz1NYXRoLm1heChuLSgrbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lKSwwKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQoZSh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxvKSxRKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsaT10LmdldFpvb20oKSxlPXRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwfHwwO3QuX3N0b3AoKTt2YXIgbj10aGlzLl9kZWx0YS8oNCp0aGlzLl9tYXAub3B0aW9ucy53aGVlbFB4UGVyWm9vbUxldmVsKSxvPTQqTWF0aC5sb2coMi8oMStNYXRoLmV4cCgtTWF0aC5hYnMobikpKSkvTWF0aC5MTjIscz1lP01hdGguY2VpbChvL2UpKmU6byxyPXQuX2xpbWl0Wm9vbShpKyh0aGlzLl9kZWx0YT4wP3M6LXMpKS1pO3RoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsciYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStyKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrcikpfX0pO0xlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIix6biksTGUubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSk7dmFyIE1uPVplLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtWKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7cSh0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyl7aWYoJCh0KSx0aGlzLl9maXJlQ2xpY2s9ITAsdC50b3VjaGVzLmxlbmd0aD4xKXJldHVybiB0aGlzLl9maXJlQ2xpY2s9ITEsdm9pZCBjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO3ZhciBpPXQudG91Y2hlc1swXSxuPWkudGFyZ2V0O3RoaXMuX3N0YXJ0UG9zPXRoaXMuX25ld1Bvcz1uZXcgeChpLmNsaWVudFgsaS5jbGllbnRZKSxuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZwdChuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQoZShmdW5jdGlvbigpe3RoaXMuX2lzVGFwVmFsaWQoKSYmKHRoaXMuX2ZpcmVDbGljaz0hMSx0aGlzLl9vblVwKCksdGhpcy5fc2ltdWxhdGVFdmVudCgiY29udGV4dG1lbnUiLGkpKX0sdGhpcyksMWUzKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJtb3VzZWRvd24iLGkpLFYoZG9jdW1lbnQse3RvdWNobW92ZTp0aGlzLl9vbk1vdmUsdG91Y2hlbmQ6dGhpcy5fb25VcH0sdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLHEoZG9jdW1lbnQse3RvdWNobW92ZTp0aGlzLl9vbk1vdmUsdG91Y2hlbmQ6dGhpcy5fb25VcH0sdGhpcyksdGhpcy5fZmlyZUNsaWNrJiZ0JiZ0LmNoYW5nZWRUb3VjaGVzKXt2YXIgaT10LmNoYW5nZWRUb3VjaGVzWzBdLGU9aS50YXJnZXQ7ZSYmZS50YWdOYW1lJiYiYSI9PT1lLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmbXQoZSwibGVhZmxldC1hY3RpdmUiKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJtb3VzZXVwIixpKSx0aGlzLl9pc1RhcFZhbGlkKCkmJnRoaXMuX3NpbXVsYXRlRXZlbnQoImNsaWNrIixpKX19LF9pc1RhcFZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKTw9dGhpcy5fbWFwLm9wdGlvbnMudGFwVG9sZXJhbmNlfSxfb25Nb3ZlOmZ1bmN0aW9uKHQpe3ZhciBpPXQudG91Y2hlc1swXTt0aGlzLl9uZXdQb3M9bmV3IHgoaS5jbGllbnRYLGkuY2xpZW50WSksdGhpcy5fc2ltdWxhdGVFdmVudCgibW91c2Vtb3ZlIixpKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24odCxpKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtlLl9zaW11bGF0ZWQ9ITAsaS50YXJnZXQuX3NpbXVsYXRlZENsaWNrPSEwLGUuaW5pdE1vdXNlRXZlbnQodCwhMCwhMCx3aW5kb3csMSxpLnNjcmVlblgsaS5zY3JlZW5ZLGkuY2xpZW50WCxpLmNsaWVudFksITEsITEsITEsITEsMCxudWxsKSxpLnRhcmdldC5kaXNwYXRjaEV2ZW50KGUpfX0pO1ZpJiYhVWkmJkxlLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwidGFwIixNbiksTGUubWVyZ2VPcHRpb25zKHt0b3VjaFpvb206VmkmJiF6aSxib3VuY2VBdFpvb21MaW1pdHM6ITB9KTt2YXIgQ249WmUuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3B0KHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxWKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7bXQodGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtdG91Y2gtem9vbSIpLHEodGhpcy5fbWFwLl9jb250YWluZXIsInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmIWkuX2FuaW1hdGluZ1pvb20mJiF0aGlzLl96b29taW5nKXt2YXIgZT1pLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksbj1pLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSk7dGhpcy5fY2VudGVyUG9pbnQ9aS5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLHRoaXMuX3N0YXJ0TGF0TG5nPWkuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCksImNlbnRlciIhPT1pLm9wdGlvbnMudG91Y2hab29tJiYodGhpcy5fcGluY2hTdGFydExhdExuZz1pLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoZS5hZGQobikuX2RpdmlkZUJ5KDIpKSksdGhpcy5fc3RhcnREaXN0PWUuZGlzdGFuY2VUbyhuKSx0aGlzLl9zdGFydFpvb209aS5nZXRab29tKCksdGhpcy5fbW92ZWQ9ITEsdGhpcy5fem9vbWluZz0hMCxpLl9zdG9wKCksVihkb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSx0aGlzKSxWKGRvY3VtZW50LCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSwkKHQpfX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJnRoaXMuX3pvb21pbmcpe3ZhciBpPXRoaXMuX21hcCxuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxvPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKSxzPW4uZGlzdGFuY2VUbyhvKS90aGlzLl9zdGFydERpc3Q7aWYodGhpcy5fem9vbT1pLmdldFNjYWxlWm9vbShzLHRoaXMuX3N0YXJ0Wm9vbSksIWkub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMmJih0aGlzLl96b29tPGkuZ2V0TWluWm9vbSgpJiZzPDF8fHRoaXMuX3pvb20+aS5nZXRNYXhab29tKCkmJnM+MSkmJih0aGlzLl96b29tPWkuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSksImNlbnRlciI9PT1pLm9wdGlvbnMudG91Y2hab29tKXtpZih0aGlzLl9jZW50ZXI9dGhpcy5fc3RhcnRMYXRMbmcsMT09PXMpcmV0dXJufWVsc2V7dmFyIHI9bi5fYWRkKG8pLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fY2VudGVyUG9pbnQpO2lmKDE9PT1zJiYwPT09ci54JiYwPT09ci55KXJldHVybjt0aGlzLl9jZW50ZXI9aS51bnByb2plY3QoaS5wcm9qZWN0KHRoaXMuX3BpbmNoU3RhcnRMYXRMbmcsdGhpcy5fem9vbSkuc3VidHJhY3QociksdGhpcy5fem9vbSl9dGhpcy5fbW92ZWR8fChpLl9tb3ZlU3RhcnQoITAsITEpLHRoaXMuX21vdmVkPSEwKSxnKHRoaXMuX2FuaW1SZXF1ZXN0KTt2YXIgYT1lKGkuX21vdmUsaSx0aGlzLl9jZW50ZXIsdGhpcy5fem9vbSx7cGluY2g6ITAscm91bmQ6ITF9KTt0aGlzLl9hbmltUmVxdWVzdD1mKGEsdGhpcywhMCksJCh0KX19LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJnRoaXMuX3pvb21pbmc/KHRoaXMuX3pvb21pbmc9ITEsZyh0aGlzLl9hbmltUmVxdWVzdCkscShkb2N1bWVudCwidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZSkscShkb2N1bWVudCwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24/dGhpcy5fbWFwLl9hbmltYXRlWm9vbSh0aGlzLl9jZW50ZXIsdGhpcy5fbWFwLl9saW1pdFpvb20odGhpcy5fem9vbSksITAsdGhpcy5fbWFwLm9wdGlvbnMuem9vbVNuYXApOnRoaXMuX21hcC5fcmVzZXRWaWV3KHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSkpOnRoaXMuX3pvb21pbmc9ITF9fSk7TGUuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0b3VjaFpvb20iLENuKSxMZS5Cb3hab29tPUxuLExlLkRvdWJsZUNsaWNrWm9vbT1QbixMZS5EcmFnPWJuLExlLktleWJvYXJkPVRuLExlLlNjcm9sbFdoZWVsWm9vbT16bixMZS5UYXA9TW4sTGUuVG91Y2hab29tPUNuO3ZhciBabj13aW5kb3cuTDt3aW5kb3cuTD10LE9iamVjdC5mcmVlemU9JHQsdC52ZXJzaW9uPSIxLjMuMStIRUFELmJhNmY5N2YiLHQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cuTD1abix0aGlzfSx0LkNvbnRyb2w9UGUsdC5jb250cm9sPWJlLHQuQnJvd3Nlcj0kaSx0LkV2ZW50ZWQ9dWksdC5NaXhpbj1FZSx0LlV0aWw9YWksdC5DbGFzcz12LHQuSGFuZGxlcj1aZSx0LmV4dGVuZD1pLHQuYmluZD1lLHQuc3RhbXA9bix0LnNldE9wdGlvbnM9bCx0LkRvbUV2ZW50PWRlLHQuRG9tVXRpbD14ZSx0LlBvc0FuaW1hdGlvbj13ZSx0LkRyYWdnYWJsZT1CZSx0LkxpbmVVdGlsPU9lLHQuUG9seVV0aWw9UmUsdC5Qb2ludD14LHQucG9pbnQ9dyx0LkJvdW5kcz1QLHQuYm91bmRzPWIsdC5UcmFuc2Zvcm1hdGlvbj1aLHQudHJhbnNmb3JtYXRpb249Uyx0LlByb2plY3Rpb249amUsdC5MYXRMbmc9TSx0LmxhdExuZz1DLHQuTGF0TG5nQm91bmRzPVQsdC5sYXRMbmdCb3VuZHM9eix0LkNSUz1jaSx0Lkdlb0pTT049bm4sdC5nZW9KU09OPUt0LHQuZ2VvSnNvbj1zbix0LkxheWVyPVVlLHQuTGF5ZXJHcm91cD1WZSx0LmxheWVyR3JvdXA9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IFZlKHQsaSl9LHQuRmVhdHVyZUdyb3VwPXFlLHQuZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcWUodCl9LHQuSW1hZ2VPdmVybGF5PXJuLHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsaSxlKXtyZXR1cm4gbmV3IHJuKHQsaSxlKX0sdC5WaWRlb092ZXJsYXk9YW4sdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxpLGUpe3JldHVybiBuZXcgYW4odCxpLGUpfSx0LkRpdk92ZXJsYXk9aG4sdC5Qb3B1cD11bix0LnBvcHVwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyB1bih0LGkpfSx0LlRvb2x0aXA9bG4sdC50b29sdGlwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBsbih0LGkpfSx0Lkljb249R2UsdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR2UodCl9LHQuRGl2SWNvbj1jbix0LmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBjbih0KX0sdC5NYXJrZXI9WGUsdC5tYXJrZXI9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IFhlKHQsaSl9LHQuVGlsZUxheWVyPWRuLHQudGlsZUxheWVyPVl0LHQuR3JpZExheWVyPV9uLHQuZ3JpZExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgX24odCl9LHQuU1ZHPXhuLHQuc3ZnPUp0LHQuUmVuZGVyZXI9bW4sdC5DYW52YXM9Zm4sdC5jYW52YXM9WHQsdC5QYXRoPUplLHQuQ2lyY2xlTWFya2VyPSRlLHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyAkZSh0LGkpfSx0LkNpcmNsZT1RZSx0LmNpcmNsZT1mdW5jdGlvbih0LGksZSl7cmV0dXJuIG5ldyBRZSh0LGksZSl9LHQuUG9seWxpbmU9dG4sdC5wb2x5bGluZT1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgdG4odCxpKX0sdC5Qb2x5Z29uPWVuLHQucG9seWdvbj1mdW5jdGlvbih0LGkpe3JldHVybiBuZXcgZW4odCxpKX0sdC5SZWN0YW5nbGU9d24sdC5yZWN0YW5nbGU9ZnVuY3Rpb24odCxpKXtyZXR1cm4gbmV3IHduKHQsaSl9LHQuTWFwPUxlLHQubWFwPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIG5ldyBMZSh0LGkpfX0pOw=="></script>
<link href="data:text/css,%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%0Amargin%2Dright%3A%204px%3B%0Aopacity%3A%200%2E7%3B%0Adisplay%3A%20inline%2Dblock%3B%0Avertical%2Dalign%3A%20top%3B%0A%0Azoom%3A%201%3B%0A%2Adisplay%3A%20inline%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,IWZ1bmN0aW9uKHQscyl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1zKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUocyk6dC5wcm9qND1zKCl9KHRoaXMsZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gayh0LHMpe2lmKHRbc10pcmV0dXJuIHRbc107Zm9yKHZhciBpLGE9T2JqZWN0LmtleXModCksaD1zLnRvTG93ZXJDYXNlKCkucmVwbGFjZShILCIiKSxlPS0xOysrZTxhLmxlbmd0aDspaWYoKGk9YVtlXSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKEgsIiIpPT09aClyZXR1cm4gdFtpXX1mdW5jdGlvbiBlKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHN0cmluZyIpO3RoaXMudGV4dD10LnRyaW0oKSx0aGlzLmxldmVsPTAsdGhpcy5wbGFjZT0wLHRoaXMucm9vdD1udWxsLHRoaXMuc3RhY2s9W10sdGhpcy5jdXJyZW50T2JqZWN0PW51bGwsdGhpcy5zdGF0ZT1LfWZ1bmN0aW9uIGgodCxzLGkpe0FycmF5LmlzQXJyYXkocykmJihpLnVuc2hpZnQocykscz1udWxsKTt2YXIgYT1zP3t9OnQsaD1pLnJlZHVjZShmdW5jdGlvbih0LHMpe3JldHVybiBuKHMsdCksdH0sYSk7cyYmKHRbc109aCl9ZnVuY3Rpb24gbih0LHMpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBpLGE9dC5zaGlmdCgpO2lmKCJQQVJBTUVURVIiPT09YSYmKGE9dC5zaGlmdCgpKSwxPT09dC5sZW5ndGgpcmV0dXJuIEFycmF5LmlzQXJyYXkodFswXSk/KHNbYV09e30sdm9pZCBuKHRbMF0sc1thXSkpOnZvaWQoc1thXT10WzBdKTtpZih0Lmxlbmd0aClpZigiVE9XR1M4NCIhPT1hKXtpZigiQVhJUyI9PT1hKXJldHVybiBhIGluIHN8fChzW2FdPVtdKSx2b2lkIHNbYV0ucHVzaCh0KTtzd2l0Y2goQXJyYXkuaXNBcnJheShhKXx8KHNbYV09e30pLGEpe2Nhc2UiVU5JVCI6Y2FzZSJQUklNRU0iOmNhc2UiVkVSVF9EQVRVTSI6cmV0dXJuIHNbYV09e25hbWU6dFswXS50b0xvd2VyQ2FzZSgpLGNvbnZlcnQ6dFsxXX0sdm9pZCgzPT09dC5sZW5ndGgmJm4odFsyXSxzW2FdKSk7Y2FzZSJTUEhFUk9JRCI6Y2FzZSJFTExJUFNPSUQiOnJldHVybiBzW2FdPXtuYW1lOnRbMF0sYTp0WzFdLHJmOnRbMl19LHZvaWQoND09PXQubGVuZ3RoJiZuKHRbM10sc1thXSkpO2Nhc2UiUFJPSkVDVEVEQ1JTIjpjYXNlIlBST0pDUlMiOmNhc2UiR0VPR0NTIjpjYXNlIkdFT0NDUyI6Y2FzZSJQUk9KQ1MiOmNhc2UiTE9DQUxfQ1MiOmNhc2UiR0VPRENSUyI6Y2FzZSJHRU9ERVRJQ0NSUyI6Y2FzZSJHRU9ERVRJQ0RBVFVNIjpjYXNlIkVEQVRVTSI6Y2FzZSJFTkdJTkVFUklOR0RBVFVNIjpjYXNlIlZFUlRfQ1MiOmNhc2UiVkVSVENSUyI6Y2FzZSJWRVJUSUNBTENSUyI6Y2FzZSJDT01QRF9DUyI6Y2FzZSJDT01QT1VORENSUyI6Y2FzZSJFTkdJTkVFUklOR0NSUyI6Y2FzZSJFTkdDUlMiOmNhc2UiRklUVEVEX0NTIjpjYXNlIkxPQ0FMX0RBVFVNIjpjYXNlIkRBVFVNIjpyZXR1cm4gdFswXT1bIm5hbWUiLHRbMF1dLHZvaWQgaChzLGEsdCk7ZGVmYXVsdDpmb3IoaT0tMTsrK2k8dC5sZW5ndGg7KWlmKCFBcnJheS5pc0FycmF5KHRbaV0pKXJldHVybiBuKHQsc1thXSk7cmV0dXJuIGgocyxhLHQpfX1lbHNlIHNbYV09dDtlbHNlIHNbYV09ITB9ZWxzZSBzW3RdPSEwfWZ1bmN0aW9uIHIodCl7cmV0dXJuIHQqaXR9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0KihlLnRvX21ldGVyfHwxKX1pZigiR0VPR0NTIj09PWUudHlwZT9lLnByb2pOYW1lPSJsb25nbGF0IjoiTE9DQUxfQ1MiPT09ZS50eXBlPyhlLnByb2pOYW1lPSJpZGVudGl0eSIsZS5sb2NhbD0hMCk6Im9iamVjdCI9PXR5cGVvZiBlLlBST0pFQ1RJT04/ZS5wcm9qTmFtZT1PYmplY3Qua2V5cyhlLlBST0pFQ1RJT04pWzBdOmUucHJvak5hbWU9ZS5QUk9KRUNUSU9OLGUuQVhJUyl7Zm9yKHZhciBzPSIiLGk9MCxhPWUuQVhJUy5sZW5ndGg7aTxhOysraSl7dmFyIGg9ZS5BWElTW2ldWzBdLnRvTG93ZXJDYXNlKCk7LTEhPT1oLmluZGV4T2YoIm5vcnRoIik/cys9Im4iOi0xIT09aC5pbmRleE9mKCJzb3V0aCIpP3MrPSJzIjotMSE9PWguaW5kZXhPZigiZWFzdCIpP3MrPSJlIjotMSE9PWguaW5kZXhPZigid2VzdCIpJiYocys9InciKX0yPT09cy5sZW5ndGgmJihzKz0idSIpLDM9PT1zLmxlbmd0aCYmKGUuYXhpcz1zKX1lLlVOSVQmJihlLnVuaXRzPWUuVU5JVC5uYW1lLnRvTG93ZXJDYXNlKCksIm1ldHJlIj09PWUudW5pdHMmJihlLnVuaXRzPSJtZXRlciIpLGUuVU5JVC5jb252ZXJ0JiYoIkdFT0dDUyI9PT1lLnR5cGU/ZS5EQVRVTSYmZS5EQVRVTS5TUEhFUk9JRCYmKGUudG9fbWV0ZXI9ZS5VTklULmNvbnZlcnQqZS5EQVRVTS5TUEhFUk9JRC5hKTplLnRvX21ldGVyPWUuVU5JVC5jb252ZXJ0KSk7dmFyIG49ZS5HRU9HQ1M7IkdFT0dDUyI9PT1lLnR5cGUmJihuPWUpLG4mJihuLkRBVFVNP2UuZGF0dW1Db2RlPW4uREFUVU0ubmFtZS50b0xvd2VyQ2FzZSgpOmUuZGF0dW1Db2RlPW4ubmFtZS50b0xvd2VyQ2FzZSgpLCJkXyI9PT1lLmRhdHVtQ29kZS5zbGljZSgwLDIpJiYoZS5kYXR1bUNvZGU9ZS5kYXR1bUNvZGUuc2xpY2UoMikpLCJuZXdfemVhbGFuZF9nZW9kZXRpY19kYXR1bV8xOTQ5IiE9PWUuZGF0dW1Db2RlJiYibmV3X3plYWxhbmRfMTk0OSIhPT1lLmRhdHVtQ29kZXx8KGUuZGF0dW1Db2RlPSJuemdkNDkiKSwid2dzXzE5ODQiIT09ZS5kYXR1bUNvZGUmJiJ3b3JsZF9nZW9kZXRpY19zeXN0ZW1fMTk4NCIhPT1lLmRhdHVtQ29kZXx8KCJNZXJjYXRvcl9BdXhpbGlhcnlfU3BoZXJlIj09PWUuUFJPSkVDVElPTiYmKGUuc3BoZXJlPSEwKSxlLmRhdHVtQ29kZT0id2dzODQiKSwiX2ZlcnJvIj09PWUuZGF0dW1Db2RlLnNsaWNlKC02KSYmKGUuZGF0dW1Db2RlPWUuZGF0dW1Db2RlLnNsaWNlKDAsLTYpKSwiX2pha2FydGEiPT09ZS5kYXR1bUNvZGUuc2xpY2UoLTgpJiYoZS5kYXR1bUNvZGU9ZS5kYXR1bUNvZGUuc2xpY2UoMCwtOCkpLH5lLmRhdHVtQ29kZS5pbmRleE9mKCJiZWxnZSIpJiYoZS5kYXR1bUNvZGU9InJuYjcyIiksbi5EQVRVTSYmbi5EQVRVTS5TUEhFUk9JRCYmKGUuZWxscHM9bi5EQVRVTS5TUEhFUk9JRC5uYW1lLnJlcGxhY2UoIl8xOSIsIiIpLnJlcGxhY2UoL1tDY11sYXJrZVxfMTgvLCJjbHJrIiksImludGVybmF0aW9uYWwiPT09ZS5lbGxwcy50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsMTMpJiYoZS5lbGxwcz0iaW50bCIpLGUuYT1uLkRBVFVNLlNQSEVST0lELmEsZS5yZj1wYXJzZUZsb2F0KG4uREFUVU0uU1BIRVJPSUQucmYsMTApKSxuLkRBVFVNJiZuLkRBVFVNLlRPV0dTODQmJihlLmRhdHVtX3BhcmFtcz1uLkRBVFVNLlRPV0dTODQpLH5lLmRhdHVtQ29kZS5pbmRleE9mKCJvc2diXzE5MzYiKSYmKGUuZGF0dW1Db2RlPSJvc2diMzYiKSx+ZS5kYXR1bUNvZGUuaW5kZXhPZigib3NuaV8xOTUyIikmJihlLmRhdHVtQ29kZT0ib3NuaTUyIiksKH5lLmRhdHVtQ29kZS5pbmRleE9mKCJ0bTY1Iil8fH5lLmRhdHVtQ29kZS5pbmRleE9mKCJnZW9kZXRpY19kYXR1bV9vZl8xOTY1IikpJiYoZS5kYXR1bUNvZGU9ImlyZTY1IiksImNoMTkwMysiPT09ZS5kYXR1bUNvZGUmJihlLmRhdHVtQ29kZT0iY2gxOTAzIiksfmUuZGF0dW1Db2RlLmluZGV4T2YoImlzcmFlbCIpJiYoZS5kYXR1bUNvZGU9ImlzcjkzIikpLGUuYiYmIWlzRmluaXRlKGUuYikmJihlLmI9ZS5hKSxbWyJzdGFuZGFyZF9wYXJhbGxlbF8xIiwiU3RhbmRhcmRfUGFyYWxsZWxfMSJdLFsic3RhbmRhcmRfcGFyYWxsZWxfMiIsIlN0YW5kYXJkX1BhcmFsbGVsXzIiXSxbImZhbHNlX2Vhc3RpbmciLCJGYWxzZV9FYXN0aW5nIl0sWyJmYWxzZV9ub3J0aGluZyIsIkZhbHNlX05vcnRoaW5nIl0sWyJjZW50cmFsX21lcmlkaWFuIiwiQ2VudHJhbF9NZXJpZGlhbiJdLFsibGF0aXR1ZGVfb2Zfb3JpZ2luIiwiTGF0aXR1ZGVfT2ZfT3JpZ2luIl0sWyJsYXRpdHVkZV9vZl9vcmlnaW4iLCJDZW50cmFsX1BhcmFsbGVsIl0sWyJzY2FsZV9mYWN0b3IiLCJTY2FsZV9GYWN0b3IiXSxbImswIiwic2NhbGVfZmFjdG9yIl0sWyJsYXRpdHVkZV9vZl9jZW50ZXIiLCJMYXRpdHVkZV9PZl9DZW50ZXIiXSxbImxhdGl0dWRlX29mX2NlbnRlciIsIkxhdGl0dWRlX29mX2NlbnRlciJdLFsibGF0MCIsImxhdGl0dWRlX29mX2NlbnRlciIscl0sWyJsb25naXR1ZGVfb2ZfY2VudGVyIiwiTG9uZ2l0dWRlX09mX0NlbnRlciJdLFsibG9uZ2l0dWRlX29mX2NlbnRlciIsIkxvbmdpdHVkZV9vZl9jZW50ZXIiXSxbImxvbmdjIiwibG9uZ2l0dWRlX29mX2NlbnRlciIscl0sWyJ4MCIsImZhbHNlX2Vhc3RpbmciLHRdLFsieTAiLCJmYWxzZV9ub3J0aGluZyIsdF0sWyJsb25nMCIsImNlbnRyYWxfbWVyaWRpYW4iLHJdLFsibGF0MCIsImxhdGl0dWRlX29mX29yaWdpbiIscl0sWyJsYXQwIiwic3RhbmRhcmRfcGFyYWxsZWxfMSIscl0sWyJsYXQxIiwic3RhbmRhcmRfcGFyYWxsZWxfMSIscl0sWyJsYXQyIiwic3RhbmRhcmRfcGFyYWxsZWxfMiIscl0sWyJhemltdXRoIiwiQXppbXV0aCJdLFsiYWxwaGEiLCJhemltdXRoIixyXSxbInNyc0NvZGUiLCJuYW1lIl1dLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHM9ZSxhPShpPXQpWzBdLGg9aVsxXSx2b2lkKCEoYSBpbiBzKSYmaCBpbiBzJiYoc1thXT1zW2hdLDM9PT1pLmxlbmd0aCYmKHNbYV09aVsyXShzW2FdKSkpKTt2YXIgcyxpLGEsaH0pLGUubG9uZzB8fCFlLmxvbmdjfHwiQWxiZXJzX0NvbmljX0VxdWFsX0FyZWEiIT09ZS5wcm9qTmFtZSYmIkxhbWJlcnRfQXppbXV0aGFsX0VxdWFsX0FyZWEiIT09ZS5wcm9qTmFtZXx8KGUubG9uZzA9ZS5sb25nYyksZS5sYXRfdHN8fCFlLmxhdDF8fCJTdGVyZW9ncmFwaGljX1NvdXRoX1BvbGUiIT09ZS5wcm9qTmFtZSYmIlBvbGFyIFN0ZXJlb2dyYXBoaWMgKHZhcmlhbnQgQikiIT09ZS5wcm9qTmFtZXx8KGUubGF0MD1yKDA8ZS5sYXQxPzkwOi05MCksZS5sYXRfdHM9ZS5sYXQxKX1mdW5jdGlvbiBsKHQpe3ZhciBzPXRoaXM7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBpPWFyZ3VtZW50c1sxXTsic3RyaW5nIj09dHlwZW9mIGk/IisiPT09aS5jaGFyQXQoMCk/bFt0XT1KKGFyZ3VtZW50c1sxXSk6bFt0XT1hdChhcmd1bWVudHNbMV0pOmxbdF09aX1lbHNlIGlmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcChmdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQpP2wuYXBwbHkocyx0KTpsKHQpfSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZih0IGluIGwpcmV0dXJuIGxbdF19ZWxzZSJFUFNHImluIHQ/bFsiRVBTRzoiK3QuRVBTR109dDoiRVNSSSJpbiB0P2xbIkVTUkk6Iit0LkVTUkldPXQ6IklBVTIwMDAiaW4gdD9sWyJJQVUyMDAwOiIrdC5JQVUyMDAwXT10OmNvbnNvbGUubG9nKHQpO3JldHVybn19ZnVuY3Rpb24gRSh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7aWYodCBpbiBsKXJldHVybiBsW3RdO2lmKGE9dCxsdC5zb21lKGZ1bmN0aW9uKHQpe3JldHVybi0xPGEuaW5kZXhPZih0KX0pKXt2YXIgcz1hdCh0KTtpZihmdW5jdGlvbih0KXt2YXIgcz1rKHQsImF1dGhvcml0eSIpO2lmKHMpe3ZhciBpPWsocywiZXBzZyIpO3JldHVybiBpJiYtMTxNdC5pbmRleE9mKGkpfX0ocykpcmV0dXJuIGxbIkVQU0c6Mzg1NyJdO3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciBzPWsodCwiZXh0ZW5zaW9uIik7aWYocylyZXR1cm4gayhzLCJwcm9qNCIpfShzKTtyZXR1cm4gaT9KKGkpOnN9dmFyIGE7cmV0dXJuIisiPT09dFswXT9KKHQpOnZvaWQgMH1mdW5jdGlvbiB0KHQpe3JldHVybiB0fWZ1bmN0aW9uIHModCxzKXt2YXIgaT1tdC5sZW5ndGg7cmV0dXJuIHQubmFtZXM/KChtdFtpXT10KS5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z0W3QudG9Mb3dlckNhc2UoKV09aX0pLHRoaXMpOihjb25zb2xlLmxvZyhzKSwhMCl9ZnVuY3Rpb24gcSh0LHMpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcSh0KTtzPXN8fGZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIGksYSxoLGUsbixyLG8sbCxNLGMsdSxmLG0scCxkLHksXyx4LGcsYix2LHcsQyxQLFMsTj1FKHQpOyJvYmplY3QiPT10eXBlb2YgTiYmKGk9cS5wcm9qZWN0aW9ucy5nZXQoTi5wcm9qTmFtZSkpPyghTi5kYXR1bUNvZGV8fCJub25lIj09PU4uZGF0dW1Db2RlfHwoYT1rKF90LE4uZGF0dW1Db2RlKSkmJihOLmRhdHVtX3BhcmFtcz1hLnRvd2dzODQ/YS50b3dnczg0LnNwbGl0KCIsIik6bnVsbCxOLmVsbHBzPWEuZWxsaXBzZSxOLmRhdHVtTmFtZT1hLmRhdHVtTmFtZT9hLmRhdHVtTmFtZTpOLmRhdHVtQ29kZSksTi5rMD1OLmswfHwxLE4uYXhpcz1OLmF4aXN8fCJlbnUiLE4uZWxscHM9Ti5lbGxwc3x8Indnczg0IixiPU4uYSx2PU4uYix3PU4ucmYsQz1OLmVsbHBzLFA9Ti5zcGhlcmUsYnx8KGI9KFM9KFM9ayhkdCxDKSl8fHl0KS5hLHY9Uy5iLHc9Uy5yZiksdyYmIXYmJih2PSgxLTEvdykqYiksKDA9PT13fHxNYXRoLmFicyhiLXYpPEQpJiYoUD0hMCx2PWIpLG09KGg9e2E6YixiOnYscmY6dyxzcGhlcmU6UH0pLmEscD1oLmIsZD1OLlJfQSx4PSgoeT1tKm0pLShfPXAqcCkpL3ksZz0wLGQ/KHk9KG0qPTEteCooUit4KihMK3gqVCkpKSptLHg9MCk6Zz1NYXRoLnNxcnQoeCksZT17ZXM6eCxlOmcsZXAyOih5LV8pL199LG49Ti5kYXR1bXx8KHI9Ti5kYXR1bUNvZGUsbz1OLmRhdHVtX3BhcmFtcyxsPWguYSxNPWguYixjPWUuZXMsdT1lLmVwMiwoZj17fSkuZGF0dW1fdHlwZT12b2lkIDA9PT1yfHwibm9uZSI9PT1yP0c6QSxvJiYoZi5kYXR1bV9wYXJhbXM9by5tYXAocGFyc2VGbG9hdCksMD09PWYuZGF0dW1fcGFyYW1zWzBdJiYwPT09Zi5kYXR1bV9wYXJhbXNbMV0mJjA9PT1mLmRhdHVtX3BhcmFtc1syXXx8KGYuZGF0dW1fdHlwZT1JKSwzPGYuZGF0dW1fcGFyYW1zLmxlbmd0aCYmKDA9PT1mLmRhdHVtX3BhcmFtc1szXSYmMD09PWYuZGF0dW1fcGFyYW1zWzRdJiYwPT09Zi5kYXR1bV9wYXJhbXNbNV0mJjA9PT1mLmRhdHVtX3BhcmFtc1s2XXx8KGYuZGF0dW1fdHlwZT1PLGYuZGF0dW1fcGFyYW1zWzNdKj1qLGYuZGF0dW1fcGFyYW1zWzRdKj1qLGYuZGF0dW1fcGFyYW1zWzVdKj1qLGYuZGF0dW1fcGFyYW1zWzZdPWYuZGF0dW1fcGFyYW1zWzZdLzFlNisxKSkpLGYuYT1sLGYuYj1NLGYuZXM9YyxmLmVwMj11LGYpLGN0KHRoaXMsTiksY3QodGhpcyxpKSx0aGlzLmE9aC5hLHRoaXMuYj1oLmIsdGhpcy5yZj1oLnJmLHRoaXMuc3BoZXJlPWguc3BoZXJlLHRoaXMuZXM9ZS5lcyx0aGlzLmU9ZS5lLHRoaXMuZXAyPWUuZXAyLHRoaXMuZGF0dW09bix0aGlzLmluaXQoKSxzKG51bGwsdGhpcykpOnModCl9ZnVuY3Rpb24gTSh0LHMsaSl7dmFyIGEsaCxlLG4scj10Lngsbz10LnksbD10Lno/dC56OjA7aWYobzwteiYmLTEuMDAxKno8bylvPS16O2Vsc2UgaWYoejxvJiZvPDEuMDAxKnopbz16O2Vsc2V7aWYobzwteilyZXR1cm57eDotMS8wLHk6LTEvMCx6OnQuen07aWYoejxvKXJldHVybnt4OjEvMCx5OjEvMCx6OnQuen19cmV0dXJuIHI+TWF0aC5QSSYmKHItPTIqTWF0aC5QSSksaD1NYXRoLnNpbihvKSxuPU1hdGguY29zKG8pLGU9aCpoLHt4OigoYT1pL01hdGguc3FydCgxLXMqZSkpK2wpKm4qTWF0aC5jb3MocikseTooYStsKSpuKk1hdGguc2luKHIpLHo6KGEqKDEtcykrbCkqaH19ZnVuY3Rpb24gYyh0LHMsaSxhKXt2YXIgaCxlLG4scixvLGwsTSxjLHUsZixtLHAsZCx5PXQueCxfPXQueSx4PXQuej90Lno6MCxnPU1hdGguc3FydCh5KnkrXypfKSxiPU1hdGguc3FydCh5KnkrXypfK3gqeCk7aWYoZy9pPDFlLTEyKXtpZihwPTAsYi9pPDFlLTEyKXJldHVybiBkPS1hLHt4OnQueCx5OnQueSx6OnQuen19ZWxzZSBwPU1hdGguYXRhbjIoXyx5KTtmb3IoaD14L2IsbD0oZT1nL2IpKigxLXMpKihuPTEvTWF0aC5zcXJ0KDEtcyooMi1zKSplKmUpKSxNPWgqbixtPTA7bSsrLHI9cyoobz1pL01hdGguc3FydCgxLXMqTSpNKSkvKG8rKGQ9ZypsK3gqTS1vKigxLXMqTSpNKSkpLGY9KHU9aCoobj0xL01hdGguc3FydCgxLXIqKDItcikqZSplKSkpKmwtKGM9ZSooMS1yKSpuKSpNLGw9YyxNPXUsMWUtMjQ8ZipmJiZtPDMwOyk7cmV0dXJue3g6cCx5Ok1hdGguYXRhbih1L01hdGguYWJzKGMpKSx6OmR9fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQ9PT1JfHx0PT09T31mdW5jdGlvbiBpKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOdW1iZXIuaXNGaW5pdGUpe2lmKE51bWJlci5pc0Zpbml0ZSh0KSlyZXR1cm47dGhyb3cgbmV3IFR5cGVFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBmaW5pdGUgbnVtYmVycyIpfWlmKCJudW1iZXIiIT10eXBlb2YgdHx8dCE9dHx8IWlzRmluaXRlKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgZmluaXRlIG51bWJlcnMiKX1mdW5jdGlvbiBmKHQscyxpKXt2YXIgYSxoLGU7aWYoQXJyYXkuaXNBcnJheShpKSYmKGk9YnQoaSkpLHZ0KGkpLHQuZGF0dW0mJnMuZGF0dW0mJihlPXMsKChoPXQpLmRhdHVtLmRhdHVtX3R5cGU9PT1JfHxoLmRhdHVtLmRhdHVtX3R5cGU9PT1PKSYmIldHUzg0IiE9PWUuZGF0dW1Db2RlfHwoZS5kYXR1bS5kYXR1bV90eXBlPT09SXx8ZS5kYXR1bS5kYXR1bV90eXBlPT09TykmJiJXR1M4NCIhPT1oLmRhdHVtQ29kZSkmJihpPWYodCxhPW5ldyBxKCJXR1M4NCIpLGkpLHQ9YSksImVudSIhPT10LmF4aXMmJihpPWd0KHQsITEsaSkpLCJsb25nbGF0Ij09PXQucHJvak5hbWUpaT17eDppLngqTix5OmkueSpOLHo6aS56fHwwfTtlbHNlIGlmKHQudG9fbWV0ZXImJihpPXt4OmkueCp0LnRvX21ldGVyLHk6aS55KnQudG9fbWV0ZXIsejppLnp8fDB9KSwhKGk9dC5pbnZlcnNlKGkpKSlyZXR1cm47cmV0dXJuIHQuZnJvbV9ncmVlbndpY2gmJihpLngrPXQuZnJvbV9ncmVlbndpY2gpLGk9eHQodC5kYXR1bSxzLmRhdHVtLGkpLHMuZnJvbV9ncmVlbndpY2gmJihpPXt4OmkueC1zLmZyb21fZ3JlZW53aWNoLHk6aS55LHo6aS56fHwwfSksImxvbmdsYXQiPT09cy5wcm9qTmFtZT9pPXt4OmkueCpCLHk6aS55KkIsejppLnp8fDB9OihpPXMuZm9yd2FyZChpKSxzLnRvX21ldGVyJiYoaT17eDppLngvcy50b19tZXRlcix5OmkueS9zLnRvX21ldGVyLHo6aS56fHwwfSkpLCJlbnUiIT09cy5heGlzP2d0KHMsITAsaSk6aX1mdW5jdGlvbiBtKHMsaSxhKXt2YXIgdCxoLGU7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KHQ9ZihzLGksYSl8fHt4Ok5hTix5Ok5hTn0sMjxhLmxlbmd0aD92b2lkIDAhPT1zLm5hbWUmJiJnZW9jZW50Ij09PXMubmFtZXx8dm9pZCAwIT09aS5uYW1lJiYiZ2VvY2VudCI9PT1pLm5hbWU/Im51bWJlciI9PXR5cGVvZiB0Lno/W3QueCx0LnksdC56XS5jb25jYXQoYS5zcGxpY2UoMykpOlt0LngsdC55LGFbMl1dLmNvbmNhdChhLnNwbGljZSgzKSk6W3QueCx0LnldLmNvbmNhdChhLnNwbGljZSgyKSk6W3QueCx0LnldKTooaD1mKHMsaSxhKSwyPT09KGU9T2JqZWN0LmtleXMoYSkpLmxlbmd0aHx8ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXMubmFtZSYmImdlb2NlbnQiPT09cy5uYW1lfHx2b2lkIDAhPT1pLm5hbWUmJiJnZW9jZW50Ij09PWkubmFtZSl7aWYoIngiPT09dHx8InkiPT09dHx8InoiPT09dClyZXR1cm59ZWxzZSBpZigieCI9PT10fHwieSI9PT10KXJldHVybjtoW3RdPWFbdF19KSxoKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0IGluc3RhbmNlb2YgcT90OnQub1Byb2o/dC5vUHJvajpxKHQpfWZ1bmN0aW9uIGEocyxpLHQpe3M9cChzKTt2YXIgYSxoPSExO3JldHVybiB2b2lkIDA9PT1pPyhpPXMscz13dCxoPSEwKTp2b2lkIDA9PT1pLngmJiFBcnJheS5pc0FycmF5KGkpfHwodD1pLGk9cyxzPXd0LGg9ITApLGk9cChpKSx0P20ocyxpLHQpOihhPXtmb3J3YXJkOmZ1bmN0aW9uKHQpe3JldHVybiBtKHMsaSx0KX0saW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gbShpLHMsdCl9fSxoJiYoYS5vUHJvaj1pKSxhKX1mdW5jdGlvbiBkKHQscyl7cmV0dXJuIHM9c3x8NSxpPWZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyPXQubGF0LG89dC5sb24sbD1fKHIpLE09XyhvKTtuPU1hdGguZmxvb3IoKG8rMTgwKS82KSsxLDE4MD09PW8mJihuPTYwKSw1Njw9ciYmcjw2NCYmMzw9byYmbzwxMiYmKG49MzIpLDcyPD1yJiZyPDg0JiYoMDw9byYmbzw5P249MzE6OTw9byYmbzwyMT9uPTMzOjIxPD1vJiZvPDMzP249MzU6MzM8PW8mJm88NDImJihuPTM3KSksZT1fKDYqKG4tMSktMTgwKzMpLHM9NjM3ODEzNy9NYXRoLnNxcnQoMS0uMDA2Njk0MzgqTWF0aC5zaW4obCkqTWF0aC5zaW4obCkpLGk9TWF0aC50YW4obCkqTWF0aC50YW4obCksYT0uMDA2NzM5NDk2NzUyMjY4NDUxKk1hdGguY29zKGwpKk1hdGguY29zKGwpO3ZhciBjPS45OTk2KnMqKChoPU1hdGguY29zKGwpKihNLWUpKSsoMS1pK2EpKmgqaCpoLzYrKDUtMTgqaStpKmkrNzIqYS0uMzkwODkwODExNjMxNTcwMTMpKmgqaCpoKmgqaC8xMjApKzVlNSx1PS45OTk2Kig2Mzc4MTM3KiguOTk4MzI0Mjk4NDUwMzI0MypsLS4wMDI1MTQ2MDcwNjQyMjgxNDQqTWF0aC5zaW4oMipsKSsyNjM5MDQ2NjAyMTI5OTgyZS0yMSpNYXRoLnNpbig0KmwpLTMuNDE4MDQ2MTAxNjk2ODU4ZS05Kk1hdGguc2luKDYqbCkpK3MqTWF0aC50YW4obCkqKGgqaC8yKyg1LWkrOSphKzQqYSphKSpoKmgqaCpoLzI0Kyg2MS01OCppK2kqaSs2MDAqYS0yLjIyNDAzMzkyODI0ODU4ODYpKmgqaCpoKmgqaCpoLzcyMCkpO3JldHVybiByPDAmJih1Kz0xZTcpLHtub3J0aGluZzpNYXRoLnJvdW5kKHUpLGVhc3Rpbmc6TWF0aC5yb3VuZChjKSx6b25lTnVtYmVyOm4sem9uZUxldHRlcjpmdW5jdGlvbih0KXt2YXIgcz0iWiI7cmV0dXJuIHQ8PTg0JiY3Mjw9dD9zPSJYIjp0PDcyJiY2NDw9dD9zPSJXIjp0PDY0JiY1Njw9dD9zPSJWIjp0PDU2JiY0ODw9dD9zPSJVIjp0PDQ4JiY0MDw9dD9zPSJUIjp0PDQwJiYzMjw9dD9zPSJTIjp0PDMyJiYyNDw9dD9zPSJSIjp0PDI0JiYxNjw9dD9zPSJRIjp0PDE2JiY4PD10P3M9IlAiOnQ8OCYmMDw9dD9zPSJOIjp0PDAmJi04PD10P3M9Ik0iOnQ8LTgmJi0xNjw9dD9zPSJMIjp0PC0xNiYmLTI0PD10P3M9IksiOnQ8LTI0JiYtMzI8PXQ/cz0iSiI6dDwtMzImJi00MDw9dD9zPSJIIjp0PC00MCYmLTQ4PD10P3M9IkciOnQ8LTQ4JiYtNTY8PXQ/cz0iRiI6dDwtNTYmJi02NDw9dD9zPSJFIjp0PC02NCYmLTcyPD10P3M9IkQiOnQ8LTcyJiYtODA8PXQmJihzPSJDIiksc30ocil9fSh7bGF0OnRbMV0sbG9uOnRbMF19KSxhPXMsaD0iMDAwMDAiK2kuZWFzdGluZyxlPSIwMDAwMCIraS5ub3J0aGluZyxpLnpvbmVOdW1iZXIraS56b25lTGV0dGVyK2Z1bmN0aW9uKHQscyxpKXt2YXIgYT1iKGkpO3JldHVybiBmdW5jdGlvbih0LHMsaSl7dmFyIGE9aS0xLGg9UHQuY2hhckNvZGVBdChhKSxlPVN0LmNoYXJDb2RlQXQoYSksbj1oK3QtMSxyPWUrcyxvPSExO3JldHVybiBJdDxuJiYobj1uLUl0K050LTEsbz0hMCksKG49PT1rdHx8aDxrdCYma3Q8bnx8KGt0PG58fGg8a3QpJiZvKSYmbisrLChuPT09RXR8fGg8RXQmJkV0PG58fChFdDxufHxoPEV0KSYmbykmJisrbj09PWt0JiZuKyssSXQ8biYmKG49bi1JdCtOdC0xKSxvPXF0PHImJihyPXItcXQrTnQtMSwhMCksKHI9PT1rdHx8ZTxrdCYma3Q8cnx8KGt0PHJ8fGU8a3QpJiZvKSYmcisrLChyPT09RXR8fGU8RXQmJkV0PHJ8fChFdDxyfHxlPEV0KSYmbykmJisrcj09PWt0JiZyKysscXQ8ciYmKHI9ci1xdCtOdC0xKSxTdHJpbmcuZnJvbUNoYXJDb2RlKG4pK1N0cmluZy5mcm9tQ2hhckNvZGUocil9KE1hdGguZmxvb3IodC8xZTUpLE1hdGguZmxvb3Iocy8xZTUpJTIwLGEpfShpLmVhc3RpbmcsaS5ub3J0aGluZyxpLnpvbmVOdW1iZXIpK2guc3Vic3RyKGgubGVuZ3RoLTUsYSkrZS5zdWJzdHIoZS5sZW5ndGgtNSxhKTt2YXIgaSxhLGgsZX1mdW5jdGlvbiB5KHQpe3ZhciBzPWcodih0LnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gcy5sYXQmJnMubG9uP1tzLmxvbixzLmxhdF06WyhzLmxlZnQrcy5yaWdodCkvMiwocy50b3Arcy5ib3R0b20pLzJdfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQqKE1hdGguUEkvMTgwKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0L01hdGguUEkqMTgwfWZ1bmN0aW9uIGcodCl7dmFyIHM9dC5ub3J0aGluZyxpPXQuZWFzdGluZyxhPXQuem9uZUxldHRlcixoPXQuem9uZU51bWJlcjtpZihoPDB8fDYwPGgpcmV0dXJuIG51bGw7dmFyIGUsbixyLG8sbCxNLGMsdSxmPSgxLU1hdGguc3FydCguOTkzMzA1NjIpKS8oMStNYXRoLnNxcnQoLjk5MzMwNTYyKSksbT1pLTVlNSxwPXM7YTwiTiImJihwLT0xZTcpLE09NiooaC0xKS0xODArMyx1PShjPXAvLjk5OTYvNjM2NzQ0OS4xNDU5NDUwNTYpKygzKmYvMi0yNypmKmYqZi8zMikqTWF0aC5zaW4oMipjKSsoMjEqZipmLzE2LTU1KmYqZipmKmYvMzIpKk1hdGguc2luKDQqYykrMTUxKmYqZipmLzk2Kk1hdGguc2luKDYqYyksZT02Mzc4MTM3L01hdGguc3FydCgxLS4wMDY2OTQzOCpNYXRoLnNpbih1KSpNYXRoLnNpbih1KSksbj1NYXRoLnRhbih1KSpNYXRoLnRhbih1KSxyPS4wMDY3Mzk0OTY3NTIyNjg0NTEqTWF0aC5jb3ModSkqTWF0aC5jb3ModSksbz02MzM1NDM5LjMyNzIyOTk0L01hdGgucG93KDEtLjAwNjY5NDM4Kk1hdGguc2luKHUpKk1hdGguc2luKHUpLDEuNSksbD1tLyguOTk5NiplKTt2YXIgZCx5PXgoeT11LWUqTWF0aC50YW4odSkvbyoobCpsLzItKDUrMypuKzEwKnItNCpyKnItLjA2MDY1NTQ3MDc3MDQxNjA2KSpsKmwqbCpsLzI0Kyg2MSs5MCpuKzI5OCpyKzQ1Km4qbi0xLjY5ODM1MzE4MTU3MTY0OTctMypyKnIpKmwqbCpsKmwqbCpsLzcyMCkpLF89TSt4KF89KGwtKDErMipuK3IpKmwqbCpsLzYrKDUtMipyKzI4Km4tMypyKnIrLjA1MzkxNTk3NDAxODE0NzYxKzI0Km4qbikqbCpsKmwqbCpsLzEyMCkvTWF0aC5jb3ModSkpO3JldHVybiB0LmFjY3VyYWN5P3t0b3A6KGQ9Zyh7bm9ydGhpbmc6dC5ub3J0aGluZyt0LmFjY3VyYWN5LGVhc3Rpbmc6dC5lYXN0aW5nK3QuYWNjdXJhY3ksem9uZUxldHRlcjp0LnpvbmVMZXR0ZXIsem9uZU51bWJlcjp0LnpvbmVOdW1iZXJ9KSkubGF0LHJpZ2h0OmQubG9uLGJvdHRvbTp5LGxlZnQ6X306e2xhdDp5LGxvbjpffX1mdW5jdGlvbiBiKHQpe3ZhciBzPXQlQ3Q7cmV0dXJuIDA9PT1zJiYocz1DdCksc31mdW5jdGlvbiB2KHQpe2lmKHQmJjA9PT10Lmxlbmd0aCl0aHJvdyJNR1JTUG9pbnQgY292ZXJ0aW5nIGZyb20gbm90aGluZyI7Zm9yKHZhciBzLGk9dC5sZW5ndGgsYT1udWxsLGg9IiIsZT0wOyEvW0EtWl0vLnRlc3Qocz10LmNoYXJBdChlKSk7KXtpZigyPD1lKXRocm93Ik1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiAiK3Q7aCs9cyxlKyt9dmFyIG49cGFyc2VJbnQoaCwxMCk7aWYoMD09PWV8fGk8ZSszKXRocm93Ik1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiAiK3Q7dmFyIHI9dC5jaGFyQXQoZSsrKTtpZihyPD0iQSJ8fCJCIj09PXJ8fCJZIj09PXJ8fCJaIjw9cnx8IkkiPT09cnx8Ik8iPT09cil0aHJvdyJNR1JTUG9pbnQgem9uZSBsZXR0ZXIgIityKyIgbm90IGhhbmRsZWQ6ICIrdDthPXQuc3Vic3RyaW5nKGUsZSs9Mik7Zm9yKHZhciBvPWIobiksbD1mdW5jdGlvbih0LHMpe2Zvcih2YXIgaT1QdC5jaGFyQ29kZUF0KHMtMSksYT0xZTUsaD0hMTtpIT09dC5jaGFyQ29kZUF0KDApOyl7aWYoKytpPT09a3QmJmkrKyxpPT09RXQmJmkrKyxJdDxpKXtpZihoKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrdDtpPU50LGg9ITB9YSs9MWU1fXJldHVybiBhfShhLmNoYXJBdCgwKSxvKSxNPWZ1bmN0aW9uKHQscyl7aWYoIlYiPHQpdGhyb3ciTUdSU1BvaW50IGdpdmVuIGludmFsaWQgTm9ydGhpbmcgIit0O2Zvcih2YXIgaT1TdC5jaGFyQ29kZUF0KHMtMSksYT0wLGg9ITE7aSE9PXQuY2hhckNvZGVBdCgwKTspe2lmKCsraT09PWt0JiZpKyssaT09PUV0JiZpKysscXQ8aSl7aWYoaCl0aHJvdyJCYWQgY2hhcmFjdGVyOiAiK3Q7aT1OdCxoPSEwfWErPTFlNX1yZXR1cm4gYX0oYS5jaGFyQXQoMSksbyk7TTx3KHIpOylNKz0yZTY7dmFyIGM9aS1lO2lmKGMlMiE9MCl0aHJvdyJNR1JTUG9pbnQgaGFzIHRvIGhhdmUgYW4gZXZlbiBudW1iZXIgXG5vZiBkaWdpdHMgYWZ0ZXIgdGhlIHpvbmUgbGV0dGVyIGFuZCB0d28gMTAwa20gbGV0dGVycyAtIGZyb250IFxuaGFsZiBmb3IgZWFzdGluZyBtZXRlcnMsIHNlY29uZCBoYWxmIGZvciBcbm5vcnRoaW5nIG1ldGVycyIrdDt2YXIgdSxmLG0scD1jLzIsZD0wLHk9MDtyZXR1cm4gMDxwJiYodT0xZTUvTWF0aC5wb3coMTAscCksZj10LnN1YnN0cmluZyhlLGUrcCksZD1wYXJzZUZsb2F0KGYpKnUsbT10LnN1YnN0cmluZyhlK3ApLHk9cGFyc2VGbG9hdChtKSp1KSx7ZWFzdGluZzpkK2wsbm9ydGhpbmc6eStNLHpvbmVMZXR0ZXI6cix6b25lTnVtYmVyOm4sYWNjdXJhY3k6dX19ZnVuY3Rpb24gdyh0KXt2YXIgcztzd2l0Y2godCl7Y2FzZSJDIjpzPTExZTU7YnJlYWs7Y2FzZSJEIjpzPTJlNjticmVhaztjYXNlIkUiOnM9MjhlNTticmVhaztjYXNlIkYiOnM9MzdlNTticmVhaztjYXNlIkciOnM9NDZlNTticmVhaztjYXNlIkgiOnM9NTVlNTticmVhaztjYXNlIkoiOnM9NjRlNTticmVhaztjYXNlIksiOnM9NzNlNTticmVhaztjYXNlIkwiOnM9ODJlNTticmVhaztjYXNlIk0iOnM9OTFlNTticmVhaztjYXNlIk4iOnM9MDticmVhaztjYXNlIlAiOnM9OGU1O2JyZWFrO2Nhc2UiUSI6cz0xN2U1O2JyZWFrO2Nhc2UiUiI6cz0yNmU1O2JyZWFrO2Nhc2UiUyI6cz0zNWU1O2JyZWFrO2Nhc2UiVCI6cz00NGU1O2JyZWFrO2Nhc2UiVSI6cz01M2U1O2JyZWFrO2Nhc2UiViI6cz02MmU1O2JyZWFrO2Nhc2UiVyI6cz03ZTY7YnJlYWs7Y2FzZSJYIjpzPTc5ZTU7YnJlYWs7ZGVmYXVsdDpzPS0xfWlmKDA8PXMpcmV0dXJuIHM7dGhyb3ciSW52YWxpZCB6b25lIGxldHRlcjogIit0fWZ1bmN0aW9uIEModCxzLGkpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEMpKXJldHVybiBuZXcgQyh0LHMsaSk7dmFyIGE7QXJyYXkuaXNBcnJheSh0KT8odGhpcy54PXRbMF0sdGhpcy55PXRbMV0sdGhpcy56PXRbMl18fDApOiJvYmplY3QiPT10eXBlb2YgdD8odGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10Lnp8fDApOiJzdHJpbmciPT10eXBlb2YgdCYmdm9pZCAwPT09cz8oYT10LnNwbGl0KCIsIiksdGhpcy54PXBhcnNlRmxvYXQoYVswXSwxMCksdGhpcy55PXBhcnNlRmxvYXQoYVsxXSwxMCksdGhpcy56PXBhcnNlRmxvYXQoYVsyXSwxMCl8fDApOih0aGlzLng9dCx0aGlzLnk9cyx0aGlzLno9aXx8MCksY29uc29sZS53YXJuKCJwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCIpfWZ1bmN0aW9uIFAodCxzLGksYSl7dmFyIGg7cmV0dXJuIHQ8RD8oYS52YWx1ZT1PcyxoPTApOihoPU1hdGguYXRhbjIocyxpKSxNYXRoLmFicyhoKTw9VT9hLnZhbHVlPU9zOlU8aCYmaDw9eitVPyhhLnZhbHVlPUFzLGgtPXopOnorVTxofHxoPD0tKHorVSk/KGEudmFsdWU9R3MsaD0wPD1oP2gtUTpoK1EpOihhLnZhbHVlPWpzLGgrPXopKSxofWZ1bmN0aW9uIFModCxzKXt2YXIgaT10K3M7cmV0dXJuIGk8LVE/aSs9RjorUTxpJiYoaS09RiksaX12YXIgST0xLE89MixBPTQsRz01LGo9NDg0ODEzNjgxMTA5NTM2ZS0yMCx6PU1hdGguUEkvMixSPS4xNjY2NjY2NjY2NjY2NjY2NixMPS4wNDcyMjIyMjIyMjIyMjIyMixUPS4wMjIxNTYwODQ2NTYwODQ2NTUsRD0xZS0xMCxOPS4wMTc0NTMyOTI1MTk5NDMyOTUsQj01Ny4yOTU3Nzk1MTMwODIzMixVPU1hdGguUEkvNCxGPTIqTWF0aC5QSSxRPTMuMTQxNTkyNjUzNTksVz17Z3JlZW53aWNoOjAsbGlzYm9uOi05LjEzMTkwNjExMTExMSxwYXJpczoyLjMzNzIyOTE2NjY2Nyxib2dvdGE6LTc0LjA4MDkxNjY2NjY2NyxtYWRyaWQ6LTMuNjg3OTM4ODg4ODg5LHJvbWU6MTIuNDUyMzMzMzMzMzMzLGJlcm46Ny40Mzk1ODMzMzMzMzMsamFrYXJ0YToxMDYuODA3NzE5NDQ0NDQ0LGZlcnJvOi0xNy42NjY2NjY2NjY2NjcsYnJ1c3NlbHM6NC4zNjc5NzUsc3RvY2tob2xtOjE4LjA1ODI3Nzc3Nzc3OCxhdGhlbnM6MjMuNzE2MzM3NSxvc2xvOjEwLjcyMjkxNjY2NjY2N30sWD17ZnQ6e3RvX21ldGVyOi4zMDQ4fSwidXMtZnQiOnt0b19tZXRlcjoxMjAwLzM5Mzd9fSxIPS9bXHNfXC1cL1woXCldL2csSj1mdW5jdGlvbih0KXt2YXIgcyxpLGEsaD17fSxlPXQuc3BsaXQoIisiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkucmVkdWNlKGZ1bmN0aW9uKHQscyl7dmFyIGk9cy5zcGxpdCgiPSIpO3JldHVybiBpLnB1c2goITApLHRbaVswXS50b0xvd2VyQ2FzZSgpXT1pWzFdLHR9LHt9KSxuPXtwcm9qOiJwcm9qTmFtZSIsZGF0dW06ImRhdHVtQ29kZSIscmY6ZnVuY3Rpb24odCl7aC5yZj1wYXJzZUZsb2F0KHQpfSxsYXRfMDpmdW5jdGlvbih0KXtoLmxhdDA9dCpOfSxsYXRfMTpmdW5jdGlvbih0KXtoLmxhdDE9dCpOfSxsYXRfMjpmdW5jdGlvbih0KXtoLmxhdDI9dCpOfSxsYXRfdHM6ZnVuY3Rpb24odCl7aC5sYXRfdHM9dCpOfSxsb25fMDpmdW5jdGlvbih0KXtoLmxvbmcwPXQqTn0sbG9uXzE6ZnVuY3Rpb24odCl7aC5sb25nMT10Kk59LGxvbl8yOmZ1bmN0aW9uKHQpe2gubG9uZzI9dCpOfSxhbHBoYTpmdW5jdGlvbih0KXtoLmFscGhhPXBhcnNlRmxvYXQodCkqTn0sbG9uYzpmdW5jdGlvbih0KXtoLmxvbmdjPXQqTn0seF8wOmZ1bmN0aW9uKHQpe2gueDA9cGFyc2VGbG9hdCh0KX0seV8wOmZ1bmN0aW9uKHQpe2gueTA9cGFyc2VGbG9hdCh0KX0sa18wOmZ1bmN0aW9uKHQpe2guazA9cGFyc2VGbG9hdCh0KX0sazpmdW5jdGlvbih0KXtoLmswPXBhcnNlRmxvYXQodCl9LGE6ZnVuY3Rpb24odCl7aC5hPXBhcnNlRmxvYXQodCl9LGI6ZnVuY3Rpb24odCl7aC5iPXBhcnNlRmxvYXQodCl9LHJfYTpmdW5jdGlvbigpe2guUl9BPSEwfSx6b25lOmZ1bmN0aW9uKHQpe2guem9uZT1wYXJzZUludCh0LDEwKX0sc291dGg6ZnVuY3Rpb24oKXtoLnV0bVNvdXRoPSEwfSx0b3dnczg0OmZ1bmN0aW9uKHQpe2guZGF0dW1fcGFyYW1zPXQuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KX0sdG9fbWV0ZXI6ZnVuY3Rpb24odCl7aC50b19tZXRlcj1wYXJzZUZsb2F0KHQpfSx1bml0czpmdW5jdGlvbih0KXtoLnVuaXRzPXQ7dmFyIHM9ayhYLHQpO3MmJihoLnRvX21ldGVyPXMudG9fbWV0ZXIpfSxmcm9tX2dyZWVud2ljaDpmdW5jdGlvbih0KXtoLmZyb21fZ3JlZW53aWNoPXQqTn0scG06ZnVuY3Rpb24odCl7dmFyIHM9ayhXLHQpO2guZnJvbV9ncmVlbndpY2g9KHN8fHBhcnNlRmxvYXQodCkpKk59LG5hZGdyaWRzOmZ1bmN0aW9uKHQpeyJAbnVsbCI9PT10P2guZGF0dW1Db2RlPSJub25lIjpoLm5hZGdyaWRzPXR9LGF4aXM6ZnVuY3Rpb24odCl7Mz09PXQubGVuZ3RoJiYtMSE9PSJld25zdWQiLmluZGV4T2YodC5zdWJzdHIoMCwxKSkmJi0xIT09ImV3bnN1ZCIuaW5kZXhPZih0LnN1YnN0cigxLDEpKSYmLTEhPT0iZXduc3VkIi5pbmRleE9mKHQuc3Vic3RyKDIsMSkpJiYoaC5heGlzPXQpfX07Zm9yKHMgaW4gZSlpPWVbc10scyBpbiBuPyJmdW5jdGlvbiI9PXR5cGVvZihhPW5bc10pP2EoaSk6aFthXT1pOmhbc109aTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGguZGF0dW1Db2RlJiYiV0dTODQiIT09aC5kYXR1bUNvZGUmJihoLmRhdHVtQ29kZT1oLmRhdHVtQ29kZS50b0xvd2VyQ2FzZSgpKSxofSxLPTEsVj0vXHMvLFo9L1tBLVphLXpdLyxZPS9bQS1aYS16ODRdLywkPS9bLFxdXS8sdHQ9L1tcZFwuRVwtXCtdLztlLnByb3RvdHlwZS5yZWFkQ2hhcmljdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXh0W3RoaXMucGxhY2UrK107aWYoNCE9PXRoaXMuc3RhdGUpZm9yKDtWLnRlc3QodCk7KXtpZih0aGlzLnBsYWNlPj10aGlzLnRleHQubGVuZ3RoKXJldHVybjt0PXRoaXMudGV4dFt0aGlzLnBsYWNlKytdfXN3aXRjaCh0aGlzLnN0YXRlKXtjYXNlIEs6cmV0dXJuIHRoaXMubmV1dHJhbCh0KTtjYXNlIDI6cmV0dXJuIHRoaXMua2V5d29yZCh0KTtjYXNlIDQ6cmV0dXJuIHRoaXMucXVvdGVkKHQpO2Nhc2UgNTpyZXR1cm4gdGhpcy5hZnRlcnF1b3RlKHQpO2Nhc2UgMzpyZXR1cm4gdGhpcy5udW1iZXIodCk7Y2FzZS0xOnJldHVybn19LGUucHJvdG90eXBlLmFmdGVycXVvdGU9ZnVuY3Rpb24odCl7aWYoJyInPT09dClyZXR1cm4gdGhpcy53b3JkKz0nIicsdm9pZCh0aGlzLnN0YXRlPTQpO2lmKCQudGVzdCh0KSlyZXR1cm4gdGhpcy53b3JkPXRoaXMud29yZC50cmltKCksdm9pZCB0aGlzLmFmdGVySXRlbSh0KTt0aHJvdyBuZXcgRXJyb3IoImhhdm4ndCBoYW5kbGVkIFwiIit0KyciIGluIGFmdGVycXVvdGUgeWV0LCBpbmRleCAnK3RoaXMucGxhY2UpfSxlLnByb3RvdHlwZS5hZnRlckl0ZW09ZnVuY3Rpb24odCl7cmV0dXJuIiwiPT09dD8obnVsbCE9PXRoaXMud29yZCYmdGhpcy5jdXJyZW50T2JqZWN0LnB1c2godGhpcy53b3JkKSx0aGlzLndvcmQ9bnVsbCx2b2lkKHRoaXMuc3RhdGU9SykpOiJdIj09PXQ/KHRoaXMubGV2ZWwtLSxudWxsIT09dGhpcy53b3JkJiYodGhpcy5jdXJyZW50T2JqZWN0LnB1c2godGhpcy53b3JkKSx0aGlzLndvcmQ9bnVsbCksdGhpcy5zdGF0ZT1LLHRoaXMuY3VycmVudE9iamVjdD10aGlzLnN0YWNrLnBvcCgpLHZvaWQodGhpcy5jdXJyZW50T2JqZWN0fHwodGhpcy5zdGF0ZT0tMSkpKTp2b2lkIDB9LGUucHJvdG90eXBlLm51bWJlcj1mdW5jdGlvbih0KXtpZighdHQudGVzdCh0KSl7aWYoJC50ZXN0KHQpKXJldHVybiB0aGlzLndvcmQ9cGFyc2VGbG9hdCh0aGlzLndvcmQpLHZvaWQgdGhpcy5hZnRlckl0ZW0odCk7dGhyb3cgbmV3IEVycm9yKCJoYXZuJ3QgaGFuZGxlZCBcIiIrdCsnIiBpbiBudW1iZXIgeWV0LCBpbmRleCAnK3RoaXMucGxhY2UpfXRoaXMud29yZCs9dH0sZS5wcm90b3R5cGUucXVvdGVkPWZ1bmN0aW9uKHQpeyciJyE9PXQ/dGhpcy53b3JkKz10OnRoaXMuc3RhdGU9NX0sZS5wcm90b3R5cGUua2V5d29yZD1mdW5jdGlvbih0KXtpZihZLnRlc3QodCkpdGhpcy53b3JkKz10O2Vsc2V7aWYoIlsiPT09dCl7dmFyIHM9W107cmV0dXJuIHMucHVzaCh0aGlzLndvcmQpLHRoaXMubGV2ZWwrKyxudWxsPT09dGhpcy5yb290P3RoaXMucm9vdD1zOnRoaXMuY3VycmVudE9iamVjdC5wdXNoKHMpLHRoaXMuc3RhY2sucHVzaCh0aGlzLmN1cnJlbnRPYmplY3QpLHRoaXMuY3VycmVudE9iamVjdD1zLHZvaWQodGhpcy5zdGF0ZT1LKX1pZighJC50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaGF2bid0IGhhbmRsZWQgXCIiK3QrJyIgaW4ga2V5d29yZCB5ZXQsIGluZGV4ICcrdGhpcy5wbGFjZSk7dGhpcy5hZnRlckl0ZW0odCl9fSxlLnByb3RvdHlwZS5uZXV0cmFsPWZ1bmN0aW9uKHQpe2lmKFoudGVzdCh0KSlyZXR1cm4gdGhpcy53b3JkPXQsdm9pZCh0aGlzLnN0YXRlPTIpO2lmKCciJz09PXQpcmV0dXJuIHRoaXMud29yZD0iIix2b2lkKHRoaXMuc3RhdGU9NCk7aWYodHQudGVzdCh0KSlyZXR1cm4gdGhpcy53b3JkPXQsdm9pZCh0aGlzLnN0YXRlPTMpO2lmKCEkLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKCJoYXZuJ3QgaGFuZGxlZCBcIiIrdCsnIiBpbiBuZXV0cmFsIHlldCwgaW5kZXggJyt0aGlzLnBsYWNlKTt0aGlzLmFmdGVySXRlbSh0KX0sZS5wcm90b3R5cGUub3V0cHV0PWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLnBsYWNlPHRoaXMudGV4dC5sZW5ndGg7KXRoaXMucmVhZENoYXJpY3RlcigpO2lmKC0xPT09dGhpcy5zdGF0ZSlyZXR1cm4gdGhpcy5yb290O3Rocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIHBhcnNlIHN0cmluZyAiJyt0aGlzLnRleHQrJyIuIFN0YXRlIGlzICcrdGhpcy5zdGF0ZSl9O3ZhciBzdCxpdD0uMDE3NDUzMjkyNTE5OTQzMjk1LGF0PWZ1bmN0aW9uKHQpe3ZhciBzPW5ldyBlKHQpLm91dHB1dCgpLGk9cy5zaGlmdCgpLGE9cy5zaGlmdCgpO3MudW5zaGlmdChbIm5hbWUiLGFdKSxzLnVuc2hpZnQoWyJ0eXBlIixpXSk7dmFyIGg9e307cmV0dXJuIG4ocyxoKSxvKGgpLGh9OyhzdD1sKSgiRVBTRzo0MzI2IiwiK3RpdGxlPVdHUyA4NCAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2VsbHBzPVdHUzg0ICtkYXR1bT1XR1M4NCArdW5pdHM9ZGVncmVlcyIpLHN0KCJFUFNHOjQyNjkiLCIrdGl0bGU9TkFEODMgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICthPTYzNzgxMzcuMCArYj02MzU2NzUyLjMxNDE0MDM2ICtlbGxwcz1HUlM4MCArZGF0dW09TkFEODMgK3VuaXRzPWRlZ3JlZXMiKSxzdCgiRVBTRzozODU3IiwiK3RpdGxlPVdHUyA4NCAvIFBzZXVkby1NZXJjYXRvciArcHJvaj1tZXJjICthPTYzNzgxMzcgK2I9NjM3ODEzNyArbGF0X3RzPTAuMCArbG9uXzA9MC4wICt4XzA9MC4wICt5XzA9MCAraz0xLjAgK3VuaXRzPW0gK25hZGdyaWRzPUBudWxsICtub19kZWZzIiksc3QuV0dTODQ9c3RbIkVQU0c6NDMyNiJdLHN0WyJFUFNHOjM3ODUiXT1zdFsiRVBTRzozODU3Il0sc3QuR09PR0xFPXN0WyJFUFNHOjM4NTciXSxzdFsiRVBTRzo5MDA5MTMiXT1zdFsiRVBTRzozODU3Il0sc3RbIkVQU0c6MTAyMTEzIl09c3RbIkVQU0c6Mzg1NyJdO2Z1bmN0aW9uIGh0KHQscyxpKXt2YXIgYT10KnM7cmV0dXJuIGkvTWF0aC5zcXJ0KDEtYSphKX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gbnQodCl7cmV0dXJuIE1hdGguYWJzKHQpPD1RP3Q6dC1ldCh0KSpGfWZ1bmN0aW9uIHJ0KHQscyxpKXt2YXIgYT10KmksaD0uNSp0LGE9TWF0aC5wb3coKDEtYSkvKDErYSksaCk7cmV0dXJuIE1hdGgudGFuKC41Kih6LXMpKS9hfWZ1bmN0aW9uIG90KHQscyl7Zm9yKHZhciBpLGEsaD0uNSp0LGU9ei0yKk1hdGguYXRhbihzKSxuPTA7bjw9MTU7bisrKWlmKGk9dCpNYXRoLnNpbihlKSxlKz1hPXotMipNYXRoLmF0YW4ocypNYXRoLnBvdygoMS1pKS8oMStpKSxoKSktZSxNYXRoLmFicyhhKTw9MWUtMTApcmV0dXJuIGU7cmV0dXJuLTk5OTl9dmFyIGx0PVsiUFJPSkVDVEVEQ1JTIiwiUFJPSkNSUyIsIkdFT0dDUyIsIkdFT0NDUyIsIlBST0pDUyIsIkxPQ0FMX0NTIiwiR0VPRENSUyIsIkdFT0RFVElDQ1JTIiwiR0VPREVUSUNEQVRVTSIsIkVOR0NSUyIsIkVOR0lORUVSSU5HQ1JTIl0sTXQ9WyIzODU3IiwiOTAwOTEzIiwiMzc4NSIsIjEwMjExMyJdLGN0PWZ1bmN0aW9uKHQscyl7dmFyIGksYTtpZih0PXR8fHt9LCFzKXJldHVybiB0O2ZvcihhIGluIHMpdm9pZCAwIT09KGk9c1thXSkmJih0W2FdPWkpO3JldHVybiB0fSx1dD1be2luaXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmIvdGhpcy5hO3RoaXMuZXM9MS10KnQsIngwImluIHRoaXN8fCh0aGlzLngwPTApLCJ5MCJpbiB0aGlzfHwodGhpcy55MD0wKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMubGF0X3RzP3RoaXMuc3BoZXJlP3RoaXMuazA9TWF0aC5jb3ModGhpcy5sYXRfdHMpOnRoaXMuazA9aHQodGhpcy5lLE1hdGguc2luKHRoaXMubGF0X3RzKSxNYXRoLmNvcyh0aGlzLmxhdF90cykpOnRoaXMuazB8fCh0aGlzLms/dGhpcy5rMD10aGlzLms6dGhpcy5rMD0xKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlPXQueCxuPXQueTtyZXR1cm4gOTA8bipCJiZuKkI8LTkwJiYxODA8ZSpCJiZlKkI8LTE4MHx8TWF0aC5hYnMoTWF0aC5hYnMobikteik8PUQ/bnVsbDooaD10aGlzLnNwaGVyZT8oYT10aGlzLngwK3RoaXMuYSp0aGlzLmswKm50KGUtdGhpcy5sb25nMCksdGhpcy55MCt0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhNYXRoLnRhbihVKy41Km4pKSk6KHM9TWF0aC5zaW4obiksaT1ydCh0aGlzLmUsbixzKSxhPXRoaXMueDArdGhpcy5hKnRoaXMuazAqbnQoZS10aGlzLmxvbmcwKSx0aGlzLnkwLXRoaXMuYSp0aGlzLmswKk1hdGgubG9nKGkpKSx0Lng9YSx0Lnk9aCx0KX0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpLGE9dC54LXRoaXMueDAsaD10LnktdGhpcy55MDtpZih0aGlzLnNwaGVyZSlpPXotMipNYXRoLmF0YW4oTWF0aC5leHAoLWgvKHRoaXMuYSp0aGlzLmswKSkpO2Vsc2V7dmFyIGU9TWF0aC5leHAoLWgvKHRoaXMuYSp0aGlzLmswKSk7aWYoLTk5OTk9PT0oaT1vdCh0aGlzLmUsZSkpKXJldHVybiBudWxsfXJldHVybiBzPW50KHRoaXMubG9uZzArYS8odGhpcy5hKnRoaXMuazApKSx0Lng9cyx0Lnk9aSx0fSxuYW1lczpbIk1lcmNhdG9yIiwiUG9wdWxhciBWaXN1YWxpc2F0aW9uIFBzZXVkbyBNZXJjYXRvciIsIk1lcmNhdG9yXzFTUCIsIk1lcmNhdG9yX0F1eGlsaWFyeV9TcGhlcmUiLCJtZXJjIl19LHtpbml0OmZ1bmN0aW9uKCl7fSxmb3J3YXJkOnQsaW52ZXJzZTp0LG5hbWVzOlsibG9uZ2xhdCIsImlkZW50aXR5Il19XSxmdD17fSxtdD1bXSxwdD17c3RhcnQ6ZnVuY3Rpb24oKXt1dC5mb3JFYWNoKHMpfSxhZGQ6cyxnZXQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dmFyIHM9dC50b0xvd2VyQ2FzZSgpO3JldHVybiB2b2lkIDAhPT1mdFtzXSYmbXRbZnRbc11dP210W2Z0W3NdXTp2b2lkIDB9fSxkdD17TUVSSVQ6e2E6NjM3ODEzNyxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJNRVJJVCAxOTgzIn0sU0dTODU6e2E6NjM3ODEzNixyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJTb3ZpZXQgR2VvZGV0aWMgU3lzdGVtIDg1In0sR1JTODA6e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIyMTAxLGVsbGlwc2VOYW1lOiJHUlMgMTk4MChJVUdHLCAxOTgwKSJ9LElBVTc2OnthOjYzNzgxNDAscmY6Mjk4LjI1NyxlbGxpcHNlTmFtZToiSUFVIDE5NzYifSxhaXJ5OnthOjYzNzc1NjMuMzk2LGI6NjM1NjI1Ni45MSxlbGxpcHNlTmFtZToiQWlyeSAxODMwIn0sQVBMNDp7YTo2Mzc4MTM3LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXBwbC4gUGh5c2ljcy4gMTk2NSJ9LE5XTDlEOnthOjYzNzgxNDUscmY6Mjk4LjI1LGVsbGlwc2VOYW1lOiJOYXZhbCBXZWFwb25zIExhYi4sIDE5NjUifSxtb2RfYWlyeTp7YTo2Mzc3MzQwLjE4OSxiOjYzNTYwMzQuNDQ2LGVsbGlwc2VOYW1lOiJNb2RpZmllZCBBaXJ5In0sYW5kcmFlOnthOjYzNzcxMDQuNDMscmY6MzAwLGVsbGlwc2VOYW1lOiJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKSJ9LGF1c3RfU0E6e2E6NjM3ODE2MCxyZjoyOTguMjUsZWxsaXBzZU5hbWU6IkF1c3RyYWxpYW4gTmF0bCAmIFMuIEFtZXIuIDE5NjkifSxHUlM2Nzp7YTo2Mzc4MTYwLHJmOjI5OC4yNDcxNjc0MjcsZWxsaXBzZU5hbWU6IkdSUyA2NyhJVUdHIDE5NjcpIn0sYmVzc2VsOnthOjYzNzczOTcuMTU1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSJ9LGJlc3NfbmFtOnthOjYzNzc0ODMuODY1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSAoTmFtaWJpYSkifSxjbHJrNjY6e2E6NjM3ODIwNi40LGI6NjM1NjU4My44LGVsbGlwc2VOYW1lOiJDbGFya2UgMTg2NiJ9LGNscms4MDp7YTo2Mzc4MjQ5LjE0NSxyZjoyOTMuNDY2MyxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4ODAgbW9kLiJ9LGNscms1ODp7YTo2Mzc4MjkzLjY0NTIwODc1OSxyZjoyOTQuMjYwNjc2MzY5MjY1NCxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4NTgifSxDUE06e2E6NjM3NTczOC43LHJmOjMzNC4yOSxlbGxpcHNlTmFtZToiQ29tbS4gZGVzIFBvaWRzIGV0IE1lc3VyZXMgMTc5OSJ9LGRlbG1icjp7YTo2Mzc2NDI4LHJmOjMxMS41LGVsbGlwc2VOYW1lOiJEZWxhbWJyZSAxODEwIChCZWxnaXVtKSJ9LGVuZ2VsaXM6e2E6NjM3ODEzNi4wNSxyZjoyOTguMjU2NixlbGxpcHNlTmFtZToiRW5nZWxpcyAxOTg1In0sZXZyc3QzMDp7YTo2Mzc3Mjc2LjM0NSxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxODMwIn0sZXZyc3Q0ODp7YTo2Mzc3MzA0LjA2MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTQ4In0sZXZyc3Q1Njp7YTo2Mzc3MzAxLjI0MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTU2In0sZXZyc3Q2OTp7YTo2Mzc3Mjk1LjY2NCxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTY5In0sZXZyc3RTUzp7YTo2Mzc3Mjk4LjU1NixyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKSJ9LGZzY2hyNjA6e2E6NjM3ODE2NixyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAoTWVyY3VyeSBEYXR1bSkgMTk2MCJ9LGZzY2hyNjBtOnthOjYzNzgxNTUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IkZpc2NoZXIgMTk2MCJ9LGZzY2hyNjg6e2E6NjM3ODE1MCxyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAxOTY4In0saGVsbWVydDp7YTo2Mzc4MjAwLHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJIZWxtZXJ0IDE5MDYifSxob3VnaDp7YTo2Mzc4MjcwLHJmOjI5NyxlbGxpcHNlTmFtZToiSG91Z2gifSxpbnRsOnthOjYzNzgzODgscmY6Mjk3LGVsbGlwc2VOYW1lOiJJbnRlcm5hdGlvbmFsIDE5MDkgKEhheWZvcmQpIn0sa2F1bGE6e2E6NjM3ODE2MyxyZjoyOTguMjQsZWxsaXBzZU5hbWU6IkthdWxhIDE5NjEifSxsZXJjaDp7YTo2Mzc4MTM5LHJmOjI5OC4yNTcsZWxsaXBzZU5hbWU6IkxlcmNoIDE5NzkifSxtcHJ0czp7YTo2Mzk3MzAwLHJmOjE5MSxlbGxpcHNlTmFtZToiTWF1cGVydGl1cyAxNzM4In0sbmV3X2ludGw6e2E6NjM3ODE1Ny41LGI6NjM1Njc3Mi4yLGVsbGlwc2VOYW1lOiJOZXcgSW50ZXJuYXRpb25hbCAxOTY3In0scGxlc3Npczp7YTo2Mzc2NTIzLHJmOjYzNTU4NjMsZWxsaXBzZU5hbWU6IlBsZXNzaXMgMTgxNyAoRnJhbmNlKSJ9LGtyYXNzOnthOjYzNzgyNDUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IktyYXNzb3Zza3ksIDE5NDIifSxTRWFzaWE6e2E6NjM3ODE1NSxiOjYzNTY3NzMuMzIwNSxlbGxpcHNlTmFtZToiU291dGhlYXN0IEFzaWEifSx3YWxiZWNrOnthOjYzNzY4OTYsYjo2MzU1ODM0Ljg0NjcsZWxsaXBzZU5hbWU6IldhbGJlY2sifSxXR1M2MDp7YTo2Mzc4MTY1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJXR1MgNjAifSxXR1M2Njp7YTo2Mzc4MTQ1LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiV0dTIDY2In0sV0dTNzp7YTo2Mzc4MTM1LHJmOjI5OC4yNixlbGxpcHNlTmFtZToiV0dTIDcyIn19LHl0PWR0LldHUzg0PXthOjYzNzgxMzcscmY6Mjk4LjI1NzIyMzU2MyxlbGxpcHNlTmFtZToiV0dTIDg0In07ZHQuc3BoZXJlPXthOjYzNzA5OTcsYjo2MzcwOTk3LGVsbGlwc2VOYW1lOiJOb3JtYWwgU3BoZXJlIChyPTYzNzA5OTcpIn07dmFyIF90PXt3Z3M4NDp7dG93Z3M4NDoiMCwwLDAiLGVsbGlwc2U6IldHUzg0IixkYXR1bU5hbWU6IldHUzg0In0sY2gxOTAzOnt0b3dnczg0OiI2NzQuMzc0LDE1LjA1Niw0MDUuMzQ2IixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToic3dpc3MifSxnZ3JzODc6e3Rvd2dzODQ6Ii0xOTkuODcsNzQuNzksMjQ2LjYyIixlbGxpcHNlOiJHUlM4MCIsZGF0dW1OYW1lOiJHcmVla19HZW9kZXRpY19SZWZlcmVuY2VfU3lzdGVtXzE5ODcifSxuYWQ4Mzp7dG93Z3M4NDoiMCwwLDAiLGVsbGlwc2U6IkdSUzgwIixkYXR1bU5hbWU6Ik5vcnRoX0FtZXJpY2FuX0RhdHVtXzE5ODMifSxuYWQyNzp7bmFkZ3JpZHM6IkBjb251cyxAYWxhc2thLEBudHYyXzAuZ3NiLEBudHYxX2Nhbi5kYXQiLGVsbGlwc2U6ImNscms2NiIsZGF0dW1OYW1lOiJOb3J0aF9BbWVyaWNhbl9EYXR1bV8xOTI3In0scG90c2RhbTp7dG93Z3M4NDoiNjA2LjAsMjMuMCw0MTMuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlBvdHNkYW0gUmF1ZW5iZXJnIDE5NTAgREhETiJ9LGNhcnRoYWdlOnt0b3dnczg0OiItMjYzLjAsNi4wLDQzMS4wIixlbGxpcHNlOiJjbGFyazgwIixkYXR1bU5hbWU6IkNhcnRoYWdlIDE5MzQgVHVuaXNpYSJ9LGhlcm1hbm5za29nZWw6e3Rvd2dzODQ6IjY1My4wLC0yMTIuMCw0NDkuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6Ikhlcm1hbm5za29nZWwifSxvc25pNTI6e3Rvd2dzODQ6IjQ4Mi41MzAsLTEzMC41OTYsNTY0LjU1NywtMS4wNDIsLTAuMjE0LC0wLjYzMSw4LjE1IixlbGxpcHNlOiJhaXJ5IixkYXR1bU5hbWU6IklyaXNoIE5hdGlvbmFsIn0saXJlNjU6e3Rvd2dzODQ6IjQ4Mi41MzAsLTEzMC41OTYsNTY0LjU1NywtMS4wNDIsLTAuMjE0LC0wLjYzMSw4LjE1IixlbGxpcHNlOiJtb2RfYWlyeSIsZGF0dW1OYW1lOiJJcmVsYW5kIDE5NjUifSxyYXNzYWRpcmFuOnt0b3dnczg0OiItMTMzLjYzLC0xNTcuNSwtMTU4LjYyIixlbGxpcHNlOiJpbnRsIixkYXR1bU5hbWU6IlJhc3NhZGlyYW4ifSxuemdkNDk6e3Rvd2dzODQ6IjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5MyIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJOZXcgWmVhbGFuZCBHZW9kZXRpYyBEYXR1bSAxOTQ5In0sb3NnYjM2Ont0b3dnczg0OiI0NDYuNDQ4LC0xMjUuMTU3LDU0Mi4wNjAsMC4xNTAyLDAuMjQ3MCwwLjg0MjEsLTIwLjQ4OTQiLGVsbGlwc2U6ImFpcnkiLGRhdHVtTmFtZToiQWlyeSAxODMwIn0sc19qdHNrOnt0b3dnczg0OiI1ODksNzYsNDgwIixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToiUy1KVFNLIChGZXJybykifSxiZWR1YXJhbTp7dG93Z3M4NDoiLTEwNiwtODcsMTg4IixlbGxpcHNlOiJjbHJrODAiLGRhdHVtTmFtZToiQmVkdWFyYW0ifSxndW51bmdfc2VnYXJhOnt0b3dnczg0OiItNDAzLDY4NCw0MSIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6Ikd1bnVuZyBTZWdhcmEgSmFrYXJ0YSJ9LHJuYjcyOnt0b3dnczg0OiIxMDYuODY5LC01Mi4yOTc4LDEwMy43MjQsLTAuMzM2NTcsMC40NTY5NTUsLTEuODQyMTgsMSIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJSZXNlYXUgTmF0aW9uYWwgQmVsZ2UgMTk3MiJ9fTtxLnByb2plY3Rpb25zPXB0LHEucHJvamVjdGlvbnMuc3RhcnQoKTt2YXIgeHQ9ZnVuY3Rpb24odCxzLGkpe3JldHVybiBoPXMsKChhPXQpLmRhdHVtX3R5cGUhPT1oLmRhdHVtX3R5cGV8fGEuYSE9PWguYXx8NWUtMTE8TWF0aC5hYnMoYS5lcy1oLmVzKXx8KGEuZGF0dW1fdHlwZT09PUk/YS5kYXR1bV9wYXJhbXNbMF0hPT1oLmRhdHVtX3BhcmFtc1swXXx8YS5kYXR1bV9wYXJhbXNbMV0hPT1oLmRhdHVtX3BhcmFtc1sxXXx8YS5kYXR1bV9wYXJhbXNbMl0hPT1oLmRhdHVtX3BhcmFtc1syXTphLmRhdHVtX3R5cGU9PT1PJiYoYS5kYXR1bV9wYXJhbXNbMF0hPT1oLmRhdHVtX3BhcmFtc1swXXx8YS5kYXR1bV9wYXJhbXNbMV0hPT1oLmRhdHVtX3BhcmFtc1sxXXx8YS5kYXR1bV9wYXJhbXNbMl0hPT1oLmRhdHVtX3BhcmFtc1syXXx8YS5kYXR1bV9wYXJhbXNbM10hPT1oLmRhdHVtX3BhcmFtc1szXXx8YS5kYXR1bV9wYXJhbXNbNF0hPT1oLmRhdHVtX3BhcmFtc1s0XXx8YS5kYXR1bV9wYXJhbXNbNV0hPT1oLmRhdHVtX3BhcmFtc1s1XXx8YS5kYXR1bV9wYXJhbXNbNl0hPT1oLmRhdHVtX3BhcmFtc1s2XSkpKSYmdC5kYXR1bV90eXBlIT09RyYmcy5kYXR1bV90eXBlIT09RyYmKHQuZXMhPT1zLmVzfHx0LmEhPT1zLmF8fHUodC5kYXR1bV90eXBlKXx8dShzLmRhdHVtX3R5cGUpKT8oaT1NKGksdC5lcyx0LmEpLHUodC5kYXR1bV90eXBlKSYmKGk9ZnVuY3Rpb24odCxzLGkpe2lmKHM9PT1JKXJldHVybnt4OnQueCtpWzBdLHk6dC55K2lbMV0sejp0LnoraVsyXX07aWYocz09PU8pe3ZhciBhPWlbMF0saD1pWzFdLGU9aVsyXSxuPWlbM10scj1pWzRdLG89aVs1XSxsPWlbNl07cmV0dXJue3g6bCoodC54LW8qdC55K3IqdC56KSthLHk6bCoobyp0LngrdC55LW4qdC56KStoLHo6bCooLXIqdC54K24qdC55K3QueikrZX19fShpLHQuZGF0dW1fdHlwZSx0LmRhdHVtX3BhcmFtcykpLHUocy5kYXR1bV90eXBlKSYmKGk9ZnVuY3Rpb24odCxzLGkpe2lmKHM9PT1JKXJldHVybnt4OnQueC1pWzBdLHk6dC55LWlbMV0sejp0LnotaVsyXX07aWYocz09PU8pe3ZhciBhPWlbMF0saD1pWzFdLGU9aVsyXSxuPWlbM10scj1pWzRdLG89aVs1XSxsPWlbNl0sTT0odC54LWEpL2wsYz0odC55LWgpL2wsdT0odC56LWUpL2w7cmV0dXJue3g6TStvKmMtcip1LHk6LW8qTStjK24qdSx6OnIqTS1uKmMrdX19fShpLHMuZGF0dW1fdHlwZSxzLmRhdHVtX3BhcmFtcykpLGMoaSxzLmVzLHMuYSxzLmIpKTppO3ZhciBhLGh9LGd0PWZ1bmN0aW9uKHQscyxpKXtmb3IodmFyIGEsaCxlPWkueCxuPWkueSxyPWkuenx8MCxvPXt9LGw9MDtsPDM7bCsrKWlmKCFzfHwyIT09bHx8dm9pZCAwIT09aS56KXN3aXRjaChoPTA9PT1sPyhhPWUsLTEhPT0iZXciLmluZGV4T2YodC5heGlzW2xdKT8ieCI6InkiKToxPT09bD8oYT1uLC0xIT09Im5zIi5pbmRleE9mKHQuYXhpc1tsXSk/InkiOiJ4Iik6KGE9ciwieiIpLHQuYXhpc1tsXSl7Y2FzZSJlIjpjYXNlInciOmNhc2UibiI6Y2FzZSJzIjpvW2hdPWE7YnJlYWs7Y2FzZSJ1Ijp2b2lkIDAhPT1pW2hdJiYoby56PWEpO2JyZWFrO2Nhc2UiZCI6dm9pZCAwIT09aVtoXSYmKG8uej0tYSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gb30sYnQ9ZnVuY3Rpb24odCl7dmFyIHM9e3g6dFswXSx5OnRbMV19O3JldHVybiAyPHQubGVuZ3RoJiYocy56PXRbMl0pLDM8dC5sZW5ndGgmJihzLm09dFszXSksc30sdnQ9ZnVuY3Rpb24odCl7aSh0LngpLGkodC55KX0sd3Q9cSgiV0dTODQiKSxDdD02LFB0PSJBSlNBSlMiLFN0PSJBRkFGQUYiLE50PTY1LGt0PTczLEV0PTc5LHF0PTg2LEl0PTkwLE90PXtmb3J3YXJkOmQsaW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcz1nKHYodC50b1VwcGVyQ2FzZSgpKSk7cmV0dXJuIHMubGF0JiZzLmxvbj9bcy5sb24scy5sYXQscy5sb24scy5sYXRdOltzLmxlZnQscy5ib3R0b20scy5yaWdodCxzLnRvcF19LHRvUG9pbnQ6eX07Qy5mcm9tTUdSUz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEMoeSh0KSl9LEMucHJvdG90eXBlLnRvTUdSUz1mdW5jdGlvbih0KXtyZXR1cm4gZChbdGhpcy54LHRoaXMueV0sdCl9O2Z1bmN0aW9uIEF0KHQpe3ZhciBzPVtdO3NbMF09MS10KiguMjUrdCooLjA0Njg3NSt0KiguMDE5NTMxMjUrdCp0cykpKSxzWzFdPXQqKC43NS10KiguMDQ2ODc1K3QqKC4wMTk1MzEyNSt0KnRzKSkpO3ZhciBpPXQqdDtyZXR1cm4gc1syXT1pKiguNDY4NzUtdCooLjAxMzAyMDgzMzMzMzMzMzMzNCsuMDA3MTIwNzY4MjI5MTY2NjY3KnQpKSxpKj10LHNbM109aSooLjM2NDU4MzMzMzMzMzMzMzMtLjAwNTY5NjYxNDU4MzMzMzMzMyp0KSxzWzRdPWkqdCouMzA3NjE3MTg3NSxzfWZ1bmN0aW9uIEd0KHQscyxpLGEpe3JldHVybiBpKj1zLHMqPXMsYVswXSp0LWkqKGFbMV0rcyooYVsyXStzKihhWzNdK3MqYVs0XSkpKX1mdW5jdGlvbiBqdCh0LHMsaSl7Zm9yKHZhciBhPTEvKDEtcyksaD10LGU9MjA7ZTstLWUpe3ZhciBuPU1hdGguc2luKGgpLHI9MS1zKm4qbjtpZihoLT1yPShHdChoLG4sTWF0aC5jb3MoaCksaSktdCkqKHIqTWF0aC5zcXJ0KHIpKSphLE1hdGguYWJzKHIpPEQpcmV0dXJuIGh9cmV0dXJuIGh9ZnVuY3Rpb24genQodCl7dmFyIHM9TWF0aC5leHAodCk7cmV0dXJuKHMtMS9zKS8yfWZ1bmN0aW9uIFJ0KHQscyl7dD1NYXRoLmFicyh0KSxzPU1hdGguYWJzKHMpO3ZhciBpPU1hdGgubWF4KHQscyksYT1NYXRoLm1pbih0LHMpLyhpfHwxKTtyZXR1cm4gaSpNYXRoLnNxcnQoMStNYXRoLnBvdyhhLDIpKX1mdW5jdGlvbiBMdCh0KXt2YXIgcyxpLGEsaD1NYXRoLmFicyh0KTtyZXR1cm4gcz1oKigxK2gvKFJ0KDEsaCkrMSkpLGg9MD09KGE9KGk9MStzKS0xKT9zOnMqTWF0aC5sb2coaSkvYSx0PDA/LWg6aH1mdW5jdGlvbiBUdCh0LHMpe2Zvcih2YXIgaSxhPTIqTWF0aC5jb3MoMipzKSxoPXQubGVuZ3RoLTEsZT10W2hdLG49MDswPD0tLWg7KWk9YSplLW4rdFtoXSxuPWUsZT1pO3JldHVybiBzK2kqTWF0aC5zaW4oMipzKX1mdW5jdGlvbiBEdCh0LHMsaSl7Zm9yKHZhciBhLGgsZSxuLHI9TWF0aC5zaW4ocyksbz1NYXRoLmNvcyhzKSxsPXp0KGkpLE09KGU9aSwoKG49TWF0aC5leHAoZSkpKzEvbikvMiksYz0yKm8qTSx1PS0yKnIqbCxmPXQubGVuZ3RoLTEsbT10W2ZdLHA9MCxkPTAseT0wOzA8PS0tZjspYT1kLGg9cCxtPWMqKGQ9bSktYS11KihwPXkpK3RbZl0seT11KmQtaCtjKnA7cmV0dXJuWyhjPXIqTSkqbS0odT1vKmwpKnksYyp5K3UqbV19ZnVuY3Rpb24gQnQodCxzKXtyZXR1cm4gTWF0aC5wb3coKDEtdCkvKDErdCkscyl9ZnVuY3Rpb24gVXQodCxzLGksYSxoKXtyZXR1cm4gdCpoLXMqTWF0aC5zaW4oMipoKStpKk1hdGguc2luKDQqaCktYSpNYXRoLnNpbig2KmgpfWZ1bmN0aW9uIEZ0KHQpe3JldHVybiAxLS4yNSp0KigxK3QvMTYqKDMrMS4yNSp0KSl9ZnVuY3Rpb24gUXQodCl7cmV0dXJuLjM3NSp0KigxKy4yNSp0KigxKy40Njg3NSp0KSl9ZnVuY3Rpb24gV3QodCl7cmV0dXJuLjA1ODU5Mzc1KnQqdCooMSsuNzUqdCl9ZnVuY3Rpb24gWHQodCl7cmV0dXJuIHQqdCp0KigzNS8zMDcyKX1mdW5jdGlvbiBIdCh0LHMsaSl7dmFyIGE9cyppO3JldHVybiB0L01hdGguc3FydCgxLWEqYSl9ZnVuY3Rpb24gSnQodCl7cmV0dXJuIE1hdGguYWJzKHQpPHo/dDp0LWV0KHQpKk1hdGguUEl9ZnVuY3Rpb24gS3QodCxzLGksYSxoKXtmb3IodmFyIGUsbj10L3Mscj0wO3I8MTU7cisrKWlmKG4rPWU9KHQtKHMqbi1pKk1hdGguc2luKDIqbikrYSpNYXRoLnNpbig0Km4pLWgqTWF0aC5zaW4oNipuKSkpLyhzLTIqaSpNYXRoLmNvcygyKm4pKzQqYSpNYXRoLmNvcyg0Km4pLTYqaCpNYXRoLmNvcyg2Km4pKSxNYXRoLmFicyhlKTw9MWUtMTApcmV0dXJuIG47cmV0dXJuIE5hTn1mdW5jdGlvbiBWdCh0LHMpe3ZhciBpO3JldHVybiAxZS03PHQ/KDEtdCp0KSoocy8oMS0oaT10KnMpKmkpLS41L3QqTWF0aC5sb2coKDEtaSkvKDEraSkpKToyKnN9ZnVuY3Rpb24gWnQodCl7cmV0dXJuIDE8TWF0aC5hYnModCkmJih0PTE8dD8xOi0xKSxNYXRoLmFzaW4odCl9ZnVuY3Rpb24gWXQodCxzKXtyZXR1cm4gdFswXStzKih0WzFdK3MqKHRbMl0rcyp0WzNdKSl9dmFyICR0LHRzPS4wMTA2ODExNTIzNDM3NSxzcz17aW5pdDpmdW5jdGlvbigpe3RoaXMueDA9dm9pZCAwIT09dGhpcy54MD90aGlzLngwOjAsdGhpcy55MD12b2lkIDAhPT10aGlzLnkwP3RoaXMueTA6MCx0aGlzLmxvbmcwPXZvaWQgMCE9PXRoaXMubG9uZzA/dGhpcy5sb25nMDowLHRoaXMubGF0MD12b2lkIDAhPT10aGlzLmxhdDA/dGhpcy5sYXQwOjAsdGhpcy5lcyYmKHRoaXMuZW49QXQodGhpcy5lcyksdGhpcy5tbDA9R3QodGhpcy5sYXQwLE1hdGguc2luKHRoaXMubGF0MCksTWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLmVuKSl9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHM9dC54LGk9dC55LGE9bnQocy10aGlzLmxvbmcwKSxoPU1hdGguc2luKGkpLGU9TWF0aC5jb3MoaSk7aWYodGhpcy5lcyl7dmFyIG49ZSphLHI9TWF0aC5wb3cobiwyKSxvPXRoaXMuZXAyKk1hdGgucG93KGUsMiksbD1NYXRoLnBvdyhvLDIpLE09TWF0aC5hYnMoZSk+RD9NYXRoLnRhbihpKTowLGM9TWF0aC5wb3coTSwyKSx1PU1hdGgucG93KGMsMiksZj0xLXRoaXMuZXMqTWF0aC5wb3coaCwyKTtuLz1NYXRoLnNxcnQoZik7dmFyIG09R3QoaSxoLGUsdGhpcy5lbikscD10aGlzLmEqKHRoaXMuazAqbiooMStyLzYqKDEtYytvK3IvMjAqKDUtMTgqYyt1KzE0Km8tNTgqYypvK3IvNDIqKDYxKzE3OSp1LXUqYy00NzkqYykpKSkpK3RoaXMueDAsZD10aGlzLmEqKHRoaXMuazAqKG0tdGhpcy5tbDAraCphKm4vMiooMStyLzEyKig1LWMrOSpvKzQqbCtyLzMwKig2MSt1LTU4KmMrMjcwKm8tMzMwKmMqbytyLzU2KigxMzg1KzU0Myp1LXUqYy0zMTExKmMpKSkpKSkrdGhpcy55MH1lbHNle3ZhciB5PWUqTWF0aC5zaW4oYSk7aWYoTWF0aC5hYnMoTWF0aC5hYnMoeSktMSk8RClyZXR1cm4gOTM7aWYocD0uNSp0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZygoMSt5KS8oMS15KSkrdGhpcy54MCxkPWUqTWF0aC5jb3MoYSkvTWF0aC5zcXJ0KDEtTWF0aC5wb3coeSwyKSksMTw9KHk9TWF0aC5hYnMoZCkpKXtpZihEPHktMSlyZXR1cm4gOTM7ZD0wfWVsc2UgZD1NYXRoLmFjb3MoZCk7aTwwJiYoZD0tZCksZD10aGlzLmEqdGhpcy5rMCooZC10aGlzLmxhdDApK3RoaXMueTB9cmV0dXJuIHQueD1wLHQueT1kLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE0sYyx1LGYsbSxwLGQseSxfPSh0LngtdGhpcy54MCkqKDEvdGhpcy5hKSx4PSh0LnktdGhpcy55MCkqKDEvdGhpcy5hKTtyZXR1cm4gZj10aGlzLmVzPyhsPXRoaXMubWwwK3gvdGhpcy5rMCxzPWp0KGwsdGhpcy5lcyx0aGlzLmVuKSxNYXRoLmFicyhzKTx6PyhpPU1hdGguc2luKHMpLGE9TWF0aC5jb3MocyksaD1NYXRoLmFicyhhKT5EP01hdGgudGFuKHMpOjAsZT10aGlzLmVwMipNYXRoLnBvdyhhLDIpLG49TWF0aC5wb3coZSwyKSxyPU1hdGgucG93KGgsMiksbz1NYXRoLnBvdyhyLDIpLGw9MS10aGlzLmVzKk1hdGgucG93KGksMiksTT1fKk1hdGguc3FydChsKS90aGlzLmswLHU9cy0obCo9aCkqKGM9TWF0aC5wb3coTSwyKSkvKDEtdGhpcy5lcykqLjUqKDEtYy8xMiooNSszKnItOSplKnIrZS00Km4tYy8zMCooNjErOTAqci0yNTIqZSpyKzQ1Km8rNDYqZS1jLzU2KigxMzg1KzM2MzMqcis0MDk1Km8rMTU3NCpvKnIpKSkpLG50KHRoaXMubG9uZzArTSooMS1jLzYqKDErMipyK2UtYy8yMCooNSsyOCpyKzI0Km8rOCplKnIrNiplLWMvNDIqKDYxKzY2MipyKzEzMjAqbys3MjAqbypyKSkpKS9hKSk6KHU9eipldCh4KSwwKSk6KHA9LjUqKChtPU1hdGguZXhwKF8vdGhpcy5rMCkpLTEvbSksZD10aGlzLmxhdDAreC90aGlzLmswLHk9TWF0aC5jb3MoZCksbD1NYXRoLnNxcnQoKDEtTWF0aC5wb3coeSwyKSkvKDErTWF0aC5wb3cocCwyKSkpLHU9TWF0aC5hc2luKGwpLHg8MCYmKHU9LXUpLDA9PXAmJjA9PT15PzA6bnQoTWF0aC5hdGFuMihwLHkpK3RoaXMubG9uZzApKSx0Lng9Zix0Lnk9dSx0fSxuYW1lczpbIlRyYW5zdmVyc2VfTWVyY2F0b3IiLCJUcmFuc3ZlcnNlIE1lcmNhdG9yIiwidG1lcmMiXX0saXM9e2luaXQ6ZnVuY3Rpb24oKXtpZih2b2lkIDA9PT10aGlzLmVzfHx0aGlzLmVzPD0wKXRocm93IG5ldyBFcnJvcigiaW5jb3JyZWN0IGVsbGlwdGljYWwgdXNhZ2UiKTt0aGlzLngwPXZvaWQgMCE9PXRoaXMueDA/dGhpcy54MDowLHRoaXMueTA9dm9pZCAwIT09dGhpcy55MD90aGlzLnkwOjAsdGhpcy5sb25nMD12b2lkIDAhPT10aGlzLmxvbmcwP3RoaXMubG9uZzA6MCx0aGlzLmxhdDA9dm9pZCAwIT09dGhpcy5sYXQwP3RoaXMubGF0MDowLHRoaXMuY2diPVtdLHRoaXMuY2JnPVtdLHRoaXMudXRnPVtdLHRoaXMuZ3R1PVtdO3ZhciB0PXRoaXMuZXMvKDErTWF0aC5zcXJ0KDEtdGhpcy5lcykpLHM9dC8oMi10KSxpPXM7dGhpcy5jZ2JbMF09cyooMitzKigtMi8zK3MqKHMqKDExNi80NStzKigyNi80NSstMjg1NC82NzUqcykpLTIpKSksdGhpcy5jYmdbMF09cyoocyooMi8zK3MqKDQvMytzKigtODIvNDUrcyooMzIvNDUrNDY0Mi80NzI1KnMpKSkpLTIpLGkqPXMsdGhpcy5jZ2JbMV09aSooNy8zK3MqKHMqKC0yMjcvNDUrcyooMjcwNC8zMTUrMjMyMy85NDUqcykpLTEuNikpLHRoaXMuY2JnWzFdPWkqKDUvMytzKigtMTYvMTUrcyooLTEzLzkrcyooOTA0LzMxNSstMTUyMi85NDUqcykpKSksaSo9cyx0aGlzLmNnYlsyXT1pKig1Ni8xNStzKigtMTM2LzM1K3MqKC0xMjYyLzEwNSs3MzgxNC8yODM1KnMpKSksdGhpcy5jYmdbMl09aSooLTI2LzE1K3MqKDM0LzIxK3MqKDEuNistMTI2ODYvMjgzNSpzKSkpLGkqPXMsdGhpcy5jZ2JbM109aSooNDI3OS82MzArcyooLTMzMi8zNSstMzk5NTcyLzE0MTc1KnMpKSx0aGlzLmNiZ1szXT1pKigxMjM3LzYzMCtzKigtMjQ4MzIvMTQxNzUqcy0yLjQpKSxpKj1zLHRoaXMuY2diWzRdPWkqKDQxNzQvMzE1Ky0xNDQ4MzgvNjIzNypzKSx0aGlzLmNiZ1s0XT1pKigtNzM0LzMxNSsxMDk1OTgvMzExODUqcyksaSo9cyx0aGlzLmNnYls1XT1pKig2MDE2NzYvMjIyNzUpLHRoaXMuY2JnWzVdPWkqKDQ0NDMzNy8xNTU5MjUpLGk9TWF0aC5wb3cocywyKSx0aGlzLlFuPXRoaXMuazAvKDErcykqKDEraSooLjI1K2kqKDEvNjQraS8yNTYpKSksdGhpcy51dGdbMF09cyoocyooMi8zK3MqKC0zNy85NitzKigxLzM2MCtzKig4MS81MTIrLTk2MTk5LzYwNDgwMCpzKSkpKS0uNSksdGhpcy5ndHVbMF09cyooLjUrcyooLTIvMytzKig1LzE2K3MqKDQxLzE4MCtzKigtMTI3LzI4OCs3ODkxLzM3ODAwKnMpKSkpKSx0aGlzLnV0Z1sxXT1pKigtMS80OCtzKigtMS8xNStzKig0MzcvMTQ0MCtzKigtNDYvMTA1KzExMTg3MTEvMzg3MDcyMCpzKSkpKSx0aGlzLmd0dVsxXT1pKigxMy80OCtzKihzKig1NTcvMTQ0MCtzKigyODEvNjMwKy0xOTgzNDMzLzE5MzUzNjAqcykpLS42KSksaSo9cyx0aGlzLnV0Z1syXT1pKigtMTcvNDgwK3MqKDM3Lzg0MCtzKigyMDkvNDQ4MCstNTU2OS85MDcyMCpzKSkpLHRoaXMuZ3R1WzJdPWkqKDYxLzI0MCtzKigtMTAzLzE0MCtzKigxNTA2MS8yNjg4MCsxNjc2MDMvMTgxNDQwKnMpKSksaSo9cyx0aGlzLnV0Z1szXT1pKigtNDM5Ny8xNjEyODArcyooMTEvNTA0KzgzMDI1MS83MjU3NjAwKnMpKSx0aGlzLmd0dVszXT1pKig0OTU2MS8xNjEyODArcyooLTE3OS8xNjgrNjYwMTY2MS83MjU3NjAwKnMpKSxpKj1zLHRoaXMudXRnWzRdPWkqKC00NTgzLzE2MTI4MCsxMDg4NDcvMzk5MTY4MCpzKSx0aGlzLmd0dVs0XT1pKigzNDcyOS84MDY0MCstMzQxODg4OS8xOTk1ODQwKnMpLGkqPXMsdGhpcy51dGdbNV09LS4wMzIzMzA4MzA5NDA4NTY5OCppLHRoaXMuZ3R1WzVdPS42NjUwNjc1MzEwODk2NjY1Kmk7dmFyIGE9VHQodGhpcy5jYmcsdGhpcy5sYXQwKTt0aGlzLlpiPS10aGlzLlFuKihhK2Z1bmN0aW9uKHQscyl7Zm9yKHZhciBpLGE9MipNYXRoLmNvcyhzKSxoPXQubGVuZ3RoLTEsZT10W2hdLG49MDswPD0tLWg7KWk9YSplLW4rdFtoXSxuPWUsZT1pO3JldHVybiBNYXRoLnNpbihzKSppfSh0aGlzLmd0dSwyKmEpKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcz1udCh0LngtdGhpcy5sb25nMCksaT10LnksaT1UdCh0aGlzLmNiZyxpKSxhPU1hdGguc2luKGkpLGg9TWF0aC5jb3MoaSksZT1NYXRoLnNpbihzKSxuPU1hdGguY29zKHMpO2k9TWF0aC5hdGFuMihhLG4qaCkscz1NYXRoLmF0YW4yKGUqaCxSdChhLGgqbikpLHM9THQoTWF0aC50YW4ocykpO3ZhciByLG8sbD1EdCh0aGlzLmd0dSwyKmksMipzKTtyZXR1cm4gaSs9bFswXSxzKz1sWzFdLG89TWF0aC5hYnMocyk8PTIuNjIzMzk1MTYyNzc4PyhyPXRoaXMuYSoodGhpcy5RbipzKSt0aGlzLngwLHRoaXMuYSoodGhpcy5RbippK3RoaXMuWmIpK3RoaXMueTApOnI9MS8wLHQueD1yLHQueT1vLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbz0odC54LXRoaXMueDApKigxL3RoaXMuYSksbD0odC55LXRoaXMueTApKigxL3RoaXMuYSk7cmV0dXJuIGw9KGwtdGhpcy5aYikvdGhpcy5RbixvLz10aGlzLlFuLHI9TWF0aC5hYnMobyk8PTIuNjIzMzk1MTYyNzc4PyhsKz0ocz1EdCh0aGlzLnV0ZywyKmwsMipvKSlbMF0sbys9c1sxXSxvPU1hdGguYXRhbih6dChvKSksaT1NYXRoLnNpbihsKSxhPU1hdGguY29zKGwpLGg9TWF0aC5zaW4obyksZT1NYXRoLmNvcyhvKSxsPU1hdGguYXRhbjIoaSplLFJ0KGgsZSphKSksbz1NYXRoLmF0YW4yKGgsZSphKSxuPW50KG8rdGhpcy5sb25nMCksVHQodGhpcy5jZ2IsbCkpOm49MS8wLHQueD1uLHQueT1yLHR9LG5hbWVzOlsiRXh0ZW5kZWRfVHJhbnN2ZXJzZV9NZXJjYXRvciIsIkV4dGVuZGVkIFRyYW5zdmVyc2UgTWVyY2F0b3IiLCJldG1lcmMiXX0sYXM9e2luaXQ6ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LHMpe2lmKHZvaWQgMD09PXQpe2lmKCh0PU1hdGguZmxvb3IoMzAqKG50KHMpK01hdGguUEkpL01hdGguUEkpKzEpPDApcmV0dXJuIDA7aWYoNjA8dClyZXR1cm4gNjB9cmV0dXJuIHR9KHRoaXMuem9uZSx0aGlzLmxvbmcwKTtpZih2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigidW5rbm93biB1dG0gem9uZSIpO3RoaXMubGF0MD0wLHRoaXMubG9uZzA9KDYqTWF0aC5hYnModCktMTgzKSpOLHRoaXMueDA9NWU1LHRoaXMueTA9dGhpcy51dG1Tb3V0aD8xZTc6MCx0aGlzLmswPS45OTk2LGlzLmluaXQuYXBwbHkodGhpcyksdGhpcy5mb3J3YXJkPWlzLmZvcndhcmQsdGhpcy5pbnZlcnNlPWlzLmludmVyc2V9LG5hbWVzOlsiVW5pdmVyc2FsIFRyYW5zdmVyc2UgTWVyY2F0b3IgU3lzdGVtIiwidXRtIl0sZGVwZW5kc09uOiJldG1lcmMifSxocz17aW5pdDpmdW5jdGlvbigpe3ZhciB0PU1hdGguc2luKHRoaXMubGF0MCkscz1NYXRoLmNvcyh0aGlzLmxhdDApO3MqPXMsdGhpcy5yYz1NYXRoLnNxcnQoMS10aGlzLmVzKS8oMS10aGlzLmVzKnQqdCksdGhpcy5DPU1hdGguc3FydCgxK3RoaXMuZXMqcypzLygxLXRoaXMuZXMpKSx0aGlzLnBoaWMwPU1hdGguYXNpbih0L3RoaXMuQyksdGhpcy5yYXRleHA9LjUqdGhpcy5DKnRoaXMuZSx0aGlzLks9TWF0aC50YW4oLjUqdGhpcy5waGljMCtVKS8oTWF0aC5wb3coTWF0aC50YW4oLjUqdGhpcy5sYXQwK1UpLHRoaXMuQykqQnQodGhpcy5lKnQsdGhpcy5yYXRleHApKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcz10LngsaT10Lnk7cmV0dXJuIHQueT0yKk1hdGguYXRhbih0aGlzLksqTWF0aC5wb3coTWF0aC50YW4oLjUqaStVKSx0aGlzLkMpKkJ0KHRoaXMuZSpNYXRoLnNpbihpKSx0aGlzLnJhdGV4cCkpLXosdC54PXRoaXMuQypzLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBzPXQueC90aGlzLkMsaT10LnksYT1NYXRoLnBvdyhNYXRoLnRhbiguNSppK1UpL3RoaXMuSywxL3RoaXMuQyksaD0yMDswPGgmJihpPTIqTWF0aC5hdGFuKGEqQnQodGhpcy5lKk1hdGguc2luKHQueSksLS41KnRoaXMuZSkpLXosIShNYXRoLmFicyhpLXQueSk8MWUtMTQpKTstLWgpdC55PWk7cmV0dXJuIGg/KHQueD1zLHQueT1pLHQpOm51bGx9LG5hbWVzOlsiZ2F1c3MiXX0sZXM9e2luaXQ6ZnVuY3Rpb24oKXtocy5pbml0LmFwcGx5KHRoaXMpLHRoaXMucmMmJih0aGlzLnNpbmMwPU1hdGguc2luKHRoaXMucGhpYzApLHRoaXMuY29zYzA9TWF0aC5jb3ModGhpcy5waGljMCksdGhpcy5SMj0yKnRoaXMucmMsdGhpcy50aXRsZXx8KHRoaXMudGl0bGU9Ik9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSIpKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaDtyZXR1cm4gdC54PW50KHQueC10aGlzLmxvbmcwKSxocy5mb3J3YXJkLmFwcGx5KHRoaXMsW3RdKSxzPU1hdGguc2luKHQueSksaT1NYXRoLmNvcyh0LnkpLGE9TWF0aC5jb3ModC54KSxoPXRoaXMuazAqdGhpcy5SMi8oMSt0aGlzLnNpbmMwKnMrdGhpcy5jb3NjMCppKmEpLHQueD1oKmkqTWF0aC5zaW4odC54KSx0Lnk9aCoodGhpcy5jb3NjMCpzLXRoaXMuc2luYzAqaSphKSx0Lng9dGhpcy5hKnQueCt0aGlzLngwLHQueT10aGlzLmEqdC55K3RoaXMueTAsdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlLG47cmV0dXJuIHQueD0odC54LXRoaXMueDApL3RoaXMuYSx0Lnk9KHQueS10aGlzLnkwKS90aGlzLmEsdC54Lz10aGlzLmswLHQueS89dGhpcy5rMCxuPShzPU1hdGguc3FydCh0LngqdC54K3QueSp0LnkpKT8oaT0yKk1hdGguYXRhbjIocyx0aGlzLlIyKSxhPU1hdGguc2luKGkpLGg9TWF0aC5jb3MoaSksZT1NYXRoLmFzaW4oaCp0aGlzLnNpbmMwK3QueSphKnRoaXMuY29zYzAvcyksTWF0aC5hdGFuMih0LngqYSxzKnRoaXMuY29zYzAqaC10LnkqdGhpcy5zaW5jMCphKSk6KGU9dGhpcy5waGljMCwwKSx0Lng9bix0Lnk9ZSxocy5pbnZlcnNlLmFwcGx5KHRoaXMsW3RdKSx0Lng9bnQodC54K3RoaXMubG9uZzApLHR9LG5hbWVzOlsiU3RlcmVvZ3JhcGhpY19Ob3J0aF9Qb2xlIiwiT2JsaXF1ZV9TdGVyZW9ncmFwaGljIiwiUG9sYXJfU3RlcmVvZ3JhcGhpYyIsInN0ZXJlYSIsIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSIsIkRvdWJsZV9TdGVyZW9ncmFwaGljIl19LG5zPXtpbml0OmZ1bmN0aW9uKCl7dGhpcy5jb3NsYXQwPU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5zaW5sYXQwPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zcGhlcmU/MT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PUQmJih0aGlzLmswPS41KigxK2V0KHRoaXMubGF0MCkqTWF0aC5zaW4odGhpcy5sYXRfdHMpKSk6KE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PUQmJigwPHRoaXMubGF0MD90aGlzLmNvbj0xOnRoaXMuY29uPS0xKSx0aGlzLmNvbnM9TWF0aC5zcXJ0KE1hdGgucG93KDErdGhpcy5lLDErdGhpcy5lKSpNYXRoLnBvdygxLXRoaXMuZSwxLXRoaXMuZSkpLDE9PT10aGlzLmswJiYhaXNOYU4odGhpcy5sYXRfdHMpJiZNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1EJiYodGhpcy5rMD0uNSp0aGlzLmNvbnMqaHQodGhpcy5lLE1hdGguc2luKHRoaXMubGF0X3RzKSxNYXRoLmNvcyh0aGlzLmxhdF90cykpL3J0KHRoaXMuZSx0aGlzLmNvbip0aGlzLmxhdF90cyx0aGlzLmNvbipNYXRoLnNpbih0aGlzLmxhdF90cykpKSx0aGlzLm1zMT1odCh0aGlzLmUsdGhpcy5zaW5sYXQwLHRoaXMuY29zbGF0MCksdGhpcy5YMD0yKk1hdGguYXRhbih0aGlzLnNzZm5fKHRoaXMubGF0MCx0aGlzLnNpbmxhdDAsdGhpcy5lKSkteix0aGlzLmNvc1gwPU1hdGguY29zKHRoaXMuWDApLHRoaXMuc2luWDA9TWF0aC5zaW4odGhpcy5YMCkpfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyPXQueCxvPXQueSxsPU1hdGguc2luKG8pLE09TWF0aC5jb3MobyksYz1udChyLXRoaXMubG9uZzApO3JldHVybiBNYXRoLmFicyhNYXRoLmFicyhyLXRoaXMubG9uZzApLU1hdGguUEkpPD1EJiZNYXRoLmFicyhvK3RoaXMubGF0MCk8PUQ/KHQueD1OYU4sdC55PU5hTik6dGhpcy5zcGhlcmU/KHM9Mip0aGlzLmswLygxK3RoaXMuc2lubGF0MCpsK3RoaXMuY29zbGF0MCpNKk1hdGguY29zKGMpKSx0Lng9dGhpcy5hKnMqTSpNYXRoLnNpbihjKSt0aGlzLngwLHQueT10aGlzLmEqcyoodGhpcy5jb3NsYXQwKmwtdGhpcy5zaW5sYXQwKk0qTWF0aC5jb3MoYykpK3RoaXMueTApOihpPTIqTWF0aC5hdGFuKHRoaXMuc3Nmbl8obyxsLHRoaXMuZSkpLXosaD1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PUQ/KGU9cnQodGhpcy5lLG8qdGhpcy5jb24sdGhpcy5jb24qbCksbj0yKnRoaXMuYSp0aGlzLmswKmUvdGhpcy5jb25zLHQueD10aGlzLngwK24qTWF0aC5zaW4oci10aGlzLmxvbmcwKSx0Lnk9dGhpcy55MC10aGlzLmNvbipuKk1hdGguY29zKHItdGhpcy5sb25nMCkpOihNYXRoLmFicyh0aGlzLnNpbmxhdDApPEQ/KHM9Mip0aGlzLmEqdGhpcy5rMC8oMStoKk1hdGguY29zKGMpKSx0Lnk9cyphKToocz0yKnRoaXMuYSp0aGlzLmswKnRoaXMubXMxLyh0aGlzLmNvc1gwKigxK3RoaXMuc2luWDAqYSt0aGlzLmNvc1gwKmgqTWF0aC5jb3MoYykpKSx0Lnk9cyoodGhpcy5jb3NYMCphLXRoaXMuc2luWDAqaCpNYXRoLmNvcyhjKSkrdGhpcy55MCksdC54PXMqaCpNYXRoLnNpbihjKSt0aGlzLngwKSksdH0saW52ZXJzZTpmdW5jdGlvbih0KXt0LngtPXRoaXMueDAsdC55LT10aGlzLnkwO3ZhciBzLGksYSxoPU1hdGguc3FydCh0LngqdC54K3QueSp0LnkpO2lmKHRoaXMuc3BoZXJlKXt2YXIgZT0yKk1hdGguYXRhbihoLygyKnRoaXMuYSp0aGlzLmswKSksbj10aGlzLmxvbmcwLHI9dGhpcy5sYXQwO3JldHVybiBoPD1EfHwocj1NYXRoLmFzaW4oTWF0aC5jb3MoZSkqdGhpcy5zaW5sYXQwK3QueSpNYXRoLnNpbihlKSp0aGlzLmNvc2xhdDAvaCksbj1udChNYXRoLmFicyh0aGlzLmNvc2xhdDApPEQ/MDx0aGlzLmxhdDA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKHQueCwtMSp0LnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMih0LngsdC55KTp0aGlzLmxvbmcwK01hdGguYXRhbjIodC54Kk1hdGguc2luKGUpLGgqdGhpcy5jb3NsYXQwKk1hdGguY29zKGUpLXQueSp0aGlzLnNpbmxhdDAqTWF0aC5zaW4oZSkpKSksdC54PW4sdC55PXIsdH1pZihNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1EKXtpZihoPD1EKXJldHVybiByPXRoaXMubGF0MCxuPXRoaXMubG9uZzAsdC54PW4sdC55PXIsdDt0LngqPXRoaXMuY29uLHQueSo9dGhpcy5jb24scz1oKnRoaXMuY29ucy8oMip0aGlzLmEqdGhpcy5rMCkscj10aGlzLmNvbipvdCh0aGlzLmUscyksbj10aGlzLmNvbipudCh0aGlzLmNvbip0aGlzLmxvbmcwK01hdGguYXRhbjIodC54LC0xKnQueSkpfWVsc2UgaT0yKk1hdGguYXRhbihoKnRoaXMuY29zWDAvKDIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEpKSxuPXRoaXMubG9uZzAsaDw9RD9hPXRoaXMuWDA6KGE9TWF0aC5hc2luKE1hdGguY29zKGkpKnRoaXMuc2luWDArdC55Kk1hdGguc2luKGkpKnRoaXMuY29zWDAvaCksbj1udCh0aGlzLmxvbmcwK01hdGguYXRhbjIodC54Kk1hdGguc2luKGkpLGgqdGhpcy5jb3NYMCpNYXRoLmNvcyhpKS10LnkqdGhpcy5zaW5YMCpNYXRoLnNpbihpKSkpKSxyPS0xKm90KHRoaXMuZSxNYXRoLnRhbiguNSooeithKSkpO3JldHVybiB0Lng9bix0Lnk9cix0fSxuYW1lczpbInN0ZXJlIiwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiwiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKSJdLHNzZm5fOmZ1bmN0aW9uKHQscyxpKXtyZXR1cm4gcyo9aSxNYXRoLnRhbiguNSooeit0KSkqTWF0aC5wb3coKDEtcykvKDErcyksLjUqaSl9fSxycz17aW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGF0MDt0aGlzLmxhbWJkYTA9dGhpcy5sb25nMDt2YXIgcz1NYXRoLnNpbih0KSxpPXRoaXMuYSxhPTEvdGhpcy5yZixoPTIqYS1NYXRoLnBvdyhhLDIpLGU9dGhpcy5lPU1hdGguc3FydChoKTt0aGlzLlI9dGhpcy5rMCppKk1hdGguc3FydCgxLWgpLygxLWgqTWF0aC5wb3cocywyKSksdGhpcy5hbHBoYT1NYXRoLnNxcnQoMStoLygxLWgpKk1hdGgucG93KE1hdGguY29zKHQpLDQpKSx0aGlzLmIwPU1hdGguYXNpbihzL3RoaXMuYWxwaGEpO3ZhciBuPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0aGlzLmIwLzIpKSxyPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0LzIpKSxvPU1hdGgubG9nKCgxK2UqcykvKDEtZSpzKSk7dGhpcy5LPW4tdGhpcy5hbHBoYSpyK3RoaXMuYWxwaGEqZS8yKm99LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHM9TWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80LXQueS8yKSksaT10aGlzLmUvMipNYXRoLmxvZygoMSt0aGlzLmUqTWF0aC5zaW4odC55KSkvKDEtdGhpcy5lKk1hdGguc2luKHQueSkpKSxhPS10aGlzLmFscGhhKihzK2kpK3RoaXMuSyxoPTIqKE1hdGguYXRhbihNYXRoLmV4cChhKSktTWF0aC5QSS80KSxlPXRoaXMuYWxwaGEqKHQueC10aGlzLmxhbWJkYTApLG49TWF0aC5hdGFuKE1hdGguc2luKGUpLyhNYXRoLnNpbih0aGlzLmIwKSpNYXRoLnRhbihoKStNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLmNvcyhlKSkpLHI9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYjApKk1hdGguc2luKGgpLU1hdGguc2luKHRoaXMuYjApKk1hdGguY29zKGgpKk1hdGguY29zKGUpKTtyZXR1cm4gdC55PXRoaXMuUi8yKk1hdGgubG9nKCgxK01hdGguc2luKHIpKS8oMS1NYXRoLnNpbihyKSkpK3RoaXMueTAsdC54PXRoaXMuUipuK3RoaXMueDAsdH0saW52ZXJzZTpmdW5jdGlvbih0KXtmb3IodmFyIHM9dC54LXRoaXMueDAsaT10LnktdGhpcy55MCxhPXMvdGhpcy5SLGg9MiooTWF0aC5hdGFuKE1hdGguZXhwKGkvdGhpcy5SKSktTWF0aC5QSS80KSxlPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLnNpbihoKStNYXRoLnNpbih0aGlzLmIwKSpNYXRoLmNvcyhoKSpNYXRoLmNvcyhhKSksbj1NYXRoLmF0YW4oTWF0aC5zaW4oYSkvKE1hdGguY29zKHRoaXMuYjApKk1hdGguY29zKGEpLU1hdGguc2luKHRoaXMuYjApKk1hdGgudGFuKGgpKSkscj10aGlzLmxhbWJkYTArbi90aGlzLmFscGhhLG89MCxsPWUsTT0tMWUzLGM9MDsxZS03PE1hdGguYWJzKGwtTSk7KXtpZigyMDwrK2MpcmV0dXJuO289MS90aGlzLmFscGhhKihNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrZS8yKSktdGhpcy5LKSt0aGlzLmUqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K01hdGguYXNpbih0aGlzLmUqTWF0aC5zaW4obCkpLzIpKSxNPWwsbD0yKk1hdGguYXRhbihNYXRoLmV4cChvKSktTWF0aC5QSS8yfXJldHVybiB0Lng9cix0Lnk9bCx0fSxuYW1lczpbInNvbWVyYyJdfSxvcz17aW5pdDpmdW5jdGlvbigpe3RoaXMubm9fb2ZmPXRoaXMubm9fb2ZmfHwhMSx0aGlzLm5vX3JvdD10aGlzLm5vX3JvdHx8ITEsaXNOYU4odGhpcy5rMCkmJih0aGlzLmswPTEpO3ZhciB0PU1hdGguc2luKHRoaXMubGF0MCkscz1NYXRoLmNvcyh0aGlzLmxhdDApLGk9dGhpcy5lKnQ7dGhpcy5ibD1NYXRoLnNxcnQoMSt0aGlzLmVzLygxLXRoaXMuZXMpKk1hdGgucG93KHMsNCkpLHRoaXMuYWw9dGhpcy5hKnRoaXMuYmwqdGhpcy5rMCpNYXRoLnNxcnQoMS10aGlzLmVzKS8oMS1pKmkpO3ZhciBhLGgsZSxuLHIsbyxsLE0sYyx1LGY9cnQodGhpcy5lLHRoaXMubGF0MCx0KSxtPXRoaXMuYmwvcypNYXRoLnNxcnQoKDEtdGhpcy5lcykvKDEtaSppKSk7bSptPDEmJihtPTEpLGlzTmFOKHRoaXMubG9uZ2MpPyhoPXJ0KHRoaXMuZSx0aGlzLmxhdDEsTWF0aC5zaW4odGhpcy5sYXQxKSksZT1ydCh0aGlzLmUsdGhpcy5sYXQyLE1hdGguc2luKHRoaXMubGF0MikpLDA8PXRoaXMubGF0MD90aGlzLmVsPShtK01hdGguc3FydChtKm0tMSkpKk1hdGgucG93KGYsdGhpcy5ibCk6dGhpcy5lbD0obS1NYXRoLnNxcnQobSptLTEpKSpNYXRoLnBvdyhmLHRoaXMuYmwpLG49TWF0aC5wb3coaCx0aGlzLmJsKSxyPU1hdGgucG93KGUsdGhpcy5ibCksbz0uNSooKGE9dGhpcy5lbC9uKS0xL2EpLGw9KHRoaXMuZWwqdGhpcy5lbC1yKm4pLyh0aGlzLmVsKnRoaXMuZWwrcipuKSxNPShyLW4pLyhyK24pLGM9bnQodGhpcy5sb25nMS10aGlzLmxvbmcyKSx0aGlzLmxvbmcwPS41Kih0aGlzLmxvbmcxK3RoaXMubG9uZzIpLU1hdGguYXRhbihsKk1hdGgudGFuKC41KnRoaXMuYmwqYykvTSkvdGhpcy5ibCx0aGlzLmxvbmcwPW50KHRoaXMubG9uZzApLHU9bnQodGhpcy5sb25nMS10aGlzLmxvbmcwKSx0aGlzLmdhbW1hMD1NYXRoLmF0YW4oTWF0aC5zaW4odGhpcy5ibCp1KS9vKSx0aGlzLmFscGhhPU1hdGguYXNpbihtKk1hdGguc2luKHRoaXMuZ2FtbWEwKSkpOihhPTA8PXRoaXMubGF0MD9tK01hdGguc3FydChtKm0tMSk6bS1NYXRoLnNxcnQobSptLTEpLHRoaXMuZWw9YSpNYXRoLnBvdyhmLHRoaXMuYmwpLG89LjUqKGEtMS9hKSx0aGlzLmdhbW1hMD1NYXRoLmFzaW4oTWF0aC5zaW4odGhpcy5hbHBoYSkvbSksdGhpcy5sb25nMD10aGlzLmxvbmdjLU1hdGguYXNpbihvKk1hdGgudGFuKHRoaXMuZ2FtbWEwKSkvdGhpcy5ibCksdGhpcy5ub19vZmY/dGhpcy51Yz0wOjA8PXRoaXMubGF0MD90aGlzLnVjPXRoaXMuYWwvdGhpcy5ibCpNYXRoLmF0YW4yKE1hdGguc3FydChtKm0tMSksTWF0aC5jb3ModGhpcy5hbHBoYSkpOnRoaXMudWM9LTEqdGhpcy5hbC90aGlzLmJsKk1hdGguYXRhbjIoTWF0aC5zcXJ0KG0qbS0xKSxNYXRoLmNvcyh0aGlzLmFscGhhKSl9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE09dC54LGM9dC55LHU9bnQoTS10aGlzLmxvbmcwKTtyZXR1cm4gbD1NYXRoLmFicyhNYXRoLmFicyhjKS16KTw9RD8ocz0wPGM/LTE6MSxvPXRoaXMuYWwvdGhpcy5ibCpNYXRoLmxvZyhNYXRoLnRhbihVK3MqdGhpcy5nYW1tYTAqLjUpKSwtMSpzKnoqdGhpcy5hbC90aGlzLmJsKTooaT1ydCh0aGlzLmUsYyxNYXRoLnNpbihjKSksaD0uNSooKGE9dGhpcy5lbC9NYXRoLnBvdyhpLHRoaXMuYmwpKS0xL2EpLGU9LjUqKGErMS9hKSxuPU1hdGguc2luKHRoaXMuYmwqdSkscj0oaCpNYXRoLnNpbih0aGlzLmdhbW1hMCktbipNYXRoLmNvcyh0aGlzLmdhbW1hMCkpL2Usbz1NYXRoLmFicyhNYXRoLmFicyhyKS0xKTw9RD9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6LjUqdGhpcy5hbCpNYXRoLmxvZygoMS1yKS8oMStyKSkvdGhpcy5ibCxNYXRoLmFicyhNYXRoLmNvcyh0aGlzLmJsKnUpKTw9RD90aGlzLmFsKnRoaXMuYmwqdTp0aGlzLmFsKk1hdGguYXRhbjIoaCpNYXRoLmNvcyh0aGlzLmdhbW1hMCkrbipNYXRoLnNpbih0aGlzLmdhbW1hMCksTWF0aC5jb3ModGhpcy5ibCp1KSkvdGhpcy5ibCksdGhpcy5ub19yb3Q/KHQueD10aGlzLngwK2wsdC55PXRoaXMueTArbyk6KGwtPXRoaXMudWMsdC54PXRoaXMueDArbypNYXRoLmNvcyh0aGlzLmFscGhhKStsKk1hdGguc2luKHRoaXMuYWxwaGEpLHQueT10aGlzLnkwK2wqTWF0aC5jb3ModGhpcy5hbHBoYSktbypNYXRoLnNpbih0aGlzLmFscGhhKSksdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpO3RoaXMubm9fcm90PyhpPXQueS10aGlzLnkwLHM9dC54LXRoaXMueDApOihpPSh0LngtdGhpcy54MCkqTWF0aC5jb3ModGhpcy5hbHBoYSktKHQueS10aGlzLnkwKSpNYXRoLnNpbih0aGlzLmFscGhhKSxzPSh0LnktdGhpcy55MCkqTWF0aC5jb3ModGhpcy5hbHBoYSkrKHQueC10aGlzLngwKSpNYXRoLnNpbih0aGlzLmFscGhhKSxzKz10aGlzLnVjKTt2YXIgYT1NYXRoLmV4cCgtMSp0aGlzLmJsKmkvdGhpcy5hbCksaD0uNSooYS0xL2EpLGU9LjUqKGErMS9hKSxuPU1hdGguc2luKHRoaXMuYmwqcy90aGlzLmFsKSxyPShuKk1hdGguY29zKHRoaXMuZ2FtbWEwKStoKk1hdGguc2luKHRoaXMuZ2FtbWEwKSkvZSxvPU1hdGgucG93KHRoaXMuZWwvTWF0aC5zcXJ0KCgxK3IpLygxLXIpKSwxL3RoaXMuYmwpO3JldHVybiBNYXRoLmFicyhyLTEpPEQ/KHQueD10aGlzLmxvbmcwLHQueT16KTpNYXRoLmFicygxK3IpPEQ/KHQueD10aGlzLmxvbmcwLHQueT0tMSp6KToodC55PW90KHRoaXMuZSxvKSx0Lng9bnQodGhpcy5sb25nMC1NYXRoLmF0YW4yKGgqTWF0aC5jb3ModGhpcy5nYW1tYTApLW4qTWF0aC5zaW4odGhpcy5nYW1tYTApLE1hdGguY29zKHRoaXMuYmwqcy90aGlzLmFsKSkvdGhpcy5ibCkpLHR9LG5hbWVzOlsiSG90aW5lX09ibGlxdWVfTWVyY2F0b3IiLCJIb3RpbmUgT2JsaXF1ZSBNZXJjYXRvciIsIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yX0F6aW11dGhfTmF0dXJhbF9PcmlnaW4iLCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX0NlbnRlciIsIm9tZXJjIl19LGxzPXtpbml0OmZ1bmN0aW9uKCl7dmFyIHQscyxpLGEsaCxlLG4scixvLGw7dGhpcy5sYXQyfHwodGhpcy5sYXQyPXRoaXMubGF0MSksdGhpcy5rMHx8KHRoaXMuazA9MSksdGhpcy54MD10aGlzLngwfHwwLHRoaXMueTA9dGhpcy55MHx8MCxNYXRoLmFicyh0aGlzLmxhdDErdGhpcy5sYXQyKTxEfHwodD10aGlzLmIvdGhpcy5hLHRoaXMuZT1NYXRoLnNxcnQoMS10KnQpLHM9TWF0aC5zaW4odGhpcy5sYXQxKSxpPU1hdGguY29zKHRoaXMubGF0MSksYT1odCh0aGlzLmUscyxpKSxoPXJ0KHRoaXMuZSx0aGlzLmxhdDEscyksZT1NYXRoLnNpbih0aGlzLmxhdDIpLG49TWF0aC5jb3ModGhpcy5sYXQyKSxyPWh0KHRoaXMuZSxlLG4pLG89cnQodGhpcy5lLHRoaXMubGF0MixlKSxsPXJ0KHRoaXMuZSx0aGlzLmxhdDAsTWF0aC5zaW4odGhpcy5sYXQwKSksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik+RD90aGlzLm5zPU1hdGgubG9nKGEvcikvTWF0aC5sb2coaC9vKTp0aGlzLm5zPXMsaXNOYU4odGhpcy5ucykmJih0aGlzLm5zPXMpLHRoaXMuZjA9YS8odGhpcy5ucypNYXRoLnBvdyhoLHRoaXMubnMpKSx0aGlzLnJoPXRoaXMuYSp0aGlzLmYwKk1hdGgucG93KGwsdGhpcy5ucyksdGhpcy50aXRsZXx8KHRoaXMudGl0bGU9IkxhbWJlcnQgQ29uZm9ybWFsIENvbmljIikpfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzPXQueCxpPXQueTtNYXRoLmFicygyKk1hdGguYWJzKGkpLU1hdGguUEkpPD1EJiYoaT1ldChpKSooei0yKkQpKTt2YXIgYSxoLGU9TWF0aC5hYnMoTWF0aC5hYnMoaSkteik7aWYoRDxlKWE9cnQodGhpcy5lLGksTWF0aC5zaW4oaSkpLGg9dGhpcy5hKnRoaXMuZjAqTWF0aC5wb3coYSx0aGlzLm5zKTtlbHNle2lmKChlPWkqdGhpcy5ucyk8PTApcmV0dXJuIG51bGw7aD0wfXZhciBuPXRoaXMubnMqbnQocy10aGlzLmxvbmcwKTtyZXR1cm4gdC54PXRoaXMuazAqKGgqTWF0aC5zaW4obikpK3RoaXMueDAsdC55PXRoaXMuazAqKHRoaXMucmgtaCpNYXRoLmNvcyhuKSkrdGhpcy55MCx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGU9KHQueC10aGlzLngwKS90aGlzLmswLG49dGhpcy5yaC0odC55LXRoaXMueTApL3RoaXMuazAscj0wPHRoaXMubnM/KHM9TWF0aC5zcXJ0KGUqZStuKm4pLDEpOihzPS1NYXRoLnNxcnQoZSplK24qbiksLTEpLG89MDtpZigwIT09cyYmKG89TWF0aC5hdGFuMihyKmUscipuKSksMCE9PXN8fDA8dGhpcy5ucyl7aWYocj0xL3RoaXMubnMsaT1NYXRoLnBvdyhzLyh0aGlzLmEqdGhpcy5mMCksciksLTk5OTk9PT0oYT1vdCh0aGlzLmUsaSkpKXJldHVybiBudWxsfWVsc2UgYT0tejtyZXR1cm4gaD1udChvL3RoaXMubnMrdGhpcy5sb25nMCksdC54PWgsdC55PWEsdH0sbmFtZXM6WyJMYW1iZXJ0IFRhbmdlbnRpYWwgQ29uZm9ybWFsIENvbmljIFByb2plY3Rpb24iLCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pYyIsIkxhbWJlcnRfQ29uZm9ybWFsX0NvbmljXzJTUCIsImxjYyJdfSxNcz17aW5pdDpmdW5jdGlvbigpe3RoaXMuYT02Mzc3Mzk3LjE1NSx0aGlzLmVzPS4wMDY2NzQzNzIyMzA2MTQsdGhpcy5lPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLmxhdDB8fCh0aGlzLmxhdDA9Ljg2MzkzNzk3OTczNzE5MyksdGhpcy5sb25nMHx8KHRoaXMubG9uZzA9LjQzMzQyMzQzMDkxMTkyNTEpLHRoaXMuazB8fCh0aGlzLmswPS45OTk5KSx0aGlzLnM0NT0uNzg1Mzk4MTYzMzk3NDQ4LHRoaXMuczkwPTIqdGhpcy5zNDUsdGhpcy5maTA9dGhpcy5sYXQwLHRoaXMuZTI9dGhpcy5lcyx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZTIpLHRoaXMuYWxmYT1NYXRoLnNxcnQoMSt0aGlzLmUyKk1hdGgucG93KE1hdGguY29zKHRoaXMuZmkwKSw0KS8oMS10aGlzLmUyKSksdGhpcy51cT0xLjA0MjE2ODU2MzgwNDc0LHRoaXMudTA9TWF0aC5hc2luKE1hdGguc2luKHRoaXMuZmkwKS90aGlzLmFsZmEpLHRoaXMuZz1NYXRoLnBvdygoMSt0aGlzLmUqTWF0aC5zaW4odGhpcy5maTApKS8oMS10aGlzLmUqTWF0aC5zaW4odGhpcy5maTApKSx0aGlzLmFsZmEqdGhpcy5lLzIpLHRoaXMuaz1NYXRoLnRhbih0aGlzLnUwLzIrdGhpcy5zNDUpL01hdGgucG93KE1hdGgudGFuKHRoaXMuZmkwLzIrdGhpcy5zNDUpLHRoaXMuYWxmYSkqdGhpcy5nLHRoaXMuazE9dGhpcy5rMCx0aGlzLm4wPXRoaXMuYSpNYXRoLnNxcnQoMS10aGlzLmUyKS8oMS10aGlzLmUyKk1hdGgucG93KE1hdGguc2luKHRoaXMuZmkwKSwyKSksdGhpcy5zMD0xLjM3MDA4MzQ2MjgxNTU1LHRoaXMubj1NYXRoLnNpbih0aGlzLnMwKSx0aGlzLnJvMD10aGlzLmsxKnRoaXMubjAvTWF0aC50YW4odGhpcy5zMCksdGhpcy5hZD10aGlzLnM5MC10aGlzLnVxfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzPXQueCxpPXQueSxhPW50KHMtdGhpcy5sb25nMCksaD1NYXRoLnBvdygoMSt0aGlzLmUqTWF0aC5zaW4oaSkpLygxLXRoaXMuZSpNYXRoLnNpbihpKSksdGhpcy5hbGZhKnRoaXMuZS8yKSxlPTIqKE1hdGguYXRhbih0aGlzLmsqTWF0aC5wb3coTWF0aC50YW4oaS8yK3RoaXMuczQ1KSx0aGlzLmFsZmEpL2gpLXRoaXMuczQ1KSxuPS1hKnRoaXMuYWxmYSxyPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSpNYXRoLnNpbihlKStNYXRoLnNpbih0aGlzLmFkKSpNYXRoLmNvcyhlKSpNYXRoLmNvcyhuKSksbz1NYXRoLmFzaW4oTWF0aC5jb3MoZSkqTWF0aC5zaW4obikvTWF0aC5jb3MocikpLGw9dGhpcy5uKm8sTT10aGlzLnJvMCpNYXRoLnBvdyhNYXRoLnRhbih0aGlzLnMwLzIrdGhpcy5zNDUpLHRoaXMubikvTWF0aC5wb3coTWF0aC50YW4oci8yK3RoaXMuczQ1KSx0aGlzLm4pO3JldHVybiB0Lnk9TSpNYXRoLmNvcyhsKSx0Lng9TSpNYXRoLnNpbihsKSx0aGlzLmN6ZWNofHwodC55Kj0tMSx0LngqPS0xKSx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyLG89dC54O3QueD10LnksdC55PW8sdGhpcy5jemVjaHx8KHQueSo9LTEsdC54Kj0tMSksZT1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSxoPU1hdGguYXRhbjIodC55LHQueCkvTWF0aC5zaW4odGhpcy5zMCksYT0yKihNYXRoLmF0YW4oTWF0aC5wb3codGhpcy5ybzAvZSwxL3RoaXMubikqTWF0aC50YW4odGhpcy5zMC8yK3RoaXMuczQ1KSktdGhpcy5zNDUpLHM9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpKk1hdGguc2luKGEpLU1hdGguc2luKHRoaXMuYWQpKk1hdGguY29zKGEpKk1hdGguY29zKGgpKSxpPU1hdGguYXNpbihNYXRoLmNvcyhhKSpNYXRoLnNpbihoKS9NYXRoLmNvcyhzKSksdC54PXRoaXMubG9uZzAtaS90aGlzLmFsZmEsbj1zO2Zvcih2YXIgbD1yPTA7dC55PTIqKE1hdGguYXRhbihNYXRoLnBvdyh0aGlzLmssLTEvdGhpcy5hbGZhKSpNYXRoLnBvdyhNYXRoLnRhbihzLzIrdGhpcy5zNDUpLDEvdGhpcy5hbGZhKSpNYXRoLnBvdygoMSt0aGlzLmUqTWF0aC5zaW4obikpLygxLXRoaXMuZSpNYXRoLnNpbihuKSksdGhpcy5lLzIpKS10aGlzLnM0NSksTWF0aC5hYnMobi10LnkpPDFlLTEwJiYocj0xKSxuPXQueSxsKz0xLDA9PT1yJiZsPDE1Oyk7cmV0dXJuIDE1PD1sP251bGw6dH0sbmFtZXM6WyJLcm92YWsiLCJrcm92YWsiXX0sY3M9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuZTA9RnQodGhpcy5lcyksdGhpcy5lMT1RdCh0aGlzLmVzKSx0aGlzLmUyPVd0KHRoaXMuZXMpLHRoaXMuZTM9WHQodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKlV0KHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKSl9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE09dC54LGM9dC55LE09bnQoTS10aGlzLmxvbmcwKTtyZXR1cm4gbD10aGlzLnNwaGVyZT8obz10aGlzLmEqTWF0aC5hc2luKE1hdGguY29zKGMpKk1hdGguc2luKE0pKSx0aGlzLmEqKE1hdGguYXRhbjIoTWF0aC50YW4oYyksTWF0aC5jb3MoTSkpLXRoaXMubGF0MCkpOihzPU1hdGguc2luKGMpLGk9TWF0aC5jb3MoYyksYT1IdCh0aGlzLmEsdGhpcy5lLHMpLGg9TWF0aC50YW4oYykqTWF0aC50YW4oYyksbz1hKihlPU0qTWF0aC5jb3MoYykpKigxLShuPWUqZSkqaCooMS82LSg4LWgrOCoocj10aGlzLmVzKmkqaS8oMS10aGlzLmVzKSkpKm4vMTIwKSksdGhpcy5hKlV0KHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsYyktdGhpcy5tbDArYSpzL2kqbiooLjUrKDUtaCs2KnIpKm4vMjQpKSx0Lng9byt0aGlzLngwLHQueT1sK3RoaXMueTAsdH0saW52ZXJzZTpmdW5jdGlvbih0KXt0LngtPXRoaXMueDAsdC55LT10aGlzLnkwO3ZhciBzPXQueC90aGlzLmEsaT10LnkvdGhpcy5hO2lmKHRoaXMuc3BoZXJlKXZhciBhPWkrdGhpcy5sYXQwLGg9TWF0aC5hc2luKE1hdGguc2luKGEpKk1hdGguY29zKHMpKSxlPU1hdGguYXRhbjIoTWF0aC50YW4ocyksTWF0aC5jb3MoYSkpO2Vsc2V7dmFyIG49dGhpcy5tbDAvdGhpcy5hK2kscj1LdChuLHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpO2lmKE1hdGguYWJzKE1hdGguYWJzKHIpLXopPD1EKXJldHVybiB0Lng9dGhpcy5sb25nMCx0Lnk9eixpPDAmJih0LnkqPS0xKSx0O3ZhciBvPUh0KHRoaXMuYSx0aGlzLmUsTWF0aC5zaW4ocikpLGw9bypvKm8vdGhpcy5hL3RoaXMuYSooMS10aGlzLmVzKSxNPU1hdGgucG93KE1hdGgudGFuKHIpLDIpLGM9cyp0aGlzLmEvbyx1PWMqYztoPXItbypNYXRoLnRhbihyKS9sKmMqYyooLjUtKDErMypNKSpjKmMvMjQpLGU9YyooMS11KihNLzMrKDErMypNKSpNKnUvMTUpKS9NYXRoLmNvcyhyKX1yZXR1cm4gdC54PW50KGUrdGhpcy5sb25nMCksdC55PUp0KGgpLHR9LG5hbWVzOlsiQ2Fzc2luaSIsIkNhc3NpbmlfU29sZG5lciIsImNhc3MiXX0sdXM9e2luaXQ6ZnVuY3Rpb24oKXt2YXIgdCxzLGksYSxoPU1hdGguYWJzKHRoaXMubGF0MCk7aWYoTWF0aC5hYnMoaC16KTxEP3RoaXMubW9kZT10aGlzLmxhdDA8MD90aGlzLlNfUE9MRTp0aGlzLk5fUE9MRTpNYXRoLmFicyhoKTxEP3RoaXMubW9kZT10aGlzLkVRVUlUOnRoaXMubW9kZT10aGlzLk9CTElRLDA8dGhpcy5lcylzd2l0Y2godGhpcy5xcD1WdCh0aGlzLmUsMSksdGhpcy5tbWY9LjUvKDEtdGhpcy5lcyksdGhpcy5hcGE9KHM9dGhpcy5lcywoYT1bXSlbMF09LjMzMzMzMzMzMzMzMzMzMzMqcyxpPXMqcyxhWzBdKz0uMTcyMjIyMjIyMjIyMjIyMjIqaSxhWzFdPS4wNjM4ODg4ODg4ODg4ODg4OCppLGkqPXMsYVswXSs9LjEwMjU3OTM2NTA3OTM2NTA4KmksYVsxXSs9LjA2NjQwMjExNjQwMjExNjQqaSxhWzJdPS4wMTY0MTUwMTI5NDIxOTE1NDMqaSxhKSx0aGlzLm1vZGUpe2Nhc2UgdGhpcy5OX1BPTEU6Y2FzZSB0aGlzLlNfUE9MRTp0aGlzLmRkPTE7YnJlYWs7Y2FzZSB0aGlzLkVRVUlUOnRoaXMucnE9TWF0aC5zcXJ0KC41KnRoaXMucXApLHRoaXMuZGQ9MS90aGlzLnJxLHRoaXMueG1mPTEsdGhpcy55bWY9LjUqdGhpcy5xcDticmVhaztjYXNlIHRoaXMuT0JMSVE6dGhpcy5ycT1NYXRoLnNxcnQoLjUqdGhpcy5xcCksdD1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuc2luYjE9VnQodGhpcy5lLHQpL3RoaXMucXAsdGhpcy5jb3NiMT1NYXRoLnNxcnQoMS10aGlzLnNpbmIxKnRoaXMuc2luYjEpLHRoaXMuZGQ9TWF0aC5jb3ModGhpcy5sYXQwKS8oTWF0aC5zcXJ0KDEtdGhpcy5lcyp0KnQpKnRoaXMucnEqdGhpcy5jb3NiMSksdGhpcy55bWY9KHRoaXMueG1mPXRoaXMucnEpL3RoaXMuZGQsdGhpcy54bWYqPXRoaXMuZGR9ZWxzZSB0aGlzLm1vZGU9PT10aGlzLk9CTElRJiYodGhpcy5zaW5waDA9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc3BoMD1NYXRoLmNvcyh0aGlzLmxhdDApKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlLG4scixvLGwsTSxjPXQueCx1PXQueSxjPW50KGMtdGhpcy5sb25nMCk7aWYodGhpcy5zcGhlcmUpe2lmKGU9TWF0aC5zaW4odSksTT1NYXRoLmNvcyh1KSxhPU1hdGguY29zKGMpLHRoaXMubW9kZT09PXRoaXMuT0JMSVF8fHRoaXMubW9kZT09PXRoaXMuRVFVSVQpe2lmKChpPXRoaXMubW9kZT09PXRoaXMuRVFVSVQ/MStNKmE6MSt0aGlzLnNpbnBoMCplK3RoaXMuY29zcGgwKk0qYSk8PUQpcmV0dXJuIG51bGw7cz0oaT1NYXRoLnNxcnQoMi9pKSkqTSpNYXRoLnNpbihjKSxpKj10aGlzLm1vZGU9PT10aGlzLkVRVUlUP2U6dGhpcy5jb3NwaDAqZS10aGlzLnNpbnBoMCpNKmF9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYoYT0tYSksTWF0aC5hYnModSt0aGlzLmxhdDApPEQpcmV0dXJuIG51bGw7aT1VLS41KnUscz0oaT0yKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9NYXRoLmNvcyhpKTpNYXRoLnNpbihpKSkpKk1hdGguc2luKGMpLGkqPWF9fWVsc2V7c3dpdGNoKGw9bz1yPTAsYT1NYXRoLmNvcyhjKSxoPU1hdGguc2luKGMpLGU9TWF0aC5zaW4odSksbj1WdCh0aGlzLmUsZSksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KHI9bi90aGlzLnFwLG89TWF0aC5zcXJ0KDEtcipyKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6bD0xK3RoaXMuc2luYjEqcit0aGlzLmNvc2IxKm8qYTticmVhaztjYXNlIHRoaXMuRVFVSVQ6bD0xK28qYTticmVhaztjYXNlIHRoaXMuTl9QT0xFOmw9eit1LG49dGhpcy5xcC1uO2JyZWFrO2Nhc2UgdGhpcy5TX1BPTEU6bD11LXosbj10aGlzLnFwK259aWYoTWF0aC5hYnMobCk8RClyZXR1cm4gbnVsbDtzd2l0Y2godGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6Y2FzZSB0aGlzLkVRVUlUOmw9TWF0aC5zcXJ0KDIvbCksaT10aGlzLm1vZGU9PT10aGlzLk9CTElRP3RoaXMueW1mKmwqKHRoaXMuY29zYjEqci10aGlzLnNpbmIxKm8qYSk6KGw9TWF0aC5zcXJ0KDIvKDErbyphKSkpKnIqdGhpcy55bWYscz10aGlzLnhtZipsKm8qaDticmVhaztjYXNlIHRoaXMuTl9QT0xFOmNhc2UgdGhpcy5TX1BPTEU6MDw9bj8ocz0obD1NYXRoLnNxcnQobikpKmgsaT1hKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9sOi1sKSk6cz1pPTB9fXJldHVybiB0Lng9dGhpcy5hKnMrdGhpcy54MCx0Lnk9dGhpcy5hKmkrdGhpcy55MCx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3QueC09dGhpcy54MCx0LnktPXRoaXMueTA7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE0sYz10LngvdGhpcy5hLHU9dC55L3RoaXMuYTtpZih0aGlzLnNwaGVyZSl7dmFyIGY9MCxtPTAscD1NYXRoLnNxcnQoYypjK3UqdSk7aWYoMTwoaT0uNSpwKSlyZXR1cm4gbnVsbDtzd2l0Y2goaT0yKk1hdGguYXNpbihpKSx0aGlzLm1vZGUhPT10aGlzLk9CTElRJiZ0aGlzLm1vZGUhPT10aGlzLkVRVUlUfHwobT1NYXRoLnNpbihpKSxmPU1hdGguY29zKGkpKSx0aGlzLm1vZGUpe2Nhc2UgdGhpcy5FUVVJVDppPU1hdGguYWJzKHApPD1EPzA6TWF0aC5hc2luKHUqbS9wKSxjKj1tLHU9ZipwO2JyZWFrO2Nhc2UgdGhpcy5PQkxJUTppPU1hdGguYWJzKHApPD1EP3RoaXMubGF0MDpNYXRoLmFzaW4oZip0aGlzLnNpbnBoMCt1Km0qdGhpcy5jb3NwaDAvcCksYyo9bSp0aGlzLmNvc3BoMCx1PShmLU1hdGguc2luKGkpKnRoaXMuc2lucGgwKSpwO2JyZWFrO2Nhc2UgdGhpcy5OX1BPTEU6dT0tdSxpPXotaTticmVhaztjYXNlIHRoaXMuU19QT0xFOmktPXp9cz0wIT09dXx8dGhpcy5tb2RlIT09dGhpcy5FUVVJVCYmdGhpcy5tb2RlIT09dGhpcy5PQkxJUT9NYXRoLmF0YW4yKGMsdSk6MH1lbHNle2lmKHI9MCx0aGlzLm1vZGU9PT10aGlzLk9CTElRfHx0aGlzLm1vZGU9PT10aGlzLkVRVUlUKXtpZihjLz10aGlzLmRkLHUqPXRoaXMuZGQsKG49TWF0aC5zcXJ0KGMqYyt1KnUpKTxEKXJldHVybiB0Lng9dGhpcy5sb25nMCx0Lnk9dGhpcy5sYXQwLHQ7aD0yKk1hdGguYXNpbiguNSpuL3RoaXMucnEpLGE9TWF0aC5jb3MoaCksYyo9aD1NYXRoLnNpbihoKSx1PXRoaXMubW9kZT09PXRoaXMuT0JMSVE/KHI9YSp0aGlzLnNpbmIxK3UqaCp0aGlzLmNvc2IxL24sZT10aGlzLnFwKnIsbip0aGlzLmNvc2IxKmEtdSp0aGlzLnNpbmIxKmgpOihyPXUqaC9uLGU9dGhpcy5xcCpyLG4qYSl9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYodT0tdSksIShlPWMqYyt1KnUpKXJldHVybiB0Lng9dGhpcy5sb25nMCx0Lnk9dGhpcy5sYXQwLHQ7cj0xLWUvdGhpcy5xcCx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSYmKHI9LXIpfXM9TWF0aC5hdGFuMihjLHUpLG89TWF0aC5hc2luKHIpLGw9dGhpcy5hcGEsTT1vK28saT1vK2xbMF0qTWF0aC5zaW4oTSkrbFsxXSpNYXRoLnNpbihNK00pK2xbMl0qTWF0aC5zaW4oTStNK00pfXJldHVybiB0Lng9bnQodGhpcy5sb25nMCtzKSx0Lnk9aSx0fSxuYW1lczpbIkxhbWJlcnQgQXppbXV0aGFsIEVxdWFsIEFyZWEiLCJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhIiwibGFlYSJdLFNfUE9MRToxLE5fUE9MRToyLEVRVUlUOjMsT0JMSVE6NH0sZnM9e2luaXQ6ZnVuY3Rpb24oKXtNYXRoLmFicyh0aGlzLmxhdDErdGhpcy5sYXQyKTxEfHwodGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmUzPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy50MT10aGlzLnNpbl9wbyx0aGlzLmNvbj10aGlzLnNpbl9wbyx0aGlzLm1zMT1odCh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnFzMT1WdCh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDIpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MiksdGhpcy50Mj10aGlzLnNpbl9wbyx0aGlzLm1zMj1odCh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnFzMj1WdCh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MCksdGhpcy50Mz10aGlzLnNpbl9wbyx0aGlzLnFzMD1WdCh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSxNYXRoLmFicyh0aGlzLmxhdDEtdGhpcy5sYXQyKT5EP3RoaXMubnMwPSh0aGlzLm1zMSp0aGlzLm1zMS10aGlzLm1zMip0aGlzLm1zMikvKHRoaXMucXMyLXRoaXMucXMxKTp0aGlzLm5zMD10aGlzLmNvbix0aGlzLmM9dGhpcy5tczEqdGhpcy5tczErdGhpcy5uczAqdGhpcy5xczEsdGhpcy5yaD10aGlzLmEqTWF0aC5zcXJ0KHRoaXMuYy10aGlzLm5zMCp0aGlzLnFzMCkvdGhpcy5uczApfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzPXQueCxpPXQueTt0aGlzLnNpbl9waGk9TWF0aC5zaW4oaSksdGhpcy5jb3NfcGhpPU1hdGguY29zKGkpO3ZhciBhPVZ0KHRoaXMuZTMsdGhpcy5zaW5fcGhpLHRoaXMuY29zX3BoaSksaD10aGlzLmEqTWF0aC5zcXJ0KHRoaXMuYy10aGlzLm5zMCphKS90aGlzLm5zMCxlPXRoaXMubnMwKm50KHMtdGhpcy5sb25nMCksbj1oKk1hdGguc2luKGUpK3RoaXMueDAscj10aGlzLnJoLWgqTWF0aC5jb3MoZSkrdGhpcy55MDtyZXR1cm4gdC54PW4sdC55PXIsdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlLG47cmV0dXJuIHQueC09dGhpcy54MCx0Lnk9dGhpcy5yaC10LnkrdGhpcy55MCxhPTA8PXRoaXMubnMwPyhzPU1hdGguc3FydCh0LngqdC54K3QueSp0LnkpLDEpOihzPS1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSwtMSksKGg9MCkhPT1zJiYoaD1NYXRoLmF0YW4yKGEqdC54LGEqdC55KSksYT1zKnRoaXMubnMwL3RoaXMuYSxuPXRoaXMuc3BoZXJlP01hdGguYXNpbigodGhpcy5jLWEqYSkvKDIqdGhpcy5uczApKTooaT0odGhpcy5jLWEqYSkvdGhpcy5uczAsdGhpcy5waGkxeih0aGlzLmUzLGkpKSxlPW50KGgvdGhpcy5uczArdGhpcy5sb25nMCksdC54PWUsdC55PW4sdH0sbmFtZXM6WyJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYSIsIkFsYmVycyIsImFlYSJdLHBoaTF6OmZ1bmN0aW9uKHQscyl7dmFyIGksYSxoLGUsbj1adCguNSpzKTtpZih0PEQpcmV0dXJuIG47Zm9yKHZhciByPXQqdCxvPTE7bzw9MjU7bysrKWlmKG4rPWU9LjUqKGg9MS0oYT10KihpPU1hdGguc2luKG4pKSkqYSkqaC9NYXRoLmNvcyhuKSoocy8oMS1yKS1pL2grLjUvdCpNYXRoLmxvZygoMS1hKS8oMSthKSkpLE1hdGguYWJzKGUpPD0xZS03KXJldHVybiBuO3JldHVybiBudWxsfX0sbXM9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnNpbl9wMTQ9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc19wMTQ9TWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLmluZmluaXR5X2Rpc3Q9MWUzKnRoaXMuYSx0aGlzLnJjPTF9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHMsaSxhPXQueCxoPXQueSxlPW50KGEtdGhpcy5sb25nMCksbj1NYXRoLnNpbihoKSxyPU1hdGguY29zKGgpLG89TWF0aC5jb3MoZSksbD0wPChzPXRoaXMuc2luX3AxNCpuK3RoaXMuY29zX3AxNCpyKm8pfHxNYXRoLmFicyhzKTw9RD8oaT10aGlzLngwK3RoaXMuYSpyKk1hdGguc2luKGUpL3MsdGhpcy55MCt0aGlzLmEqKHRoaXMuY29zX3AxNCpuLXRoaXMuc2luX3AxNCpyKm8pL3MpOihpPXRoaXMueDArdGhpcy5pbmZpbml0eV9kaXN0KnIqTWF0aC5zaW4oZSksdGhpcy55MCt0aGlzLmluZmluaXR5X2Rpc3QqKHRoaXMuY29zX3AxNCpuLXRoaXMuc2luX3AxNCpyKm8pKTtyZXR1cm4gdC54PWksdC55PWwsdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlLG47cmV0dXJuIHQueD0odC54LXRoaXMueDApL3RoaXMuYSx0Lnk9KHQueS10aGlzLnkwKS90aGlzLmEsdC54Lz10aGlzLmswLHQueS89dGhpcy5rMCxlPShzPU1hdGguc3FydCh0LngqdC54K3QueSp0LnkpKT8oaD1NYXRoLmF0YW4yKHMsdGhpcy5yYyksaT1NYXRoLnNpbihoKSxhPU1hdGguY29zKGgpLG49WnQoYSp0aGlzLnNpbl9wMTQrdC55KmkqdGhpcy5jb3NfcDE0L3MpLGU9TWF0aC5hdGFuMih0LngqaSxzKnRoaXMuY29zX3AxNCphLXQueSp0aGlzLnNpbl9wMTQqaSksbnQodGhpcy5sb25nMCtlKSk6KG49dGhpcy5waGljMCwwKSx0Lng9ZSx0Lnk9bix0fSxuYW1lczpbImdub20iXX0scHM9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuazA9aHQodGhpcy5lLE1hdGguc2luKHRoaXMubGF0X3RzKSxNYXRoLmNvcyh0aGlzLmxhdF90cykpKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaD10LngsZT10Lnksbj1udChoLXRoaXMubG9uZzApO3JldHVybiBhPXRoaXMuc3BoZXJlPyhpPXRoaXMueDArdGhpcy5hKm4qTWF0aC5jb3ModGhpcy5sYXRfdHMpLHRoaXMueTArdGhpcy5hKk1hdGguc2luKGUpL01hdGguY29zKHRoaXMubGF0X3RzKSk6KHM9VnQodGhpcy5lLE1hdGguc2luKGUpKSxpPXRoaXMueDArdGhpcy5hKnRoaXMuazAqbix0aGlzLnkwK3RoaXMuYSpzKi41L3RoaXMuazApLHQueD1pLHQueT1hLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaTtyZXR1cm4gdC54LT10aGlzLngwLHQueS09dGhpcy55MCx0aGlzLnNwaGVyZT8ocz1udCh0aGlzLmxvbmcwK3QueC90aGlzLmEvTWF0aC5jb3ModGhpcy5sYXRfdHMpKSxpPU1hdGguYXNpbih0LnkvdGhpcy5hKk1hdGguY29zKHRoaXMubGF0X3RzKSkpOihpPWZ1bmN0aW9uKHQscyl7dmFyIGk9MS0oMS10KnQpLygyKnQpKk1hdGgubG9nKCgxLXQpLygxK3QpKTtpZihNYXRoLmFicyhNYXRoLmFicyhzKS1pKTwxZS02KXJldHVybiBzPDA/LTEqejp6O2Zvcih2YXIgYSxoLGUsbixyPU1hdGguYXNpbiguNSpzKSxvPTA7bzwzMDtvKyspaWYoaD1NYXRoLnNpbihyKSxlPU1hdGguY29zKHIpLG49dCpoLHIrPWE9TWF0aC5wb3coMS1uKm4sMikvKDIqZSkqKHMvKDEtdCp0KS1oLygxLW4qbikrLjUvdCpNYXRoLmxvZygoMS1uKS8oMStuKSkpLE1hdGguYWJzKGEpPD0xZS0xMClyZXR1cm4gcjtyZXR1cm4gTmFOfSh0aGlzLmUsMip0LnkqdGhpcy5rMC90aGlzLmEpLHM9bnQodGhpcy5sb25nMCt0LngvKHRoaXMuYSp0aGlzLmswKSkpLHQueD1zLHQueT1pLHR9LG5hbWVzOlsiY2VhIl19LGRzPXtpbml0OmZ1bmN0aW9uKCl7dGhpcy54MD10aGlzLngwfHwwLHRoaXMueTA9dGhpcy55MHx8MCx0aGlzLmxhdDA9dGhpcy5sYXQwfHwwLHRoaXMubG9uZzA9dGhpcy5sb25nMHx8MCx0aGlzLmxhdF90cz10aGlzLmxhdF90c3x8MCx0aGlzLnRpdGxlPXRoaXMudGl0bGV8fCJFcXVpZGlzdGFudCBDeWxpbmRyaWNhbCAoUGxhdGUgQ2FycmUpIix0aGlzLnJjPU1hdGguY29zKHRoaXMubGF0X3RzKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcz10LngsaT10LnksYT1udChzLXRoaXMubG9uZzApLGg9SnQoaS10aGlzLmxhdDApO3JldHVybiB0Lng9dGhpcy54MCt0aGlzLmEqYSp0aGlzLnJjLHQueT10aGlzLnkwK3RoaXMuYSpoLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHM9dC54LGk9dC55O3JldHVybiB0Lng9bnQodGhpcy5sb25nMCsocy10aGlzLngwKS8odGhpcy5hKnRoaXMucmMpKSx0Lnk9SnQodGhpcy5sYXQwKyhpLXRoaXMueTApL3RoaXMuYSksdH0sbmFtZXM6WyJFcXVpcmVjdGFuZ3VsYXIiLCJFcXVpZGlzdGFudF9DeWxpbmRyaWNhbCIsImVxYyJdfSx5cz17aW5pdDpmdW5jdGlvbigpe3RoaXMudGVtcD10aGlzLmIvdGhpcy5hLHRoaXMuZXM9MS1NYXRoLnBvdyh0aGlzLnRlbXAsMiksdGhpcy5lPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLmUwPUZ0KHRoaXMuZXMpLHRoaXMuZTE9UXQodGhpcy5lcyksdGhpcy5lMj1XdCh0aGlzLmVzKSx0aGlzLmUzPVh0KHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpVdCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MCl9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGg9dC54LGU9dC55LG49bnQoaC10aGlzLmxvbmcwKSxyPW4qTWF0aC5zaW4oZSk7cmV0dXJuIGE9dGhpcy5zcGhlcmU/TWF0aC5hYnMoZSk8PUQ/KGk9dGhpcy5hKm4sLTEqdGhpcy5hKnRoaXMubGF0MCk6KGk9dGhpcy5hKk1hdGguc2luKHIpL01hdGgudGFuKGUpLHRoaXMuYSooSnQoZS10aGlzLmxhdDApKygxLU1hdGguY29zKHIpKS9NYXRoLnRhbihlKSkpOk1hdGguYWJzKGUpPD1EPyhpPXRoaXMuYSpuLC0xKnRoaXMubWwwKTooaT0ocz1IdCh0aGlzLmEsdGhpcy5lLE1hdGguc2luKGUpKS9NYXRoLnRhbihlKSkqTWF0aC5zaW4ociksdGhpcy5hKlV0KHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsZSktdGhpcy5tbDArcyooMS1NYXRoLmNvcyhyKSkpLHQueD1pK3RoaXMueDAsdC55PWErdGhpcy55MCx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyLG8sbD10LngtdGhpcy54MCxNPXQueS10aGlzLnkwO2lmKHRoaXMuc3BoZXJlKWlmKE1hdGguYWJzKE0rdGhpcy5hKnRoaXMubGF0MCk8PUQpcz1udChsL3RoaXMuYSt0aGlzLmxvbmcwKSxpPTA7ZWxzZXtmb3IodmFyIGMsdT10aGlzLmxhdDArTS90aGlzLmEsZj1sKmwvdGhpcy5hL3RoaXMuYSt1KnUsbT11LHA9MjA7cDstLXApaWYobSs9YT0tMSoodSoobSooYz1NYXRoLnRhbihtKSkrMSktbS0uNSoobSptK2YpKmMpLygobS11KS9jLTEpLE1hdGguYWJzKGEpPD1EKXtpPW07YnJlYWt9cz1udCh0aGlzLmxvbmcwK01hdGguYXNpbihsKk1hdGgudGFuKG0pL3RoaXMuYSkvTWF0aC5zaW4oaSkpfWVsc2UgaWYoTWF0aC5hYnMoTSt0aGlzLm1sMCk8PUQpaT0wLHM9bnQodGhpcy5sb25nMCtsL3RoaXMuYSk7ZWxzZXtmb3IodT0odGhpcy5tbDArTSkvdGhpcy5hLGY9bCpsL3RoaXMuYS90aGlzLmErdSp1LG09dSxwPTIwO3A7LS1wKWlmKG89dGhpcy5lKk1hdGguc2luKG0pLGg9TWF0aC5zcXJ0KDEtbypvKSpNYXRoLnRhbihtKSxlPXRoaXMuYSpVdCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLG0pLG49dGhpcy5lMC0yKnRoaXMuZTEqTWF0aC5jb3MoMiptKSs0KnRoaXMuZTIqTWF0aC5jb3MoNCptKS02KnRoaXMuZTMqTWF0aC5jb3MoNiptKSxtLT1hPSh1KihoKihyPWUvdGhpcy5hKSsxKS1yLS41KmgqKHIqcitmKSkvKHRoaXMuZXMqTWF0aC5zaW4oMiptKSoocipyK2YtMip1KnIpLyg0KmgpKyh1LXIpKihoKm4tMi9NYXRoLnNpbigyKm0pKS1uKSxNYXRoLmFicyhhKTw9RCl7aT1tO2JyZWFrfWg9TWF0aC5zcXJ0KDEtdGhpcy5lcypNYXRoLnBvdyhNYXRoLnNpbihpKSwyKSkqTWF0aC50YW4oaSkscz1udCh0aGlzLmxvbmcwK01hdGguYXNpbihsKmgvdGhpcy5hKS9NYXRoLnNpbihpKSl9cmV0dXJuIHQueD1zLHQueT1pLHR9LG5hbWVzOlsiUG9seWNvbmljIiwicG9seSJdfSxfcz17aW5pdDpmdW5jdGlvbigpe3RoaXMuQT1bXSx0aGlzLkFbMV09LjYzOTkxNzUwNzMsdGhpcy5BWzJdPS0uMTM1ODc5NzYxMyx0aGlzLkFbM109LjA2MzI5NDQwOSx0aGlzLkFbNF09LS4wMjUyNjg1Myx0aGlzLkFbNV09LjAxMTc4NzksdGhpcy5BWzZdPS0uMDA1NTE2MSx0aGlzLkFbN109LjAwMjY5MDYsdGhpcy5BWzhdPS0uMDAxMzMzLHRoaXMuQVs5XT02N2UtNSx0aGlzLkFbMTBdPS0zNGUtNSx0aGlzLkJfcmU9W10sdGhpcy5CX2ltPVtdLHRoaXMuQl9yZVsxXT0uNzU1Nzg1MzIyOCx0aGlzLkJfaW1bMV09MCx0aGlzLkJfcmVbMl09LjI0OTIwNDY0Nix0aGlzLkJfaW1bMl09LjAwMzM3MTUwNyx0aGlzLkJfcmVbM109LS4wMDE1NDE3MzksdGhpcy5CX2ltWzNdPS4wNDEwNTg1Nix0aGlzLkJfcmVbNF09LS4xMDE2MjkwNyx0aGlzLkJfaW1bNF09LjAxNzI3NjA5LHRoaXMuQl9yZVs1XT0tLjI2NjIzNDg5LHRoaXMuQl9pbVs1XT0tLjM2MjQ5MjE4LHRoaXMuQl9yZVs2XT0tLjY4NzA5ODMsdGhpcy5CX2ltWzZdPS0xLjE2NTE5NjcsdGhpcy5DX3JlPVtdLHRoaXMuQ19pbT1bXSx0aGlzLkNfcmVbMV09MS4zMjMxMjcwNDM5LHRoaXMuQ19pbVsxXT0wLHRoaXMuQ19yZVsyXT0tLjU3NzI0NTc4OSx0aGlzLkNfaW1bMl09LS4wMDc4MDk1OTgsdGhpcy5DX3JlWzNdPS41MDgzMDc1MTMsdGhpcy5DX2ltWzNdPS0uMTEyMjA4OTUyLHRoaXMuQ19yZVs0XT0tLjE1MDk0NzYyLHRoaXMuQ19pbVs0XT0uMTgyMDA2MDIsdGhpcy5DX3JlWzVdPTEuMDE0MTgxNzksdGhpcy5DX2ltWzVdPTEuNjQ0OTc2OTYsdGhpcy5DX3JlWzZdPTEuOTY2MDU0OSx0aGlzLkNfaW1bNl09Mi41MTI3NjQ1LHRoaXMuRD1bXSx0aGlzLkRbMV09MS41NjI3MDE0MjQzLHRoaXMuRFsyXT0uNTE4NTQwNjM5OCx0aGlzLkRbM109LS4wMzMzMzA5OCx0aGlzLkRbNF09LS4xMDUyOTA2LHRoaXMuRFs1XT0tLjAzNjg1OTQsdGhpcy5EWzZdPS4wMDczMTcsdGhpcy5EWzddPS4wMTIyLHRoaXMuRFs4XT0uMDAzOTQsdGhpcy5EWzldPS0uMDAxM30sZm9yd2FyZDpmdW5jdGlvbih0KXtmb3IodmFyIHM9dC54LGk9dC55LXRoaXMubGF0MCxhPXMtdGhpcy5sb25nMCxoPWkvaioxZS01LGU9YSxuPTEscj0wLG89MTtvPD0xMDtvKyspbio9aCxyKz10aGlzLkFbb10qbjt2YXIgbCxNPXIsYz1lLHU9MSxmPTAsbT0wLHA9MDtmb3Iobz0xO288PTY7bysrKWw9ZipNK3UqYyx1PXUqTS1mKmMsZj1sLG09bSt0aGlzLkJfcmVbb10qdS10aGlzLkJfaW1bb10qZixwPXArdGhpcy5CX2ltW29dKnUrdGhpcy5CX3JlW29dKmY7cmV0dXJuIHQueD1wKnRoaXMuYSt0aGlzLngwLHQueT1tKnRoaXMuYSt0aGlzLnkwLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaT10LngsYT10LnksaD1pLXRoaXMueDAsZT0oYS10aGlzLnkwKS90aGlzLmEsbj1oL3RoaXMuYSxyPTEsbz0wLGw9MCxNPTA7Zm9yKHk9MTt5PD02O3krKylzPW8qZStyKm4scj1yKmUtbypuLG89cyxsPWwrdGhpcy5DX3JlW3ldKnItdGhpcy5DX2ltW3ldKm8sTT1NK3RoaXMuQ19pbVt5XSpyK3RoaXMuQ19yZVt5XSpvO2Zvcih2YXIgYz0wO2M8dGhpcy5pdGVyYXRpb25zO2MrKyl7Zm9yKHZhciB1LGY9bCxtPU0scD1lLGQ9bix5PTI7eTw9Njt5KyspdT1tKmwrZipNLGY9ZipsLW0qTSxtPXUscCs9KHktMSkqKHRoaXMuQl9yZVt5XSpmLXRoaXMuQl9pbVt5XSptKSxkKz0oeS0xKSoodGhpcy5CX2ltW3ldKmYrdGhpcy5CX3JlW3ldKm0pO2Y9MSxtPTA7dmFyIF89dGhpcy5CX3JlWzFdLHg9dGhpcy5CX2ltWzFdO2Zvcih5PTI7eTw9Njt5KyspdT1tKmwrZipNLGY9ZipsLW0qTSxtPXUsXys9eSoodGhpcy5CX3JlW3ldKmYtdGhpcy5CX2ltW3ldKm0pLHgrPXkqKHRoaXMuQl9pbVt5XSpmK3RoaXMuQl9yZVt5XSptKTt2YXIgZz1fKl8reCp4LGw9KHAqXytkKngpL2csTT0oZCpfLXAqeCkvZ312YXIgYj1sLHY9TSx3PTEsQz0wO2Zvcih5PTE7eTw9OTt5Kyspdyo9YixDKz10aGlzLkRbeV0qdzt2YXIgUD10aGlzLmxhdDArQypqKjFlNSxTPXRoaXMubG9uZzArdjtyZXR1cm4gdC54PVMsdC55PVAsdH0sbmFtZXM6WyJOZXdfWmVhbGFuZF9NYXBfR3JpZCIsIm56bWciXX0seHM9e2luaXQ6ZnVuY3Rpb24oKXt9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHM9dC54LGk9dC55LGE9bnQocy10aGlzLmxvbmcwKSxoPXRoaXMueDArdGhpcy5hKmEsZT10aGlzLnkwK3RoaXMuYSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQraS8yLjUpKSoxLjI1O3JldHVybiB0Lng9aCx0Lnk9ZSx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3QueC09dGhpcy54MCx0LnktPXRoaXMueTA7dmFyIHM9bnQodGhpcy5sb25nMCt0LngvdGhpcy5hKSxpPTIuNSooTWF0aC5hdGFuKE1hdGguZXhwKC44KnQueS90aGlzLmEpKS1NYXRoLlBJLzQpO3JldHVybiB0Lng9cyx0Lnk9aSx0fSxuYW1lczpbIk1pbGxlcl9DeWxpbmRyaWNhbCIsIm1pbGwiXX0sZ3M9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZT8odGhpcy5uPTEsdGhpcy5tPTAsdGhpcy5lcz0wLHRoaXMuQ195PU1hdGguc3FydCgodGhpcy5tKzEpL3RoaXMubiksdGhpcy5DX3g9dGhpcy5DX3kvKHRoaXMubSsxKSk6dGhpcy5lbj1BdCh0aGlzLmVzKX0sZm9yd2FyZDpmdW5jdGlvbih0KXt2YXIgcz10LngsaT10Lnkscz1udChzLXRoaXMubG9uZzApO2lmKHRoaXMuc3BoZXJlKXtpZih0aGlzLm0pZm9yKHZhciBhPXRoaXMubipNYXRoLnNpbihpKSxoPTIwO2g7LS1oKXt2YXIgZT0odGhpcy5tKmkrTWF0aC5zaW4oaSktYSkvKHRoaXMubStNYXRoLmNvcyhpKSk7aWYoaS09ZSxNYXRoLmFicyhlKTxEKWJyZWFrfWVsc2UgaT0xIT09dGhpcy5uP01hdGguYXNpbih0aGlzLm4qTWF0aC5zaW4oaSkpOmk7bD10aGlzLmEqdGhpcy5DX3gqcyoodGhpcy5tK01hdGguY29zKGkpKSxvPXRoaXMuYSp0aGlzLkNfeSppfWVsc2UgdmFyIG49TWF0aC5zaW4oaSkscj1NYXRoLmNvcyhpKSxvPXRoaXMuYSpHdChpLG4scix0aGlzLmVuKSxsPXRoaXMuYSpzKnIvTWF0aC5zcXJ0KDEtdGhpcy5lcypuKm4pO3JldHVybiB0Lng9bCx0Lnk9byx0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoO3JldHVybiB0LngtPXRoaXMueDAsYT10LngvdGhpcy5hLHQueS09dGhpcy55MCxzPXQueS90aGlzLmEsdGhpcy5zcGhlcmU/KHMvPXRoaXMuQ195LGEvPXRoaXMuQ194Kih0aGlzLm0rTWF0aC5jb3MocykpLHRoaXMubT9zPVp0KCh0aGlzLm0qcytNYXRoLnNpbihzKSkvdGhpcy5uKToxIT09dGhpcy5uJiYocz1adChNYXRoLnNpbihzKS90aGlzLm4pKSxhPW50KGErdGhpcy5sb25nMCkscz1KdChzKSk6KHM9anQodC55L3RoaXMuYSx0aGlzLmVzLHRoaXMuZW4pLChoPU1hdGguYWJzKHMpKTx6PyhoPU1hdGguc2luKHMpLGk9dGhpcy5sb25nMCt0LngqTWF0aC5zcXJ0KDEtdGhpcy5lcypoKmgpLyh0aGlzLmEqTWF0aC5jb3MocykpLGE9bnQoaSkpOmgtRDx6JiYoYT10aGlzLmxvbmcwKSksdC54PWEsdC55PXMsdH0sbmFtZXM6WyJTaW51c29pZGFsIiwic2ludSJdfSxicz17aW5pdDpmdW5jdGlvbigpe30sZm9yd2FyZDpmdW5jdGlvbih0KXtmb3IodmFyIHM9dC54LGk9dC55LGE9bnQocy10aGlzLmxvbmcwKSxoPWksZT1NYXRoLlBJKk1hdGguc2luKGkpOzspe3ZhciBuPS0oaCtNYXRoLnNpbihoKS1lKS8oMStNYXRoLmNvcyhoKSk7aWYoaCs9bixNYXRoLmFicyhuKTxEKWJyZWFrfWgvPTIsTWF0aC5QSS8yLU1hdGguYWJzKGkpPEQmJihhPTApO3ZhciByPS45MDAzMTYzMTYxNTgqdGhpcy5hKmEqTWF0aC5jb3MoaCkrdGhpcy54MCxvPTEuNDE0MjEzNTYyMzczMSp0aGlzLmEqTWF0aC5zaW4oaCkrdGhpcy55MDtyZXR1cm4gdC54PXIsdC55PW8sdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpO3QueC09dGhpcy54MCx0LnktPXRoaXMueTAsaT10LnkvKDEuNDE0MjEzNTYyMzczMSp0aGlzLmEpLC45OTk5OTk5OTk5OTk8TWF0aC5hYnMoaSkmJihpPS45OTk5OTk5OTk5OTkpLHM9TWF0aC5hc2luKGkpO3ZhciBhPW50KHRoaXMubG9uZzArdC54LyguOTAwMzE2MzE2MTU4KnRoaXMuYSpNYXRoLmNvcyhzKSkpO2E8LU1hdGguUEkmJihhPS1NYXRoLlBJKSxhPk1hdGguUEkmJihhPU1hdGguUEkpLGk9KDIqcytNYXRoLnNpbigyKnMpKS9NYXRoLlBJLDE8TWF0aC5hYnMoaSkmJihpPTEpO3ZhciBoPU1hdGguYXNpbihpKTtyZXR1cm4gdC54PWEsdC55PWgsdH0sbmFtZXM6WyJNb2xsd2VpZGUiLCJtb2xsIl19LHZzPXtpbml0OmZ1bmN0aW9uKCl7TWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8RHx8KHRoaXMubGF0Mj10aGlzLmxhdDJ8fHRoaXMubGF0MSx0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5lMD1GdCh0aGlzLmVzKSx0aGlzLmUxPVF0KHRoaXMuZXMpLHRoaXMuZTI9V3QodGhpcy5lcyksdGhpcy5lMz1YdCh0aGlzLmVzKSx0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy5tczE9aHQodGhpcy5lLHRoaXMuc2lucGhpLHRoaXMuY29zcGhpKSx0aGlzLm1sMT1VdCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MSksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik8RD90aGlzLm5zPXRoaXMuc2lucGhpOih0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDIpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MiksdGhpcy5tczI9aHQodGhpcy5lLHRoaXMuc2lucGhpLHRoaXMuY29zcGhpKSx0aGlzLm1sMj1VdCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MiksdGhpcy5ucz0odGhpcy5tczEtdGhpcy5tczIpLyh0aGlzLm1sMi10aGlzLm1sMSkpLHRoaXMuZz10aGlzLm1sMSt0aGlzLm1zMS90aGlzLm5zLHRoaXMubWwwPVV0KHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKSx0aGlzLnJoPXRoaXMuYSoodGhpcy5nLXRoaXMubWwwKSl9LGZvcndhcmQ6ZnVuY3Rpb24odCl7dmFyIHMsaSxhPXQueCxoPXQueTtpPXRoaXMuc3BoZXJlP3RoaXMuYSoodGhpcy5nLWgpOihzPVV0KHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsaCksdGhpcy5hKih0aGlzLmctcykpO3ZhciBlPXRoaXMubnMqbnQoYS10aGlzLmxvbmcwKSxuPXRoaXMueDAraSpNYXRoLnNpbihlKSxyPXRoaXMueTArdGhpcy5yaC1pKk1hdGguY29zKGUpO3JldHVybiB0Lng9bix0Lnk9cix0fSxpbnZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBzLGk7dC54LT10aGlzLngwLHQueT10aGlzLnJoLXQueSt0aGlzLnkwLHM9MDw9dGhpcy5ucz8oaT1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSwxKTooaT0tTWF0aC5zcXJ0KHQueCp0LngrdC55KnQueSksLTEpO3ZhciBhPTA7aWYoMCE9PWkmJihhPU1hdGguYXRhbjIocyp0Lngscyp0LnkpKSx0aGlzLnNwaGVyZSlyZXR1cm4gbj1udCh0aGlzLmxvbmcwK2EvdGhpcy5ucyksZT1KdCh0aGlzLmctaS90aGlzLmEpLHQueD1uLHQueT1lLHQ7dmFyIGg9dGhpcy5nLWkvdGhpcy5hLGU9S3QoaCx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxuPW50KHRoaXMubG9uZzArYS90aGlzLm5zKTtyZXR1cm4gdC54PW4sdC55PWUsdH0sbmFtZXM6WyJFcXVpZGlzdGFudF9Db25pYyIsImVxZGMiXX0sd3M9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLlI9dGhpcy5hfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzLGk9dC54LGE9dC55LGg9bnQoaS10aGlzLmxvbmcwKTtNYXRoLmFicyhhKTw9RCYmKHM9dGhpcy54MCt0aGlzLlIqaCxkPXRoaXMueTApO3ZhciBlPVp0KDIqTWF0aC5hYnMoYS9NYXRoLlBJKSk7KE1hdGguYWJzKGgpPD1EfHxNYXRoLmFicyhNYXRoLmFicyhhKS16KTw9RCkmJihzPXRoaXMueDAsZD0wPD1hP3RoaXMueTArTWF0aC5QSSp0aGlzLlIqTWF0aC50YW4oLjUqZSk6dGhpcy55MCtNYXRoLlBJKnRoaXMuUiotTWF0aC50YW4oLjUqZSkpO3ZhciBuPS41Kk1hdGguYWJzKE1hdGguUEkvaC1oL01hdGguUEkpLHI9bipuLG89TWF0aC5zaW4oZSksbD1NYXRoLmNvcyhlKSxNPWwvKG8rbC0xKSxjPU0qTSx1PU0qKDIvby0xKSxmPXUqdSxtPU1hdGguUEkqdGhpcy5SKihuKihNLWYpK01hdGguc3FydChyKihNLWYpKihNLWYpLShmK3IpKihjLWYpKSkvKGYrcik7aDwwJiYobT0tbSkscz10aGlzLngwK207dmFyIHA9citNLG09TWF0aC5QSSp0aGlzLlIqKHUqcC1uKk1hdGguc3FydCgoZityKSooMStyKS1wKnApKS8oZityKSxkPTA8PWE/dGhpcy55MCttOnRoaXMueTAtbTtyZXR1cm4gdC54PXMsdC55PWQsdH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgcyxpLGEsaCxlLG4scixvLGwsTSxjLHU7cmV0dXJuIHQueC09dGhpcy54MCx0LnktPXRoaXMueTAsYz1NYXRoLlBJKnRoaXMuUixlPShhPXQueC9jKSphKyhoPXQueS9jKSpoLGM9MyooaCpoLyhvPS0yKihuPS1NYXRoLmFicyhoKSooMStlKSkrMSsyKmgqaCtlKmUpKygyKihyPW4tMipoKmgrYSphKSpyKnIvby9vL28tOSpuKnIvby9vKS8yNykvKGw9KG4tcipyLzMvbykvbykvKE09MipNYXRoLnNxcnQoLWwvMykpLDE8TWF0aC5hYnMoYykmJihjPTA8PWM/MTotMSksdT1NYXRoLmFjb3MoYykvMyxpPTA8PXQueT8oLU0qTWF0aC5jb3ModStNYXRoLlBJLzMpLXIvMy9vKSpNYXRoLlBJOi0oLU0qTWF0aC5jb3ModStNYXRoLlBJLzMpLXIvMy9vKSpNYXRoLlBJLHM9TWF0aC5hYnMoYSk8RD90aGlzLmxvbmcwOm50KHRoaXMubG9uZzArTWF0aC5QSSooZS0xK01hdGguc3FydCgxKzIqKGEqYS1oKmgpK2UqZSkpLzIvYSksdC54PXMsdC55PWksdH0sbmFtZXM6WyJWYW5fZGVyX0dyaW50ZW5fSSIsIlZhbkRlckdyaW50ZW4iLCJ2YW5kZyJdfSxDcz17aW5pdDpmdW5jdGlvbigpe3RoaXMuc2luX3AxMj1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxMj1NYXRoLmNvcyh0aGlzLmxhdDApfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyLG8sbCxNLGMsdSxmLG0scCxkLHksXyx4LGcsYix2LHc9dC54LEM9dC55LFA9TWF0aC5zaW4odC55KSxTPU1hdGguY29zKHQueSksTj1udCh3LXRoaXMubG9uZzApO3JldHVybiB0aGlzLnNwaGVyZT9NYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PUQ/KHQueD10aGlzLngwK3RoaXMuYSooei1DKSpNYXRoLnNpbihOKSx0Lnk9dGhpcy55MC10aGlzLmEqKHotQykqTWF0aC5jb3MoTikpOk1hdGguYWJzKHRoaXMuc2luX3AxMisxKTw9RD8odC54PXRoaXMueDArdGhpcy5hKih6K0MpKk1hdGguc2luKE4pLHQueT10aGlzLnkwK3RoaXMuYSooeitDKSpNYXRoLmNvcyhOKSk6KF89dGhpcy5zaW5fcDEyKlArdGhpcy5jb3NfcDEyKlMqTWF0aC5jb3MoTikseT0oZD1NYXRoLmFjb3MoXykpP2QvTWF0aC5zaW4oZCk6MSx0Lng9dGhpcy54MCt0aGlzLmEqeSpTKk1hdGguc2luKE4pLHQueT10aGlzLnkwK3RoaXMuYSp5Kih0aGlzLmNvc19wMTIqUC10aGlzLnNpbl9wMTIqUypNYXRoLmNvcyhOKSkpOihzPUZ0KHRoaXMuZXMpLGk9UXQodGhpcy5lcyksYT1XdCh0aGlzLmVzKSxoPVh0KHRoaXMuZXMpLE1hdGguYWJzKHRoaXMuc2luX3AxMi0xKTw9RD8oZT10aGlzLmEqVXQocyxpLGEsaCx6KSxuPXRoaXMuYSpVdChzLGksYSxoLEMpLHQueD10aGlzLngwKyhlLW4pKk1hdGguc2luKE4pLHQueT10aGlzLnkwLShlLW4pKk1hdGguY29zKE4pKTpNYXRoLmFicyh0aGlzLnNpbl9wMTIrMSk8PUQ/KGU9dGhpcy5hKlV0KHMsaSxhLGgseiksbj10aGlzLmEqVXQocyxpLGEsaCxDKSx0Lng9dGhpcy54MCsoZStuKSpNYXRoLnNpbihOKSx0Lnk9dGhpcy55MCsoZStuKSpNYXRoLmNvcyhOKSk6KHI9UC9TLG89SHQodGhpcy5hLHRoaXMuZSx0aGlzLnNpbl9wMTIpLGw9SHQodGhpcy5hLHRoaXMuZSxQKSxNPU1hdGguYXRhbigoMS10aGlzLmVzKSpyK3RoaXMuZXMqbyp0aGlzLnNpbl9wMTIvKGwqUykpLHg9MD09PShjPU1hdGguYXRhbjIoTWF0aC5zaW4oTiksdGhpcy5jb3NfcDEyKk1hdGgudGFuKE0pLXRoaXMuc2luX3AxMipNYXRoLmNvcyhOKSkpP01hdGguYXNpbih0aGlzLmNvc19wMTIqTWF0aC5zaW4oTSktdGhpcy5zaW5fcDEyKk1hdGguY29zKE0pKTpNYXRoLmFicyhNYXRoLmFicyhjKS1NYXRoLlBJKTw9RD8tTWF0aC5hc2luKHRoaXMuY29zX3AxMipNYXRoLnNpbihNKS10aGlzLnNpbl9wMTIqTWF0aC5jb3MoTSkpOk1hdGguYXNpbihNYXRoLnNpbihOKSpNYXRoLmNvcyhNKS9NYXRoLnNpbihjKSksdT10aGlzLmUqdGhpcy5zaW5fcDEyL01hdGguc3FydCgxLXRoaXMuZXMpLGQ9byp4KigxLShnPXgqeCkqKHA9KGY9dGhpcy5lKnRoaXMuY29zX3AxMipNYXRoLmNvcyhjKS9NYXRoLnNxcnQoMS10aGlzLmVzKSkqZikqKDEtcCkvNisoYj1nKngpLzgqKG09dSpmKSooMS0yKnApKyh2PWIqeCkvMTIwKihwKig0LTcqcCktMyp1KnUqKDEtNypwKSktdip4LzQ4Km0pLHQueD10aGlzLngwK2QqTWF0aC5zaW4oYyksdC55PXRoaXMueTArZCpNYXRoLmNvcyhjKSkpLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE0sYyx1LGYsbSxwLGQseSxfLHgsZyxiLHYsdztpZih0LngtPXRoaXMueDAsdC55LT10aGlzLnkwLHRoaXMuc3BoZXJlKXtpZigocz1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSk+Mip6KnRoaXMuYSlyZXR1cm47cmV0dXJuIGk9cy90aGlzLmEsYT1NYXRoLnNpbihpKSxoPU1hdGguY29zKGkpLGU9dGhpcy5sb25nMCxNYXRoLmFicyhzKTw9RD9uPXRoaXMubGF0MDoobj1adChoKnRoaXMuc2luX3AxMit0LnkqYSp0aGlzLmNvc19wMTIvcykscj1NYXRoLmFicyh0aGlzLmxhdDApLXosZT1udChNYXRoLmFicyhyKTw9RD8wPD10aGlzLmxhdDA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKHQueCwtdC55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLXQueCx0LnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMih0LngqYSxzKnRoaXMuY29zX3AxMipoLXQueSp0aGlzLnNpbl9wMTIqYSkpKSx0Lng9ZSx0Lnk9bix0fXJldHVybiBvPUZ0KHRoaXMuZXMpLGw9UXQodGhpcy5lcyksTT1XdCh0aGlzLmVzKSxjPVh0KHRoaXMuZXMpLE1hdGguYWJzKHRoaXMuc2luX3AxMi0xKTw9RD8odT10aGlzLmEqVXQobyxsLE0sYyx6KSxzPU1hdGguc3FydCh0LngqdC54K3QueSp0LnkpLG49S3QoKHUtcykvdGhpcy5hLG8sbCxNLGMpLGU9bnQodGhpcy5sb25nMCtNYXRoLmF0YW4yKHQueCwtMSp0LnkpKSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1EPyh1PXRoaXMuYSpVdChvLGwsTSxjLHopLHM9TWF0aC5zcXJ0KHQueCp0LngrdC55KnQueSksbj1LdCgocy11KS90aGlzLmEsbyxsLE0sYyksZT1udCh0aGlzLmxvbmcwK01hdGguYXRhbjIodC54LHQueSkpKToocz1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSxwPU1hdGguYXRhbjIodC54LHQueSksZj1IdCh0aGlzLmEsdGhpcy5lLHRoaXMuc2luX3AxMiksZD1NYXRoLmNvcyhwKSxfPS0oeT10aGlzLmUqdGhpcy5jb3NfcDEyKmQpKnkvKDEtdGhpcy5lcykseD0zKnRoaXMuZXMqKDEtXykqdGhpcy5zaW5fcDEyKnRoaXMuY29zX3AxMipkLygxLXRoaXMuZXMpLHY9MS1fKihiPShnPXMvZiktXyooMStfKSpNYXRoLnBvdyhnLDMpLzYteCooMSszKl8pKk1hdGgucG93KGcsNCkvMjQpKmIvMi1nKmIqYipiLzYsbT1NYXRoLmFzaW4odGhpcy5zaW5fcDEyKk1hdGguY29zKGIpK3RoaXMuY29zX3AxMipNYXRoLnNpbihiKSpkKSxlPW50KHRoaXMubG9uZzArTWF0aC5hc2luKE1hdGguc2luKHApKk1hdGguc2luKGIpL01hdGguY29zKG0pKSksdz1NYXRoLnNpbihtKSxuPU1hdGguYXRhbjIoKHctdGhpcy5lcyp2KnRoaXMuc2luX3AxMikqTWF0aC50YW4obSksdyooMS10aGlzLmVzKSkpLHQueD1lLHQueT1uLHR9LG5hbWVzOlsiQXppbXV0aGFsX0VxdWlkaXN0YW50IiwiYWVxZCJdfSxQcz17aW5pdDpmdW5jdGlvbigpe3RoaXMuc2luX3AxND1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxND1NYXRoLmNvcyh0aGlzLmxhdDApfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoPXQueCxlPXQueSxuPW50KGgtdGhpcy5sb25nMCkscj1NYXRoLnNpbihlKSxvPU1hdGguY29zKGUpLGw9TWF0aC5jb3Mobik7cmV0dXJuKDA8KHM9dGhpcy5zaW5fcDE0KnIrdGhpcy5jb3NfcDE0Km8qbCl8fE1hdGguYWJzKHMpPD1EKSYmKGk9dGhpcy5hKm8qTWF0aC5zaW4obiksYT10aGlzLnkwK3RoaXMuYSoodGhpcy5jb3NfcDE0KnItdGhpcy5zaW5fcDE0Km8qbCkpLHQueD1pLHQueT1hLHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHI7cmV0dXJuIHQueC09dGhpcy54MCx0LnktPXRoaXMueTAscz1NYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSxpPVp0KHMvdGhpcy5hKSxhPU1hdGguc2luKGkpLGg9TWF0aC5jb3MoaSksbj10aGlzLmxvbmcwLE1hdGguYWJzKHMpPD1EP3I9dGhpcy5sYXQwOihyPVp0KGgqdGhpcy5zaW5fcDE0K3QueSphKnRoaXMuY29zX3AxNC9zKSxlPU1hdGguYWJzKHRoaXMubGF0MCkteixuPU1hdGguYWJzKGUpPD1EP250KDA8PXRoaXMubGF0MD90aGlzLmxvbmcwK01hdGguYXRhbjIodC54LC10LnkpOnRoaXMubG9uZzAtTWF0aC5hdGFuMigtdC54LHQueSkpOm50KHRoaXMubG9uZzArTWF0aC5hdGFuMih0LngqYSxzKnRoaXMuY29zX3AxNCpoLXQueSp0aGlzLnNpbl9wMTQqYSkpKSx0Lng9bix0Lnk9cix0fSxuYW1lczpbIm9ydGhvIl19LFNzPTEsTnM9Mixrcz0zLEVzPTQscXM9NSxJcz02LE9zPTEsQXM9MixHcz0zLGpzPTQsenM9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLHRoaXMubGF0MD10aGlzLmxhdDB8fDAsdGhpcy5sb25nMD10aGlzLmxvbmcwfHwwLHRoaXMubGF0X3RzPXRoaXMubGF0X3RzfHwwLHRoaXMudGl0bGU9dGhpcy50aXRsZXx8IlF1YWRyaWxhdGVyYWxpemVkIFNwaGVyaWNhbCBDdWJlIix0aGlzLmxhdDA+PXotVS8yP3RoaXMuZmFjZT1xczp0aGlzLmxhdDA8PS0oei1VLzIpP3RoaXMuZmFjZT1JczpNYXRoLmFicyh0aGlzLmxvbmcwKTw9VT90aGlzLmZhY2U9U3M6TWF0aC5hYnModGhpcy5sb25nMCk8PXorVT90aGlzLmZhY2U9MDx0aGlzLmxvbmcwP05zOkVzOnRoaXMuZmFjZT1rcywwIT09dGhpcy5lcyYmKHRoaXMub25lX21pbnVzX2Y9MS0odGhpcy5hLXRoaXMuYikvdGhpcy5hLHRoaXMub25lX21pbnVzX2Zfc3F1YXJlZD10aGlzLm9uZV9taW51c19mKnRoaXMub25lX21pbnVzX2YpfSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzLGksYSxoLGUsbixyLG8sbCxNLGMsdSxmPXt4OjAseTowfSxtPXt2YWx1ZTowfTtyZXR1cm4gdC54LT10aGlzLmxvbmcwLHM9MCE9PXRoaXMuZXM/TWF0aC5hdGFuKHRoaXMub25lX21pbnVzX2Zfc3F1YXJlZCpNYXRoLnRhbih0LnkpKTp0LnksaT10LngsdGhpcy5mYWNlPT09cXM/KGg9ei1zLGE9VTw9aSYmaTw9eitVPyhtLnZhbHVlPU9zLGkteik6eitVPGl8fGk8PS0oeitVKT8obS52YWx1ZT1BcywwPGk/aS1ROmkrUSk6LSh6K1UpPGkmJmk8PS1VPyhtLnZhbHVlPUdzLGkreik6KG0udmFsdWU9anMsaSkpOnRoaXMuZmFjZT09PUlzPyhoPXorcyxhPVU8PWkmJmk8PXorVT8obS52YWx1ZT1Pcyx6LWkpOmk8VSYmLVU8PWk/KG0udmFsdWU9QXMsLWkpOmk8LVUmJi0oeitVKTw9aT8obS52YWx1ZT1HcywtaS16KToobS52YWx1ZT1qcywwPGk/US1pOi1pLVEpKToodGhpcy5mYWNlPT09TnM/aT1TKGksK3opOnRoaXMuZmFjZT09PWtzP2k9UyhpLCtRKTp0aGlzLmZhY2U9PT1FcyYmKGk9UyhpLC16KSksTT1NYXRoLnNpbihzKSxjPU1hdGguY29zKHMpLHU9TWF0aC5zaW4oaSkscj1jKk1hdGguY29zKGkpLG89Yyp1LGw9TSx0aGlzLmZhY2U9PT1Tcz9hPVAoaD1NYXRoLmFjb3MociksbCxvLG0pOnRoaXMuZmFjZT09PU5zP2E9UChoPU1hdGguYWNvcyhvKSxsLC1yLG0pOnRoaXMuZmFjZT09PWtzP2E9UChoPU1hdGguYWNvcygtciksbCwtbyxtKTp0aGlzLmZhY2U9PT1Fcz9hPVAoaD1NYXRoLmFjb3MoLW8pLGwscixtKTooaD1hPTAsbS52YWx1ZT1PcykpLG49TWF0aC5hdGFuKDEyL1EqKGErTWF0aC5hY29zKE1hdGguc2luKGEpKk1hdGguY29zKFUpKS16KSksZT1NYXRoLnNxcnQoKDEtTWF0aC5jb3MoaCkpLyhNYXRoLmNvcyhuKSpNYXRoLmNvcyhuKSkvKDEtTWF0aC5jb3MoTWF0aC5hdGFuKDEvTWF0aC5jb3MoYSkpKSkpLG0udmFsdWU9PT1Bcz9uKz16Om0udmFsdWU9PT1Hcz9uKz1ROm0udmFsdWU9PT1qcyYmKG4rPTEuNSpRKSxmLng9ZSpNYXRoLmNvcyhuKSxmLnk9ZSpNYXRoLnNpbihuKSxmLng9Zi54KnRoaXMuYSt0aGlzLngwLGYueT1mLnkqdGhpcy5hK3RoaXMueTAsdC54PWYueCx0Lnk9Zi55LHR9LGludmVyc2U6ZnVuY3Rpb24odCl7dmFyIHMsaSxhLGgsZSxuLHIsbyxsLE0sYyx1LGYsbSxwLGQ9e2xhbTowLHBoaTowfSx5PXt2YWx1ZTowfTtyZXR1cm4gdC54PSh0LngtdGhpcy54MCkvdGhpcy5hLHQueT0odC55LXRoaXMueTApL3RoaXMuYSxpPU1hdGguYXRhbihNYXRoLnNxcnQodC54KnQueCt0LnkqdC55KSkscz1NYXRoLmF0YW4yKHQueSx0LngpLDA8PXQueCYmdC54Pj1NYXRoLmFicyh0LnkpP3kudmFsdWU9T3M6MDw9dC55JiZ0Lnk+PU1hdGguYWJzKHQueCk/KHkudmFsdWU9QXMscy09eik6dC54PDAmJi10Lng+PU1hdGguYWJzKHQueSk/KHkudmFsdWU9R3Mscz1zPDA/cytROnMtUSk6KHkudmFsdWU9anMscys9eiksYz1RLzEyKk1hdGgudGFuKHMpLGU9TWF0aC5zaW4oYykvKE1hdGguY29zKGMpLTEvTWF0aC5zcXJ0KDIpKSxuPU1hdGguYXRhbihlKSwocj0xLShhPU1hdGguY29zKHMpKSphKihoPU1hdGgudGFuKGkpKSpoKigxLU1hdGguY29zKE1hdGguYXRhbigxL01hdGguY29zKG4pKSkpKTwtMT9yPS0xOjE8ciYmKHI9MSksdGhpcy5mYWNlPT09cXM/KG89TWF0aC5hY29zKHIpLGQucGhpPXotbyx5LnZhbHVlPT09T3M/ZC5sYW09bit6OnkudmFsdWU9PT1Bcz9kLmxhbT1uPDA/bitROm4tUTp5LnZhbHVlPT09R3M/ZC5sYW09bi16OmQubGFtPW4pOnRoaXMuZmFjZT09PUlzPyhvPU1hdGguYWNvcyhyKSxkLnBoaT1vLXoseS52YWx1ZT09PU9zP2QubGFtPXotbjp5LnZhbHVlPT09QXM/ZC5sYW09LW46eS52YWx1ZT09PUdzP2QubGFtPS1uLXo6ZC5sYW09bjwwPy1uLVE6US1uKTooYz0obD1yKSpsLHU9MTw9KGMrPShNPTE8PWM/MDpNYXRoLnNxcnQoMS1jKSpNYXRoLnNpbihuKSkqTSk/MDpNYXRoLnNxcnQoMS1jKSx5LnZhbHVlPT09QXM/KGM9dSx1PS1NLE09Yyk6eS52YWx1ZT09PUdzPyh1PS11LE09LU0pOnkudmFsdWU9PT1qcyYmKGM9dSx1PU0sTT0tYyksdGhpcy5mYWNlPT09TnM/KGM9bCxsPS11LHU9Yyk6dGhpcy5mYWNlPT09a3M/KGw9LWwsdT0tdSk6dGhpcy5mYWNlPT09RXMmJihjPWwsbD11LHU9LWMpLGQucGhpPU1hdGguYWNvcygtTSkteixkLmxhbT1NYXRoLmF0YW4yKHUsbCksdGhpcy5mYWNlPT09TnM/ZC5sYW09UyhkLmxhbSwteik6dGhpcy5mYWNlPT09a3M/ZC5sYW09UyhkLmxhbSwtUSk6dGhpcy5mYWNlPT09RXMmJihkLmxhbT1TKGQubGFtLCt6KSkpLDAhPT10aGlzLmVzJiYoZj1kLnBoaTwwPzE6MCxtPU1hdGgudGFuKGQucGhpKSxwPXRoaXMuYi9NYXRoLnNxcnQobSptK3RoaXMub25lX21pbnVzX2Zfc3F1YXJlZCksZC5waGk9TWF0aC5hdGFuKE1hdGguc3FydCh0aGlzLmEqdGhpcy5hLXAqcCkvKHRoaXMub25lX21pbnVzX2YqcCkpLGYmJihkLnBoaT0tZC5waGkpKSxkLmxhbSs9dGhpcy5sb25nMCx0Lng9ZC5sYW0sdC55PWQucGhpLHR9LG5hbWVzOlsiUXVhZHJpbGF0ZXJhbGl6ZWQgU3BoZXJpY2FsIEN1YmUiLCJRdWFkcmlsYXRlcmFsaXplZF9TcGhlcmljYWxfQ3ViZSIsInFzYyJdfSxScz1bWzEsMjIxOTllLTIxLC03MTU1MTVlLTEwLDMxMTAzZS0xMF0sWy45OTg2LC00ODIyNDNlLTksLTI0ODk3ZS05LC0xMzMwOWUtMTBdLFsuOTk1NCwtODMxMDNlLTgsLTQ0ODYwNWUtMTAsLTkuODY3MDFlLTddLFsuOTksLS4wMDEzNTM2NCwtNTk2NjFlLTksMzY3NzdlLTEwXSxbLjk4MjIsLS4wMDE2NzQ0MiwtNDQ5NTQ3ZS0xMSwtNTcyNDExZS0xMV0sWy45NzMsLS4wMDIxNDg2OCwtOTAzNTcxZS0xMCwxLjg3MzZlLThdLFsuOTYsLS4wMDMwNTA4NSwtOTAwNzYxZS0xMCwxNjQ5MTdlLTExXSxbLjk0MjcsLS4wMDM4Mjc5MiwtNjUzMzg2ZS0xMCwtMjYxNTRlLTEwXSxbLjkyMTYsLS4wMDQ2Nzc0NiwtMTA0NTdlLTgsNDgxMjQzZS0xMV0sWy44OTYyLC0uMDA1MzYyMjMsLTMyMzgzMWUtMTAsLTU0MzQzMmUtMTFdLFsuODY3OSwtLjAwNjA5MzYzLC0xMTM4OThlLTksMzMyNDg0ZS0xMV0sWy44MzUsLS4wMDY5ODMyNSwtNjQwMjUzZS0xMCw5LjM0OTU5ZS03XSxbLjc5ODYsLS4wMDc1NTMzOCwtNTAwMDA5ZS0xMCw5LjM1MzI0ZS03XSxbLjc1OTcsLS4wMDc5ODMyNCwtMzU5NzFlLTksLTIyNzYyNmUtMTFdLFsuNzE4NiwtLjAwODUxMzY3LC03MDExNDllLTEwLC04NjMwM2UtMTBdLFsuNjczMiwtLjAwOTg2MjA5LC0xOTk1NjllLTksMTkxOTc0ZS0xMF0sWy42MjEzLC0uMDEwNDE4LDg4MzkyM2UtMTAsNjI0MDUxZS0xMV0sWy41NzIyLC0uMDA5MDY2MDEsMTgyZS02LDYyNDA1MWUtMTFdLFsuNTMyMiwtLjAwNjc3Nzk3LDI3NTYwOGUtOSw2MjQwNTFlLTExXV0sTHM9W1stNTIwNDE3ZS0yMywuMDEyNCwxMjE0MzFlLTIzLC04NDUyODRlLTE2XSxbLjA2MiwuMDEyNCwtMS4yNjc5M2UtOSw0LjIyNjQyZS0xMF0sWy4xMjQsLjAxMjQsNS4wNzE3MWUtOSwtMS42MDYwNGUtOV0sWy4xODYsLjAxMjM5OTksLTEuOTAxODllLTgsNi4wMDE1MmUtOV0sWy4yNDgsLjAxMjQwMDIsNy4xMDAzOWUtOCwtMi4yNGUtOF0sWy4zMSwuMDEyMzk5MiwtMi42NDk5N2UtNyw4LjM1OTg2ZS04XSxbLjM3MiwuMDEyNDAyOSw5Ljg4OTgzZS03LC0zLjExOTk0ZS03XSxbLjQzNCwuMDEyMzg5MywtMzY5MDkzZS0xMSwtNC4zNTYyMWUtN10sWy40OTU4LC4wMTIzMTk4LC0xMDIyNTJlLTEwLC0zLjQ1NTIzZS03XSxbLjU1NzEsLjAxMjE5MTYsLTE1NDA4MWUtMTAsLTUuODIyODhlLTddLFsuNjE3NiwuMDExOTkzOCwtMjQxNDI0ZS0xMCwtNS4yNTMyN2UtN10sWy42NzY5LC4wMTE3MTMsLTMyMDIyM2UtMTAsLTUuMTY0MDVlLTddLFsuNzM0NiwuMDExMzU0MSwtMzk3Njg0ZS0xMCwtNi4wOTA1MmUtN10sWy43OTAzLC4wMTA5MTA3LC00ODkwNDJlLTEwLC0xMDQ3MzllLTExXSxbLjg0MzUsLjAxMDM0MzEsLTY0NjE1ZS05LC0xLjQwMzc0ZS05XSxbLjg5MzYsLjAwOTY5Njg2LC02NDYzNmUtOSwtODU0N2UtOV0sWy45Mzk0LC4wMDg0MDk0NywtMTkyODQxZS05LC00MjEwNmUtMTBdLFsuOTc2MSwuMDA2MTY1MjcsLTI1NmUtNiwtNDIxMDZlLTEwXSxbMSwuMDAzMjg5NDcsLTMxOTE1OWUtOSwtNDIxMDZlLTEwXV0sVHM9Qi81LERzPTEvVHMsQnM9e2luaXQ6ZnVuY3Rpb24oKXt0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLHRoaXMubG9uZzA9dGhpcy5sb25nMHx8MCx0aGlzLmVzPTAsdGhpcy50aXRsZT10aGlzLnRpdGxlfHwiUm9iaW5zb24ifSxmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBzPW50KHQueC10aGlzLmxvbmcwKSxpPU1hdGguYWJzKHQueSksYT1NYXRoLmZsb29yKGkqVHMpO2E8MD9hPTA6MTg8PWEmJihhPTE3KTt2YXIgaD17eDpZdChSc1thXSxpPUIqKGktRHMqYSkpKnMseTpZdChMc1thXSxpKX07cmV0dXJuIHQueTwwJiYoaC55PS1oLnkpLGgueD1oLngqdGhpcy5hKi44NDg3K3RoaXMueDAsaC55PWgueSp0aGlzLmEqMS4zNTIzK3RoaXMueTAsaH0saW52ZXJzZTpmdW5jdGlvbih0KXt2YXIgYT17eDoodC54LXRoaXMueDApLyguODQ4Nyp0aGlzLmEpLHk6TWF0aC5hYnModC55LXRoaXMueTApLygxLjM1MjMqdGhpcy5hKX07aWYoMTw9YS55KWEueC89UnNbMThdWzBdLGEueT10Lnk8MD8tejp6O2Vsc2V7dmFyIHM9TWF0aC5mbG9vcigxOCphLnkpO2ZvcihzPDA/cz0wOjE4PD1zJiYocz0xNyk7OylpZihMc1tzXVswXT5hLnkpLS1zO2Vsc2V7aWYoIShMc1tzKzFdWzBdPD1hLnkpKWJyZWFrOysrc312YXIgaD1Mc1tzXSxpPWZ1bmN0aW9uKHQscyxpLGEpe2Zvcih2YXIgaD1zO2E7LS1hKXt2YXIgZT10KGgpO2lmKGgtPWUsTWF0aC5hYnMoZSk8aSlicmVha31yZXR1cm4gaH0oZnVuY3Rpb24odCl7cmV0dXJuKFl0KGgsdCktYS55KS8oaT10LChzPWgpWzFdK2kqKDIqc1syXSszKmkqc1szXSkpO3ZhciBzLGl9LGk9NSooYS55LWhbMF0pLyhMc1tzKzFdWzBdLWhbMF0pLEQsMTAwKTthLngvPVl0KFJzW3NdLGkpLGEueT0oNSpzK2kpKk4sdC55PDAmJihhLnk9LWEueSl9cmV0dXJuIGEueD1udChhLngrdGhpcy5sb25nMCksYX0sbmFtZXM6WyJSb2JpbnNvbiIsInJvYmluIl19LFVzPXtpbml0OmZ1bmN0aW9uKCl7dGhpcy5uYW1lPSJnZW9jZW50In0sZm9yd2FyZDpmdW5jdGlvbih0KXtyZXR1cm4gTSh0LHRoaXMuZXMsdGhpcy5hKX0saW52ZXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LHRoaXMuZXMsdGhpcy5hLHRoaXMuYil9LG5hbWVzOlsiR2VvY2VudHJpYyIsImdlb2NlbnRyaWMiLCJnZW9jZW50IiwiR2VvY2VudCJdfTtyZXR1cm4gYS5kZWZhdWx0RGF0dW09IldHUzg0IixhLlByb2o9cSxhLldHUzg0PW5ldyBhLlByb2ooIldHUzg0IiksYS5Qb2ludD1DLGEudG9Qb2ludD1idCxhLmRlZnM9bCxhLnRyYW5zZm9ybT1mLGEubWdycz1PdCxhLnZlcnNpb249IjIuNi4yIiwoJHQ9YSkuUHJvai5wcm9qZWN0aW9ucy5hZGQoc3MpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKGlzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChhcyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQoZXMpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKG5zKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChycyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQob3MpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKGxzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChNcyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQoY3MpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKHVzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChmcyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQobXMpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKHBzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChkcyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQoeXMpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKF9zKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZCh4cyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQoZ3MpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKGJzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZCh2cyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQod3MpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKENzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChQcyksJHQuUHJvai5wcm9qZWN0aW9ucy5hZGQoenMpLCR0LlByb2oucHJvamVjdGlvbnMuYWRkKEJzKSwkdC5Qcm9qLnByb2plY3Rpb25zLmFkZChVcyksYX0pOw=="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uIChmYWN0b3J5KSB7DQoJdmFyIEwsIHByb2o0Ow0KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCgkJLy8gQU1EDQoJCWRlZmluZShbJ2xlYWZsZXQnLCAncHJvajQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiKSB7DQoJCS8vIE5vZGUvQ29tbW9uSlMNCgkJTCA9IHJlcXVpcmUoJ2xlYWZsZXQnKTsNCgkJcHJvajQgPSByZXF1aXJlKCdwcm9qNCcpOw0KCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoTCwgcHJvajQpOw0KCX0gZWxzZSB7DQoJCS8vIEJyb3dzZXIgZ2xvYmFscw0KCQlpZiAodHlwZW9mIHdpbmRvdy5MID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LnByb2o0ID09PSAndW5kZWZpbmVkJykNCgkJCXRocm93ICdMZWFmbGV0IGFuZCBwcm9qNCBtdXN0IGJlIGxvYWRlZCBmaXJzdCc7DQoJCWZhY3Rvcnkod2luZG93LkwsIHdpbmRvdy5wcm9qNCk7DQoJfQ0KfShmdW5jdGlvbiAoTCwgcHJvajQpIHsNCglpZiAocHJvajQuX19lc01vZHVsZSAmJiBwcm9qNC5kZWZhdWx0KSB7DQoJCS8vIElmIHByb2o0IHdhcyBidW5kbGVkIGFzIGFuIEVTNiBtb2R1bGUsIHVud3JhcCBpdCB0byBnZXQNCgkJLy8gdG8gdGhlIGFjdHVhbCBtYWluIHByb2o0IG9iamVjdC4NCgkJLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2thcnRlbmEvUHJvajRMZWFmbGV0L3B1bGwvMTQ3DQoJCXByb2o0ID0gcHJvajQuZGVmYXVsdDsNCgl9DQogDQoJTC5Qcm9qID0ge307DQoNCglMLlByb2ouX2lzUHJvajRPYmogPSBmdW5jdGlvbihhKSB7DQoJCXJldHVybiAodHlwZW9mIGEuaW52ZXJzZSAhPT0gJ3VuZGVmaW5lZCcgJiYNCgkJCXR5cGVvZiBhLmZvcndhcmQgIT09ICd1bmRlZmluZWQnKTsNCgl9Ow0KDQoJTC5Qcm9qLlByb2plY3Rpb24gPSBMLkNsYXNzLmV4dGVuZCh7DQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGNvZGUsIGRlZiwgYm91bmRzKSB7DQoJCQl2YXIgaXNQNCA9IEwuUHJvai5faXNQcm9qNE9iaihjb2RlKTsNCgkJCXRoaXMuX3Byb2ogPSBpc1A0ID8gY29kZSA6IHRoaXMuX3Byb2pGcm9tQ29kZURlZihjb2RlLCBkZWYpOw0KCQkJdGhpcy5ib3VuZHMgPSBpc1A0ID8gZGVmIDogYm91bmRzOw0KCQl9LA0KDQoJCXByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHsNCgkJCXZhciBwb2ludCA9IHRoaXMuX3Byb2ouZm9yd2FyZChbbGF0bG5nLmxuZywgbGF0bG5nLmxhdF0pOw0KCQkJcmV0dXJuIG5ldyBMLlBvaW50KHBvaW50WzBdLCBwb2ludFsxXSk7DQoJCX0sDQoNCgkJdW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHVuYm91bmRlZCkgew0KCQkJdmFyIHBvaW50MiA9IHRoaXMuX3Byb2ouaW52ZXJzZShbcG9pbnQueCwgcG9pbnQueV0pOw0KCQkJcmV0dXJuIG5ldyBMLkxhdExuZyhwb2ludDJbMV0sIHBvaW50MlswXSwgdW5ib3VuZGVkKTsNCgkJfSwNCg0KCQlfcHJvakZyb21Db2RlRGVmOiBmdW5jdGlvbihjb2RlLCBkZWYpIHsNCgkJCWlmIChkZWYpIHsNCgkJCQlwcm9qNC5kZWZzKGNvZGUsIGRlZik7DQoJCQl9IGVsc2UgaWYgKHByb2o0LmRlZnNbY29kZV0gPT09IHVuZGVmaW5lZCkgew0KCQkJCXZhciB1cm4gPSBjb2RlLnNwbGl0KCc6Jyk7DQoJCQkJaWYgKHVybi5sZW5ndGggPiAzKSB7DQoJCQkJCWNvZGUgPSB1cm5bdXJuLmxlbmd0aCAtIDNdICsgJzonICsgdXJuW3Vybi5sZW5ndGggLSAxXTsNCgkJCQl9DQoJCQkJaWYgKHByb2o0LmRlZnNbY29kZV0gPT09IHVuZGVmaW5lZCkgew0KCQkJCQl0aHJvdyAnTm8gcHJvamVjdGlvbiBkZWZpbml0aW9uIGZvciBjb2RlICcgKyBjb2RlOw0KCQkJCX0NCgkJCX0NCg0KCQkJcmV0dXJuIHByb2o0KGNvZGUpOw0KCQl9DQoJfSk7DQoNCglMLlByb2ouQ1JTID0gTC5DbGFzcy5leHRlbmQoew0KCQlpbmNsdWRlczogTC5DUlMsDQoNCgkJb3B0aW9uczogew0KCQkJdHJhbnNmb3JtYXRpb246IG5ldyBMLlRyYW5zZm9ybWF0aW9uKDEsIDAsIC0xLCAwKQ0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGEsIGIsIGMpIHsNCgkJCXZhciBjb2RlLA0KCQkJICAgIHByb2osDQoJCQkgICAgZGVmLA0KCQkJICAgIG9wdGlvbnM7DQoNCgkJCWlmIChMLlByb2ouX2lzUHJvajRPYmooYSkpIHsNCgkJCQlwcm9qID0gYTsNCgkJCQljb2RlID0gcHJvai5zcnNDb2RlOw0KCQkJCW9wdGlvbnMgPSBiIHx8IHt9Ow0KDQoJCQkJdGhpcy5wcm9qZWN0aW9uID0gbmV3IEwuUHJvai5Qcm9qZWN0aW9uKHByb2osIG9wdGlvbnMuYm91bmRzKTsNCgkJCX0gZWxzZSB7DQoJCQkJY29kZSA9IGE7DQoJCQkJZGVmID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQl0aGlzLnByb2plY3Rpb24gPSBuZXcgTC5Qcm9qLlByb2plY3Rpb24oY29kZSwgZGVmLCBvcHRpb25zLmJvdW5kcyk7DQoJCQl9DQoNCgkJCUwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpOw0KCQkJdGhpcy5jb2RlID0gY29kZTsNCgkJCXRoaXMudHJhbnNmb3JtYXRpb24gPSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtYXRpb247DQoNCgkJCWlmICh0aGlzLm9wdGlvbnMub3JpZ2luKSB7DQoJCQkJdGhpcy50cmFuc2Zvcm1hdGlvbiA9DQoJCQkJCW5ldyBMLlRyYW5zZm9ybWF0aW9uKDEsIC10aGlzLm9wdGlvbnMub3JpZ2luWzBdLA0KCQkJCQkJLTEsIHRoaXMub3B0aW9ucy5vcmlnaW5bMV0pOw0KCQkJfQ0KDQoJCQlpZiAodGhpcy5vcHRpb25zLnNjYWxlcykgew0KCQkJCXRoaXMuX3NjYWxlcyA9IHRoaXMub3B0aW9ucy5zY2FsZXM7DQoJCQl9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5yZXNvbHV0aW9ucykgew0KCQkJCXRoaXMuX3NjYWxlcyA9IFtdOw0KCQkJCWZvciAodmFyIGkgPSB0aGlzLm9wdGlvbnMucmVzb2x1dGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsNCgkJCQkJaWYgKHRoaXMub3B0aW9ucy5yZXNvbHV0aW9uc1tpXSkgew0KCQkJCQkJdGhpcy5fc2NhbGVzW2ldID0gMSAvIHRoaXMub3B0aW9ucy5yZXNvbHV0aW9uc1tpXTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJdGhpcy5pbmZpbml0ZSA9ICF0aGlzLm9wdGlvbnMuYm91bmRzOw0KDQoJCX0sDQoNCgkJc2NhbGU6IGZ1bmN0aW9uKHpvb20pIHsNCgkJCXZhciBpWm9vbSA9IE1hdGguZmxvb3Ioem9vbSksDQoJCQkJYmFzZVNjYWxlLA0KCQkJCW5leHRTY2FsZSwNCgkJCQlzY2FsZURpZmYsDQoJCQkJekRpZmY7DQoJCQlpZiAoem9vbSA9PT0gaVpvb20pIHsNCgkJCQlyZXR1cm4gdGhpcy5fc2NhbGVzW3pvb21dOw0KCQkJfSBlbHNlIHsNCgkJCQkvLyBOb24taW50ZWdlciB6b29tLCBpbnRlcnBvbGF0ZQ0KCQkJCWJhc2VTY2FsZSA9IHRoaXMuX3NjYWxlc1tpWm9vbV07DQoJCQkJbmV4dFNjYWxlID0gdGhpcy5fc2NhbGVzW2lab29tICsgMV07DQoJCQkJc2NhbGVEaWZmID0gbmV4dFNjYWxlIC0gYmFzZVNjYWxlOw0KCQkJCXpEaWZmID0gKHpvb20gLSBpWm9vbSk7DQoJCQkJcmV0dXJuIGJhc2VTY2FsZSArIHNjYWxlRGlmZiAqIHpEaWZmOw0KCQkJfQ0KCQl9LA0KDQoJCXpvb206IGZ1bmN0aW9uKHNjYWxlKSB7DQoJCQkvLyBGaW5kIGNsb3Nlc3QgbnVtYmVyIGluIHRoaXMuX3NjYWxlcywgZG93bg0KCQkJdmFyIGRvd25TY2FsZSA9IHRoaXMuX2Nsb3Nlc3RFbGVtZW50KHRoaXMuX3NjYWxlcywgc2NhbGUpLA0KCQkJCWRvd25ab29tID0gdGhpcy5fc2NhbGVzLmluZGV4T2YoZG93blNjYWxlKSwNCgkJCQluZXh0U2NhbGUsDQoJCQkJbmV4dFpvb20sDQoJCQkJc2NhbGVEaWZmOw0KCQkJLy8gQ2hlY2sgaWYgc2NhbGUgaXMgZG93blNjYWxlID0+IHJldHVybiBhcnJheSBpbmRleA0KCQkJaWYgKHNjYWxlID09PSBkb3duU2NhbGUpIHsNCgkJCQlyZXR1cm4gZG93blpvb207DQoJCQl9DQoJCQlpZiAoZG93blNjYWxlID09PSB1bmRlZmluZWQpIHsNCgkJCQlyZXR1cm4gLUluZmluaXR5Ow0KCQkJfQ0KCQkJLy8gSW50ZXJwb2xhdGUNCgkJCW5leHRab29tID0gZG93blpvb20gKyAxOw0KCQkJbmV4dFNjYWxlID0gdGhpcy5fc2NhbGVzW25leHRab29tXTsNCgkJCWlmIChuZXh0U2NhbGUgPT09IHVuZGVmaW5lZCkgew0KCQkJCXJldHVybiBJbmZpbml0eTsNCgkJCX0NCgkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGRvd25TY2FsZTsNCgkJCXJldHVybiAoc2NhbGUgLSBkb3duU2NhbGUpIC8gc2NhbGVEaWZmICsgZG93blpvb207DQoJCX0sDQoNCgkJZGlzdGFuY2U6IEwuQ1JTLkVhcnRoLmRpc3RhbmNlLA0KDQoJCVI6IEwuQ1JTLkVhcnRoLlIsDQoNCgkJLyogR2V0IHRoZSBjbG9zZXN0IGxvd2VzdCBlbGVtZW50IGluIGFuIGFycmF5ICovDQoJCV9jbG9zZXN0RWxlbWVudDogZnVuY3Rpb24oYXJyYXksIGVsZW1lbnQpIHsNCgkJCXZhciBsb3c7DQoJCQlmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoOyBpLS07KSB7DQoJCQkJaWYgKGFycmF5W2ldIDw9IGVsZW1lbnQgJiYgKGxvdyA9PT0gdW5kZWZpbmVkIHx8IGxvdyA8IGFycmF5W2ldKSkgew0KCQkJCQlsb3cgPSBhcnJheVtpXTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gbG93Ow0KCQl9DQoJfSk7DQoNCglMLlByb2ouR2VvSlNPTiA9IEwuR2VvSlNPTi5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCQl0aGlzLl9jYWxsTGV2ZWwgPSAwOw0KCQkJTC5HZW9KU09OLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgZ2VvanNvbiwgb3B0aW9ucyk7DQoJCX0sDQoNCgkJYWRkRGF0YTogZnVuY3Rpb24oZ2VvanNvbikgew0KCQkJdmFyIGNyczsNCg0KCQkJaWYgKGdlb2pzb24pIHsNCgkJCQlpZiAoZ2VvanNvbi5jcnMgJiYgZ2VvanNvbi5jcnMudHlwZSA9PT0gJ25hbWUnKSB7DQoJCQkJCWNycyA9IG5ldyBMLlByb2ouQ1JTKGdlb2pzb24uY3JzLnByb3BlcnRpZXMubmFtZSk7DQoJCQkJfSBlbHNlIGlmIChnZW9qc29uLmNycyAmJiBnZW9qc29uLmNycy50eXBlKSB7DQoJCQkJCWNycyA9IG5ldyBMLlByb2ouQ1JTKGdlb2pzb24uY3JzLnR5cGUgKyAnOicgKyBnZW9qc29uLmNycy5wcm9wZXJ0aWVzLmNvZGUpOw0KCQkJCX0NCg0KCQkJCWlmIChjcnMgIT09IHVuZGVmaW5lZCkgew0KCQkJCQl0aGlzLm9wdGlvbnMuY29vcmRzVG9MYXRMbmcgPSBmdW5jdGlvbihjb29yZHMpIHsNCgkJCQkJCXZhciBwb2ludCA9IEwucG9pbnQoY29vcmRzWzBdLCBjb29yZHNbMV0pOw0KCQkJCQkJcmV0dXJuIGNycy5wcm9qZWN0aW9uLnVucHJvamVjdChwb2ludCk7DQoJCQkJCX07DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBCYXNlIGNsYXNzJyBhZGREYXRhIG1pZ2h0IGNhbGwgdXMgcmVjdXJzaXZlbHksIGJ1dA0KCQkJLy8gQ1JTIHNob3VsZG4ndCBiZSBjbGVhcmVkIGluIHRoYXQgY2FzZSwgc2luY2UgQ1JTIGFwcGxpZXMNCgkJCS8vIHRvIHRoZSB3aG9sZSBHZW9KU09OLCBpbmx1ZGluZyBzdWItZmVhdHVyZXMuDQoJCQl0aGlzLl9jYWxsTGV2ZWwrKzsNCgkJCXRyeSB7DQoJCQkJTC5HZW9KU09OLnByb3RvdHlwZS5hZGREYXRhLmNhbGwodGhpcywgZ2VvanNvbik7DQoJCQl9IGZpbmFsbHkgew0KCQkJCXRoaXMuX2NhbGxMZXZlbC0tOw0KCQkJCWlmICh0aGlzLl9jYWxsTGV2ZWwgPT09IDApIHsNCgkJCQkJZGVsZXRlIHRoaXMub3B0aW9ucy5jb29yZHNUb0xhdExuZzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5nZW9Kc29uID0gZnVuY3Rpb24oZ2VvanNvbiwgb3B0aW9ucykgew0KCQlyZXR1cm4gbmV3IEwuUHJvai5HZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpOw0KCX07DQoNCglMLlByb2ouSW1hZ2VPdmVybGF5ID0gTC5JbWFnZU92ZXJsYXkuZXh0ZW5kKHsNCgkJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgYm91bmRzLCBvcHRpb25zKSB7DQoJCQlMLkltYWdlT3ZlcmxheS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHVybCwgbnVsbCwgb3B0aW9ucyk7DQoJCQl0aGlzLl9wcm9qZWN0ZWRCb3VuZHMgPSBib3VuZHM7DQoJCX0sDQoNCgkJLy8gRGFuZ2VyIGFoZWFkOiBPdmVycmlkaW5nIGludGVybmFsIG1ldGhvZHMgaW4gTGVhZmxldC4NCgkJLy8gRGVjaWRlZCB0byBkbyB0aGlzIHJhdGhlciB0aGFuIG1ha2luZyBhIGNvcHkgb2YgTC5JbWFnZU92ZXJsYXkNCgkJLy8gYW5kIGRvaW5nIHZlcnkgdGlueSBtb2RpZmljYXRpb25zIHRvIGl0Lg0KCQkvLyBGdXR1cmUgd2lsbCB0ZWxsIGlmIHRoaXMgd2FzIHdpc2Ugb3Igbm90Lg0KCQlfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChldmVudCkgew0KCQkJdmFyIHNjYWxlID0gdGhpcy5fbWFwLmdldFpvb21TY2FsZShldmVudC56b29tKTsNCgkJCXZhciBub3J0aFdlc3QgPSBMLnBvaW50KHRoaXMuX3Byb2plY3RlZEJvdW5kcy5taW4ueCwgdGhpcy5fcHJvamVjdGVkQm91bmRzLm1heC55KTsNCgkJCXZhciBvZmZzZXQgPSB0aGlzLl9wcm9qZWN0ZWRUb05ld0xheWVyUG9pbnQobm9ydGhXZXN0LCBldmVudC56b29tLCBldmVudC5jZW50ZXIpOw0KDQoJCQlMLkRvbVV0aWwuc2V0VHJhbnNmb3JtKHRoaXMuX2ltYWdlLCBvZmZzZXQsIHNjYWxlKTsNCgkJfSwNCg0KCQlfcmVzZXQ6IGZ1bmN0aW9uICgpIHsNCgkJCXZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTsNCgkJCXZhciBwaXhlbE9yaWdpbiA9IHRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpOw0KCQkJdmFyIGJvdW5kcyA9IEwuYm91bmRzKA0KCQkJCXRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qZWN0ZWRCb3VuZHMubWluLCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pLA0KCQkJCXRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qZWN0ZWRCb3VuZHMubWF4LCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pDQoJCQkpOw0KCQkJdmFyIHNpemUgPSBib3VuZHMuZ2V0U2l6ZSgpOw0KDQoJCQlMLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5faW1hZ2UsIGJvdW5kcy5taW4pOw0KCQkJdGhpcy5faW1hZ2Uuc3R5bGUud2lkdGggPSBzaXplLnggKyAncHgnOw0KCQkJdGhpcy5faW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JzsNCgkJfSwNCg0KCQlfcHJvamVjdGVkVG9OZXdMYXllclBvaW50OiBmdW5jdGlvbiAocG9pbnQsIHpvb20sIGNlbnRlcikgew0KCQkJdmFyIHZpZXdIYWxmID0gdGhpcy5fbWFwLmdldFNpemUoKS5fZGl2aWRlQnkoMik7DQoJCQl2YXIgbmV3VG9wTGVmdCA9IHRoaXMuX21hcC5wcm9qZWN0KGNlbnRlciwgem9vbSkuX3N1YnRyYWN0KHZpZXdIYWxmKS5fcm91bmQoKTsNCgkJCXZhciB0b3BMZWZ0ID0gbmV3VG9wTGVmdC5hZGQodGhpcy5fbWFwLl9nZXRNYXBQYW5lUG9zKCkpOw0KDQoJCQlyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHBvaW50LCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCk7DQoJCX0sDQoNCgkJX3RyYW5zZm9ybTogZnVuY3Rpb24gKHBvaW50LCB6b29tKSB7DQoJCQl2YXIgY3JzID0gdGhpcy5fbWFwLm9wdGlvbnMuY3JzOw0KCQkJdmFyIHRyYW5zZm9ybWF0aW9uID0gY3JzLnRyYW5zZm9ybWF0aW9uOw0KCQkJdmFyIHNjYWxlID0gY3JzLnNjYWxlKHpvb20pOw0KDQoJCQlyZXR1cm4gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5pbWFnZU92ZXJsYXkgPSBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHsNCgkJcmV0dXJuIG5ldyBMLlByb2ouSW1hZ2VPdmVybGF5KHVybCwgYm91bmRzLCBvcHRpb25zKTsNCgl9Ow0KDQoJcmV0dXJuIEwuUHJvajsNCn0pKTsNCg=="></script>
<link href="data:text/css,%2Eleaflet%2Dtooltip%2Eleaflet%2Dtooltip%2Dtext%2Donly%2C%0A%2Eleaflet%2Dtooltip%2Eleaflet%2Dtooltip%2Dtext%2Donly%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Eleaflet%2Dtooltip%2Dtext%2Donly%3Aafter%20%7B%0Abackground%3A%20none%3B%0Aborder%3A%20none%3B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Eleaflet%2Dtooltip%2Dtext%2Donly%2Eleaflet%2Dtooltip%2Dleft%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Eleaflet%2Dtooltip%2Dtext%2Donly%2Eleaflet%2Dtooltip%2Dright%20%7B%0Amargin%2Dleft%3A%20%2D5px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%3Aafter%20%7B%0Aborder%2Dright%3A%206px%20solid%20transparent%3B%0A%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0A%0Apointer%2Devents%3A%20all%3B%0A%0Acursor%3A%20pointer%3B%0A%7D%0A%0A%2Eleaflet%2Dmap%2Dpane%20%7B%0Az%2Dindex%3A%20auto%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitpKyInIik7dGhyb3cgYS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzWyJkZWZhdWx0Il0gPSB1bmRlZmluZWQ7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0KCmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9Cgp2YXIgQ2x1c3RlckxheWVyU3RvcmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIENsdXN0ZXJMYXllclN0b3JlKGdyb3VwKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2x1c3RlckxheWVyU3RvcmUpOwoKICAgIHRoaXMuX2xheWVycyA9IHt9OwogICAgdGhpcy5fZ3JvdXAgPSBncm91cDsKICB9CgogIF9jcmVhdGVDbGFzcyhDbHVzdGVyTGF5ZXJTdG9yZSwgW3sKICAgIGtleTogImFkZCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKGxheWVyLCBpZCkgewogICAgICBpZiAodHlwZW9mIGlkICE9PSAidW5kZWZpbmVkIiAmJiBpZCAhPT0gbnVsbCkgewogICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRdKSB7CiAgICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRdKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgICAgfQoKICAgICAgdGhpcy5fZ3JvdXAuYWRkTGF5ZXIobGF5ZXIpOwogICAgfQogIH0sIHsKICAgIGtleTogInJlbW92ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKGlkKSB7CiAgICAgIGlmICh0eXBlb2YgaWQgPT09ICJ1bmRlZmluZWQiIHx8IGlkID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZCA9ICgwLCBfdXRpbC5hc0FycmF5KShpZCk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZFtpXV0pIHsKICAgICAgICAgIHRoaXMuX2dyb3VwLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1tpZFtpXV0pOwoKICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRbaV1dOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgdGhpcy5fbGF5ZXJzID0ge307CgogICAgICB0aGlzLl9ncm91cC5jbGVhckxheWVycygpOwogICAgfQogIH1dKTsKCiAgcmV0dXJuIENsdXN0ZXJMYXllclN0b3JlOwp9KCk7CgpleHBvcnRzWyJkZWZhdWx0Il0gPSBDbHVzdGVyTGF5ZXJTdG9yZTsKCgp9LHsiLi91dGlsIjoxN31dLDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9CgpmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfQoKdmFyIENvbnRyb2xTdG9yZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgZnVuY3Rpb24gQ29udHJvbFN0b3JlKG1hcCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbnRyb2xTdG9yZSk7CgogICAgdGhpcy5fY29udHJvbHNOb0lkID0gW107CiAgICB0aGlzLl9jb250cm9sc0J5SWQgPSB7fTsKICAgIHRoaXMuX21hcCA9IG1hcDsKICB9CgogIF9jcmVhdGVDbGFzcyhDb250cm9sU3RvcmUsIFt7CiAgICBrZXk6ICJhZGQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChjb250cm9sLCBpZCwgaHRtbCkgewogICAgICBpZiAodHlwZW9mIGlkICE9PSAidW5kZWZpbmVkIiAmJiBpZCAhPT0gbnVsbCkgewogICAgICAgIGlmICh0aGlzLl9jb250cm9sc0J5SWRbaWRdKSB7CiAgICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbCh0aGlzLl9jb250cm9sc0J5SWRbaWRdKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpOwogICAgICB9CgogICAgICB0aGlzLl9tYXAuYWRkQ29udHJvbChjb250cm9sKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldChpZCkgewogICAgICB2YXIgY29udHJvbCA9IG51bGw7CgogICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgIGNvbnRyb2wgPSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICB9CgogICAgICByZXR1cm4gY29udHJvbDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJyZW1vdmUiLAogICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZShpZCkgewogICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2lkXTsKCiAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2woY29udHJvbCk7CgogICAgICAgIGRlbGV0ZSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzTm9JZC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNOb0lkW2ldOwoKICAgICAgICB0aGlzLl9tYXAucmVtb3ZlQ29udHJvbChjb250cm9sKTsKICAgICAgfQoKICAgICAgdGhpcy5fY29udHJvbHNOb0lkID0gW107CgogICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5fY29udHJvbHNCeUlkKSB7CiAgICAgICAgdmFyIF9jb250cm9sID0gdGhpcy5fY29udHJvbHNCeUlkW2tleV07CgogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKF9jb250cm9sKTsKICAgICAgfQoKICAgICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ29udHJvbFN0b3JlOwp9KCk7CgpleHBvcnRzWyJkZWZhdWx0Il0gPSBDb250cm9sU3RvcmU7CgoKfSx7fV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5nZXRDUlMgPSBnZXRDUlM7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3Byb2o0bGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL3Byb2o0bGVhZmxldCIpOwoKdmFyIF9wcm9qNGxlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvajRsZWFmbGV0KTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICJkZWZhdWx0Ijogb2JqIH07IH0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBpbnN0YW5jaWF0ZSBhIElDUlMgaW5zdGFuY2UuCmZ1bmN0aW9uIGdldENSUyhjcnNPcHRpb25zKSB7CiAgdmFyIGNycyA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLkNSUy5FUFNHMzg1NzsgLy8gRGVmYXVsdCBTcGhlcmljYWwgTWVyY2F0b3IKCiAgc3dpdGNoIChjcnNPcHRpb25zLmNyc0NsYXNzKSB7CiAgICBjYXNlICJMLkNSUy5FUFNHMzg1NyI6CiAgICAgIGNycyA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLkNSUy5FUFNHMzg1NzsKICAgICAgYnJlYWs7CgogICAgY2FzZSAiTC5DUlMuRVBTRzQzMjYiOgogICAgICBjcnMgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5DUlMuRVBTRzQzMjY7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgIkwuQ1JTLkVQU0czMzk1IjoKICAgICAgY3JzID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uQ1JTLkVQU0czMzk1OwogICAgICBicmVhazsKCiAgICBjYXNlICJMLkNSUy5TaW1wbGUiOgogICAgICBjcnMgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5DUlMuU2ltcGxlOwogICAgICBicmVhazsKCiAgICBjYXNlICJMLlByb2ouQ1JTIjoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLmJvdW5kcyA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLmJvdW5kcyhjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKTsKICAgICAgfQoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb24pIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb24gPSBuZXcgX2xlYWZsZXQyWyJkZWZhdWx0Il0uVHJhbnNmb3JtYXRpb24oY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzBdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMV0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsyXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzNdKTsKICAgICAgfQoKICAgICAgY3JzID0gbmV3IF9wcm9qNGxlYWZsZXQyWyJkZWZhdWx0Il0uQ1JTKGNyc09wdGlvbnMuY29kZSwgY3JzT3B0aW9ucy5wcm9qNGRlZiwgY3JzT3B0aW9ucy5vcHRpb25zKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSAiTC5Qcm9qLkNSUy5UTVMiOgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uYm91bmRzKGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpOwogICAgICB9CgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbikgewogICAgICAgIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbiA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLlRyYW5zZm9ybWF0aW9uKGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblswXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzFdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMl0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblszXSk7CiAgICAgIH0gLy8gTC5Qcm9qLkNSUy5UTVMgaXMgZGVwcmVjYXRlZCBhcyBvZiBMZWFmbGV0IDEueCwgZmFsbCBiYWNrIHRvIEwuUHJvai5DUlMKICAgICAgLy9jcnMgPSBuZXcgUHJvajRMZWFmbGV0LkNSUy5UTVMoY3JzT3B0aW9ucy5jb2RlLCBjcnNPcHRpb25zLnByb2o0ZGVmLCBjcnNPcHRpb25zLnByb2plY3RlZEJvdW5kcywgY3JzT3B0aW9ucy5vcHRpb25zKTsKCgogICAgICBjcnMgPSBuZXcgX3Byb2o0bGVhZmxldDJbImRlZmF1bHQiXS5DUlMoY3JzT3B0aW9ucy5jb2RlLCBjcnNPcHRpb25zLnByb2o0ZGVmLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICB9CgogIHJldHVybiBjcnM7Cn0KCgp9LHsiLi9nbG9iYWwvbGVhZmxldCI6MTAsIi4vZ2xvYmFsL3Byb2o0bGVhZmxldCI6MTF9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzWyJkZWZhdWx0Il0gPSB1bmRlZmluZWQ7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0KCmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9Cgp2YXIgRGF0YUZyYW1lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBEYXRhRnJhbWUoKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0YUZyYW1lKTsKCiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CiAgICB0aGlzLmVmZmVjdGl2ZUxlbmd0aCA9IDA7CiAgICB0aGlzLmNvbGluZGljZXMgPSB7fTsKICB9CgogIF9jcmVhdGVDbGFzcyhEYXRhRnJhbWUsIFt7CiAgICBrZXk6ICJfdXBkYXRlQ2FjaGVkUHJvcGVydGllcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICB0aGlzLmVmZmVjdGl2ZUxlbmd0aCA9IDA7CiAgICAgIHRoaXMuY29saW5kaWNlcyA9IHt9OwogICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpKSB7CiAgICAgICAgX3RoaXMuZWZmZWN0aXZlTGVuZ3RoID0gTWF0aC5tYXgoX3RoaXMuZWZmZWN0aXZlTGVuZ3RoLCBjb2x1bW4ubGVuZ3RoKTsKICAgICAgICBfdGhpcy5jb2xpbmRpY2VzW190aGlzLmNvbG5hbWVzW2ldXSA9IGk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogIl9jb2xJbmRleCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX2NvbEluZGV4KGNvbG5hbWUpIHsKICAgICAgdmFyIGluZGV4ID0gdGhpcy5jb2xpbmRpY2VzW2NvbG5hbWVdOwogICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAidW5kZWZpbmVkIikgcmV0dXJuIC0xOwogICAgICByZXR1cm4gaW5kZXg7CiAgICB9CiAgfSwgewogICAga2V5OiAiY29sIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjb2wobmFtZSwgdmFsdWVzLCBzdHJpY3QpIHsKICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAic3RyaW5nIikgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbHVtbiBuYW1lIFwiIiArIG5hbWUgKyAiXCIiKTsKCiAgICAgIHZhciBpbmRleCA9IHRoaXMuX2NvbEluZGV4KG5hbWUpOwoKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbDtlbHNlIHJldHVybiAoMCwgX3V0aWwucmVjeWNsZSkodGhpcy5jb2x1bW5zW2luZGV4XSwgdGhpcy5lZmZlY3RpdmVMZW5ndGgpOwogICAgICB9CgogICAgICBpZiAoaW5kZXggPCAwKSB7CiAgICAgICAgaW5kZXggPSB0aGlzLmNvbG5hbWVzLmxlbmd0aDsKICAgICAgICB0aGlzLmNvbG5hbWVzLnB1c2gobmFtZSk7CiAgICAgIH0KCiAgICAgIHRoaXMuY29sdW1uc1tpbmRleF0gPSAoMCwgX3V0aWwuYXNBcnJheSkodmFsdWVzKTsKICAgICAgdGhpcy5jb2xzdHJpY3RbaW5kZXhdID0gISFzdHJpY3Q7IC8vIFRPRE86IFZhbGlkYXRlIHN0cmljdG5lc3MgKGVuc3VyZSBsZW5ndGhzIG1hdGNoIHVwIHdpdGggb3RoZXIgc3RyaWN0cykKCiAgICAgIHRoaXMuX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMoKTsKCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIH0sIHsKICAgIGtleTogImNiaW5kIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjYmluZChvYmosIHN0cmljdCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkgewogICAgICAgIHZhciBjb2xkYXRhID0gb2JqW25hbWVdOwoKICAgICAgICBfdGhpczIuY29sKG5hbWUsIGNvbGRhdGEpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQocm93LCBjb2wsIG1pc3NpbmdPSykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIGlmIChyb3cgPiB0aGlzLmVmZmVjdGl2ZUxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCJSb3cgYXJndW1lbnQgd2FzIG91dCBvZiBib3VuZHM6ICIgKyByb3cgKyAiID4gIiArIHRoaXMuZWZmZWN0aXZlTGVuZ3RoKTsKICAgICAgdmFyIGNvbEluZGV4ID0gLTE7CgogICAgICBpZiAodHlwZW9mIGNvbCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICB2YXIgcm93RGF0YSA9IHt9OwogICAgICAgIHRoaXMuY29sbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSwgaSkgewogICAgICAgICAgcm93RGF0YVtuYW1lXSA9IF90aGlzMy5jb2x1bW5zW2ldW3JvdyAlIF90aGlzMy5jb2x1bW5zW2ldLmxlbmd0aF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHJvd0RhdGE7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbCA9PT0gInN0cmluZyIpIHsKICAgICAgICBjb2xJbmRleCA9IHRoaXMuX2NvbEluZGV4KGNvbCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbCA9PT0gIm51bWJlciIpIHsKICAgICAgICBjb2xJbmRleCA9IGNvbDsKICAgICAgfQoKICAgICAgaWYgKGNvbEluZGV4IDwgMCB8fCBjb2xJbmRleCA+IHRoaXMuY29sdW1ucy5sZW5ndGgpIHsKICAgICAgICBpZiAobWlzc2luZ09LKSByZXR1cm4gdm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbHVtbiBpbmRleDogIiArIGNvbCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbY29sSW5kZXhdW3JvdyAlIHRoaXMuY29sdW1uc1tjb2xJbmRleF0ubGVuZ3RoXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJucm93IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBucm93KCkgewogICAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gRGF0YUZyYW1lOwp9KCk7CgpleHBvcnRzWyJkZWZhdWx0Il0gPSBEYXRhRnJhbWU7CgoKfSx7Ii4vdXRpbCI6MTd9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgImRlZmF1bHQiOiBvYmogfTsgfQoKLy8gSW4gUk1hcmtkb3duJ3Mgc2VsZi1jb250YWluZWQgbW9kZSwgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBjYXJyeSBhcm91bmQgdGhlCi8vIGltYWdlcyB0aGF0IExlYWZsZXQgbmVlZHMgYnV0IGRvZXNuJ3QgbG9hZCBpbnRvIHRoZSBwYWdlLiBJbnN0ZWFkLCB3ZSdsbCBzZXQKLy8gZGF0YSBVUklzIGZvciB0aGUgZGVmYXVsdCBtYXJrZXIsIGFuZCBsZXQgYW55IG90aGVycyBiZSBsb2FkZWQgdmlhIENETi4KaWYgKHR5cGVvZiBfbGVhZmxldDJbImRlZmF1bHQiXS5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID09PSAidW5kZWZpbmVkIikgewogIC8vIGlmIGluIGEgbG9jYWwgZmlsZSwgc3VwcG9ydCBodHRwCiAgc3dpdGNoICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpIHsKICAgIGNhc2UgImh0dHA6IjoKICAgICAgLy8gZG9uJ3QgZm9yY2UgaHR0cCBzaXRlIHRvIGJlIGRvbmUgd2l0aCBodHRwcwogICAgICBfbGVhZmxldDJbImRlZmF1bHQiXS5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gImh0dHA6Ly9jZG4ubGVhZmxldGpzLmNvbS9sZWFmbGV0L3YxLjMuMS9pbWFnZXMvIjsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgLy8gZmlsZQogICAgICAvLyBodHRwcwogICAgICAvLyBvdGhlcndpc2UgdXNlIGh0dHBzIGFzIGl0IHdvcmtzIG9uIGZpbGVzIGFuZCBodHRwcwogICAgICBfbGVhZmxldDJbImRlZmF1bHQiXS5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gImh0dHBzOi8vdW5wa2cuY29tL2xlYWZsZXRAMS4zLjEvZGlzdC9pbWFnZXMvIjsKICAgICAgYnJlYWs7CiAgfSAvLyBkb24ndCBrbm93IGhvdyB0byBtYWtlIHRoaXMgZGF0YVVSSSB3b3JrIHNpbmNlCiAgLy8gIHdpbGwgYmUgYXBwZW5kZWQgdG8gRGVmYXVsLmltYWdlUGF0aCBhYm92ZQoKICAvKgogIGlmIChMLkJyb3dzZXIucmV0aW5hKSB7CiAgICBMLkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9ucy5pY29uVXJsID0gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFCU0NBWUFBQUFXeTRmckFBQVBpRWxFUVZSNDJ0MWJDVkNVNXhrbWJhYnRaSkpPTytsMG1oZ1QweVFlMFdYWmd6MjU3ME5COEk2SjZVemFUQm9PUlJGRXJ1VkdEaFdVUFJBUVJGRlJFRG5WeEN0RUJSYjI0REJORTNXYWFhdHBrbWx1bzRtK2ZkOXY5OTlvbEdWQkR1M09QTGorLy9zKzcvVzkzL2Y5Ly82L0V3QTQvVDlnM0FsRk9VZWVVR1IydU1xek95SmsyUjJ4MHF5T0Ftbm1rUzNTckNQclpKbEhsc3F6anlwY3M0OU9YMUpmLy9QN0toRDg4NUEwdTEwbXkyb3ZRc2N2eWJJNndFRjhpdkk3cEZudEFWNnFrdzlQV1NCSzFiRW5aUmx0bTJXWjdSOGg0RmJJMFZHMzNHUGdYWGdDQXJhK0E0RUluOEtUNEpIL0ZpZ29pSi9JSXo2VFpiVlZLTExhbjV1MFFFU3Fsa2NrV1czcDBzeTJieERBZ1p3TzEzVER5dG9CK05QZTkremlsZDJERUZHdUI3L05wekRvZHJpRjU1bzBvN1hJUlhYb054TWFpQ1NqOVZVMDlDOEVFTnh5ajBDNHRodGVyaDJFVit2ZXV3T3I2czdEeTNzc29POTNrM2xsenhCRTZQVGdrWGNNT0Y3RUo5S010cWpSOUpGRFFuTlY5YitRcWxxcUVFQ1FaN1RCZ3UxbllkWHVJWGdWbmVTd1l0Y2dSRmIxUTFpRkdVTEx6UkNzTTkwR09yWmdoeGtpS3Z0aGVjMGdyTHBGbHhDdTZjS2gxdzZjSFVTYmN0UGh4OFlsRUVsdTQrTlNWZk5wQkJBQ3RweUdsYnNHbUJPRWxSaE1CRG9mZ2s0R29iT2pRWEM1Q1JaaVVDL1ZEdG40cUxyQkpaM0EyY05nK25FNFAzMVBnU0RCYkltcTVVTkplak1RRnFpN2NDaWNaM2laQlRBQVFWb1RCSTRES0tDVkdCREhINm5yQlJsV3hXcjdzbGpWSWhsVElETFZvUmtTMWVIL1NOSVBnenl6RlJaVjlObkcrK0xxUWN5b0dRTFFnZkZFSUZZcGN1ZUF6YzZTU2lNT3RUWWdIOUNYcitXcFRieFJCZUtscW45VWt0WmtSb0FDWjVQbE84MVlnZk1NNFJYOUVLQXhUU2pDZHZUakVMUFlXMTdkRDhyc2RpQmZFQmNsU1kyUE94UUlIbmxJa25yb0VBSms2VTJ3cE1MSVNGL2FOUVNoV0FWL3RXbFNFSUsyVnFCTnNyMjAwZ1J5R21Mb2t5UzE4Y1RkRnRBN0FuRk5iY3hBQUNHTXJRdERMQWpxQlQrMWNWSkJOc2syK2JCUTF3T2NYNUsweHMxMkE4R3l6WFJOYWZnZUFZRmIzbUVrckJJNEkvbVdHVWVOUUkxbHlwMlBvTzlqNGFES2NINEViZTBFOGczeGd5eWxjYzZ3Z2JpbU5qU1NvRnRXSzFzVHFMUmgyQk0rU09nSWZER0xKTDhJRzNaWmpVWC9WaXl2R1lMRk93ZFpuL2xqWUk3eXpzZWU0VGpjc1YvSVIzRnFRK3RkQXhFbk5TakZ5UWVCRUs3cGdSVm9kRW5WSVBoc056cUVZSzBabHVGc1JucTNZakgyMktKeUE2ejR5VG1TcFo1emxIOFJUdldrdDFDckI4NVBZVXFqengyQnVHNnNQeWZlZUFBOHNqdHdwaGhpQ0ZTYndYdWIwUzdJU1BpT0Fadk80aDA0OHhTZkJNK2NEcERpZUNaT2dnU3o2SkhkQnY1RkozQ042TFBKUjFRTWdPOTIwNGgyYUFMZ2REeHpqbHA0a3c4WWFIS3lCU0pKUGlnV2I2d0hRaVJtYnhrS0wwUURYa2hnRDk0WXhHS3NHc2tUUWt2ZnhWbmxJSEJjQk5ma2Vneml3QjNIQW5IRHVHeW5SWGNwL3V0WFpoclJIaVdNNUNQTGpiZHdIVkRZQWhGdDNKOHJUdG9QYnBrdFNEckU0SU5aOGl3MTJrVVlFcFBzNGtvemVPVzBBM0VRSW92YlljZnhJVGo3OTh2d3hiZlg0T3IxSDhCNDZST283ZndidktZOWJwTnp5MmhtaVNPT3lNckJFZTJSVDV4Lzd0akh4Q0ZLMmwvNFl5QkorOTVIUUFCbWliS3pFSnZSczlSZ0Y0RnFFNU1sZUdTM0F1bUxOKzZENGxZamZJZU9EL2U1ZVJPZzdzejdvRWc3d0hSazZZM1lpLzJNSndUN2JDUzc1QnZKQnVHc1N2cUlEMWdnYUh5ZWFBTWVRRVJneWFqQmczQkc4U2d4REFzdkpGeFVPY0JrZzdkME1sM1hqZnVoQ3l2ZzZPZml4MStBbDZxQjZmcHVlb3R4c2NrRmg1QTkyK1FieWRIdzR2eW1HSnhFRytyV2lSTDNnb0pXY1N3dndiUEVDTzViRGNNaVJHTm1jaFM0YTFJOWtQNjJEaE9NOXRQYWQ0bnBFaGFVZFRQT3NQSit1N2JKTjg1UHBhcUo2WW9UNnhLY1JJbDFwUWp3eEl1a3hYaHlJWTU3TjFTd2g3RHlBU2JybTM4TVNIZFJVU3RjKy80R2pPVVRWMzJhY2JobE5qTk82cFdSN0ZQVGs2eFgzbEdtSzB5czB6cmhuMFpod2g3d0szaWJuVnlnNndlM0xRYTdXRlF4eUdTcGlxUmJlL284alBYVGUrRUs0eERqRUNIT3hkWVJZYzgrK1VoeWZnWEhtYTV3L1o1bUorSDYzVDNDaE4zWTZPL2d1TWN4ajhOR2ljTERnWXlRM0NLY25zVWJNQnVvYTdqNDhaZ0QrZXJxZGN6cWJzWVRwdWxqM0xTdTJQT0JmQ1E1OHBuMEVIMU93b1RhZnd2WDErSlYyVm1JeEV3SGxKbEJzZGt3TEh5Mm1aamNnakk5a0o0WW5iaDYvWHU0bDA5WWZoUGpDc1NKZzdocEliYm5nLzkyTTVNam4wa1BjZGxKR0YvN0pRSkNTcnNnQXNlZUh6b3FMKzRiRm5TZTVFSkt6Z0hwZWFUc2czdjlyQ3J0WUZ6K2hTY1pkekFHWXM4SFg4NEg5Sm4wS0FZblFmeXVJUVQ0WTVtbzBha2lNaFFlRGg0NHRFZ3VYR2NFMGlQODQ1TXZ4eHpFalJzM1FaNVV4M2hDdG5VeGJxcTZQUi84Y1JkQWN1U3oxWWZ6R0VoTm0yQmREZmprdncwTGNUWUtva0NLK29hRkFvbElqaURGQllsMDIvb3VqRG1RQzFjK1p4ekMrQm9JcDJ0MzVIWEhQckRuQS9sSWN1UXo2U0tPT0FuV1Zxc1JiSHNjamlkRE5mMGdSV0Y3Q05YMk0xbDNWVE9RYm1wZDU1Z0RxVDAxeERoa21CVGlKTWhHc0IraXNkclBiR2U2d3JVMTVSakl6a1FFeUhCM0dxWWJZQ0FpU2VId0NNQm1JN21BWWl3dDZnclg3UVQ5aDVkSEhjUS9QL3NLbEVtN0dZZDM3bEhHR2FMdXQydGJpckQ1aVQ2VHJpQ3VLc1ZKc0xyQ3d5V3VpaDJZai91bk1DMlZGbGZzZ3I1aG9keHNaSElFWlZvVGtQNzg3QVB3N1RYSFp5L2FjLzI1ckozcFNwUDI0dFJyWm55ZVcwMTJiYnRaYlM5QWVmS1orYjZtTXRqSlM2VjZHUC96T1Izd0srcGtRbjdiekhiSkNDUkRzcUZsQnB6K2RqSENWN2Eyd01Vci94MHhpTSsrdWdwcnE0NWJuRmhiaGROb0YrTUtMT3QzMkM3NVN2cUliN3hVTzMvRmRyLzh1TXFETG1zcXdVM1ZpcEgyUXpBMmszaFRyMTFJQ25xWkhNbjdGK0hDRklmWlFRNUpmRFZVdlcxbXp2NzA4L1YzMTZGVi93RjRKZTloc2dTdjNHT01ZejcxSmc2YmtlelMwQ041TjFXTGhTT3Vzc1cyalJlc3Juek5aWFVGbTVQblcwbmwyQ2NpVkxRSGViSEJKaDlVMGcxUzNHWVFENGVRakgyUVdIMEMwdXR3MTVEWEFFSXliRDBueG9Vc1lQTVptejRONTlIWUUrSzBTenlDMk1vM2JJSHc0elRUK0t0MzNFU0FYL0ZaQ01Xb3ZVdE1JTXp2SFJGS0pBOUcrVkFHdko3SVBzS0dDM0hkRFlJNHFud3poSlFabVE1bDJBT0RjTVNXYjZtSjZmZ1duK0g0YnN4Yld6WDl0bXQybDlYbDdmelljcHdKR2hsNU1JNVhFU29MOGthR0tCOVhXd3c4eE9vWUlYQnJEM2h2T2duSzlCYkVZZHlwSHNjdFNCY0dZTGJKK0ZNdmJ1cHoyQWFuSjAxdUFQTFZKYWI4OEIwM0gxeGlkS0g4V0IwVENDcTFLTkVNNFlnUkRtN0ZSbHlzK204TDZHNmdKTG1Qa3B1cXhoSlUwc3Q4SkY4Rk1lVitkd1RpcEZMOXpEbEdld21CMXdZZHpKaC9xUmxjY250SERjcWV2QkN2Nk5CWjN4SXorQ0dQNXhZVEtJb01JTVp6bytVVElBSzNXUktnVUxVQitlZ2NyVHMvN0EwNlhwUTIwVGxhaStPNG1tMERLTHVTQWdQd2tXZ3FJY09ra0MrQk9CUmRWbGNDK2NpTDBrVU5HNGpvZGQzdm5LTTEzeUhBSy84VUJHNm5UQnJCT1VjL3BmREJSWko4OGNnOUR1UWJMMXJ6eGR3M3l4NjFleFBiT1Vhemk0UmQ4VnFZTWhCSXd5dW5GNXl6OVZNQ1VWNnZ4UStFQ0pjSDhzMDVTbE15NHQxNDV4aTFqQWtqZkl1N0dJRVN4ellQU2FjQzFHZmtnM2ZoR2JENmRkTWxWdnVDUXovMG9IQWZLY2xTbWlBQUswSk43NXpkQy9PeTlKTUthbkt5VHhCdk9HQUpKRWJkNGZBdlZyeG85VXVreE1mWndidTRod1dpS0RMQ1hDU2ZUTkFVVGJhOUNzNXgxU0Q0T0J3SW00cWpOUU9rS0UxdUJIK2FRa3NzVlptYnFaOFVDTEF2eVM1Qm5MRGYyaHZhRTZQK01aUWZwWW5nc3VCZDJBMStXN0VxQlVaNE1VTS9LWEF2TWpHYkh2bTIzZ0NYYUkxeVREOVBvN0tleldCSkI4RVhwMEFDRDBzK0o2Tm5Ra0d6SkdkUGxGREhCZEkrNXQvWitkR2FRQzRiSHB2T2dnK3V6bkpjSUdlcmVpWVV5a0lqcytXVzIybXJCaTlXTGJxbkp4OXdsdWdrSWxIaWZ2QkdjZ0xOS0xQUTRFU0ErcEN6STRqZnd5MkFqZmY4Q0FkdVd6eTRyTGpubldFR3FGZG1wZmRNQ0tnYVpFT1pjNXFyeGczbldNMjhjWG1vaGhldFBjcXFzbjR2ZUcwMk1jekRtV1ZtV3MrNHdqbXIxOFl2V0ZmTEJWSTNiazhIdWJ4WjVzcFZSWkhUeVF6SnNTb3ZvUEh4aEFLclFkeUtyRk5jRUQvd284cG5qdXZ6V3JnSGF5SnlJWTViejJJVHcxeWNKcDlQN1I0WDhMRENISy9MMmwwc0VINjB0bXJjSHp6alJldDR0TTloVmNrK3hRektOeG5HTFJEcU8rS1VaWjdncW5IZFpZMW14b1E4UVVmamxZd0kxdGFDQnk1WUJLcktjeW5kOXdUcU53dWZFZmhycXExN0tvMTZ3aDRGcFBGSzQ1WnRLRE5PZ25zaFpqRGZBSDlNN3I0bnlQT05qRXVhL2haWGphdjhOelRUSnZUaFRGNlVwcEp0RitKcXdBMk5FMTVVNmVGWmRHZ3NtSnZSeXppVWVCWElYN1BUMmh1YXpSUCtsS2tnYXZzemVNMThqVzBvVmNmQnJZQ3FZb1JuTjNhUEdsdzFpTU0xN2FpMUd0cXZuZC9RL0g1U252dkY3ZjEybGprY3owcHNVbVdCcFNvejBMblJnS3BCdWdxNkw4Q3V4U2tRZGU2a1BjQXNXcU43QW8xK3l6YVVhY2RBc2NrSTBqd0RQSlBVNVRCbWJPeGkvVVc2NHBRT3JqYys1LzFWL2R0SmZSSWJydzBLV0ZWV1YrSHc2R05EWkU2YUhwN2UwT1VRNXFUcm1ZNDhydy80c1JXVzNvalNwazM2SStXem83WS83aHlsK1pKdFhWSTdXSis0NWhyZ2FjejI5QTMyUVRJU3JDRHBpSkxidVdwOE9pdWg4akdZaW9mOGVUSHFERXRWS2tDR21aVlpxekk5c2NzdVNJWmtaWFRmS25ZSHQ4Tk5tTEszRmFReHBiOUdKejVqVmNITWNsV2hyRCtWZUhmUXNKTGtXcW9oVEdybHFuRlo5THJ1a1NsOTdZSVhwVTVrVmNITVN2REtUcHBuaE5tWThXa0pYWGNGblNNWlNZNmUzY08xcnVLeFUvNytDR1VTbmJuQ3RpNGJXakhiT0F2bEdPQXBkUHJKOWJlRGp0RTVraEZzYU9hcThkSHpNYVcvdkMvZTZLR01XbTRmbFlNa3U0Y05uVm1wUGVqOHVkdEExYUJ6cmxsNDdSR2pzL2FHK3ZYNzV0VWt5aWhsMWxLVlpuREZySXV5KzJBYU92OUV2QVgwblk3Uk9aZUVKcTRhRitnM3pQdnFIU3Rlak9Zdmx2R3VBMUZtTnh0Q00xUDE4QWNNZ2pBTHY5TXhZV2FYOVdjQmt0V3V1dTllRnFQTTRtYnZBemJFRWc1aDl0SHBMSU90UCtnN0hlTW5OSExWZUcvSmt2RjdZV3hjMzNqRHFxeTBaaG9FS292ek0xUDBEUFNkanRGdkc1WlZYTFAwdm4xOXozS3JWVHZJSEYzZllISGVDdnJ1SE4vQWJkTk4zUE82OSsxN2lMZ3pqclJ1eDhFbC9Td0lNZzBNOVAzSEc5SHFzUHYraFVyckpYRXZjemorQUFiUngrQWNYODhGMHYxQXZCbktBbmxURzhSbG41LzZMdUxIVzUvem9yVCtEMHdnMXFxOHk1eGZ1ODhDU3lDbkg1aDNkVy9aR1h2ZTh1T01aUldQMG5vOGNJRlk3K1lmc3dVUnJUMzZRTDA5ZmZzTXBwSFllZ1cvUDdDQldIdmxNT0dCZTUvOWp0ZGpZN1I4d2tUYitSOW1lWkE2bjJvSldBQUFBQUJKUlU1RXJrSmdnZz09IjsKICB9IGVsc2UgewogICAgTC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnMuaWNvblVybCA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJrQUFBQXBDQVlBQUFEQWs0TE9BQUFHbWtsRVFWUll3N1ZYZVV5VFp4anZObmZFTEZ1eUl6T2FiZXJtTVpFZVFDL09jbGtPNDlDcE9IWE9MSmwvQ0FVUnVZYlFpM0tMZ0VoYnJoWjFhRHdtYW9HcUtJSTZvZEFUbUgvc2NERmJkQzdMdkZxT0NjK2U5NXMyVkc1MFgvTExtL2Y0L1o3bmVZL25lMThhQU5DbUFyNUUveFpmMXVET2tUY0djV1I2aGw5MjQ3dFQ1VTdZNlNOdldzS1Q2M1A1OHFiZmVMSkc4TTVxY2dUa25ydnZyZERic1Q3TWwrdHY4Mlg2dlZ4SkUzM2FSbWdTeVl0Y1dWTXFYOTdZdjJKdlczOVVoUkUySHV5QkwrdCtnSzExMTZseTA2RWVXRk5sQW1IeGxRRTBPTWlWNm1RQ1NjdXNLUmxoUzNRTGVWSmRsMSsyM2g1ZFk0Rk5CM3RocmJZYm9xcHRFRmxwaFRDMWhTcEpuYlJ2eFA0Tldnc0U1Snl6ODZRTk5pLzVxU1VUR3VGazFndTU0dE45d3VLMndjM28rV2MxM1JDbXNvQndFcXpHY1pzeHN2Q1N5Lzl3SktmN1VXZjFtRVk4SldmZXdjNjdVVW9EYkRqUUMrRnFLNFFxTFZNR0dSOWQyd3VyS3pxQmszbnFJVC85ekx4UlJqZ1o5YnFRZ3ViK0Rkb2VDQzAzUThqKzBRaEZoQkhSL2VQM1UvekNsbjdVdStoaWhKMStiQk5mZkxJdm1reVAwZ3BCWldZWGhLdXNzSzZtQno1SFQ2TTFOcXBjcCttQkNQWG9zWVFmcmVrR3ZyamV3ZDU5L0d2S0NFN1RiSy8wNC9aVjVRWllWV21Ed0gxbUYzeGEyUTNyYTNEQkM1dkJUMW9QN1BUajRDMCtDY0w4YzdDMkN0ZWpxaHVDbnVJUUhhS0h6dmNSZlpwbnlsRmZYc1lKeDNwTkx3aEt6UkF3QWhFcUcwU3B1c0JIZkFLa3h3M3c0NjI3TVBob0NINzk4ejdzMFpuQkovTUVKYlpTYlhQaEVSMmloN3Ayb2svelNqMmNFSkRkNENBZSs1V1luQkNnUjJ1cnV5RXc2elJvVzYvRFdKL09lQVA4cGQvQkd0ek9aS3BHOG9rZTBTWDZHTW1SazZHRmx5QWM1OUszMk9URWluSUxSSlJjaGFoOEhRd05EOE40MzVaOVowRlkxRXF0eFVnKzBTTzZSSi9tbVh6NFZ1UytEcHhYQzNnWG1ad0lMN2RCU0g0ektFNTB3RVNmOHF3VmdyUDFFSWxUTzVKUDlJZ3UwYWV4ZGgyOEYxbG1BRUdKR2ZoN2pFNkVseU01UncvRkRjWUpqV2hiZWlCWW9ZTklwYzJGVC9TSUxpdnAwRjFpcERXazRCSUVvMlZ1b2RFSlVpZmhiaWx0bk5CSVhQVUZDTXB0aHRBeXF3cy9CUGxFRi9WYmFJeEVyZHhQcGhzVTdyY0NwOERvaEMrR3ZCSVBKUy90VzJqdHZUbW1BZXVOTzhCTk9ZUWVHOEcvMk96Q0ozcStzb1lCNWk2TmhNYUtyMTdGU2FsN0dJSGhldVYzdVNDWThxWVZ1RW0xY096cWRXcjdrdS9SMEJEb1RUK0RUK29oQ002L0NDdktMS080UkkrZFhQZUF1YU1xa3NhS3JaN0wzRkU1RklGYmtJY2VlT1oyT2NITzZ3SWhUa05vMGZmZ2pSR3hFcW9nWEhZVVBIZldBQy9sQURwd0djTFJZM2FlSzQvb1JHQ0tZY1pYUFZvZVgva2VsVllZOGRVR2Y4VjVFQlJiZ0pYVDVRSVBoUDllUEppNDI4SktPaUVZaFlYRkJxb3UyR3VoK3AvbUVCMS9SZk13NnJZN2N4Y2pUcm5lSTFGckR5dXpVU1JtOW1pd0VKeDhFL2dVbXFseXZIR2tuZWl3RXJSMjFGM3ROT0s1VGYweVhhVCtPN0RnQ3ZBTFRVQlhkTTRZaEMvSWF3UFUrMlBkdXFNdnVhUjZlb3hTd1VrNzVnZ3FzWUo3Vmljc253R0lrWkJTWEtPVXd3NzNXR1h5cVArSjIvYjljK2dpMVlBZy94cHdjazNnSnV1Y05yaDVKdkRQdlFyMFdGWGYwcGl5dDhmOC9XSTBoVjRwUnh4a1FaZEpEZkRKTk9BbU0wQWc4anlUNmh6MFdHWFd1UDk0WWgyamNmam1YQUd2SENNc2xSaW1ESFl1SHVEc3kyUXRIdUlhdnpuaGJZVVJxNVI1N0twekJCUlpLUEppOGVRZzQ4aDRqOFNEZG93aWZkSXJFVmRVK2diTzZRTnZSUnQ0WkJ0aFVhWmhVbmpsWU9iTmFnVjNrZW9lcnUzclU3cmN1Y2VxVTFtSkJ4eStCV1pZbE5FQkgrMGVINHZSaUIrT1l5YlUyaG5ibFlsVHZrSGluTTRtNTRZbnhTeWFaWVNGNlIzandnUDd1ZEtMR0lYNnIvbGJOYTlONnk1TUZ5bmpXRHRySGQ3NVp2VFlBUE8vNlJnRjBrNzZtUWxhM0ZHcTdkTytjSDhzS24wVm83bkRsbHdBaHF3TFBreHJId1dtSEpPbytBS0o0cmFiNU9nck03clZ1OGVXYjJQdTBEaDRlRGdYb09mdnA3WTdRZXFrblJtdmNUQkV5cTltL0hRUVNDU3o2TEhxM3oweXpzTnlTUmZNUzI1M3dsMkt5UkRiY1pQY2ZKS2pabVNFT2pjeHlpK1k4ZFVPdHNJRUg2UjJ3TnlrZHFya1lKMFJWOTJIMFc1OHBrZlFrN2NLZXZzTEsxMFB5OFNkTUdmWE5YQVRZK3BQYnlKUi9FVDZuOW5JZnp0TnRaWVJWOVhuaVF1OUlBMnZPVmd5NGlyN0dDTFZtbWQremprSDBlQUY5UG82SzYxcG1DWEh4VTVySE1ZZDFmdGMzb3dqd1JTVlJ6TGpLdnFaRXR5NmNSVUQ3akdxaU9kdTVIRzZNZEhqTmNOWUdxZkRtNVlSekxCQkNDRGwvMmJrOGE4Z2RicWNmd0VDdTYyRmcvSHJnZ0FBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfQogICovCgp9CgoKfSx7Ii4vZ2xvYmFsL2xlYWZsZXQiOjEwfV0sNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICJkZWZhdWx0Ijogb2JqIH07IH0KCi8vIGFkZCB0ZXh4dHNpemUsIHRleHRPbmx5LCBhbmQgc3R5bGUKX2xlYWZsZXQyWyJkZWZhdWx0Il0uVG9vbHRpcC5wcm90b3R5cGUub3B0aW9ucy50ZXh0c2l6ZSA9ICIxMHB4IjsKX2xlYWZsZXQyWyJkZWZhdWx0Il0uVG9vbHRpcC5wcm90b3R5cGUub3B0aW9ucy50ZXh0T25seSA9IGZhbHNlOwpfbGVhZmxldDJbImRlZmF1bHQiXS5Ub29sdGlwLnByb3RvdHlwZS5vcHRpb25zLnN0eWxlID0gbnVsbDsgLy8gY29weSBvcmlnaW5hbCBsYXlvdXQgdG8gbm90IGNvbXBsZXRlbHkgc3RvbXAgaXQuCgp2YXIgaW5pdExheW91dE9yaWdpbmFsID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uVG9vbHRpcC5wcm90b3R5cGUuX2luaXRMYXlvdXQ7CgpfbGVhZmxldDJbImRlZmF1bHQiXS5Ub29sdGlwLnByb3RvdHlwZS5faW5pdExheW91dCA9IGZ1bmN0aW9uICgpIHsKICBpbml0TGF5b3V0T3JpZ2luYWwuY2FsbCh0aGlzKTsKICB0aGlzLl9jb250YWluZXIuc3R5bGUuZm9udFNpemUgPSB0aGlzLm9wdGlvbnMudGV4dHNpemU7CgogIGlmICh0aGlzLm9wdGlvbnMudGV4dE9ubHkpIHsKICAgIF9sZWFmbGV0MlsiZGVmYXVsdCJdLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAibGVhZmxldC10b29sdGlwLXRleHQtb25seSIpOwogIH0KCiAgaWYgKHRoaXMub3B0aW9ucy5zdHlsZSkgewogICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcy5vcHRpb25zLnN0eWxlKSB7CiAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZVtwcm9wZXJ0eV0gPSB0aGlzLm9wdGlvbnMuc3R5bGVbcHJvcGVydHldOwogICAgfQogIH0KfTsKCgp9LHsiLi9nbG9iYWwvbGVhZmxldCI6MTB9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgImRlZmF1bHQiOiBvYmogfTsgfQoKdmFyIHByb3RvY29sUmVnZXggPSAvXlwvXC8vOwoKdmFyIHVwZ3JhZGVfcHJvdG9jb2wgPSBmdW5jdGlvbiB1cGdyYWRlX3Byb3RvY29sKHVybFRlbXBsYXRlKSB7CiAgaWYgKHByb3RvY29sUmVnZXgudGVzdCh1cmxUZW1wbGF0ZSkpIHsKICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICJmaWxlOiIpIHsKICAgICAgLy8gaWYgaW4gYSBsb2NhbCBmaWxlLCBzdXBwb3J0IGh0dHAKICAgICAgLy8gaHR0cCBzaG91bGQgYXV0byB1cGdyYWRlIGlmIG5lY2Vzc2FyeQogICAgICB1cmxUZW1wbGF0ZSA9ICJodHRwOiIgKyB1cmxUZW1wbGF0ZTsKICAgIH0KICB9CgogIHJldHVybiB1cmxUZW1wbGF0ZTsKfTsKCnZhciBvcmlnaW5hbExUaWxlTGF5ZXJJbml0aWFsaXplID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uVGlsZUxheWVyLnByb3RvdHlwZS5pbml0aWFsaXplOwoKX2xlYWZsZXQyWyJkZWZhdWx0Il0uVGlsZUxheWVyLnByb3RvdHlwZS5pbml0aWFsaXplID0gZnVuY3Rpb24gKHVybFRlbXBsYXRlLCBvcHRpb25zKSB7CiAgdXJsVGVtcGxhdGUgPSB1cGdyYWRlX3Byb3RvY29sKHVybFRlbXBsYXRlKTsKICBvcmlnaW5hbExUaWxlTGF5ZXJJbml0aWFsaXplLmNhbGwodGhpcywgdXJsVGVtcGxhdGUsIG9wdGlvbnMpOwp9OwoKdmFyIG9yaWdpbmFsTFRpbGVMYXllcldNU0luaXRpYWxpemUgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5UaWxlTGF5ZXIuV01TLnByb3RvdHlwZS5pbml0aWFsaXplOwoKX2xlYWZsZXQyWyJkZWZhdWx0Il0uVGlsZUxheWVyLldNUy5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICh1cmxUZW1wbGF0ZSwgb3B0aW9ucykgewogIHVybFRlbXBsYXRlID0gdXBncmFkZV9wcm90b2NvbCh1cmxUZW1wbGF0ZSk7CiAgb3JpZ2luYWxMVGlsZUxheWVyV01TSW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHVybFRlbXBsYXRlLCBvcHRpb25zKTsKfTsKCgp9LHsiLi9nbG9iYWwvbGVhZmxldCI6MTB9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHNbImRlZmF1bHQiXSA9IGdsb2JhbC5IVE1MV2lkZ2V0czsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzWyJkZWZhdWx0Il0gPSBnbG9iYWwualF1ZXJ5OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSwxMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzWyJkZWZhdWx0Il0gPSBnbG9iYWwuTDsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0c1siZGVmYXVsdCJdID0gZ2xvYmFsLkwuUHJvajsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0c1siZGVmYXVsdCJdID0gZ2xvYmFsLlNoaW55OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF9zaGlueSA9IHJlcXVpcmUoIi4vZ2xvYmFsL3NoaW55Iik7Cgp2YXIgX3NoaW55MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NoaW55KTsKCnZhciBfaHRtbHdpZGdldHMgPSByZXF1aXJlKCIuL2dsb2JhbC9odG1sd2lkZ2V0cyIpOwoKdmFyIF9odG1sd2lkZ2V0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9odG1sd2lkZ2V0cyk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCnZhciBfY3JzX3V0aWxzID0gcmVxdWlyZSgiLi9jcnNfdXRpbHMiKTsKCnZhciBfY29udHJvbFN0b3JlID0gcmVxdWlyZSgiLi9jb250cm9sLXN0b3JlIik7Cgp2YXIgX2NvbnRyb2xTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb250cm9sU3RvcmUpOwoKdmFyIF9sYXllck1hbmFnZXIgPSByZXF1aXJlKCIuL2xheWVyLW1hbmFnZXIiKTsKCnZhciBfbGF5ZXJNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xheWVyTWFuYWdlcik7Cgp2YXIgX21ldGhvZHMgPSByZXF1aXJlKCIuL21ldGhvZHMiKTsKCnZhciBfbWV0aG9kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXRob2RzKTsKCnJlcXVpcmUoIi4vZml4dXAtZGVmYXVsdC1pY29uIik7CgpyZXF1aXJlKCIuL2ZpeHVwLWRlZmF1bHQtdG9vbHRpcCIpOwoKcmVxdWlyZSgiLi9maXh1cC11cmwtcHJvdG9jb2wiKTsKCnZhciBfZGF0YWZyYW1lID0gcmVxdWlyZSgiLi9kYXRhZnJhbWUiKTsKCnZhciBfZGF0YWZyYW1lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RhdGFmcmFtZSk7Cgp2YXIgX2NsdXN0ZXJMYXllclN0b3JlID0gcmVxdWlyZSgiLi9jbHVzdGVyLWxheWVyLXN0b3JlIik7Cgp2YXIgX2NsdXN0ZXJMYXllclN0b3JlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsdXN0ZXJMYXllclN0b3JlKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICJkZWZhdWx0Ijogb2JqIH07IH0KCndpbmRvdy5MZWFmbGV0V2lkZ2V0ID0ge307CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzID0ge307Cgp2YXIgbWV0aG9kcyA9IHdpbmRvdy5MZWFmbGV0V2lkZ2V0Lm1ldGhvZHMgPSBfanF1ZXJ5MlsiZGVmYXVsdCJdLmV4dGVuZCh7fSwgX21ldGhvZHMyWyJkZWZhdWx0Il0pOwoKd2luZG93LkxlYWZsZXRXaWRnZXQuRGF0YUZyYW1lID0gX2RhdGFmcmFtZTJbImRlZmF1bHQiXTsKd2luZG93LkxlYWZsZXRXaWRnZXQuQ2x1c3RlckxheWVyU3RvcmUgPSBfY2x1c3RlckxheWVyU3RvcmUyWyJkZWZhdWx0Il07CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzLmdldENSUyA9IF9jcnNfdXRpbHMuZ2V0Q1JTOyAvLyBTZW5kIHVwZGF0ZWQgYm91bmRzIGJhY2sgdG8gYXBwLiBUYWtlcyBhIGxlYWZsZXQgZXZlbnQgb2JqZWN0IGFzIGlucHV0LgoKZnVuY3Rpb24gdXBkYXRlQm91bmRzKG1hcCkgewogIHZhciBpZCA9IG1hcC5nZXRDb250YWluZXIoKS5pZDsKICB2YXIgYm91bmRzID0gbWFwLmdldEJvdW5kcygpOwoKICBfc2hpbnkyWyJkZWZhdWx0Il0ub25JbnB1dENoYW5nZShpZCArICJfYm91bmRzIiwgewogICAgbm9ydGg6IGJvdW5kcy5nZXROb3J0aEVhc3QoKS5sYXQsCiAgICBlYXN0OiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubG5nLAogICAgc291dGg6IGJvdW5kcy5nZXRTb3V0aFdlc3QoKS5sYXQsCiAgICB3ZXN0OiBib3VuZHMuZ2V0U291dGhXZXN0KCkubG5nCiAgfSk7CgogIF9zaGlueTJbImRlZmF1bHQiXS5vbklucHV0Q2hhbmdlKGlkICsgIl9jZW50ZXIiLCB7CiAgICBsbmc6IG1hcC5nZXRDZW50ZXIoKS5sbmcsCiAgICBsYXQ6IG1hcC5nZXRDZW50ZXIoKS5sYXQKICB9KTsKCiAgX3NoaW55MlsiZGVmYXVsdCJdLm9uSW5wdXRDaGFuZ2UoaWQgKyAiX3pvb20iLCBtYXAuZ2V0Wm9vbSgpKTsKfQoKZnVuY3Rpb24gcHJldmVudFVuaW50ZW5kZWRab29tT25TY3JvbGwobWFwKSB7CiAgLy8gUHJldmVudCB1bndhbnRlZCBzY3JvbGwgY2FwdHVyaW5nLiBTaW1pbGFyIGluIHB1cnBvc2UgdG8KICAvLyBodHRwczovL2dpdGh1Yi5jb20vQ2xpZmZDbG91ZC9MZWFmbGV0LlNsZWVwIGJ1dCB3aXRoIGEKICAvLyBkaWZmZXJlbnQgc2V0IG9mIGhldXJpc3RpY3MuCiAgLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3aGVuIGEgbW91c2V3aGVlbC9ET01Nb3VzZVNjcm9sbAogIC8vIGV2ZW50IGlzIHNlZW4sIHdlIGRpc2FibGUgc2Nyb2xsIHdoZWVsIHpvb21pbmcgdW50aWwgdGhlCiAgLy8gdXNlciBtb3ZlcyB0aGVpciBtb3VzZSBjdXJzb3Igb3IgY2xpY2tzIG9uIHRoZSBtYXAuIFRoaXMKICAvLyBpcyBzbGlnaHRseSB0cmlja2llciB0aGFuIGp1c3QgbGlzdGVuaW5nIGZvciBtb3VzZW1vdmUsCiAgLy8gYmVjYXVzZSBtb3VzZW1vdmUgaXMgZmlyZWQgd2hlbiB0aGUgcGFnZSBpcyBzY3JvbGxlZCwKICAvLyBldmVuIGlmIHRoZSB1c2VyIGRpZCBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZSBtb3VzZS4gV2UKICAvLyBoYW5kbGUgdGhpcyBieSBleGFtaW5pbmcgdGhlIG1vdXNlbW92ZSBldmVudCdzIHNjcmVlblgKICAvLyBhbmQgc2NyZWVuWSBwcm9wZXJ0aWVzOyBpZiB0aGV5IGNoYW5nZSwgd2Uga25vdyBpdCdzIGEKICAvLyAidHJ1ZSIgbW92ZS4KICAvLyBsYXN0U2NyZWVuIGNhbiBuZXZlciBiZSBudWxsLCBidXQgaXRzIHggYW5kIHkgY2FuLgogIHZhciBsYXN0U2NyZWVuID0gewogICAgeDogbnVsbCwKICAgIHk6IG51bGwKICB9OwogICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKShkb2N1bWVudCkub24oIm1vdXNld2hlZWwgRE9NTW91c2VTY3JvbGwiLCAiKiIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBEaXNhYmxlIHpvb21pbmcgKHVudGlsIHRoZSBtb3VzZSBtb3ZlcyBvciBjbGljaykKICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpOyAvLyBBbnkgbW91c2Vtb3ZlIGV2ZW50cyBhdCB0aGlzIHNjcmVlbiBwb3NpdGlvbiB3aWxsIGJlIGlnbm9yZWQuCgogICAgbGFzdFNjcmVlbiA9IHsKICAgICAgeDogZS5vcmlnaW5hbEV2ZW50LnNjcmVlblgsCiAgICAgIHk6IGUub3JpZ2luYWxFdmVudC5zY3JlZW5ZCiAgICB9OwogIH0pOwogICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKShkb2N1bWVudCkub24oIm1vdXNlbW92ZSIsICIqIiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIERpZCB0aGUgbW91c2UgcmVhbGx5IG1vdmU/CiAgICBpZiAobGFzdFNjcmVlbi54ICE9PSBudWxsICYmIGUuc2NyZWVuWCAhPT0gbGFzdFNjcmVlbi54IHx8IGUuc2NyZWVuWSAhPT0gbGFzdFNjcmVlbi55KSB7CiAgICAgIC8vIEl0IHJlYWxseSBtb3ZlZC4gRW5hYmxlIHpvb21pbmcuCiAgICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZW5hYmxlKCk7CiAgICAgIGxhc3RTY3JlZW4gPSB7CiAgICAgICAgeDogbnVsbCwKICAgICAgICB5OiBudWxsCiAgICAgIH07CiAgICB9CiAgfSk7CiAgKDAsIF9qcXVlcnkyWyJkZWZhdWx0Il0pKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgIi5sZWFmbGV0IiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIENsaWNraW5nIGFsd2F5cyBlbmFibGVzIHpvb21pbmcuCiAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgbGFzdFNjcmVlbiA9IHsKICAgICAgeDogbnVsbCwKICAgICAgeTogbnVsbAogICAgfTsKICB9KTsKfQoKX2h0bWx3aWRnZXRzMlsiZGVmYXVsdCJdLndpZGdldCh7CiAgbmFtZTogImxlYWZsZXQiLAogIHR5cGU6ICJvdXRwdXQiLAogIGZhY3Rvcnk6IGZ1bmN0aW9uIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgIHZhciBtYXAgPSBudWxsOwogICAgcmV0dXJuIHsKICAgICAgLy8gd2UgbmVlZCB0byBzdG9yZSBvdXIgbWFwIGluIG91ciByZXR1cm5lZCBvYmplY3QuCiAgICAgIGdldE1hcDogZnVuY3Rpb24gZ2V0TWFwKCkgewogICAgICAgIHJldHVybiBtYXA7CiAgICAgIH0sCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbiByZW5kZXJWYWx1ZShkYXRhKSB7CiAgICAgICAgLy8gQ3JlYXRlIGFuIGFwcHJvcHJpYXRlIENSUyBPYmplY3QgaWYgc3BlY2lmaWVkCiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5vcHRpb25zICYmIGRhdGEub3B0aW9ucy5jcnMpIHsKICAgICAgICAgIGRhdGEub3B0aW9ucy5jcnMgPSAoMCwgX2Nyc191dGlscy5nZXRDUlMpKGRhdGEub3B0aW9ucy5jcnMpOwogICAgICAgIH0gLy8gQXMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8yOTQjZGlzY3Vzc2lvbl9yNzk1ODQ4MTAKCgogICAgICAgIGlmIChtYXApIHsKICAgICAgICAgIG1hcC5yZW1vdmUoKTsKCiAgICAgICAgICBtYXAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0oKTsgLy8gdW5kZWZpbmUgbWFwCgogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGEub3B0aW9ucy5tYXBGYWN0b3J5ICYmIHR5cGVvZiBkYXRhLm9wdGlvbnMubWFwRmFjdG9yeSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbWFwID0gZGF0YS5vcHRpb25zLm1hcEZhY3RvcnkoZWwsIGRhdGEub3B0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcCA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLm1hcChlbCwgZGF0YS5vcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCk7IC8vIFN0b3JlIHNvbWUgc3RhdGUgaW4gdGhlIG1hcCBvYmplY3QKCiAgICAgICAgbWFwLmxlYWZsZXRyID0gewogICAgICAgICAgLy8gSGFzIHRoZSBtYXAgZXZlciByZW5kZXJlZCBzdWNjZXNzZnVsbHk/CiAgICAgICAgICBoYXNSZW5kZXJlZDogZmFsc2UsCiAgICAgICAgICAvLyBEYXRhIHRvIGJlIHJlbmRlcmVkIHdoZW4gcmVzaXplIGlzIGNhbGxlZCB3aXRoIGFyZWEgIT0gMAogICAgICAgICAgcGVuZGluZ1JlbmRlckRhdGE6IG51bGwKICAgICAgICB9OyAvLyBDaGVjayBpZiB0aGUgbWFwIGlzIHJlbmRlcmVkIHN0YXRpY2FsbHkgKG5vIG91dHB1dCBiaW5kaW5nKQoKICAgICAgICBpZiAoX2h0bWx3aWRnZXRzMlsiZGVmYXVsdCJdLnNoaW55TW9kZSAmJiAvXGJzaGlueS1ib3VuZC1vdXRwdXRcYi8udGVzdChlbC5jbGFzc05hbWUpKSB7CiAgICAgICAgICBtYXAuaWQgPSBlbC5pZDsgLy8gU3RvcmUgdGhlIG1hcCBvbiB0aGUgZWxlbWVudCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciBieSBJRAoKICAgICAgICAgICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKShlbCkuZGF0YSgibGVhZmxldC1tYXAiLCBtYXApOyAvLyBXaGVuIHRoZSBtYXAgaXMgY2xpY2tlZCwgc2VuZCB0aGUgY29vcmRpbmF0ZXMgYmFjayB0byB0aGUgYXBwCgogICAgICAgICAgbWFwLm9uKCJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIF9zaGlueTJbImRlZmF1bHQiXS5vbklucHV0Q2hhbmdlKG1hcC5pZCArICJfY2xpY2siLCB7CiAgICAgICAgICAgICAgbGF0OiBlLmxhdGxuZy5sYXQsCiAgICAgICAgICAgICAgbG5nOiBlLmxhdGxuZy5sbmcsCiAgICAgICAgICAgICAgIi5ub25jZSI6IE1hdGgucmFuZG9tKCkgLy8gRm9yY2UgcmVhY3Rpdml0eSBpZiBsYXQvbG5nIGhhc24ndCBjaGFuZ2VkCgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICBtYXAub24oIm1vdmVlbmQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB1cGRhdGVCb3VuZHMoZS50YXJnZXQpOwogICAgICAgICAgfSkub24oImxheWVyYWRkIGxheWVycmVtb3ZlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIGxheWVyIHRoYXQncyBjb21pbmcgb3IgZ29pbmcgaXMgYSBncm91cCB3ZSBjcmVhdGVkLCB0ZWxsCiAgICAgICAgICAgIC8vIHRoZSBzZXJ2ZXIuCiAgICAgICAgICAgIGlmIChtYXAubGF5ZXJNYW5hZ2VyLmdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwKGUubGF5ZXIpKSB7CiAgICAgICAgICAgICAgLy8gQnV0IHRvIGF2b2lkIGNoYXR0aW5lc3MsIGNvYWxlc2NlIGV2ZW50cwogICAgICAgICAgICAgIGlmIChncm91cFRpbWVySWQpIHsKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChncm91cFRpbWVySWQpOwogICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gbnVsbDsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gbnVsbDsKCiAgICAgICAgICAgICAgICBfc2hpbnkyWyJkZWZhdWx0Il0ub25JbnB1dENoYW5nZShtYXAuaWQgKyAiX2dyb3VwcyIsIG1hcC5sYXllck1hbmFnZXIuZ2V0VmlzaWJsZUdyb3VwcygpKTsKICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHRoaXMuZG9SZW5kZXJWYWx1ZShkYXRhLCBtYXApOwogICAgICB9LAogICAgICBkb1JlbmRlclZhbHVlOiBmdW5jdGlvbiBkb1JlbmRlclZhbHVlKGRhdGEsIG1hcCkgewogICAgICAgIC8vIExlYWZsZXQgZG9lcyBub3QgYmVoYXZlIHdlbGwgd2hlbiB5b3Ugc2V0IHVwIGEgYnVuY2ggb2YgbGF5ZXJzIHdoZW4KICAgICAgICAvLyB0aGUgbWFwIGlzIG5vdCB2aXNpYmxlICh3aWR0aC9oZWlnaHQgPT0gMCkuIFBvcHVwcyBnZXQgbWlzYWxpZ25lZAogICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZWlyIG93bmluZyBtYXJrZXJzLCBhbmQgdGhlIGZpdEJvdW5kcyBjYWxjdWxhdGlvbnMKICAgICAgICAvLyBhcmUgb2ZmLiBUaGVyZWZvcmUgd2Ugd2FpdCB1bnRpbCB0aGUgbWFwIGlzIGFjdHVhbGx5IHNob3dpbmcgdG8KICAgICAgICAvLyByZW5kZXIgdGhlIHZhbHVlICh3ZSByZWx5IG9uIHRoZSByZXNpemUoKSBjYWxsYmFjayBiZWluZyBpbnZva2VkCiAgICAgICAgLy8gYXQgdGhlIGFwcHJvcHJpYXRlIHRpbWUpLgogICAgICAgIC8vCiAgICAgICAgLy8gVGhlcmUgbWF5IGJlIGFuIGlzc3VlIHdpdGggbGVhZmxldFByb3h5KCkgY2FsbHMgYmVpbmcgbWFkZSB3aGlsZQogICAgICAgIC8vIHRoZSBtYXAgaXMgbm90IGJlaW5nIHZpZXdlZC0tbm90IHN1cmUgd2hhdCB0aGUgcmlnaHQgc29sdXRpb24gaXMKICAgICAgICAvLyB0aGVyZS4KICAgICAgICBpZiAoZWwub2Zmc2V0V2lkdGggPT09IDAgfHwgZWwub2Zmc2V0SGVpZ2h0ID09PSAwKSB7CiAgICAgICAgICBtYXAubGVhZmxldHIucGVuZGluZ1JlbmRlckRhdGEgPSBkYXRhOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gbnVsbDsgLy8gTWVyZ2UgZGF0YSBvcHRpb25zIGludG8gZGVmYXVsdHMKCiAgICAgICAgdmFyIG9wdGlvbnMgPSBfanF1ZXJ5MlsiZGVmYXVsdCJdLmV4dGVuZCh7CiAgICAgICAgICB6b29tVG9MaW1pdHM6ICJhbHdheXMiCiAgICAgICAgfSwgZGF0YS5vcHRpb25zKTsKCiAgICAgICAgaWYgKCFtYXAubGF5ZXJNYW5hZ2VyKSB7CiAgICAgICAgICBtYXAuY29udHJvbHMgPSBuZXcgX2NvbnRyb2xTdG9yZTJbImRlZmF1bHQiXShtYXApOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlciA9IG5ldyBfbGF5ZXJNYW5hZ2VyMlsiZGVmYXVsdCJdKG1hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcC5jb250cm9scy5jbGVhcigpOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlci5jbGVhcigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGV4cGxpY2l0VmlldyA9IGZhbHNlOwoKICAgICAgICBpZiAoZGF0YS5zZXRWaWV3KSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgICAgbWFwLnNldFZpZXcuYXBwbHkobWFwLCBkYXRhLnNldFZpZXcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGEuZml0Qm91bmRzKSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgICAgbWV0aG9kcy5maXRCb3VuZHMuYXBwbHkobWFwLCBkYXRhLmZpdEJvdW5kcyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5mbHlUbykgewogICAgICAgICAgaWYgKCFleHBsaWNpdFZpZXcgJiYgIW1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZCkgewogICAgICAgICAgICAvLyBtdXN0IGJlIGRvbmUgdG8gZ2l2ZSBhIGluaXRpYWwgc3RhcnRpbmcgcG9pbnQKICAgICAgICAgICAgbWFwLmZpdFdvcmxkKCk7CiAgICAgICAgICB9CgogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICAgIG1hcC5mbHlUby5hcHBseShtYXAsIGRhdGEuZmx5VG8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGEuZmx5VG9Cb3VuZHMpIHsKICAgICAgICAgIGlmICghZXhwbGljaXRWaWV3ICYmICFtYXAubGVhZmxldHIuaGFzUmVuZGVyZWQpIHsKICAgICAgICAgICAgLy8gbXVzdCBiZSBkb25lIHRvIGdpdmUgYSBpbml0aWFsIHN0YXJ0aW5nIHBvaW50CiAgICAgICAgICAgIG1hcC5maXRXb3JsZCgpOwogICAgICAgICAgfQoKICAgICAgICAgIGV4cGxpY2l0VmlldyA9IHRydWU7CiAgICAgICAgICBtZXRob2RzLmZseVRvQm91bmRzLmFwcGx5KG1hcCwgZGF0YS5mbHlUb0JvdW5kcyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5vcHRpb25zLmNlbnRlcikgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICB9IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgem9vbVRvTGltaXRzIG9wdGlvbiBzYXlzIHRoYXQgdGhlIG1hcCBzaG91bGQgYmUKICAgICAgICAvLyB6b29tZWQgdG8gbWFwIGVsZW1lbnRzLgoKCiAgICAgICAgZnVuY3Rpb24gbmVlZHNab29tKCkgewogICAgICAgICAgcmV0dXJuIG9wdGlvbnMuem9vbVRvTGltaXRzID09PSAiYWx3YXlzIiB8fCBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImZpcnN0IiAmJiAhbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFleHBsaWNpdFZpZXcgJiYgbmVlZHNab29tKCkgJiYgIW1hcC5nZXRab29tKCkpIHsKICAgICAgICAgIGlmIChkYXRhLmxpbWl0cyAmJiAhX2pxdWVyeTJbImRlZmF1bHQiXS5pc0VtcHR5T2JqZWN0KGRhdGEubGltaXRzKSkgewogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdHVyYWwgbGltaXRzIG9mIHdoYXQncyBiZWluZyBkcmF3biBvbiB0aGUgbWFwCiAgICAgICAgICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBib3VuZGluZyBib3ggaXMgMCwgbGVhZmxldCBnZXRzIGFsbCB3ZWlyZAogICAgICAgICAgICB2YXIgcGFkID0gMC4wMDY7CgogICAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubGF0WzBdID09PSBkYXRhLmxpbWl0cy5sYXRbMV0pIHsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMF0gPSBkYXRhLmxpbWl0cy5sYXRbMF0gLSBwYWQ7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubGF0WzFdID0gZGF0YS5saW1pdHMubGF0WzFdICsgcGFkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubG5nWzBdID09PSBkYXRhLmxpbWl0cy5sbmdbMV0pIHsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sbmdbMF0gPSBkYXRhLmxpbWl0cy5sbmdbMF0gLSBwYWQ7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubG5nWzFdID0gZGF0YS5saW1pdHMubG5nWzFdICsgcGFkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBtYXAuZml0Qm91bmRzKFtbZGF0YS5saW1pdHMubGF0WzBdLCBkYXRhLmxpbWl0cy5sbmdbMF1dLCBbZGF0YS5saW1pdHMubGF0WzFdLCBkYXRhLmxpbWl0cy5sbmdbMV1dXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXAuZml0V29ybGQoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmNhbGxzICYmIGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY2FsbCA9IGRhdGEuY2FsbHNbaV07CiAgICAgICAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pIG1ldGhvZHNbY2FsbC5tZXRob2RdLmFwcGx5KG1hcCwgY2FsbC5hcmdzKTtlbHNlICgwLCBfdXRpbC5sb2cpKCJVbmtub3duIG1ldGhvZCAiICsgY2FsbC5tZXRob2QpOwogICAgICAgIH0KCiAgICAgICAgbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkID0gdHJ1ZTsKCiAgICAgICAgaWYgKF9odG1sd2lkZ2V0czJbImRlZmF1bHQiXS5zaGlueU1vZGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB1cGRhdGVCb3VuZHMobWFwKTsKICAgICAgICAgIH0sIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUod2lkdGgsIGhlaWdodCkgewogICAgICAgIGlmIChtYXApIHsKICAgICAgICAgIG1hcC5pbnZhbGlkYXRlU2l6ZSgpOwoKICAgICAgICAgIGlmIChtYXAubGVhZmxldHIucGVuZGluZ1JlbmRlckRhdGEpIHsKICAgICAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSwgbWFwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCmlmIChfaHRtbHdpZGdldHMyWyJkZWZhdWx0Il0uc2hpbnlNb2RlKSB7CiAgX3NoaW55MlsiZGVmYXVsdCJdLmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJsZWFmbGV0LWNhbGxzIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgbWFwID0gZWwgPyAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkoZWwpLmRhdGEoImxlYWZsZXQtbWFwIikgOiBudWxsOwoKICAgIGlmICghbWFwKSB7CiAgICAgICgwLCBfdXRpbC5sb2cpKCJDb3VsZG4ndCBmaW5kIG1hcCB3aXRoIGlkICIgKyBpZCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEuY2FsbHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNhbGwgPSBkYXRhLmNhbGxzW2ldOwoKICAgICAgaWYgKGNhbGwuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgX3NoaW55MlsiZGVmYXVsdCJdLnJlbmRlckRlcGVuZGVuY2llcyhjYWxsLmRlcGVuZGVuY2llcyk7CiAgICAgIH0KCiAgICAgIGlmIChtZXRob2RzW2NhbGwubWV0aG9kXSkgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkobWFwLCBjYWxsLmFyZ3MpO2Vsc2UgKDAsIF91dGlsLmxvZykoIlVua25vd24gbWV0aG9kICIgKyBjYWxsLm1ldGhvZCk7CiAgICB9CiAgfSk7Cn0KCgp9LHsiLi9jbHVzdGVyLWxheWVyLXN0b3JlIjoxLCIuL2NvbnRyb2wtc3RvcmUiOjIsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9maXh1cC1kZWZhdWx0LWljb24iOjUsIi4vZml4dXAtZGVmYXVsdC10b29sdGlwIjo2LCIuL2ZpeHVwLXVybC1wcm90b2NvbCI6NywiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjgsIi4vZ2xvYmFsL2pxdWVyeSI6OSwiLi9nbG9iYWwvbGVhZmxldCI6MTAsIi4vZ2xvYmFsL3NoaW55IjoxMiwiLi9sYXllci1tYW5hZ2VyIjoxNCwiLi9tZXRob2RzIjoxNSwiLi91dGlsIjoxN31dLDE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHNbImRlZmF1bHQiXSA9IHVuZGVmaW5lZDsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAiZGVmYXVsdCI6IG9iaiB9OyB9CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9CgpmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfQoKdmFyIExheWVyTWFuYWdlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgZnVuY3Rpb24gTGF5ZXJNYW5hZ2VyKG1hcCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExheWVyTWFuYWdlcik7CgogICAgdGhpcy5fbWFwID0gbWFwOyAvLyBCRUdJTiBsYXllciBpbmRpY2VzCiAgICAvLyB7PGdyb3VwbmFtZT46IHs8c3RhbXA+OiBsYXllcn19CgogICAgdGhpcy5fYnlHcm91cCA9IHt9OyAvLyB7PGNhdGVnb3J5TmFtZT46IHs8c3RhbXA+OiBsYXllcn19CgogICAgdGhpcy5fYnlDYXRlZ29yeSA9IHt9OyAvLyB7PGNhdGVnb3J5TmFtZV9sYXllcklkPjogbGF5ZXJ9CgogICAgdGhpcy5fYnlMYXllcklkID0ge307IC8vIHs8c3RhbXA+OiB7CiAgICAvLyAgICAgICAgICAgICAiZ3JvdXAiOiA8Z3JvdXBuYW1lPiwKICAgIC8vICAgICAgICAgICAgICJsYXllcklkIjogPGxheWVySWQ+LAogICAgLy8gICAgICAgICAgICAgImNhdGVnb3J5IjogPGNhdGVnb3J5PiwKICAgIC8vICAgICAgICAgICAgICJjb250YWluZXIiOiA8Y29udGFpbmVyPgogICAgLy8gICAgICAgICAgIH0KICAgIC8vIH0KCiAgICB0aGlzLl9ieVN0YW1wID0ge307IC8vIHs8Y3Jvc3N0YWxrR3JvdXBOYW1lPjogezxrZXk+OiBbPHN0YW1wPiwgPHN0YW1wPiwgLi4uXSwgLi4ufX0KCiAgICB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwID0ge307IC8vIEVORCBsYXllciBpbmRpY2VzCiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IEwubGF5ZXJHcm91cH0KCiAgICB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMgPSB7fTsgLy8gezxncm91cE5hbWU+OiBMLmxheWVyR3JvdXB9CgogICAgdGhpcy5fZ3JvdXBDb250YWluZXJzID0ge307CiAgfQoKICBfY3JlYXRlQ2xhc3MoTGF5ZXJNYW5hZ2VyLCBbewogICAga2V5OiAiYWRkTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZExheWVyKGxheWVyLCBjYXRlZ29yeSwgbGF5ZXJJZCwgZ3JvdXAsIGN0R3JvdXAsIGN0S2V5KSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICAvLyBXYXMgYSBncm91cCBwcm92aWRlZD8KICAgICAgdmFyIGhhc0lkID0gdHlwZW9mIGxheWVySWQgPT09ICJzdHJpbmciOwogICAgICB2YXIgZ3JvdXBlZCA9IHR5cGVvZiBncm91cCA9PT0gInN0cmluZyI7CiAgICAgIHZhciBzdGFtcCA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLlV0aWwuc3RhbXAobGF5ZXIpICsgIiI7IC8vIFRoaXMgd2lsbCBiZSB0aGUgZGVmYXVsdCBsYXllciBncm91cCB0byBhZGQgdGhlIGxheWVyIHRvLgogICAgICAvLyBXZSBtYXkgb3ZlcndyaXRlIHRoaXMgbGV0IGJlZm9yZSB1c2luZyBpdCAoaS5lLiBpZiBhIGdyb3VwIGlzIGFzc2lnbmVkKS4KICAgICAgLy8gVGhpcyBvbmUgbGluZXIgY3JlYXRlcyB0aGUgX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gZW50cnkgaWYgaXQKICAgICAgLy8gZG9lc24ndCBhbHJlYWR5IGV4aXN0LgoKICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gPSB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldIHx8IF9sZWFmbGV0MlsiZGVmYXVsdCJdLmxheWVyR3JvdXAoKS5hZGRUbyh0aGlzLl9tYXApOwoKICAgICAgdmFyIG9sZExheWVyID0gbnVsbDsKCiAgICAgIGlmIChoYXNJZCkgewogICAgICAgIC8vIEZpcnN0LCByZW1vdmUgYW55IGxheWVyIHdpdGggdGhlIHNhbWUgY2F0ZWdvcnkgYW5kIGxheWVySWQKICAgICAgICB2YXIgcHJlZml4ZWRMYXllcklkID0gdGhpcy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCk7CgogICAgICAgIG9sZExheWVyID0gdGhpcy5fYnlMYXllcklkW3ByZWZpeGVkTGF5ZXJJZF07CgogICAgICAgIGlmIChvbGRMYXllcikgewogICAgICAgICAgdGhpcy5fcmVtb3ZlTGF5ZXIob2xkTGF5ZXIpOwogICAgICAgIH0gLy8gVXBkYXRlIGxheWVySWQgaW5kZXgKCgogICAgICAgIHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdID0gbGF5ZXI7CiAgICAgIH0gLy8gVXBkYXRlIGdyb3VwIGluZGV4CgoKICAgICAgaWYgKGdyb3VwZWQpIHsKICAgICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdW3N0YW1wXSA9IGxheWVyOyAvLyBTaW5jZSBhIGdyb3VwIGlzIGFzc2lnbmVkLCBkb24ndCBhZGQgdGhlIGxheWVyIHRvIHRoZSBjYXRlZ29yeSdzIGxheWVyCiAgICAgICAgLy8gZ3JvdXA7IGluc3RlYWQsIHVzZSB0aGUgZ3JvdXAncyBsYXllciBncm91cC4KICAgICAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfZ3JvdXBDb250YWluZXJzW2dyb3VwXSBlbnRyeSBpZiBpdCBkb2Vzbid0CiAgICAgICAgLy8gYWxyZWFkeSBleGlzdC4KCiAgICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRMYXllckdyb3VwKGdyb3VwLCB0cnVlKTsKICAgICAgfSAvLyBVcGRhdGUgY2F0ZWdvcnkgaW5kZXgKCgogICAgICB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XSA9IHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldIHx8IHt9OwogICAgICB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XVtzdGFtcF0gPSBsYXllcjsgLy8gVXBkYXRlIHN0YW1wIGluZGV4CgogICAgICB2YXIgbGF5ZXJJbmZvID0gdGhpcy5fYnlTdGFtcFtzdGFtcF0gPSB7CiAgICAgICAgbGF5ZXI6IGxheWVyLAogICAgICAgIGdyb3VwOiBncm91cCwKICAgICAgICBjdEdyb3VwOiBjdEdyb3VwLAogICAgICAgIGN0S2V5OiBjdEtleSwKICAgICAgICBsYXllcklkOiBsYXllcklkLAogICAgICAgIGNhdGVnb3J5OiBjYXRlZ29yeSwKICAgICAgICBjb250YWluZXI6IGNvbnRhaW5lciwKICAgICAgICBoaWRkZW46IGZhbHNlCiAgICAgIH07IC8vIFVwZGF0ZSBjcm9zc3RhbGsgZ3JvdXAgaW5kZXgKCiAgICAgIGlmIChjdEdyb3VwKSB7CiAgICAgICAgaWYgKGxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgICAvLyBOZWVkIHRvIHNhdmUgdGhpcyBpbmZvIHNvIHdlIGtub3cgd2hhdCB0byBzZXQgb3BhY2l0eSB0byBsYXRlcgogICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSA9IHR5cGVvZiBsYXllci5vcHRpb25zLm9wYWNpdHkgIT09ICJ1bmRlZmluZWQiID8gbGF5ZXIub3B0aW9ucy5vcGFjaXR5IDogMC41OwogICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnRmlsbE9wYWNpdHkgPSB0eXBlb2YgbGF5ZXIub3B0aW9ucy5maWxsT3BhY2l0eSAhPT0gInVuZGVmaW5lZCIgPyBsYXllci5vcHRpb25zLmZpbGxPcGFjaXR5IDogMC4yOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN0ZyA9IHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXBbY3RHcm91cF07CgogICAgICAgIGlmICghY3RnKSB7CiAgICAgICAgICBjdGcgPSB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwW2N0R3JvdXBdID0ge307CiAgICAgICAgICB2YXIgY3Jvc3N0YWxrID0gZ2xvYmFsLmNyb3NzdGFsazsKCiAgICAgICAgICB2YXIgaGFuZGxlRmlsdGVyID0gZnVuY3Rpb24gaGFuZGxlRmlsdGVyKGUpIHsKICAgICAgICAgICAgaWYgKCFlLnZhbHVlKSB7CiAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CgogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZ3JvdXBLZXlzW2ldOwogICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8gPSBfdGhpcy5fYnlTdGFtcFtjdGdba2V5XV07CgogICAgICAgICAgICAgICAgX3RoaXMuX3NldFZpc2liaWxpdHkoX2xheWVySW5mbywgdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciBzZWxlY3RlZEtleXMgPSB7fTsKCiAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGUudmFsdWUubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXNbZS52YWx1ZVtfaV1dID0gdHJ1ZTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIHZhciBfZ3JvdXBLZXlzID0gT2JqZWN0LmtleXMoY3RnKTsKCiAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2dyb3VwS2V5cy5sZW5ndGg7IF9pMisrKSB7CiAgICAgICAgICAgICAgICB2YXIgX2tleSA9IF9ncm91cEtleXNbX2kyXTsKICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvMiA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5XV07CgogICAgICAgICAgICAgICAgX3RoaXMuX3NldFZpc2liaWxpdHkoX2xheWVySW5mbzIsIHNlbGVjdGVkS2V5c1tfZ3JvdXBLZXlzW19pMl1dKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CgogICAgICAgICAgdmFyIGZpbHRlckhhbmRsZSA9IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgZmlsdGVySGFuZGxlLm9uKCJjaGFuZ2UiLCBoYW5kbGVGaWx0ZXIpOwoKICAgICAgICAgIHZhciBoYW5kbGVTZWxlY3Rpb24gPSBmdW5jdGlvbiBoYW5kbGVTZWxlY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoIWUudmFsdWUgfHwgIWUudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CgogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZ3JvdXBLZXlzW2ldOwogICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8zID0gX3RoaXMuX2J5U3RhbXBbY3RnW2tleV1dOwoKICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm8zLCAxLjApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CgogICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGUudmFsdWUubGVuZ3RoOyBfaTMrKykgewogICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2UudmFsdWVbX2kzXV0gPSB0cnVlOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgdmFyIF9ncm91cEtleXMyID0gT2JqZWN0LmtleXMoY3RnKTsKCiAgICAgICAgICAgICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgX2dyb3VwS2V5czIubGVuZ3RoOyBfaTQrKykgewogICAgICAgICAgICAgICAgdmFyIF9rZXkyID0gX2dyb3VwS2V5czJbX2k0XTsKICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvNCA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5Ml1dOwoKICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm80LCBzZWxlY3RlZEtleXNbX2dyb3VwS2V5czJbX2k0XV0gPyAxLjAgOiAwLjIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKCiAgICAgICAgICB2YXIgc2VsSGFuZGxlID0gbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICBzZWxIYW5kbGUub24oImNoYW5nZSIsIGhhbmRsZVNlbGVjdGlvbik7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaGFuZGxlRmlsdGVyKHsKICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVySGFuZGxlLmZpbHRlcmVkS2V5cwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaGFuZGxlU2VsZWN0aW9uKHsKICAgICAgICAgICAgICB2YWx1ZTogc2VsSGFuZGxlLnZhbHVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9CgogICAgICAgIGlmICghY3RnW2N0S2V5XSkgY3RnW2N0S2V5XSA9IFtdOwogICAgICAgIGN0Z1tjdEtleV0ucHVzaChzdGFtcCk7CiAgICAgIH0gLy8gQWRkIHRvIGNvbnRhaW5lcgoKCiAgICAgIGlmICghbGF5ZXJJbmZvLmhpZGRlbikgY29udGFpbmVyLmFkZExheWVyKGxheWVyKTsKICAgICAgcmV0dXJuIG9sZExheWVyOwogICAgfQogIH0sIHsKICAgIGtleTogImJydXNoIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBicnVzaChib3VuZHMsIGV4dHJhSW5mbykgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi8KICAgICAgLy8gRm9yIGVhY2ggQ3Jvc3N0YWxrIGdyb3VwLi4uCiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXApLmZvckVhY2goZnVuY3Rpb24gKGN0R3JvdXBOYW1lKSB7CiAgICAgICAgdmFyIGN0ZyA9IF90aGlzMi5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwTmFtZV07CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IFtdOyAvLyAuLi5pdGVyYXRlIG92ZXIgZWFjaCBDcm9zc3RhbGsga2V5IChlYWNoIG9mIHdoaWNoIG1heSBoYXZlIG11bHRpcGxlCiAgICAgICAgLy8gbGF5ZXJzKS4uLgoKICAgICAgICBPYmplY3Qua2V5cyhjdGcpLmZvckVhY2goZnVuY3Rpb24gKGN0S2V5KSB7CiAgICAgICAgICAvLyAuLi5hbmQgZm9yIGVhY2ggbGF5ZXIuLi4KICAgICAgICAgIGN0Z1tjdEtleV0uZm9yRWFjaChmdW5jdGlvbiAoc3RhbXApIHsKICAgICAgICAgICAgdmFyIGxheWVySW5mbyA9IF90aGlzMi5fYnlTdGFtcFtzdGFtcF07IC8vIC4uLmlmIGl0J3Mgc29tZXRoaW5nIHdpdGggYSBwb2ludC4uLgoKICAgICAgICAgICAgaWYgKGxheWVySW5mby5sYXllci5nZXRMYXRMbmcpIHsKICAgICAgICAgICAgICAvLyAuLi4gYW5kIGl0J3MgaW5zaWRlIHRoZSBzZWxlY3Rpb24gYm91bmRzLi4uCiAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIHBpeGVsIGNvbnRhaW5tZW50LCBub3QgbGF0L2xuZyBjb250YWlubWVudAogICAgICAgICAgICAgIGlmIChib3VuZHMuY29udGFpbnMobGF5ZXJJbmZvLmxheWVyLmdldExhdExuZygpKSkgewogICAgICAgICAgICAgICAgLy8gLi4uYWRkIHRoZSBrZXkgdG8gdGhlIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKGN0S2V5KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwTmFtZSkuc2V0KHNlbGVjdGlvbiwgZXh0cmFJbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAidW5icnVzaCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdW5icnVzaChleHRyYUluZm8pIHsKICAgICAgT2JqZWN0LmtleXModGhpcy5fYnlDcm9zc3RhbGtHcm91cCkuZm9yRWFjaChmdW5jdGlvbiAoY3RHcm91cE5hbWUpIHsKICAgICAgICBuZXcgZ2xvYmFsLmNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cE5hbWUpLmNsZWFyKGV4dHJhSW5mbyk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRWaXNpYmlsaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0VmlzaWJpbGl0eShsYXllckluZm8sIHZpc2libGUpIHsKICAgICAgaWYgKGxheWVySW5mby5oaWRkZW4gXiB2aXNpYmxlKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKHZpc2libGUpIHsKICAgICAgICBsYXllckluZm8uY29udGFpbmVyLmFkZExheWVyKGxheWVySW5mby5sYXllcik7CiAgICAgICAgbGF5ZXJJbmZvLmhpZGRlbiA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIGxheWVySW5mby5jb250YWluZXIucmVtb3ZlTGF5ZXIobGF5ZXJJbmZvLmxheWVyKTsKICAgICAgICBsYXllckluZm8uaGlkZGVuID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRPcGFjaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0T3BhY2l0eShsYXllckluZm8sIG9wYWNpdHkpIHsKICAgICAgaWYgKGxheWVySW5mby5sYXllci5zZXRPcGFjaXR5KSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgIH0gZWxzZSBpZiAobGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKHsKICAgICAgICAgIG9wYWNpdHk6IG9wYWNpdHkgKiBsYXllckluZm8ubGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSwKICAgICAgICAgIGZpbGxPcGFjaXR5OiBvcGFjaXR5ICogbGF5ZXJJbmZvLmxheWVyLm9wdGlvbnMub3JpZ0ZpbGxPcGFjaXR5CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGF5ZXIoY2F0ZWdvcnksIGxheWVySWQpIHsKICAgICAgcmV0dXJuIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKV07CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxheWVyKGNhdGVnb3J5LCBsYXllcklkcykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIC8vIEZpbmQgbGF5ZXIgaW5mbwogICAgICBfanF1ZXJ5MlsiZGVmYXVsdCJdLmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGxheWVySWRzKSwgZnVuY3Rpb24gKGksIGxheWVySWQpIHsKICAgICAgICB2YXIgbGF5ZXIgPSBfdGhpczMuX2J5TGF5ZXJJZFtfdGhpczMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKCiAgICAgICAgaWYgKGxheWVyKSB7CiAgICAgICAgICBfdGhpczMuX3JlbW92ZUxheWVyKGxheWVyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyTGF5ZXJzIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckxheWVycyhjYXRlZ29yeSkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIC8vIEZpbmQgYWxsIGxheWVycyBpbiBfYnlDYXRlZ29yeVtjYXRlZ29yeV0KICAgICAgdmFyIGNhdFRhYmxlID0gdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV07CgogICAgICBpZiAoIWNhdFRhYmxlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgICAvLyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHlvdSdyZSBhY2Nlc3NpbmcuCgoKICAgICAgdmFyIHN0YW1wcyA9IFtdOwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKGNhdFRhYmxlLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgIHN0YW1wcy5wdXNoKGspOwogICAgICB9KTsKCiAgICAgIF9qcXVlcnkyWyJkZWZhdWx0Il0uZWFjaChzdGFtcHMsIGZ1bmN0aW9uIChpLCBzdGFtcCkgewogICAgICAgIF90aGlzNC5fcmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYXllckdyb3VwKGdyb3VwLCBlbnN1cmVFeGlzdHMpIHsKICAgICAgdmFyIGcgPSB0aGlzLl9ncm91cENvbnRhaW5lcnNbZ3JvdXBdOwoKICAgICAgaWYgKGVuc3VyZUV4aXN0cyAmJiAhZykgewogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdID0gdGhpcy5fYnlHcm91cFtncm91cF0gfHwge307CiAgICAgICAgZyA9IHRoaXMuX2dyb3VwQ29udGFpbmVyc1tncm91cF0gPSBfbGVhZmxldDJbImRlZmF1bHQiXS5mZWF0dXJlR3JvdXAoKTsKICAgICAgICBnLmdyb3VwbmFtZSA9IGdyb3VwOwogICAgICAgIGcuYWRkVG8odGhpcy5fbWFwKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGc7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwKGxheWVyR3JvdXApIHsKICAgICAgcmV0dXJuIGxheWVyR3JvdXAuZ3JvdXBuYW1lOwogICAgfQogIH0sIHsKICAgIGtleTogImdldFZpc2libGVHcm91cHMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZpc2libGVHcm91cHMoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgICAgdmFyIHJlc3VsdCA9IFtdOwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBpZiAoX3RoaXM1Ll9tYXAuaGFzTGF5ZXIodikpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0sIHsKICAgIGtleTogImdldEFsbEdyb3VwTmFtZXMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFsbEdyb3VwTmFtZXMoKSB7CiAgICAgIHZhciByZXN1bHQgPSBbXTsKCiAgICAgIF9qcXVlcnkyWyJkZWZhdWx0Il0uZWFjaCh0aGlzLl9ncm91cENvbnRhaW5lcnMsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgcmVzdWx0LnB1c2goayk7CiAgICAgIH0pOwoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckdyb3VwKGdyb3VwKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwoKICAgICAgLy8gRmluZCBhbGwgbGF5ZXJzIGluIF9ieUdyb3VwW2dyb3VwXQogICAgICB2YXIgZ3JvdXBUYWJsZSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdOwoKICAgICAgaWYgKCFncm91cFRhYmxlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgICAvLyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHlvdSdyZSBhY2Nlc3NpbmcuCgoKICAgICAgdmFyIHN0YW1wcyA9IFtdOwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKGdyb3VwVGFibGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgc3RhbXBzLnB1c2goayk7CiAgICAgIH0pOwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKHN0YW1wcywgZnVuY3Rpb24gKGksIHN0YW1wKSB7CiAgICAgICAgX3RoaXM2Ll9yZW1vdmVMYXllcihzdGFtcCk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgZnVuY3Rpb24gY2xlYXJMYXllckdyb3VwKGtleSwgbGF5ZXJHcm91cCkgewogICAgICAgIGxheWVyR3JvdXAuY2xlYXJMYXllcnMoKTsKICAgICAgfSAvLyBDbGVhciBhbGwgaW5kaWNlcyBhbmQgbGF5ZXJHcm91cHMKCgogICAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnkgPSB7fTsKICAgICAgdGhpcy5fYnlMYXllcklkID0ge307CiAgICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgICAgdGhpcy5fYnlDcm9zc3RhbGtHcm91cCA9IHt9OwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKCiAgICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwoKICAgICAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKCiAgICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogICAgfQogIH0sIHsKICAgIGtleTogIl9yZW1vdmVMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbW92ZUxheWVyKGxheWVyKSB7CiAgICAgIHZhciBzdGFtcDsKCiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgc3RhbXAgPSBsYXllcjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFtcCA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLlV0aWwuc3RhbXAobGF5ZXIpOwogICAgICB9CgogICAgICB2YXIgbGF5ZXJJbmZvID0gdGhpcy5fYnlTdGFtcFtzdGFtcF07CgogICAgICBpZiAoIWxheWVySW5mbykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgbGF5ZXJJbmZvLmNvbnRhaW5lci5yZW1vdmVMYXllcihzdGFtcCk7CgogICAgICBpZiAodHlwZW9mIGxheWVySW5mby5ncm91cCA9PT0gInN0cmluZyIpIHsKICAgICAgICBkZWxldGUgdGhpcy5fYnlHcm91cFtsYXllckluZm8uZ3JvdXBdW3N0YW1wXTsKICAgICAgfQoKICAgICAgaWYgKHR5cGVvZiBsYXllckluZm8ubGF5ZXJJZCA9PT0gInN0cmluZyIpIHsKICAgICAgICBkZWxldGUgdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkobGF5ZXJJbmZvLmNhdGVnb3J5LCBsYXllckluZm8ubGF5ZXJJZCldOwogICAgICB9CgogICAgICBkZWxldGUgdGhpcy5fYnlDYXRlZ29yeVtsYXllckluZm8uY2F0ZWdvcnldW3N0YW1wXTsKICAgICAgZGVsZXRlIHRoaXMuX2J5U3RhbXBbc3RhbXBdOwoKICAgICAgaWYgKGxheWVySW5mby5jdEdyb3VwKSB7CiAgICAgICAgdmFyIGN0R3JvdXAgPSB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwW2xheWVySW5mby5jdEdyb3VwXTsKICAgICAgICB2YXIgbGF5ZXJzRm9yS2V5ID0gY3RHcm91cFtsYXllckluZm8uY3RLZXldOwogICAgICAgIHZhciBpZHggPSBsYXllcnNGb3JLZXkgPyBsYXllcnNGb3JLZXkuaW5kZXhPZihzdGFtcCkgOiAtMTsKCiAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICBpZiAobGF5ZXJzRm9yS2V5Lmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBkZWxldGUgY3RHcm91cFtsYXllckluZm8uY3RLZXldOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGF5ZXJzRm9yS2V5LnNwbGljZShpZHgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9sYXllcklkS2V5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgICByZXR1cm4gY2F0ZWdvcnkgKyAiXG4iICsgbGF5ZXJJZDsKICAgIH0KICB9XSk7CgogIHJldHVybiBMYXllck1hbmFnZXI7Cn0oKTsKCmV4cG9ydHNbImRlZmF1bHQiXSA9IExheWVyTWFuYWdlcjsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7Ii4vZ2xvYmFsL2pxdWVyeSI6OSwiLi9nbG9iYWwvbGVhZmxldCI6MTAsIi4vdXRpbCI6MTd9XSwxNTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF9qcXVlcnkgPSByZXF1aXJlKCIuL2dsb2JhbC9qcXVlcnkiKTsKCnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3NoaW55ID0gcmVxdWlyZSgiLi9nbG9iYWwvc2hpbnkiKTsKCnZhciBfc2hpbnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hpbnkpOwoKdmFyIF9odG1sd2lkZ2V0cyA9IHJlcXVpcmUoIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIik7Cgp2YXIgX2h0bWx3aWRnZXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2h0bWx3aWRnZXRzKTsKCnZhciBfdXRpbCA9IHJlcXVpcmUoIi4vdXRpbCIpOwoKdmFyIF9jcnNfdXRpbHMgPSByZXF1aXJlKCIuL2Nyc191dGlscyIpOwoKdmFyIF9kYXRhZnJhbWUgPSByZXF1aXJlKCIuL2RhdGFmcmFtZSIpOwoKdmFyIF9kYXRhZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YWZyYW1lKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUgPSByZXF1aXJlKCIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2x1c3RlckxheWVyU3RvcmUpOwoKdmFyIF9taXBtYXBwZXIgPSByZXF1aXJlKCIuL21pcG1hcHBlciIpOwoKdmFyIF9taXBtYXBwZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWlwbWFwcGVyKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICJkZWZhdWx0Ijogb2JqIH07IH0KCnZhciBtZXRob2RzID0ge307CmV4cG9ydHNbImRlZmF1bHQiXSA9IG1ldGhvZHM7CgpmdW5jdGlvbiBtb3VzZUhhbmRsZXIobWFwSWQsIGxheWVySWQsIGdyb3VwLCBldmVudE5hbWUsIGV4dHJhSW5mbykgewogIHJldHVybiBmdW5jdGlvbiAoZSkgewogICAgaWYgKCFfaHRtbHdpZGdldHMyWyJkZWZhdWx0Il0uc2hpbnlNb2RlKSByZXR1cm47CiAgICB2YXIgbGF0TG5nID0gZS50YXJnZXQuZ2V0TGF0TG5nID8gZS50YXJnZXQuZ2V0TGF0TG5nKCkgOiBlLmxhdGxuZzsKCiAgICBpZiAobGF0TG5nKSB7CiAgICAgIC8vIHJldHJpZXZlIG9ubHkgbGF0LCBsb24gdmFsdWVzIHRvIHJlbW92ZSBwcm90b3R5cGUKICAgICAgLy8gICBhbmQgZXh0cmEgcGFyYW1ldGVycyBhZGRlZCBieSAzcmQgcGFydHkgbW9kdWxlcwogICAgICAvLyB0aGVzZSBvYmplY3RzIGFyZSBmb3IganNvbiBzZXJpYWxpemF0aW9uLCBub3QgamF2YXNjcmlwdAogICAgICB2YXIgbGF0TG5nVmFsID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0ubGF0TG5nKGxhdExuZyk7IC8vIG1ha2Ugc3VyZSBpdCBoYXMgY29uc2lzdGVudCBzaGFwZQoKCiAgICAgIGxhdExuZyA9IHsKICAgICAgICBsYXQ6IGxhdExuZ1ZhbC5sYXQsCiAgICAgICAgbG5nOiBsYXRMbmdWYWwubG5nCiAgICAgIH07CiAgICB9CgogICAgdmFyIGV2ZW50SW5mbyA9IF9qcXVlcnkyWyJkZWZhdWx0Il0uZXh0ZW5kKHsKICAgICAgaWQ6IGxheWVySWQsCiAgICAgICIubm9uY2UiOiBNYXRoLnJhbmRvbSgpIC8vIGZvcmNlIHJlYWN0aXZpdHkKCiAgICB9LCBncm91cCAhPT0gbnVsbCA/IHsKICAgICAgZ3JvdXA6IGdyb3VwCiAgICB9IDogbnVsbCwgbGF0TG5nLCBleHRyYUluZm8pOwoKICAgIF9zaGlueTJbImRlZmF1bHQiXS5vbklucHV0Q2hhbmdlKG1hcElkICsgIl8iICsgZXZlbnROYW1lLCBldmVudEluZm8pOwogIH07Cn0KCm1ldGhvZHMubW91c2VIYW5kbGVyID0gbW91c2VIYW5kbGVyOwoKbWV0aG9kcy5jbGVhckdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzID0gdGhpczsKCiAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCB2KSB7CiAgICBfdGhpcy5sYXllck1hbmFnZXIuY2xlYXJHcm91cCh2KTsKICB9KTsKfTsKCm1ldGhvZHMuc2V0VmlldyA9IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHsKICB0aGlzLnNldFZpZXcoY2VudGVyLCB6b29tLCBvcHRpb25zKTsKfTsKCm1ldGhvZHMuZml0Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIsIG9wdGlvbnMpIHsKICB0aGlzLmZpdEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dLCBvcHRpb25zKTsKfTsKCm1ldGhvZHMuZmx5VG8gPSBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBvcHRpb25zKSB7CiAgdGhpcy5mbHlUbyhjZW50ZXIsIHpvb20sIG9wdGlvbnMpOwp9OwoKbWV0aG9kcy5mbHlUb0JvdW5kcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBvcHRpb25zKSB7CiAgdGhpcy5mbHlUb0JvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dLCBvcHRpb25zKTsKfTsKCm1ldGhvZHMuc2V0TWF4Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIpIHsKICB0aGlzLnNldE1heEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dKTsKfTsKCm1ldGhvZHMuYWRkUG9wdXBzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCBwb3B1cCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXMyID0gdGhpczsKCiAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyWyJkZWZhdWx0Il0oKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jYmluZChvcHRpb25zKTsKCiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkgewogICAgaWYgKF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibGF0IikpICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibG5nIikpKSB7CiAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHBvcHVwID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0ucG9wdXAoZGYuZ2V0KGkpKS5zZXRMYXRMbmcoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildKS5zZXRDb250ZW50KGRmLmdldChpLCAicG9wdXAiKSk7CgogICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgImxheWVySWQiKTsKICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKHBvcHVwLCAicG9wdXAiLCB0aGlzSWQsIHRoaXNHcm91cCk7CiAgICAgIH0pLmNhbGwoX3RoaXMyKTsKICAgIH0KICB9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICBfbG9vcChpKTsKICB9Cn07CgptZXRob2RzLnJlbW92ZVBvcHVwID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigicG9wdXAiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJQb3B1cHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInBvcHVwIik7Cn07CgptZXRob2RzLmFkZFRpbGVzID0gZnVuY3Rpb24gKHVybFRlbXBsYXRlLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKF9sZWFmbGV0MlsiZGVmYXVsdCJdLnRpbGVMYXllcih1cmxUZW1wbGF0ZSwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKbWV0aG9kcy5yZW1vdmVUaWxlcyA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoInRpbGUiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJUaWxlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygidGlsZSIpOwp9OwoKbWV0aG9kcy5hZGRXTVNUaWxlcyA9IGZ1bmN0aW9uIChiYXNlVXJsLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3JzKSB7CiAgICBvcHRpb25zLmNycyA9ICgwLCBfY3JzX3V0aWxzLmdldENSUykob3B0aW9ucy5jcnMpOwogIH0KCiAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoX2xlYWZsZXQyWyJkZWZhdWx0Il0udGlsZUxheWVyLndtcyhiYXNlVXJsLCBvcHRpb25zKSwgInRpbGUiLCBsYXllcklkLCBncm91cCk7Cn07IC8vIEdpdmVuOgovLyAgIHtkYXRhOiBbImEiLCAiYiIsICJjIl0sIGluZGV4OiBbMCwgMSwgMCwgMl19Ci8vIHJldHVybnM6Ci8vICAgWyJhIiwgImIiLCAiYSIsICJjIl0KCgpmdW5jdGlvbiB1bnBhY2tTdHJpbmdzKGljb25zZXQpIHsKICBpZiAoIWljb25zZXQpIHsKICAgIHJldHVybiBpY29uc2V0OwogIH0KCiAgaWYgKHR5cGVvZiBpY29uc2V0LmluZGV4ID09PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIGljb25zZXQ7CiAgfQoKICBpY29uc2V0LmRhdGEgPSAoMCwgX3V0aWwuYXNBcnJheSkoaWNvbnNldC5kYXRhKTsKICBpY29uc2V0LmluZGV4ID0gKDAsIF91dGlsLmFzQXJyYXkpKGljb25zZXQuaW5kZXgpOwogIHJldHVybiBfanF1ZXJ5MlsiZGVmYXVsdCJdLm1hcChpY29uc2V0LmluZGV4LCBmdW5jdGlvbiAoZSwgaSkgewogICAgcmV0dXJuIGljb25zZXQuZGF0YVtlXTsKICB9KTsKfQoKZnVuY3Rpb24gYWRkTWFya2VycyhtYXAsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbWFya2VyRnVuYykgewogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICB2YXIgY2x1c3Rlckdyb3VwID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpLAogICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyT3B0aW9ucyAhPT0gbnVsbDsKCiAgICBpZiAoY2x1c3RlciAmJiAhY2x1c3Rlckdyb3VwKSB7CiAgICAgIGNsdXN0ZXJHcm91cCA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLm1hcmtlckNsdXN0ZXJHcm91cC5sYXllclN1cHBvcnQoY2x1c3Rlck9wdGlvbnMpOwoKICAgICAgaWYgKGNsdXN0ZXJPcHRpb25zLmZyZWV6ZUF0Wm9vbSkgewogICAgICAgIHZhciBmcmVlemVBdFpvb20gPSBjbHVzdGVyT3B0aW9ucy5mcmVlemVBdFpvb207CiAgICAgICAgZGVsZXRlIGNsdXN0ZXJPcHRpb25zLmZyZWV6ZUF0Wm9vbTsKICAgICAgICBjbHVzdGVyR3JvdXAuZnJlZXplQXRab29tKGZyZWV6ZUF0Wm9vbSk7CiAgICAgIH0KCiAgICAgIGNsdXN0ZXJHcm91cC5jbHVzdGVyTGF5ZXJTdG9yZSA9IG5ldyBfY2x1c3RlckxheWVyU3RvcmUyWyJkZWZhdWx0Il0oY2x1c3Rlckdyb3VwKTsKICAgIH0KCiAgICB2YXIgZXh0cmFJbmZvID0gY2x1c3RlciA/IHsKICAgICAgY2x1c3RlcklkOiBjbHVzdGVySWQKICAgIH0gOiB7fTsKCiAgICB2YXIgX2xvb3AyID0gZnVuY3Rpb24gX2xvb3AyKGkpIHsKICAgICAgaWYgKF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibGF0IikpICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibG5nIikpKSB7CiAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBtYXJrZXIgPSBtYXJrZXJGdW5jKGRmLCBpKTsKICAgICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgImxheWVySWQiKTsKICAgICAgICAgIHZhciB0aGlzR3JvdXAgPSBjbHVzdGVyID8gbnVsbCA6IGRmLmdldChpLCAiZ3JvdXAiKTsKCiAgICAgICAgICBpZiAoY2x1c3RlcikgewogICAgICAgICAgICBjbHVzdGVyR3JvdXAuY2x1c3RlckxheWVyU3RvcmUuYWRkKG1hcmtlciwgdGhpc0lkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKG1hcmtlciwgIm1hcmtlciIsIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgInBvcHVwIik7CiAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKCiAgICAgICAgICBpZiAocG9wdXAgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKHBvcHVwT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kUG9wdXAocG9wdXAsIHBvcHVwT3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbWFya2VyLmJpbmRQb3B1cChwb3B1cCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgbGFiZWwgPSBkZi5nZXQoaSwgImxhYmVsIik7CiAgICAgICAgICB2YXIgbGFiZWxPcHRpb25zID0gZGYuZ2V0KGksICJsYWJlbE9wdGlvbnMiKTsKCiAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmIChsYWJlbE9wdGlvbnMucGVybWFuZW50KSB7CiAgICAgICAgICAgICAgICBtYXJrZXIuYmluZFRvb2x0aXAobGFiZWwsIGxhYmVsT3B0aW9ucykub3BlblRvb2x0aXAoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWFya2VyLmJpbmRUb29sdGlwKGxhYmVsLCBsYWJlbE9wdGlvbnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFRvb2x0aXAobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgbWFya2VyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgIm1hcmtlcl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgICAgbWFya2VyLm9uKCJtb3VzZW92ZXIiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oIm1vdXNlb3V0IiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAibWFya2VyX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oImRyYWdlbmQiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfZHJhZ2VuZCIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICAgIH0pLmNhbGwoX3RoaXMzKTsKICAgICAgfQogICAgfTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICAgIF9sb29wMihpKTsKICAgIH0KCiAgICBpZiAoY2x1c3RlcikgewogICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihjbHVzdGVyR3JvdXAsICJjbHVzdGVyIiwgY2x1c3RlcklkLCBncm91cCk7CiAgICB9CiAgfSkuY2FsbChtYXApOwp9CgptZXRob2RzLmFkZEdlbmVyaWNNYXJrZXJzID0gYWRkTWFya2VyczsKCm1ldGhvZHMuYWRkTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgaWNvbiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICB2YXIgaWNvbmRmOwogIHZhciBnZXRJY29uOwoKICBpZiAoaWNvbikgewogICAgLy8gVW5wYWNrIGljb25zCiAgICBpY29uLmljb25VcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uaWNvblVybCk7CiAgICBpY29uLmljb25SZXRpbmFVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uaWNvblJldGluYVVybCk7CiAgICBpY29uLnNoYWRvd1VybCA9IHVucGFja1N0cmluZ3MoaWNvbi5zaGFkb3dVcmwpOwogICAgaWNvbi5zaGFkb3dSZXRpbmFVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93UmV0aW5hVXJsKTsgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgoKICAgIGljb25kZiA9IG5ldyBfZGF0YWZyYW1lMlsiZGVmYXVsdCJdKCkuY2JpbmQoaWNvbik7IC8vIENvbnN0cnVjdHMgYW4gaWNvbiBmcm9tIGEgc3BlY2lmaWVkIHJvdyBvZiB0aGUgaWNvbiBkYXRhZnJhbWUuCgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CgogICAgICBpZiAoIW9wdHMuaWNvblVybCkgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyWyJkZWZhdWx0Il0uSWNvbi5EZWZhdWx0KCk7CiAgICAgIH0gLy8gQ29tcG9zaXRlIG9wdGlvbnMgKGxpa2UgcG9pbnRzIG9yIHNpemVzKSBhcmUgcGFzc2VkIGZyb20gUiB3aXRoIGVhY2gKICAgICAgLy8gaW5kaXZpZHVhbCBjb21wb25lbnQgYXMgaXRzIG93biBvcHRpb24uIFdlIG5lZWQgdG8gY29tYmluZSB0aGVtIG5vdwogICAgICAvLyBpbnRvIHRoZWlyIGNvbXBvc2l0ZSBmb3JtLgoKCiAgICAgIGlmIChvcHRzLmljb25XaWR0aCkgewogICAgICAgIG9wdHMuaWNvblNpemUgPSBbb3B0cy5pY29uV2lkdGgsIG9wdHMuaWNvbkhlaWdodF07CiAgICAgIH0KCiAgICAgIGlmIChvcHRzLnNoYWRvd1dpZHRoKSB7CiAgICAgICAgb3B0cy5zaGFkb3dTaXplID0gW29wdHMuc2hhZG93V2lkdGgsIG9wdHMuc2hhZG93SGVpZ2h0XTsKICAgICAgfQoKICAgICAgaWYgKG9wdHMuaWNvbkFuY2hvclgpIHsKICAgICAgICBvcHRzLmljb25BbmNob3IgPSBbb3B0cy5pY29uQW5jaG9yWCwgb3B0cy5pY29uQW5jaG9yWV07CiAgICAgIH0KCiAgICAgIGlmIChvcHRzLnNoYWRvd0FuY2hvclgpIHsKICAgICAgICBvcHRzLnNoYWRvd0FuY2hvciA9IFtvcHRzLnNoYWRvd0FuY2hvclgsIG9wdHMuc2hhZG93QW5jaG9yWV07CiAgICAgIH0KCiAgICAgIGlmIChvcHRzLnBvcHVwQW5jaG9yWCkgewogICAgICAgIG9wdHMucG9wdXBBbmNob3IgPSBbb3B0cy5wb3B1cEFuY2hvclgsIG9wdHMucG9wdXBBbmNob3JZXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDJbImRlZmF1bHQiXS5JY29uKG9wdHMpOwogICAgfTsKICB9CgogIGlmICghKF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMlsiZGVmYXVsdCJdKCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNiaW5kKG9wdGlvbnMpLmNiaW5kKGNyb3NzdGFsa09wdGlvbnMgfHwge30pOwogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBvcHRpb25zID0gZGYuZ2V0KGkpOwogICAgICBpZiAoaWNvbikgb3B0aW9ucy5pY29uID0gZ2V0SWNvbihpKTsKICAgICAgcmV0dXJuIF9sZWFmbGV0MlsiZGVmYXVsdCJdLm1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRBd2Vzb21lTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgaWNvbiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICB2YXIgaWNvbmRmOwogIHZhciBnZXRJY29uOwoKICBpZiAoaWNvbikgewogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyWyJkZWZhdWx0Il0oKS5jYmluZChpY29uKTsgLy8gQ29uc3RydWN0cyBhbiBpY29uIGZyb20gYSBzcGVjaWZpZWQgcm93IG9mIHRoZSBpY29uIGRhdGFmcmFtZS4KCiAgICBnZXRJY29uID0gZnVuY3Rpb24gZ2V0SWNvbihpKSB7CiAgICAgIHZhciBvcHRzID0gaWNvbmRmLmdldChpKTsKCiAgICAgIGlmICghb3B0cykgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyWyJkZWZhdWx0Il0uQXdlc29tZU1hcmtlcnMuaWNvbigpOwogICAgICB9CgogICAgICBpZiAob3B0cy5zcXVhcmVNYXJrZXIpIHsKICAgICAgICBvcHRzLmNsYXNzTmFtZSA9ICJhd2Vzb21lLW1hcmtlciBhd2Vzb21lLW1hcmtlci1zcXVhcmUiOwogICAgICB9CgogICAgICByZXR1cm4gbmV3IF9sZWFmbGV0MlsiZGVmYXVsdCJdLkF3ZXNvbWVNYXJrZXJzLmljb24ob3B0cyk7CiAgICB9OwogIH0KCiAgaWYgKCEoX2pxdWVyeTJbImRlZmF1bHQiXS5pc0VtcHR5T2JqZWN0KGxhdCkgfHwgX2pxdWVyeTJbImRlZmF1bHQiXS5pc0VtcHR5T2JqZWN0KGxuZykpIHx8IF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGxhdCkgJiYgX2pxdWVyeTJbImRlZmF1bHQiXS5pc051bWVyaWMobG5nKSkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyWyJkZWZhdWx0Il0oKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CiAgICBpZiAoaWNvbikgaWNvbmRmLmVmZmVjdGl2ZUxlbmd0aCA9IGRmLm5yb3coKTsKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgdmFyIG9wdGlvbnMgPSBkZi5nZXQoaSk7CiAgICAgIGlmIChpY29uKSBvcHRpb25zLmljb24gPSBnZXRJY29uKGkpOwogICAgICByZXR1cm4gX2xlYWZsZXQyWyJkZWZhdWx0Il0ubWFya2VyKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSwgb3B0aW9ucyk7CiAgICB9KTsKICB9Cn07CgpmdW5jdGlvbiBhZGRMYXllcnMobWFwLCBjYXRlZ29yeSwgZGYsIGxheWVyRnVuYykgewogIHZhciBfbG9vcDMgPSBmdW5jdGlvbiBfbG9vcDMoaSkgewogICAgKGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGxheWVyID0gbGF5ZXJGdW5jKGRmLCBpKTsKCiAgICAgIGlmICghX2pxdWVyeTJbImRlZmF1bHQiXS5pc0VtcHR5T2JqZWN0KGxheWVyKSkgewogICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgImxheWVySWQiKTsKICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGxheWVyLCBjYXRlZ29yeSwgdGhpc0lkLCB0aGlzR3JvdXAsIGRmLmdldChpLCAiY3RHcm91cCIsIHRydWUpLCBkZi5nZXQoaSwgImN0S2V5IiwgdHJ1ZSkpOwoKICAgICAgICBpZiAobGF5ZXIuYmluZFBvcHVwKSB7CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgInBvcHVwIik7CiAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKCiAgICAgICAgICBpZiAocG9wdXAgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKHBvcHVwT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGxheWVyLmJpbmRQb3B1cChwb3B1cCwgcG9wdXBPcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAobGF5ZXIuYmluZFRvb2x0aXApIHsKICAgICAgICAgIHZhciBsYWJlbCA9IGRmLmdldChpLCAibGFiZWwiKTsKICAgICAgICAgIHZhciBsYWJlbE9wdGlvbnMgPSBkZi5nZXQoaSwgImxhYmVsT3B0aW9ucyIpOwoKICAgICAgICAgIGlmIChsYWJlbCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAobGFiZWxPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgbGF5ZXIuYmluZFRvb2x0aXAobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbGF5ZXIuYmluZFRvb2x0aXAobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgIl9jbGljayIpLCB0aGlzKTsKICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICJfbW91c2VvdmVyIiksIHRoaXMpOwogICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAiX21vdXNlb3V0IiksIHRoaXMpOwogICAgICAgIHZhciBoaWdobGlnaHRTdHlsZSA9IGRmLmdldChpLCAiaGlnaGxpZ2h0T3B0aW9ucyIpOwoKICAgICAgICBpZiAoIV9qcXVlcnkyWyJkZWZhdWx0Il0uaXNFbXB0eU9iamVjdChoaWdobGlnaHRTdHlsZSkpIHsKICAgICAgICAgIHZhciBkZWZhdWx0U3R5bGUgPSB7fTsKCiAgICAgICAgICBfanF1ZXJ5MlsiZGVmYXVsdCJdLmVhY2goaGlnaGxpZ2h0U3R5bGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgICAgIGlmIChrICE9ICJicmluZ1RvRnJvbnQiICYmIGsgIT0gInNlbmRUb0JhY2siKSB7CiAgICAgICAgICAgICAgaWYgKGRmLmdldChpLCBrKSkgewogICAgICAgICAgICAgICAgZGVmYXVsdFN0eWxlW2tdID0gZGYuZ2V0KGksIGspOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoaGlnaGxpZ2h0U3R5bGUpOwoKICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLmJyaW5nVG9Gcm9udCkgewogICAgICAgICAgICAgIHRoaXMuYnJpbmdUb0Zyb250KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgbGF5ZXIub24oIm1vdXNlb3V0IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhpcy5zZXRTdHlsZShkZWZhdWx0U3R5bGUpOwoKICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLnNlbmRUb0JhY2spIHsKICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9CYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSkuY2FsbChtYXApOwogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wMyhpKTsKICB9Cn0KCm1ldGhvZHMuYWRkR2VuZXJpY0xheWVycyA9IGFkZExheWVyczsKCm1ldGhvZHMuYWRkQ2lyY2xlcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIGlmICghKF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMlsiZGVmYXVsdCJdKCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInJhZGl1cyIsIHJhZGl1cykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIGlmIChfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdCIpKSAmJiBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZyIpKSAmJiBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhkZi5nZXQoaSwgInJhZGl1cyIpKSkgewogICAgICAgIHJldHVybiBfbGVhZmxldDJbImRlZmF1bHQiXS5jaXJjbGUoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBkZi5nZXQoaSwgInJhZGl1cyIpLCBkZi5nZXQoaSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9KTsKICB9Cn07CgptZXRob2RzLmFkZENpcmNsZU1hcmtlcnMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIHJhZGl1cywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICBpZiAoIShfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTJbImRlZmF1bHQiXS5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhsbmcpKSB7CiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTJbImRlZmF1bHQiXSgpLmNvbCgibGF0IiwgbGF0KS5jb2woImxuZyIsIGxuZykuY29sKCJyYWRpdXMiLCByYWRpdXMpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSkuY2JpbmQob3B0aW9ucyk7CiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHJldHVybiBfbGVhZmxldDJbImRlZmF1bHQiXS5jaXJjbGVNYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBkZi5nZXQoaSkpOwogICAgfSk7CiAgfQp9OwovKgogKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqIEBwYXJhbSBsbmcgQXJyYXkgb2YgYXJyYXlzIG9mIGxvbmdpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqLwoKCm1ldGhvZHMuYWRkUG9seWxpbmVzID0gZnVuY3Rpb24gKHBvbHlnb25zLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIGlmIChwb2x5Z29ucy5sZW5ndGggPiAwKSB7CiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTJbImRlZmF1bHQiXSgpLmNvbCgic2hhcGVzIiwgcG9seWdvbnMpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY29sKCJoaWdobGlnaHRPcHRpb25zIiwgaGlnaGxpZ2h0T3B0aW9ucykuY2JpbmQob3B0aW9ucyk7CiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgc2hhcGVzID0gZGYuZ2V0KGksICJzaGFwZXMiKTsKICAgICAgc2hhcGVzID0gc2hhcGVzLm1hcChmdW5jdGlvbiAoc2hhcGUpIHsKICAgICAgICByZXR1cm4gX2h0bWx3aWRnZXRzMlsiZGVmYXVsdCJdLmRhdGFmcmFtZVRvRDMoc2hhcGVbMF0pOwogICAgICB9KTsKCiAgICAgIGlmIChzaGFwZXMubGVuZ3RoID4gMSkgewogICAgICAgIHJldHVybiBfbGVhZmxldDJbImRlZmF1bHQiXS5wb2x5bGluZShzaGFwZXMsIGRmLmdldChpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0MlsiZGVmYXVsdCJdLnBvbHlsaW5lKHNoYXBlc1swXSwgZGYuZ2V0KGkpKTsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJtYXJrZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJNYXJrZXJzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJtYXJrZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyQ2x1c3RlciA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImNsdXN0ZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyRnJvbUNsdXN0ZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCwgY2x1c3RlcklkKSB7CiAgdmFyIGNsdXN0ZXIgPSB0aGlzLmxheWVyTWFuYWdlci5nZXRMYXllcigiY2x1c3RlciIsIGNsdXN0ZXJJZCk7CiAgaWYgKCFjbHVzdGVyKSByZXR1cm47CiAgY2x1c3Rlci5jbHVzdGVyTGF5ZXJTdG9yZS5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyTWFya2VyQ2x1c3RlcnMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImNsdXN0ZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJzaGFwZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclNoYXBlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygic2hhcGUiKTsKfTsKCm1ldGhvZHMuYWRkUmVjdGFuZ2xlcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMlsiZGVmYXVsdCJdKCkuY29sKCJsYXQxIiwgbGF0MSkuY29sKCJsbmcxIiwgbG5nMSkuY29sKCJsYXQyIiwgbGF0MikuY29sKCJsbmcyIiwgbG5nMikuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgaWYgKF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibGF0MSIpKSAmJiBfanF1ZXJ5MlsiZGVmYXVsdCJdLmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZzEiKSkgJiYgX2pxdWVyeTJbImRlZmF1bHQiXS5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQyIikpICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaXNOdW1lcmljKGRmLmdldChpLCAibG5nMiIpKSkgewogICAgICByZXR1cm4gX2xlYWZsZXQyWyJkZWZhdWx0Il0ucmVjdGFuZ2xlKFtbZGYuZ2V0KGksICJsYXQxIiksIGRmLmdldChpLCAibG5nMSIpXSwgW2RmLmdldChpLCAibGF0MiIpLCBkZi5nZXQoaSwgImxuZzIiKV1dLCBkZi5nZXQoaSkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSk7Cn07Ci8qCiAqIEBwYXJhbSBsYXQgQXJyYXkgb2YgYXJyYXlzIG9mIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5Z29ucwogKiBAcGFyYW0gbG5nIEFycmF5IG9mIGFycmF5cyBvZiBsb25naXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAqLwoKCm1ldGhvZHMuYWRkUG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBoaWdobGlnaHRPcHRpb25zKSB7CiAgaWYgKHBvbHlnb25zLmxlbmd0aCA+IDApIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMlsiZGVmYXVsdCJdKCkuY29sKCJzaGFwZXMiLCBwb2x5Z29ucykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIC8vIFRoaXMgY29kZSB1c2VkIHRvIHVzZSBMLm11bHRpUG9seWdvbiwgYnV0IHRoYXQgY2F1c2VkCiAgICAgIC8vIGRvdWJsZS1jbGljayBvbiBhIG11bHRpcG9seWdvbiB0byBmYWlsIHRvIHpvb20gaW4gb24gdGhlCiAgICAgIC8vIG1hcC4gU3VycHJpc2luZ2x5LCBwdXR0aW5nIGFsbCB0aGUgcmluZ3MgaW4gYSBzaW5nbGUKICAgICAgLy8gcG9seWdvbiBzZWVtcyB0byBzdGlsbCB3b3JrOyBjb21wbGljYXRlZCBtdWx0aXBvbHlnb25zCiAgICAgIC8vIGFyZSBzdGlsbCByZW5kZXJlZCBjb3JyZWN0bHkuCiAgICAgIHZhciBzaGFwZXMgPSBkZi5nZXQoaSwgInNoYXBlcyIpLm1hcChmdW5jdGlvbiAocG9seWdvbikgewogICAgICAgIHJldHVybiBwb2x5Z29uLm1hcChfaHRtbHdpZGdldHMyWyJkZWZhdWx0Il0uZGF0YWZyYW1lVG9EMyk7CiAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCB2YWwpIHsKICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh2YWwpOwogICAgICB9LCBbXSk7CiAgICAgIHJldHVybiBfbGVhZmxldDJbImRlZmF1bHQiXS5wb2x5Z29uKHNoYXBlcywgZGYuZ2V0KGkpKTsKICAgIH0pOwogIH0KfTsKCm1ldGhvZHMuYWRkR2VvSlNPTiA9IGZ1bmN0aW9uIChkYXRhLCBsYXllcklkLCBncm91cCwgc3R5bGUpIHsKICAvLyBUaGlzIHRpbWUsIHNlbGYgaXMgYWN0dWFsbHkgbmVlZGVkIGJlY2F1c2UgdGhlIGNhbGxiYWNrcyBiZWxvdyBuZWVkCiAgLy8gdG8gYWNjZXNzIGJvdGggdGhlIGlubmVyIGFuZCBvdXRlciBzZW5zZXMgb2YgInRoaXMiCiAgdmFyIHNlbGYgPSB0aGlzOwoKICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICB9CgogIHZhciBnbG9iYWxTdHlsZSA9IF9qcXVlcnkyWyJkZWZhdWx0Il0uZXh0ZW5kKHt9LCBzdHlsZSwgZGF0YS5zdHlsZSB8fCB7fSk7CgogIHZhciBnamxheWVyID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uZ2VvSnNvbihkYXRhLCB7CiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICByZXR1cm4gX2pxdWVyeTJbImRlZmF1bHQiXS5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgfQogICAgfSwKICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uIG9uRWFjaEZlYXR1cmUoZmVhdHVyZSwgbGF5ZXIpIHsKICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzCiAgICAgIH07CiAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcyA/IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cCA6IG51bGw7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW92ZXIiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX21vdXNlb3ZlciIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJnZW9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CgogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGdqbGF5ZXIsICJnZW9qc29uIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKbWV0aG9kcy5yZW1vdmVHZW9KU09OID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiZ2VvanNvbiIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhckdlb0pTT04gPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImdlb2pzb24iKTsKfTsKCm1ldGhvZHMuYWRkVG9wb0pTT04gPSBmdW5jdGlvbiAoZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgLy8gVGhpcyB0aW1lLCBzZWxmIGlzIGFjdHVhbGx5IG5lZWRlZCBiZWNhdXNlIHRoZSBjYWxsYmFja3MgYmVsb3cgbmVlZAogIC8vIHRvIGFjY2VzcyBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2Vuc2VzIG9mICJ0aGlzIgogIHZhciBzZWxmID0gdGhpczsKCiAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgfQoKICB2YXIgZ2xvYmFsU3R5bGUgPSBfanF1ZXJ5MlsiZGVmYXVsdCJdLmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICB2YXIgZ2psYXllciA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLmdlb0pzb24obnVsbCwgewogICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgcmV0dXJuIF9qcXVlcnkyWyJkZWZhdWx0Il0uZXh0ZW5kKHt9LCBnbG9iYWxTdHlsZSwgZmVhdHVyZS5zdHlsZSwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgIH0KICAgIH0sCiAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbiBvbkVhY2hGZWF0dXJlKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlLmlkLAogICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICB9OwogICAgICB2YXIgcG9wdXAgPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAidG9wb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CgogIGdsb2JhbC5vbW5pdm9yZS50b3BvanNvbi5wYXJzZShkYXRhLCBudWxsLCBnamxheWVyKTsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAidG9wb2pzb24iLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZVRvcG9KU09OID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidG9wb2pzb24iLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJUb3BvSlNPTiA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygidG9wb2pzb24iKTsKfTsKCm1ldGhvZHMuYWRkQ29udHJvbCA9IGZ1bmN0aW9uIChodG1sLCBwb3NpdGlvbiwgbGF5ZXJJZCwgY2xhc3NlcykgewogIGZ1bmN0aW9uIG9uQWRkKG1hcCkgewogICAgdmFyIGRpdiA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCBjbGFzc2VzKTsKCiAgICBpZiAodHlwZW9mIGxheWVySWQgIT09ICJ1bmRlZmluZWQiICYmIGxheWVySWQgIT09IG51bGwpIHsKICAgICAgZGl2LnNldEF0dHJpYnV0ZSgiaWQiLCBsYXllcklkKTsKICAgIH0KCiAgICB0aGlzLl9kaXYgPSBkaXY7IC8vIEl0J3MgcG9zc2libGUgZm9yIHdpbmRvdy5TaGlueSB0byBiZSB0cnVlIGJ1dCBTaGlueS5pbml0aWFsaXplSW5wdXRzIHRvCiAgICAvLyBub3QgYmUsIHdoZW4gYSBzdGF0aWMgbGVhZmxldCB3aWRnZXQgaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUgc2hpbnkKICAgIC8vIFVJIGRpcmVjdGx5IChub3QgdGhyb3VnaCBsZWFmbGV0T3V0cHV0IG9yIHVpT3V0cHV0KS4gSW4gdGhpcyBjYXNlIHdlCiAgICAvLyBkb24ndCBkbyB0aGUgbm9ybWFsIFNoaW55IHN0dWZmIGFzIHRoYXQgd2lsbCBhbGwgaGFwcGVuIHdoZW4gU2hpbnkKICAgIC8vIGl0c2VsZiBsb2FkcyBhbmQgYmluZHMgdGhlIGVudGlyZSBkb2MuCgogICAgaWYgKHdpbmRvdy5TaGlueSAmJiBfc2hpbnkyWyJkZWZhdWx0Il0uaW5pdGlhbGl6ZUlucHV0cykgewogICAgICBfc2hpbnkyWyJkZWZhdWx0Il0ucmVuZGVySHRtbChodG1sLCB0aGlzLl9kaXYpOwoKICAgICAgX3NoaW55MlsiZGVmYXVsdCJdLmluaXRpYWxpemVJbnB1dHModGhpcy5fZGl2KTsKCiAgICAgIF9zaGlueTJbImRlZmF1bHQiXS5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9kaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5fZGl2OwogIH0KCiAgZnVuY3Rpb24gb25SZW1vdmUobWFwKSB7CiAgICBpZiAod2luZG93LlNoaW55ICYmIF9zaGlueTJbImRlZmF1bHQiXS51bmJpbmRBbGwpIHsKICAgICAgX3NoaW55MlsiZGVmYXVsdCJdLnVuYmluZEFsbCh0aGlzLl9kaXYpOwogICAgfQogIH0KCiAgdmFyIENvbnRyb2wgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5Db250cm9sLmV4dGVuZCh7CiAgICBvcHRpb25zOiB7CiAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbgogICAgfSwKICAgIG9uQWRkOiBvbkFkZCwKICAgIG9uUmVtb3ZlOiBvblJlbW92ZQogIH0pOwoKICB0aGlzLmNvbnRyb2xzLmFkZChuZXcgQ29udHJvbCgpLCBsYXllcklkLCBodG1sKTsKfTsKCm1ldGhvZHMuYWRkQ3VzdG9tQ29udHJvbCA9IGZ1bmN0aW9uIChjb250cm9sLCBsYXllcklkKSB7CiAgdGhpcy5jb250cm9scy5hZGQoY29udHJvbCwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLnJlbW92ZUNvbnRyb2wgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMuY29udHJvbHMucmVtb3ZlKGxheWVySWQpOwp9OwoKbWV0aG9kcy5nZXRDb250cm9sID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmNvbnRyb2xzLmdldChsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJDb250cm9scyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmNvbnRyb2xzLmNsZWFyKCk7Cn07CgptZXRob2RzLmFkZExlZ2VuZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgdmFyIGxlZ2VuZCA9IF9sZWFmbGV0MlsiZGVmYXVsdCJdLmNvbnRyb2woewogICAgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24KICB9KTsKCiAgdmFyIGdyYWRTcGFuOwoKICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uRG9tVXRpbC5jcmVhdGUoImRpdiIsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscywKICAgICAgICBsZWdlbmRIVE1MID0gIiI7CgogICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gIm51bWVyaWMiKSB7CiAgICAgIC8vICMgRm9ybWF0dGluZyBjb25zdGFudHMuCiAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKCiAgICAgIHZhciB2TWFyZ2luID0gODsgLy8gSWYgMXN0IHRpY2sgbWFyayBzdGFydHMgYXQgdG9wIG9mIGdyYWRpZW50LCBob3cKICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgIC8vIDFzdCBsYWJlbD8gKGRpdHRvIGZvciBsYXN0IHRpY2sgbWFyay9sYWJlbCkKCiAgICAgIHZhciB0aWNrV2lkdGggPSA0OyAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CgogICAgICB2YXIgbGFiZWxQYWRkaW5nID0gNjsgLy8gSG93IG11Y2ggZGlzdGFuY2UgdG8gcmVzZXJ2ZSBmb3IgdGljayBtYXJrPwogICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCiAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCiAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgLy8gSXQgbWlnaHQgbm90IGp1c3QgYmUgMS8obi0xKSwgaWYgdGhlIGdyYWRpZW50IGV4dGVuZHMgcGFzdCB0aGUgdGljawogICAgICAvLyBtYXJrcyAod2hpY2ggY2FuIGJlIHRoZSBjYXNlIGZvciBwcmV0dHkgY3V0IHBvaW50cykuCgogICAgICB2YXIgc2luZ2xlQmluUGN0ID0gKG9wdGlvbnMuZXh0cmEucF9uIC0gb3B0aW9ucy5leHRyYS5wXzEpIC8gKGxhYmVscy5sZW5ndGggLSAxKTsgLy8gRWFjaCBiaW4gaXMgYHNpbmdsZUJpbkhlaWdodGAgaGlnaC4gSG93IHRhbGwgaXMgdGhlIGdyYWRpZW50PwoKICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gMSAvIHNpbmdsZUJpblBjdCAqIHNpbmdsZUJpbkhlaWdodCArIDE7IC8vIEhvdyBmYXIgc2hvdWxkIHRoZSBmaXJzdCB0aWNrIGJlIHNoaWZ0ZWQgZG93biwgcmVsYXRpdmUgdG8gdGhlIHRvcAogICAgICAvLyBvZiB0aGUgZ3JhZGllbnQ/CgogICAgICB2YXIgdGlja09mZnNldCA9IHNpbmdsZUJpbkhlaWdodCAvIHNpbmdsZUJpblBjdCAqIG9wdGlvbnMuZXh0cmEucF8xOwogICAgICBncmFkU3BhbiA9ICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKSgiPHNwYW4vPiIpLmNzcyh7CiAgICAgICAgImJhY2tncm91bmQiOiAibGluZWFyLWdyYWRpZW50KCIgKyBjb2xvcnMgKyAiKSIsCiAgICAgICAgIm9wYWNpdHkiOiBvcHRpb25zLm9wYWNpdHksCiAgICAgICAgImhlaWdodCI6IHRvdGFsSGVpZ2h0ICsgInB4IiwKICAgICAgICAid2lkdGgiOiAiMThweCIsCiAgICAgICAgImRpc3BsYXkiOiAiYmxvY2siLAogICAgICAgICJtYXJnaW4tdG9wIjogdk1hcmdpbiArICJweCIKICAgICAgfSk7CiAgICAgIHZhciBsZWZ0RGl2ID0gKDAsIF9qcXVlcnkyWyJkZWZhdWx0Il0pKCI8ZGl2Lz4iKS5jc3MoImZsb2F0IiwgImxlZnQiKSwKICAgICAgICAgIHJpZ2h0RGl2ID0gKDAsIF9qcXVlcnkyWyJkZWZhdWx0Il0pKCI8ZGl2Lz4iKS5jc3MoImZsb2F0IiwgImxlZnQiKTsKICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkoZGl2KS5hcHBlbmQobGVmdERpdikuYXBwZW5kKHJpZ2h0RGl2KS5hcHBlbmQoKDAsIF9qcXVlcnkyWyJkZWZhdWx0Il0pKCI8YnI+IikpOyAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgIC8vIHN2ZyB0ZXh0IGdldENvbXB1dGVkVGV4dExlbmd0aCgpIGFjdHVhbGx5IHdvcmtzLCBiZWxvdy4KCiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKICAgICAgdmFyIG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKICAgICAgdmFyIHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgInN2ZyIpOwogICAgICByaWdodERpdi5hcHBlbmQoc3ZnKTsKICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICJnIik7CiAgICAgICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKShnKS5hdHRyKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsICIgKyB2TWFyZ2luICsgIikiKTsKICAgICAgc3ZnLmFwcGVuZENoaWxkKGcpOyAvLyBtYXggbGFiZWwgd2lkdGggbmVlZGVkIHRvIHNldCB3aWR0aCBvZiBzdmcsIGFuZCByaWdodC1qdXN0aWZ5IHRleHQKCiAgICAgIHZhciBtYXhMYmxXaWR0aCA9IDA7IC8vIENyZWF0ZSB0aWNrIG1hcmtzIGFuZCBsYWJlbHMKCiAgICAgIF9qcXVlcnkyWyJkZWZhdWx0Il0uZWFjaChsYWJlbHMsIGZ1bmN0aW9uIChpLCBsYWJlbCkgewogICAgICAgIHZhciB5ID0gdGlja09mZnNldCArIGkgKiBzaW5nbGVCaW5IZWlnaHQgKyAwLjU7CiAgICAgICAgdmFyIHRoaXNMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgInRleHQiKTsKICAgICAgICAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkodGhpc0xhYmVsKS50ZXh0KGxhYmVsc1tpXSkuYXR0cigieSIsIHkpLmF0dHIoImR4IiwgbGFiZWxQYWRkaW5nKS5hdHRyKCJkeSIsICIwLjVleCIpOwogICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICBtYXhMYmxXaWR0aCA9IE1hdGgubWF4KG1heExibFdpZHRoLCB0aGlzTGFiZWwuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkpOwogICAgICAgIHZhciB0aGlzVGljayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhucywgImxpbmUiKTsKICAgICAgICAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkodGhpc1RpY2spLmF0dHIoIngxIiwgMCkuYXR0cigieDIiLCB0aWNrV2lkdGgpLmF0dHIoInkxIiwgeSkuYXR0cigieTIiLCB5KS5hdHRyKCJzdHJva2Utd2lkdGgiLCAxKTsKICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgfSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhlIG1heCBsYWJlbCB3aWR0aCwgd2UgY2FuIHJpZ2h0LWp1c3RpZnkKCgogICAgICAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkoc3ZnKS5maW5kKCJ0ZXh0IikuYXR0cigiZHgiLCBsYWJlbFBhZGRpbmcgKyBtYXhMYmxXaWR0aCkuYXR0cigidGV4dC1hbmNob3IiLCAiZW5kIik7IC8vIEZpbmFsIHNpemUgZm9yIDxzdmc+CgogICAgICAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkoc3ZnKS5jc3MoewogICAgICAgIHdpZHRoOiBtYXhMYmxXaWR0aCArIGxhYmVsUGFkZGluZyArICJweCIsCiAgICAgICAgaGVpZ2h0OiB0b3RhbEhlaWdodCArIHZNYXJnaW4gKiAyICsgInB4IgogICAgICB9KTsKCiAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yICYmIF9qcXVlcnkyWyJkZWZhdWx0Il0uaW5BcnJheShvcHRpb25zLm5hX2xhYmVsLCBsYWJlbHMpIDwgMCkgewogICAgICAgICgwLCBfanF1ZXJ5MlsiZGVmYXVsdCJdKShkaXYpLmFwcGVuZCgiPGRpdj48aSBzdHlsZT1cIiIgKyAiYmFja2dyb3VuZDoiICsgb3B0aW9ucy5uYV9jb2xvciArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIjttYXJnaW4tcmlnaHQ6IiArIGxhYmVsUGFkZGluZyArICJweCIgKyAiO1wiPjwvaT4iICsgb3B0aW9ucy5uYV9sYWJlbCArICI8L2Rpdj4iKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKG9wdGlvbnMubmFfY29sb3IgJiYgX2pxdWVyeTJbImRlZmF1bHQiXS5pbkFycmF5KG9wdGlvbnMubmFfbGFiZWwsIGxhYmVscykgPCAwKSB7CiAgICAgICAgY29sb3JzLnB1c2gob3B0aW9ucy5uYV9jb2xvcik7CiAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgIH0KCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGVnZW5kSFRNTCArPSAiPGkgc3R5bGU9XCJiYWNrZ3JvdW5kOiIgKyBjb2xvcnNbaV0gKyAiO29wYWNpdHk6IiArIG9wdGlvbnMub3BhY2l0eSArICJcIj48L2k+ICIgKyBsYWJlbHNbaV0gKyAiPGJyPiI7CiAgICAgIH0KCiAgICAgIGRpdi5pbm5lckhUTUwgPSBsZWdlbmRIVE1MOwogICAgfQoKICAgIGlmIChvcHRpb25zLnRpdGxlKSAoMCwgX2pxdWVyeTJbImRlZmF1bHQiXSkoZGl2KS5wcmVwZW5kKCI8ZGl2IHN0eWxlPVwibWFyZ2luLWJvdHRvbTozcHhcIj48c3Ryb25nPiIgKyBvcHRpb25zLnRpdGxlICsgIjwvc3Ryb25nPjwvZGl2PiIpOwogICAgcmV0dXJuIGRpdjsKICB9OwoKICBpZiAob3B0aW9ucy5ncm91cCkgewogICAgLy8gQXV0byBnZW5lcmF0ZSBhIGxheWVySUQgaWYgbm90IHByb3ZpZGVkCiAgICBpZiAoIW9wdGlvbnMubGF5ZXJJZCkgewogICAgICBvcHRpb25zLmxheWVySWQgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5VdGlsLnN0YW1wKGxlZ2VuZCk7CiAgICB9CgogICAgdmFyIG1hcCA9IHRoaXM7CiAgICBtYXAub24oIm92ZXJsYXlhZGQiLCBmdW5jdGlvbiAoZSkgewogICAgICBpZiAoZS5uYW1lID09PSBvcHRpb25zLmdyb3VwKSB7CiAgICAgICAgbWFwLmNvbnRyb2xzLmFkZChsZWdlbmQsIG9wdGlvbnMubGF5ZXJJZCk7CiAgICAgIH0KICAgIH0pOwogICAgbWFwLm9uKCJvdmVybGF5cmVtb3ZlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgaWYgKGUubmFtZSA9PT0gb3B0aW9ucy5ncm91cCkgewogICAgICAgIG1hcC5jb250cm9scy5yZW1vdmUob3B0aW9ucy5sYXllcklkKTsKICAgICAgfQogICAgfSk7CiAgICBtYXAub24oImdyb3VwYWRkIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgaWYgKGUubmFtZSA9PT0gb3B0aW9ucy5ncm91cCkgewogICAgICAgIG1hcC5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwogICAgICB9CiAgICB9KTsKICAgIG1hcC5vbigiZ3JvdXByZW1vdmUiLCBmdW5jdGlvbiAoZSkgewogICAgICBpZiAoZS5uYW1lID09PSBvcHRpb25zLmdyb3VwKSB7CiAgICAgICAgbWFwLmNvbnRyb2xzLnJlbW92ZShvcHRpb25zLmxheWVySWQpOwogICAgICB9CiAgICB9KTsKICB9CgogIHRoaXMuY29udHJvbHMuYWRkKGxlZ2VuZCwgb3B0aW9ucy5sYXllcklkKTsKfTsKCm1ldGhvZHMuYWRkTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uIChiYXNlR3JvdXBzLCBvdmVybGF5R3JvdXBzLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzNCA9IHRoaXM7CgogIC8vIE9ubHkgYWxsb3cgb25lIGxheWVycyBjb250cm9sIGF0IGEgdGltZQogIG1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbC5jYWxsKHRoaXMpOwogIHZhciBmaXJzdExheWVyID0gdHJ1ZTsKICB2YXIgYmFzZSA9IHt9OwoKICBfanF1ZXJ5MlsiZGVmYXVsdCJdLmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGJhc2VHcm91cHMpLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM0LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwoKICAgIGlmIChsYXllcikgewogICAgICBiYXNlW2ddID0gbGF5ZXI7IC8vIENoZWNrIGlmID4xIGJhc2UgbGF5ZXJzIGFyZSB2aXNpYmxlOyBpZiBzbywgaGlkZSBhbGwgYnV0IHRoZSBmaXJzdCBvbmUKCiAgICAgIGlmIChfdGhpczQuaGFzTGF5ZXIobGF5ZXIpKSB7CiAgICAgICAgaWYgKGZpcnN0TGF5ZXIpIHsKICAgICAgICAgIGZpcnN0TGF5ZXIgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXM0LnJlbW92ZUxheWVyKGxheWVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9KTsKCiAgdmFyIG92ZXJsYXkgPSB7fTsKCiAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShvdmVybGF5R3JvdXBzKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNC5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKCiAgICBpZiAobGF5ZXIpIHsKICAgICAgb3ZlcmxheVtnXSA9IGxheWVyOwogICAgfQogIH0pOwoKICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uY29udHJvbC5sYXllcnMoYmFzZSwgb3ZlcmxheSwgb3B0aW9ucyk7CiAgdGhpcy5hZGRDb250cm9sKHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wpOwp9OwoKbWV0aG9kcy5yZW1vdmVMYXllcnNDb250cm9sID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sKSB7CiAgICB0aGlzLnJlbW92ZUNvbnRyb2wodGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCk7CiAgICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gbnVsbDsKICB9Cn07CgptZXRob2RzLmFkZFNjYWxlQmFyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAvLyBPbmx5IGFsbG93IG9uZSBzY2FsZSBiYXIgYXQgYSB0aW1lCiAgbWV0aG9kcy5yZW1vdmVTY2FsZUJhci5jYWxsKHRoaXMpOwoKICB2YXIgc2NhbGVCYXIgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5jb250cm9sLnNjYWxlKG9wdGlvbnMpLmFkZFRvKHRoaXMpOwoKICB0aGlzLmN1cnJlbnRTY2FsZUJhciA9IHNjYWxlQmFyOwp9OwoKbWV0aG9kcy5yZW1vdmVTY2FsZUJhciA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5jdXJyZW50U2NhbGVCYXIpIHsKICAgIHRoaXMuY3VycmVudFNjYWxlQmFyLnJlbW92ZSgpOwogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuaGlkZUdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzNSA9IHRoaXM7CgogIF9qcXVlcnkyWyJkZWZhdWx0Il0uZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM1LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwoKICAgIGlmIChsYXllcikgewogICAgICBfdGhpczUucmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgfQogIH0pOwp9OwoKbWV0aG9kcy5zaG93R3JvdXAgPSBmdW5jdGlvbiAoZ3JvdXApIHsKICB2YXIgX3RoaXM2ID0gdGhpczsKCiAgX2pxdWVyeTJbImRlZmF1bHQiXS5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczYubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CgogICAgaWYgKGxheWVyKSB7CiAgICAgIF90aGlzNi5hZGRMYXllcihsYXllcik7CiAgICB9CiAgfSk7Cn07CgpmdW5jdGlvbiBzZXR1cFNob3dIaWRlR3JvdXBzT25ab29tKG1hcCkgewogIGlmIChtYXAubGVhZmxldHIuX2hhc0luaXRpYWxpemVkU2hvd0hpZGVHcm91cHMpIHsKICAgIHJldHVybjsKICB9CgogIG1hcC5sZWFmbGV0ci5faGFzSW5pdGlhbGl6ZWRTaG93SGlkZUdyb3VwcyA9IHRydWU7CgogIGZ1bmN0aW9uIHNldFZpc2liaWxpdHkobGF5ZXIsIHZpc2libGUsIGdyb3VwKSB7CiAgICBpZiAodmlzaWJsZSAhPT0gbWFwLmhhc0xheWVyKGxheWVyKSkgewogICAgICBpZiAodmlzaWJsZSkgewogICAgICAgIG1hcC5hZGRMYXllcihsYXllcik7CiAgICAgICAgbWFwLmZpcmUoImdyb3VwYWRkIiwgewogICAgICAgICAgIm5hbWUiOiBncm91cCwKICAgICAgICAgICJsYXllciI6IGxheWVyCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyKTsKICAgICAgICBtYXAuZmlyZSgiZ3JvdXByZW1vdmUiLCB7CiAgICAgICAgICAibmFtZSI6IGdyb3VwLAogICAgICAgICAgImxheWVyIjogbGF5ZXIKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hvd0hpZGVHcm91cHNPblpvb20oKSB7CiAgICBpZiAoIW1hcC5sYXllck1hbmFnZXIpIHJldHVybjsKICAgIHZhciB6b29tID0gbWFwLmdldFpvb20oKTsKICAgIG1hcC5sYXllck1hbmFnZXIuZ2V0QWxsR3JvdXBOYW1lcygpLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7CiAgICAgIHZhciBsYXllciA9IG1hcC5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChncm91cCwgZmFsc2UpOwoKICAgICAgaWYgKGxheWVyICYmIHR5cGVvZiBsYXllci56b29tTGV2ZWxzICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHNldFZpc2liaWxpdHkobGF5ZXIsIGxheWVyLnpvb21MZXZlbHMgPT09IHRydWUgfHwgbGF5ZXIuem9vbUxldmVscy5pbmRleE9mKHpvb20pID49IDAsIGdyb3VwKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBtYXAuc2hvd0hpZGVHcm91cHNPblpvb20gPSBzaG93SGlkZUdyb3Vwc09uWm9vbTsKICBtYXAub24oInpvb21lbmQiLCBzaG93SGlkZUdyb3Vwc09uWm9vbSk7Cn0KCm1ldGhvZHMuc2V0R3JvdXBPcHRpb25zID0gZnVuY3Rpb24gKGdyb3VwLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzNyA9IHRoaXM7CgogIF9qcXVlcnkyWyJkZWZhdWx0Il0uZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM3LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOyAvLyBUaGlzIHNsaWdodGx5IHRvcnR1cmVkIGNoZWNrIGlzIGJlY2F1c2UgMCBpcyBhIHZhbGlkIHZhbHVlIGZvciB6b29tTGV2ZWxzCgoKICAgIGlmICh0eXBlb2Ygb3B0aW9ucy56b29tTGV2ZWxzICE9PSAidW5kZWZpbmVkIiAmJiBvcHRpb25zLnpvb21MZXZlbHMgIT09IG51bGwpIHsKICAgICAgbGF5ZXIuem9vbUxldmVscyA9ICgwLCBfdXRpbC5hc0FycmF5KShvcHRpb25zLnpvb21MZXZlbHMpOwogICAgfQogIH0pOwoKICBzZXR1cFNob3dIaWRlR3JvdXBzT25ab29tKHRoaXMpOwogIHRoaXMuc2hvd0hpZGVHcm91cHNPblpvb20oKTsKfTsKCm1ldGhvZHMuYWRkUmFzdGVySW1hZ2UgPSBmdW5jdGlvbiAodXJpLCBib3VuZHMsIG9wYWNpdHksIGF0dHJpYnV0aW9uLCBsYXllcklkLCBncm91cCkgewogIC8vIHVyaSBpcyBhIGRhdGEgVVJJIGNvbnRhaW5pbmcgYW4gaW1hZ2UuIFdlIHdhbnQgdG8gcGFpbnQgdGhpcyBpbWFnZSBhcyBhCiAgLy8gbGF5ZXIgYXQgKHRvcC1sZWZ0KSBib3VuZHNbMF0gdG8gKGJvdHRvbS1yaWdodCkgYm91bmRzWzFdLgogIC8vIFdlIGNhbid0IHNpbXBseSB1c2UgSW1hZ2VPdmVybGF5LCBhcyBpdCB1c2VzIGJpbGluZWFyIHNjYWxpbmcgd2hpY2ggbG9va3MKICAvLyBhd2Z1bCBhcyB5b3Ugem9vbSBpbiAoYW5kIHNvbWV0aW1lcyBzaGlmdHMgcG9zaXRpb25zIG9yIGRpc2FwcGVhcnMpLgogIC8vIEluc3RlYWQsIHdlJ2xsIHVzZSBhIFRpbGVMYXllci5DYW52YXMgdG8gZHJhdyBwaWVjZXMgb2YgdGhlIGltYWdlLgogIC8vIEZpcnN0LCBzb21lIGhlbHBlciBmdW5jdGlvbnMuCiAgLy8gZGVncmVlMnRpbGUgY29udmVydHMgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYW5kIHpvb20gdG8geCBhbmQgeSB0aWxlCiAgLy8gbnVtYmVycy4gVGhlIHRpbGUgbnVtYmVycyByZXR1cm5lZCBjYW4gYmUgbm9uLWludGVncmFsLCBhcyB0aGVyZSdzIG5vCiAgLy8gcmVhc29uIHRvIGV4cGVjdCB0aGF0IHRoZSBsYXQvbG5nIGlucHV0cyBhcmUgZXhhY3RseSBvbiB0aGUgYm9yZGVyIG9mIHR3bwogIC8vIHRpbGVzLgogIC8vCiAgLy8gV2UnbGwgdXNlIHRoaXMgdG8gY29udmVydCB0aGUgYm91bmRzIHdlIGdvdCBmcm9tIHRoZSBzZXJ2ZXIsIGludG8gY29vcmRzCiAgLy8gaW4gdGlsZS1zcGFjZSBhdCBhIGdpdmVuIHpvb20gbGV2ZWwuIE5vdGUgdGhhdCBvbmNlIHdlIGRvIHRoZSBjb252ZXJzaW9uLAogIC8vIHdlIGRvbid0IHRvIGRvIGFueSBtb3JlIHRyaWdvbm9tZXRyeSB0byBjb252ZXJ0IGJldHdlZW4gcGl4ZWwgY29vcmRpbmF0ZXMKICAvLyBhbmQgdGlsZSBjb29yZGluYXRlczsgdGhlIHNvdXJjZSBpbWFnZSBwaXhlbCBjb29yZHMsIGRlc3RpbmF0aW9uIGNhbnZhcwogIC8vIHBpeGVsIGNvb3JkcywgYW5kIHRpbGUgY29vcmRzIGFsbCBjYW4gYmUgc2NhbGVkIGxpbmVhcmx5LgogIGZ1bmN0aW9uIGRlZ3JlZTJ0aWxlKGxhdCwgbG5nLCB6b29tKSB7CiAgICAvLyBTZWUgaHR0cDovL3dpa2kub3BlbnN0cmVldG1hcC5vcmcvd2lraS9TbGlwcHlfbWFwX3RpbGVuYW1lcwogICAgdmFyIGxhdFJhZCA9IGxhdCAqIE1hdGguUEkgLyAxODA7CiAgICB2YXIgbiA9IE1hdGgucG93KDIsIHpvb20pOwogICAgdmFyIHggPSAobG5nICsgMTgwKSAvIDM2MCAqIG47CiAgICB2YXIgeSA9ICgxIC0gTWF0aC5sb2coTWF0aC50YW4obGF0UmFkKSArIDEgLyBNYXRoLmNvcyhsYXRSYWQpKSAvIE1hdGguUEkpIC8gMiAqIG47CiAgICByZXR1cm4gewogICAgICB4OiB4LAogICAgICB5OiB5CiAgICB9OwogIH0gLy8gR2l2ZW4gYSByYW5nZSBbZnJvbSx0bykgYW5kIGVpdGhlciBvbmUgb3IgdHdvIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZgogIC8vIHRoZXJlIGlzIGFueSBvdmVybGFwIGJldHdlZW4gW3gseDEpIGFuZCB0aGUgcmFuZ2UtLW9yIGlmIHgxIGlzIG9taXR0ZWQsCiAgLy8gdGhlbiByZXR1cm5zIHRydWUgaWYgeCBpcyB3aXRoaW4gW2Zyb20sdG8pLgoKCiAgZnVuY3Rpb24gb3ZlcmxhcChmcm9tLCB0bywgeCwKICAvKiBvcHRpb25hbCAqLwogIHgxKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzKSB4MSA9IHg7CiAgICByZXR1cm4geCA8IHRvICYmIHgxID49IGZyb207CiAgfQoKICBmdW5jdGlvbiBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpIHsKICAgIHZhciBjYW5kaWRhdGVzID0gWyJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCAibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCJdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodHlwZW9mIGN0eFtjYW5kaWRhdGVzW2ldXSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICByZXR1cm4gY2FuZGlkYXRlc1tpXTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0gLy8gT3VyIGdlbmVyYWwgc3RyYXRlZ3kgaXMgdG86CiAgLy8gMS4gTG9hZCB0aGUgZGF0YSBVUkkgaW4gYW4gSW1hZ2UoKSBvYmplY3QsIHNvIHdlIGNhbiBnZXQgaXRzIHBpeGVsCiAgLy8gICAgZGltZW5zaW9ucyBhbmQgdGhlIHVuZGVybHlpbmcgaW1hZ2UgZGF0YS4gKFdlIGNvdWxkIGhhdmUgZG9uZSB0aGlzCiAgLy8gICAgYnkgbm90IGVuY29kaW5nIGFzIFBORyBhdCBhbGwgYnV0IGp1c3Qgc2VuZCBhbiBhcnJheSBvZiBSR0JBIHZhbHVlcwogIC8vICAgIGZyb20gdGhlIHNlcnZlciwgYnV0IHRoYXQgd291bGQgaW5mbGF0ZSB0aGUgSlNPTiB0b28gbXVjaC4pCiAgLy8gMi4gQ3JlYXRlIGEgaGlkZGVuIGNhbnZhcyB0aGF0IHdlIHVzZSBqdXN0IHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAvLyAgICBmcm9tIHRoZSBJbWFnZSAodXNpbmcgQ29udGV4dDJELmdldEltYWdlRGF0YSgpKS4KICAvLyAzLiBDcmVhdGUgYSBUaWxlTGF5ZXIuQ2FudmFzIGFuZCBhZGQgaXQgdG8gdGhlIG1hcC4KICAvLyBXZSB3YW50IHRvIHN5bmNocm9ub3VzbHkgY3JlYXRlIGFuZCBhdHRhY2ggdGhlIFRpbGVMYXllci5DYW52YXMgKHNvIGFuCiAgLy8gaW1tZWRpYXRlIGNhbGwgdG8gY2xlYXJSYXN0ZXJzKCkgd2lsbCBiZSByZXNwZWN0ZWQsIGZvciBleGFtcGxlKSwgYnV0CiAgLy8gSW1hZ2UgbG9hZHMgaXRzIGRhdGEgYXN5bmNocm9ub3VzbHkuIEZvcnR1bmF0ZWx5IHdlIGNhbiByZXNvbHZlIHRoaXMKICAvLyBieSBwdXR0aW5nIFRpbGVMYXllci5DYW52YXMgaW50byBhc3luYyBtb2RlLCB3aGljaCB3aWxsIGxldCB1cyBjcmVhdGUKICAvLyBhbmQgYXR0YWNoIHRoZSBsYXllciBidXQgaGF2ZSBpdCB3YWl0IHVudGlsIHRoZSBpbWFnZSBpcyBsb2FkZWQgYmVmb3JlCiAgLy8gaXQgYWN0dWFsbHkgZHJhd3MgYW55dGhpbmcuCiAgLy8gVGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZSB3aWxsIHBvcHVsYXRlIG9uY2UgdGhlIGltYWdlIGlzIGxvYWRlZC4KCgogIHZhciBpbWdEYXRhID0gbnVsbDsgLy8gMWQgcm93LW1ham9yIGFycmF5LCBmb3VyIFswLTI1NV0gaW50ZWdlcnMgcGVyIHBpeGVsCgogIHZhciBpbWdEYXRhTWlwTWFwcGVyID0gbnVsbDsKICB2YXIgdyA9IG51bGw7IC8vIGltYWdlIHdpZHRoIGluIHBpeGVscwoKICB2YXIgaCA9IG51bGw7IC8vIGltYWdlIGhlaWdodCBpbiBwaXhlbHMKICAvLyBXZSdsbCB1c2UgdGhpcyBhcnJheSB0byBzdG9yZSBjYWxsYmFja3MgdGhhdCBuZWVkIHRvIGJlIGludm9rZWQgb25jZQogIC8vIGltZ0RhdGEsIHcsIGFuZCBoIGhhdmUgYmVlbiByZXNvbHZlZC4KCiAgdmFyIGltZ0RhdGFDYWxsYmFja3MgPSBbXTsgLy8gQ29uc3VtZXJzIG9mIGltZ0RhdGEsIHcsIGFuZCBoIGNhbiBjYWxsIHRoaXMgdG8gYmUgbm90aWZpZWQgd2hlbiBkYXRhCiAgLy8gaXMgYXZhaWxhYmxlLgoKICBmdW5jdGlvbiBnZXRJbWFnZURhdGEoY2FsbGJhY2spIHsKICAgIGlmIChpbWdEYXRhICE9IG51bGwpIHsKICAgICAgLy8gTXVzdCBub3QgaW52b2tlIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseTsgaXQncyB0b28gY29uZnVzaW5nIGFuZAogICAgICAvLyBmcmFnaWxlIHRvIGhhdmUgYSBmdW5jdGlvbiBpbnZva2UgdGhlIGNhbGxiYWNrICplaXRoZXIqIGltbWVkaWF0ZWx5CiAgICAgIC8vIG9yIGluIHRoZSBmdXR1cmUuIEJldHRlciB0byBiZSBjb25zaXN0ZW50IGhlcmUuCiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIGNhbGxiYWNrKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgICB9LCAwKTsKICAgIH0gZWxzZSB7CiAgICAgIGltZ0RhdGFDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICB9CiAgfQoKICB2YXIgaW1nID0gbmV3IEltYWdlKCk7CgogIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAvLyBTYXZlIHNpemUKICAgIHcgPSBpbWcud2lkdGg7CiAgICBoID0gaW1nLmhlaWdodDsgLy8gQ3JlYXRlIGEgZHVtbXkgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKCiAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgaW1nRGF0YUNhbnZhcy53aWR0aCA9IHc7CiAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IGg7CiAgICBpbWdEYXRhQ2FudmFzLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZ0RhdGFDYW52YXMpOwogICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOyAvLyBTYXZlIHRoZSBpbWFnZSBkYXRhLgoKICAgIGltZ0RhdGEgPSBpbWdEYXRhQ3R4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKS5kYXRhOwogICAgaW1nRGF0YU1pcE1hcHBlciA9IG5ldyBfbWlwbWFwcGVyMlsiZGVmYXVsdCJdKGltZyk7IC8vIERvbmUgd2l0aCB0aGUgY2FudmFzLCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZSBzbyBpdCBjYW4gYmUgZ2MnZC4KCiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZ0RhdGFDYW52YXMpOyAvLyBBbGVydCBhbnkgZ2V0SW1hZ2VEYXRhIGNhbGxlcnMgd2hvIGFyZSB3YWl0aW5nLgoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1nRGF0YUNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewogICAgICBpbWdEYXRhQ2FsbGJhY2tzW2ldKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfQoKICAgIGltZ0RhdGFDYWxsYmFja3MgPSBbXTsKICB9OwoKICBpbWcuc3JjID0gdXJpOwoKICB2YXIgY2FudmFzVGlsZXMgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5ncmlkTGF5ZXIoewogICAgb3BhY2l0eTogb3BhY2l0eSwKICAgIGF0dHJpYnV0aW9uOiBhdHRyaWJ1dGlvbiwKICAgIGRldGVjdFJldGluYTogdHJ1ZSwKICAgIGFzeW5jOiB0cnVlCiAgfSk7IC8vIE5PVEU6IFRoZSBkb25lKCkgZnVuY3Rpb24gTVVTVCBOT1QgYmUgaW52b2tlZCB1bnRpbCBhZnRlciB0aGUgY3VycmVudAogIC8vIHRpY2s7IGRvbmUoKSBsb29rcyBpbiBMZWFmbGV0J3MgdGlsZSBjYWNoZSBmb3IgdGhlIGN1cnJlbnQgdGlsZSwgYW5kCiAgLy8gc2luY2UgaXQncyBzdGlsbCBiZWluZyBjb25zdHJ1Y3RlZCwgaXQgd29uJ3QgYmUgZm91bmQuCgoKICBjYW52YXNUaWxlcy5jcmVhdGVUaWxlID0gZnVuY3Rpb24gKHRpbGVQb2ludCwgZG9uZSkgewogICAgdmFyIHpvb20gPSB0aWxlUG9pbnQuejsKCiAgICB2YXIgY2FudmFzID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uRG9tVXRpbC5jcmVhdGUoImNhbnZhcyIpOwoKICAgIHZhciBlcnJvcjsgLy8gc2V0dXAgdGlsZSB3aWR0aCBhbmQgaGVpZ2h0IGFjY29yZGluZyB0byB0aGUgb3B0aW9ucwoKICAgIHZhciBzaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpOwogICAgY2FudmFzLndpZHRoID0gc2l6ZS54OwogICAgY2FudmFzLmhlaWdodCA9IHNpemUueTsKICAgIGdldEltYWdlRGF0YShmdW5jdGlvbiAoaW1nRGF0YSwgdywgaCwgbWlwbWFwcGVyKSB7CiAgICAgIHRyeSB7CiAgICAgICAgLy8gVGhlIENvbnRleHQyRCB3ZSdsbCBiZWluZyBkcmF3aW5nIG9udG8uIEl0J3MgYWx3YXlzIDI1NngyNTYuCiAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOyAvLyBDb252ZXJ0IG91ciBpbWFnZSBkYXRhJ3MgdG9wLWxlZnQgYW5kIGJvdHRvbS1yaWdodCBsb2NhdGlvbnMgaW50bwogICAgICAgIC8vIHgveSB0aWxlIGNvb3JkaW5hdGVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGRvaW5nIGEgc3BoZXJpY2FsIG1lcmNhdG9yCiAgICAgICAgLy8gcHJvamVjdGlvbiwgdGhlbiBtdWx0aXBseWluZyBieSAyXnpvb20uCgogICAgICAgIHZhciB0b3BMZWZ0ID0gZGVncmVlMnRpbGUoYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIHpvb20pOwogICAgICAgIHZhciBib3R0b21SaWdodCA9IGRlZ3JlZTJ0aWxlKGJvdW5kc1sxXVswXSwgYm91bmRzWzFdWzFdLCB6b29tKTsgLy8gVGhlIHNpemUgb2YgdGhlIGltYWdlIGluIHgveSB0aWxlIGNvb3JkaW5hdGVzLgoKICAgICAgICB2YXIgZXh0ZW50ID0gewogICAgICAgICAgeDogYm90dG9tUmlnaHQueCAtIHRvcExlZnQueCwKICAgICAgICAgIHk6IGJvdHRvbVJpZ2h0LnkgLSB0b3BMZWZ0LnkKICAgICAgICB9OyAvLyBTaG9ydCBjaXJjdWl0IGlmIHRpbGUgaXMgdG90YWxseSBkaXNqb2ludCBmcm9tIGltYWdlLgoKICAgICAgICBpZiAoIW92ZXJsYXAodGlsZVBvaW50LngsIHRpbGVQb2ludC54ICsgMSwgdG9wTGVmdC54LCBib3R0b21SaWdodC54KSkgcmV0dXJuOwogICAgICAgIGlmICghb3ZlcmxhcCh0aWxlUG9pbnQueSwgdGlsZVBvaW50LnkgKyAxLCB0b3BMZWZ0LnksIGJvdHRvbVJpZ2h0LnkpKSByZXR1cm47IC8vIFRoZSBsaW5lYXIgcmVzb2x1dGlvbiBvZiB0aGUgdGlsZSB3ZSdyZSBkcmF3aW5nIGlzIGFsd2F5cyAyNTZweCBwZXIgdGlsZSB1bml0LgogICAgICAgIC8vIElmIHRoZSBsaW5lYXIgcmVzb2x1dGlvbiAoaW4gZWl0aGVyIGRpcmVjdGlvbikgb2YgdGhlIGltYWdlIGlzIGxlc3MgdGhhbiAyNTZweAogICAgICAgIC8vIHBlciB0aWxlIHVuaXQsIHRoZW4gdXNlIG5lYXJlc3QgbmVpZ2hib3I7IG90aGVyd2lzZSwgdXNlIHRoZSBjYW52YXMncyBidWlsdC1pbgogICAgICAgIC8vIHNjYWxpbmcuCgogICAgICAgIHZhciBpbWdSZXMgPSB7CiAgICAgICAgICB4OiB3IC8gZXh0ZW50LngsCiAgICAgICAgICB5OiBoIC8gZXh0ZW50LnkKICAgICAgICB9OyAvLyBXZSBjYW4gZG8gdGhlIGFjdHVhbCBkcmF3aW5nIGluIG9uZSBvZiB0aHJlZSB3YXlzOgogICAgICAgIC8vIC0gQ2FsbCBkcmF3SW1hZ2UoKS4gVGhpcyBpcyBlYXN5IGFuZCBmYXN0LCBhbmQgcmVzdWx0cyBpbiBzbW9vdGgKICAgICAgICAvLyAgIGludGVycG9sYXRpb24gKGJpbGluZWFyPykuIFRoaXMgaXMgd2hhdCB3ZSB3YW50IHdoZW4gd2UgYXJlCiAgICAgICAgLy8gICByZWR1Y2luZyB0aGUgaW1hZ2UgZnJvbSBpdHMgbmF0aXZlIHNpemUuCiAgICAgICAgLy8gLSBDYWxsIGRyYXdJbWFnZSgpIHdpdGggaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWZhbHNlLiBUaGlzIGlzIGVhc3kKICAgICAgICAvLyAgIGFuZCBmYXN0IGFuZCBnaXZlcyB1cyBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24sIHdoaWNoIGlzIHdoYXQKICAgICAgICAvLyAgIHdlIHdhbnQgd2hlbiBlbmxhcmdpbmcgdGhlIGltYWdlLiBIb3dldmVyLCBpdCdzIHVuc3VwcG9ydGVkIG9uIG1hbnkKICAgICAgICAvLyAgIGJyb3dzZXJzIChpbmNsdWRpbmcgUXRXZWJraXQpLgogICAgICAgIC8vIC0gRG8gYSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uLiBUaGlzIGlzIHdoYXQgd2UnbGwgZmFsbAogICAgICAgIC8vICAgYmFjayB0byB3aGVuIGVubGFyZ2luZywgYW5kIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpc24ndCBzdXBwb3J0ZWQuCiAgICAgICAgLy8gICBJbiB0aGVvcnkgaXQncyBzbG93ZXIsIGJ1dCBzdGlsbCBwcmV0dHkgZmFzdCBvbiBteSBtYWNoaW5lLCBhbmQgdGhlCiAgICAgICAgLy8gICByZXN1bHRzIGxvb2sgdGhlIHNhbWUgQUZBSUNULgogICAgICAgIC8vIElzIGltYWdlU21vb3RoaW5nRW5hYmxlZCBzdXBwb3J0ZWQ/IElmIHNvLCB3ZSBjYW4gbGV0IGNhbnZhcyBkbwogICAgICAgIC8vIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiBmb3IgdXMuCgogICAgICAgIHZhciBzbW9vdGhpbmdQcm9wZXJ0eSA9IGdldENhbnZhc1Ntb290aGluZ1Byb3BlcnR5KGN0eCk7CgogICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSB8fCBpbWdSZXMueCA+PSAyNTYgJiYgaW1nUmVzLnkgPj0gMjU2KSB7CiAgICAgICAgICAvLyBVc2UgYnVpbHQtaW4gc2NhbGluZwogICAgICAgICAgLy8gVHVybiBvZmYgYW50aS1hbGlhc2luZyBpZiBuZWNlc3NhcnkKICAgICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSkgewogICAgICAgICAgICBjdHhbc21vb3RoaW5nUHJvcGVydHldID0gaW1nUmVzLnggPj0gMjU2ICYmIGltZ1Jlcy55ID49IDI1NjsKICAgICAgICAgIH0gLy8gRG9uJ3QgbmVjZXNzYXJpbHkgZHJhdyB3aXRoIHRoZSBmdWxsLXNpemUgaW1hZ2U7IGlmIHdlJ3JlCiAgICAgICAgICAvLyBkb3duc2NhbGluZywgdXNlIHRoZSBtaXBtYXBwZXIgdG8gZ2V0IGEgcHJlLWRvd25zY2FsZWQgaW1hZ2UKICAgICAgICAgIC8vIChzZWUgY29tbWVudHMgb24gTWlwbWFwcGVyIGNsYXNzIGZvciB3aHkgdGhpcyBtYXR0ZXJzKS4KCgogICAgICAgICAgbWlwbWFwcGVyLmdldEJ5U2l6ZShleHRlbnQueCAqIDI1NiwgZXh0ZW50LnkgKiAyNTYsIGZ1bmN0aW9uIChtaXApIHsKICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBpbWFnZSB3aWxsIGdvIG9mZiB0aGUgZWRnZSBvZiB0aGUgY2FudmFzLS0KICAgICAgICAgICAgLy8gdGhhdCdzIE9LLCB0aGUgY2FudmFzIHNob3VsZCBjbGlwIGFwcHJvcHJpYXRlbHkuCiAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UobWlwLCAvLyBDb252ZXJ0IGFicyB0aWxlIGNvb3JkcyB0byByZWwgdGlsZSBjb29yZHMsIHRoZW4gKjI1NiB0byBjb252ZXJ0CiAgICAgICAgICAgIC8vIHRvIHJlbCBwaXhlbCBjb29yZHMKICAgICAgICAgICAgKHRvcExlZnQueCAtIHRpbGVQb2ludC54KSAqIDI1NiwgKHRvcExlZnQueSAtIHRpbGVQb2ludC55KSAqIDI1NiwgLy8gQWx3YXlzIGRyYXcgdGhlIHdob2xlIHRoaW5nIGFuZCBsZXQgY2FudmFzIGNsaXA7IHNvIHdlIGNhbiBqdXN0CiAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBzaXplIGluIHRpbGUgY29vcmRzIHN0cmFpZ2h0IHRvIHBpeGVscwogICAgICAgICAgICBleHRlbnQueCAqIDI1NiwgZXh0ZW50LnkgKiAyNTYpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFVzZSBtYW51YWwgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uCiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHNvdXJjZSBpbWFnZSBwaXhlbCBjb29yZGluYXRlcyB0aGF0IGNvcnJlc3BvbmQgd2l0aAogICAgICAgICAgLy8gdGhlIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgb2YgdGhpcyB0aWxlLiAoSWYgdGhlIHNvdXJjZSBpbWFnZQogICAgICAgICAgLy8gb25seSBwYXJ0aWFsbHkgb3ZlcmxhcHMgdGhlIHRpbGUsIHdlIHVzZSBtYXgvbWluIHRvIGxpbWl0IHRoZQogICAgICAgICAgLy8gc291cmNlU3RhcnQvRW5kIHRvIG9ubHkgcmVmbGVjdCB0aGUgb3ZlcmxhcHBpbmcgcG9ydGlvbi4pCiAgICAgICAgICB2YXIgc291cmNlU3RhcnQgPSB7CiAgICAgICAgICAgIHg6IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRpbGVQb2ludC54IC0gdG9wTGVmdC54KSAqIGltZ1Jlcy54KSksCiAgICAgICAgICAgIHk6IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRpbGVQb2ludC55IC0gdG9wTGVmdC55KSAqIGltZ1Jlcy55KSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgc291cmNlRW5kID0gewogICAgICAgICAgICB4OiBNYXRoLm1pbih3LCBNYXRoLmNlaWwoKHRpbGVQb2ludC54ICsgMSAtIHRvcExlZnQueCkgKiBpbWdSZXMueCkpLAogICAgICAgICAgICB5OiBNYXRoLm1pbihoLCBNYXRoLmNlaWwoKHRpbGVQb2ludC55ICsgMSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICB9OyAvLyBUaGUgc2l6ZSwgaW4gZGVzdCBwaXhlbHMsIHRoYXQgZWFjaCBzb3VyY2UgcGl4ZWwgc2hvdWxkIG9jY3VweS4KICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gMSAoZS5nLiBpZiB4IGFuZCB5IHJlc29sdXRpb24KICAgICAgICAgIC8vIGFyZSB2ZXJ5IGRpZmZlcmVudCkuCgogICAgICAgICAgdmFyIHBpeGVsU2l6ZSA9IHsKICAgICAgICAgICAgeDogMjU2IC8gaW1nUmVzLngsCiAgICAgICAgICAgIHk6IDI1NiAvIGltZ1Jlcy55CiAgICAgICAgICB9OyAvLyBGb3IgZWFjaCBwaXhlbCBpbiB0aGUgc291cmNlIGltYWdlIHRoYXQgb3ZlcmxhcHMgdGhlIHRpbGUuLi4KCiAgICAgICAgICBmb3IgKHZhciByb3cgPSBzb3VyY2VTdGFydC55OyByb3cgPCBzb3VyY2VFbmQueTsgcm93KyspIHsKICAgICAgICAgICAgZm9yICh2YXIgY29sID0gc291cmNlU3RhcnQueDsgY29sIDwgc291cmNlRW5kLng7IGNvbCsrKSB7CiAgICAgICAgICAgICAgLy8gLi4uZXh0cmFjdCB0aGUgcGl4ZWwgZGF0YS4uLgogICAgICAgICAgICAgIHZhciBpID0gKHJvdyAqIHcgKyBjb2wpICogNDsKICAgICAgICAgICAgICB2YXIgciA9IGltZ0RhdGFbaV07CiAgICAgICAgICAgICAgdmFyIGcgPSBpbWdEYXRhW2kgKyAxXTsKICAgICAgICAgICAgICB2YXIgYiA9IGltZ0RhdGFbaSArIDJdOwogICAgICAgICAgICAgIHZhciBhID0gaW1nRGF0YVtpICsgM107CiAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKCIgKyBbciwgZywgYiwgYSAvIDI1NV0uam9pbigiLCIpICsgIikiOyAvLyAuLi5jYWxjdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmQgaW4gdGhlIGRlc3QgaW1hZ2UKICAgICAgICAgICAgICAvLyB3aGVyZSBpdCBzaG91bGQgYmUgZHJhd24uLi4KCiAgICAgICAgICAgICAgdmFyIHBpeGVsUG9zID0gewogICAgICAgICAgICAgICAgeDogKGNvbCAvIGltZ1Jlcy54ICsgdG9wTGVmdC54IC0gdGlsZVBvaW50LngpICogMjU2LAogICAgICAgICAgICAgICAgeTogKHJvdyAvIGltZ1Jlcy55ICsgdG9wTGVmdC55IC0gdGlsZVBvaW50LnkpICogMjU2CiAgICAgICAgICAgICAgfTsgLy8gLi4uYW5kIGRyYXcgYSByZWN0YW5nbGUgdGhlcmUuCgogICAgICAgICAgICAgIGN0eC5maWxsUmVjdChNYXRoLnJvdW5kKHBpeGVsUG9zLngpLCBNYXRoLnJvdW5kKHBpeGVsUG9zLnkpLCAvLyBMb29rcyBjcmF6eSwgYnV0IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgcm91bmRpbmcgZnJvbQogICAgICAgICAgICAgIC8vIGNhdXNpbmcgb3ZlcmxhcCBiZXR3ZWVuIHRoaXMgcmVjdCBhbmQgaXRzIG5laWdoYm9ycy4gVGhlCiAgICAgICAgICAgICAgLy8gbWludWVuZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgcGl4ZWwsIHdoaWxlIHRoZQogICAgICAgICAgICAgIC8vIHN1YnRyYWhlbmQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHBpeGVsICh0byB0dXJuIGFuCiAgICAgICAgICAgICAgLy8gYWJzb2x1dGUgY29vcmRpbmF0ZSB0byBhIHdpZHRoL2hlaWdodCkuIFllcywgSSBoYWQgdG8gbG9vawogICAgICAgICAgICAgIC8vIHVwIG1pbnVlbmQgYW5kIHN1YnRyYWhlbmQuCiAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy54ICsgcGl4ZWxTaXplLngpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy54KSwgTWF0aC5yb3VuZChwaXhlbFBvcy55ICsgcGl4ZWxTaXplLnkpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy55KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBlcnJvciA9IGU7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgZG9uZShlcnJvciwgY2FudmFzKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gY2FudmFzOwogIH07CgogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNhbnZhc1RpbGVzLCAiaW1hZ2UiLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZUltYWdlID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiaW1hZ2UiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJJbWFnZXMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImltYWdlIik7Cn07CgptZXRob2RzLmFkZE1lYXN1cmUgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIC8vIGlmIGEgbWVhc3VyZUNvbnRyb2wgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVtb3ZlIGl0IGFuZAogIC8vICAgcmVwbGFjZSB3aXRoIGEgbmV3IG9uZQogIG1ldGhvZHMucmVtb3ZlTWVhc3VyZS5jYWxsKHRoaXMpOwogIHRoaXMubWVhc3VyZUNvbnRyb2wgPSBfbGVhZmxldDJbImRlZmF1bHQiXS5jb250cm9sLm1lYXN1cmUob3B0aW9ucyk7CiAgdGhpcy5hZGRDb250cm9sKHRoaXMubWVhc3VyZUNvbnRyb2wpOwp9OwoKbWV0aG9kcy5yZW1vdmVNZWFzdXJlID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLm1lYXN1cmVDb250cm9sKSB7CiAgICB0aGlzLnJlbW92ZUNvbnRyb2wodGhpcy5tZWFzdXJlQ29udHJvbCk7CiAgICB0aGlzLm1lYXN1cmVDb250cm9sID0gbnVsbDsKICB9Cn07CgptZXRob2RzLmFkZFNlbGVjdCA9IGZ1bmN0aW9uIChjdEdyb3VwKSB7CiAgdmFyIF90aGlzOCA9IHRoaXM7CgogIG1ldGhvZHMucmVtb3ZlU2VsZWN0LmNhbGwodGhpcyk7CiAgdGhpcy5fc2VsZWN0QnV0dG9uID0gX2xlYWZsZXQyWyJkZWZhdWx0Il0uZWFzeUJ1dHRvbih7CiAgICBzdGF0ZXM6IFt7CiAgICAgIHN0YXRlTmFtZTogInNlbGVjdC1pbmFjdGl2ZSIsCiAgICAgIGljb246ICJpb24tcXItc2Nhbm5lciIsCiAgICAgIHRpdGxlOiAiTWFrZSBhIHNlbGVjdGlvbiIsCiAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soYnRuLCBtYXApIHsKICAgICAgICBidG4uc3RhdGUoInNlbGVjdC1hY3RpdmUiKTsKICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyID0gbmV3IF9sZWFmbGV0MlsiZGVmYXVsdCJdLkxvY2F0aW9uRmlsdGVyMigpOwoKICAgICAgICBpZiAoY3RHcm91cCkgewogICAgICAgICAgdmFyIHNlbGVjdGlvbkhhbmRsZSA9IG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwKTsKICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKGUuc2VuZGVyICE9PSBzZWxlY3Rpb25IYW5kbGUpIHsKICAgICAgICAgICAgICBpZiAoX3RoaXM4Ll9sb2NhdGlvbkZpbHRlcikgewogICAgICAgICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CgogICAgICAgICAgICAgICAgYnRuLnN0YXRlKCJzZWxlY3QtaW5hY3RpdmUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihlKSB7CiAgICAgICAgICAgIF90aGlzOC5sYXllck1hbmFnZXIuYnJ1c2goX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5nZXRCb3VuZHMoKSwgewogICAgICAgICAgICAgIHNlbmRlcjogc2VsZWN0aW9uSGFuZGxlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfTsKCiAgICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyLm9uKCJlbmFibGVkIiwgaGFuZGxlcik7CgogICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5vbigiY2hhbmdlIiwgaGFuZGxlcik7CgogICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5vbigiZGlzYWJsZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5jbG9zZSgpOwogICAgICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyID0gbnVsbDsKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5hZGRUbyhtYXApOwogICAgICB9CiAgICB9LCB7CiAgICAgIHN0YXRlTmFtZTogInNlbGVjdC1hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLWNsb3NlLXJvdW5kIiwKICAgICAgdGl0bGU6ICJEaXNtaXNzIHNlbGVjdGlvbiIsCiAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soYnRuLCBtYXApIHsKICAgICAgICBidG4uc3RhdGUoInNlbGVjdC1pbmFjdGl2ZSIpOwoKICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyLmRpc2FibGUoKTsgLy8gSWYgZXhwbGljaXRseSBkaXNtaXNzZWQsIGNsZWFyIHRoZSBjcm9zc3RhbGsgc2VsZWN0aW9ucwoKCiAgICAgICAgX3RoaXM4LmxheWVyTWFuYWdlci51bmJydXNoKCk7CiAgICAgIH0KICAgIH1dCiAgfSk7CgogIHRoaXMuX3NlbGVjdEJ1dHRvbi5hZGRUbyh0aGlzKTsKfTsKCm1ldGhvZHMucmVtb3ZlU2VsZWN0ID0gZnVuY3Rpb24gKCkgewogIGlmICh0aGlzLl9sb2NhdGlvbkZpbHRlcikgewogICAgdGhpcy5fbG9jYXRpb25GaWx0ZXIuZGlzYWJsZSgpOwogIH0KCiAgaWYgKHRoaXMuX3NlbGVjdEJ1dHRvbikgewogICAgdGhpcy5yZW1vdmVDb250cm9sKHRoaXMuX3NlbGVjdEJ1dHRvbik7CiAgICB0aGlzLl9zZWxlY3RCdXR0b24gPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuY3JlYXRlTWFwUGFuZSA9IGZ1bmN0aW9uIChuYW1lLCB6SW5kZXgpIHsKICB0aGlzLmNyZWF0ZVBhbmUobmFtZSk7CiAgdGhpcy5nZXRQYW5lKG5hbWUpLnN0eWxlLnpJbmRleCA9IHpJbmRleDsKfTsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7Ii4vY2x1c3Rlci1sYXllci1zdG9yZSI6MSwiLi9jcnNfdXRpbHMiOjMsIi4vZGF0YWZyYW1lIjo0LCIuL2dsb2JhbC9odG1sd2lkZ2V0cyI6OCwiLi9nbG9iYWwvanF1ZXJ5Ijo5LCIuL2dsb2JhbC9sZWFmbGV0IjoxMCwiLi9nbG9iYWwvc2hpbnkiOjEyLCIuL21pcG1hcHBlciI6MTYsIi4vdXRpbCI6MTd9XSwxNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0KCmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9CgovLyBUaGlzIGNsYXNzIHNpbXVsYXRlcyBhIG1pcG1hcCwgd2hpY2ggc2hyaW5rcyBpbWFnZXMgYnkgcG93ZXJzIG9mIHR3by4gVGhpcwovLyBzdGVwd2lzZSByZWR1Y3Rpb24gcmVzdWx0cyBpbiAicGl4ZWwtcGVyZmVjdCBkb3duc2NhbGluZyIgKHdoZXJlIGV2ZXJ5Ci8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCi8vIGFzIG9wcG9zZWQgdG8gYSBzaW5nbGUtc3RlcCBkb3duc2NhbGluZyB3aGljaCB3aWxsIGRpc2NhcmQgYSBsb3Qgb2YgZGF0YQovLyAoYW5kIHdpdGggc3BhcnNlIGltYWdlcyBhdCBzbWFsbCBzY2FsZXMgY2FuIGdpdmUgdmVyeSBzdXJwcmlzaW5nIHJlc3VsdHMpLgp2YXIgTWlwbWFwcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWlwbWFwcGVyKTsKCiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9IC8vIFRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzIHRha2UgYSBjYWxsYmFjayBmdW5jdGlvbiBCVVQgTUFZIE9SIE1BWQogIC8vIE5PVCBhY3R1YWxseSBiZWhhdmUgYXN5bmNocm9ub3VzbHkuCgoKICBfY3JlYXRlQ2xhc3MoTWlwbWFwcGVyLCBbewogICAga2V5OiAiZ2V0QnlTaXplIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeVNpemUoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0LCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdmFyIGkgPSAwOwogICAgICB2YXIgbGFzdEltZyA9IHRoaXMuX2xheWVyc1swXTsKCiAgICAgIHZhciB0ZXN0TmV4dCA9IGZ1bmN0aW9uIHRlc3ROZXh0KCkgewogICAgICAgIF90aGlzLmdldEJ5SW5kZXgoaSwgZnVuY3Rpb24gKGltZykgewogICAgICAgICAgLy8gSWYgY3VycmVudCBpbWFnZSBpcyBpbnZhbGlkIChpLmUuIHRvbyBzbWFsbCB0byBiZSByZW5kZXJlZCkgb3IKICAgICAgICAgIC8vIGl0J3Mgc21hbGxlciB0aGFuIHdoYXQgd2Ugd2FudGVkLCByZXR1cm4gdGhlIGxhc3Qga25vd24gZ29vZCBpbWFnZS4KICAgICAgICAgIGlmICghaW1nIHx8IGltZy53aWR0aCA8IGRlc2lyZWRXaWR0aCB8fCBpbWcuaGVpZ2h0IDwgZGVzaXJlZEhlaWdodCkgewogICAgICAgICAgICBjYWxsYmFjayhsYXN0SW1nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGFzdEltZyA9IGltZzsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB0ZXN0TmV4dCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0ZXN0TmV4dCgpOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEJ5SW5kZXgiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJ5SW5kZXgoaSwgY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICBpZiAodGhpcy5fbGF5ZXJzW2ldKSB7CiAgICAgICAgY2FsbGJhY2sodGhpcy5fbGF5ZXJzW2ldKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIHRoaXMuZ2V0QnlJbmRleChpIC0gMSwgZnVuY3Rpb24gKHByZXZJbWcpIHsKICAgICAgICBpZiAoIXByZXZJbWcpIHsKICAgICAgICAgIC8vIHByZXZJbWcgY291bGQgbm90IGJlIGNhbGN1bGF0ZWQgKHRvbyBzbWFsbCwgcG9zc2libHkpCiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAgIC8vIENhbid0IHJlZHVjZSB0aGlzIGltYWdlIGFueSBmdXJ0aGVyCiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9IC8vIElmIHJlZHVjZSBldmVyIGJlY29tZXMgdHJ1bHkgYXN5bmNocm9ub3VzLCB3ZSBzaG91bGQgc3R1ZmYgYSBwcm9taXNlIG9yCiAgICAgICAgLy8gc29tZXRoaW5nIGludG8gdGhpcy5fbGF5ZXJzW2ldIGJlZm9yZSBjYWxsaW5nIHRoaXMucmVkdWNlKCksIHRvIHByZXZlbnQKICAgICAgICAvLyByZWR1bmRhbnQgcmVkdWNlIG9wZXJhdGlvbnMgZnJvbSBoYXBwZW5pbmcuCgoKICAgICAgICBfdGhpczIucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uIChyZWR1Y2VkSW1nKSB7CiAgICAgICAgICBfdGhpczIuX2xheWVyc1tpXSA9IHJlZHVjZWRJbWc7CiAgICAgICAgICBjYWxsYmFjayhyZWR1Y2VkSW1nKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVkdWNlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZWR1Y2UoaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKCiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgaW1nRGF0YUN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBpbWcud2lkdGggLyAyLCBpbWcuaGVpZ2h0IC8gMik7CiAgICAgICAgY2FsbGJhY2soaW1nRGF0YUNhbnZhcyk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgfQogICAgfQogIH1dKTsKCiAgcmV0dXJuIE1pcG1hcHBlcjsKfSgpOwoKZXhwb3J0c1siZGVmYXVsdCJdID0gTWlwbWFwcGVyOwoKCn0se31dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmxvZyA9IGxvZzsKZXhwb3J0cy5yZWN5Y2xlID0gcmVjeWNsZTsKZXhwb3J0cy5hc0FycmF5ID0gYXNBcnJheTsKCmZ1bmN0aW9uIGxvZyhtZXNzYWdlKSB7CiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqLwogIGlmIChjb25zb2xlICYmIGNvbnNvbGUubG9nKSBjb25zb2xlLmxvZyhtZXNzYWdlKTsKICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi8KfQoKZnVuY3Rpb24gcmVjeWNsZSh2YWx1ZXMsIGxlbmd0aCwgaW5QbGFjZSkgewogIGlmIChsZW5ndGggPT09IDAgJiYgIWluUGxhY2UpIHJldHVybiBbXTsKCiAgaWYgKCEodmFsdWVzIGluc3RhbmNlb2YgQXJyYXkpKSB7CiAgICBpZiAoaW5QbGFjZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGRvIGluLXBsYWNlIHJlY3ljbGluZyBvZiBhIG5vbi1BcnJheSB2YWx1ZSIpOwogICAgfQoKICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KCiAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICJ1bmRlZmluZWQiKSBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwogIHZhciBkZXN0ID0gaW5QbGFjZSA/IHZhbHVlcyA6IFtdOwogIHZhciBvcmlnTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKCiAgd2hpbGUgKGRlc3QubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICBkZXN0LnB1c2godmFsdWVzW2Rlc3QubGVuZ3RoICUgb3JpZ0xlbmd0aF0pOwogIH0KCiAgaWYgKGRlc3QubGVuZ3RoID4gbGVuZ3RoKSB7CiAgICBkZXN0LnNwbGljZShsZW5ndGgsIGRlc3QubGVuZ3RoIC0gbGVuZ3RoKTsKICB9CgogIHJldHVybiBkZXN0Owp9CgpmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiB2YWx1ZTtlbHNlIHJldHVybiBbdmFsdWVdOwp9CgoKfSx7fV19LHt9LFsxM10pOwo="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7DQoJaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgew0KCQkvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuDQoJCWRlZmluZShbJ2xlYWZsZXQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsNCgkJLy8gZGVmaW5lIGEgQ29tbW9uIEpTIG1vZHVsZSB0aGF0IHJlbGllcyBvbiAnbGVhZmxldCcNCgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2xlYWZsZXQnKSk7DQoJfSBlbHNlIHsNCgkJLy8gQXNzdW1lIExlYWZsZXQgaXMgbG9hZGVkIGludG8gZ2xvYmFsIG9iamVjdCBMIGFscmVhZHkNCgkJZmFjdG9yeShMKTsNCgl9DQp9KHRoaXMsIGZ1bmN0aW9uIChMKSB7DQoJJ3VzZSBzdHJpY3QnOw0KDQoJTC5UaWxlTGF5ZXIuUHJvdmlkZXIgPSBMLlRpbGVMYXllci5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbiAoYXJnLCBvcHRpb25zKSB7DQoJCQl2YXIgcHJvdmlkZXJzID0gTC5UaWxlTGF5ZXIuUHJvdmlkZXIucHJvdmlkZXJzOw0KDQoJCQl2YXIgcGFydHMgPSBhcmcuc3BsaXQoJy4nKTsNCg0KCQkJdmFyIHByb3ZpZGVyTmFtZSA9IHBhcnRzWzBdOw0KCQkJdmFyIHZhcmlhbnROYW1lID0gcGFydHNbMV07DQoNCgkJCWlmICghcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0pIHsNCgkJCQl0aHJvdyAnTm8gc3VjaCBwcm92aWRlciAoJyArIHByb3ZpZGVyTmFtZSArICcpJzsNCgkJCX0NCg0KCQkJdmFyIHByb3ZpZGVyID0gew0KCQkJCXVybDogcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0udXJsLA0KCQkJCW9wdGlvbnM6IHByb3ZpZGVyc1twcm92aWRlck5hbWVdLm9wdGlvbnMNCgkJCX07DQoNCgkJCS8vIG92ZXJ3cml0ZSB2YWx1ZXMgaW4gcHJvdmlkZXIgZnJvbSB2YXJpYW50Lg0KCQkJaWYgKHZhcmlhbnROYW1lICYmICd2YXJpYW50cycgaW4gcHJvdmlkZXJzW3Byb3ZpZGVyTmFtZV0pIHsNCgkJCQlpZiAoISh2YXJpYW50TmFtZSBpbiBwcm92aWRlcnNbcHJvdmlkZXJOYW1lXS52YXJpYW50cykpIHsNCgkJCQkJdGhyb3cgJ05vIHN1Y2ggdmFyaWFudCBvZiAnICsgcHJvdmlkZXJOYW1lICsgJyAoJyArIHZhcmlhbnROYW1lICsgJyknOw0KCQkJCX0NCgkJCQl2YXIgdmFyaWFudCA9IHByb3ZpZGVyc1twcm92aWRlck5hbWVdLnZhcmlhbnRzW3ZhcmlhbnROYW1lXTsNCgkJCQl2YXIgdmFyaWFudE9wdGlvbnM7DQoJCQkJaWYgKHR5cGVvZiB2YXJpYW50ID09PSAnc3RyaW5nJykgew0KCQkJCQl2YXJpYW50T3B0aW9ucyA9IHsNCgkJCQkJCXZhcmlhbnQ6IHZhcmlhbnQNCgkJCQkJfTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXJpYW50T3B0aW9ucyA9IHZhcmlhbnQub3B0aW9uczsNCgkJCQl9DQoJCQkJcHJvdmlkZXIgPSB7DQoJCQkJCXVybDogdmFyaWFudC51cmwgfHwgcHJvdmlkZXIudXJsLA0KCQkJCQlvcHRpb25zOiBMLlV0aWwuZXh0ZW5kKHt9LCBwcm92aWRlci5vcHRpb25zLCB2YXJpYW50T3B0aW9ucykNCgkJCQl9Ow0KCQkJfQ0KDQoJCQkvLyByZXBsYWNlIGF0dHJpYnV0aW9uIHBsYWNlaG9sZGVycyB3aXRoIHRoZWlyIHZhbHVlcyBmcm9tIHRvcGxldmVsIHByb3ZpZGVyIGF0dHJpYnV0aW9uLA0KCQkJLy8gcmVjdXJzaXZlbHkNCgkJCXZhciBhdHRyaWJ1dGlvblJlcGxhY2VyID0gZnVuY3Rpb24gKGF0dHIpIHsNCgkJCQlpZiAoYXR0ci5pbmRleE9mKCd7YXR0cmlidXRpb24uJykgPT09IC0xKSB7DQoJCQkJCXJldHVybiBhdHRyOw0KCQkJCX0NCgkJCQlyZXR1cm4gYXR0ci5yZXBsYWNlKC9ce2F0dHJpYnV0aW9uLihcdyopXH0vZywNCgkJCQkJZnVuY3Rpb24gKG1hdGNoLCBhdHRyaWJ1dGlvbk5hbWUpIHsNCgkJCQkJCXJldHVybiBhdHRyaWJ1dGlvblJlcGxhY2VyKHByb3ZpZGVyc1thdHRyaWJ1dGlvbk5hbWVdLm9wdGlvbnMuYXR0cmlidXRpb24pOw0KCQkJCQl9DQoJCQkJKTsNCgkJCX07DQoJCQlwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb25SZXBsYWNlcihwcm92aWRlci5vcHRpb25zLmF0dHJpYnV0aW9uKTsNCg0KCQkJLy8gQ29tcHV0ZSBmaW5hbCBvcHRpb25zIGNvbWJpbmluZyBwcm92aWRlciBvcHRpb25zIHdpdGggYW55IHVzZXIgb3ZlcnJpZGVzDQoJCQl2YXIgbGF5ZXJPcHRzID0gTC5VdGlsLmV4dGVuZCh7fSwgcHJvdmlkZXIub3B0aW9ucywgb3B0aW9ucyk7DQoJCQlMLlRpbGVMYXllci5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHByb3ZpZGVyLnVybCwgbGF5ZXJPcHRzKTsNCgkJfQ0KCX0pOw0KDQoJLyoqDQoJICogRGVmaW5pdGlvbiBvZiBwcm92aWRlcnMuDQoJICogc2VlIGh0dHA6Ly9sZWFmbGV0anMuY29tL3JlZmVyZW5jZS5odG1sI3RpbGVsYXllciBmb3Igb3B0aW9ucyBpbiB0aGUgb3B0aW9ucyBtYXAuDQoJICovDQoNCglMLlRpbGVMYXllci5Qcm92aWRlci5wcm92aWRlcnMgPSB7DQoJCU9wZW5TdHJlZXRNYXA6IHsNCgkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxOSwNCgkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJJyZjb3B5OyA8YSBocmVmPSJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHQiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCU1hcG5pazoge30sDQoJCQkJREU6IHsNCgkJCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLmRlL3RpbGVzL29zbWRlL3t6fS97eH0ve3l9LnBuZycsDQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCW1heFpvb206IDE4DQoJCQkJCX0NCgkJCQl9LA0KCQkJCUNIOiB7DQoJCQkJCXVybDogJy8vdGlsZS5vc20uY2gvc3dpdHplcmxhbmQve3p9L3t4fS97eX0ucG5nJywNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJbWF4Wm9vbTogMTgsDQoJCQkJCQlib3VuZHM6IFtbNDUsIDVdLCBbNDgsIDExXV0NCgkJCQkJfQ0KCQkJCX0sDQoJCQkJRnJhbmNlOiB7DQoJCQkJCXVybDogJy8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5mci9vc21mci97en0ve3h9L3t5fS5wbmcnLA0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQltYXhab29tOiAyMCwNCgkJCQkJCWF0dHJpYnV0aW9uOiAnJmNvcHk7IE9wZW5zdHJlZXRtYXAgRnJhbmNlIHwge2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9Jw0KCQkJCQl9DQoJCQkJfSwNCgkJCQlIT1Q6IHsNCgkJCQkJdXJsOiAnLy97c30udGlsZS5vcGVuc3RyZWV0bWFwLmZyL2hvdC97en0ve3h9L3t5fS5wbmcnLA0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJCQkne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCAnICsNCgkJCQkJCQknVGlsZXMgc3R5bGUgYnkgPGEgaHJlZj0iaHR0cHM6Ly93d3cuaG90b3NtLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5IdW1hbml0YXJpYW4gT3BlblN0cmVldE1hcCBUZWFtPC9hPiAnICsNCgkJCQkJCQknaG9zdGVkIGJ5IDxhIGhyZWY9Imh0dHBzOi8vb3BlbnN0cmVldG1hcC5mci8iIHRhcmdldD0iX2JsYW5rIj5PcGVuU3RyZWV0TWFwIEZyYW5jZTwvYT4nDQoJCQkJCX0NCgkJCQl9LA0KCQkJCUJaSDogew0KCQkJCQl1cmw6ICcvL3RpbGUub3BlbnN0cmVldG1hcC5iemgvYnIve3p9L3t4fS97eX0ucG5nJywNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0sIFRpbGVzIGNvdXJ0ZXN5IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5iemgvIiB0YXJnZXQ9Il9ibGFuayI+QnJldG9uIE9wZW5TdHJlZXRNYXAgVGVhbTwvYT4nLA0KCQkJCQkJYm91bmRzOiBbWzQ2LjIsIC01LjVdLCBbNTAsIDAuN11dDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0sDQoJCU9wZW5TZWFNYXA6IHsNCgkJCXVybDogJy8vdGlsZXMub3BlbnNlYW1hcC5vcmcvc2VhbWFyay97en0ve3h9L3t5fS5wbmcnLA0KCQkJb3B0aW9uczogew0KCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGE6ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zZWFtYXAub3JnIj5PcGVuU2VhTWFwPC9hPiBjb250cmlidXRvcnMnDQoJCQl9DQoJCX0sDQoJCU9wZW5QdE1hcDogew0KCQkJdXJsOiAnaHR0cDovL29wZW5wdG1hcC5vcmcvdGlsZXMve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxNywNCgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiAmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVucHRtYXAub3JnIj5PcGVuUHRNYXA8L2E+IGNvbnRyaWJ1dG9ycycNCgkJCX0NCgkJfSwNCgkJT3BlblRvcG9NYXA6IHsNCgkJCXVybDogJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnRvcG9tYXAub3JnL3t6fS97eH0ve3l9LnBuZycsDQoJCQlvcHRpb25zOiB7DQoJCQkJbWF4Wm9vbTogMTcsDQoJCQkJYXR0cmlidXRpb246ICdNYXAgZGF0YToge2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9LCA8YSBocmVmPSJodHRwOi8vdmlld2ZpbmRlcnBhbm9yYW1hcy5vcmciPlNSVE08L2E+IHwgTWFwIHN0eWxlOiAmY29weTsgPGEgaHJlZj0iaHR0cHM6Ly9vcGVudG9wb21hcC5vcmciPk9wZW5Ub3BvTWFwPC9hPiAoPGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzMuMC8iPkNDLUJZLVNBPC9hPiknDQoJCQl9DQoJCX0sDQoJCU9wZW5SYWlsd2F5TWFwOiB7DQoJCQl1cmw6ICdodHRwczovL3tzfS50aWxlcy5vcGVucmFpbHdheW1hcC5vcmcvc3RhbmRhcmQve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxOSwNCgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0gfCBNYXAgc3R5bGU6ICZjb3B5OyA8YSBocmVmPSJodHRwczovL3d3dy5PcGVuUmFpbHdheU1hcC5vcmciPk9wZW5SYWlsd2F5TWFwPC9hPiAoPGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzMuMC8iPkNDLUJZLVNBPC9hPiknDQoJCQl9DQoJCX0sDQoJCU9wZW5GaXJlTWFwOiB7DQoJCQl1cmw6ICdodHRwOi8vb3BlbmZpcmVtYXAub3JnL2h5dGlsZXMve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxOSwNCgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0gfCBNYXAgc3R5bGU6ICZjb3B5OyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5maXJlbWFwLm9yZyI+T3BlbkZpcmVNYXA8L2E+ICg8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLyI+Q0MtQlktU0E8L2E+KScNCgkJCX0NCgkJfSwNCgkJU2FmZUNhc3Q6IHsNCgkJCXVybDogJy8vczMuYW1hem9uYXdzLmNvbS90ZTUxMi5zYWZlY2FzdC5vcmcve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxNiwNCgkJCQlhdHRyaWJ1dGlvbjogJ01hcCBkYXRhOiB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0gfCBNYXAgc3R5bGU6ICZjb3B5OyA8YSBocmVmPSJodHRwczovL2Jsb2cuc2FmZWNhc3Qub3JnL2Fib3V0LyI+U2FmZUNhc3Q8L2E+ICg8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wLyI+Q0MtQlktU0E8L2E+KScNCgkJCX0NCgkJfSwNCgkJVGh1bmRlcmZvcmVzdDogew0KCQkJdXJsOiAnaHR0cHM6Ly97c30udGlsZS50aHVuZGVyZm9yZXN0LmNvbS97dmFyaWFudH0ve3p9L3t4fS97eX0ucG5nP2FwaWtleT17YXBpa2V5fScsDQoJCQlvcHRpb25zOiB7DQoJCQkJYXR0cmlidXRpb246DQoJCQkJCScmY29weTsgPGEgaHJlZj0iaHR0cDovL3d3dy50aHVuZGVyZm9yZXN0LmNvbS8iPlRodW5kZXJmb3Jlc3Q8L2E+LCB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLA0KCQkJCXZhcmlhbnQ6ICdjeWNsZScsDQoJCQkJYXBpa2V5OiAnPGluc2VydCB5b3VyIGFwaSBrZXkgaGVyZT4nLA0KCQkJCW1heFpvb206IDIyDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlPcGVuQ3ljbGVNYXA6ICdjeWNsZScsDQoJCQkJVHJhbnNwb3J0OiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICd0cmFuc3BvcnQnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCVRyYW5zcG9ydERhcms6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ3RyYW5zcG9ydC1kYXJrJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQlTcGluYWxNYXA6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ3NwaW5hbC1tYXAnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCUxhbmRzY2FwZTogJ2xhbmRzY2FwZScsDQoJCQkJT3V0ZG9vcnM6ICdvdXRkb29ycycsDQoJCQkJUGlvbmVlcjogJ3Bpb25lZXInLA0KCQkJCU1vYmlsZUF0bGFzOiAnbW9iaWxlLWF0bGFzJywNCgkJCQlOZWlnaGJvdXJob29kOiAnbmVpZ2hib3VyaG9vZCcNCgkJCX0NCgkJfSwNCgkJT3Blbk1hcFN1cmZlcjogew0KCQkJdXJsOiAnaHR0cHM6Ly9tYXBzLmhlaWdpdC5vcmcvb3Blbm1hcHN1cmZlci90aWxlcy97dmFyaWFudH0vd2VibWVyY2F0b3Ive3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltYXhab29tOiAxOSwNCgkJCQl2YXJpYW50OiAncm9hZHMnLA0KCQkJCWF0dHJpYnV0aW9uOiAnSW1hZ2VyeSBmcm9tIDxhIGhyZWY9Imh0dHA6Ly9naXNjaWVuY2UudW5pLWhkLmRlLyI+R0lTY2llbmNlIFJlc2VhcmNoIEdyb3VwIEAgVW5pdmVyc2l0eSBvZiBIZWlkZWxiZXJnPC9hPiB8IE1hcCBkYXRhICcNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCVJvYWRzOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdyb2FkcycsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5PcGVuTWFwU3VyZmVyfXthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJSHlicmlkOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdoeWJyaWQnLA0KCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uT3Blbk1hcFN1cmZlcn17YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nDQoJCQkJCX0NCgkJCQl9LA0KCQkJCUFkbWluQm91bmRzOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdhZG1pbmInLA0KCQkJCQkJbWF4Wm9vbTogMTgsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5PcGVuTWFwU3VyZmVyfXthdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJQ29udG91ckxpbmVzOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdhc3RlcmMnLA0KCQkJCQkJbWF4Wm9vbTogMTgsDQoJCQkJCQltaW5ab29tOiAxMywNCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5NYXBTdXJmZXJ9IDxhIGhyZWY9Imh0dHBzOi8vbHBkYWFjLnVzZ3MuZ292L3Byb2R1Y3RzL2FzdGVyX3BvbGljaWVzIj5BU1RFUiBHREVNPC9hPicNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJSGlsbHNoYWRlOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdhc3RlcmgnLA0KCQkJCQkJbWF4Wm9vbTogMTgsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5PcGVuTWFwU3VyZmVyfSA8YSBocmVmPSJodHRwczovL2xwZGFhYy51c2dzLmdvdi9wcm9kdWN0cy9hc3Rlcl9wb2xpY2llcyI+QVNURVIgR0RFTTwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9zcnRtLmNzaS5jZ2lhci5vcmcvIj5TUlRNPC9hPicNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJRWxlbWVudHNBdFJpc2s6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ2VsZW1lbnRzX2F0X3Jpc2snLA0KCQkJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uT3Blbk1hcFN1cmZlcn17YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0sDQoJCUh5ZGRhOiB7DQoJCQl1cmw6ICcvL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAuc2UvaHlkZGEve3ZhcmlhbnR9L3t6fS97eH0ve3l9LnBuZycsDQoJCQlvcHRpb25zOiB7DQoJCQkJbWF4Wm9vbTogMTgsDQoJCQkJdmFyaWFudDogJ2Z1bGwnLA0KCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgY291cnRlc3kgb2YgPGEgaHJlZj0iaHR0cDovL29wZW5zdHJlZXRtYXAuc2UvIiB0YXJnZXQ9Il9ibGFuayI+T3BlblN0cmVldE1hcCBTd2VkZW48L2E+ICZtZGFzaDsgTWFwIGRhdGEge2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9Jw0KCQkJfSwNCgkJCXZhcmlhbnRzOiB7DQoJCQkJRnVsbDogJ2Z1bGwnLA0KCQkJCUJhc2U6ICdiYXNlJywNCgkJCQlSb2Fkc0FuZExhYmVsczogJ3JvYWRzX2FuZF9sYWJlbHMnDQoJCQl9DQoJCX0sDQoJCU1hcEJveDogew0KCQkJdXJsOiAnaHR0cHM6Ly9hcGkudGlsZXMubWFwYm94LmNvbS92NC97aWR9L3t6fS97eH0ve3l9e3J9LnBuZz9hY2Nlc3NfdG9rZW49e2FjY2Vzc1Rva2VufScsDQoJCQlvcHRpb25zOiB7DQoJCQkJYXR0cmlidXRpb246DQoJCQkJCSc8YSBocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tL2Fib3V0L21hcHMvIiB0YXJnZXQ9Il9ibGFuayI+JmNvcHk7IE1hcGJveDwvYT4gJyArDQoJCQkJCSd7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0gJyArDQoJCQkJCSc8YSBocmVmPSJodHRwczovL3d3dy5tYXBib3guY29tL21hcC1mZWVkYmFjay8iIHRhcmdldD0iX2JsYW5rIj5JbXByb3ZlIHRoaXMgbWFwPC9hPicsDQoJCQkJc3ViZG9tYWluczogJ2FiY2QnLA0KCQkJCWlkOiAnbWFwYm94LnN0cmVldHMnLA0KCQkJCWFjY2Vzc1Rva2VuOiAnPGluc2VydCB5b3VyIGFjY2VzcyB0b2tlbiBoZXJlPicsDQoJCQl9DQoJCX0sDQoJCVN0YW1lbjogew0KCQkJdXJsOiAnLy9zdGFtZW4tdGlsZXMte3N9LmEuc3NsLmZhc3RseS5uZXQve3ZhcmlhbnR9L3t6fS97eH0ve3l9e3J9LntleHR9JywNCgkJCW9wdGlvbnM6IHsNCgkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJJ01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sICcgKw0KCQkJCQknPGEgaHJlZj0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+ICZtZGFzaDsgJyArDQoJCQkJCSdNYXAgZGF0YSB7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0nLA0KCQkJCXN1YmRvbWFpbnM6ICdhYmNkJywNCgkJCQltaW5ab29tOiAwLA0KCQkJCW1heFpvb206IDIwLA0KCQkJCXZhcmlhbnQ6ICd0b25lcicsDQoJCQkJZXh0OiAncG5nJw0KCQkJfSwNCgkJCXZhcmlhbnRzOiB7DQoJCQkJVG9uZXI6ICd0b25lcicsDQoJCQkJVG9uZXJCYWNrZ3JvdW5kOiAndG9uZXItYmFja2dyb3VuZCcsDQoJCQkJVG9uZXJIeWJyaWQ6ICd0b25lci1oeWJyaWQnLA0KCQkJCVRvbmVyTGluZXM6ICd0b25lci1saW5lcycsDQoJCQkJVG9uZXJMYWJlbHM6ICd0b25lci1sYWJlbHMnLA0KCQkJCVRvbmVyTGl0ZTogJ3RvbmVyLWxpdGUnLA0KCQkJCVdhdGVyY29sb3I6IHsNCgkJCQkJdXJsOiAnLy9zdGFtZW4tdGlsZXMte3N9LmEuc3NsLmZhc3RseS5uZXQve3ZhcmlhbnR9L3t6fS97eH0ve3l9LntleHR9JywNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ3dhdGVyY29sb3InLA0KCQkJCQkJZXh0OiAnanBnJywNCgkJCQkJCW1pblpvb206IDEsDQoJCQkJCQltYXhab29tOiAxNg0KCQkJCQl9DQoJCQkJfSwNCgkJCQlUZXJyYWluOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluJywNCgkJCQkJCW1pblpvb206IDAsDQoJCQkJCQltYXhab29tOiAxOA0KCQkJCQl9DQoJCQkJfSwNCgkJCQlUZXJyYWluQmFja2dyb3VuZDogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAndGVycmFpbi1iYWNrZ3JvdW5kJywNCgkJCQkJCW1pblpvb206IDAsDQoJCQkJCQltYXhab29tOiAxOA0KCQkJCQl9DQoJCQkJfSwNCgkJCQlUZXJyYWluTGFiZWxzOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICd0ZXJyYWluLWxhYmVscycsDQoJCQkJCQltaW5ab29tOiAwLA0KCQkJCQkJbWF4Wm9vbTogMTgNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJVG9wT1NNUmVsaWVmOiB7DQoJCQkJCXVybDogJy8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3t2YXJpYW50fS97en0ve3h9L3t5fS57ZXh0fScsDQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tY29sb3ItcmVsaWVmJywNCgkJCQkJCWV4dDogJ2pwZycsDQoJCQkJCQlib3VuZHM6IFtbMjIsIC0xMzJdLCBbNTEsIC01Nl1dDQoJCQkJCX0NCgkJCQl9LA0KCQkJCVRvcE9TTUZlYXR1cmVzOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICd0b3Bvc20tZmVhdHVyZXMnLA0KCQkJCQkJYm91bmRzOiBbWzIyLCAtMTMyXSwgWzUxLCAtNTZdXSwNCgkJCQkJCW9wYWNpdHk6IDAuOQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9LA0KCQlUb21Ub206IHsNCgkJCXVybDogJ2h0dHBzOi8ve3N9LmFwaS50b210b20uY29tL21hcC8xL3RpbGUve3ZhcmlhbnR9L3tzdHlsZX0ve3p9L3t4fS97eX0ue2V4dH0/a2V5PXthcGlrZXl9JywNCgkJCW9wdGlvbnM6IHsNCgkJCQl2YXJpYW50OiAnYmFzaWMnLA0KCQkJCW1heFpvb206IDIyLA0KCQkJCWF0dHJpYnV0aW9uOg0KCQkJCQknPGEgaHJlZj0iaHR0cHM6Ly90b210b20uY29tIiB0YXJnZXQ9Il9ibGFuayI+JmNvcHk7ICAxOTkyIC0gJyArIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSArICcgVG9tVG9tLjwvYT4gJywNCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsDQoJCQkJc3R5bGU6ICdtYWluJywNCgkJCQlleHQ6ICdwbmcnLA0KCQkJCWFwaWtleTogJzxpbnNlcnQgeW91ciBBUEkga2V5IGhlcmU+JywNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCUJhc2ljOiAnYmFzaWMnLA0KCQkJCUh5YnJpZDogJ2h5YnJpZCcsDQoJCQkJTGFiZWxzOiAnbGFiZWxzJw0KCQkJfQ0KCQl9LA0KCQlFc3JpOiB7DQoJCQl1cmw6ICcvL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL3t2YXJpYW50fS9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsDQoJCQlvcHRpb25zOiB7DQoJCQkJdmFyaWFudDogJ1dvcmxkX1N0cmVldF9NYXAnLA0KCQkJCWF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmknDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlXb3JsZFN0cmVldE1hcDogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArDQoJCQkJCQkJJ1NvdXJjZTogRXNyaSwgRGVMb3JtZSwgTkFWVEVRLCBVU0dTLCBJbnRlcm1hcCwgaVBDLCBOUkNBTiwgRXNyaSBKYXBhbiwgTUVUSSwgRXNyaSBDaGluYSAoSG9uZyBLb25nKSwgRXNyaSAoVGhhaWxhbmQpLCBUb21Ub20sIDIwMTInDQoJCQkJCX0NCgkJCQl9LA0KCQkJCURlTG9ybWU6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ1NwZWNpYWx0eS9EZUxvcm1lX1dvcmxkX0Jhc2VfTWFwJywNCgkJCQkJCW1pblpvb206IDEsDQoJCQkJCQltYXhab29tOiAxMSwNCgkJCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgQ29weXJpZ2h0OiAmY29weTsyMDEyIERlTG9ybWUnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCVdvcmxkVG9wb01hcDogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnV29ybGRfVG9wb19NYXAnLA0KCQkJCQkJYXR0cmlidXRpb246DQoJCQkJCQkJJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7ICcgKw0KCQkJCQkJCSdFc3JpLCBEZUxvcm1lLCBOQVZURVEsIFRvbVRvbSwgSW50ZXJtYXAsIGlQQywgVVNHUywgRkFPLCBOUFMsIE5SQ0FOLCBHZW9CYXNlLCBLYWRhc3RlciBOTCwgT3JkbmFuY2UgU3VydmV5LCBFc3JpIEphcGFuLCBNRVRJLCBFc3JpIENoaW5hIChIb25nIEtvbmcpLCBhbmQgdGhlIEdJUyBVc2VyIENvbW11bml0eScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJV29ybGRJbWFnZXJ5OiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9JbWFnZXJ5JywNCgkJCQkJCWF0dHJpYnV0aW9uOg0KCQkJCQkJCSd7YXR0cmlidXRpb24uRXNyaX0gJm1kYXNoOyAnICsNCgkJCQkJCQknU291cmNlOiBFc3JpLCBpLWN1YmVkLCBVU0RBLCBVU0dTLCBBRVgsIEdlb0V5ZSwgR2V0bWFwcGluZywgQWVyb2dyaWQsIElHTiwgSUdQLCBVUFItRUdQLCBhbmQgdGhlIEdJUyBVc2VyIENvbW11bml0eScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJV29ybGRUZXJyYWluOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdXb3JsZF9UZXJyYWluX0Jhc2UnLA0KCQkJCQkJbWF4Wm9vbTogMTMsDQoJCQkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJCQkne2F0dHJpYnV0aW9uLkVzcml9ICZtZGFzaDsgJyArDQoJCQkJCQkJJ1NvdXJjZTogVVNHUywgRXNyaSwgVEFOQSwgRGVMb3JtZSwgYW5kIE5QUycNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJV29ybGRTaGFkZWRSZWxpZWY6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ1dvcmxkX1NoYWRlZF9SZWxpZWYnLA0KCQkJCQkJbWF4Wm9vbTogMTMsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogRXNyaScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJV29ybGRQaHlzaWNhbDogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnV29ybGRfUGh5c2ljYWxfTWFwJywNCgkJCQkJCW1heFpvb206IDgsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZTogVVMgTmF0aW9uYWwgUGFyayBTZXJ2aWNlJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQlPY2VhbkJhc2VtYXA6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ09jZWFuX0Jhc2VtYXAnLA0KCQkJCQkJbWF4Wm9vbTogMTMsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IFNvdXJjZXM6IEdFQkNPLCBOT0FBLCBDSFMsIE9TVSwgVU5ILCBDU1VNQiwgTmF0aW9uYWwgR2VvZ3JhcGhpYywgRGVMb3JtZSwgTkFWVEVRLCBhbmQgRXNyaScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJTmF0R2VvV29ybGRNYXA6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ05hdEdlb19Xb3JsZF9NYXAnLA0KCQkJCQkJbWF4Wm9vbTogMTYsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IE5hdGlvbmFsIEdlb2dyYXBoaWMsIEVzcmksIERlTG9ybWUsIE5BVlRFUSwgVU5FUC1XQ01DLCBVU0dTLCBOQVNBLCBFU0EsIE1FVEksIE5SQ0FOLCBHRUJDTywgTk9BQSwgaVBDJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQlXb3JsZEdyYXlDYW52YXM6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ0NhbnZhcy9Xb3JsZF9MaWdodF9HcmF5X0Jhc2UnLA0KCQkJCQkJbWF4Wm9vbTogMTYsDQoJCQkJCQlhdHRyaWJ1dGlvbjogJ3thdHRyaWJ1dGlvbi5Fc3JpfSAmbWRhc2g7IEVzcmksIERlTG9ybWUsIE5BVlRFUScNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSwNCgkJT3BlbldlYXRoZXJNYXA6IHsNCgkJCXVybDogJ2h0dHA6Ly97c30udGlsZS5vcGVud2VhdGhlcm1hcC5vcmcvbWFwL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmc/YXBwaWQ9e2FwaUtleX0nLA0KCQkJb3B0aW9uczogew0KCQkJCW1heFpvb206IDE5LA0KCQkJCWF0dHJpYnV0aW9uOiAnTWFwIGRhdGEgJmNvcHk7IDxhIGhyZWY9Imh0dHA6Ly9vcGVud2VhdGhlcm1hcC5vcmciPk9wZW5XZWF0aGVyTWFwPC9hPicsDQoJCQkJYXBpS2V5Oic8aW5zZXJ0IHlvdXIgYXBpIGtleSBoZXJlPicsDQoJCQkJb3BhY2l0eTogMC41DQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlDbG91ZHM6ICdjbG91ZHMnLA0KCQkJCUNsb3Vkc0NsYXNzaWM6ICdjbG91ZHNfY2xzJywNCgkJCQlQcmVjaXBpdGF0aW9uOiAncHJlY2lwaXRhdGlvbicsDQoJCQkJUHJlY2lwaXRhdGlvbkNsYXNzaWM6ICdwcmVjaXBpdGF0aW9uX2NscycsDQoJCQkJUmFpbjogJ3JhaW4nLA0KCQkJCVJhaW5DbGFzc2ljOiAncmFpbl9jbHMnLA0KCQkJCVByZXNzdXJlOiAncHJlc3N1cmUnLA0KCQkJCVByZXNzdXJlQ29udG91cjogJ3ByZXNzdXJlX2NudHInLA0KCQkJCVdpbmQ6ICd3aW5kJywNCgkJCQlUZW1wZXJhdHVyZTogJ3RlbXAnLA0KCQkJCVNub3c6ICdzbm93Jw0KCQkJfQ0KCQl9LA0KCQlIRVJFOiB7DQoJCQkvKg0KCQkJICogSEVSRSBtYXBzLCBmb3JtZXJseSBOb2tpYSBtYXBzLg0KCQkJICogVGhlc2UgYmFzZW1hcHMgYXJlIGZyZWUsIGJ1dCB5b3UgbmVlZCBhbiBBUEkga2V5LiBQbGVhc2Ugc2lnbiB1cCBhdA0KCQkJICogaHR0cHM6Ly9kZXZlbG9wZXIuaGVyZS5jb20vcGxhbnMNCgkJCSAqLw0KCQkJdXJsOg0KCQkJCSdodHRwczovL3tzfS57YmFzZX0ubWFwcy5hcGkuaGVyZS5jb20vbWFwdGlsZS8yLjEvJyArDQoJCQkJJ3t0eXBlfS97bWFwSUR9L3t2YXJpYW50fS97en0ve3h9L3t5fS97c2l6ZX0ve2Zvcm1hdH0/JyArDQoJCQkJJ2FwcF9pZD17YXBwX2lkfSZhcHBfY29kZT17YXBwX2NvZGV9JmxnPXtsYW5ndWFnZX0nLA0KCQkJb3B0aW9uczogew0KCQkJCWF0dHJpYnV0aW9uOg0KCQkJCQknTWFwICZjb3B5OyAxOTg3LScgKyBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyAnIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIuaGVyZS5jb20iPkhFUkU8L2E+JywNCgkJCQlzdWJkb21haW5zOiAnMTIzNCcsDQoJCQkJbWFwSUQ6ICduZXdlc3QnLA0KCQkJCSdhcHBfaWQnOiAnPGluc2VydCB5b3VyIGFwcF9pZCBoZXJlPicsDQoJCQkJJ2FwcF9jb2RlJzogJzxpbnNlcnQgeW91ciBhcHBfY29kZSBoZXJlPicsDQoJCQkJYmFzZTogJ2Jhc2UnLA0KCQkJCXZhcmlhbnQ6ICdub3JtYWwuZGF5JywNCgkJCQltYXhab29tOiAyMCwNCgkJCQl0eXBlOiAnbWFwdGlsZScsDQoJCQkJbGFuZ3VhZ2U6ICdlbmcnLA0KCQkJCWZvcm1hdDogJ3BuZzgnLA0KCQkJCXNpemU6ICcyNTYnDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlub3JtYWxEYXk6ICdub3JtYWwuZGF5JywNCgkJCQlub3JtYWxEYXlDdXN0b206ICdub3JtYWwuZGF5LmN1c3RvbScsDQoJCQkJbm9ybWFsRGF5R3JleTogJ25vcm1hbC5kYXkuZ3JleScsDQoJCQkJbm9ybWFsRGF5TW9iaWxlOiAnbm9ybWFsLmRheS5tb2JpbGUnLA0KCQkJCW5vcm1hbERheUdyZXlNb2JpbGU6ICdub3JtYWwuZGF5LmdyZXkubW9iaWxlJywNCgkJCQlub3JtYWxEYXlUcmFuc2l0OiAnbm9ybWFsLmRheS50cmFuc2l0JywNCgkJCQlub3JtYWxEYXlUcmFuc2l0TW9iaWxlOiAnbm9ybWFsLmRheS50cmFuc2l0Lm1vYmlsZScsDQoJCQkJbm9ybWFsRGF5VHJhZmZpYzogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnbm9ybWFsLnRyYWZmaWMuZGF5JywNCgkJCQkJCWJhc2U6ICd0cmFmZmljJywNCgkJCQkJCXR5cGU6ICd0cmFmZmljdGlsZScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJbm9ybWFsTmlnaHQ6ICdub3JtYWwubmlnaHQnLA0KCQkJCW5vcm1hbE5pZ2h0TW9iaWxlOiAnbm9ybWFsLm5pZ2h0Lm1vYmlsZScsDQoJCQkJbm9ybWFsTmlnaHRHcmV5OiAnbm9ybWFsLm5pZ2h0LmdyZXknLA0KCQkJCW5vcm1hbE5pZ2h0R3JleU1vYmlsZTogJ25vcm1hbC5uaWdodC5ncmV5Lm1vYmlsZScsDQoJCQkJbm9ybWFsTmlnaHRUcmFuc2l0OiAnbm9ybWFsLm5pZ2h0LnRyYW5zaXQnLA0KCQkJCW5vcm1hbE5pZ2h0VHJhbnNpdE1vYmlsZTogJ25vcm1hbC5uaWdodC50cmFuc2l0Lm1vYmlsZScsDQoJCQkJcmVkdWNlZERheTogJ3JlZHVjZWQuZGF5JywNCgkJCQlyZWR1Y2VkTmlnaHQ6ICdyZWR1Y2VkLm5pZ2h0JywNCgkJCQliYXNpY01hcDogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl0eXBlOiAnYmFzZXRpbGUnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCW1hcExhYmVsczogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl0eXBlOiAnbGFiZWx0aWxlJywNCgkJCQkJCWZvcm1hdDogJ3BuZycNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJdHJhZmZpY0Zsb3c6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJYmFzZTogJ3RyYWZmaWMnLA0KCQkJCQkJdHlwZTogJ2Zsb3d0aWxlJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQljYXJuYXZEYXlHcmV5OiAnY2FybmF2LmRheS5ncmV5JywNCgkJCQloeWJyaWREYXk6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJYmFzZTogJ2FlcmlhbCcsDQoJCQkJCQl2YXJpYW50OiAnaHlicmlkLmRheScNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJaHlicmlkRGF5TW9iaWxlOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCWJhc2U6ICdhZXJpYWwnLA0KCQkJCQkJdmFyaWFudDogJ2h5YnJpZC5kYXkubW9iaWxlJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQloeWJyaWREYXlUcmFuc2l0OiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCWJhc2U6ICdhZXJpYWwnLA0KCQkJCQkJdmFyaWFudDogJ2h5YnJpZC5kYXkudHJhbnNpdCcNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJaHlicmlkRGF5R3JleTogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQliYXNlOiAnYWVyaWFsJywNCgkJCQkJCXZhcmlhbnQ6ICdoeWJyaWQuZ3JleS5kYXknDQoJCQkJCX0NCgkJCQl9LA0KCQkJCWh5YnJpZERheVRyYWZmaWM6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ2h5YnJpZC50cmFmZmljLmRheScsDQoJCQkJCQliYXNlOiAndHJhZmZpYycsDQoJCQkJCQl0eXBlOiAndHJhZmZpY3RpbGUnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCXBlZGVzdHJpYW5EYXk6ICdwZWRlc3RyaWFuLmRheScsDQoJCQkJcGVkZXN0cmlhbk5pZ2h0OiAncGVkZXN0cmlhbi5uaWdodCcsDQoJCQkJc2F0ZWxsaXRlRGF5OiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCWJhc2U6ICdhZXJpYWwnLA0KCQkJCQkJdmFyaWFudDogJ3NhdGVsbGl0ZS5kYXknDQoJCQkJCX0NCgkJCQl9LA0KCQkJCXRlcnJhaW5EYXk6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJYmFzZTogJ2FlcmlhbCcsDQoJCQkJCQl2YXJpYW50OiAndGVycmFpbi5kYXknDQoJCQkJCX0NCgkJCQl9LA0KCQkJCXRlcnJhaW5EYXlNb2JpbGU6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJYmFzZTogJ2FlcmlhbCcsDQoJCQkJCQl2YXJpYW50OiAndGVycmFpbi5kYXkubW9iaWxlJw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9LA0KCQlGcmVlTWFwU0s6IHsNCgkJCXVybDogJ2h0dHA6Ly90e3N9LmZyZWVtYXAuc2svVC97en0ve3h9L3t5fS5qcGVnJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltaW5ab29tOiA4LA0KCQkJCW1heFpvb206IDE2LA0KCQkJCXN1YmRvbWFpbnM6ICcxMjM0JywNCgkJCQlib3VuZHM6IFtbNDcuMjA0NjQyLCAxNS45OTYwOTNdLCBbNDkuODMwODk2LCAyMi41NzY5MDRdXSwNCgkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSwgdml6dWFsaXphdGlvbiBDQy1CeS1TQSAyLjAgPGEgaHJlZj0iaHR0cDovL2ZyZWVtYXAuc2siPkZyZWVtYXAuc2s8L2E+Jw0KCQkJfQ0KCQl9LA0KCQlNdGJNYXA6IHsNCgkJCXVybDogJ2h0dHA6Ly90aWxlLm10Ym1hcC5jei9tdGJtYXBfdGlsZXMve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQlhdHRyaWJ1dGlvbjoNCgkJCQkJJ3thdHRyaWJ1dGlvbi5PcGVuU3RyZWV0TWFwfSAmYW1wOyBVU0dTJw0KCQkJfQ0KCQl9LA0KCQlDYXJ0b0RCOiB7DQoJCQl1cmw6ICdodHRwczovL3tzfS5iYXNlbWFwcy5jYXJ0b2Nkbi5jb20ve3ZhcmlhbnR9L3t6fS97eH0ve3l9e3J9LnBuZycsDQoJCQlvcHRpb25zOiB7DQoJCQkJYXR0cmlidXRpb246ICd7YXR0cmlidXRpb24uT3BlblN0cmVldE1hcH0gJmNvcHk7IDxhIGhyZWY9Imh0dHBzOi8vY2FydG8uY29tL2F0dHJpYnV0aW9ucyI+Q0FSVE88L2E+JywNCgkJCQlzdWJkb21haW5zOiAnYWJjZCcsDQoJCQkJbWF4Wm9vbTogMTksDQoJCQkJdmFyaWFudDogJ2xpZ2h0X2FsbCcNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCVBvc2l0cm9uOiAnbGlnaHRfYWxsJywNCgkJCQlQb3NpdHJvbk5vTGFiZWxzOiAnbGlnaHRfbm9sYWJlbHMnLA0KCQkJCVBvc2l0cm9uT25seUxhYmVsczogJ2xpZ2h0X29ubHlfbGFiZWxzJywNCgkJCQlEYXJrTWF0dGVyOiAnZGFya19hbGwnLA0KCQkJCURhcmtNYXR0ZXJOb0xhYmVsczogJ2Rhcmtfbm9sYWJlbHMnLA0KCQkJCURhcmtNYXR0ZXJPbmx5TGFiZWxzOiAnZGFya19vbmx5X2xhYmVscycsDQoJCQkJVm95YWdlcjogJ3Jhc3RlcnRpbGVzL3ZveWFnZXInLA0KCQkJCVZveWFnZXJOb0xhYmVsczogJ3Jhc3RlcnRpbGVzL3ZveWFnZXJfbm9sYWJlbHMnLA0KCQkJCVZveWFnZXJPbmx5TGFiZWxzOiAncmFzdGVydGlsZXMvdm95YWdlcl9vbmx5X2xhYmVscycsDQoJCQkJVm95YWdlckxhYmVsc1VuZGVyOiAncmFzdGVydGlsZXMvdm95YWdlcl9sYWJlbHNfdW5kZXInDQoJCQl9DQoJCX0sDQoJCUhpa2VCaWtlOiB7DQoJCQl1cmw6ICdodHRwczovL3RpbGVzLndtZmxhYnMub3JnL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLA0KCQkJb3B0aW9uczogew0KCQkJCW1heFpvb206IDE5LA0KCQkJCWF0dHJpYnV0aW9uOiAne2F0dHJpYnV0aW9uLk9wZW5TdHJlZXRNYXB9JywNCgkJCQl2YXJpYW50OiAnaGlrZWJpa2UnDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlIaWtlQmlrZToge30sDQoJCQkJSGlsbFNoYWRpbmc6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJbWF4Wm9vbTogMTUsDQoJCQkJCQl2YXJpYW50OiAnaGlsbHNoYWRpbmcnDQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0sDQoJCUJhc2VtYXBBVDogew0KCQkJdXJsOiAnLy9tYXBze3N9LndpZW4uZ3YuYXQvYmFzZW1hcC97dmFyaWFudH0vbm9ybWFsL2dvb2dsZTM4NTcve3p9L3t5fS97eH0ue2Zvcm1hdH0nLA0KCQkJb3B0aW9uczogew0KCQkJCW1heFpvb206IDE5LA0KCQkJCWF0dHJpYnV0aW9uOiAnRGF0ZW5xdWVsbGU6IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmJhc2VtYXAuYXQiPmJhc2VtYXAuYXQ8L2E+JywNCgkJCQlzdWJkb21haW5zOiBbJycsICcxJywgJzInLCAnMycsICc0J10sDQoJCQkJZm9ybWF0OiAncG5nJywNCgkJCQlib3VuZHM6IFtbNDYuMzU4NzcwLCA4Ljc4MjM3OV0sIFs0OS4wMzc4NzIsIDE3LjE4OTUzMl1dLA0KCQkJCXZhcmlhbnQ6ICdnZW9sYW5kYmFzZW1hcCcNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCWJhc2VtYXA6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJbWF4Wm9vbTogMjAsIC8vIGN1cnJlbnRseSBvbmx5IGluIFZpZW5uYQ0KCQkJCQkJdmFyaWFudDogJ2dlb2xhbmRiYXNlbWFwJw0KCQkJCQl9DQoJCQkJfSwNCgkJCQlncmF1OiAnYm1hcGdyYXUnLA0KCQkJCW92ZXJsYXk6ICdibWFwb3ZlcmxheScsDQoJCQkJaGlnaGRwaTogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnYm1hcGhpZHBpJywNCgkJCQkJCWZvcm1hdDogJ2pwZWcnDQoJCQkJCX0NCgkJCQl9LA0KCQkJCW9ydGhvZm90bzogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQltYXhab29tOiAyMCwgLy8gY3VycmVudGx5IG9ubHkgaW4gVmllbm5hDQoJCQkJCQl2YXJpYW50OiAnYm1hcG9ydGhvZm90bzMwY20nLA0KCQkJCQkJZm9ybWF0OiAnanBlZycNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSwNCgkJbmxtYXBzOiB7DQoJCQl1cmw6ICcvL2dlb2RhdGEubmF0aW9uYWFsZ2VvcmVnaXN0ZXIubmwvdGlsZXMvc2VydmljZS93bXRzL3t2YXJpYW50fS9FUFNHOjM4NTcve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQltaW5ab29tOiA2LA0KCQkJCW1heFpvb206IDE5LA0KCQkJCWJvdW5kczogW1s1MC41LCAzLjI1XSwgWzU0LCA3LjZdXSwNCgkJCQlhdHRyaWJ1dGlvbjogJ0thYXJ0Z2VnZXZlbnMgJmNvcHk7IDxhIGhyZWY9ImthZGFzdGVyLm5sIj5LYWRhc3RlcjwvYT4nDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQknc3RhbmRhYXJkJzogJ2JydGFjaHRlcmdyb25ka2FhcnQnLA0KCQkJCSdwYXN0ZWwnOiAnYnJ0YWNodGVyZ3JvbmRrYWFydHBhc3RlbCcsDQoJCQkJJ2dyaWpzJzogJ2JydGFjaHRlcmdyb25ka2FhcnRncmlqcycsDQoJCQkJJ2x1Y2h0Zm90byc6IHsNCgkJCQkJJ3VybCc6ICcvL2dlb2RhdGEubmF0aW9uYWFsZ2VvcmVnaXN0ZXIubmwvbHVjaHRmb3RvL3JnYi93bXRzLzEuMC4wLzIwMTZfb3J0aG8yNS9FUFNHOjM4NTcve3p9L3t4fS97eX0ucG5nJywNCgkJCQl9DQoJCQl9DQoJCX0sDQoJCU5BU0FHSUJTOiB7DQoJCQl1cmw6ICdodHRwczovL21hcDEudmlzLmVhcnRoZGF0YS5uYXNhLmdvdi93bXRzLXdlYm1lcmMve3ZhcmlhbnR9L2RlZmF1bHQve3RpbWV9L3t0aWxlbWF0cml4c2V0fXttYXhab29tfS97en0ve3l9L3t4fS57Zm9ybWF0fScsDQoJCQlvcHRpb25zOiB7DQoJCQkJYXR0cmlidXRpb246DQoJCQkJCSdJbWFnZXJ5IHByb3ZpZGVkIGJ5IHNlcnZpY2VzIGZyb20gdGhlIEdsb2JhbCBJbWFnZXJ5IEJyb3dzZSBTZXJ2aWNlcyAoR0lCUyksIG9wZXJhdGVkIGJ5IHRoZSBOQVNBL0dTRkMvRWFydGggU2NpZW5jZSBEYXRhIGFuZCBJbmZvcm1hdGlvbiBTeXN0ZW0gJyArDQoJCQkJCScoPGEgaHJlZj0iaHR0cHM6Ly9lYXJ0aGRhdGEubmFzYS5nb3YiPkVTRElTPC9hPikgd2l0aCBmdW5kaW5nIHByb3ZpZGVkIGJ5IE5BU0EvSFEuJywNCgkJCQlib3VuZHM6IFtbLTg1LjA1MTEyODc3NzYsIC0xNzkuOTk5OTk5OTc1XSwgWzg1LjA1MTEyODc3NzYsIDE3OS45OTk5OTk5NzVdXSwNCgkJCQltaW5ab29tOiAxLA0KCQkJCW1heFpvb206IDksDQoJCQkJZm9ybWF0OiAnanBnJywNCgkJCQl0aW1lOiAnJywNCgkJCQl0aWxlbWF0cml4c2V0OiAnR29vZ2xlTWFwc0NvbXBhdGlibGVfTGV2ZWwnDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlNb2Rpc1RlcnJhVHJ1ZUNvbG9yQ1I6ICdNT0RJU19UZXJyYV9Db3JyZWN0ZWRSZWZsZWN0YW5jZV9UcnVlQ29sb3InLA0KCQkJCU1vZGlzVGVycmFCYW5kczM2N0NSOiAnTU9ESVNfVGVycmFfQ29ycmVjdGVkUmVmbGVjdGFuY2VfQmFuZHMzNjcnLA0KCQkJCVZpaXJzRWFydGhBdE5pZ2h0MjAxMjogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnVklJUlNfQ2l0eUxpZ2h0c18yMDEyJywNCgkJCQkJCW1heFpvb206IDgNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJTW9kaXNUZXJyYUxTVERheTogew0KCQkJCQlvcHRpb25zOiB7DQoJCQkJCQl2YXJpYW50OiAnTU9ESVNfVGVycmFfTGFuZF9TdXJmYWNlX1RlbXBfRGF5JywNCgkJCQkJCWZvcm1hdDogJ3BuZycsDQoJCQkJCQltYXhab29tOiA3LA0KCQkJCQkJb3BhY2l0eTogMC43NQ0KCQkJCQl9DQoJCQkJfSwNCgkJCQlNb2Rpc1RlcnJhU25vd0NvdmVyOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9Tbm93X0NvdmVyJywNCgkJCQkJCWZvcm1hdDogJ3BuZycsDQoJCQkJCQltYXhab29tOiA4LA0KCQkJCQkJb3BhY2l0eTogMC43NQ0KCQkJCQl9DQoJCQkJfSwNCgkJCQlNb2Rpc1RlcnJhQU9EOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCXZhcmlhbnQ6ICdNT0RJU19UZXJyYV9BZXJvc29sJywNCgkJCQkJCWZvcm1hdDogJ3BuZycsDQoJCQkJCQltYXhab29tOiA2LA0KCQkJCQkJb3BhY2l0eTogMC43NQ0KCQkJCQl9DQoJCQkJfSwNCgkJCQlNb2Rpc1RlcnJhQ2hsb3JvcGh5bGw6IHsNCgkJCQkJb3B0aW9uczogew0KCQkJCQkJdmFyaWFudDogJ01PRElTX1RlcnJhX0NobG9yb3BoeWxsX0EnLA0KCQkJCQkJZm9ybWF0OiAncG5nJywNCgkJCQkJCW1heFpvb206IDcsDQoJCQkJCQlvcGFjaXR5OiAwLjc1DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0sDQoJCU5MUzogew0KCQkJLy8gTkxTIG1hcHMgYXJlIGNvcHlyaWdodCBOYXRpb25hbCBsaWJyYXJ5IG9mIFNjb3RsYW5kLg0KCQkJLy8gaHR0cDovL21hcHMubmxzLnVrL3Byb2plY3RzL2FwaS9pbmRleC5odG1sDQoJCQkvLyBQbGVhc2UgY29udGFjdCBOTFMgZm9yIGFueXRoaW5nIG90aGVyIHRoYW4gbm9uLWNvbW1lcmNpYWwgbG93IHZvbHVtZSB1c2FnZQ0KCQkJLy8NCgkJCS8vIE1hcCBzb3VyY2VzOiBPcmRuYW5jZSBTdXJ2ZXkgMToxbSB0byAxOjYzSywgMTkyMHMtMTk0MHMNCgkJCS8vICAgejAtOSAgLSAxOjFtDQoJCQkvLyAgejEwLTExIC0gcXVhcnRlciBpbmNoICgxOjI1MzQ0MCkNCgkJCS8vICB6MTItMTggLSBvbmUgaW5jaCAoMTo2MzM2MCkNCgkJCXVybDogJy8vbmxzLXtzfS50aWxlc2VydmVyLmNvbS9ubHMve3p9L3t4fS97eX0uanBnJywNCgkJCW9wdGlvbnM6IHsNCgkJCQlhdHRyaWJ1dGlvbjogJzxhIGhyZWY9Imh0dHA6Ly9nZW8ubmxzLnVrL21hcHMvIj5OYXRpb25hbCBMaWJyYXJ5IG9mIFNjb3RsYW5kIEhpc3RvcmljIE1hcHM8L2E+JywNCgkJCQlib3VuZHM6IFtbNDkuNiwgLTEyXSwgWzYxLjcsIDNdXSwNCgkJCQltaW5ab29tOiAxLA0KCQkJCW1heFpvb206IDE4LA0KCQkJCXN1YmRvbWFpbnM6ICcwMTIzJywNCgkJCX0NCgkJfSwNCgkJSnVzdGljZU1hcDogew0KCQkJLy8gSnVzdGljZSBNYXAgKGh0dHA6Ly93d3cuanVzdGljZW1hcC5vcmcvKQ0KCQkJLy8gVmlzdWFsaXplIHJhY2UgYW5kIGluY29tZSBkYXRhIGZvciB5b3VyIGNvbW11bml0eSwgY291bnR5IGFuZCBjb3VudHJ5Lg0KCQkJLy8gSW5jbHVkZXMgdG9vbHMgZm9yIGRhdGEgam91cm5hbGlzdHMsIGJsb2dnZXJzIGFuZCBjb21tdW5pdHkgYWN0aXZpc3RzLg0KCQkJdXJsOiAnaHR0cDovL3d3dy5qdXN0aWNlbWFwLm9yZy90aWxlL3tzaXplfS97dmFyaWFudH0ve3p9L3t4fS97eX0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQlhdHRyaWJ1dGlvbjogJzxhIGhyZWY9Imh0dHA6Ly93d3cuanVzdGljZW1hcC5vcmcvdGVybXMucGhwIj5KdXN0aWNlIE1hcDwvYT4nLA0KCQkJCS8vIG9uZSBvZiAnY291bnR5JywgJ3RyYWN0JywgJ2Jsb2NrJw0KCQkJCXNpemU6ICdjb3VudHknLA0KCQkJCS8vIEJvdW5kcyBmb3IgVVNBLCBpbmNsdWRpbmcgQWxhc2thIGFuZCBIYXdhaWkNCgkJCQlib3VuZHM6IFtbMTQsIC0xODBdLCBbNzIsIC01Nl1dDQoJCQl9LA0KCQkJdmFyaWFudHM6IHsNCgkJCQlpbmNvbWU6ICdpbmNvbWUnLA0KCQkJCWFtZXJpY2FuSW5kaWFuOiAnaW5kaWFuJywNCgkJCQlhc2lhbjogJ2FzaWFuJywNCgkJCQlibGFjazogJ2JsYWNrJywNCgkJCQloaXNwYW5pYzogJ2hpc3BhbmljJywNCgkJCQltdWx0aTogJ211bHRpJywNCgkJCQlub25XaGl0ZTogJ25vbndoaXRlJywNCgkJCQl3aGl0ZTogJ3doaXRlJywNCgkJCQlwbHVyYWxpdHk6ICdwbHVyYWwnDQoJCQl9DQoJCX0sDQoJCVdpa2ltZWRpYTogew0KCQkJdXJsOiAnaHR0cHM6Ly9tYXBzLndpa2ltZWRpYS5vcmcvb3NtLWludGwve3p9L3t4fS97eX17cn0ucG5nJywNCgkJCW9wdGlvbnM6IHsNCgkJCQlhdHRyaWJ1dGlvbjogJzxhIGhyZWY9Imh0dHBzOi8vd2lraW1lZGlhZm91bmRhdGlvbi5vcmcvd2lraS9NYXBzX1Rlcm1zX29mX1VzZSI+V2lraW1lZGlhPC9hPicsDQoJCQkJbWluWm9vbTogMSwNCgkJCQltYXhab29tOiAxOQ0KCQkJfQ0KCQl9LA0KCQlHZW9wb3J0YWlsRnJhbmNlOiB7DQoJCQl1cmw6ICdodHRwczovL3d4cy5pZ24uZnIve2FwaWtleX0vZ2VvcG9ydGFpbC93bXRzP1JFUVVFU1Q9R2V0VGlsZSZTRVJWSUNFPVdNVFMmVkVSU0lPTj0xLjAuMCZTVFlMRT17c3R5bGV9JlRJTEVNQVRSSVhTRVQ9UE0mRk9STUFUPXtmb3JtYXR9JkxBWUVSPXt2YXJpYW50fSZUSUxFTUFUUklYPXt6fSZUSUxFUk9XPXt5fSZUSUxFQ09MPXt4fScsDQoJCQlvcHRpb25zOiB7DQoJCQkJYXR0cmlidXRpb246ICc8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cuZ2VvcG9ydGFpbC5nb3V2LmZyLyI+R2VvcG9ydGFpbCBGcmFuY2U8L2E+JywNCgkJCQlib3VuZHM6IFtbLTc1LCAtMTgwXSwgWzgxLCAxODBdXSwNCgkJCQltaW5ab29tOiAyLA0KCQkJCW1heFpvb206IDE4LA0KCQkJCS8vIEdldCB5b3VyIG93biBnZW9wb3J0YWlsIGFwaWtleSBoZXJlIDogaHR0cDovL3Byb2Zlc3Npb25uZWxzLmlnbi5mci9pZ24vY29udHJhdHMvDQoJCQkJLy8gTkIgOiAnY2hvaXNpcmdlb3BvcnRhaWwnIGlzIGEgZGVtb25zdHJhdGlvbiBrZXkgdGhhdCBjb21lcyB3aXRoIG5vIGd1YXJhbnRlZQ0KCQkJCWFwaWtleTogJ2Nob2lzaXJnZW9wb3J0YWlsJywNCgkJCQlmb3JtYXQ6ICdpbWFnZS9qcGVnJywNCgkJCQlzdHlsZSA6ICdub3JtYWwnLA0KCQkJCXZhcmlhbnQ6ICdHRU9HUkFQSElDQUxHUklEU1lTVEVNUy5NQVBTLlNDQU4tRVhQUkVTUy5TVEFOREFSRCcNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCXBhcmNlbHM6IHsNCgkJCQkJb3B0aW9ucyA6IHsNCgkJCQkJCXZhcmlhbnQ6ICdDQURBU1RSQUxQQVJDRUxTLlBBUkNFTFMnLA0KCQkJCQkJbWF4Wm9vbTogMjAsDQoJCQkJCQlzdHlsZSA6ICdiZHBhcmNlbGxhaXJlJywNCgkJCQkJCWZvcm1hdDogJ2ltYWdlL3BuZycNCgkJCQkJfQ0KCQkJCX0sDQoJCQkJaWduTWFwczogJ0dFT0dSQVBISUNBTEdSSURTWVNURU1TLk1BUFMnLA0KCQkJCW1hcHM6ICdHRU9HUkFQSElDQUxHUklEU1lTVEVNUy5NQVBTLlNDQU4tRVhQUkVTUy5TVEFOREFSRCcsDQoJCQkJb3J0aG9zOiB7DQoJCQkJCW9wdGlvbnM6IHsNCgkJCQkJCW1heFpvb206IDE5LA0KCQkJCQkJdmFyaWFudDogJ09SVEhPSU1BR0VSWS5PUlRIT1BIT1RPUycNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfSwNCgkJT25lTWFwU0c6IHsNCgkJCXVybDogJy8vbWFwcy17c30ub25lbWFwLnNnL3YzL3t2YXJpYW50fS97en0ve3h9L3t5fS5wbmcnLA0KCQkJb3B0aW9uczogew0KCQkJCXZhcmlhbnQ6ICdEZWZhdWx0JywNCgkJCQltaW5ab29tOiAxMSwNCgkJCQltYXhab29tOiAxOCwNCgkJCQlib3VuZHM6IFtbMS41NjA3MywgMTA0LjExNDc1XSwgWzEuMTYsIDEwMy41MDJdXSwNCgkJCQlhdHRyaWJ1dGlvbjogJzxpbWcgc3JjPSJodHRwczovL2RvY3Mub25lbWFwLnNnL21hcHMvaW1hZ2VzL29uZU1hcDY0LTAxLnBuZyIgc3R5bGU9ImhlaWdodDoyMHB4O3dpZHRoOjIwcHg7Ii8+IE5ldyBPbmVNYXAgfCBNYXAgZGF0YSAmY29weTsgY29udHJpYnV0b3JzLCA8YSBocmVmPSJodHRwOi8vU0xBLmdvdi5zZyI+U2luZ2Fwb3JlIExhbmQgQXV0aG9yaXR5PC9hPicNCgkJCX0sDQoJCQl2YXJpYW50czogew0KCQkJCURlZmF1bHQ6ICdEZWZhdWx0JywNCgkJCQlOaWdodDogJ05pZ2h0JywNCgkJCQlPcmlnaW5hbDogJ09yaWdpbmFsJywNCgkJCQlHcmV5OiAnR3JleScsDQoJCQkJTGFuZExvdDogJ0xhbmRMb3QnDQoJCQl9DQoJCX0NCgl9Ow0KDQoJTC50aWxlTGF5ZXIucHJvdmlkZXIgPSBmdW5jdGlvbiAocHJvdmlkZXIsIG9wdGlvbnMpIHsNCgkJcmV0dXJuIG5ldyBMLlRpbGVMYXllci5Qcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyk7DQoJfTsNCg0KCXJldHVybiBMOw0KfSkpOw0K"></script>
<script src="data:application/javascript;base64,TGVhZmxldFdpZGdldC5tZXRob2RzLmFkZFByb3ZpZGVyVGlsZXMgPSBmdW5jdGlvbihwcm92aWRlciwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihMLnRpbGVMYXllci5wcm92aWRlcihwcm92aWRlciwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9Owo="></script>
<script src="data:application/javascript;base64,LyoKIEdyYXRpY3VsZSBwbHVnaW4gZm9yIExlYWZsZXQgcG93ZXJlZCBtYXBzLgoqLwpMLkdyYXRpY3VsZSA9IEwuR2VvSlNPTi5leHRlbmQoewoKICAgIG9wdGlvbnM6IHsKICAgICAgICBzdHlsZTogewogICAgICAgICAgICBjb2xvcjogJyMzMzMnLAogICAgICAgICAgICB3ZWlnaHQ6IDEKICAgICAgICB9LAogICAgICAgIGludGVydmFsOiAyMAogICAgfSwKCiAgICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpOwogICAgICAgIHRoaXMuX2xheWVycyA9IHt9OwoKICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNwaGVyZSkgewogICAgICAgICAgICB0aGlzLmFkZERhdGEodGhpcy5fZ2V0RnJhbWUoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5hZGREYXRhKHRoaXMuX2dldEdyYXRpY3VsZSgpKTsKICAgICAgICB9CiAgICB9LAoKICAgIF9nZXRGcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHsgInR5cGUiOiAiUG9seWdvbiIsCiAgICAgICAgICAiY29vcmRpbmF0ZXMiOiBbCiAgICAgICAgICAgICAgdGhpcy5fZ2V0TWVyaWRpYW4oLTE4MCkuY29uY2F0KHRoaXMuX2dldE1lcmlkaWFuKDE4MCkucmV2ZXJzZSgpKQogICAgICAgICAgXQogICAgICAgIH07CiAgICB9LAoKICAgIF9nZXRHcmF0aWN1bGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZmVhdHVyZXMgPSBbXSwgaW50ZXJ2YWwgPSB0aGlzLm9wdGlvbnMuaW50ZXJ2YWw7CgogICAgICAgIC8vIE1lcmlkaWFucwogICAgICAgIGZvciAodmFyIGxuZyA9IDA7IGxuZyA8PSAxODA7IGxuZyA9IGxuZyArIGludGVydmFsKSB7CiAgICAgICAgICAgIGZlYXR1cmVzLnB1c2godGhpcy5fZ2V0RmVhdHVyZSh0aGlzLl9nZXRNZXJpZGlhbihsbmcpLCB7CiAgICAgICAgICAgICAgICAibmFtZSI6IChsbmcpID8gbG5nLnRvU3RyaW5nKCkgKyAiwrAgRSIgOiAiUHJpbWUgbWVyaWRpYW4iCiAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgaWYgKGxuZyAhPT0gMCkgewogICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCh0aGlzLl9nZXRGZWF0dXJlKHRoaXMuX2dldE1lcmlkaWFuKC1sbmcpLCB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiBsbmcudG9TdHJpbmcoKSArICLCsCBXIgogICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQYXJhbGxlbHMKICAgICAgICBmb3IgKHZhciBsYXQgPSAwOyBsYXQgPD0gOTA7IGxhdCA9IGxhdCArIGludGVydmFsKSB7CiAgICAgICAgICAgIGZlYXR1cmVzLnB1c2godGhpcy5fZ2V0RmVhdHVyZSh0aGlzLl9nZXRQYXJhbGxlbChsYXQpLCB7CiAgICAgICAgICAgICAgICAibmFtZSI6IChsYXQpID8gbGF0LnRvU3RyaW5nKCkgKyAiwrAgTiIgOiAiRXF1YXRvciIKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBpZiAobGF0ICE9PSAwKSB7CiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHRoaXMuX2dldEZlYXR1cmUodGhpcy5fZ2V0UGFyYWxsZWwoLWxhdCksIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6IGxhdC50b1N0cmluZygpICsgIsKwIFMiCiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICJ0eXBlIjogIkZlYXR1cmVDb2xsZWN0aW9uIiwKICAgICAgICAgICAgImZlYXR1cmVzIjogZmVhdHVyZXMKICAgICAgICB9OwogICAgfSwKCiAgICBfZ2V0TWVyaWRpYW46IGZ1bmN0aW9uIChsbmcpIHsKICAgICAgICBsbmcgPSB0aGlzLl9sbmdGaXgobG5nKTsKICAgICAgICB2YXIgY29vcmRzID0gW107CiAgICAgICAgZm9yICh2YXIgbGF0ID0gLTkwOyBsYXQgPD0gOTA7IGxhdCsrKSB7CiAgICAgICAgICAgIGNvb3Jkcy5wdXNoKFtsbmcsIGxhdF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29vcmRzOwogICAgfSwKCiAgICBfZ2V0UGFyYWxsZWw6IGZ1bmN0aW9uIChsYXQpIHsKICAgICAgICB2YXIgY29vcmRzID0gW107CiAgICAgICAgZm9yICh2YXIgbG5nID0gLTE4MDsgbG5nIDw9IDE4MDsgbG5nKyspIHsKICAgICAgICAgICAgY29vcmRzLnB1c2goW3RoaXMuX2xuZ0ZpeChsbmcpLCBsYXRdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvb3JkczsKICAgIH0sCgogICAgX2dldEZlYXR1cmU6IGZ1bmN0aW9uIChjb29yZHMsIHByb3ApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAidHlwZSI6ICJGZWF0dXJlIiwKICAgICAgICAgICAgImdlb21ldHJ5IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiTGluZVN0cmluZyIsCiAgICAgICAgICAgICAgICAiY29vcmRpbmF0ZXMiOiBjb29yZHMKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInByb3BlcnRpZXMiOiBwcm9wCiAgICAgICAgfTsKICAgIH0sCgogICAgX2xuZ0ZpeDogZnVuY3Rpb24gKGxuZykgewogICAgICAgIGlmIChsbmcgPj0gMTgwKSByZXR1cm4gMTc5Ljk5OTk5OTsKICAgICAgICBpZiAobG5nIDw9IC0xODApIHJldHVybiAtMTc5Ljk5OTk5OTsKICAgICAgICByZXR1cm4gbG5nOwogICAgfQoKfSk7CgpMLmdyYXRpY3VsZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICByZXR1cm4gbmV3IEwuR3JhdGljdWxlKG9wdGlvbnMpOwp9Owo="></script>
<script src="data:application/javascript;base64,ICBMZWFmbGV0V2lkZ2V0Lm1ldGhvZHMuYWRkR3JhdGljdWxlID0gZnVuY3Rpb24oaW50ZXJ2YWwsIHNwaGVyZSwgc3R5bGUsCiAgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICAgIChmdW5jdGlvbigpIHsKICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoCiAgICAgICAgTC5ncmF0aWN1bGUoJC5leHRlbmQoewogICAgICAgICAgaW50ZXJ2YWw6IGludGVydmFsLAogICAgICAgICAgc3BoZXJlOiBzcGhlcmUsCiAgICAgICAgICBzdHlsZTogc3R5bGUKICAgICAgICB9LCBvcHRpb25zIHx8IHt9KSksCiAgICAgICAgJ3NoYXBlJywgbGF5ZXJJZCwgZ3JvdXApOwogICAgfSkuY2FsbCh0aGlzKTsKICB9Owo="></script>
<style>.leaflet-container {background:#FFFFF3;}</style>
</head>
<body>
<div id="htmlwidget_container">
<div id="htmlwidget-0b367ab0bea8910be911" style="width:100%;height:400px;" class="leaflet html-widget"></div>
</div>
<script type="application/json" data-for="htmlwidget-0b367ab0bea8910be911">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"createMapPane","args":["tmap401",401]},{"method":"createMapPane","args":["tmap402",402]},{"method":"addProviderTiles","args":["Esri.WorldTopoMap",null,"Esri.WorldTopoMap",{"minZoom":0,"maxZoom":18,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":0.5,"zIndex":1,"detectRetina":false,"pane":"tilePane"}]},{"method":"addPolygons","args":[[[[{"lng":[-106.497886,-106.497296,-106.496802,-106.495843,-106.495641,-106.49549,-106.495349,-106.494426,-106.494335,-106.493534,-106.492884,-106.492187,-106.49106,-106.489882,-106.48934,-106.488811,-106.488235,-106.487903,-106.487322,-106.486627,-106.485838,-106.484942,-106.484005,-106.48246,-106.480768,-106.480585,-106.480574,-106.480564,-106.480564,-106.480569,-106.480558,-106.480476,-106.480431,-106.480384,-106.480377,-106.480304,-106.480477,-106.480651,-106.48085,-106.481008,-106.481132,-106.481279,-106.481417,-106.48147,-106.481459,-106.481487,-106.481525,-106.481606,-106.481717,-106.481827,-106.482007,-106.482217,-106.48229,-106.482476,-106.482784,-106.482975,-106.483045,-106.483143,-106.483206,-106.483272,-106.483289,-106.483335,-106.483483,-106.483872,-106.484192,-106.4844,-106.484522,-106.484556,-106.484644,-106.484721,-106.484828,-106.484948,-106.485122,-106.485424,-106.485659,-106.485844,-106.486773,-106.487003,-106.487256,-106.48769,-106.488002,-106.488338,-106.488526,-106.488667,-106.488825,-106.488939,-106.489069,-106.488771,-106.488789,-106.488845,-106.488789,-106.488714,-106.488625,-106.488657,-106.48871,-106.488809,-106.489154,-106.489387,-106.48957,-106.489568,-106.490389,-106.491426,-106.492189,-106.492776,-106.49313,-106.49408,-106.494495,-106.495051,-106.495486,-106.495964,-106.496451,-106.497478,-106.497681,-106.497717,-106.497742,-106.497802,-106.497814,-106.497886],"lat":[35.130655,35.130669,35.130669,35.130691,35.130721,35.130744,35.130765,35.130798,35.130797,35.130787,35.130779,35.130771,35.130794,35.130267,35.130964,35.13162,35.132384,35.13263,35.132995,35.13335,35.13306,35.132688,35.132367,35.131819,35.131233,35.131142,35.130924,35.129844,35.129725,35.1291,35.127989,35.12227,35.119151,35.115972,35.115421,35.112821,35.112866,35.112891,35.112854,35.112769,35.112711,35.112626,35.112514,35.112353,35.112155,35.11204,35.111951,35.111883,35.11185,35.111846,35.11195,35.112121,35.112188,35.112194,35.112168,35.112096,35.112025,35.11183,35.111672,35.111484,35.111369,35.111325,35.11124,35.111138,35.111096,35.111102,35.111081,35.111064,35.11105,35.111053,35.111084,35.111098,35.11113,35.111214,35.111321,35.111346,35.111409,35.111409,35.11139,35.111281,35.111176,35.111043,35.110617,35.110254,35.109772,35.109585,35.109689,35.11073,35.111251,35.112902,35.113091,35.113268,35.113684,35.114025,35.114181,35.114473,35.114887,35.115061,35.115385,35.115596,35.115575,35.115577,35.115579,35.115578,35.115602,35.115584,35.115583,35.115582,35.115564,35.115589,35.115585,35.115584,35.12006,35.122072,35.123424,35.12612,35.126976,35.130655]}]],[[{"lng":[-106.51571,-106.515673,-106.515681,-106.515082,-106.512543,-106.511276,-106.50795,-106.506873,-106.506028,-106.504861,-106.504484,-106.502466,-106.501991,-106.501123,-106.500258,-106.498078,-106.498018,-106.497886,-106.497814,-106.497802,-106.497742,-106.497941,-106.498945,-106.499639,-106.500541,-106.501552,-106.503099,-106.504514,-106.504667,-106.507187,-106.509049,-106.509878,-106.510721,-106.511186,-106.511611,-106.51252,-106.5134,-106.5143,-106.515684,-106.515705,-106.515714,-106.51571],"lat":[35.126553,35.128321,35.13066,35.130684,35.130677,35.130689,35.130676,35.130673,35.13067,35.130656,35.130652,35.130656,35.130658,35.130658,35.130651,35.130651,35.130652,35.130655,35.126976,35.12612,35.123424,35.123426,35.123438,35.123444,35.123454,35.123452,35.123457,35.123471,35.123472,35.123495,35.123502,35.12351,35.123518,35.123526,35.123516,35.123523,35.123545,35.12355,35.123547,35.125491,35.126373,35.126553]}]],[[{"lng":[-106.533375,-106.533325,-106.533328,-106.533329,-106.533336,-106.531402,-106.531054,-106.529338,-106.527492,-106.5262,-106.524512,-106.522302,-106.520449,-106.518654,-106.515681,-106.515673,-106.51571,-106.515714,-106.515705,-106.515684,-106.518732,-106.519637,-106.520579,-106.520722,-106.521585,-106.522813,-106.524516,-106.52642,-106.528509,-106.528803,-106.529328,-106.529403,-106.530269,-106.53112,-106.53313,-106.53329,-106.533293,-106.533305,-106.533314,-106.533364,-106.533372,-106.533375],"lat":[35.128221,35.128529,35.129617,35.12991,35.130644,35.130649,35.13065,35.130654,35.130652,35.130651,35.130692,35.130687,35.130685,35.130684,35.13066,35.128321,35.126553,35.126373,35.125491,35.123547,35.123534,35.12353,35.123544,35.123546,35.12356,35.123515,35.12348,35.123471,35.123466,35.123465,35.123464,35.123464,35.12348,35.123479,35.123468,35.123425,35.123935,35.124175,35.125257,35.126366,35.127022,35.128221]}]],[[{"lng":[-106.533293,-106.533277,-106.53329,-106.53313,-106.53112,-106.530269,-106.529403,-106.529328,-106.528803,-106.528509,-106.52642,-106.524516,-106.522813,-106.521585,-106.520722,-106.520579,-106.519637,-106.518732,-106.515684,-106.515685,-106.515688,-106.515694,-106.515704,-106.515743,-106.515725,-106.51564,-106.516682,-106.517551,-106.51837,-106.519856,-106.521659,-106.521913,-106.522786,-106.524457,-106.524541,-106.526702,-106.527561,-106.528449,-106.529322,-106.530181,-106.530594,-106.531469,-106.533235,-106.533285,-106.533287,-106.533288,-106.533278,-106.533293],"lat":[35.120226,35.121243,35.123425,35.123468,35.123479,35.12348,35.123464,35.123464,35.123465,35.123466,35.123471,35.12348,35.123515,35.12356,35.123546,35.123544,35.12353,35.123534,35.123547,35.122709,35.121645,35.121089,35.120033,35.119601,35.119034,35.116257,35.116279,35.116269,35.116242,35.116262,35.116244,35.116241,35.116245,35.11626,35.116262,35.116248,35.116222,35.116215,35.11621,35.116182,35.116181,35.116179,35.116175,35.117931,35.118512,35.118788,35.119468,35.120226]}]],[[{"lng":[-106.515743,-106.515704,-106.515694,-106.515688,-106.515685,-106.515684,-106.5143,-106.5134,-106.51252,-106.511611,-106.511186,-106.510721,-106.509878,-106.509049,-106.507187,-106.504667,-106.504514,-106.503099,-106.501552,-106.500541,-106.499639,-106.498945,-106.497941,-106.497742,-106.497717,-106.497681,-106.497478,-106.497668,-106.498888,-106.499317,-106.499351,-106.499376,-106.500247,-106.500697,-106.502396,-106.503236,-106.503925,-106.50528,-106.506517,-106.507377,-106.507534,-106.508202,-106.51272,-106.51564,-106.515725,-106.515743],"lat":[35.119601,35.120033,35.121089,35.121645,35.122709,35.123547,35.12355,35.123545,35.123523,35.123516,35.123526,35.123518,35.12351,35.123502,35.123495,35.123472,35.123471,35.123457,35.123452,35.123454,35.123444,35.123438,35.123426,35.123424,35.122072,35.12006,35.115584,35.115598,35.115715,35.115709,35.115708,35.115708,35.115844,35.115873,35.115977,35.116052,35.116115,35.116238,35.116339,35.116347,35.116338,35.116369,35.116305,35.116257,35.119034,35.119601]}]],[[{"lng":[-106.497478,-106.496451,-106.495964,-106.495486,-106.495051,-106.494495,-106.49408,-106.49313,-106.492776,-106.492189,-106.491426,-106.490389,-106.489568,-106.48957,-106.489387,-106.489154,-106.488809,-106.48871,-106.488657,-106.488625,-106.488714,-106.488789,-106.488845,-106.488789,-106.488771,-106.489069,-106.488939,-106.488825,-106.488667,-106.488526,-106.488338,-106.488002,-106.48769,-106.487256,-106.487003,-106.486773,-106.485844,-106.485659,-106.485424,-106.485122,-106.484948,-106.484828,-106.484721,-106.484644,-106.484556,-106.484522,-106.4844,-106.484192,-106.483872,-106.483483,-106.483335,-106.483289,-106.483272,-106.483206,-106.483143,-106.483045,-106.482975,-106.482784,-106.482476,-106.48229,-106.482217,-106.482007,-106.481827,-106.481717,-106.481606,-106.481525,-106.481487,-106.481459,-106.48147,-106.481417,-106.481279,-106.481132,-106.481008,-106.48085,-106.480651,-106.480477,-106.480304,-106.480129,-106.480096,-106.480085,-106.480035,-106.480156,-106.480188,-106.480104,-106.480024,-106.480199,-106.480416,-106.480608,-106.481424,-106.482552,-106.483105,-106.483539,-106.484515,-106.485717,-106.486761,-106.486745,-106.486699,-106.487291,-106.48736,-106.489539,-106.490426,-106.491307,-106.492219,-106.493098,-106.49302,-106.492825,-106.492809,-106.492631,-106.493248,-106.493554,-106.494008,-106.494533,-106.495533,-106.49593,-106.496357,-106.496907,-106.497308,-106.497318,-106.49732,-106.497332,-106.497356,-106.497386,-106.497417,-106.497428,-106.497481,-106.497478],"lat":[35.115584,35.115585,35.115589,35.115564,35.115582,35.115583,35.115584,35.115602,35.115578,35.115579,35.115577,35.115575,35.115596,35.115385,35.115061,35.114887,35.114473,35.114181,35.114025,35.113684,35.113268,35.113091,35.112902,35.111251,35.11073,35.109689,35.109585,35.109772,35.110254,35.110617,35.111043,35.111176,35.111281,35.11139,35.111409,35.111409,35.111346,35.111321,35.111214,35.11113,35.111098,35.111084,35.111053,35.11105,35.111064,35.111081,35.111102,35.111096,35.111138,35.11124,35.111325,35.111369,35.111484,35.111672,35.11183,35.112025,35.112096,35.112168,35.112194,35.112188,35.112121,35.11195,35.111846,35.11185,35.111883,35.111951,35.11204,35.112155,35.112353,35.112514,35.112626,35.112711,35.112769,35.112854,35.112891,35.112866,35.112821,35.103075,35.101286,35.100619,35.09906,35.098972,35.098949,35.098831,35.098718,35.098776,35.098848,35.098913,35.099512,35.099587,35.099629,35.099742,35.099935,35.100224,35.100454,35.100514,35.100685,35.100688,35.100688,35.100697,35.100695,35.100733,35.100714,35.100735,35.101468,35.102152,35.102209,35.102832,35.102924,35.102947,35.102946,35.102921,35.102904,35.102903,35.102789,35.102693,35.102687,35.1043,35.10488,35.108506,35.109315,35.111196,35.112777,35.113639,35.114451,35.115584]}]],[[{"lng":[-106.515682,-106.51564,-106.51272,-106.508202,-106.507534,-106.507377,-106.506517,-106.50528,-106.503925,-106.503236,-106.502396,-106.500697,-106.500247,-106.499376,-106.499351,-106.499317,-106.498888,-106.497668,-106.497478,-106.497481,-106.497428,-106.497417,-106.497386,-106.497356,-106.497541,-106.498546,-106.499534,-106.500134,-106.500387,-106.500958,-106.501574,-106.50224,-106.502892,-106.503464,-106.50447,-106.504985,-106.506512,-106.507236,-106.507706,-106.508785,-106.509415,-106.5099,-106.510124,-106.51095,-106.511565,-106.512054,-106.513146,-106.514232,-106.515567,-106.515582,-106.515578,-106.515577,-106.515587,-106.515662,-106.515662,-106.515682],"lat":[35.115015,35.116257,35.116305,35.116369,35.116338,35.116347,35.116339,35.116238,35.116115,35.116052,35.115977,35.115873,35.115844,35.115708,35.115708,35.115709,35.115715,35.115598,35.115584,35.114451,35.113639,35.112777,35.111196,35.109315,35.109322,35.109363,35.109248,35.109029,35.108909,35.108795,35.108817,35.108953,35.109047,35.109022,35.108972,35.108923,35.108873,35.108823,35.108805,35.108755,35.10874,35.108728,35.108704,35.108774,35.108757,35.108743,35.108774,35.108815,35.108868,35.11131,35.111647,35.111855,35.112055,35.113397,35.113647,35.115015]}]],[[{"lng":[-106.533278,-106.533235,-106.531469,-106.530594,-106.530181,-106.529322,-106.528449,-106.527561,-106.526702,-106.524541,-106.524457,-106.522786,-106.521913,-106.521659,-106.519856,-106.51837,-106.517551,-106.516682,-106.51564,-106.515682,-106.515662,-106.515662,-106.515587,-106.515577,-106.515578,-106.515582,-106.515567,-106.51924,-106.519453,-106.519851,-106.520123,-106.521034,-106.524499,-106.526848,-106.52816,-106.528248,-106.531508,-106.533118,-106.533088,-106.533139,-106.533173,-106.53324,-106.533276,-106.533278],"lat":[35.114724,35.116175,35.116179,35.116181,35.116182,35.11621,35.116215,35.116222,35.116248,35.116262,35.11626,35.116245,35.116241,35.116244,35.116262,35.116242,35.116269,35.116279,35.116257,35.115015,35.113647,35.113397,35.112055,35.111855,35.111647,35.11131,35.108868,35.108929,35.108931,35.108936,35.108937,35.108939,35.10895,35.108988,35.108984,35.108984,35.108938,35.108948,35.110594,35.111313,35.111992,35.113012,35.114306,35.114724]}]],[[{"lng":[-106.533118,-106.531508,-106.528248,-106.52816,-106.526848,-106.524499,-106.521034,-106.520123,-106.519851,-106.519453,-106.51924,-106.515567,-106.515538,-106.515506,-106.515488,-106.515475,-106.51544,-106.515438,-106.515437,-106.517112,-106.517447,-106.517675,-106.518039,-106.518958,-106.519243,-106.519826,-106.520895,-106.521344,-106.521736,-106.522577,-106.523033,-106.523417,-106.524286,-106.524735,-106.525184,-106.526025,-106.526865,-106.527706,-106.528518,-106.528923,-106.529336,-106.529745,-106.530167,-106.530574,-106.531001,-106.531446,-106.531811,-106.532938,-106.532973,-106.532997,-106.533012,-106.533022,-106.533053,-106.533055,-106.533118],"lat":[35.108948,35.108938,35.108984,35.108984,35.108988,35.10895,35.108939,35.108937,35.108936,35.108931,35.108929,35.108868,35.107973,35.107066,35.106087,35.105128,35.102348,35.101713,35.101462,35.101489,35.101512,35.101511,35.10151,35.101508,35.101555,35.10153,35.101551,35.101574,35.101573,35.101571,35.101593,35.101592,35.10159,35.101589,35.101612,35.101633,35.101631,35.101629,35.101651,35.101648,35.101649,35.101648,35.101671,35.101682,35.101691,35.10168,35.101701,35.101713,35.103354,35.104051,35.104501,35.10478,35.105439,35.106151,35.108948]}]],[[{"lng":[-106.515567,-106.514232,-106.513146,-106.512054,-106.511565,-106.51095,-106.510124,-106.5099,-106.509415,-106.508785,-106.507706,-106.507236,-106.506512,-106.504985,-106.50447,-106.503464,-106.502892,-106.50224,-106.501574,-106.500958,-106.500387,-106.500134,-106.499534,-106.498546,-106.497541,-106.497356,-106.497332,-106.49732,-106.497318,-106.497308,-106.497332,-106.497332,-106.49732,-106.49732,-106.49745,-106.497536,-106.497853,-106.498489,-106.498872,-106.499153,-106.499472,-106.500206,-106.500583,-106.500826,-106.501866,-106.502887,-106.503621,-106.504413,-106.50643,-106.506415,-106.508718,-106.509752,-106.5109,-106.511983,-106.51308,-106.513344,-106.513659,-106.514189,-106.515437,-106.515438,-106.51544,-106.515475,-106.515488,-106.515506,-106.515538,-106.515567],"lat":[35.108868,35.108815,35.108774,35.108743,35.108757,35.108774,35.108704,35.108728,35.10874,35.108755,35.108805,35.108823,35.108873,35.108923,35.108972,35.109022,35.109047,35.108953,35.108817,35.108795,35.108909,35.109029,35.109248,35.109363,35.109322,35.109315,35.108506,35.10488,35.1043,35.102687,35.102482,35.10207,35.101229,35.100862,35.100862,35.100869,35.100895,35.100892,35.100905,35.100933,35.100954,35.100956,35.100989,35.101007,35.101085,35.101146,35.10119,35.101237,35.101358,35.101106,35.10119,35.10123,35.101297,35.101329,35.101404,35.101412,35.101427,35.101452,35.101462,35.101713,35.102348,35.105128,35.106087,35.107066,35.107973,35.108868]}]],[[{"lng":[-106.551013,-106.551022,-106.551016,-106.551002,-106.551002,-106.550995,-106.547719,-106.546083,-106.545056,-106.54214,-106.539932,-106.538999,-106.537705,-106.535829,-106.534564,-106.533336,-106.533329,-106.533328,-106.533325,-106.533375,-106.533372,-106.533364,-106.533314,-106.533305,-106.533293,-106.53329,-106.534285,-106.534858,-106.535201,-106.535793,-106.536728,-106.536982,-106.537712,-106.538587,-106.539648,-106.541414,-106.542089,-106.542907,-106.543791,-106.545621,-106.546135,-106.547645,-106.548598,-106.548753,-106.551001,-106.551039,-106.551013],"lat":[35.126767,35.127164,35.127546,35.128179,35.128239,35.130699,35.130694,35.13067,35.130678,35.13067,35.130654,35.130673,35.130644,35.130654,35.130649,35.130644,35.12991,35.129617,35.128529,35.128221,35.127022,35.126366,35.125257,35.124175,35.123935,35.123425,35.123429,35.123433,35.123415,35.123402,35.123445,35.12345,35.123444,35.12346,35.12347,35.123492,35.123491,35.123502,35.123526,35.123535,35.123534,35.123543,35.123552,35.123554,35.123561,35.125171,35.126767]}]],[[{"lng":[-106.568768,-106.568739,-106.56873,-106.568732,-106.568717,-106.568713,-106.568664,-106.566897,-106.564238,-106.563849,-106.56382,-106.563225,-106.562621,-106.562345,-106.560958,-106.559864,-106.557752,-106.555396,-106.554978,-106.553033,-106.550995,-106.551002,-106.551002,-106.551016,-106.551022,-106.551013,-106.551039,-106.551001,-106.552612,-106.552928,-106.553505,-106.554208,-106.554333,-106.554498,-106.554702,-106.555093,-106.555964,-106.556879,-106.557795,-106.559321,-106.559891,-106.561091,-106.562127,-106.563087,-106.564003,-106.564941,-106.56587,-106.565976,-106.566389,-106.567008,-106.567265,-106.567948,-106.567999,-106.568056,-106.568768,-106.568768],"lat":[35.125389,35.126196,35.126736,35.127021,35.12891,35.129055,35.130763,35.130746,35.130748,35.130744,35.130744,35.130746,35.130749,35.13075,35.130756,35.130764,35.130733,35.130732,35.130732,35.130745,35.130699,35.128239,35.128179,35.127546,35.127164,35.126767,35.125171,35.123561,35.123539,35.123511,35.123366,35.12311,35.123037,35.122969,35.122884,35.122673,35.122402,35.12231,35.122344,35.122555,35.122643,35.122855,35.123148,35.123441,35.12368,35.123812,35.123809,35.123809,35.12377,35.123666,35.123627,35.123569,35.123564,35.12356,35.123542,35.125389]}]],[[{"lng":[-106.56887,-106.568833,-106.56885,-106.568843,-106.568831,-106.56881,-106.568824,-106.568821,-106.568794,-106.568768,-106.568056,-106.567999,-106.567948,-106.567265,-106.567008,-106.566389,-106.565976,-106.56587,-106.564941,-106.564003,-106.563087,-106.562127,-106.561091,-106.559891,-106.559321,-106.557795,-106.556879,-106.555964,-106.555093,-106.554702,-106.554498,-106.554333,-106.554208,-106.553505,-106.552928,-106.552612,-106.551001,-106.550976,-106.550922,-106.550907,-106.550841,-106.550853,-106.550911,-106.552164,-106.553104,-106.553259,-106.554015,-106.554361,-106.554952,-106.555463,-106.556565,-106.557667,-106.558777,-106.559879,-106.561133,-106.562234,-106.563361,-106.564488,-106.56524,-106.566525,-106.567767,-106.568909,-106.56887],"lat":[35.117312,35.118293,35.119122,35.119244,35.119436,35.120622,35.121122,35.121188,35.121749,35.123542,35.12356,35.123564,35.123569,35.123627,35.123666,35.12377,35.123809,35.123809,35.123812,35.12368,35.123441,35.123148,35.122855,35.122643,35.122555,35.122344,35.12231,35.122402,35.122673,35.122884,35.122969,35.123037,35.12311,35.123366,35.123511,35.123539,35.123561,35.121724,35.120406,35.120013,35.119221,35.11839,35.11645,35.11643,35.116467,35.116433,35.116438,35.11643,35.116424,35.116416,35.116425,35.116422,35.116419,35.11643,35.116417,35.116414,35.116454,35.11643,35.116452,35.116431,35.116438,35.116424,35.117312]}]],[[{"lng":[-106.551001,-106.548753,-106.548598,-106.547645,-106.546135,-106.545621,-106.543791,-106.542907,-106.542089,-106.541414,-106.539648,-106.538587,-106.537712,-106.536982,-106.536728,-106.535793,-106.535201,-106.534858,-106.534285,-106.53329,-106.533277,-106.533293,-106.533278,-106.533288,-106.533287,-106.533285,-106.533235,-106.535653,-106.537021,-106.537642,-106.538175,-106.539156,-106.539333,-106.540104,-106.542079,-106.543257,-106.543501,-106.544752,-106.546455,-106.547442,-106.548406,-106.549589,-106.550911,-106.550853,-106.550841,-106.550907,-106.550922,-106.550976,-106.551001],"lat":[35.123561,35.123554,35.123552,35.123543,35.123534,35.123535,35.123526,35.123502,35.123491,35.123492,35.12347,35.12346,35.123444,35.12345,35.123445,35.123402,35.123415,35.123433,35.123429,35.123425,35.121243,35.120226,35.119468,35.118788,35.118512,35.117931,35.116175,35.116235,35.116284,35.116282,35.11626,35.116255,35.116294,35.116292,35.1163,35.116308,35.116316,35.116357,35.116405,35.116406,35.116417,35.116449,35.11645,35.11839,35.119221,35.120013,35.120406,35.121724,35.123561]}]],[[{"lng":[-106.550911,-106.549589,-106.548406,-106.547442,-106.546455,-106.544752,-106.543501,-106.543257,-106.542079,-106.540104,-106.539333,-106.539156,-106.538175,-106.537642,-106.537021,-106.535653,-106.533235,-106.533278,-106.533276,-106.53324,-106.533173,-106.533139,-106.533088,-106.533118,-106.533055,-106.533053,-106.533022,-106.533012,-106.532997,-106.532973,-106.532938,-106.534674,-106.537444,-106.539164,-106.540229,-106.540804,-106.541848,-106.542908,-106.54329,-106.543816,-106.54439,-106.544708,-106.545195,-106.545616,-106.546509,-106.547396,-106.547703,-106.548803,-106.55081,-106.55084,-106.550848,-106.550862,-106.550867,-106.550893,-106.550896,-106.550878,-106.550874,-106.550866,-106.550873,-106.550879,-106.550869,-106.55089,-106.550911],"lat":[35.11645,35.116449,35.116417,35.116406,35.116405,35.116357,35.116316,35.116308,35.1163,35.116292,35.116294,35.116255,35.11626,35.116282,35.116284,35.116235,35.116175,35.114724,35.114306,35.113012,35.111992,35.111313,35.110594,35.108948,35.106151,35.105439,35.10478,35.104501,35.104051,35.103354,35.101713,35.101756,35.101798,35.101854,35.101875,35.101887,35.101895,35.101932,35.101931,35.101943,35.101949,35.101953,35.101952,35.101951,35.101976,35.101976,35.101975,35.101996,35.102017,35.10284,35.103689,35.105669,35.106972,35.108354,35.109234,35.110158,35.111035,35.112535,35.112864,35.114053,35.114185,35.11557,35.11645]}]],[[{"lng":[-106.568909,-106.567767,-106.566525,-106.56524,-106.564488,-106.563361,-106.562234,-106.561133,-106.559879,-106.558777,-106.557667,-106.556565,-106.555463,-106.554952,-106.554361,-106.554015,-106.553259,-106.553104,-106.552164,-106.550911,-106.55089,-106.550869,-106.550879,-106.550873,-106.550866,-106.550874,-106.550878,-106.550896,-106.550893,-106.550867,-106.550862,-106.550848,-106.55084,-106.55081,-106.551941,-106.552787,-106.553622,-106.554447,-106.555058,-106.555304,-106.556107,-106.556964,-106.557896,-106.559792,-106.56139,-106.562737,-106.563449,-106.563645,-106.564756,-106.565261,-106.565759,-106.566184,-106.566762,-106.566918,-106.56741,-106.567764,-106.568007,-106.568761,-106.568791,-106.568799,-106.568844,-106.568826,-106.568836,-106.568835,-106.568836,-106.568848,-106.568849,-106.568857,-106.568864,-106.568883,-106.568909],"lat":[35.116424,35.116438,35.116431,35.116452,35.11643,35.116454,35.116414,35.116417,35.11643,35.116419,35.116422,35.116425,35.116416,35.116424,35.11643,35.116438,35.116433,35.116467,35.11643,35.11645,35.11557,35.114185,35.114053,35.112864,35.112535,35.111035,35.110158,35.109234,35.108354,35.106972,35.105669,35.103689,35.10284,35.102017,35.102015,35.101976,35.101974,35.101972,35.101959,35.101952,35.10195,35.101948,35.101946,35.101932,35.101939,35.101942,35.10192,35.101913,35.101927,35.101921,35.101917,35.101906,35.101891,35.101892,35.101895,35.101898,35.10189,35.101869,35.102648,35.102832,35.103781,35.104592,35.105459,35.106703,35.107122,35.107898,35.109127,35.11101,35.112815,35.11461,35.116424]}]],[[{"lng":[-106.55081,-106.548803,-106.547703,-106.547396,-106.546509,-106.545616,-106.545195,-106.544708,-106.54439,-106.543816,-106.54329,-106.542908,-106.541848,-106.540804,-106.540229,-106.539164,-106.537444,-106.534674,-106.532938,-106.532876,-106.532809,-106.53278,-106.532754,-106.532753,-106.532751,-106.532712,-106.532693,-106.532639,-106.532616,-106.532614,-106.532613,-106.532604,-106.532594,-106.532563,-106.534798,-106.535767,-106.536435,-106.537068,-106.537952,-106.539034,-106.539883,-106.540299,-106.540973,-106.541606,-106.542132,-106.543069,-106.543501,-106.544701,-106.545058,-106.545338,-106.546616,-106.550673,-106.550673,-106.550665,-106.550677,-106.550689,-106.550692,-106.550685,-106.550687,-106.550719,-106.550729,-106.550748,-106.550745,-106.550755,-106.550764,-106.550772,-106.550773,-106.55081],"lat":[35.102017,35.101996,35.101975,35.101976,35.101976,35.101951,35.101952,35.101953,35.101949,35.101943,35.101931,35.101932,35.101895,35.101887,35.101875,35.101854,35.101798,35.101756,35.101713,35.100778,35.098142,35.097435,35.096643,35.096252,35.095859,35.094526,35.093162,35.092382,35.09173,35.091123,35.090934,35.089026,35.087464,35.087255,35.08729,35.087321,35.087325,35.087317,35.087315,35.08758,35.08777,35.087826,35.087828,35.087764,35.087653,35.087381,35.087543,35.087995,35.088133,35.088241,35.088735,35.090201,35.090319,35.09038,35.090946,35.091521,35.092252,35.092323,35.092808,35.094594,35.09733,35.098011,35.098703,35.09929,35.099843,35.100386,35.100485,35.102017]}]],[[{"lng":[-106.577581,-106.577165,-106.576932,-106.57677,-106.576367,-106.575717,-106.575391,-106.575024,-106.5746,-106.573839,-106.572881,-106.571652,-106.570732,-106.57007,-106.568761,-106.568007,-106.567764,-106.56741,-106.566918,-106.566762,-106.566184,-106.565759,-106.565261,-106.564756,-106.563645,-106.563449,-106.562737,-106.56139,-106.559792,-106.557896,-106.556964,-106.556107,-106.555304,-106.555058,-106.554447,-106.553622,-106.552787,-106.551941,-106.55081,-106.550773,-106.550772,-106.550764,-106.550755,-106.550745,-106.550748,-106.550729,-106.550719,-106.550687,-106.550685,-106.550692,-106.550689,-106.550677,-106.550665,-106.550673,-106.550673,-106.550726,-106.555539,-106.556458,-106.55798,-106.559553,-106.563849,-106.563966,-106.565421,-106.56728,-106.568554,-106.568716,-106.568924,-106.569178,-106.573476,-106.575025,-106.577573,-106.577581],"lat":[35.103683,35.103638,35.103557,35.103494,35.103258,35.102651,35.102247,35.102016,35.101913,35.101875,35.101877,35.101851,35.101854,35.101873,35.101869,35.10189,35.101898,35.101895,35.101892,35.101891,35.101906,35.101917,35.101921,35.101927,35.101913,35.10192,35.101942,35.101939,35.101932,35.101946,35.101948,35.10195,35.101952,35.101959,35.101972,35.101974,35.101976,35.102015,35.102017,35.100485,35.100386,35.099843,35.09929,35.098703,35.098011,35.09733,35.094594,35.092808,35.092323,35.092252,35.091521,35.090946,35.09038,35.090319,35.090201,35.09034,35.092289,35.092638,35.093247,35.093897,35.095646,35.095694,35.096286,35.09705,35.097573,35.097651,35.097734,35.097836,35.099557,35.100184,35.101215,35.103683]}]],[[{"lng":[-106.497652,-106.497646,-106.497591,-106.497556,-106.49732,-106.49732,-106.497332,-106.497332,-106.497308,-106.496907,-106.496357,-106.49593,-106.495533,-106.494533,-106.494008,-106.493554,-106.493248,-106.492631,-106.492809,-106.492825,-106.49302,-106.493098,-106.492219,-106.491307,-106.490426,-106.489539,-106.48736,-106.487291,-106.486699,-106.486745,-106.486761,-106.485717,-106.484515,-106.483539,-106.483105,-106.482552,-106.481424,-106.480608,-106.480416,-106.480199,-106.480024,-106.480077,-106.479962,-106.479945,-106.479946,-106.479962,-106.48012,-106.480763,-106.481133,-106.481458,-106.481839,-106.482005,-106.482225,-106.48242,-106.482565,-106.48264,-106.482684,-106.482994,-106.483491,-106.48374,-106.483893,-106.48404,-106.484144,-106.484217,-106.484304,-106.484334,-106.484514,-106.484649,-106.484916,-106.48525,-106.485546,-106.485713,-106.485991,-106.485194,-106.486411,-106.486726,-106.487328,-106.48739,-106.488198,-106.488431,-106.48893,-106.489187,-106.489415,-106.489713,-106.489842,-106.490007,-106.490134,-106.490283,-106.490428,-106.490549,-106.490836,-106.490914,-106.49131,-106.491987,-106.492268,-106.492633,-106.492957,-106.493463,-106.493634,-106.494327,-106.495136,-106.497112,-106.497091,-106.497132,-106.497653,-106.497652],"lat":[35.093836,35.094085,35.094786,35.095434,35.100862,35.101229,35.10207,35.102482,35.102687,35.102693,35.102789,35.102903,35.102904,35.102921,35.102946,35.102947,35.102924,35.102832,35.102209,35.102152,35.101468,35.100735,35.100714,35.100733,35.100695,35.100697,35.100688,35.100688,35.100685,35.100514,35.100454,35.100224,35.099935,35.099742,35.099629,35.099587,35.099512,35.098913,35.098848,35.098776,35.098718,35.097122,35.088602,35.086685,35.086577,35.084922,35.084839,35.084513,35.084346,35.084223,35.084065,35.084036,35.084026,35.08406,35.084107,35.084051,35.084052,35.083992,35.083912,35.083974,35.08417,35.084482,35.084792,35.085055,35.085256,35.085312,35.085571,35.085766,35.08609,35.086401,35.086582,35.086654,35.086774,35.087147,35.087827,35.088021,35.088037,35.088039,35.087856,35.087979,35.088253,35.088394,35.088493,35.088622,35.088654,35.08865,35.088529,35.08821,35.087586,35.087391,35.08778,35.08758,35.087176,35.086709,35.086445,35.086273,35.08616,35.086182,35.086177,35.086186,35.086196,35.086265,35.086874,35.087909,35.093052,35.093836]}]],[[{"lng":[-106.515437,-106.514189,-106.513659,-106.513344,-106.51308,-106.511983,-106.5109,-106.509752,-106.508718,-106.506415,-106.50643,-106.504413,-106.503621,-106.502887,-106.501866,-106.500826,-106.500583,-106.500206,-106.499472,-106.499153,-106.498872,-106.498489,-106.497853,-106.497536,-106.49745,-106.49732,-106.497556,-106.497591,-106.497801,-106.498806,-106.49947,-106.499773,-106.500222,-106.5007,-106.500929,-106.501132,-106.501231,-106.501481,-106.502014,-106.503444,-106.504237,-106.50574,-106.506336,-106.507483,-106.508548,-106.509842,-106.510709,-106.511773,-106.512953,-106.513934,-106.51528,-106.515335,-106.515343,-106.515398,-106.515437],"lat":[35.101462,35.101452,35.101427,35.101412,35.101404,35.101329,35.101297,35.10123,35.10119,35.101106,35.101358,35.101237,35.10119,35.101146,35.101085,35.101007,35.100989,35.100956,35.100954,35.100933,35.100905,35.100892,35.100895,35.100869,35.100862,35.100862,35.095434,35.094786,35.094793,35.094827,35.094869,35.094979,35.095099,35.094291,35.094034,35.093911,35.093853,35.093758,35.093714,35.093728,35.093709,35.093706,35.093748,35.093676,35.0937,35.093646,35.093618,35.093641,35.093613,35.093611,35.093581,35.096476,35.096889,35.099659,35.101462]}]],[[{"lng":[-106.532938,-106.531811,-106.531446,-106.531001,-106.530574,-106.530167,-106.529745,-106.529336,-106.528923,-106.528518,-106.527706,-106.526865,-106.526025,-106.525184,-106.524735,-106.524286,-106.523417,-106.523033,-106.522577,-106.521736,-106.521344,-106.520895,-106.519826,-106.519243,-106.518958,-106.518039,-106.517675,-106.517447,-106.517112,-106.515437,-106.515398,-106.515343,-106.515335,-106.51528,-106.516587,-106.51692,-106.518465,-106.519322,-106.520012,-106.520978,-106.521463,-106.522649,-106.524655,-106.52642,-106.527211,-106.528216,-106.529219,-106.530222,-106.53105,-106.531947,-106.532712,-106.532751,-106.532753,-106.532754,-106.53278,-106.532809,-106.532876,-106.532938],"lat":[35.101713,35.101701,35.10168,35.101691,35.101682,35.101671,35.101648,35.101649,35.101648,35.101651,35.101629,35.101631,35.101633,35.101612,35.101589,35.10159,35.101592,35.101593,35.101571,35.101573,35.101574,35.101551,35.10153,35.101555,35.101508,35.10151,35.101511,35.101512,35.101489,35.101462,35.099659,35.096889,35.096476,35.093581,35.093576,35.093461,35.093662,35.094033,35.094383,35.094623,35.094697,35.094707,35.094733,35.094765,35.094796,35.094793,35.094809,35.094812,35.09465,35.094511,35.094526,35.095859,35.096252,35.096643,35.097435,35.098142,35.100778,35.101713]}]],[[{"lng":[-106.532712,-106.531947,-106.53105,-106.530222,-106.529219,-106.528216,-106.527211,-106.52642,-106.524655,-106.522649,-106.521463,-106.520978,-106.520012,-106.519322,-106.518465,-106.51692,-106.516587,-106.51528,-106.515195,-106.515194,-106.515137,-106.51513,-106.515041,-106.515011,-106.518055,-106.518878,-106.519055,-106.520408,-106.52122,-106.521418,-106.522053,-106.522272,-106.522876,-106.523802,-106.523948,-106.525777,-106.526499,-106.528374,-106.529883,-106.531288,-106.532563,-106.532594,-106.532604,-106.532613,-106.532614,-106.532616,-106.532639,-106.532693,-106.532712],"lat":[35.094526,35.094511,35.09465,35.094812,35.094809,35.094793,35.094796,35.094765,35.094733,35.094707,35.094697,35.094623,35.094383,35.094033,35.093662,35.093461,35.093576,35.093581,35.09219,35.092045,35.090407,35.090084,35.088296,35.086776,35.086834,35.086875,35.086883,35.086923,35.08693,35.086938,35.086937,35.086945,35.086978,35.086992,35.087026,35.087056,35.087064,35.0871,35.087133,35.087189,35.087255,35.087464,35.089026,35.090934,35.091123,35.09173,35.092382,35.093162,35.094526]}]],[[{"lng":[-106.51528,-106.513934,-106.512953,-106.511773,-106.510709,-106.509842,-106.508548,-106.507483,-106.506336,-106.50574,-106.504237,-106.503444,-106.502014,-106.501481,-106.501231,-106.501132,-106.500929,-106.5007,-106.500222,-106.499773,-106.49947,-106.498806,-106.497801,-106.497591,-106.497646,-106.497652,-106.497653,-106.497132,-106.497091,-106.497112,-106.497333,-106.49833,-106.499304,-106.500085,-106.501771,-106.504187,-106.505134,-106.506196,-106.507071,-106.508695,-106.509726,-106.51084,-106.511788,-106.512631,-106.513997,-106.515011,-106.515041,-106.51513,-106.515137,-106.515194,-106.515195,-106.51528],"lat":[35.093581,35.093611,35.093613,35.093641,35.093618,35.093646,35.0937,35.093676,35.093748,35.093706,35.093709,35.093728,35.093714,35.093758,35.093853,35.093911,35.094034,35.094291,35.095099,35.094979,35.094869,35.094827,35.094793,35.094786,35.094085,35.093836,35.093052,35.087909,35.086874,35.086265,35.086271,35.086299,35.086334,35.086341,35.086389,35.086443,35.086484,35.086516,35.08654,35.086605,35.086611,35.08666,35.086692,35.086716,35.086766,35.086776,35.088296,35.090084,35.090407,35.092045,35.09219,35.093581]}]],[[{"lng":[-106.5865,-106.586482,-106.582474,-106.581272,-106.580767,-106.577652,-106.575731,-106.574018,-106.572614,-106.570688,-106.568664,-106.568713,-106.568717,-106.568732,-106.56873,-106.568739,-106.568768,-106.568768,-106.570575,-106.570726,-106.57099,-106.571261,-106.571551,-106.57196,-106.57235,-106.572813,-106.57307,-106.573275,-106.574258,-106.575175,-106.576131,-106.577266,-106.578406,-106.57927,-106.58018,-106.580477,-106.58078,-106.581168,-106.581984,-106.582166,-106.582249,-106.582423,-106.582778,-106.583095,-106.583419,-106.583756,-106.58643,-106.58648,-106.58647,-106.586462,-106.586459,-106.586497,-106.586464,-106.586494,-106.5865],"lat":[35.12904,35.13093,35.13093,35.130911,35.130904,35.130857,35.130845,35.130819,35.130801,35.130773,35.130763,35.129055,35.12891,35.127021,35.126736,35.126196,35.125389,35.123542,35.123619,35.123597,35.123634,35.123687,35.123751,35.123908,35.124128,35.124328,35.124425,35.124451,35.124638,35.124782,35.124947,35.125069,35.12512,35.125171,35.125196,35.125195,35.125113,35.124971,35.124633,35.124496,35.124364,35.124087,35.123694,35.123487,35.123378,35.123311,35.123293,35.124204,35.124906,35.125338,35.125508,35.126121,35.126601,35.127453,35.12904]}]],[[{"lng":[-106.604134,-106.604127,-106.604117,-106.604087,-106.604084,-106.604067,-106.603286,-106.60245,-106.601618,-106.600777,-106.599674,-106.598833,-106.598005,-106.597164,-106.596329,-106.595298,-106.594295,-106.593196,-106.591859,-106.591107,-106.590271,-106.589435,-106.589048,-106.5886,-106.587764,-106.586482,-106.5865,-106.586494,-106.586464,-106.586497,-106.586459,-106.586462,-106.58647,-106.58648,-106.58643,-106.587541,-106.588355,-106.58959,-106.5909,-106.591666,-106.592742,-106.594623,-106.595292,-106.595765,-106.596363,-106.598119,-106.59968,-106.600653,-106.601625,-106.602886,-106.603439,-106.604118,-106.604113,-106.604129,-106.604133,-106.604134],"lat":[35.127411,35.127809,35.128386,35.129745,35.129882,35.130951,35.130892,35.130893,35.130887,35.1309,35.130935,35.130905,35.130897,35.130899,35.130928,35.130926,35.130949,35.130943,35.130946,35.130949,35.130937,35.130955,35.130957,35.13096,35.130947,35.13093,35.12904,35.127453,35.126601,35.126121,35.125508,35.125338,35.124906,35.124204,35.123293,35.123295,35.123271,35.123278,35.123305,35.123305,35.123299,35.123291,35.123305,35.123304,35.123304,35.123288,35.123293,35.123311,35.123298,35.123316,35.123563,35.123717,35.124338,35.126203,35.127102,35.127411]}]],[[{"lng":[-106.604119,-106.604098,-106.604102,-106.604098,-106.604101,-106.604116,-106.604105,-106.604118,-106.603439,-106.602886,-106.601625,-106.600653,-106.59968,-106.598119,-106.596363,-106.595765,-106.595292,-106.594623,-106.592742,-106.591666,-106.5909,-106.58959,-106.588355,-106.587541,-106.58643,-106.586446,-106.586444,-106.58644,-106.586413,-106.586437,-106.586415,-106.586418,-106.586412,-106.58744,-106.587645,-106.588502,-106.589465,-106.589577,-106.590342,-106.590586,-106.591125,-106.59167,-106.592697,-106.593763,-106.594279,-106.594806,-106.595796,-106.595922,-106.596753,-106.59699,-106.597742,-106.598074,-106.598731,-106.59914,-106.599694,-106.60065,-106.601481,-106.602167,-106.602996,-106.604123,-106.604119],"lat":[35.116758,35.119166,35.120113,35.120819,35.121617,35.122006,35.1226,35.123717,35.123563,35.123316,35.123298,35.123311,35.123293,35.123288,35.123304,35.123304,35.123305,35.123291,35.123299,35.123305,35.123305,35.123278,35.123271,35.123295,35.123293,35.122559,35.121901,35.121767,35.120836,35.120183,35.119852,35.117204,35.11649,35.116477,35.116498,35.11649,35.116482,35.116481,35.11649,35.11649,35.116501,35.116496,35.116489,35.116514,35.116522,35.116511,35.116508,35.116508,35.116526,35.116504,35.116523,35.116514,35.116537,35.11653,35.116539,35.116537,35.116534,35.116511,35.11653,35.11652,35.116758]}]],[[{"lng":[-106.586446,-106.58643,-106.583756,-106.583419,-106.583095,-106.582778,-106.582423,-106.582249,-106.582166,-106.581984,-106.581168,-106.58078,-106.580477,-106.58018,-106.57927,-106.578406,-106.577266,-106.576131,-106.575175,-106.574258,-106.573275,-106.57307,-106.572813,-106.57235,-106.57196,-106.571551,-106.571261,-106.57099,-106.570726,-106.570575,-106.568768,-106.568794,-106.568821,-106.568824,-106.56881,-106.568831,-106.568843,-106.56885,-106.568833,-106.56887,-106.568909,-106.569864,-106.570633,-106.571505,-106.572359,-106.573235,-106.5741,-106.574972,-106.57583,-106.576715,-106.57764,-106.578531,-106.579403,-106.580262,-106.581133,-106.582015,-106.58285,-106.583727,-106.584604,-106.585409,-106.586412,-106.586418,-106.586415,-106.586437,-106.586413,-106.58644,-106.586444,-106.586446],"lat":[35.122559,35.123293,35.123311,35.123378,35.123487,35.123694,35.124087,35.124364,35.124496,35.124633,35.124971,35.125113,35.125195,35.125196,35.125171,35.12512,35.125069,35.124947,35.124782,35.124638,35.124451,35.124425,35.124328,35.124128,35.123908,35.123751,35.123687,35.123634,35.123597,35.123619,35.123542,35.121749,35.121188,35.121122,35.120622,35.119436,35.119244,35.119122,35.118293,35.117312,35.116424,35.116427,35.11643,35.116433,35.116415,35.116423,35.116416,35.116403,35.116406,35.116398,35.116412,35.116387,35.116391,35.116399,35.116408,35.116417,35.116408,35.116406,35.11643,35.116444,35.11649,35.117204,35.119852,35.120183,35.120836,35.121767,35.121901,35.122559]}]],[[{"lng":[-106.587836,-106.587833,-106.587817,-106.587632,-106.58717,-106.58649,-106.58634,-106.586316,-106.586344,-106.586352,-106.586412,-106.585409,-106.584604,-106.583727,-106.58285,-106.582015,-106.581133,-106.580262,-106.579403,-106.578531,-106.57764,-106.576715,-106.57583,-106.574972,-106.5741,-106.573235,-106.572359,-106.571505,-106.570633,-106.569864,-106.568909,-106.568883,-106.568864,-106.568857,-106.568849,-106.568848,-106.568836,-106.568835,-106.568836,-106.568826,-106.568844,-106.568799,-106.568791,-106.568761,-106.57007,-106.570732,-106.571652,-106.572881,-106.573839,-106.5746,-106.575024,-106.575391,-106.575717,-106.576367,-106.57677,-106.576932,-106.577165,-106.577581,-106.577573,-106.578643,-106.579787,-106.580308,-106.581314,-106.582772,-106.583303,-106.583583,-106.584171,-106.584958,-106.585353,-106.585857,-106.586355,-106.586948,-106.587258,-106.587306,-106.587362,-106.587469,-106.587538,-106.587606,-106.587705,-106.587785,-106.587823,-106.587839,-106.587836],"lat":[35.105489,35.10555,35.10561,35.106325,35.106986,35.107891,35.109171,35.110996,35.112822,35.114659,35.11649,35.116444,35.11643,35.116406,35.116408,35.116417,35.116408,35.116399,35.116391,35.116387,35.116412,35.116398,35.116406,35.116403,35.116416,35.116423,35.116415,35.116433,35.11643,35.116427,35.116424,35.11461,35.112815,35.11101,35.109127,35.107898,35.107122,35.106703,35.105459,35.104592,35.103781,35.102832,35.102648,35.101869,35.101873,35.101854,35.101851,35.101877,35.101875,35.101913,35.102016,35.102247,35.102651,35.103258,35.103494,35.103557,35.103638,35.103683,35.101215,35.10163,35.102079,35.102283,35.102703,35.103273,35.103447,35.103521,35.103675,35.1038,35.103845,35.103882,35.103904,35.103925,35.103931,35.103932,35.103933,35.103935,35.104057,35.104187,35.104619,35.104907,35.105163,35.105426,35.105489]}]],[[{"lng":[-106.604212,-106.604185,-106.604179,-106.60418,-106.604181,-106.604183,-106.604183,-106.604188,-106.604152,-106.604189,-106.604182,-106.60417,-106.604132,-106.604123,-106.602996,-106.602167,-106.601481,-106.60065,-106.599694,-106.59914,-106.598731,-106.598074,-106.597742,-106.59699,-106.596753,-106.595922,-106.595796,-106.594806,-106.594279,-106.593763,-106.592697,-106.59167,-106.591125,-106.590586,-106.590342,-106.589577,-106.589465,-106.588502,-106.587645,-106.58744,-106.586412,-106.586352,-106.586344,-106.586316,-106.58634,-106.58649,-106.58717,-106.587632,-106.587817,-106.587833,-106.587836,-106.587839,-106.587823,-106.587785,-106.587705,-106.587606,-106.587538,-106.587469,-106.587536,-106.587662,-106.590875,-106.591225,-106.59149,-106.592058,-106.592861,-106.595489,-106.597402,-106.598132,-106.598992,-106.599424,-106.600262,-106.601179,-106.601871,-106.602534,-106.60303,-106.604197,-106.604212],"lat":[35.105651,35.10615,35.106265,35.106323,35.106364,35.106479,35.106655,35.107466,35.109257,35.111084,35.112935,35.11474,35.116141,35.11652,35.11653,35.116511,35.116534,35.116537,35.116539,35.11653,35.116537,35.116514,35.116523,35.116504,35.116526,35.116508,35.116508,35.116511,35.116522,35.116514,35.116489,35.116496,35.116501,35.11649,35.11649,35.116481,35.116482,35.11649,35.116498,35.116477,35.11649,35.114659,35.112822,35.110996,35.109171,35.107891,35.106986,35.106325,35.10561,35.10555,35.105489,35.105426,35.105163,35.104907,35.104619,35.104187,35.104057,35.103935,35.103937,35.103945,35.104026,35.104039,35.104048,35.104069,35.104084,35.104133,35.104174,35.104189,35.104233,35.104269,35.10436,35.104509,35.104635,35.104784,35.104901,35.105162,35.105651]}]],[[{"lng":[-106.634312,-106.633537,-106.633399,-106.633188,-106.632839,-106.632353,-106.632314,-106.631973,-106.631937,-106.631537,-106.631084,-106.630832,-106.630659,-106.630268,-106.630059,-106.629732,-106.629151,-106.628475,-106.628024,-106.627782,-106.627585,-106.627389,-106.627787,-106.627365,-106.6273,-106.623818,-106.622486,-106.621224,-106.620577,-106.619733,-106.619705,-106.618552,-106.617722,-106.616881,-106.616083,-106.614945,-106.613821,-106.61365,-106.613097,-106.61297,-106.612907,-106.612858,-106.611443,-106.609641,-106.609068,-106.608266,-106.604197,-106.604197,-106.604193,-106.604196,-106.604206,-106.60423,-106.604215,-106.604225,-106.604229,-106.604214,-106.604231,-106.604363,-106.604279,-106.604237,-106.604248,-106.604235,-106.604235,-106.604244,-106.60423,-106.604227,-106.604202,-106.604215,-106.604198,-106.604212,-106.604248,-106.605493,-106.606581,-106.607629,-106.608234,-106.608721,-106.609852,-106.610917,-106.612022,-106.613153,-106.614281,-106.614301,-106.614299,-106.614268,-106.614247,-106.614219,-106.614858,-106.615341,-106.615544,-106.616462,-106.616757,-106.616981,-106.61755,-106.617548,-106.617552,-106.617564,-106.617521,-106.617534,-106.617507,-106.619797,-106.621295,-106.62188,-106.621818,-106.621889,-106.622284,-106.623036,-106.623622,-106.623883,-106.624144,-106.624645,-106.625082,-106.625221,-106.625294,-106.625372,-106.625551,-106.625801,-106.626378,-106.62737,-106.627125,-106.627024,-106.626928,-106.626763,-106.626649,-106.626606,-106.626651,-106.626567,-106.62655,-106.62651,-106.626355,-106.626171,-106.625825,-106.625661,-106.625503,-106.625376,-106.625369,-106.625308,-106.625259,-106.626338,-106.626921,-106.627482,-106.628554,-106.628712,-106.629375,-106.630043,-106.630709,-106.63142,-106.632181,-106.633061,-106.633446,-106.633727,-106.634096,-106.634312],"lat":[35.091391,35.093533,35.093899,35.094523,35.09551,35.096888,35.096964,35.097785,35.097886,35.098889,35.10006,35.100507,35.100826,35.10142,35.101709,35.102062,35.102697,35.103617,35.104378,35.104952,35.105352,35.105805,35.106088,35.106154,35.106164,35.106717,35.106946,35.107182,35.107296,35.107434,35.107438,35.107581,35.10764,35.107664,35.107654,35.107568,35.107354,35.107315,35.107187,35.107158,35.107143,35.107132,35.106806,35.106392,35.10626,35.106079,35.105162,35.104962,35.104442,35.103905,35.102013,35.10013,35.099123,35.098985,35.097575,35.096544,35.09499,35.094798,35.094645,35.094507,35.094376,35.094239,35.094101,35.093827,35.093001,35.092185,35.091368,35.089528,35.087929,35.087805,35.087492,35.087522,35.087509,35.087483,35.087514,35.087502,35.087498,35.087495,35.087481,35.0875,35.087497,35.08834,35.088399,35.08921,35.089775,35.091079,35.091077,35.091076,35.091074,35.091067,35.091065,35.091063,35.091058,35.092085,35.092858,35.094673,35.096321,35.097145,35.098318,35.098357,35.098519,35.098546,35.099859,35.101987,35.101969,35.101949,35.101757,35.101687,35.101566,35.101219,35.100892,35.100772,35.10071,35.10064,35.100478,35.100237,35.099758,35.099001,35.098277,35.098045,35.097824,35.097364,35.096891,35.096412,35.095933,35.095458,35.095316,35.094979,35.094517,35.09406,35.093142,35.09268,35.092217,35.091748,35.091666,35.09127,35.09031,35.090847,35.091094,35.091385,35.091772,35.091826,35.091905,35.091931,35.091976,35.092002,35.092028,35.091874,35.091766,35.091668,35.091493,35.091391]}]],[[{"lng":[-106.604231,-106.604214,-106.604229,-106.604225,-106.604215,-106.60423,-106.604206,-106.604196,-106.604193,-106.604197,-106.604197,-106.60303,-106.602534,-106.601871,-106.601179,-106.600262,-106.599424,-106.598992,-106.598132,-106.597402,-106.595489,-106.592861,-106.592058,-106.59149,-106.591225,-106.590875,-106.587662,-106.587536,-106.587469,-106.587362,-106.587306,-106.587258,-106.586948,-106.586355,-106.585857,-106.585353,-106.584958,-106.584171,-106.583583,-106.583303,-106.582772,-106.581314,-106.580308,-106.579787,-106.578643,-106.577573,-106.57757,-106.577568,-106.577555,-106.577532,-106.577551,-106.577545,-106.577541,-106.577538,-106.57752,-106.577479,-106.577568,-106.57872,-106.578987,-106.579796,-106.57996,-106.580948,-106.581398,-106.581938,-106.583033,-106.583426,-106.584114,-106.584913,-106.585232,-106.586305,-106.587526,-106.587947,-106.588611,-106.589688,-106.590793,-106.591883,-106.592994,-106.594097,-106.595261,-106.596496,-106.597482,-106.597699,-106.598619,-106.598802,-106.59969,-106.601352,-106.603363,-106.604363,-106.604231],"lat":[35.09499,35.096544,35.097575,35.098985,35.099123,35.10013,35.102013,35.103905,35.104442,35.104962,35.105162,35.104901,35.104784,35.104635,35.104509,35.10436,35.104269,35.104233,35.104189,35.104174,35.104133,35.104084,35.104069,35.104048,35.104039,35.104026,35.103945,35.103937,35.103935,35.103933,35.103932,35.103931,35.103925,35.103904,35.103882,35.103845,35.1038,35.103675,35.103521,35.103447,35.103273,35.102703,35.102283,35.102079,35.10163,35.101215,35.101017,35.100884,35.100079,35.099628,35.098916,35.098074,35.097262,35.096438,35.095639,35.094729,35.094727,35.094695,35.094725,35.094692,35.094704,35.094689,35.094692,35.094697,35.094694,35.094681,35.094666,35.094664,35.094676,35.094663,35.094669,35.094686,35.094703,35.094706,35.094729,35.094721,35.094723,35.094698,35.094728,35.094735,35.094721,35.094721,35.094713,35.094712,35.094807,35.094834,35.094839,35.094798,35.09499]}]],[[{"lng":[-106.604363,-106.603363,-106.601352,-106.59969,-106.598802,-106.598619,-106.597699,-106.597482,-106.596496,-106.595261,-106.594097,-106.592994,-106.591883,-106.590793,-106.589688,-106.588611,-106.587947,-106.587526,-106.586305,-106.585232,-106.584913,-106.584114,-106.583426,-106.583033,-106.581938,-106.581398,-106.580948,-106.57996,-106.579796,-106.578987,-106.57872,-106.577568,-106.577572,-106.577569,-106.577542,-106.577539,-106.577538,-106.577534,-106.577505,-106.577504,-106.577483,-106.57748,-106.578319,-106.579195,-106.579633,-106.580079,-106.580902,-106.581805,-106.582693,-106.583307,-106.584417,-106.584773,-106.58529,-106.585801,-106.586185,-106.587481,-106.588554,-106.589708,-106.590804,-106.591936,-106.593038,-106.594126,-106.595316,-106.597766,-106.599041,-106.599856,-106.600973,-106.602083,-106.603181,-106.604248,-106.604212,-106.604198,-106.604215,-106.604202,-106.604227,-106.60423,-106.604244,-106.604235,-106.604235,-106.604248,-106.604237,-106.604279,-106.604363],"lat":[35.094798,35.094839,35.094834,35.094807,35.094712,35.094713,35.094721,35.094721,35.094735,35.094728,35.094698,35.094723,35.094721,35.094729,35.094706,35.094703,35.094686,35.094669,35.094663,35.094676,35.094664,35.094666,35.094681,35.094694,35.094697,35.094692,35.094689,35.094704,35.094692,35.094725,35.094695,35.094727,35.093562,35.092916,35.091847,35.091109,35.090871,35.089986,35.089317,35.089096,35.088221,35.087355,35.087334,35.087332,35.087349,35.087329,35.087334,35.087374,35.087372,35.087394,35.087397,35.087396,35.087401,35.087406,35.087416,35.087401,35.08741,35.087437,35.087428,35.087425,35.087416,35.087431,35.087424,35.087445,35.087474,35.087461,35.087463,35.08748,35.087476,35.087492,35.087805,35.087929,35.089528,35.091368,35.092185,35.093001,35.093827,35.094101,35.094239,35.094376,35.094507,35.094645,35.094798]}]],[[{"lng":[-106.586244,-106.586197,-106.586191,-106.586203,-106.586185,-106.586189,-106.586193,-106.586198,-106.5862,-106.586202,-106.586185,-106.585801,-106.58529,-106.584773,-106.584417,-106.583307,-106.582693,-106.581805,-106.580902,-106.580079,-106.579633,-106.579195,-106.578319,-106.57748,-106.577459,-106.57744,-106.57745,-106.577461,-106.57746,-106.577456,-106.577453,-106.577467,-106.577464,-106.577445,-106.577444,-106.577441,-106.577459,-106.57748,-106.578241,-106.57858,-106.579145,-106.579336,-106.579713,-106.57994,-106.580198,-106.580787,-106.580859,-106.580937,-106.581829,-106.582668,-106.583014,-106.583579,-106.58413,-106.585234,-106.586218,-106.586237,-106.586236,-106.586238,-106.586242,-106.586244],"lat":[35.077085,35.077709,35.07779,35.080724,35.081784,35.08269,35.083676,35.084995,35.085537,35.085982,35.087416,35.087406,35.087401,35.087396,35.087397,35.087394,35.087372,35.087374,35.087334,35.087329,35.087349,35.087332,35.087334,35.087355,35.085981,35.084994,35.083706,35.08272,35.080729,35.079644,35.078849,35.078738,35.077894,35.076797,35.076745,35.075755,35.074757,35.072756,35.072772,35.072772,35.072773,35.072773,35.072774,35.072774,35.072774,35.072775,35.072775,35.072775,35.072791,35.072838,35.072834,35.072834,35.072834,35.072886,35.072941,35.074276,35.074993,35.075706,35.076476,35.077085]}]],[[{"lng":[-106.604532,-106.60454,-106.604552,-106.60455,-106.604522,-106.60452,-106.604522,-106.60429,-106.604285,-106.604277,-106.604285,-106.604261,-106.604248,-106.603181,-106.602083,-106.600973,-106.599856,-106.599041,-106.597766,-106.595316,-106.594126,-106.593038,-106.591936,-106.590804,-106.589708,-106.588554,-106.587481,-106.586185,-106.586202,-106.5862,-106.586198,-106.586193,-106.586189,-106.586185,-106.586203,-106.586191,-106.586197,-106.586244,-106.586242,-106.586238,-106.586236,-106.586237,-106.586218,-106.587029,-106.587873,-106.589342,-106.590382,-106.591358,-106.592341,-106.592988,-106.593321,-106.593337,-106.594333,-106.594754,-106.595195,-106.595355,-106.595904,-106.596234,-106.596893,-106.597144,-106.59796,-106.59897,-106.59998,-106.599983,-106.601108,-106.602234,-106.603418,-106.604559,-106.604532],"lat":[35.075435,35.077252,35.078462,35.079053,35.079711,35.079778,35.08032,35.080277,35.080806,35.08198,35.083793,35.085616,35.087492,35.087476,35.08748,35.087463,35.087461,35.087474,35.087445,35.087424,35.087431,35.087416,35.087425,35.087428,35.087437,35.08741,35.087401,35.087416,35.085982,35.085537,35.084995,35.083676,35.08269,35.081784,35.080724,35.07779,35.077709,35.077085,35.076476,35.075706,35.074993,35.074276,35.072941,35.072936,35.072934,35.07293,35.072927,35.072922,35.072976,35.073331,35.073708,35.072899,35.072896,35.072895,35.072911,35.072962,35.07296,35.072959,35.072942,35.072962,35.072955,35.072953,35.07295,35.073599,35.073616,35.073612,35.073617,35.073631,35.075435]}]],[[{"lng":[-106.577573,-106.575025,-106.573476,-106.569178,-106.568924,-106.568716,-106.568554,-106.56728,-106.565421,-106.563966,-106.563849,-106.559553,-106.55798,-106.556458,-106.555539,-106.550726,-106.550673,-106.546616,-106.545338,-106.545058,-106.544701,-106.543501,-106.543069,-106.54333,-106.543456,-106.544561,-106.545412,-106.545705,-106.546238,-106.546844,-106.547424,-106.548237,-106.548737,-106.549296,-106.550203,-106.550592,-106.551908,-106.552495,-106.55322,-106.554415,-106.554699,-106.555635,-106.556822,-106.55812,-106.559473,-106.559886,-106.560117,-106.560921,-106.561205,-106.561963,-106.562519,-106.566373,-106.567601,-106.568634,-106.5698,-106.570854,-106.571954,-106.573053,-106.574085,-106.57517,-106.576224,-106.57748,-106.577483,-106.577504,-106.577505,-106.577534,-106.577538,-106.577539,-106.577542,-106.577569,-106.577572,-106.577568,-106.577479,-106.57752,-106.577538,-106.577541,-106.577545,-106.577551,-106.577532,-106.577555,-106.577568,-106.57757,-106.577573],"lat":[35.101215,35.100184,35.099557,35.097836,35.097734,35.097651,35.097573,35.09705,35.096286,35.095694,35.095646,35.093897,35.093247,35.092638,35.092289,35.09034,35.090201,35.088735,35.088241,35.088133,35.087995,35.087543,35.087381,35.087301,35.087263,35.086951,35.086823,35.086817,35.086826,35.08689,35.087015,35.087226,35.087329,35.087366,35.087372,35.087348,35.087352,35.087346,35.087344,35.087338,35.087332,35.08733,35.087327,35.087304,35.087266,35.087268,35.087281,35.087265,35.087264,35.087263,35.087261,35.087253,35.087253,35.08725,35.087265,35.087281,35.087296,35.08733,35.087291,35.087306,35.087358,35.087355,35.088221,35.089096,35.089317,35.089986,35.090871,35.091109,35.091847,35.092916,35.093562,35.094727,35.094729,35.095639,35.096438,35.097262,35.098074,35.098916,35.099628,35.100079,35.100884,35.101017,35.101215]}]],[[{"lng":[-106.563329,-106.563316,-106.563315,-106.563107,-106.561978,-106.561498,-106.560875,-106.560397,-106.560133,-106.560113,-106.559894,-106.559896,-106.559857,-106.559796,-106.560175,-106.560136,-106.560141,-106.560089,-106.559995,-106.559895,-106.559861,-106.559863,-106.559885,-106.559843,-106.559886,-106.559473,-106.55812,-106.556822,-106.555635,-106.554699,-106.554415,-106.55322,-106.552495,-106.551908,-106.550592,-106.55052,-106.550455,-106.550435,-106.550391,-106.550364,-106.55036,-106.550367,-106.550451,-106.550441,-106.550441,-106.550462,-106.551574,-106.552584,-106.552686,-106.55373,-106.554876,-106.555984,-106.557107,-106.558226,-106.559308,-106.560009,-106.560413,-106.561073,-106.561515,-106.562135,-106.563344,-106.563329],"lat":[35.074506,35.075233,35.075322,35.07531,35.075161,35.075099,35.075031,35.075003,35.074973,35.075968,35.075968,35.07636,35.078151,35.080078,35.080102,35.081886,35.083179,35.083384,35.083617,35.083941,35.08423,35.08486,35.08543,35.08611,35.087268,35.087266,35.087304,35.087327,35.08733,35.087332,35.087338,35.087344,35.087346,35.087352,35.087348,35.086173,35.084752,35.084305,35.083674,35.081751,35.079921,35.078172,35.076349,35.07387,35.073722,35.072759,35.072756,35.072753,35.072753,35.072786,35.07279,35.07279,35.072787,35.072791,35.072799,35.072773,35.07277,35.072765,35.072764,35.072749,35.072747,35.074506]}]],[[{"lng":[-106.57748,-106.576224,-106.57517,-106.574085,-106.573053,-106.571954,-106.570854,-106.5698,-106.568634,-106.567601,-106.566373,-106.562519,-106.561963,-106.561205,-106.560921,-106.560117,-106.559886,-106.559843,-106.559885,-106.559863,-106.559861,-106.559895,-106.559995,-106.560089,-106.560141,-106.560136,-106.560175,-106.559796,-106.559857,-106.559896,-106.559894,-106.560113,-106.560133,-106.560397,-106.560875,-106.561498,-106.561978,-106.563107,-106.563315,-106.563316,-106.563329,-106.563344,-106.564266,-106.565338,-106.566415,-106.567499,-106.568646,-106.569705,-106.570808,-106.571875,-106.572509,-106.573041,-106.574105,-106.575187,-106.576304,-106.57748,-106.577459,-106.577441,-106.577444,-106.577445,-106.577464,-106.577467,-106.577453,-106.577456,-106.57746,-106.577461,-106.57745,-106.57744,-106.577459,-106.57748],"lat":[35.087355,35.087358,35.087306,35.087291,35.08733,35.087296,35.087281,35.087265,35.08725,35.087253,35.087253,35.087261,35.087263,35.087264,35.087265,35.087281,35.087268,35.08611,35.08543,35.08486,35.08423,35.083941,35.083617,35.083384,35.083179,35.081886,35.080102,35.080078,35.078151,35.07636,35.075968,35.075968,35.074973,35.075003,35.075031,35.075099,35.075161,35.07531,35.075322,35.075233,35.074506,35.072747,35.072735,35.072732,35.072707,35.072705,35.072676,35.072668,35.072678,35.072686,35.072703,35.072708,35.072723,35.072735,35.07275,35.072756,35.074757,35.075755,35.076745,35.076797,35.077894,35.078738,35.078849,35.079644,35.080729,35.08272,35.083706,35.084994,35.085981,35.087355]}]],[[{"lng":[-106.543069,-106.542132,-106.541606,-106.540973,-106.540299,-106.539883,-106.539034,-106.537952,-106.537068,-106.536435,-106.535767,-106.534798,-106.532563,-106.531288,-106.529883,-106.528374,-106.526499,-106.525777,-106.523948,-106.523802,-106.522876,-106.522272,-106.522053,-106.521418,-106.52122,-106.520408,-106.519055,-106.518878,-106.518055,-106.515011,-106.513997,-106.512631,-106.511788,-106.51084,-106.509726,-106.508695,-106.507071,-106.506196,-106.506182,-106.506225,-106.506226,-106.506243,-106.506241,-106.506231,-106.506215,-106.506229,-106.506229,-106.506226,-106.506234,-106.506253,-106.506313,-106.506439,-106.506784,-106.509674,-106.510773,-106.515141,-106.516695,-106.519514,-106.523781,-106.523957,-106.524355,-106.528361,-106.532416,-106.535826,-106.537111,-106.538046,-106.540825,-106.542645,-106.543069],"lat":[35.087381,35.087653,35.087764,35.087828,35.087826,35.08777,35.08758,35.087315,35.087317,35.087325,35.087321,35.08729,35.087255,35.087189,35.087133,35.0871,35.087064,35.087056,35.087026,35.086992,35.086978,35.086945,35.086937,35.086938,35.08693,35.086923,35.086883,35.086875,35.086834,35.086776,35.086766,35.086716,35.086692,35.08666,35.086611,35.086605,35.08654,35.086516,35.08525,35.082899,35.082554,35.081424,35.08068,35.080143,35.079285,35.077086,35.076881,35.07605,35.075323,35.074613,35.073973,35.073286,35.073418,35.074524,35.074947,35.076628,35.07723,35.078312,35.079941,35.080009,35.080161,35.081753,35.083294,35.0846,35.085109,35.085446,35.086521,35.087214,35.087381]}]],[[{"lng":[-106.550592,-106.550203,-106.549296,-106.548737,-106.548237,-106.547424,-106.546844,-106.546238,-106.545705,-106.545412,-106.544561,-106.543456,-106.54333,-106.543069,-106.542645,-106.540825,-106.538046,-106.537111,-106.535826,-106.532416,-106.532407,-106.532404,-106.532391,-106.532374,-106.532365,-106.532331,-106.532337,-106.532319,-106.532309,-106.532364,-106.532362,-106.532376,-106.532373,-106.532419,-106.532481,-106.532492,-106.532489,-106.532489,-106.532519,-106.532518,-106.53254,-106.534827,-106.535471,-106.536318,-106.536836,-106.538492,-106.539501,-106.541472,-106.550171,-106.550251,-106.550318,-106.550458,-106.550461,-106.55045,-106.550463,-106.550462,-106.550441,-106.550441,-106.550451,-106.550367,-106.55036,-106.550364,-106.550391,-106.550435,-106.550455,-106.55052,-106.550592],"lat":[35.087348,35.087372,35.087366,35.087329,35.087226,35.087015,35.08689,35.086826,35.086817,35.086823,35.086951,35.087263,35.087301,35.087381,35.087214,35.086521,35.085446,35.085109,35.0846,35.083294,35.08308,35.083005,35.082427,35.082085,35.08164,35.080062,35.079792,35.076408,35.075111,35.074564,35.074116,35.073562,35.072469,35.071929,35.071323,35.070802,35.069923,35.069057,35.068346,35.068174,35.067341,35.067386,35.067369,35.067388,35.067386,35.067409,35.067407,35.067402,35.067249,35.067248,35.067247,35.067244,35.067783,35.069069,35.070909,35.072759,35.073722,35.07387,35.076349,35.078172,35.079921,35.081751,35.083674,35.084305,35.084752,35.086173,35.087348]}]],[[{"lng":[-106.532518,-106.532519,-106.532489,-106.532489,-106.532492,-106.532481,-106.532419,-106.532373,-106.532376,-106.532362,-106.532364,-106.532309,-106.532319,-106.532337,-106.532331,-106.532365,-106.532374,-106.532391,-106.532404,-106.532407,-106.532416,-106.528361,-106.524355,-106.523957,-106.523781,-106.519514,-106.516695,-106.515141,-106.510773,-106.509674,-106.506784,-106.506439,-106.501239,-106.500963,-106.499661,-106.496957,-106.49685,-106.496706,-106.495561,-106.493705,-106.493907,-106.494555,-106.494821,-106.495009,-106.495742,-106.495974,-106.496446,-106.497309,-106.497496,-106.497594,-106.497697,-106.500164,-106.503404,-106.508426,-106.509621,-106.509977,-106.512399,-106.515181,-106.515211,-106.515218,-106.515239,-106.515558,-106.515835,-106.516222,-106.516572,-106.516662,-106.517278,-106.517877,-106.518435,-106.518914,-106.519353,-106.519884,-106.52031,-106.521214,-106.522052,-106.522451,-106.522757,-106.524854,-106.528871,-106.531171,-106.531737,-106.53254,-106.532518],"lat":[35.068174,35.068346,35.069057,35.069923,35.070802,35.071323,35.071929,35.072469,35.073562,35.074116,35.074564,35.075111,35.076408,35.079792,35.080062,35.08164,35.082085,35.082427,35.083005,35.08308,35.083294,35.081753,35.080161,35.080009,35.079941,35.078312,35.07723,35.076628,35.074947,35.074524,35.073418,35.073286,35.071296,35.07119,35.070665,35.069634,35.069594,35.069538,35.069095,35.068377,35.068309,35.068088,35.067915,35.067711,35.067914,35.067979,35.068064,35.068163,35.068192,35.068207,35.068218,35.068481,35.068827,35.069371,35.069461,35.069519,35.069787,35.070081,35.069056,35.068677,35.067703,35.067664,35.067574,35.067354,35.067254,35.067195,35.066803,35.06659,35.066471,35.066444,35.066457,35.066511,35.066618,35.06687,35.067096,35.067189,35.06725,35.067246,35.067254,35.067259,35.067311,35.067341,35.068174]}]],[[{"lng":[-106.529209,-106.528958,-106.528627,-106.528033,-106.527159,-106.527041,-106.526827,-106.526709,-106.526578,-106.525728,-106.525445,-106.524747,-106.524302,-106.524029,-106.523726,-106.523335,-106.522798,-106.522193,-106.522115,-106.521851,-106.520835,-106.520562,-106.520503,-106.520274,-106.520362,-106.520293,-106.519825,-106.519711,-106.519449,-106.518985,-106.518824,-106.518543,-106.518316,-106.517725,-106.51729,-106.51689,-106.516453,-106.515949,-106.515347,-106.515209,-106.513601,-106.51249,-106.510829,-106.510786,-106.510472,-106.509721,-106.508739,-106.508558,-106.507836,-106.507544,-106.506889,-106.506319,-106.505673,-106.504785,-106.504268,-106.503853,-106.503588,-106.503086,-106.502387,-106.501656,-106.50086,-106.500585,-106.500443,-106.500415,-106.500393,-106.500024,-106.499892,-106.499508,-106.499308,-106.499021,-106.498736,-106.498345,-106.497982,-106.497799,-106.497635,-106.497471,-106.497362,-106.496875,-106.496622,-106.496554,-106.496437,-106.496197,-106.495934,-106.495707,-106.495437,-106.495123,-106.495138,-106.495154,-106.495429,-106.495436,-106.495454,-106.495492,-106.495488,-106.495441,-106.495382,-106.495259,-106.495091,-106.495009,-106.494821,-106.494555,-106.493907,-106.493705,-106.493121,-106.49179,-106.48905,-106.487542,-106.486682,-106.485595,-106.485649,-106.485165,-106.484958,-106.484354,-106.484253,-106.4837,-106.483144,-106.482577,-106.481773,-106.480685,-106.480158,-106.479434,-106.478759,-106.478047,-106.47763,-106.476167,-106.475432,-106.47473,-106.47407,-106.473678,-106.472006,-106.471535,-106.471113,-106.470631,-106.470247,-106.469912,-106.469573,-106.469348,-106.469132,-106.468938,-106.468814,-106.468794,-106.468497,-106.468286,-106.467987,-106.46728,-106.466858,-106.466106,-106.465599,-106.465464,-106.465214,-106.464937,-106.464279,-106.463911,-106.463433,-106.462945,-106.462347,-106.462062,-106.461794,-106.461277,-106.460969,-106.460678,-106.460397,-106.46015,-106.45992,-106.45908,-106.458827,-106.45813,-106.456626,-106.456082,-106.455084,-106.454523,-106.454492,-106.453995,-106.453905,-106.452977,-106.451871,-106.450356,-106.450247,-106.448801,-106.44778,-106.446935,-106.44637,-106.446115,-106.445743,-106.445287,-106.444874,-106.444719,-106.444731,-106.444761,-106.444775,-106.444778,-106.444762,-106.444725,-106.444688,-106.444628,-106.444599,-106.444595,-106.444541,-106.44449,-106.444429,-106.444396,-106.444368,-106.44438,-106.444384,-106.444527,-106.444551,-106.444721,-106.444887,-106.445154,-106.4453,-106.445363,-106.445722,-106.445749,-106.44577,-106.445803,-106.445841,-106.445972,-106.446065,-106.44608,-106.446143,-106.446285,-106.446399,-106.446579,-106.446639,-106.446711,-106.448499,-106.449605,-106.449872,-106.450051,-106.450051,-106.449826,-106.450076,-106.450228,-106.451479,-106.451659,-106.451748,-106.451972,-106.453268,-106.453625,-106.454949,-106.4551,-106.456129,-106.457517,-106.457608,-106.457339,-106.456824,-106.456592,-106.456695,-106.457182,-106.458424,-106.458508,-106.459118,-106.459894,-106.460925,-106.461701,-106.461879,-106.461945,-106.461972,-106.461741,-106.461354,-106.460467,-106.461182,-106.461962,-106.462495,-106.462706,-106.46253,-106.462518,-106.462455,-106.462445,-106.462671,-106.462739,-106.462739,-106.46278,-106.479965,-106.486684,-106.487143,-106.487962,-106.490177,-106.491577,-106.491854,-106.492768,-106.494428,-106.495159,-106.495534,-106.495833,-106.496444,-106.497729,-106.498662,-106.49933,-106.499998,-106.50017,-106.500482,-106.500752,-106.500883,-106.500868,-106.502027,-106.503169,-106.503881,-106.508746,-106.517418,-106.518903,-106.519763,-106.528183,-106.529035,-106.529209],"lat":[35.04293,35.043672,35.044248,35.045016,35.045566,35.045684,35.04574,35.045858,35.04587,35.04681,35.047015,35.047114,35.047118,35.047394,35.048105,35.048499,35.0488,35.048926,35.049005,35.049029,35.049408,35.049684,35.049851,35.050501,35.051464,35.051614,35.052088,35.052238,35.05259,35.053423,35.053869,35.054151,35.054382,35.054615,35.05469,35.055014,35.05536,35.055665,35.055856,35.0559,35.056253,35.0566,35.056918,35.056923,35.056958,35.057043,35.057274,35.057375,35.057778,35.057941,35.058558,35.058857,35.059188,35.059397,35.059613,35.059871,35.060285,35.061084,35.061381,35.061446,35.061538,35.061578,35.0616,35.061598,35.061603,35.061657,35.06167,35.061666,35.061711,35.061764,35.061761,35.061711,35.061554,35.061475,35.061459,35.061463,35.061458,35.061342,35.061368,35.061402,35.061318,35.061261,35.061211,35.061128,35.061014,35.06094,35.061074,35.061207,35.063566,35.063766,35.064078,35.065025,35.065126,35.065495,35.065834,35.066471,35.067305,35.067711,35.067915,35.068088,35.068309,35.068377,35.068156,35.067652,35.066599,35.065997,35.065638,35.065091,35.064998,35.064754,35.064642,35.064314,35.064257,35.063944,35.063656,35.06341,35.063117,35.062829,35.062736,35.062661,35.062621,35.062627,35.062651,35.062752,35.062812,35.062849,35.062918,35.06296,35.063062,35.063081,35.063082,35.063069,35.063048,35.063035,35.063004,35.062982,35.062961,35.062942,35.06293,35.062928,35.062895,35.062849,35.062803,35.062656,35.062558,35.062365,35.062199,35.062155,35.062062,35.06196,35.061733,35.061589,35.061419,35.061275,35.061123,35.061056,35.061003,35.060914,35.060887,35.060856,35.060834,35.06083,35.060821,35.060836,35.06085,35.060883,35.060967,35.060985,35.061058,35.061105,35.061107,35.061138,35.061142,35.061185,35.061227,35.061315,35.061322,35.061413,35.061446,35.061488,35.061532,35.061552,35.061593,35.061662,35.061739,35.06178,35.061658,35.061523,35.061249,35.060924,35.060642,35.060164,35.059921,35.059633,35.059577,35.059551,35.059411,35.05931,35.059202,35.059112,35.059,35.058918,35.058895,35.058535,35.058477,35.058062,35.05766,35.057164,35.056981,35.056902,35.05655,35.05627,35.055982,35.055797,35.055666,35.055468,35.055274,35.055239,35.055093,35.054841,35.054592,35.054268,35.054069,35.053867,35.053386,35.053021,35.0517,35.050782,35.049792,35.048837,35.046482,35.045057,35.042817,35.041496,35.040579,35.039661,35.035624,35.033862,35.030979,35.030486,35.029055,35.027623,35.026889,35.025862,35.02491,35.024241,35.023816,35.023368,35.022201,35.022122,35.021725,35.021557,35.021172,35.020725,35.020158,35.019948,35.019846,35.018843,35.017918,35.01705,35.016733,35.016621,35.016718,35.016735,35.019938,35.020161,35.021305,35.023381,35.036761,35.040613,35.040665,35.042957,35.042655,35.042737,35.042693,35.042639,35.042648,35.042648,35.042655,35.042685,35.042729,35.042749,35.042896,35.042858,35.042857,35.042852,35.042852,35.042874,35.042873,35.042881,35.042895,35.043023,35.043119,35.042743,35.042751,35.042761,35.042755,35.042788,35.042891,35.042921,35.04293,35.043019,35.043028,35.04293]}]],[[{"lng":[-106.497114,-106.497114,-106.497112,-106.495136,-106.494327,-106.493634,-106.493463,-106.492957,-106.492633,-106.492268,-106.491987,-106.49131,-106.490914,-106.490836,-106.490549,-106.490428,-106.490283,-106.490134,-106.490007,-106.489842,-106.489713,-106.489415,-106.489187,-106.48893,-106.488431,-106.488198,-106.48739,-106.487328,-106.486726,-106.486411,-106.485194,-106.485991,-106.485713,-106.485546,-106.48525,-106.484916,-106.484649,-106.484514,-106.484334,-106.484304,-106.484217,-106.484144,-106.48404,-106.483893,-106.48374,-106.483491,-106.482994,-106.482684,-106.48264,-106.482565,-106.48242,-106.482225,-106.482005,-106.481839,-106.481458,-106.481133,-106.480763,-106.48012,-106.479962,-106.479964,-106.479968,-106.47997,-106.479973,-106.479973,-106.480032,-106.480259,-106.482433,-106.485595,-106.486682,-106.487542,-106.48905,-106.49179,-106.493121,-106.493705,-106.495561,-106.496706,-106.496355,-106.496207,-106.496089,-106.495963,-106.495878,-106.495877,-106.495886,-106.495929,-106.496003,-106.496208,-106.496526,-106.496737,-106.496976,-106.49708,-106.497114,-106.497065,-106.497138,-106.497114],"lat":[35.084987,35.085452,35.086265,35.086196,35.086186,35.086177,35.086182,35.08616,35.086273,35.086445,35.086709,35.087176,35.08758,35.08778,35.087391,35.087586,35.08821,35.088529,35.08865,35.088654,35.088622,35.088493,35.088394,35.088253,35.087979,35.087856,35.088039,35.088037,35.088021,35.087827,35.087147,35.086774,35.086654,35.086582,35.086401,35.08609,35.085766,35.085571,35.085312,35.085256,35.085055,35.084792,35.084482,35.08417,35.083974,35.083912,35.083992,35.084052,35.084051,35.084107,35.08406,35.084026,35.084036,35.084065,35.084223,35.084346,35.084513,35.084839,35.084922,35.082755,35.079771,35.076809,35.073144,35.072776,35.072821,35.071649,35.070784,35.065091,35.065638,35.065997,35.066599,35.067652,35.068156,35.068377,35.069095,35.069538,35.070128,35.070389,35.070661,35.071119,35.071915,35.071937,35.07227,35.072649,35.07298,35.073592,35.074314,35.074675,35.075244,35.075642,35.076395,35.079117,35.082576,35.084987]}]],[[{"lng":[-106.506313,-106.506253,-106.506234,-106.506226,-106.506229,-106.506229,-106.506215,-106.506231,-106.506241,-106.506243,-106.506226,-106.506225,-106.506182,-106.506196,-106.505134,-106.504187,-106.501771,-106.500085,-106.499304,-106.49833,-106.497333,-106.497112,-106.497114,-106.497114,-106.497138,-106.497065,-106.497114,-106.49708,-106.496976,-106.496737,-106.496526,-106.496208,-106.496003,-106.495929,-106.495886,-106.495877,-106.495878,-106.495963,-106.496089,-106.496207,-106.496355,-106.496706,-106.49685,-106.496957,-106.499661,-106.500963,-106.501239,-106.506439,-106.506313],"lat":[35.073973,35.074613,35.075323,35.07605,35.076881,35.077086,35.079285,35.080143,35.08068,35.081424,35.082554,35.082899,35.08525,35.086516,35.086484,35.086443,35.086389,35.086341,35.086334,35.086299,35.086271,35.086265,35.085452,35.084987,35.082576,35.079117,35.076395,35.075642,35.075244,35.074675,35.074314,35.073592,35.07298,35.072649,35.07227,35.071937,35.071915,35.071119,35.070661,35.070389,35.070128,35.069538,35.069594,35.069634,35.070665,35.07119,35.071296,35.073286,35.073973]}]],[[{"lng":[-106.515355,-106.515331,-106.515308,-106.515318,-106.515321,-106.515324,-106.515329,-106.515331,-106.515335,-106.515266,-106.515257,-106.515261,-106.515239,-106.515218,-106.515211,-106.515181,-106.512399,-106.509977,-106.509621,-106.508426,-106.503404,-106.500164,-106.497697,-106.497594,-106.497496,-106.497309,-106.496446,-106.495974,-106.495742,-106.495009,-106.495091,-106.495259,-106.495382,-106.495441,-106.495488,-106.495492,-106.495454,-106.495436,-106.495429,-106.495154,-106.495138,-106.495123,-106.495437,-106.495707,-106.495934,-106.496197,-106.496437,-106.496554,-106.496622,-106.496875,-106.497362,-106.497471,-106.497635,-106.497799,-106.497982,-106.498345,-106.498736,-106.499021,-106.499308,-106.499508,-106.499892,-106.500024,-106.500393,-106.500415,-106.500443,-106.500585,-106.50086,-106.501656,-106.502387,-106.503086,-106.503588,-106.503853,-106.504268,-106.504785,-106.505673,-106.506319,-106.506889,-106.507544,-106.507836,-106.508558,-106.508739,-106.509721,-106.510472,-106.510786,-106.510829,-106.51249,-106.513601,-106.515209,-106.515347,-106.515338,-106.515355],"lat":[35.055952,35.056349,35.057207,35.057989,35.058952,35.059796,35.061187,35.061809,35.062871,35.064353,35.065286,35.066668,35.067703,35.068677,35.069056,35.070081,35.069787,35.069519,35.069461,35.069371,35.068827,35.068481,35.068218,35.068207,35.068192,35.068163,35.068064,35.067979,35.067914,35.067711,35.067305,35.066471,35.065834,35.065495,35.065126,35.065025,35.064078,35.063766,35.063566,35.061207,35.061074,35.06094,35.061014,35.061128,35.061211,35.061261,35.061318,35.061402,35.061368,35.061342,35.061458,35.061463,35.061459,35.061475,35.061554,35.061711,35.061761,35.061764,35.061711,35.061666,35.06167,35.061657,35.061603,35.061598,35.0616,35.061578,35.061538,35.061446,35.061381,35.061084,35.060285,35.059871,35.059613,35.059397,35.059188,35.058857,35.058558,35.057941,35.057778,35.057375,35.057274,35.057043,35.056958,35.056923,35.056918,35.0566,35.056253,35.0559,35.055856,35.05592,35.055952]}]],[[{"lng":[-106.534075,-106.532668,-106.532616,-106.532608,-106.532552,-106.532579,-106.53258,-106.532584,-106.532588,-106.532589,-106.532569,-106.532569,-106.532568,-106.53252,-106.532517,-106.53254,-106.531737,-106.531171,-106.528871,-106.524854,-106.522757,-106.522451,-106.522052,-106.521214,-106.52031,-106.519884,-106.519353,-106.518914,-106.518435,-106.517877,-106.517278,-106.516662,-106.516572,-106.516222,-106.515835,-106.515558,-106.515239,-106.515261,-106.515257,-106.515266,-106.515335,-106.515331,-106.515329,-106.515324,-106.515321,-106.515318,-106.515308,-106.515331,-106.515355,-106.515338,-106.515347,-106.515949,-106.516453,-106.51689,-106.51729,-106.517725,-106.518316,-106.518543,-106.518824,-106.518985,-106.519449,-106.519711,-106.519825,-106.520293,-106.520362,-106.520274,-106.520503,-106.520562,-106.520835,-106.521851,-106.522115,-106.522193,-106.522798,-106.523335,-106.523726,-106.524029,-106.524302,-106.524747,-106.525445,-106.525728,-106.526578,-106.526709,-106.526827,-106.527041,-106.527159,-106.528033,-106.528627,-106.528958,-106.529209,-106.529283,-106.532878,-106.532959,-106.532915,-106.532847,-106.532772,-106.532707,-106.533986,-106.534075],"lat":[35.050136,35.050144,35.052204,35.0525,35.054681,35.055424,35.055756,35.05671,35.057953,35.058295,35.060445,35.060546,35.060613,35.065339,35.065707,35.067341,35.067311,35.067259,35.067254,35.067246,35.06725,35.067189,35.067096,35.06687,35.066618,35.066511,35.066457,35.066444,35.066471,35.06659,35.066803,35.067195,35.067254,35.067354,35.067574,35.067664,35.067703,35.066668,35.065286,35.064353,35.062871,35.061809,35.061187,35.059796,35.058952,35.057989,35.057207,35.056349,35.055952,35.05592,35.055856,35.055665,35.05536,35.055014,35.05469,35.054615,35.054382,35.054151,35.053869,35.053423,35.05259,35.052238,35.052088,35.051614,35.051464,35.050501,35.049851,35.049684,35.049408,35.049029,35.049005,35.048926,35.0488,35.048499,35.048105,35.047394,35.047118,35.047114,35.047015,35.04681,35.04587,35.045858,35.04574,35.045684,35.045566,35.045016,35.044248,35.043672,35.04293,35.043028,35.043058,35.04306,35.043211,35.043178,35.046111,35.048651,35.048644,35.050136]}]],[[{"lng":[-106.612325,-106.612323,-106.612273,-106.612167,-106.612088,-106.611625,-106.61171,-106.611673,-106.611583,-106.61142,-106.611494,-106.611475,-106.61124,-106.611301,-106.611258,-106.611203,-106.611171,-106.611127,-106.611168,-106.610924,-106.610881,-106.61045,-106.610492,-106.610464,-106.609531,-106.609038,-106.60874,-106.607291,-106.606875,-106.606524,-106.6043,-106.604303,-106.604305,-106.603041,-106.602681,-106.601244,-106.600108,-106.599442,-106.5961,-106.595254,-106.59459,-106.593923,-106.593096,-106.592505,-106.59183,-106.59086,-106.588682,-106.587643,-106.586478,-106.586464,-106.586322,-106.58655,-106.586517,-106.586519,-106.586277,-106.586088,-106.58559,-106.585292,-106.584443,-106.584129,-106.583976,-106.583972,-106.583971,-106.583897,-106.583352,-106.581356,-106.569579,-106.568891,-106.568893,-106.568897,-106.568842,-106.568768,-106.56877,-106.568771,-106.567181,-106.56491,-106.563772,-106.559421,-106.558061,-106.556334,-106.556271,-106.555442,-106.555308,-106.554547,-106.554441,-106.553455,-106.553374,-106.551831,-106.551065,-106.5505,-106.550452,-106.550458,-106.550318,-106.550251,-106.550171,-106.541472,-106.539501,-106.538492,-106.536836,-106.536318,-106.535471,-106.534827,-106.53254,-106.532517,-106.53252,-106.532568,-106.532569,-106.532569,-106.532589,-106.532588,-106.532584,-106.53258,-106.532579,-106.532552,-106.532608,-106.532616,-106.532668,-106.534075,-106.533986,-106.532707,-106.532772,-106.532847,-106.532915,-106.532959,-106.532878,-106.529283,-106.529209,-106.529035,-106.528183,-106.519763,-106.518903,-106.517418,-106.508746,-106.503881,-106.503169,-106.502027,-106.500868,-106.500883,-106.500752,-106.500482,-106.50017,-106.499998,-106.49933,-106.498662,-106.497729,-106.496444,-106.495833,-106.495534,-106.495159,-106.494428,-106.492768,-106.491854,-106.491577,-106.490177,-106.487962,-106.487143,-106.486684,-106.479965,-106.46278,-106.462739,-106.462739,-106.462671,-106.462445,-106.462455,-106.462518,-106.46253,-106.462706,-106.462812,-106.462746,-106.462878,-106.462829,-106.462915,-106.462828,-106.462739,-106.463477,-106.463968,-106.464776,-106.468892,-106.471162,-106.47173,-106.489018,-106.491791,-106.538215,-106.566046,-106.56905,-106.568752,-106.568622,-106.568632,-106.586161,-106.586386,-106.586387,-106.586447,-106.586571,-106.586594,-106.586587,-106.586497,-106.586587,-106.586573,-106.586591,-106.586571,-106.586559,-106.586589,-106.586559,-106.591001,-106.592982,-106.594273,-106.594292,-106.598528,-106.59887,-106.599679,-106.602873,-106.607875,-106.608003,-106.609462,-106.610243,-106.612342,-106.612325],"lat":[35.030443,35.030553,35.031929,35.037011,35.037062,35.038247,35.038174,35.04154,35.041798,35.041955,35.042319,35.043406,35.044611,35.044826,35.045417,35.045422,35.04595,35.046262,35.046595,35.050435,35.050876,35.057217,35.057838,35.058466,35.058435,35.058435,35.058435,35.058388,35.058388,35.05838,35.058258,35.058137,35.058076,35.058241,35.058236,35.058218,35.058219,35.058207,35.058216,35.058226,35.05822,35.058222,35.05819,35.058192,35.058187,35.058189,35.058195,35.058191,35.058356,35.058212,35.057566,35.054962,35.05387,35.053023,35.053033,35.053038,35.053032,35.053032,35.05304,35.053043,35.053044,35.052504,35.05231,35.051286,35.051258,35.051256,35.051247,35.052293,35.052352,35.052489,35.053662,35.058227,35.058513,35.058729,35.058866,35.063249,35.065445,35.065486,35.065464,35.065437,35.065435,35.065422,35.06542,35.065409,35.065407,35.06539,35.065388,35.065363,35.065352,35.065364,35.066134,35.067244,35.067247,35.067248,35.067249,35.067402,35.067407,35.067409,35.067386,35.067388,35.067369,35.067386,35.067341,35.065707,35.065339,35.060613,35.060546,35.060445,35.058295,35.057953,35.05671,35.055756,35.055424,35.054681,35.0525,35.052204,35.050144,35.050136,35.048644,35.048651,35.046111,35.043178,35.043211,35.04306,35.043058,35.043028,35.04293,35.043028,35.043019,35.04293,35.042921,35.042891,35.042788,35.042755,35.042761,35.042751,35.042743,35.043119,35.043023,35.042895,35.042881,35.042873,35.042874,35.042852,35.042852,35.042857,35.042858,35.042896,35.042749,35.042729,35.042685,35.042655,35.042648,35.042648,35.042639,35.042693,35.042737,35.042655,35.042957,35.040665,35.040613,35.036761,35.023381,35.021305,35.020161,35.019938,35.016735,35.014857,35.012988,35.003749,35.002482,35.001512,34.990517,34.979272,34.967772,34.960132,34.947541,34.947523,34.947542,34.947556,34.947717,34.947712,34.947616,34.947558,34.947543,34.969754,34.985506,35.010939,35.011068,35.017412,35.018082,35.019594,35.022734,35.023302,35.02411,35.024276,35.024467,35.024875,35.026402,35.026447,35.026609,35.027213,35.028059,35.02807,35.028081,35.028085,35.029202,35.029317,35.029326,35.029348,35.029317,35.029268,35.029276,35.029373,35.02941,35.029448,35.030443]}]],[[{"lng":[-106.56878,-106.568717,-106.568718,-106.568714,-106.568715,-106.56873,-106.568714,-106.568699,-106.568661,-106.568646,-106.567499,-106.566415,-106.565338,-106.564266,-106.563344,-106.562135,-106.561515,-106.561073,-106.560413,-106.560009,-106.559308,-106.558226,-106.557107,-106.555984,-106.554876,-106.55373,-106.552686,-106.552584,-106.551574,-106.550462,-106.550463,-106.55045,-106.550461,-106.550458,-106.550452,-106.5505,-106.551065,-106.551831,-106.553374,-106.553455,-106.554441,-106.554547,-106.555308,-106.555442,-106.556271,-106.556334,-106.558061,-106.559421,-106.563772,-106.56491,-106.567181,-106.568771,-106.56878],"lat":[35.060045,35.06165,35.061819,35.063418,35.063633,35.065425,35.067232,35.069034,35.070842,35.072676,35.072705,35.072707,35.072732,35.072735,35.072747,35.072749,35.072764,35.072765,35.07277,35.072773,35.072799,35.072791,35.072787,35.07279,35.07279,35.072786,35.072753,35.072753,35.072756,35.072759,35.070909,35.069069,35.067783,35.067244,35.066134,35.065364,35.065352,35.065363,35.065388,35.06539,35.065407,35.065409,35.06542,35.065422,35.065435,35.065437,35.065464,35.065486,35.065445,35.063249,35.058866,35.058729,35.060045]}]],[[{"lng":[-106.58655,-106.586322,-106.586464,-106.586478,-106.586458,-106.586438,-106.586427,-106.586375,-106.586373,-106.586358,-106.586346,-106.586351,-106.586325,-106.586218,-106.585234,-106.58413,-106.583579,-106.583014,-106.582668,-106.581829,-106.580937,-106.580859,-106.580787,-106.580198,-106.57994,-106.579713,-106.579336,-106.579145,-106.57858,-106.578241,-106.57748,-106.577495,-106.577525,-106.577535,-106.577525,-106.577558,-106.577605,-106.577611,-106.577609,-106.577657,-106.577614,-106.576757,-106.575693,-106.574502,-106.572709,-106.569761,-106.569281,-106.568897,-106.568893,-106.568891,-106.569579,-106.581356,-106.583352,-106.583897,-106.583971,-106.583972,-106.583976,-106.584129,-106.584443,-106.585292,-106.58559,-106.586088,-106.586277,-106.586519,-106.586517,-106.58655],"lat":[35.054962,35.057566,35.058212,35.058356,35.058895,35.060187,35.061983,35.063802,35.065622,35.067406,35.068224,35.069251,35.071092,35.072941,35.072886,35.072834,35.072834,35.072834,35.072838,35.072791,35.072775,35.072775,35.072775,35.072774,35.072774,35.072774,35.072773,35.072773,35.072772,35.072772,35.072756,35.070972,35.069152,35.067353,35.065506,35.063729,35.061917,35.060109,35.058258,35.056358,35.055299,35.055023,35.054635,35.054269,35.053729,35.052785,35.052621,35.052489,35.052352,35.052293,35.051247,35.051256,35.051258,35.051286,35.05231,35.052504,35.053044,35.053043,35.05304,35.053032,35.053032,35.053038,35.053033,35.053023,35.05387,35.054962]}]],[[{"lng":[-106.577657,-106.577609,-106.577611,-106.577605,-106.577558,-106.577525,-106.577535,-106.577525,-106.577495,-106.57748,-106.576304,-106.575187,-106.574105,-106.573041,-106.572509,-106.571875,-106.570808,-106.569705,-106.568646,-106.568661,-106.568699,-106.568714,-106.56873,-106.568715,-106.568714,-106.568718,-106.568717,-106.56878,-106.568771,-106.56877,-106.568768,-106.568842,-106.568897,-106.569281,-106.569761,-106.572709,-106.574502,-106.575693,-106.576757,-106.577614,-106.577657],"lat":[35.056358,35.058258,35.060109,35.061917,35.063729,35.065506,35.067353,35.069152,35.070972,35.072756,35.07275,35.072735,35.072723,35.072708,35.072703,35.072686,35.072678,35.072668,35.072676,35.070842,35.069034,35.067232,35.065425,35.063633,35.063418,35.061819,35.06165,35.060045,35.058729,35.058513,35.058227,35.053662,35.052489,35.052621,35.052785,35.053729,35.054269,35.054635,35.055023,35.055299,35.056358]}]],[[{"lng":[-106.604559,-106.603418,-106.602234,-106.601108,-106.599983,-106.59998,-106.59897,-106.59796,-106.597144,-106.596893,-106.596234,-106.595904,-106.595355,-106.595195,-106.594754,-106.594333,-106.593337,-106.593321,-106.592988,-106.592341,-106.591358,-106.590382,-106.589342,-106.587873,-106.587029,-106.586218,-106.586325,-106.586351,-106.586346,-106.586358,-106.586373,-106.586375,-106.586427,-106.586438,-106.586458,-106.586478,-106.587643,-106.588682,-106.59086,-106.59183,-106.592505,-106.593096,-106.593923,-106.59459,-106.595254,-106.5961,-106.599442,-106.600108,-106.601244,-106.602681,-106.603041,-106.604305,-106.604303,-106.6043,-106.604275,-106.604278,-106.604282,-106.604286,-106.604292,-106.604293,-106.604294,-106.604296,-106.604293,-106.604279,-106.604493,-106.60451,-106.604499,-106.60451,-106.604518,-106.604558,-106.604559],"lat":[35.073631,35.073617,35.073612,35.073616,35.073599,35.07295,35.072953,35.072955,35.072962,35.072942,35.072959,35.07296,35.072962,35.072911,35.072895,35.072896,35.072899,35.073708,35.073331,35.072976,35.072922,35.072927,35.07293,35.072934,35.072936,35.072941,35.071092,35.069251,35.068224,35.067406,35.065622,35.063802,35.061983,35.060187,35.058895,35.058356,35.058191,35.058195,35.058189,35.058187,35.058192,35.05819,35.058222,35.05822,35.058226,35.058216,35.058207,35.058219,35.058218,35.058236,35.058241,35.058076,35.058137,35.058258,35.059283,35.060183,35.061104,35.062004,35.062922,35.063662,35.063825,35.064729,35.064835,35.065608,35.066178,35.066896,35.068223,35.070028,35.071844,35.073017,35.073631]}]],[[{"lng":[-106.613389,-106.613354,-106.613366,-106.613331,-106.613354,-106.613357,-106.613334,-106.61329,-106.612056,-106.610825,-106.609575,-106.608289,-106.607696,-106.607076,-106.605808,-106.604559,-106.604558,-106.604518,-106.60451,-106.604499,-106.60451,-106.604493,-106.604279,-106.604293,-106.604296,-106.604294,-106.604293,-106.604292,-106.604286,-106.604282,-106.604278,-106.604275,-106.6043,-106.606524,-106.606875,-106.607291,-106.60874,-106.609038,-106.609531,-106.610464,-106.611632,-106.613293,-106.613355,-106.613199,-106.613141,-106.613145,-106.613146,-106.613149,-106.613157,-106.613159,-106.613162,-106.613275,-106.61337,-106.613389],"lat":[35.067744,35.068227,35.068935,35.069621,35.070434,35.071263,35.071989,35.073671,35.073654,35.073658,35.073647,35.07365,35.07365,35.073654,35.073627,35.073631,35.073017,35.071844,35.070028,35.068223,35.066896,35.066178,35.065608,35.064835,35.064729,35.063825,35.063662,35.062922,35.062004,35.061104,35.060183,35.059283,35.058258,35.05838,35.058388,35.058388,35.058435,35.058435,35.058435,35.058466,35.058485,35.058439,35.059257,35.060871,35.061491,35.062293,35.062693,35.063273,35.065056,35.065494,35.066098,35.066793,35.067517,35.067744]}]],[[{"lng":[-106.639937,-106.639932,-106.639907,-106.639837,-106.63976,-106.63965,-106.639528,-106.639141,-106.639027,-106.638559,-106.638156,-106.637816,-106.637586,-106.637392,-106.637287,-106.637107,-106.637183,-106.63712,-106.635918,-106.634674,-106.633483,-106.633535,-106.6335,-106.633423,-106.63224,-106.632323,-106.632272,-106.631099,-106.629906,-106.628677,-106.628149,-106.627795,-106.627749,-106.627517,-106.627112,-106.62667,-106.626431,-106.625402,-106.624077,-106.624114,-106.624129,-106.622159,-106.622162,-106.620823,-106.619534,-106.618967,-106.61834,-106.617054,-106.616433,-106.615804,-106.615188,-106.614571,-106.613931,-106.61329,-106.613334,-106.613357,-106.613354,-106.613331,-106.613366,-106.613354,-106.613389,-106.61337,-106.613275,-106.613162,-106.613159,-106.613157,-106.613149,-106.613146,-106.613145,-106.613141,-106.613199,-106.613355,-106.613293,-106.611632,-106.610464,-106.610492,-106.61045,-106.610881,-106.610924,-106.611168,-106.611127,-106.611171,-106.611203,-106.611258,-106.611301,-106.61124,-106.611475,-106.611494,-106.61142,-106.611583,-106.611673,-106.61171,-106.611625,-106.612088,-106.612167,-106.612273,-106.612323,-106.612325,-106.612342,-106.614279,-106.619391,-106.620318,-106.621534,-106.621871,-106.621765,-106.621796,-106.621683,-106.62174,-106.621957,-106.623023,-106.624642,-106.628693,-106.628749,-106.628923,-106.629146,-106.629551,-106.630137,-106.630796,-106.632581,-106.633169,-106.63385,-106.634441,-106.635257,-106.635812,-106.63626,-106.636615,-106.637703,-106.638077,-106.638075,-106.638073,-106.638038,-106.637996,-106.638004,-106.637919,-106.637803,-106.637785,-106.637784,-106.637713,-106.637703,-106.637703,-106.637673,-106.637625,-106.637626,-106.637632,-106.637636,-106.637557,-106.637534,-106.637552,-106.637549,-106.637548,-106.63765,-106.637904,-106.63802,-106.638109,-106.638423,-106.638523,-106.638694,-106.638702,-106.638901,-106.639032,-106.639437,-106.639709,-106.639806,-106.639885,-106.639909,-106.639936,-106.639937],"lat":[35.074018,35.074227,35.074483,35.074729,35.074949,35.075152,35.075393,35.075897,35.076054,35.076511,35.076935,35.077213,35.077436,35.07763,35.077769,35.078131,35.077679,35.076606,35.076609,35.076613,35.076617,35.077304,35.077788,35.078185,35.078029,35.077626,35.076642,35.076639,35.076649,35.076654,35.076651,35.075963,35.075699,35.07545,35.075164,35.075045,35.075046,35.075034,35.075035,35.074053,35.073048,35.073032,35.073684,35.073682,35.073677,35.073678,35.073681,35.07367,35.073671,35.073673,35.07367,35.073667,35.073668,35.073671,35.071989,35.071263,35.070434,35.069621,35.068935,35.068227,35.067744,35.067517,35.066793,35.066098,35.065494,35.065056,35.063273,35.062693,35.062293,35.061491,35.060871,35.059257,35.058439,35.058485,35.058466,35.057838,35.057217,35.050876,35.050435,35.046595,35.046262,35.04595,35.045422,35.045417,35.044826,35.044611,35.043406,35.042319,35.041955,35.041798,35.04154,35.038174,35.038247,35.037062,35.037011,35.031929,35.030553,35.030443,35.029448,35.029448,35.028218,35.028978,35.029974,35.030996,35.033219,35.033643,35.033972,35.037006,35.036989,35.036986,35.036982,35.036943,35.03652,35.034719,35.033629,35.032277,35.030849,35.029628,35.026488,35.025586,35.024758,35.02421,35.023036,35.02322,35.023319,35.023388,35.023411,35.023423,35.023497,35.023561,35.025467,35.026619,35.028157,35.033299,35.039423,35.040353,35.04042,35.042949,35.043479,35.044646,35.046571,35.047562,35.047633,35.048043,35.048982,35.051087,35.052318,35.05376,35.054473,35.05477,35.056032,35.057846,35.058718,35.059584,35.061873,35.062796,35.063921,35.063976,35.065581,35.06656,35.069798,35.071901,35.07277,35.073323,35.073495,35.073762,35.074018]}]],[[{"lng":[-106.653757,-106.653235,-106.652827,-106.652733,-106.652122,-106.65178,-106.651593,-106.651388,-106.651051,-106.650912,-106.65081,-106.650726,-106.650637,-106.650498,-106.650143,-106.649881,-106.64978,-106.649486,-106.648266,-106.647539,-106.647335,-106.647192,-106.647099,-106.646826,-106.646173,-106.645581,-106.644304,-106.643109,-106.641914,-106.640682,-106.640547,-106.640006,-106.639616,-106.639437,-106.639032,-106.638901,-106.638702,-106.638694,-106.638523,-106.638423,-106.638109,-106.63802,-106.637904,-106.63765,-106.637548,-106.637549,-106.637552,-106.637534,-106.637557,-106.637636,-106.637632,-106.637626,-106.637625,-106.638078,-106.638498,-106.639906,-106.641615,-106.641723,-106.641826,-106.644208,-106.64539,-106.646551,-106.64806,-106.648327,-106.648985,-106.64936,-106.651479,-106.653402,-106.653519,-106.653757],"lat":[35.049303,35.051774,35.05424,35.055006,35.05812,35.059598,35.06045,35.061497,35.063273,35.064135,35.064722,35.06515,35.065804,35.066594,35.068278,35.069512,35.069952,35.06995,35.069903,35.069818,35.069777,35.069748,35.069724,35.069652,35.069664,35.069675,35.069698,35.069727,35.069748,35.069763,35.069777,35.069791,35.069794,35.069798,35.06656,35.065581,35.063976,35.063921,35.062796,35.061873,35.059584,35.058718,35.057846,35.056032,35.05477,35.054473,35.05376,35.052318,35.051087,35.048982,35.048043,35.047633,35.047562,35.04756,35.047559,35.04873,35.048786,35.048787,35.048778,35.048827,35.048787,35.048847,35.048926,35.04894,35.048974,35.048994,35.049135,35.049257,35.049264,35.049303]}]],[[{"lng":[-106.667193,-106.665557,-106.664895,-106.662845,-106.66253,-106.662142,-106.660937,-106.659718,-106.659737,-106.65976,-106.659108,-106.658563,-106.657752,-106.657413,-106.657439,-106.657465,-106.657504,-106.657412,-106.657268,-106.657103,-106.655926,-106.654738,-106.653536,-106.652892,-106.652351,-106.65115,-106.650471,-106.649978,-106.648787,-106.648359,-106.647691,-106.647181,-106.647009,-106.646681,-106.646317,-106.645415,-106.645593,-106.645794,-106.645805,-106.645808,-106.645774,-106.645738,-106.645703,-106.645648,-106.645634,-106.645591,-106.645581,-106.646173,-106.646826,-106.647099,-106.647192,-106.647335,-106.647539,-106.648266,-106.649486,-106.64978,-106.649893,-106.651687,-106.652176,-106.65313,-106.653696,-106.654402,-106.654975,-106.65623,-106.657591,-106.658351,-106.65975,-106.6599,-106.660274,-106.660515,-106.660617,-106.66104,-106.661345,-106.661946,-106.662508,-106.66305,-106.66316,-106.663479,-106.663617,-106.663768,-106.664063,-106.665803,-106.667366,-106.667193],"lat":[35.075006,35.07523,35.075321,35.075601,35.075514,35.075587,35.075595,35.075628,35.076482,35.07703,35.077041,35.077051,35.077054,35.077312,35.077814,35.078712,35.079505,35.079563,35.080247,35.081227,35.081069,35.080933,35.080781,35.080687,35.080627,35.080468,35.080362,35.080301,35.080172,35.080115,35.080027,35.079954,35.079929,35.079904,35.079858,35.079744,35.078754,35.077694,35.077529,35.077063,35.07555,35.074568,35.073589,35.072508,35.071601,35.070617,35.069675,35.069664,35.069652,35.069724,35.069748,35.069777,35.069818,35.069903,35.06995,35.069952,35.069953,35.069989,35.069999,35.070075,35.070064,35.070091,35.070089,35.07001,35.069894,35.06983,35.069711,35.069698,35.069684,35.069675,35.069674,35.06967,35.070084,35.0709,35.07165,35.071971,35.07201,35.072225,35.072268,35.072395,35.072573,35.073597,35.074992,35.075006]}]],[[{"lng":[-106.645805,-106.645794,-106.645593,-106.645415,-106.645213,-106.645023,-106.64485,-106.644621,-106.64461,-106.644318,-106.644085,-106.64287,-106.641684,-106.640529,-106.639395,-106.63811,-106.636865,-106.636322,-106.636219,-106.636058,-106.636123,-106.636369,-106.636516,-106.636537,-106.636554,-106.636727,-106.637123,-106.637185,-106.637266,-106.637329,-106.637407,-106.637527,-106.637674,-106.637854,-106.638067,-106.638503,-106.639027,-106.639141,-106.639528,-106.63965,-106.63976,-106.639837,-106.639907,-106.639932,-106.639937,-106.639936,-106.639909,-106.639885,-106.639806,-106.639709,-106.639437,-106.639616,-106.640006,-106.640547,-106.640682,-106.641914,-106.643109,-106.644304,-106.645581,-106.645591,-106.645634,-106.645648,-106.645703,-106.645738,-106.645774,-106.645808,-106.645805],"lat":[35.077529,35.077694,35.078754,35.079744,35.080715,35.081695,35.082661,35.083654,35.083711,35.085323,35.086317,35.086039,35.0858,35.085597,35.08546,35.085412,35.085289,35.085237,35.085227,35.085205,35.08491,35.083589,35.082751,35.082683,35.082589,35.081667,35.079663,35.079297,35.078937,35.078688,35.078418,35.078087,35.077811,35.077507,35.077231,35.076779,35.076054,35.075897,35.075393,35.075152,35.074949,35.074729,35.074483,35.074227,35.074018,35.073762,35.073495,35.073323,35.07277,35.071901,35.069798,35.069794,35.069791,35.069777,35.069763,35.069748,35.069727,35.069698,35.069675,35.070617,35.071601,35.072508,35.073589,35.074568,35.07555,35.077063,35.077529]}]],[[{"lng":[-106.639027,-106.638503,-106.638067,-106.637854,-106.637674,-106.637527,-106.637407,-106.637329,-106.637266,-106.637185,-106.637123,-106.636727,-106.636554,-106.636537,-106.636516,-106.636369,-106.636123,-106.636058,-106.63564,-106.634404,-106.633157,-106.632367,-106.63192,-106.631499,-106.630683,-106.629446,-106.62913,-106.628173,-106.627782,-106.627618,-106.627451,-106.627284,-106.627119,-106.626954,-106.626884,-106.626787,-106.62662,-106.626517,-106.626288,-106.626121,-106.626444,-106.626503,-106.626559,-106.626628,-106.626824,-106.625563,-106.624379,-106.624006,-106.624009,-106.624005,-106.62402,-106.624031,-106.624054,-106.624082,-106.624077,-106.625402,-106.626431,-106.62667,-106.627112,-106.627517,-106.627749,-106.627795,-106.628149,-106.628677,-106.629906,-106.631099,-106.632272,-106.632323,-106.63224,-106.633423,-106.6335,-106.633535,-106.633483,-106.634674,-106.635918,-106.63712,-106.637183,-106.637107,-106.637287,-106.637392,-106.637586,-106.637816,-106.638156,-106.638559,-106.639027],"lat":[35.076054,35.076779,35.077231,35.077507,35.077811,35.078087,35.078418,35.078688,35.078937,35.079297,35.079663,35.081667,35.082589,35.082683,35.082751,35.083589,35.08491,35.085205,35.085131,35.084988,35.084854,35.084749,35.084674,35.084633,35.084527,35.084358,35.084327,35.084221,35.084151,35.084128,35.084114,35.084116,35.084135,35.084159,35.084162,35.084166,35.084163,35.084153,35.08413,35.084122,35.08347,35.083196,35.082929,35.082395,35.08141,35.081255,35.081115,35.081092,35.080965,35.079958,35.078948,35.077998,35.077008,35.075995,35.075035,35.075034,35.075046,35.075045,35.075164,35.07545,35.075699,35.075963,35.076651,35.076654,35.076649,35.076639,35.076642,35.077626,35.078029,35.078185,35.077788,35.077304,35.076617,35.076613,35.076609,35.076606,35.077679,35.078131,35.077769,35.07763,35.077436,35.077213,35.076935,35.076511,35.076054]}]],[[{"lng":[-106.624114,-106.624077,-106.624082,-106.624054,-106.624031,-106.62402,-106.624005,-106.624009,-106.624006,-106.622799,-106.622721,-106.622051,-106.62079,-106.619704,-106.619549,-106.618269,-106.617028,-106.615786,-106.614528,-106.613439,-106.613301,-106.613172,-106.613154,-106.61318,-106.613153,-106.612022,-106.610917,-106.609852,-106.608721,-106.608234,-106.607629,-106.606581,-106.605493,-106.604248,-106.604261,-106.604285,-106.604277,-106.604285,-106.60429,-106.604522,-106.60452,-106.604522,-106.60455,-106.604552,-106.60454,-106.604532,-106.604559,-106.605808,-106.607076,-106.607696,-106.608289,-106.609575,-106.610825,-106.612056,-106.61329,-106.613931,-106.614571,-106.615188,-106.615804,-106.616433,-106.617054,-106.61834,-106.618967,-106.619534,-106.620823,-106.622162,-106.622159,-106.624129,-106.624114],"lat":[35.074053,35.075035,35.075995,35.077008,35.077998,35.078948,35.079958,35.080965,35.081092,35.081082,35.080973,35.080979,35.080982,35.080972,35.08097,35.08099,35.080978,35.080982,35.080984,35.080969,35.08099,35.082959,35.084646,35.08617,35.0875,35.087481,35.087495,35.087498,35.087502,35.087514,35.087483,35.087509,35.087522,35.087492,35.085616,35.083793,35.08198,35.080806,35.080277,35.08032,35.079778,35.079711,35.079053,35.078462,35.077252,35.075435,35.073631,35.073627,35.073654,35.07365,35.07365,35.073647,35.073658,35.073654,35.073671,35.073668,35.073667,35.07367,35.073673,35.073671,35.07367,35.073681,35.073678,35.073677,35.073682,35.073684,35.073032,35.073048,35.074053]}]],[[{"lng":[-106.62737,-106.626378,-106.625801,-106.625551,-106.625372,-106.625294,-106.625221,-106.625082,-106.624645,-106.624144,-106.623883,-106.623622,-106.623036,-106.622284,-106.621889,-106.621818,-106.62188,-106.621295,-106.619797,-106.617507,-106.617534,-106.617521,-106.617564,-106.617552,-106.617548,-106.61755,-106.616981,-106.616757,-106.616462,-106.615544,-106.615341,-106.614858,-106.614219,-106.614247,-106.614268,-106.614299,-106.614301,-106.614281,-106.613153,-106.61318,-106.613154,-106.613172,-106.613301,-106.613439,-106.614528,-106.615786,-106.617028,-106.618269,-106.619549,-106.619704,-106.62079,-106.622051,-106.622721,-106.622799,-106.624006,-106.624379,-106.625563,-106.626824,-106.626628,-106.626559,-106.626503,-106.626444,-106.626121,-106.625903,-106.625706,-106.625539,-106.625385,-106.625352,-106.625336,-106.62535,-106.625322,-106.625259,-106.625308,-106.625369,-106.625376,-106.625503,-106.625661,-106.625825,-106.626171,-106.626355,-106.62651,-106.62655,-106.626567,-106.626651,-106.626606,-106.626649,-106.626763,-106.626928,-106.627024,-106.627125,-106.62737],"lat":[35.099001,35.099758,35.100237,35.100478,35.10064,35.10071,35.100772,35.100892,35.101219,35.101566,35.101687,35.101757,35.101949,35.101969,35.101987,35.099859,35.098546,35.098519,35.098357,35.098318,35.097145,35.096321,35.094673,35.092858,35.092085,35.091058,35.091063,35.091065,35.091067,35.091074,35.091076,35.091077,35.091079,35.089775,35.08921,35.088399,35.08834,35.087497,35.0875,35.08617,35.084646,35.082959,35.08099,35.080969,35.080984,35.080982,35.080978,35.08099,35.08097,35.080972,35.080982,35.080979,35.080973,35.081082,35.081092,35.081115,35.081255,35.08141,35.082395,35.082929,35.083196,35.08347,35.084122,35.084988,35.08593,35.0869,35.087765,35.088325,35.088608,35.088695,35.089186,35.09031,35.09127,35.091666,35.091748,35.092217,35.09268,35.093142,35.09406,35.094517,35.094979,35.095316,35.095458,35.095933,35.096412,35.096891,35.097364,35.097824,35.098045,35.098277,35.099001]}]],[[{"lng":[-106.635677,-106.635397,-106.634993,-106.634891,-106.634778,-106.634653,-106.634398,-106.634312,-106.634096,-106.633727,-106.633446,-106.633061,-106.632181,-106.63142,-106.630709,-106.630043,-106.629375,-106.628712,-106.628554,-106.627482,-106.626921,-106.626338,-106.625259,-106.625322,-106.62535,-106.625336,-106.625352,-106.625385,-106.625539,-106.625706,-106.625903,-106.626121,-106.626288,-106.626517,-106.62662,-106.626787,-106.626884,-106.626954,-106.627119,-106.627284,-106.627451,-106.627618,-106.627782,-106.628173,-106.62913,-106.629446,-106.630683,-106.631499,-106.63192,-106.632367,-106.633157,-106.634404,-106.63564,-106.636058,-106.635677],"lat":[35.086958,35.088163,35.089561,35.089828,35.090148,35.090481,35.091165,35.091391,35.091493,35.091668,35.091766,35.091874,35.092028,35.092002,35.091976,35.091931,35.091905,35.091826,35.091772,35.091385,35.091094,35.090847,35.09031,35.089186,35.088695,35.088608,35.088325,35.087765,35.0869,35.08593,35.084988,35.084122,35.08413,35.084153,35.084163,35.084166,35.084162,35.084159,35.084135,35.084116,35.084114,35.084128,35.084151,35.084221,35.084327,35.084358,35.084527,35.084633,35.084674,35.084749,35.084854,35.084988,35.085131,35.085205,35.086958]}]],[[{"lng":[-106.643907,-106.643841,-106.643713,-106.643335,-106.64306,-106.642764,-106.642587,-106.64243,-106.642107,-106.642026,-106.641991,-106.641735,-106.641614,-106.641593,-106.641495,-106.641426,-106.641349,-106.641207,-106.641113,-106.641034,-106.640906,-106.640712,-106.640655,-106.640619,-106.640603,-106.64059,-106.640549,-106.639832,-106.639015,-106.637076,-106.636669,-106.634585,-106.633308,-106.632895,-106.632218,-106.631782,-106.631528,-106.631262,-106.630731,-106.630669,-106.630138,-106.629279,-106.629088,-106.629044,-106.628027,-106.627787,-106.627389,-106.627585,-106.627782,-106.628024,-106.628475,-106.629151,-106.629732,-106.630059,-106.630268,-106.630659,-106.630832,-106.631084,-106.631537,-106.631937,-106.631973,-106.632314,-106.632353,-106.632839,-106.633188,-106.633399,-106.633537,-106.634312,-106.634398,-106.634653,-106.634778,-106.634891,-106.634993,-106.635397,-106.635677,-106.636058,-106.636219,-106.636322,-106.636865,-106.63811,-106.639395,-106.640529,-106.641684,-106.64287,-106.644085,-106.643907],"lat":[35.087284,35.087614,35.088249,35.090299,35.091832,35.093495,35.094346,35.095287,35.096859,35.097278,35.097438,35.098994,35.099754,35.099885,35.100466,35.100842,35.101265,35.102098,35.102614,35.103096,35.103692,35.104729,35.104959,35.105107,35.10517,35.10522,35.105383,35.105306,35.105257,35.105194,35.105174,35.105287,35.105438,35.105448,35.105533,35.105585,35.105622,35.105662,35.105756,35.105767,35.10586,35.105936,35.105953,35.105957,35.106049,35.106088,35.105805,35.105352,35.104952,35.104378,35.103617,35.102697,35.102062,35.101709,35.10142,35.100826,35.100507,35.10006,35.098889,35.097886,35.097785,35.096964,35.096888,35.09551,35.094523,35.093899,35.093533,35.091391,35.091165,35.090481,35.090148,35.089828,35.089561,35.088163,35.086958,35.085205,35.085227,35.085237,35.085289,35.085412,35.08546,35.085597,35.0858,35.086039,35.086317,35.087284]}]],[[{"lng":[-106.656925,-106.656747,-106.656568,-106.656528,-106.656422,-106.656629,-106.656531,-106.656349,-106.656191,-106.65615,-106.655956,-106.655895,-106.65543,-106.655358,-106.655344,-106.655314,-106.655276,-106.655232,-106.654078,-106.652762,-106.651563,-106.650358,-106.649142,-106.647968,-106.646783,-106.645814,-106.645121,-106.644457,-106.643335,-106.643713,-106.643841,-106.643907,-106.644085,-106.644318,-106.64461,-106.644621,-106.64485,-106.645023,-106.645213,-106.645415,-106.646317,-106.646681,-106.647009,-106.647181,-106.647691,-106.648359,-106.648787,-106.649978,-106.650471,-106.65115,-106.652351,-106.652892,-106.653536,-106.654738,-106.655926,-106.657103,-106.656925],"lat":[35.0822,35.083192,35.084148,35.084467,35.084595,35.085087,35.085243,35.085319,35.08616,35.08636,35.087159,35.087524,35.087485,35.088532,35.088844,35.089521,35.090521,35.091591,35.091549,35.091501,35.091348,35.091189,35.091046,35.090895,35.090736,35.090605,35.090517,35.09045,35.090299,35.088249,35.087614,35.087284,35.086317,35.085323,35.083711,35.083654,35.082661,35.081695,35.080715,35.079744,35.079858,35.079904,35.079929,35.079954,35.080027,35.080115,35.080172,35.080301,35.080362,35.080468,35.080627,35.080687,35.080781,35.080933,35.081069,35.081227,35.0822]}]],[[{"lng":[-106.681167,-106.680921,-106.680869,-106.680407,-106.679474,-106.679274,-106.678846,-106.678642,-106.678532,-106.678395,-106.678334,-106.678158,-106.67785,-106.677497,-106.677335,-106.676606,-106.674222,-106.673086,-106.672484,-106.671727,-106.671571,-106.671485,-106.671425,-106.671414,-106.671275,-106.671111,-106.670756,-106.67037,-106.66966,-106.669363,-106.669208,-106.668816,-106.668477,-106.668256,-106.667931,-106.666667,-106.665848,-106.665544,-106.664978,-106.664151,-106.663861,-106.662831,-106.662358,-106.661885,-106.660757,-106.65965,-106.658539,-106.658369,-106.657372,-106.656531,-106.656629,-106.656422,-106.656528,-106.656568,-106.656747,-106.656925,-106.657103,-106.657268,-106.657412,-106.657504,-106.657465,-106.657439,-106.657413,-106.657752,-106.658563,-106.659108,-106.65976,-106.659737,-106.659718,-106.660937,-106.662142,-106.66253,-106.662845,-106.664895,-106.665557,-106.667193,-106.667366,-106.66908,-106.669917,-106.67049,-106.671378,-106.671556,-106.672083,-106.672333,-106.672731,-106.672805,-106.674855,-106.675673,-106.675973,-106.67711,-106.677266,-106.677384,-106.677465,-106.678768,-106.680072,-106.681068,-106.681167],"lat":[35.089069,35.08937,35.089433,35.089948,35.09099,35.091213,35.091675,35.092086,35.092288,35.09258,35.092709,35.093058,35.093791,35.094469,35.094463,35.094436,35.094298,35.094247,35.094176,35.094142,35.094088,35.09471,35.095114,35.09523,35.095191,35.095108,35.094934,35.094663,35.094084,35.093888,35.093801,35.093554,35.093155,35.09294,35.092665,35.091749,35.091128,35.090851,35.090228,35.089445,35.08926,35.088651,35.088358,35.088122,35.08764,35.087158,35.086493,35.086395,35.085733,35.085243,35.085087,35.084595,35.084467,35.084148,35.083192,35.0822,35.081227,35.080247,35.079563,35.079505,35.078712,35.077814,35.077312,35.077054,35.077051,35.077041,35.07703,35.076482,35.075628,35.075595,35.075587,35.075514,35.075601,35.075321,35.07523,35.075006,35.074992,35.076228,35.07673,35.077073,35.077605,35.077854,35.078353,35.078618,35.078999,35.079096,35.081214,35.08205,35.083239,35.084102,35.084229,35.084366,35.084466,35.086102,35.087737,35.088949,35.089069]}]],[[{"lng":[-106.700953,-106.700499,-106.700372,-106.699736,-106.699723,-106.699501,-106.699377,-106.698693,-106.697675,-106.697273,-106.696885,-106.696875,-106.696941,-106.69748,-106.697782,-106.697933,-106.697966,-106.696689,-106.695499,-106.694877,-106.694822,-106.694468,-106.694337,-106.6935,-106.693115,-106.692284,-106.691687,-106.690525,-106.689418,-106.688915,-106.688437,-106.687772,-106.687159,-106.685835,-106.684712,-106.684261,-106.684144,-106.683855,-106.683805,-106.683409,-106.683325,-106.683165,-106.682901,-106.682776,-106.682657,-106.681909,-106.681387,-106.681286,-106.681215,-106.681167,-106.681068,-106.680072,-106.678768,-106.677465,-106.677384,-106.677266,-106.67711,-106.675973,-106.675673,-106.674855,-106.672805,-106.672731,-106.672333,-106.672083,-106.671556,-106.671378,-106.67049,-106.669917,-106.66908,-106.667366,-106.665803,-106.664063,-106.663768,-106.663617,-106.663479,-106.66316,-106.66305,-106.662508,-106.661946,-106.661345,-106.66104,-106.661571,-106.661624,-106.662155,-106.663195,-106.663706,-106.663861,-106.664013,-106.664494,-106.665889,-106.666209,-106.666722,-106.667975,-106.669067,-106.669596,-106.670257,-106.672045,-106.672665,-106.673807,-106.6742,-106.674313,-106.674535,-106.677071,-106.678732,-106.678927,-106.680955,-106.681299,-106.681426,-106.681586,-106.683187,-106.683467,-106.683852,-106.684078,-106.68516,-106.686467,-106.687934,-106.689735,-106.690082,-106.690224,-106.690824,-106.691801,-106.694659,-106.695293,-106.695625,-106.696105,-106.697126,-106.697566,-106.697597,-106.69772,-106.69781,-106.698346,-106.698534,-106.69937,-106.699537,-106.699977,-106.700378,-106.700773,-106.700884,-106.700953],"lat":[35.067925,35.069097,35.069427,35.07097,35.071246,35.071732,35.072125,35.074055,35.076486,35.077523,35.078697,35.079273,35.079783,35.081311,35.082206,35.082685,35.082788,35.083097,35.083379,35.083503,35.083515,35.083586,35.083613,35.083815,35.083876,35.08407,35.084189,35.084436,35.084708,35.084818,35.084922,35.085046,35.085212,35.085509,35.085836,35.086063,35.086122,35.086267,35.08631,35.086649,35.086723,35.086869,35.087106,35.087245,35.087379,35.088216,35.0888,35.088923,35.089011,35.089069,35.088949,35.087737,35.086102,35.084466,35.084366,35.084229,35.084102,35.083239,35.08205,35.081214,35.079096,35.078999,35.078618,35.078353,35.077854,35.077605,35.077073,35.07673,35.076228,35.074992,35.073597,35.072573,35.072395,35.072268,35.072225,35.07201,35.071971,35.07165,35.0709,35.070084,35.06967,35.069664,35.069658,35.0696,35.069485,35.069318,35.069267,35.069218,35.069083,35.068649,35.068536,35.068388,35.068027,35.067769,35.06764,35.067475,35.067045,35.066907,35.066653,35.066566,35.066485,35.066492,35.065921,35.065553,35.065468,35.065087,35.065046,35.065031,35.065012,35.065097,35.065112,35.065133,35.065147,35.065215,35.065296,35.065567,35.065892,35.065955,35.065975,35.066077,35.066243,35.066765,35.066894,35.066963,35.067061,35.067225,35.067307,35.06731,35.067332,35.067348,35.067445,35.067479,35.06763,35.067659,35.067737,35.067814,35.067891,35.067912,35.067925]}]],[[{"lng":[-106.709613,-106.709238,-106.708718,-106.708362,-106.707733,-106.707122,-106.70594,-106.705799,-106.705694,-106.705611,-106.705634,-106.705496,-106.70532,-106.705244,-106.705129,-106.705381,-106.70502,-106.704977,-106.704812,-106.704657,-106.704369,-106.704164,-106.703915,-106.70379,-106.703423,-106.703264,-106.703214,-106.703108,-106.703047,-106.702505,-106.701916,-106.701334,-106.700581,-106.700445,-106.698508,-106.696256,-106.694344,-106.693371,-106.692897,-106.692786,-106.692501,-106.692339,-106.692387,-106.692355,-106.69234,-106.69235,-106.691997,-106.69181,-106.690618,-106.690052,-106.690005,-106.689955,-106.689483,-106.689131,-106.688929,-106.688631,-106.68814,-106.684927,-106.684855,-106.68418,-106.681291,-106.681213,-106.681167,-106.681215,-106.681286,-106.681387,-106.681909,-106.682657,-106.682776,-106.682901,-106.683165,-106.683325,-106.683409,-106.683805,-106.683855,-106.684144,-106.684261,-106.684712,-106.685835,-106.687159,-106.687772,-106.688437,-106.688915,-106.689418,-106.690525,-106.691687,-106.692284,-106.693115,-106.6935,-106.694337,-106.694468,-106.694822,-106.694877,-106.695499,-106.696689,-106.697966,-106.69863,-106.699007,-106.6994,-106.699646,-106.700249,-106.700523,-106.700651,-106.70067,-106.700727,-106.70041,-106.700014,-106.699872,-106.699846,-106.700742,-106.701855,-106.702877,-106.703917,-106.704624,-106.704997,-106.705677,-106.706117,-106.706463,-106.706783,-106.70721,-106.707582,-106.709438,-106.709533,-106.709613],"lat":[35.094361,35.095289,35.096568,35.097403,35.0989,35.100397,35.103387,35.103769,35.104154,35.104484,35.104649,35.10506,35.105158,35.105217,35.105307,35.104201,35.104739,35.10481,35.105056,35.105248,35.10567,35.105894,35.106124,35.106228,35.106539,35.106743,35.106896,35.106913,35.106924,35.107003,35.107066,35.107107,35.107115,35.107109,35.10702,35.106833,35.106675,35.106594,35.106555,35.106545,35.106522,35.106509,35.10633,35.106107,35.106092,35.106068,35.103584,35.100429,35.098492,35.097603,35.097566,35.09745,35.09671,35.096165,35.09584,35.095331,35.092685,35.090673,35.090628,35.090377,35.089305,35.089157,35.089069,35.089011,35.088923,35.0888,35.088216,35.087379,35.087245,35.087106,35.086869,35.086723,35.086649,35.08631,35.086267,35.086122,35.086063,35.085836,35.085509,35.085212,35.085046,35.084922,35.084818,35.084708,35.084436,35.084189,35.08407,35.083876,35.083815,35.083613,35.083586,35.083515,35.083503,35.083379,35.083097,35.082788,35.082646,35.083731,35.084905,35.085586,35.087625,35.088501,35.089974,35.090741,35.091564,35.092345,35.093376,35.093746,35.094324,35.094357,35.09434,35.094347,35.094354,35.094374,35.094372,35.09437,35.094368,35.094367,35.094366,35.094364,35.094357,35.09436,35.094361,35.094361]}]],[[{"lng":[-106.710818,-106.710818,-106.71078,-106.710753,-106.710715,-106.710592,-106.710286,-106.710237,-106.710217,-106.709613,-106.709533,-106.709438,-106.707582,-106.70721,-106.706783,-106.706463,-106.706117,-106.705677,-106.704997,-106.704624,-106.703917,-106.702877,-106.701855,-106.700742,-106.699846,-106.699872,-106.700014,-106.70041,-106.700727,-106.70067,-106.700651,-106.700523,-106.700249,-106.699646,-106.6994,-106.699007,-106.69863,-106.697966,-106.697933,-106.697782,-106.69748,-106.696941,-106.696875,-106.696885,-106.697273,-106.697675,-106.698693,-106.699377,-106.699501,-106.699723,-106.699736,-106.700372,-106.700499,-106.700953,-106.701003,-106.701598,-106.702274,-106.703464,-106.704529,-106.706151,-106.707135,-106.707333,-106.708958,-106.708695,-106.707595,-106.708005,-106.708256,-106.708733,-106.708936,-106.709274,-106.709657,-106.709847,-106.71027,-106.710581,-106.710787,-106.710662,-106.710575,-106.710544,-106.710544,-106.710556,-106.710591,-106.710659,-106.710774,-106.710827,-106.710818],"lat":[35.083059,35.083123,35.086238,35.089323,35.090145,35.091078,35.092437,35.09259,35.092642,35.094361,35.094361,35.09436,35.094357,35.094364,35.094366,35.094367,35.094368,35.09437,35.094372,35.094374,35.094354,35.094347,35.09434,35.094357,35.094324,35.093746,35.093376,35.092345,35.091564,35.090741,35.089974,35.088501,35.087625,35.085586,35.084905,35.083731,35.082646,35.082788,35.082685,35.082206,35.081311,35.079783,35.079273,35.078697,35.077523,35.076486,35.074055,35.072125,35.071732,35.071246,35.07097,35.069427,35.069097,35.067925,35.067935,35.068034,35.068149,35.068381,35.06859,35.068859,35.069041,35.069074,35.069341,35.069618,35.069867,35.071091,35.07192,35.073297,35.073999,35.075029,35.076264,35.076878,35.078039,35.078249,35.078388,35.078705,35.079017,35.079253,35.07954,35.079832,35.079984,35.080401,35.081103,35.08173,35.083059]}]],[[{"lng":[-106.692387,-106.692339,-106.692148,-106.691965,-106.691835,-106.691025,-106.690644,-106.690043,-106.684207,-106.681557,-106.677506,-106.677168,-106.676543,-106.674798,-106.673028,-106.672506,-106.671884,-106.671221,-106.670766,-106.666709,-106.665733,-106.665355,-106.664772,-106.664649,-106.66388,-106.663326,-106.662088,-106.660555,-106.659656,-106.659144,-106.658281,-106.657277,-106.656349,-106.653355,-106.653304,-106.653095,-106.653205,-106.653188,-106.653287,-106.653445,-106.653517,-106.653542,-106.653881,-106.653947,-106.654222,-106.654487,-106.654784,-106.654961,-106.655061,-106.655093,-106.655118,-106.655135,-106.65565,-106.655882,-106.656114,-106.658102,-106.658602,-106.658946,-106.660084,-106.660147,-106.660371,-106.660827,-106.661051,-106.661157,-106.661283,-106.661527,-106.661741,-106.661886,-106.662052,-106.662295,-106.662266,-106.663399,-106.663843,-106.664709,-106.665105,-106.665922,-106.666925,-106.667115,-106.667383,-106.667874,-106.668676,-106.668884,-106.669344,-106.670503,-106.670592,-106.671231,-106.672307,-106.672641,-106.674112,-106.675159,-106.676563,-106.676897,-106.676959,-106.677226,-106.677273,-106.677325,-106.677341,-106.677427,-106.677497,-106.67785,-106.678158,-106.678334,-106.678395,-106.678532,-106.678642,-106.678846,-106.679274,-106.679474,-106.680407,-106.680869,-106.680921,-106.681167,-106.681213,-106.681291,-106.68418,-106.684855,-106.684927,-106.68814,-106.688631,-106.688929,-106.689131,-106.689483,-106.689955,-106.690005,-106.690052,-106.690618,-106.69181,-106.691997,-106.69235,-106.69234,-106.692355,-106.692387],"lat":[35.10633,35.106509,35.106493,35.106477,35.106467,35.1064,35.106368,35.106318,35.105834,35.105609,35.105266,35.105241,35.105194,35.105063,35.10498,35.105009,35.105059,35.105141,35.105242,35.10605,35.106246,35.106308,35.106406,35.106419,35.106485,35.106496,35.106411,35.106339,35.106337,35.106352,35.106413,35.106485,35.106636,35.107102,35.106921,35.10671,35.106656,35.10661,35.106435,35.106124,35.10595,35.10565,35.104686,35.104499,35.103741,35.103029,35.102165,35.101647,35.101191,35.101045,35.100809,35.100304,35.100478,35.100501,35.100489,35.099921,35.09978,35.099669,35.099365,35.09933,35.099052,35.098767,35.09865,35.098575,35.098476,35.098392,35.09838,35.098011,35.097537,35.096726,35.096599,35.096746,35.096831,35.096943,35.097059,35.097525,35.098049,35.098148,35.098275,35.098365,35.098454,35.09847,35.098507,35.098613,35.098649,35.098695,35.098753,35.09877,35.098856,35.098944,35.099067,35.099103,35.098114,35.098113,35.097282,35.096797,35.096415,35.095632,35.094469,35.093791,35.093058,35.092709,35.09258,35.092288,35.092086,35.091675,35.091213,35.09099,35.089948,35.089433,35.08937,35.089069,35.089157,35.089305,35.090377,35.090628,35.090673,35.092685,35.095331,35.09584,35.096165,35.09671,35.09745,35.097566,35.097603,35.098492,35.100429,35.103584,35.106068,35.106092,35.106107,35.10633]}]],[[{"lng":[-106.677427,-106.677341,-106.677325,-106.677273,-106.677226,-106.676959,-106.676897,-106.676563,-106.675159,-106.674112,-106.672641,-106.672307,-106.671231,-106.670592,-106.670503,-106.669344,-106.668884,-106.668676,-106.667874,-106.667383,-106.667115,-106.666925,-106.665922,-106.665105,-106.664709,-106.663843,-106.663399,-106.662266,-106.662237,-106.662394,-106.662498,-106.662622,-106.662856,-106.663083,-106.663346,-106.663566,-106.664009,-106.664152,-106.664837,-106.664978,-106.665544,-106.665848,-106.666667,-106.667931,-106.668256,-106.668477,-106.668816,-106.669208,-106.669363,-106.66966,-106.67037,-106.670756,-106.671111,-106.671275,-106.671414,-106.671425,-106.671485,-106.671571,-106.671727,-106.672484,-106.673086,-106.674222,-106.676606,-106.677335,-106.677497,-106.677427],"lat":[35.095632,35.096415,35.096797,35.097282,35.098113,35.098114,35.099103,35.099067,35.098944,35.098856,35.09877,35.098753,35.098695,35.098649,35.098613,35.098507,35.09847,35.098454,35.098365,35.098275,35.098148,35.098049,35.097525,35.097059,35.096943,35.096831,35.096746,35.096599,35.09646,35.095604,35.095152,35.094637,35.093677,35.092693,35.091656,35.090696,35.090769,35.090719,35.090339,35.090228,35.090851,35.091128,35.091749,35.092665,35.09294,35.093155,35.093554,35.093801,35.093888,35.094084,35.094663,35.094934,35.095108,35.095191,35.09523,35.095114,35.09471,35.094088,35.094142,35.094176,35.094247,35.094298,35.094436,35.094463,35.094469,35.095632]}]],[[{"lng":[-106.664837,-106.664152,-106.664009,-106.663566,-106.663346,-106.663083,-106.662856,-106.662622,-106.662498,-106.662394,-106.662237,-106.662266,-106.662295,-106.662052,-106.661886,-106.661741,-106.661527,-106.661283,-106.661157,-106.661051,-106.660827,-106.660371,-106.660147,-106.660084,-106.658946,-106.658602,-106.658102,-106.656114,-106.655882,-106.65565,-106.655135,-106.655118,-106.655093,-106.655061,-106.654961,-106.654784,-106.654487,-106.654222,-106.653947,-106.653881,-106.653542,-106.653517,-106.653445,-106.653287,-106.653188,-106.653205,-106.653095,-106.653304,-106.653355,-106.653149,-106.652341,-106.651896,-106.651337,-106.650187,-106.647432,-106.64668,-106.645545,-106.645364,-106.645087,-106.643762,-106.643452,-106.643008,-106.642937,-106.642222,-106.642201,-106.640549,-106.64059,-106.640603,-106.640619,-106.640655,-106.640712,-106.640906,-106.641034,-106.641113,-106.641207,-106.641349,-106.641426,-106.641495,-106.641593,-106.641614,-106.641735,-106.641991,-106.642026,-106.642107,-106.64243,-106.642587,-106.642764,-106.64306,-106.643335,-106.644457,-106.645121,-106.645814,-106.646783,-106.647968,-106.649142,-106.650358,-106.651563,-106.652762,-106.654078,-106.655232,-106.655276,-106.655314,-106.655344,-106.655358,-106.65543,-106.655895,-106.655956,-106.65615,-106.656191,-106.656349,-106.656531,-106.657372,-106.658369,-106.658539,-106.65965,-106.660757,-106.661885,-106.662358,-106.662831,-106.663861,-106.664151,-106.664978,-106.664837],"lat":[35.090339,35.090719,35.090769,35.090696,35.091656,35.092693,35.093677,35.094637,35.095152,35.095604,35.09646,35.096599,35.096726,35.097537,35.098011,35.09838,35.098392,35.098476,35.098575,35.09865,35.098767,35.099052,35.09933,35.099365,35.099669,35.09978,35.099921,35.100489,35.100501,35.100478,35.100304,35.100809,35.101045,35.101191,35.101647,35.102165,35.103029,35.103741,35.104499,35.104686,35.10565,35.10595,35.106124,35.106435,35.10661,35.106656,35.10671,35.106921,35.107102,35.107134,35.10716,35.107122,35.107032,35.10681,35.106229,35.106075,35.105921,35.105895,35.105854,35.105692,35.105653,35.105597,35.105589,35.105509,35.105622,35.105383,35.10522,35.10517,35.105107,35.104959,35.104729,35.103692,35.103096,35.102614,35.102098,35.101265,35.100842,35.100466,35.099885,35.099754,35.098994,35.097438,35.097278,35.096859,35.095287,35.094346,35.093495,35.091832,35.090299,35.09045,35.090517,35.090605,35.090736,35.090895,35.091046,35.091189,35.091348,35.091501,35.091549,35.091591,35.090521,35.089521,35.088844,35.088532,35.087485,35.087524,35.087159,35.08636,35.08616,35.085319,35.085243,35.085733,35.086395,35.086493,35.087158,35.08764,35.088122,35.088358,35.088651,35.08926,35.089445,35.090228,35.090339]}]],[[{"lng":[-106.658634,-106.658498,-106.658331,-106.658137,-106.657956,-106.657853,-106.657646,-106.65751,-106.657357,-106.657164,-106.65679,-106.656593,-106.656449,-106.656428,-106.656409,-106.65612,-106.656061,-106.655956,-106.65577,-106.655626,-106.655465,-106.65538,-106.655262,-106.655006,-106.654043,-106.652977,-106.652234,-106.652211,-106.65182,-106.651551,-106.650787,-106.65046,-106.649694,-106.648748,-106.647808,-106.64631,-106.644818,-106.643299,-106.642537,-106.641601,-106.640129,-106.639342,-106.639235,-106.63829,-106.637737,-106.636906,-106.635658,-106.634561,-106.633856,-106.633663,-106.632588,-106.631632,-106.630663,-106.6297,-106.627454,-106.626363,-106.626273,-106.626038,-106.625732,-106.625226,-106.625049,-106.625196,-106.625366,-106.62563,-106.625864,-106.626114,-106.626291,-106.626574,-106.626817,-106.627037,-106.627431,-106.627568,-106.627663,-106.627727,-106.627734,-106.62771,-106.627708,-106.627717,-106.627727,-106.627787,-106.628027,-106.629044,-106.629088,-106.629279,-106.630138,-106.630669,-106.630731,-106.631262,-106.631528,-106.631782,-106.632218,-106.632895,-106.633308,-106.634585,-106.636669,-106.637076,-106.639015,-106.639832,-106.640549,-106.642201,-106.642222,-106.642937,-106.643008,-106.643452,-106.643762,-106.645087,-106.645364,-106.645545,-106.64668,-106.647432,-106.650187,-106.651337,-106.651896,-106.652341,-106.653149,-106.653355,-106.656349,-106.657277,-106.658281,-106.658384,-106.658556,-106.658562,-106.65867,-106.658634],"lat":[35.108618,35.109283,35.11015,35.111202,35.112254,35.112859,35.113775,35.114554,35.115247,35.115987,35.117143,35.117647,35.118087,35.118152,35.118211,35.119142,35.119301,35.119668,35.120253,35.120735,35.121273,35.121532,35.121969,35.122708,35.122461,35.122159,35.121939,35.121932,35.121833,35.121762,35.121559,35.121473,35.121261,35.121003,35.120733,35.120333,35.119939,35.119512,35.119314,35.11907,35.118653,35.118407,35.118376,35.118031,35.117832,35.117534,35.117028,35.116634,35.11641,35.116349,35.116119,35.11587,35.115633,35.115392,35.114883,35.114565,35.114539,35.114483,35.11441,35.114291,35.114249,35.113887,35.113509,35.113001,35.112648,35.112294,35.112026,35.111591,35.111131,35.110642,35.109573,35.109167,35.108794,35.10825,35.107933,35.10732,35.106616,35.106496,35.106314,35.106088,35.106049,35.105957,35.105953,35.105936,35.10586,35.105767,35.105756,35.105662,35.105622,35.105585,35.105533,35.105448,35.105438,35.105287,35.105174,35.105194,35.105257,35.105306,35.105383,35.105622,35.105509,35.105589,35.105597,35.105653,35.105692,35.105854,35.105895,35.105921,35.106075,35.106229,35.10681,35.107032,35.107122,35.10716,35.107134,35.107102,35.106636,35.106485,35.106413,35.106704,35.107202,35.107284,35.107736,35.108618]}]],[[{"lng":[-106.675553,-106.675529,-106.675498,-106.67545,-106.675323,-106.674963,-106.674812,-106.674537,-106.674381,-106.674214,-106.674007,-106.673916,-106.673839,-106.673247,-106.672714,-106.672589,-106.672182,-106.671995,-106.671668,-106.6715,-106.671436,-106.671353,-106.671181,-106.670937,-106.670321,-106.669854,-106.66904,-106.668551,-106.668386,-106.6677,-106.667095,-106.666372,-106.665938,-106.665279,-106.66499,-106.664007,-106.663012,-106.662039,-106.662012,-106.66101,-106.660564,-106.660377,-106.66003,-106.659855,-106.659059,-106.658335,-106.65807,-106.657076,-106.656085,-106.655006,-106.655262,-106.65538,-106.655465,-106.655626,-106.65577,-106.655956,-106.656061,-106.65612,-106.656409,-106.656428,-106.656449,-106.656593,-106.65679,-106.657164,-106.657357,-106.65751,-106.657646,-106.657853,-106.657956,-106.658137,-106.658331,-106.658498,-106.658634,-106.65867,-106.658562,-106.658556,-106.658384,-106.658281,-106.659144,-106.659656,-106.660555,-106.662088,-106.663326,-106.66388,-106.664649,-106.664772,-106.665355,-106.665733,-106.666709,-106.670766,-106.670776,-106.670801,-106.67081,-106.670886,-106.670991,-106.671127,-106.671374,-106.671532,-106.671686,-106.671796,-106.67186,-106.672256,-106.672442,-106.672735,-106.673054,-106.673274,-106.673495,-106.673629,-106.673978,-106.674138,-106.6742,-106.674339,-106.674439,-106.674654,-106.674774,-106.674854,-106.67496,-106.675144,-106.675174,-106.675298,-106.675313,-106.675428,-106.675469,-106.675523,-106.675538,-106.675552,-106.675553],"lat":[35.118716,35.119148,35.119402,35.119816,35.120407,35.121567,35.122014,35.122864,35.123253,35.123858,35.124571,35.124755,35.1251,35.124887,35.12474,35.124705,35.124584,35.124527,35.124428,35.124392,35.12437,35.124343,35.124268,35.124223,35.12412,35.124089,35.124124,35.124095,35.124096,35.124107,35.124055,35.12395,35.123854,35.123667,35.123585,35.123419,35.123459,35.123524,35.123526,35.123553,35.123532,35.123493,35.12342,35.123373,35.123218,35.123125,35.123091,35.122983,35.122854,35.122708,35.121969,35.121532,35.121273,35.120735,35.120253,35.119668,35.119301,35.119142,35.118211,35.118152,35.118087,35.117647,35.117143,35.115987,35.115247,35.114554,35.113775,35.112859,35.112254,35.111202,35.11015,35.109283,35.108618,35.107736,35.107284,35.107202,35.106704,35.106413,35.106352,35.106337,35.106339,35.106411,35.106496,35.106485,35.106419,35.106406,35.106308,35.106246,35.10605,35.105242,35.105515,35.105957,35.106112,35.106513,35.106866,35.107332,35.107896,35.108237,35.108583,35.108775,35.108913,35.109763,35.110142,35.110532,35.110942,35.111231,35.111838,35.11219,35.113248,35.113606,35.113807,35.114145,35.11437,35.114923,35.115384,35.115557,35.115858,35.116422,35.116484,35.116921,35.116974,35.117519,35.117681,35.117939,35.118436,35.118501,35.118716]}]],[[{"lng":[-106.692605,-106.692551,-106.692488,-106.692433,-106.692457,-106.692345,-106.69231,-106.692271,-106.691936,-106.691709,-106.691668,-106.691576,-106.690936,-106.69094,-106.690925,-106.690904,-106.690887,-106.69086,-106.690482,-106.690701,-106.691182,-106.689882,-106.689764,-106.689636,-106.687972,-106.686041,-106.685566,-106.68511,-106.684709,-106.684038,-106.68338,-106.682709,-106.681484,-106.677944,-106.677263,-106.676893,-106.676248,-106.675983,-106.675739,-106.67555,-106.675299,-106.674497,-106.674324,-106.673839,-106.673916,-106.674007,-106.674214,-106.674381,-106.674537,-106.674812,-106.674963,-106.675323,-106.67545,-106.675498,-106.675529,-106.675553,-106.675552,-106.675538,-106.675523,-106.675469,-106.675428,-106.675313,-106.675298,-106.675174,-106.675144,-106.67496,-106.674854,-106.674774,-106.674654,-106.674439,-106.674339,-106.6742,-106.674138,-106.673978,-106.673629,-106.673495,-106.673274,-106.673054,-106.672735,-106.672442,-106.672256,-106.67186,-106.671796,-106.671686,-106.671532,-106.671374,-106.671127,-106.670991,-106.670886,-106.67081,-106.670801,-106.670776,-106.670766,-106.671221,-106.671884,-106.672506,-106.673028,-106.674798,-106.676543,-106.677168,-106.677506,-106.681557,-106.684207,-106.690043,-106.690644,-106.691025,-106.691835,-106.691965,-106.692148,-106.692339,-106.692283,-106.692044,-106.691804,-106.691489,-106.691493,-106.691329,-106.691064,-106.691053,-106.691065,-106.691555,-106.691749,-106.692008,-106.691986,-106.692484,-106.692544,-106.692664,-106.692605],"lat":[35.116569,35.116912,35.11731,35.117401,35.117506,35.11821,35.118434,35.118677,35.119297,35.119717,35.119794,35.119964,35.122058,35.122087,35.122119,35.122163,35.122218,35.122309,35.123545,35.124264,35.125844,35.130944,35.130836,35.13072,35.13051,35.130267,35.129556,35.129117,35.128957,35.128712,35.128455,35.128209,35.12775,35.126413,35.12617,35.126038,35.125774,35.125665,35.125592,35.125536,35.125462,35.125271,35.125239,35.1251,35.124755,35.124571,35.123858,35.123253,35.122864,35.122014,35.121567,35.120407,35.119816,35.119402,35.119148,35.118716,35.118501,35.118436,35.117939,35.117681,35.117519,35.116974,35.116921,35.116484,35.116422,35.115858,35.115557,35.115384,35.114923,35.11437,35.114145,35.113807,35.113606,35.113248,35.11219,35.111838,35.111231,35.110942,35.110532,35.110142,35.109763,35.108913,35.108775,35.108583,35.108237,35.107896,35.107332,35.106866,35.106513,35.106112,35.105957,35.105515,35.105242,35.105141,35.105059,35.105009,35.10498,35.105063,35.105194,35.105241,35.105266,35.105609,35.105834,35.106318,35.106368,35.1064,35.106467,35.106477,35.106493,35.106509,35.106609,35.10718,35.10775,35.108451,35.108491,35.10888,35.10951,35.109561,35.109703,35.113127,35.113665,35.114047,35.114321,35.115701,35.115791,35.116199,35.116569]}]],[[{"lng":[-106.689882,-106.687882,-106.685682,-106.68426,-106.684167,-106.683582,-106.683209,-106.683202,-106.683008,-106.681958,-106.681908,-106.681574,-106.681518,-106.681447,-106.681376,-106.681282,-106.680281,-106.679397,-106.679402,-106.678359,-106.677821,-106.677543,-106.676235,-106.676005,-106.675108,-106.674841,-106.674642,-106.671364,-106.671095,-106.670712,-106.669934,-106.668711,-106.668074,-106.667461,-106.666861,-106.666452,-106.666175,-106.666001,-106.665834,-106.663774,-106.663321,-106.662688,-106.662329,-106.66123,-106.659323,-106.657947,-106.657606,-106.656705,-106.656577,-106.65637,-106.653457,-106.653375,-106.653304,-106.653061,-106.652312,-106.651728,-106.651362,-106.650766,-106.651225,-106.651488,-106.651657,-106.65175,-106.652589,-106.653231,-106.653848,-106.653992,-106.654582,-106.654726,-106.655066,-106.655197,-106.655379,-106.655602,-106.655739,-106.655914,-106.656118,-106.656333,-106.656581,-106.657158,-106.657581,-106.658137,-106.65832,-106.658344,-106.658384,-106.658357,-106.658379,-106.658512,-106.658921,-106.659093,-106.659409,-106.659487,-106.660892,-106.66153,-106.662326,-106.662748,-106.662878,-106.662904,-106.663008,-106.663368,-106.664451,-106.664489,-106.664465,-106.664461,-106.664446,-106.664556,-106.66468,-106.664745,-106.665018,-106.665423,-106.665446,-106.665523,-106.665522,-106.665608,-106.665611,-106.665699,-106.665775,-106.665837,-106.665938,-106.666372,-106.667095,-106.6677,-106.668386,-106.668551,-106.66904,-106.669854,-106.670321,-106.670937,-106.671181,-106.671353,-106.671436,-106.6715,-106.671668,-106.671995,-106.672182,-106.672589,-106.672714,-106.673247,-106.673839,-106.674324,-106.674497,-106.675299,-106.67555,-106.675739,-106.675983,-106.676248,-106.676893,-106.677263,-106.677944,-106.681484,-106.682709,-106.68338,-106.684038,-106.684709,-106.68511,-106.685566,-106.686041,-106.687972,-106.689636,-106.689764,-106.689882],"lat":[35.130944,35.134244,35.136344,35.137833,35.137931,35.138544,35.139014,35.139052,35.139268,35.140591,35.140655,35.141042,35.141119,35.141236,35.141325,35.141444,35.143013,35.144279,35.144322,35.145873,35.145692,35.145597,35.145155,35.145077,35.144774,35.144683,35.144616,35.143966,35.143913,35.143843,35.143702,35.143482,35.143423,35.143357,35.14319,35.143118,35.143053,35.143012,35.142973,35.142491,35.142385,35.142237,35.142153,35.141923,35.141522,35.141234,35.141171,35.141004,35.140981,35.140943,35.140414,35.1404,35.140386,35.14034,35.140118,35.139871,35.139751,35.139661,35.139606,35.139551,35.139481,35.139442,35.139105,35.138833,35.138561,35.138528,35.138278,35.138148,35.137899,35.137769,35.137488,35.137195,35.136966,35.136676,35.136527,35.136373,35.136145,35.13556,35.135182,35.134673,35.134445,35.134327,35.134132,35.133981,35.1338,35.133821,35.133893,35.133932,35.134003,35.134021,35.134264,35.134381,35.134521,35.134581,35.134344,35.134203,35.134052,35.133345,35.131133,35.130999,35.130527,35.130431,35.130151,35.129862,35.129535,35.129395,35.128854,35.12783,35.127773,35.127493,35.127223,35.126525,35.126501,35.125906,35.125301,35.124696,35.123854,35.12395,35.124055,35.124107,35.124096,35.124095,35.124124,35.124089,35.12412,35.124223,35.124268,35.124343,35.12437,35.124392,35.124428,35.124527,35.124584,35.124705,35.12474,35.124887,35.1251,35.125239,35.125271,35.125462,35.125536,35.125592,35.125665,35.125774,35.126038,35.12617,35.126413,35.12775,35.128209,35.128455,35.128712,35.128957,35.129117,35.129556,35.130267,35.13051,35.13072,35.130836,35.130944]}]],[[{"lng":[-106.658384,-106.658344,-106.65832,-106.658137,-106.657581,-106.657158,-106.656581,-106.656333,-106.656118,-106.655914,-106.655739,-106.655602,-106.655379,-106.655197,-106.655066,-106.654726,-106.654582,-106.653992,-106.653848,-106.653231,-106.652589,-106.65175,-106.651657,-106.651488,-106.651225,-106.650766,-106.649968,-106.649726,-106.648919,-106.648622,-106.647349,-106.647181,-106.646542,-106.645857,-106.645564,-106.645426,-106.644842,-106.644299,-106.6425,-106.64129,-106.640739,-106.640164,-106.639501,-106.638896,-106.638159,-106.63789,-106.637494,-106.637437,-106.636684,-106.636183,-106.635549,-106.63493,-106.634119,-106.633484,-106.632516,-106.632372,-106.632207,-106.634094,-106.634346,-106.634509,-106.635511,-106.635578,-106.63575,-106.635797,-106.636223,-106.638072,-106.638872,-106.639125,-106.639504,-106.640417,-106.640535,-106.641023,-106.641713,-106.642859,-106.643985,-106.645105,-106.646629,-106.646977,-106.647185,-106.6476,-106.648554,-106.648953,-106.650248,-106.650686,-106.651051,-106.651785,-106.652258,-106.652691,-106.654045,-106.655361,-106.656036,-106.657383,-106.658379,-106.658357,-106.658384],"lat":[35.134132,35.134327,35.134445,35.134673,35.135182,35.13556,35.136145,35.136373,35.136527,35.136676,35.136966,35.137195,35.137488,35.137769,35.137899,35.138148,35.138278,35.138528,35.138561,35.138833,35.139105,35.139442,35.139481,35.139551,35.139606,35.139661,35.139533,35.139498,35.13938,35.139344,35.139288,35.13927,35.139213,35.13913,35.139095,35.139078,35.139015,35.138956,35.138748,35.138615,35.138593,35.138595,35.138536,35.13849,35.138395,35.138373,35.138342,35.138337,35.138231,35.138208,35.138137,35.138091,35.13796,35.137781,35.137524,35.137486,35.137446,35.132677,35.132041,35.131562,35.128617,35.128675,35.128789,35.128821,35.128993,35.129652,35.129928,35.129992,35.130051,35.130034,35.130032,35.13003,35.130028,35.130325,35.130775,35.131219,35.131785,35.131914,35.13195,35.132096,35.132383,35.132501,35.132801,35.132882,35.132932,35.133049,35.133127,35.133169,35.133305,35.133447,35.133524,35.13366,35.1338,35.133981,35.134132]}]],[[{"lng":[-106.665837,-106.665775,-106.665699,-106.665611,-106.665608,-106.665522,-106.665523,-106.665446,-106.665423,-106.665018,-106.664745,-106.66468,-106.664556,-106.664446,-106.664461,-106.664465,-106.664489,-106.664451,-106.663368,-106.663008,-106.662904,-106.662878,-106.662748,-106.662326,-106.66153,-106.660892,-106.659487,-106.659409,-106.659093,-106.658921,-106.658512,-106.658379,-106.657383,-106.656036,-106.655361,-106.654045,-106.652691,-106.652258,-106.651785,-106.651051,-106.650686,-106.650248,-106.648953,-106.648554,-106.6476,-106.647185,-106.646977,-106.646629,-106.645105,-106.643985,-106.642859,-106.641713,-106.641023,-106.640535,-106.640417,-106.639504,-106.639125,-106.638872,-106.638072,-106.636223,-106.635797,-106.63575,-106.635578,-106.635511,-106.636355,-106.636751,-106.637298,-106.637892,-106.638366,-106.638809,-106.639235,-106.639342,-106.640129,-106.641601,-106.642537,-106.643299,-106.644818,-106.64631,-106.647808,-106.648748,-106.649694,-106.65046,-106.650787,-106.651551,-106.65182,-106.652211,-106.652234,-106.652977,-106.654043,-106.655006,-106.656085,-106.657076,-106.65807,-106.658335,-106.659059,-106.659855,-106.66003,-106.660377,-106.660564,-106.66101,-106.662012,-106.662039,-106.663012,-106.664007,-106.66499,-106.665279,-106.665938,-106.665837],"lat":[35.124696,35.125301,35.125906,35.126501,35.126525,35.127223,35.127493,35.127773,35.12783,35.128854,35.129395,35.129535,35.129862,35.130151,35.130431,35.130527,35.130999,35.131133,35.133345,35.134052,35.134203,35.134344,35.134581,35.134521,35.134381,35.134264,35.134021,35.134003,35.133932,35.133893,35.133821,35.1338,35.13366,35.133524,35.133447,35.133305,35.133169,35.133127,35.133049,35.132932,35.132882,35.132801,35.132501,35.132383,35.132096,35.13195,35.131914,35.131785,35.131219,35.130775,35.130325,35.130028,35.13003,35.130032,35.130034,35.130051,35.129992,35.129928,35.129652,35.128993,35.128821,35.128789,35.128675,35.128617,35.126176,35.124966,35.123606,35.122118,35.12086,35.11962,35.118376,35.118407,35.118653,35.11907,35.119314,35.119512,35.119939,35.120333,35.120733,35.121003,35.121261,35.121473,35.121559,35.121762,35.121833,35.121932,35.121939,35.122159,35.122461,35.122708,35.122854,35.122983,35.123091,35.123125,35.123218,35.123373,35.12342,35.123493,35.123532,35.123553,35.123526,35.123524,35.123459,35.123419,35.123585,35.123667,35.123854,35.124696]}]],[[{"lng":[-106.638809,-106.638366,-106.637892,-106.637298,-106.636751,-106.636355,-106.635511,-106.634509,-106.634346,-106.634094,-106.632207,-106.631162,-106.62949,-106.628357,-106.626946,-106.625245,-106.624678,-106.624227,-106.624153,-106.622912,-106.622743,-106.622048,-106.621384,-106.620336,-106.618772,-106.618247,-106.617563,-106.616735,-106.615842,-106.614738,-106.61433,-106.613818,-106.61349,-106.613002,-106.612422,-106.611905,-106.610932,-106.61041,-106.609829,-106.609628,-106.609455,-106.609013,-106.6086,-106.608235,-106.60756,-106.607236,-106.607172,-106.60712,-106.606906,-106.606769,-106.606072,-106.605446,-106.604813,-106.604067,-106.604084,-106.604087,-106.604117,-106.604127,-106.604134,-106.604133,-106.604129,-106.604113,-106.604118,-106.604105,-106.604116,-106.604101,-106.604098,-106.604102,-106.604098,-106.604119,-106.604123,-106.604132,-106.60417,-106.604182,-106.604189,-106.604152,-106.604188,-106.604183,-106.604183,-106.604181,-106.60418,-106.604179,-106.604185,-106.604212,-106.604197,-106.608266,-106.609068,-106.609641,-106.611443,-106.612858,-106.612907,-106.61297,-106.613097,-106.61365,-106.613821,-106.614945,-106.616083,-106.616881,-106.617722,-106.618552,-106.619705,-106.619733,-106.620577,-106.621224,-106.622486,-106.623818,-106.6273,-106.627365,-106.627787,-106.627727,-106.627717,-106.627708,-106.62771,-106.627734,-106.627727,-106.627663,-106.627568,-106.627431,-106.627037,-106.626817,-106.626574,-106.626291,-106.626114,-106.625864,-106.62563,-106.625366,-106.625196,-106.625049,-106.625226,-106.625732,-106.626038,-106.626273,-106.626363,-106.627454,-106.6297,-106.630663,-106.631632,-106.632588,-106.633663,-106.633856,-106.634561,-106.635658,-106.636906,-106.637737,-106.63829,-106.639235,-106.638809],"lat":[35.11962,35.12086,35.122118,35.123606,35.124966,35.126176,35.128617,35.131562,35.132041,35.132677,35.137446,35.137193,35.136822,35.136641,35.136425,35.136097,35.135969,35.135881,35.135865,35.135592,35.135539,35.135384,35.135313,35.13529,35.135272,35.135306,35.135254,35.135268,35.135292,35.135252,35.13521,35.135114,35.135026,35.134879,35.134503,35.134203,35.133555,35.133203,35.132812,35.132666,35.132556,35.132276,35.131999,35.131771,35.13142,35.131306,35.131283,35.131264,35.131189,35.13114,35.130998,35.130953,35.130939,35.130951,35.129882,35.129745,35.128386,35.127809,35.127411,35.127102,35.126203,35.124338,35.123717,35.1226,35.122006,35.121617,35.120819,35.120113,35.119166,35.116758,35.11652,35.116141,35.11474,35.112935,35.111084,35.109257,35.107466,35.106655,35.106479,35.106364,35.106323,35.106265,35.10615,35.105651,35.105162,35.106079,35.10626,35.106392,35.106806,35.107132,35.107143,35.107158,35.107187,35.107315,35.107354,35.107568,35.107654,35.107664,35.10764,35.107581,35.107438,35.107434,35.107296,35.107182,35.106946,35.106717,35.106164,35.106154,35.106088,35.106314,35.106496,35.106616,35.10732,35.107933,35.10825,35.108794,35.109167,35.109573,35.110642,35.111131,35.111591,35.112026,35.112294,35.112648,35.113001,35.113509,35.113887,35.114249,35.114291,35.11441,35.114483,35.114539,35.114565,35.114883,35.115392,35.115633,35.11587,35.116119,35.116349,35.11641,35.116634,35.117028,35.117534,35.117832,35.118031,35.118376,35.11962]}]],[[{"lng":[-106.641048,-106.640827,-106.640766,-106.64068,-106.640493,-106.640219,-106.6401,-106.640042,-106.639863,-106.639713,-106.639668,-106.639621,-106.639607,-106.639595,-106.639584,-106.63957,-106.639552,-106.63953,-106.639508,-106.6394,-106.639357,-106.63927,-106.639254,-106.639194,-106.639183,-106.639153,-106.639098,-106.638922,-106.638836,-106.638598,-106.63849,-106.638388,-106.638229,-106.638113,-106.638041,-106.637925,-106.637882,-106.637673,-106.637569,-106.637246,-106.637232,-106.637006,-106.636942,-106.636885,-106.63661,-106.636537,-106.636161,-106.636147,-106.636031,-106.635959,-106.635873,-106.635641,-106.635539,-106.635515,-106.635453,-106.635351,-106.635155,-106.634978,-106.634925,-106.634872,-106.634721,-106.63341,-106.63308,-106.632722,-106.632472,-106.632263,-106.63182,-106.631365,-106.631257,-106.631225,-106.630635,-106.629342,-106.628326,-106.628242,-106.627639,-106.627542,-106.627493,-106.625758,-106.622625,-106.622463,-106.622316,-106.622124,-106.622037,-106.620959,-106.618487,-106.617256,-106.617186,-106.617057,-106.613884,-106.613673,-106.613442,-106.613302,-106.613349,-106.613392,-106.613421,-106.6136,-106.613775,-106.613999,-106.614381,-106.614587,-106.61464,-106.614842,-106.615066,-106.615789,-106.616228,-106.616976,-106.617168,-106.617454,-106.617578,-106.617734,-106.61775,-106.617909,-106.618099,-106.618187,-106.618351,-106.618479,-106.618643,-106.618702,-106.618789,-106.618972,-106.619001,-106.619137,-106.619275,-106.61932,-106.619354,-106.619477,-106.61985,-106.620054,-106.620352,-106.62045,-106.620554,-106.620872,-106.620889,-106.620923,-106.620984,-106.621059,-106.621244,-106.621395,-106.621634,-106.622171,-106.622566,-106.622636,-106.622682,-106.62318,-106.623294,-106.623326,-106.623381,-106.623505,-106.623793,-106.623835,-106.62395,-106.623981,-106.624525,-106.624638,-106.625228,-106.625546,-106.625695,-106.625781,-106.625804,-106.625832,-106.625854,-106.625988,-106.626081,-106.626158,-106.626582,-106.627232,-106.627506,-106.627637,-106.627727,-106.62802,-106.628357,-106.62949,-106.631162,-106.632207,-106.632372,-106.632516,-106.633484,-106.634119,-106.63493,-106.635549,-106.636183,-106.636684,-106.637437,-106.637494,-106.63789,-106.638159,-106.638896,-106.639501,-106.640164,-106.640739,-106.64129,-106.641048],"lat":[35.139856,35.14116,35.141244,35.141728,35.142589,35.143957,35.144695,35.145336,35.146105,35.146834,35.147051,35.147282,35.147347,35.147405,35.14746,35.14753,35.147622,35.147731,35.147837,35.148352,35.148591,35.149082,35.149173,35.149519,35.149582,35.149778,35.150141,35.150887,35.151347,35.152594,35.15316,35.153513,35.154329,35.154852,35.155339,35.155911,35.156118,35.157258,35.157934,35.159442,35.15966,35.160704,35.160999,35.161352,35.162777,35.163069,35.165065,35.165138,35.165625,35.166148,35.166623,35.167706,35.168242,35.168403,35.168765,35.169252,35.17039,35.171364,35.171602,35.1719,35.172488,35.17373,35.174043,35.17437,35.174599,35.17479,35.175194,35.175622,35.175724,35.175756,35.176305,35.177512,35.178444,35.178521,35.17907,35.17916,35.179204,35.178825,35.178235,35.178205,35.178186,35.178151,35.178135,35.177938,35.177118,35.176821,35.176802,35.176769,35.176053,35.17598,35.175936,35.17591,35.175799,35.175702,35.175632,35.175211,35.1748,35.174273,35.17333,35.172782,35.172641,35.172229,35.17194,35.171204,35.170756,35.169985,35.169705,35.169214,35.168988,35.168697,35.168639,35.16805,35.167183,35.166784,35.166205,35.165672,35.165123,35.164939,35.164666,35.164056,35.163968,35.163554,35.163162,35.163035,35.162928,35.162543,35.161538,35.161054,35.160319,35.160078,35.159791,35.15892,35.158873,35.158779,35.158612,35.158405,35.157903,35.15749,35.156845,35.155035,35.153704,35.153466,35.153312,35.151758,35.151404,35.151297,35.151115,35.150792,35.150034,35.149939,35.149676,35.149605,35.148278,35.147969,35.146558,35.145648,35.145259,35.145036,35.144959,35.144864,35.144791,35.144343,35.144033,35.14376,35.142259,35.139878,35.139024,35.138573,35.138305,35.137469,35.136641,35.136822,35.137193,35.137446,35.137486,35.137524,35.137781,35.13796,35.138091,35.138137,35.138208,35.138231,35.138337,35.138342,35.138373,35.138395,35.13849,35.138536,35.138595,35.138593,35.138615,35.139856]}]],[[{"lng":[-106.678015,-106.677562,-106.67693,-106.676436,-106.676398,-106.675901,-106.674805,-106.672412,-106.670858,-106.669706,-106.669201,-106.669013,-106.668532,-106.668583,-106.668644,-106.667984,-106.667022,-106.666718,-106.665501,-106.664166,-106.660724,-106.659368,-106.654118,-106.653905,-106.653715,-106.653214,-106.652478,-106.652179,-106.652849,-106.652918,-106.652988,-106.653081,-106.652918,-106.652777,-106.652772,-106.652766,-106.652549,-106.651805,-106.651785,-106.651147,-106.648539,-106.647122,-106.645607,-106.644254,-106.643279,-106.642356,-106.641425,-106.640752,-106.636237,-106.633709,-106.627493,-106.627542,-106.627639,-106.628242,-106.628326,-106.629342,-106.630635,-106.631225,-106.631257,-106.631365,-106.63182,-106.632263,-106.632472,-106.632722,-106.63308,-106.63341,-106.634721,-106.634872,-106.634925,-106.634978,-106.635155,-106.635351,-106.635453,-106.635515,-106.635539,-106.635641,-106.635873,-106.635959,-106.636031,-106.636147,-106.636161,-106.636537,-106.63661,-106.636885,-106.636942,-106.637006,-106.637232,-106.637246,-106.637569,-106.637673,-106.637882,-106.637925,-106.638041,-106.638113,-106.638229,-106.638388,-106.63849,-106.638598,-106.638836,-106.638922,-106.639098,-106.639153,-106.639183,-106.639194,-106.639254,-106.63927,-106.639357,-106.6394,-106.639508,-106.63953,-106.639552,-106.63957,-106.639584,-106.639595,-106.639607,-106.639621,-106.639668,-106.639713,-106.639863,-106.640042,-106.6401,-106.640219,-106.640493,-106.64068,-106.640766,-106.640827,-106.641048,-106.64129,-106.6425,-106.644299,-106.644842,-106.645426,-106.645564,-106.645857,-106.646542,-106.647181,-106.647349,-106.648622,-106.648919,-106.649726,-106.649968,-106.650766,-106.651362,-106.651728,-106.652312,-106.653061,-106.653304,-106.653375,-106.653457,-106.65637,-106.656577,-106.656705,-106.657606,-106.657947,-106.659323,-106.66123,-106.662329,-106.662688,-106.663321,-106.663774,-106.665834,-106.666001,-106.666175,-106.666452,-106.666861,-106.667461,-106.668074,-106.668711,-106.669934,-106.670712,-106.671095,-106.671364,-106.674642,-106.674841,-106.675108,-106.676005,-106.676235,-106.677543,-106.677821,-106.678359,-106.678015],"lat":[35.14609,35.146497,35.146723,35.147067,35.147059,35.147439,35.147714,35.150228,35.152063,35.154274,35.155283,35.155659,35.156302,35.156453,35.156632,35.157916,35.159201,35.159586,35.16255,35.163948,35.165883,35.166647,35.172587,35.173175,35.173789,35.174581,35.175744,35.176843,35.178708,35.178898,35.179087,35.179343,35.180789,35.182038,35.182083,35.182171,35.182199,35.182295,35.182298,35.182375,35.182759,35.182922,35.182988,35.18296,35.182888,35.182703,35.182513,35.182366,35.181317,35.180685,35.179204,35.17916,35.17907,35.178521,35.178444,35.177512,35.176305,35.175756,35.175724,35.175622,35.175194,35.17479,35.174599,35.17437,35.174043,35.17373,35.172488,35.1719,35.171602,35.171364,35.17039,35.169252,35.168765,35.168403,35.168242,35.167706,35.166623,35.166148,35.165625,35.165138,35.165065,35.163069,35.162777,35.161352,35.160999,35.160704,35.15966,35.159442,35.157934,35.157258,35.156118,35.155911,35.155339,35.154852,35.154329,35.153513,35.15316,35.152594,35.151347,35.150887,35.150141,35.149778,35.149582,35.149519,35.149173,35.149082,35.148591,35.148352,35.147837,35.147731,35.147622,35.14753,35.14746,35.147405,35.147347,35.147282,35.147051,35.146834,35.146105,35.145336,35.144695,35.143957,35.142589,35.141728,35.141244,35.14116,35.139856,35.138615,35.138748,35.138956,35.139015,35.139078,35.139095,35.13913,35.139213,35.13927,35.139288,35.139344,35.13938,35.139498,35.139533,35.139661,35.139751,35.139871,35.140118,35.14034,35.140386,35.1404,35.140414,35.140943,35.140981,35.141004,35.141171,35.141234,35.141522,35.141923,35.142153,35.142237,35.142385,35.142491,35.142973,35.143012,35.143053,35.143118,35.14319,35.143357,35.143423,35.143482,35.143702,35.143843,35.143913,35.143966,35.144616,35.144683,35.144774,35.145077,35.145155,35.145597,35.145692,35.145873,35.14609]}]],[[{"lng":[-106.652758,-106.652721,-106.652512,-106.65244,-106.652158,-106.651765,-106.651406,-106.651269,-106.650894,-106.650445,-106.649689,-106.648366,-106.648064,-106.647804,-106.647576,-106.647265,-106.64672,-106.646673,-106.646514,-106.646093,-106.645841,-106.645801,-106.645631,-106.6455,-106.645378,-106.645264,-106.645212,-106.645081,-106.645056,-106.644953,-106.644798,-106.644779,-106.64468,-106.644611,-106.644322,-106.644116,-106.644074,-106.644045,-106.643924,-106.643762,-106.643679,-106.643634,-106.643566,-106.64354,-106.64347,-106.643376,-106.643271,-106.643231,-106.643165,-106.642984,-106.642944,-106.642914,-106.642881,-106.642868,-106.642816,-106.642784,-106.64271,-106.642646,-106.642579,-106.642563,-106.642449,-106.641818,-106.641552,-106.641361,-106.640973,-106.640556,-106.64049,-106.640476,-106.640466,-106.640443,-106.640341,-106.640097,-106.640006,-106.639893,-106.639845,-106.639634,-106.639611,-106.639105,-106.639013,-106.638863,-106.638403,-106.638347,-106.638308,-106.638143,-106.637811,-106.635958,-106.635389,-106.633909,-106.63333,-106.632394,-106.632338,-106.632306,-106.632196,-106.631635,-106.631599,-106.631556,-106.630849,-106.630801,-106.628109,-106.627962,-106.627441,-106.627148,-106.6261,-106.625289,-106.623713,-106.623511,-106.622997,-106.62292,-106.622682,-106.622599,-106.622368,-106.622221,-106.621783,-106.620699,-106.620042,-106.619686,-106.619329,-106.618546,-106.618483,-106.618423,-106.616478,-106.614991,-106.614262,-106.613396,-106.613085,-106.610432,-106.609911,-106.609794,-106.609624,-106.609548,-106.608162,-106.604754,-106.602296,-106.60233,-106.60146,-106.601407,-106.601167,-106.600509,-106.600321,-106.599932,-106.599678,-106.599871,-106.600146,-106.600189,-106.600521,-106.600638,-106.600693,-106.600735,-106.600776,-106.600783,-106.600827,-106.60094,-106.601233,-106.601267,-106.60138,-106.601445,-106.601474,-106.601469,-106.601441,-106.601258,-106.601259,-106.601262,-106.601277,-106.601303,-106.601311,-106.60138,-106.601424,-106.601443,-106.601452,-106.601486,-106.60158,-106.601923,-106.602112,-106.602339,-106.602454,-106.602522,-106.602558,-106.602641,-106.602702,-106.602746,-106.60276,-106.602809,-106.602829,-106.602884,-106.602984,-106.60315,-106.603266,-106.60332,-106.603494,-106.603629,-106.603748,-106.603857,-106.60392,-106.603941,-106.604073,-106.604131,-106.604187,-106.604386,-106.604765,-106.605104,-106.605267,-106.60545,-106.60577,-106.605818,-106.606045,-106.606105,-106.606416,-106.606461,-106.606806,-106.606867,-106.606899,-106.6086,-106.608748,-106.609155,-106.609445,-106.609671,-106.609821,-106.610026,-106.610237,-106.610411,-106.610616,-106.610862,-106.610897,-106.611039,-106.611109,-106.611145,-106.611227,-106.611321,-106.611461,-106.611664,-106.612817,-106.613111,-106.613169,-106.613302,-106.613442,-106.613673,-106.613884,-106.617057,-106.617186,-106.617256,-106.618487,-106.620959,-106.622037,-106.622124,-106.622316,-106.622463,-106.622625,-106.625758,-106.627493,-106.633709,-106.636237,-106.640752,-106.641425,-106.642356,-106.643279,-106.644254,-106.645607,-106.647122,-106.648539,-106.651147,-106.651785,-106.651805,-106.652549,-106.652766,-106.652758],"lat":[35.182281,35.182416,35.18317,35.183432,35.184038,35.184545,35.185009,35.185187,35.185712,35.186342,35.186671,35.187714,35.187927,35.188156,35.188281,35.188451,35.188977,35.188984,35.189176,35.189201,35.189641,35.189695,35.190008,35.190305,35.190554,35.190893,35.191034,35.191281,35.191345,35.191542,35.191869,35.191938,35.192129,35.192295,35.192843,35.1933,35.193421,35.193476,35.193741,35.19403,35.194164,35.194291,35.194408,35.194465,35.194645,35.194726,35.194799,35.194841,35.19493,35.195317,35.195416,35.195523,35.195791,35.19586,35.19606,35.196257,35.196329,35.196648,35.196981,35.197065,35.197333,35.19831,35.198779,35.199196,35.199868,35.2006,35.200659,35.200714,35.200791,35.200862,35.201157,35.201509,35.201596,35.20165,35.20171,35.202092,35.202136,35.202466,35.202541,35.202624,35.202851,35.202872,35.202891,35.203092,35.20323,35.203754,35.203914,35.204222,35.204341,35.204555,35.204546,35.204538,35.204571,35.20467,35.204699,35.20473,35.204882,35.204864,35.205421,35.205452,35.205559,35.205722,35.206306,35.206756,35.20808,35.208251,35.208581,35.20879,35.20872,35.208694,35.208626,35.208584,35.208442,35.208123,35.207907,35.20779,35.207674,35.207422,35.207403,35.207389,35.206777,35.20628,35.206039,35.205749,35.205639,35.205248,35.205184,35.20516,35.205126,35.205111,35.204885,35.204552,35.204313,35.204769,35.204609,35.204232,35.204181,35.204133,35.204124,35.204085,35.204061,35.20388,35.203613,35.203571,35.203197,35.202998,35.202852,35.202727,35.202456,35.202378,35.202136,35.201742,35.201106,35.201032,35.200799,35.200632,35.200409,35.200373,35.200177,35.199587,35.199443,35.199285,35.199191,35.199039,35.198988,35.198706,35.198359,35.198058,35.197921,35.197602,35.197279,35.196592,35.196214,35.19576,35.195512,35.195322,35.195222,35.194868,35.19461,35.194345,35.194122,35.193904,35.193816,35.193646,35.193472,35.193282,35.193118,35.193041,35.192714,35.192379,35.191936,35.19137,35.191043,35.190928,35.190199,35.189984,35.189777,35.18921,35.188283,35.187691,35.187435,35.187148,35.186684,35.186616,35.186293,35.186208,35.18582,35.185764,35.185426,35.185366,35.185339,35.183953,35.183831,35.183479,35.183172,35.182894,35.18272,35.182451,35.182152,35.181867,35.181465,35.180931,35.180823,35.180391,35.179918,35.179659,35.179288,35.178955,35.178592,35.178189,35.176698,35.176283,35.176203,35.17591,35.175936,35.17598,35.176053,35.176769,35.176802,35.176821,35.177118,35.177938,35.178135,35.178151,35.178186,35.178205,35.178235,35.178825,35.179204,35.180685,35.181317,35.182366,35.182513,35.182703,35.182888,35.18296,35.182988,35.182922,35.182759,35.182375,35.182298,35.182295,35.182199,35.182171,35.182281]}]],[[{"lng":[-106.586438,-106.586437,-106.586426,-106.585197,-106.584615,-106.584086,-106.58353,-106.583146,-106.582603,-106.582114,-106.581638,-106.581478,-106.580684,-106.57944,-106.578733,-106.578,-106.577269,-106.576916,-106.576561,-106.576188,-106.575828,-106.574364,-106.574212,-106.573418,-106.572062,-106.570243,-106.568884,-106.566963,-106.566381,-106.564791,-106.563871,-106.562835,-106.56138,-106.559718,-106.558805,-106.558701,-106.557656,-106.556566,-106.555109,-106.553852,-106.552855,-106.55242,-106.551706,-106.551677,-106.551459,-106.551075,-106.551066,-106.55105,-106.551049,-106.551035,-106.551027,-106.551061,-106.551044,-106.551033,-106.551031,-106.551028,-106.551001,-106.551003,-106.551003,-106.551002,-106.550995,-106.553033,-106.554978,-106.555396,-106.557752,-106.559864,-106.560958,-106.562345,-106.562621,-106.563225,-106.56382,-106.563849,-106.564238,-106.566897,-106.568664,-106.568687,-106.568722,-106.568695,-106.568678,-106.568673,-106.568685,-106.568688,-106.56865,-106.568667,-106.568666,-106.568661,-106.569236,-106.570177,-106.570974,-106.571194,-106.571414,-106.571624,-106.571825,-106.572445,-106.573105,-106.573311,-106.574373,-106.574885,-106.57537,-106.576666,-106.576933,-106.577544,-106.57791,-106.57805,-106.578196,-106.578458,-106.578536,-106.57875,-106.579471,-106.580271,-106.580844,-106.581469,-106.581999,-106.582951,-106.583088,-106.585277,-106.586467,-106.586438],"lat":[35.147097,35.147232,35.148036,35.148061,35.147965,35.14788,35.147751,35.147622,35.147374,35.14718,35.146953,35.146878,35.146532,35.145939,35.145688,35.145484,35.145391,35.145379,35.145367,35.145368,35.145369,35.145341,35.145341,35.145343,35.145347,35.145385,35.145323,35.145309,35.145305,35.14531,35.145312,35.14531,35.145308,35.145287,35.1453,35.145301,35.145267,35.145282,35.145582,35.146124,35.144678,35.144,35.142918,35.142874,35.1423,35.141217,35.139987,35.1392,35.139154,35.138417,35.138043,35.137487,35.136937,35.136583,35.136094,35.135291,35.134398,35.133942,35.13316,35.132702,35.130699,35.130745,35.130732,35.130732,35.130733,35.130764,35.130756,35.13075,35.130749,35.130746,35.130744,35.130744,35.130748,35.130746,35.130763,35.131656,35.133223,35.133995,35.134279,35.134374,35.134834,35.135658,35.136793,35.137524,35.137712,35.138405,35.138404,35.138454,35.138722,35.138824,35.138942,35.139072,35.139211,35.139684,35.140222,35.140391,35.141301,35.141708,35.141975,35.142326,35.142407,35.142593,35.14279,35.142865,35.142944,35.143132,35.143188,35.143341,35.143801,35.144335,35.144618,35.144771,35.144868,35.144908,35.144907,35.14488,35.144901,35.147097]}]],[[{"lng":[-106.56023,-106.559969,-106.559987,-106.560005,-106.560015,-106.560015,-106.560017,-106.560019,-106.560031,-106.559946,-106.559936,-106.557477,-106.553915,-106.551096,-106.550739,-106.547575,-106.545191,-106.542338,-106.542244,-106.542245,-106.542254,-106.542265,-106.542263,-106.542264,-106.542266,-106.542253,-106.542253,-106.54225,-106.542254,-106.542253,-106.542252,-106.542249,-106.54225,-106.542254,-106.542237,-106.542248,-106.542246,-106.542248,-106.54225,-106.542251,-106.54225,-106.550086,-106.553654,-106.555277,-106.559901,-106.559916,-106.559954,-106.559959,-106.559959,-106.559954,-106.559956,-106.55999,-106.559977,-106.559962,-106.559978,-106.55997,-106.560297,-106.56023],"lat":[35.166307,35.166302,35.167006,35.167785,35.170013,35.170088,35.170635,35.17108,35.172779,35.174098,35.174268,35.174175,35.174052,35.174058,35.174034,35.174144,35.174248,35.174426,35.174487,35.174341,35.173476,35.172792,35.17228,35.17169,35.171088,35.169516,35.167454,35.166411,35.166231,35.165577,35.164995,35.164209,35.164035,35.163434,35.162726,35.161958,35.161164,35.160584,35.160021,35.15968,35.15955,35.159486,35.159458,35.159469,35.159456,35.159755,35.160788,35.161803,35.161873,35.162429,35.163042,35.163784,35.164334,35.164615,35.164717,35.166193,35.166308,35.166307]}]],[[{"lng":[-106.586471,-106.586456,-106.586455,-106.58638,-106.586401,-106.58641,-106.586408,-106.586453,-106.586448,-106.58646,-106.586461,-106.586426,-106.586468,-106.586467,-106.586467,-106.585277,-106.583088,-106.582951,-106.581999,-106.581469,-106.580844,-106.580271,-106.579471,-106.57875,-106.578536,-106.578458,-106.578196,-106.57805,-106.57791,-106.577544,-106.576933,-106.576666,-106.57537,-106.574885,-106.574373,-106.573311,-106.573105,-106.572445,-106.571825,-106.571624,-106.571414,-106.571194,-106.570974,-106.570177,-106.569236,-106.568661,-106.568666,-106.568667,-106.56865,-106.568688,-106.568685,-106.568673,-106.568678,-106.568695,-106.568722,-106.568687,-106.568664,-106.570688,-106.572614,-106.574018,-106.575731,-106.577652,-106.580767,-106.581272,-106.582474,-106.586482,-106.586471],"lat":[35.132021,35.132845,35.133669,35.134385,35.135377,35.135798,35.138594,35.141444,35.141673,35.141966,35.141994,35.143021,35.14357,35.14415,35.144901,35.14488,35.144907,35.144908,35.144868,35.144771,35.144618,35.144335,35.143801,35.143341,35.143188,35.143132,35.142944,35.142865,35.14279,35.142593,35.142407,35.142326,35.141975,35.141708,35.141301,35.140391,35.140222,35.139684,35.139211,35.139072,35.138942,35.138824,35.138722,35.138454,35.138404,35.138405,35.137712,35.137524,35.136793,35.135658,35.134834,35.134374,35.134279,35.133995,35.133223,35.131656,35.130763,35.130773,35.130801,35.130819,35.130845,35.130857,35.130904,35.130911,35.13093,35.13093,35.132021]}]],[[{"lng":[-106.561039,-106.560816,-106.560304,-106.55986,-106.559861,-106.559872,-106.559901,-106.555277,-106.553654,-106.550086,-106.54225,-106.537528,-106.533726,-106.533435,-106.533122,-106.532587,-106.528601,-106.528099,-106.525909,-106.524662,-106.524388,-106.524414,-106.524521,-106.524468,-106.524502,-106.524543,-106.52458,-106.524618,-106.524805,-106.524818,-106.524927,-106.525415,-106.526702,-106.526928,-106.52938,-106.530527,-106.531247,-106.531885,-106.531957,-106.532467,-106.532914,-106.533406,-106.533845,-106.534447,-106.535511,-106.53648,-106.537449,-106.538279,-106.538304,-106.538963,-106.53942,-106.539664,-106.539857,-106.539867,-106.542147,-106.543868,-106.546065,-106.546404,-106.547816,-106.550914,-106.553852,-106.554851,-106.555112,-106.55539,-106.556039,-106.556331,-106.556749,-106.558765,-106.559489,-106.55974,-106.560435,-106.56068,-106.560977,-106.561029,-106.561039],"lat":[35.154077,35.155013,35.156321,35.157685,35.157824,35.158894,35.159456,35.159469,35.159458,35.159486,35.15955,35.159541,35.159477,35.159747,35.159746,35.159744,35.15973,35.159728,35.15972,35.159716,35.158907,35.158038,35.154364,35.153634,35.153403,35.153133,35.152881,35.152625,35.152002,35.151959,35.151734,35.150724,35.149068,35.148778,35.145703,35.146291,35.146675,35.146971,35.147013,35.14731,35.147394,35.147408,35.14741,35.147426,35.147454,35.147554,35.147823,35.148297,35.148317,35.148862,35.149505,35.14995,35.150733,35.151317,35.151023,35.150362,35.149429,35.14929,35.148708,35.147351,35.146124,35.147409,35.147601,35.147807,35.148332,35.148568,35.148971,35.150436,35.150996,35.151153,35.151895,35.152427,35.153158,35.153935,35.154077]}]],[[{"lng":[-106.553852,-106.550914,-106.547816,-106.546404,-106.546065,-106.543868,-106.542147,-106.539867,-106.539857,-106.539664,-106.53942,-106.538963,-106.538304,-106.538279,-106.537449,-106.53648,-106.535511,-106.534447,-106.533845,-106.533406,-106.532914,-106.532467,-106.531957,-106.531885,-106.531247,-106.530527,-106.52938,-106.530213,-106.531477,-106.531695,-106.53208,-106.532422,-106.532772,-106.532865,-106.533121,-106.533188,-106.533363,-106.533372,-106.533379,-106.533398,-106.533402,-106.533406,-106.5334,-106.53335,-106.533388,-106.533387,-106.533476,-106.53362,-106.533859,-106.533944,-106.534081,-106.534328,-106.534606,-106.535101,-106.535248,-106.538787,-106.539716,-106.540099,-106.540175,-106.540318,-106.541115,-106.541402,-106.541664,-106.541922,-106.542181,-106.542926,-106.545556,-106.545687,-106.545903,-106.546481,-106.546706,-106.546855,-106.547123,-106.547758,-106.547974,-106.548313,-106.549955,-106.550195,-106.550367,-106.550528,-106.550658,-106.551035,-106.551049,-106.55105,-106.551066,-106.551075,-106.551459,-106.551677,-106.551706,-106.55242,-106.552855,-106.553852],"lat":[35.146124,35.147351,35.148708,35.14929,35.149429,35.150362,35.151023,35.151317,35.150733,35.14995,35.149505,35.148862,35.148317,35.148297,35.147823,35.147554,35.147454,35.147426,35.14741,35.147408,35.147394,35.14731,35.147013,35.146971,35.146675,35.146291,35.145703,35.144713,35.143107,35.142784,35.142301,35.141786,35.141225,35.141042,35.140538,35.140086,35.138894,35.138069,35.137924,35.137413,35.137294,35.137177,35.137111,35.136557,35.136421,35.136335,35.136363,35.136334,35.136556,35.136635,35.136728,35.136819,35.136955,35.137136,35.137249,35.137337,35.137368,35.137384,35.137394,35.137374,35.13724,35.137205,35.1372,35.137202,35.137203,35.137208,35.137242,35.137256,35.137326,35.137582,35.137681,35.137767,35.137876,35.138089,35.138142,35.138163,35.138223,35.138251,35.138301,35.13838,35.138403,35.138417,35.139154,35.1392,35.139987,35.141217,35.1423,35.142874,35.142918,35.144,35.144678,35.146124]}]],[[{"lng":[-106.551061,-106.551027,-106.551035,-106.550658,-106.550528,-106.550367,-106.550195,-106.549955,-106.548313,-106.547974,-106.547758,-106.547123,-106.546855,-106.546706,-106.546481,-106.545903,-106.545687,-106.545556,-106.542926,-106.542181,-106.541922,-106.541664,-106.541402,-106.541115,-106.540318,-106.540175,-106.540099,-106.539716,-106.538787,-106.535248,-106.535101,-106.534606,-106.534328,-106.534081,-106.533944,-106.533859,-106.53362,-106.533476,-106.533387,-106.533378,-106.53339,-106.533355,-106.533348,-106.533331,-106.533326,-106.533336,-106.534564,-106.535829,-106.537705,-106.538999,-106.539932,-106.54214,-106.545056,-106.546083,-106.547719,-106.550995,-106.551002,-106.551003,-106.551003,-106.551001,-106.551028,-106.551031,-106.551033,-106.551044,-106.551061],"lat":[35.137487,35.138043,35.138417,35.138403,35.13838,35.138301,35.138251,35.138223,35.138163,35.138142,35.138089,35.137876,35.137767,35.137681,35.137582,35.137326,35.137256,35.137242,35.137208,35.137203,35.137202,35.1372,35.137205,35.13724,35.137374,35.137394,35.137384,35.137368,35.137337,35.137249,35.137136,35.136955,35.136819,35.136728,35.136635,35.136556,35.136334,35.136363,35.136335,35.134707,35.134385,35.134021,35.133326,35.132641,35.131365,35.130644,35.130649,35.130654,35.130644,35.130673,35.130654,35.13067,35.130678,35.13067,35.130694,35.130699,35.132702,35.13316,35.133942,35.134398,35.135291,35.136094,35.136583,35.136937,35.137487]}]],[[{"lng":[-106.533378,-106.533387,-106.533131,-106.532874,-106.532763,-106.53253,-106.532413,-106.532082,-106.531931,-106.531815,-106.531767,-106.531664,-106.531317,-106.531036,-106.530838,-106.530531,-106.530277,-106.52995,-106.529864,-106.529226,-106.529204,-106.528669,-106.528595,-106.527764,-106.527211,-106.526413,-106.525751,-106.525093,-106.524495,-106.524393,-106.52392,-106.523514,-106.523122,-106.522653,-106.522454,-106.521484,-106.520414,-106.519803,-106.519221,-106.51822,-106.516188,-106.516055,-106.515775,-106.515649,-106.515511,-106.515421,-106.515344,-106.515039,-106.514962,-106.514852,-106.514741,-106.514704,-106.514641,-106.514193,-106.513968,-106.513123,-106.512326,-106.512056,-106.511878,-106.511603,-106.511492,-106.511367,-106.511233,-106.510606,-106.51043,-106.510103,-106.509442,-106.509166,-106.508989,-106.508463,-106.508352,-106.508187,-106.507536,-106.507502,-106.507149,-106.506962,-106.506545,-106.506457,-106.506336,-106.506258,-106.506102,-106.505556,-106.505345,-106.50501,-106.504807,-106.504567,-106.504474,-106.504319,-106.504261,-106.504178,-106.503998,-106.503775,-106.503664,-106.503456,-106.503358,-106.503246,-106.503046,-106.502933,-106.502841,-106.502587,-106.502381,-106.502153,-106.501894,-106.501478,-106.501274,-106.501029,-106.500837,-106.500748,-106.500535,-106.500068,-106.499878,-106.499789,-106.49969,-106.499483,-106.498935,-106.49862,-106.498491,-106.498262,-106.498097,-106.497893,-106.497873,-106.49785,-106.497873,-106.497862,-106.497898,-106.497872,-106.497886,-106.498018,-106.498078,-106.500258,-106.501123,-106.501991,-106.502466,-106.504484,-106.504861,-106.506028,-106.506873,-106.50795,-106.511276,-106.512543,-106.515082,-106.515681,-106.518654,-106.520449,-106.522302,-106.524512,-106.5262,-106.527492,-106.529338,-106.531054,-106.531402,-106.533336,-106.533326,-106.533331,-106.533348,-106.533355,-106.53339,-106.533378],"lat":[35.134707,35.136335,35.136253,35.136143,35.136104,35.136024,35.135946,35.135781,35.13572,35.135837,35.135654,35.135613,35.135545,35.135472,35.135475,35.135499,35.135507,35.135468,35.135447,35.135279,35.135279,35.135194,35.135183,35.135144,35.135223,35.135391,35.135458,35.135468,35.135431,35.135425,35.13544,35.135454,35.13551,35.135576,35.13563,35.135895,35.136206,35.136353,35.136565,35.136817,35.137471,35.137511,35.13765,35.137712,35.137834,35.137866,35.137874,35.137844,35.13784,35.137846,35.137868,35.13788,35.137901,35.138064,35.138164,35.138583,35.138915,35.139031,35.139078,35.139104,35.139126,35.139202,35.139242,35.139283,35.139286,35.139265,35.139302,35.139337,35.139367,35.139563,35.139586,35.139598,35.139684,35.139689,35.13973,35.139741,35.139744,35.139752,35.139763,35.139788,35.139817,35.139788,35.139836,35.139948,35.14005,35.140229,35.140315,35.140536,35.140595,35.140702,35.140795,35.140867,35.140889,35.140883,35.140875,35.140865,35.140857,35.140888,35.140931,35.141078,35.141178,35.141251,35.141298,35.141354,35.141391,35.1414,35.141438,35.141435,35.141407,35.141407,35.141418,35.141414,35.141393,35.14131,35.141152,35.140983,35.140904,35.140803,35.140773,35.140737,35.139939,35.138494,35.137728,35.135361,35.13447,35.133403,35.130655,35.130652,35.130651,35.130651,35.130658,35.130658,35.130656,35.130652,35.130656,35.13067,35.130673,35.130676,35.130689,35.130677,35.130684,35.13066,35.130684,35.130685,35.130687,35.130692,35.130651,35.130652,35.130654,35.13065,35.130649,35.130644,35.131365,35.132641,35.133326,35.134021,35.134385,35.134707]}]],[[{"lng":[-106.499683,-106.49929,-106.498147,-106.498194,-106.497632,-106.497139,-106.496933,-106.496772,-106.496365,-106.496313,-106.496299,-106.496245,-106.49623,-106.496215,-106.496229,-106.496169,-106.49623,-106.496242,-106.496194,-106.496084,-106.495914,-106.495215,-106.494721,-106.49442,-106.494012,-106.493616,-106.493183,-106.492284,-106.492024,-106.491681,-106.491279,-106.490753,-106.489507,-106.488913,-106.488172,-106.487647,-106.487355,-106.486942,-106.486652,-106.486406,-106.485328,-106.484624,-106.484274,-106.484216,-106.484077,-106.483855,-106.483743,-106.483511,-106.483212,-106.482958,-106.482546,-106.482279,-106.482046,-106.481823,-106.481677,-106.480785,-106.480572,-106.480405,-106.480296,-106.480193,-106.48006,-106.479926,-106.479858,-106.479777,-106.479675,-106.479584,-106.479472,-106.478769,-106.478657,-106.478444,-106.47832,-106.478184,-106.478037,-106.477857,-106.477656,-106.477443,-106.477232,-106.476772,-106.476051,-106.475644,-106.475507,-106.475383,-106.475282,-106.475065,-106.474798,-106.474673,-106.474525,-106.474378,-106.474222,-106.474089,-106.473966,-106.473841,-106.473716,-106.473559,-106.473369,-106.473122,-106.472875,-106.472705,-106.472536,-106.47232,-106.472171,-106.472066,-106.471938,-106.471865,-106.4718,-106.471743,-106.471481,-106.471397,-106.471325,-106.471239,-106.471152,-106.471054,-106.470971,-106.470844,-106.470754,-106.470599,-106.470443,-106.470342,-106.470239,-106.470147,-106.470066,-106.469953,-106.469832,-106.46971,-106.469566,-106.469509,-106.469439,-106.469403,-106.469364,-106.469347,-106.469262,-106.469121,-106.46904,-106.468914,-106.468595,-106.468301,-106.468153,-106.468007,-106.467727,-106.46756,-106.467107,-106.466964,-106.466819,-106.466673,-106.466549,-106.466379,-106.466231,-106.466083,-106.465959,-106.465836,-106.465658,-106.465246,-106.465024,-106.464869,-106.464713,-106.464545,-106.46442,-106.464272,-106.463778,-106.463625,-106.46352,-106.463302,-106.46321,-106.463117,-106.463045,-106.462788,-106.462741,-106.462625,-106.462499,-106.462373,-106.462238,-106.462055,-106.461578,-106.461125,-106.461011,-106.46092,-106.460737,-106.460647,-106.460535,-106.460388,-106.460276,-106.460209,-106.46014,-106.460078,-106.459933,-106.459768,-106.459031,-106.458678,-106.458379,-106.458225,-106.457654,-106.457125,-106.457036,-106.456967,-106.456521,-106.456266,-106.456003,-106.455822,-106.455719,-106.455661,-106.455613,-106.455539,-106.455298,-106.45524,-106.455164,-106.454976,-106.454872,-106.454737,-106.454549,-106.454057,-106.453955,-106.453855,-106.453711,-106.45323,-106.452846,-106.452737,-106.452575,-106.452249,-106.452029,-106.451884,-106.451493,-106.451277,-106.45112,-106.450795,-106.45047,-106.450097,-106.449893,-106.449756,-106.449731,-106.44974,-106.449747,-106.449786,-106.449947,-106.449985,-106.450005,-106.449953,-106.449904,-106.449823,-106.449732,-106.449608,-106.449419,-106.449008,-106.448498,-106.448211,-106.447835,-106.447435,-106.447324,-106.446983,-106.446506,-106.446326,-106.44619,-106.446014,-106.445847,-106.445844,-106.44585,-106.44591,-106.446105,-106.446297,-106.446416,-106.446432,-106.446404,-106.446377,-106.446218,-106.446148,-106.446089,-106.445993,-106.445865,-106.445717,-106.445524,-106.445402,-106.445312,-106.44474,-106.444629,-106.44454,-106.444403,-106.444353,-106.444153,-106.444084,-106.443994,-106.443927,-106.443761,-106.443604,-106.443536,-106.443431,-106.44316,-106.443004,-106.442914,-106.442885,-106.442865,-106.442871,-106.442889,-106.442954,-106.443378,-106.443448,-106.443455,-106.443346,-106.443149,-106.442942,-106.442896,-106.44281,-106.442735,-106.442541,-106.442491,-106.442484,-106.442404,-106.44236,-106.442358,-106.442315,-106.436749,-106.436417,-106.43418,-106.432814,-106.430266,-106.425647,-106.422623,-106.419745,-106.418286,-106.415641,-106.415479,-106.414571,-106.41563,-106.41421,-106.414025,-106.413953,-106.415216,-106.414953,-106.41655,-106.424308,-106.42769,-106.428733,-106.429113,-106.429382,-106.429511,-106.430322,-106.431331,-106.432452,-106.432929,-106.433634,-106.434901,-106.435531,-106.436182,-106.436264,-106.436392,-106.436477,-106.436607,-106.43689,-106.436976,-106.43704,-106.437092,-106.437122,-106.437129,-106.437128,-106.437165,-106.437224,-106.437299,-106.437344,-106.437464,-106.437567,-106.437703,-106.437778,-106.437939,-106.438101,-106.438307,-106.438467,-106.438735,-106.438887,-106.439051,-106.439204,-106.43948,-106.439658,-106.43989,-106.440021,-106.440347,-106.44064,-106.440955,-106.441063,-106.441235,-106.441363,-106.441468,-106.441684,-106.441765,-106.44188,-106.441985,-106.442133,-106.442238,-106.442356,-106.442508,-106.442646,-106.443063,-106.443275,-106.443622,-106.443781,-106.443908,-106.444143,-106.444419,-106.444739,-106.444837,-106.444988,-106.445108,-106.445239,-106.445384,-106.445529,-106.445664,-106.44581,-106.446059,-106.446409,-106.446635,-106.446758,-106.44688,-106.447024,-106.447342,-106.447584,-106.447736,-106.44806,-106.448861,-106.448979,-106.449055,-106.449424,-106.449489,-106.449554,-106.449652,-106.449863,-106.449986,-106.450167,-106.450236,-106.450306,-106.450496,-106.450669,-106.450795,-106.451021,-106.451188,-106.451524,-106.451713,-106.451778,-106.451919,-106.45223,-106.452348,-106.452468,-106.452576,-106.453119,-106.453315,-106.453646,-106.453798,-106.453939,-106.454101,-106.454853,-106.454896,-106.454973,-106.455095,-106.455185,-106.455311,-106.455435,-106.455547,-106.455634,-106.455697,-106.455759,-106.45583,-106.455889,-106.455905,-106.455909,-106.455927,-106.455957,-106.455999,-106.456085,-106.456245,-106.456395,-106.456491,-106.456574,-106.457321,-106.457421,-106.457535,-106.457583,-106.45767,-106.457719,-106.457872,-106.458045,-106.458151,-106.458232,-106.458324,-106.45846,-106.458895,-106.458995,-106.459304,-106.459371,-106.459461,-106.45962,-106.459791,-106.459904,-106.460176,-106.460411,-106.460523,-106.460613,-106.460723,-106.4608,-106.460888,-106.461235,-106.461482,-106.461578,-106.461673,-106.461896,-106.462004,-106.462228,-106.462388,-106.462768,-106.462971,-106.463142,-106.463343,-106.46345,-106.463586,-106.463734,-106.463957,-106.464083,-106.464594,-106.465018,-106.46522,-106.46567,-106.465923,-106.466379,-106.466508,-106.466605,-106.466746,-106.466921,-106.467255,-106.467411,-106.467682,-106.467817,-106.46793,-106.468052,-106.468285,-106.468684,-106.468852,-106.469019,-106.469363,-106.469883,-106.470883,-106.471791,-106.473578,-106.475902,-106.476475,-106.47867,-106.479715,-106.480878,-106.480593,-106.480585,-106.480768,-106.48246,-106.484005,-106.484942,-106.485838,-106.486627,-106.487322,-106.487903,-106.488235,-106.488811,-106.48934,-106.489882,-106.49106,-106.492187,-106.492884,-106.493534,-106.494335,-106.494426,-106.495349,-106.49549,-106.495641,-106.495843,-106.496802,-106.497296,-106.497886,-106.497872,-106.497898,-106.497862,-106.497873,-106.49785,-106.497873,-106.497893,-106.49791,-106.497892,-106.497888,-106.497901,-106.497914,-106.497908,-106.497804,-106.49738,-106.497181,-106.4971,-106.497071,-106.497066,-106.497064,-106.497064,-106.497067,-106.4971,-106.497097,-106.497303,-106.499275,-106.499975,-106.499683],"lat":[35.15887,35.159372,35.159705,35.159128,35.159117,35.159095,35.159086,35.159584,35.160849,35.161101,35.161235,35.161614,35.161873,35.162078,35.162578,35.164137,35.168175,35.16879,35.171405,35.171406,35.171408,35.171364,35.171174,35.171054,35.170705,35.170322,35.169818,35.168822,35.168568,35.168421,35.168343,35.16834,35.168051,35.167894,35.167804,35.167774,35.167692,35.167632,35.167611,35.167593,35.167661,35.167699,35.167667,35.167668,35.167669,35.167715,35.167755,35.167791,35.167826,35.16787,35.167972,35.168043,35.168089,35.168152,35.16821,35.168483,35.168555,35.168606,35.16864,35.168668,35.16869,35.168739,35.16878,35.168851,35.168909,35.168969,35.169019,35.169226,35.169277,35.16935,35.169408,35.169493,35.169569,35.169643,35.169707,35.16979,35.169854,35.170035,35.170378,35.170588,35.170682,35.17074,35.170781,35.170944,35.171195,35.171289,35.171383,35.17146,35.171498,35.171519,35.171559,35.171637,35.171722,35.171778,35.171853,35.171962,35.172059,35.172152,35.172237,35.172364,35.172483,35.172597,35.172727,35.172852,35.173037,35.17327,35.173846,35.173968,35.174091,35.174259,35.174445,35.174622,35.174736,35.174838,35.17488,35.17492,35.174949,35.174991,35.175069,35.175147,35.175224,35.175273,35.175297,35.17531,35.175341,35.175384,35.175444,35.175505,35.175612,35.17572,35.17587,35.176045,35.176123,35.176217,35.176421,35.176582,35.176683,35.176751,35.176849,35.176887,35.176942,35.176955,35.176995,35.177051,35.177111,35.177212,35.177306,35.177407,35.177476,35.177516,35.177545,35.177656,35.177711,35.17774,35.17778,35.177845,35.177912,35.178015,35.17842,35.178604,35.178716,35.178888,35.178966,35.179061,35.179168,35.179446,35.179508,35.17962,35.179705,35.179801,35.179877,35.179994,35.180284,35.180546,35.180622,35.180691,35.18081,35.180861,35.180903,35.180967,35.181009,35.181042,35.181094,35.181217,35.181266,35.181279,35.181304,35.181337,35.181388,35.181401,35.181406,35.181449,35.181481,35.181525,35.182049,35.182291,35.182488,35.18258,35.182658,35.182717,35.182788,35.18293,35.183515,35.183784,35.183952,35.184179,35.184273,35.184388,35.184549,35.184927,35.184987,35.185011,35.185024,35.185005,35.184998,35.184986,35.184945,35.184877,35.184889,35.184926,35.185057,35.185184,35.185258,35.185372,35.185495,35.185689,35.185807,35.185901,35.185962,35.186,35.186072,35.186155,35.186412,35.186513,35.186748,35.186899,35.186997,35.187056,35.187116,35.187174,35.187221,35.187314,35.187412,35.187445,35.187504,35.187587,35.187602,35.187615,35.187725,35.187799,35.187875,35.188085,35.188312,35.188375,35.188456,35.188557,35.188807,35.189102,35.189324,35.189441,35.18955,35.189629,35.189721,35.189801,35.18988,35.190028,35.190158,35.190261,35.190362,35.190393,35.190426,35.19046,35.190481,35.190505,35.190599,35.190706,35.190949,35.190993,35.191034,35.191058,35.191089,35.191154,35.191198,35.1913,35.191624,35.191871,35.192111,35.192235,35.192396,35.192479,35.19256,35.19276,35.193217,35.193356,35.193419,35.193596,35.193794,35.193957,35.194,35.19415,35.19432,35.194645,35.19476,35.194896,35.195343,35.19553,35.195765,35.196017,35.197057,35.196857,35.195873,35.195272,35.194454,35.192658,35.191087,35.18717,35.186829,35.182724,35.179544,35.17194,35.162588,35.160118,35.157592,35.155012,35.1525,35.148287,35.143284,35.13606,35.134596,35.133338,35.133333,35.132876,35.132658,35.131981,35.131461,35.130076,35.129495,35.129077,35.128297,35.127704,35.127353,35.127447,35.127524,35.127564,35.127594,35.127642,35.127662,35.127692,35.127739,35.127795,35.127867,35.128282,35.128399,35.12852,35.128756,35.128938,35.129132,35.129262,35.129366,35.129404,35.129456,35.129497,35.12956,35.129619,35.129728,35.129762,35.129776,35.129783,35.129749,35.129701,35.129674,35.129679,35.129727,35.129791,35.129839,35.129863,35.129931,35.129999,35.130074,35.130335,35.130447,35.130559,35.130643,35.130731,35.130807,35.130857,35.130898,35.130975,35.131162,35.131297,35.131561,35.131649,35.131743,35.13185,35.132014,35.132161,35.132194,35.132226,35.13224,35.132234,35.132214,35.132165,35.132098,35.132031,35.131906,35.131711,35.131593,35.131553,35.131522,35.1315,35.131494,35.131494,35.13151,35.131594,35.131776,35.131826,35.131848,35.131916,35.131935,35.131948,35.131951,35.131904,35.131855,35.131772,35.131703,35.131623,35.131362,35.131213,35.131119,35.131002,35.130946,35.130822,35.130786,35.130788,35.13082,35.130949,35.130988,35.131002,35.131033,35.131125,35.131143,35.131119,35.131133,35.131165,35.131217,35.131488,35.131499,35.131502,35.13148,35.131439,35.131345,35.131267,35.131236,35.131249,35.131286,35.13136,35.131463,35.131599,35.131698,35.131827,35.131899,35.131955,35.131981,35.132012,35.132082,35.132141,35.132207,35.132274,35.132662,35.132629,35.132544,35.132465,35.132297,35.13219,35.132008,35.131862,35.13173,35.131652,35.131575,35.131499,35.131351,35.13133,35.131304,35.131289,35.131239,35.131137,35.131016,35.130958,35.130806,35.130715,35.130667,35.130634,35.130619,35.130614,35.130617,35.130692,35.130784,35.130832,35.130899,35.131015,35.131055,35.131162,35.131248,35.131508,35.131604,35.131692,35.131807,35.131876,35.131978,35.132075,35.13221,35.132303,35.132583,35.132853,35.132959,35.133156,35.133327,35.133605,35.133665,35.133695,35.133718,35.133716,35.13364,35.133591,35.133457,35.13338,35.133332,35.133299,35.133244,35.133178,35.133113,35.133075,35.133067,35.13295,35.132985,35.132973,35.132751,35.133577,35.13372,35.13414,35.134545,35.134545,35.131279,35.131142,35.131233,35.131819,35.132367,35.132688,35.13306,35.13335,35.132995,35.13263,35.132384,35.13162,35.130964,35.130267,35.130794,35.130771,35.130779,35.130787,35.130797,35.130798,35.130765,35.130744,35.130721,35.130691,35.130669,35.130669,35.130655,35.133403,35.13447,35.135361,35.137728,35.138494,35.139939,35.140737,35.142771,35.144645,35.145109,35.145665,35.146211,35.147175,35.147962,35.149337,35.149882,35.150446,35.151113,35.151887,35.152217,35.152364,35.152832,35.157269,35.158114,35.158101,35.157981,35.158283,35.15887]}]],[[{"lng":[-106.582979,-106.582638,-106.582348,-106.58229,-106.58185,-106.581507,-106.581352,-106.581337,-106.581326,-106.580539,-106.580481,-106.580794,-106.580472,-106.580337,-106.579844,-106.579465,-106.57935,-106.578692,-106.578551,-106.578112,-106.578101,-106.577939,-106.577899,-106.577764,-106.57744,-106.577382,-106.576979,-106.576856,-106.576837,-106.576513,-106.568962,-106.564336,-106.56058,-106.560179,-106.559922,-106.559937,-106.559912,-106.559895,-106.559894,-106.559891,-106.560095,-106.560122,-106.560095,-106.56009,-106.560116,-106.560116,-106.560058,-106.559993,-106.559926,-106.559841,-106.559834,-106.559841,-106.559834,-106.55991,-106.559913,-106.559938,-106.559933,-106.559928,-106.559927,-106.559926,-106.559922,-106.559928,-106.559937,-106.559963,-106.559958,-106.559936,-106.562875,-106.564564,-106.564674,-106.56629,-106.567278,-106.568652,-106.568775,-106.570617,-106.57181,-106.572728,-106.573874,-106.57547,-106.576794,-106.577574,-106.578727,-106.579731,-106.580502,-106.58131,-106.582716,-106.583722,-106.582979],"lat":[35.177548,35.178968,35.180171,35.180413,35.182513,35.183984,35.184649,35.184714,35.184758,35.18804,35.188291,35.188319,35.189588,35.19012,35.192337,35.194045,35.194561,35.197522,35.198158,35.200135,35.20018,35.201307,35.201633,35.20163,35.201646,35.201645,35.201542,35.201528,35.201526,35.201491,35.200761,35.200314,35.199943,35.19853,35.197624,35.196023,35.195254,35.194721,35.194675,35.194585,35.193127,35.191922,35.191712,35.190719,35.190233,35.189354,35.189014,35.188835,35.18866,35.18827,35.187343,35.186876,35.186731,35.185937,35.184457,35.182999,35.18158,35.18046,35.18011,35.179872,35.178627,35.178392,35.178116,35.177208,35.175751,35.174268,35.174432,35.174505,35.174503,35.174529,35.174529,35.174529,35.174517,35.174542,35.174566,35.174542,35.174517,35.174444,35.174356,35.174313,35.174217,35.174205,35.174205,35.17423,35.174327,35.174352,35.177548]}]],[[{"lng":[-106.586776,-106.586388,-106.585716,-106.585245,-106.58454,-106.584431,-106.584062,-106.583752,-106.583722,-106.582716,-106.58131,-106.580502,-106.579731,-106.578727,-106.577574,-106.576794,-106.57547,-106.573874,-106.572728,-106.57181,-106.570617,-106.568775,-106.568652,-106.567278,-106.56629,-106.564674,-106.564564,-106.562875,-106.559936,-106.559946,-106.560031,-106.560019,-106.560017,-106.560015,-106.560015,-106.560005,-106.559987,-106.559969,-106.56023,-106.560297,-106.55997,-106.559978,-106.559962,-106.559977,-106.55999,-106.559956,-106.559954,-106.559959,-106.559959,-106.559954,-106.559916,-106.559901,-106.559872,-106.560137,-106.56063,-106.561301,-106.561809,-106.5622,-106.562812,-106.563254,-106.563608,-106.563609,-106.563744,-106.565002,-106.56509,-106.56694,-106.568787,-106.575481,-106.57759,-106.578337,-106.580248,-106.582306,-106.58332,-106.584487,-106.585204,-106.586367,-106.586764,-106.58693,-106.586776],"lat":[35.160935,35.162607,35.165556,35.167623,35.170716,35.171201,35.172843,35.174217,35.174352,35.174327,35.17423,35.174205,35.174205,35.174217,35.174313,35.174356,35.174444,35.174517,35.174542,35.174566,35.174542,35.174517,35.174529,35.174529,35.174529,35.174503,35.174505,35.174432,35.174268,35.174098,35.172779,35.17108,35.170635,35.170088,35.170013,35.167785,35.167006,35.166302,35.166307,35.166308,35.166193,35.164717,35.164615,35.164334,35.163784,35.163042,35.162429,35.161873,35.161803,35.160788,35.159755,35.159456,35.158894,35.158852,35.15885,35.158891,35.15898,35.159082,35.159268,35.159327,35.159357,35.159738,35.159819,35.159825,35.159824,35.159855,35.159887,35.15988,35.159938,35.159889,35.159893,35.159896,35.159924,35.159956,35.160042,35.160181,35.160244,35.16027,35.160935]}]],[[{"lng":[-106.574368,-106.574317,-106.574124,-106.573864,-106.573508,-106.573167,-106.572813,-106.572459,-106.57198,-106.571521,-106.570831,-106.570244,-106.569594,-106.569223,-106.568726,-106.568737,-106.568737,-106.568737,-106.568743,-106.568746,-106.568728,-106.568733,-106.568727,-106.568738,-106.568741,-106.568744,-106.568774,-106.568787,-106.56694,-106.56509,-106.565002,-106.563744,-106.563609,-106.563608,-106.563254,-106.562812,-106.5622,-106.561809,-106.561301,-106.56063,-106.560137,-106.559872,-106.559861,-106.55986,-106.560304,-106.560816,-106.561039,-106.561029,-106.560977,-106.56068,-106.560435,-106.55974,-106.559489,-106.558765,-106.556749,-106.556331,-106.556039,-106.55539,-106.555112,-106.554851,-106.553852,-106.555109,-106.556566,-106.557656,-106.558701,-106.558805,-106.559718,-106.56138,-106.562835,-106.563871,-106.564791,-106.566381,-106.566963,-106.568884,-106.570243,-106.572062,-106.573418,-106.574212,-106.574364,-106.574405,-106.574368],"lat":[35.14635,35.146769,35.147457,35.147888,35.148563,35.149245,35.149935,35.150608,35.151574,35.152144,35.152611,35.152819,35.152889,35.15288,35.152897,35.153408,35.153754,35.15418,35.155011,35.155786,35.15651,35.157905,35.158413,35.158659,35.158712,35.158773,35.159406,35.159887,35.159855,35.159824,35.159825,35.159819,35.159738,35.159357,35.159327,35.159268,35.159082,35.15898,35.158891,35.15885,35.158852,35.158894,35.157824,35.157685,35.156321,35.155013,35.154077,35.153935,35.153158,35.152427,35.151895,35.151153,35.150996,35.150436,35.148971,35.148568,35.148332,35.147807,35.147601,35.147409,35.146124,35.145582,35.145282,35.145267,35.145301,35.1453,35.145287,35.145308,35.14531,35.145312,35.14531,35.145305,35.145309,35.145323,35.145385,35.145347,35.145343,35.145341,35.145341,35.145921,35.14635]}]],[[{"lng":[-106.588408,-106.587809,-106.587368,-106.58734,-106.587276,-106.58693,-106.586764,-106.586367,-106.585204,-106.584487,-106.58332,-106.582306,-106.580248,-106.578337,-106.57759,-106.575481,-106.568787,-106.568774,-106.568744,-106.568741,-106.568738,-106.568727,-106.568733,-106.568728,-106.568746,-106.568743,-106.568737,-106.568737,-106.568737,-106.568726,-106.569223,-106.569594,-106.570244,-106.570831,-106.571521,-106.57198,-106.572459,-106.572813,-106.573167,-106.573508,-106.573864,-106.574124,-106.574317,-106.574368,-106.574405,-106.574364,-106.575828,-106.576188,-106.576561,-106.576916,-106.577269,-106.578,-106.578733,-106.57944,-106.580684,-106.581478,-106.581638,-106.582114,-106.582603,-106.583146,-106.58353,-106.584086,-106.584615,-106.585197,-106.586426,-106.586416,-106.586394,-106.586439,-106.586573,-106.586852,-106.587239,-106.587741,-106.587979,-106.588207,-106.588513,-106.588408],"lat":[35.153595,35.156329,35.158307,35.158432,35.158717,35.16027,35.160244,35.160181,35.160042,35.159956,35.159924,35.159896,35.159893,35.159889,35.159938,35.15988,35.159887,35.159406,35.158773,35.158712,35.158659,35.158413,35.157905,35.15651,35.155786,35.155011,35.15418,35.153754,35.153408,35.152897,35.15288,35.152889,35.152819,35.152611,35.152144,35.151574,35.150608,35.149935,35.149245,35.148563,35.147888,35.147457,35.146769,35.14635,35.145921,35.145341,35.145369,35.145368,35.145367,35.145379,35.145391,35.145484,35.145688,35.145939,35.146532,35.146878,35.146953,35.14718,35.147374,35.147622,35.147751,35.14788,35.147965,35.148061,35.148036,35.148937,35.149893,35.150372,35.150938,35.151602,35.152142,35.152642,35.152788,35.152927,35.153115,35.153595]}]],[[{"lng":[-106.524662,-106.521925,-106.515812,-106.514078,-106.511458,-106.509136,-106.506967,-106.501105,-106.501035,-106.500892,-106.500637,-106.50038,-106.5002,-106.500065,-106.500031,-106.499973,-106.499975,-106.499275,-106.497303,-106.497097,-106.4971,-106.497067,-106.497064,-106.49729,-106.497869,-106.499822,-106.500429,-106.502186,-106.502907,-106.503356,-106.504526,-106.505697,-106.506286,-106.506869,-106.508272,-106.50905,-106.50923,-106.510026,-106.510077,-106.510806,-106.510978,-106.511827,-106.512314,-106.513287,-106.513446,-106.514045,-106.515186,-106.516072,-106.51703,-106.518263,-106.518428,-106.518784,-106.519327,-106.520084,-106.520587,-106.520735,-106.521995,-106.52262,-106.523315,-106.524521,-106.524414,-106.524388,-106.524662],"lat":[35.159716,35.159707,35.159682,35.159675,35.159666,35.159658,35.159666,35.159652,35.159521,35.159467,35.159375,35.159247,35.159077,35.158842,35.158755,35.158614,35.158283,35.157981,35.158101,35.158114,35.157269,35.152832,35.152364,35.15236,35.152352,35.152323,35.152325,35.152333,35.152312,35.152299,35.15231,35.152334,35.152331,35.152329,35.152295,35.152093,35.152046,35.151699,35.151677,35.151263,35.151198,35.150879,35.15085,35.150793,35.150796,35.150809,35.150834,35.150849,35.150995,35.151494,35.151591,35.151833,35.152204,35.15272,35.153056,35.153178,35.153892,35.154156,35.154275,35.154364,35.158038,35.158907,35.159716]}]],[[{"lng":[-106.533402,-106.533398,-106.533379,-106.533372,-106.533363,-106.533188,-106.533121,-106.532865,-106.532772,-106.532422,-106.53208,-106.531695,-106.531477,-106.530213,-106.52938,-106.526928,-106.525471,-106.524568,-106.523982,-106.52345,-106.522683,-106.52191,-106.521328,-106.521195,-106.520723,-106.520425,-106.520048,-106.519492,-106.518803,-106.518477,-106.518197,-106.517347,-106.51725,-106.517102,-106.516935,-106.516751,-106.516002,-106.515892,-106.515805,-106.515775,-106.516055,-106.516188,-106.51822,-106.519221,-106.519803,-106.520414,-106.521484,-106.522454,-106.522653,-106.523122,-106.523514,-106.52392,-106.524393,-106.524495,-106.525093,-106.525751,-106.526413,-106.527211,-106.527764,-106.528595,-106.528669,-106.529204,-106.529226,-106.529864,-106.52995,-106.530277,-106.530531,-106.530838,-106.531036,-106.531317,-106.531664,-106.531767,-106.531815,-106.531931,-106.532082,-106.532413,-106.53253,-106.532763,-106.532874,-106.533131,-106.533387,-106.533388,-106.53335,-106.5334,-106.533406,-106.533402],"lat":[35.137294,35.137413,35.137924,35.138069,35.138894,35.140086,35.140538,35.141042,35.141225,35.141786,35.142301,35.142784,35.143107,35.144713,35.145703,35.148778,35.14801,35.147536,35.147228,35.14695,35.146559,35.146129,35.145798,35.145723,35.145488,35.14533,35.145091,35.144738,35.144205,35.143751,35.14336,35.141879,35.141606,35.14119,35.140801,35.140418,35.138397,35.138098,35.137862,35.13765,35.137511,35.137471,35.136817,35.136565,35.136353,35.136206,35.135895,35.13563,35.135576,35.13551,35.135454,35.13544,35.135425,35.135431,35.135468,35.135458,35.135391,35.135223,35.135144,35.135183,35.135194,35.135279,35.135279,35.135447,35.135468,35.135507,35.135499,35.135475,35.135472,35.135545,35.135613,35.135654,35.135837,35.13572,35.135781,35.135946,35.136024,35.136104,35.136143,35.136253,35.136335,35.136421,35.136557,35.137111,35.137177,35.137294]}]],[[{"lng":[-106.524728,-106.52472,-106.524688,-106.524588,-106.524578,-106.524573,-106.524534,-106.524516,-106.524503,-106.524341,-106.524324,-106.524254,-106.524257,-106.524254,-106.524341,-106.524462,-106.524447,-106.52099,-106.518711,-106.515803,-106.51357,-106.512672,-106.509225,-106.506945,-106.506878,-106.503916,-106.501578,-106.50091,-106.500068,-106.498253,-106.497698,-106.497065,-106.496807,-106.496711,-106.49659,-106.49647,-106.496436,-106.496247,-106.496253,-106.496253,-106.49623,-106.496224,-106.496218,-106.496194,-106.496242,-106.49623,-106.496169,-106.496229,-106.496215,-106.49623,-106.496245,-106.496299,-106.496313,-106.496365,-106.496772,-106.496933,-106.497139,-106.497632,-106.498194,-106.498147,-106.49929,-106.499683,-106.499975,-106.499973,-106.500031,-106.500065,-106.5002,-106.50038,-106.500637,-106.500892,-106.501035,-106.501105,-106.506967,-106.509136,-106.511458,-106.514078,-106.515812,-106.521925,-106.524662,-106.524663,-106.524663,-106.524668,-106.524724,-106.524728],"lat":[35.164055,35.164731,35.165082,35.16552,35.16563,35.165661,35.166317,35.166644,35.166987,35.168389,35.169077,35.169851,35.170488,35.171294,35.172749,35.174505,35.174643,35.174622,35.174608,35.174632,35.17461,35.174601,35.174595,35.174595,35.174594,35.174571,35.174546,35.17457,35.174659,35.17495,35.175042,35.175121,35.175163,35.175169,35.175169,35.17512,35.175106,35.17503,35.174873,35.174199,35.173066,35.172397,35.171584,35.171405,35.16879,35.168175,35.164137,35.162578,35.162078,35.161873,35.161614,35.161235,35.161101,35.160849,35.159584,35.159086,35.159095,35.159117,35.159128,35.159705,35.159372,35.15887,35.158283,35.158614,35.158755,35.158842,35.159077,35.159247,35.159375,35.159467,35.159521,35.159652,35.159666,35.159658,35.159666,35.159675,35.159682,35.159707,35.159716,35.161143,35.161267,35.162599,35.163752,35.164055]}]],[[{"lng":[-106.542264,-106.542263,-106.542265,-106.542254,-106.542245,-106.542244,-106.540099,-106.538349,-106.536403,-106.533442,-106.533338,-106.526176,-106.52465,-106.524447,-106.524462,-106.524341,-106.524254,-106.524257,-106.524254,-106.524324,-106.524341,-106.524503,-106.524516,-106.524534,-106.524573,-106.524578,-106.524588,-106.524688,-106.52472,-106.524728,-106.524724,-106.524668,-106.524663,-106.524663,-106.524662,-106.525909,-106.528099,-106.528601,-106.532587,-106.533122,-106.533435,-106.533726,-106.537528,-106.54225,-106.542251,-106.54225,-106.542248,-106.542246,-106.542248,-106.542237,-106.542254,-106.54225,-106.542249,-106.542252,-106.542253,-106.542254,-106.54225,-106.542253,-106.542253,-106.542266,-106.542264],"lat":[35.17169,35.17228,35.172792,35.173476,35.174341,35.174487,35.174634,35.174707,35.174731,35.174669,35.174681,35.174645,35.174644,35.174643,35.174505,35.172749,35.171294,35.170488,35.169851,35.169077,35.168389,35.166987,35.166644,35.166317,35.165661,35.16563,35.16552,35.165082,35.164731,35.164055,35.163752,35.162599,35.161267,35.161143,35.159716,35.15972,35.159728,35.15973,35.159744,35.159746,35.159747,35.159477,35.159541,35.15955,35.15968,35.160021,35.160584,35.161164,35.161958,35.162726,35.163434,35.164035,35.164209,35.164995,35.165577,35.166231,35.166411,35.167454,35.169516,35.171088,35.17169]}]],[[{"lng":[-106.533445,-106.53344,-106.533434,-106.533439,-106.533429,-106.533421,-106.533418,-106.533422,-106.533439,-106.533429,-106.533434,-106.533395,-106.533396,-106.533401,-106.533406,-106.533409,-106.533427,-106.533252,-106.533227,-106.533152,-106.532838,-106.532371,-106.532099,-106.530973,-106.530865,-106.530744,-106.530622,-106.530589,-106.530499,-106.530295,-106.53018,-106.530145,-106.530077,-106.529978,-106.529757,-106.529561,-106.529136,-106.528823,-106.528658,-106.528537,-106.528089,-106.527863,-106.527707,-106.527401,-106.527214,-106.527048,-106.526711,-106.526422,-106.526178,-106.526092,-106.526008,-106.525878,-106.525715,-106.525661,-106.525273,-106.524824,-106.524633,-106.524496,-106.524434,-106.524422,-106.52443,-106.524401,-106.514924,-106.514593,-106.514513,-106.514396,-106.512593,-106.510906,-106.502491,-106.500488,-106.499573,-106.498307,-106.497759,-106.497717,-106.496189,-106.496047,-106.496096,-106.49616,-106.49628,-106.496241,-106.496242,-106.496242,-106.496259,-106.496241,-106.496247,-106.496229,-106.496253,-106.496247,-106.496436,-106.49647,-106.49659,-106.496711,-106.496807,-106.497065,-106.497698,-106.498253,-106.500068,-106.50091,-106.501578,-106.503916,-106.506878,-106.506945,-106.509225,-106.512672,-106.51357,-106.515803,-106.518711,-106.52099,-106.524447,-106.52465,-106.526176,-106.533338,-106.533442,-106.533441,-106.533435,-106.533438,-106.53344,-106.53344,-106.533441,-106.533441,-106.533445],"lat":[35.178664,35.179212,35.180068,35.181522,35.182964,35.184011,35.184419,35.18469,35.185912,35.187341,35.188784,35.190209,35.190398,35.191659,35.193109,35.19412,35.19421,35.194188,35.194168,35.194138,35.194054,35.193974,35.193937,35.193661,35.19363,35.193625,35.193647,35.193647,35.193689,35.193818,35.193916,35.193946,35.193978,35.193993,35.194003,35.193987,35.193927,35.193834,35.193836,35.193849,35.194022,35.194139,35.19418,35.19415,35.194161,35.194181,35.194323,35.194403,35.194447,35.194407,35.19435,35.194311,35.194277,35.194275,35.194314,35.194333,35.194399,35.194502,35.194627,35.19485,35.195093,35.195197,35.193912,35.193832,35.193811,35.193805,35.193554,35.1933,35.192069,35.191843,35.191694,35.191454,35.191369,35.191362,35.190307,35.190209,35.189312,35.188087,35.185006,35.183347,35.18317,35.183037,35.182102,35.181078,35.180813,35.178007,35.176199,35.17503,35.175106,35.17512,35.175169,35.175169,35.175163,35.175121,35.175042,35.17495,35.174659,35.17457,35.174546,35.174571,35.174594,35.174595,35.174595,35.174601,35.17461,35.174632,35.174608,35.174622,35.174643,35.174644,35.174645,35.174681,35.174669,35.174754,35.175742,35.176547,35.177197,35.177313,35.177501,35.177751,35.178664]}]],[[{"lng":[-106.56058,-106.551128,-106.540039,-106.538476,-106.525388,-106.525114,-106.524401,-106.52443,-106.524422,-106.524434,-106.524496,-106.524633,-106.524824,-106.525273,-106.525661,-106.525715,-106.525878,-106.526008,-106.526092,-106.526178,-106.526422,-106.526711,-106.527048,-106.527214,-106.527401,-106.527707,-106.527863,-106.528089,-106.528537,-106.528658,-106.528823,-106.529136,-106.529561,-106.529757,-106.529978,-106.530077,-106.530145,-106.53018,-106.530295,-106.530499,-106.530589,-106.530622,-106.530744,-106.530865,-106.530973,-106.532099,-106.532371,-106.532838,-106.533152,-106.533227,-106.533252,-106.533427,-106.533409,-106.533406,-106.533401,-106.533396,-106.533395,-106.533434,-106.533429,-106.533439,-106.533422,-106.533418,-106.533421,-106.533429,-106.533439,-106.533434,-106.53344,-106.533445,-106.533441,-106.533441,-106.53344,-106.53344,-106.533438,-106.533435,-106.533441,-106.533442,-106.536403,-106.538349,-106.540099,-106.542244,-106.542338,-106.545191,-106.547575,-106.550739,-106.551096,-106.553915,-106.557477,-106.559936,-106.559958,-106.559963,-106.559937,-106.559928,-106.559922,-106.559926,-106.559927,-106.559928,-106.559933,-106.559938,-106.559913,-106.55991,-106.559834,-106.559841,-106.559834,-106.559841,-106.559926,-106.559993,-106.560058,-106.560116,-106.560116,-106.56009,-106.560095,-106.560122,-106.560095,-106.559891,-106.559894,-106.559895,-106.559912,-106.559937,-106.559922,-106.560179,-106.56058],"lat":[35.199943,35.198733,35.197314,35.1971,35.195307,35.19528,35.195197,35.195093,35.19485,35.194627,35.194502,35.194399,35.194333,35.194314,35.194275,35.194277,35.194311,35.19435,35.194407,35.194447,35.194403,35.194323,35.194181,35.194161,35.19415,35.19418,35.194139,35.194022,35.193849,35.193836,35.193834,35.193927,35.193987,35.194003,35.193993,35.193978,35.193946,35.193916,35.193818,35.193689,35.193647,35.193647,35.193625,35.19363,35.193661,35.193937,35.193974,35.194054,35.194138,35.194168,35.194188,35.19421,35.19412,35.193109,35.191659,35.190398,35.190209,35.188784,35.187341,35.185912,35.18469,35.184419,35.184011,35.182964,35.181522,35.180068,35.179212,35.178664,35.177751,35.177501,35.177313,35.177197,35.176547,35.175742,35.174754,35.174669,35.174731,35.174707,35.174634,35.174487,35.174426,35.174248,35.174144,35.174034,35.174058,35.174052,35.174175,35.174268,35.175751,35.177208,35.178116,35.178392,35.178627,35.179872,35.18011,35.18046,35.18158,35.182999,35.184457,35.185937,35.186731,35.186876,35.187343,35.18827,35.18866,35.188835,35.189014,35.189354,35.190233,35.190719,35.191712,35.191922,35.193127,35.194585,35.194675,35.194721,35.195254,35.196023,35.197624,35.19853,35.199943]}]],[[{"lng":[-106.609628,-106.60919,-106.60808,-106.605949,-106.605218,-106.605157,-106.60511,-106.603838,-106.598918,-106.598255,-106.594955,-106.594165,-106.59357,-106.592984,-106.592176,-106.591956,-106.591398,-106.590708,-106.590116,-106.589995,-106.589928,-106.589889,-106.589803,-106.58933,-106.588513,-106.588207,-106.587979,-106.587741,-106.587239,-106.586852,-106.586573,-106.586439,-106.586394,-106.586416,-106.586426,-106.586437,-106.586438,-106.586467,-106.586467,-106.586468,-106.586426,-106.586461,-106.58646,-106.586448,-106.586453,-106.586408,-106.58641,-106.586401,-106.58638,-106.586455,-106.586456,-106.586471,-106.586482,-106.587764,-106.5886,-106.589048,-106.589435,-106.590271,-106.591107,-106.591859,-106.593196,-106.594295,-106.595298,-106.596329,-106.597164,-106.598005,-106.598833,-106.599674,-106.600777,-106.601618,-106.60245,-106.603286,-106.604067,-106.604813,-106.605446,-106.606072,-106.606769,-106.606906,-106.60712,-106.607172,-106.607236,-106.60756,-106.608235,-106.6086,-106.609013,-106.609455,-106.609628],"lat":[35.132666,35.132928,35.133615,35.1349,35.135347,35.135385,35.135413,35.136192,35.139203,35.139606,35.141615,35.142119,35.142471,35.14286,35.143511,35.143693,35.14431,35.145245,35.146377,35.146806,35.147044,35.147183,35.147489,35.149551,35.153115,35.152927,35.152788,35.152642,35.152142,35.151602,35.150938,35.150372,35.149893,35.148937,35.148036,35.147232,35.147097,35.144901,35.14415,35.14357,35.143021,35.141994,35.141966,35.141673,35.141444,35.138594,35.135798,35.135377,35.134385,35.133669,35.132845,35.132021,35.13093,35.130947,35.13096,35.130957,35.130955,35.130937,35.130949,35.130946,35.130943,35.130949,35.130926,35.130928,35.130899,35.130897,35.130905,35.130935,35.1309,35.130887,35.130893,35.130892,35.130951,35.130939,35.130953,35.130998,35.13114,35.131189,35.131264,35.131283,35.131306,35.13142,35.131771,35.131999,35.132276,35.132556,35.132666]}]],[[{"lng":[-106.62802,-106.627727,-106.627637,-106.627506,-106.627232,-106.626582,-106.626158,-106.626081,-106.625988,-106.625854,-106.625832,-106.625804,-106.625781,-106.625695,-106.625546,-106.625228,-106.624638,-106.624525,-106.623981,-106.62395,-106.623835,-106.623793,-106.623505,-106.623381,-106.623326,-106.623294,-106.62318,-106.622682,-106.622636,-106.622566,-106.622171,-106.621634,-106.621395,-106.621244,-106.621059,-106.620984,-106.620923,-106.620889,-106.620872,-106.620554,-106.62045,-106.620352,-106.620054,-106.61985,-106.619477,-106.619354,-106.61932,-106.619275,-106.619137,-106.619001,-106.618972,-106.618789,-106.618702,-106.618643,-106.618479,-106.618351,-106.618187,-106.618099,-106.617909,-106.61775,-106.617734,-106.617578,-106.617454,-106.617168,-106.616976,-106.616228,-106.615789,-106.615066,-106.614842,-106.61464,-106.614587,-106.614381,-106.613999,-106.613775,-106.6136,-106.613421,-106.613392,-106.613349,-106.613302,-106.613169,-106.613111,-106.612817,-106.611664,-106.611461,-106.611321,-106.611227,-106.611145,-106.611109,-106.611039,-106.610897,-106.610862,-106.610616,-106.610411,-106.610237,-106.610026,-106.609821,-106.609671,-106.609445,-106.609155,-106.608748,-106.6086,-106.606899,-106.606867,-106.606806,-106.606211,-106.605806,-106.60562,-106.604864,-106.604814,-106.604829,-106.60484,-106.604866,-106.605024,-106.605241,-106.605328,-106.605382,-106.605457,-106.605507,-106.605511,-106.605543,-106.605507,-106.60548,-106.605475,-106.605473,-106.605472,-106.605463,-106.605433,-106.605461,-106.605448,-106.605423,-106.605411,-106.605428,-106.605413,-106.605422,-106.605364,-106.605289,-106.605296,-106.605281,-106.60527,-106.605277,-106.605268,-106.605289,-106.605251,-106.605259,-106.605263,-106.605245,-106.60524,-106.605235,-106.605245,-106.605247,-106.605234,-106.605232,-106.605219,-106.605216,-106.605203,-106.605202,-106.605201,-106.605197,-106.605186,-106.605191,-106.605183,-106.605183,-106.605183,-106.605148,-106.605134,-106.605126,-106.605125,-106.605122,-106.60511,-106.605157,-106.605218,-106.605949,-106.60808,-106.60919,-106.609628,-106.609829,-106.61041,-106.610932,-106.611905,-106.612422,-106.613002,-106.61349,-106.613818,-106.61433,-106.614738,-106.615842,-106.616735,-106.617563,-106.618247,-106.618772,-106.620336,-106.621384,-106.622048,-106.622743,-106.622912,-106.624153,-106.624227,-106.624678,-106.625245,-106.626946,-106.628357,-106.62802],"lat":[35.137469,35.138305,35.138573,35.139024,35.139878,35.142259,35.14376,35.144033,35.144343,35.144791,35.144864,35.144959,35.145036,35.145259,35.145648,35.146558,35.147969,35.148278,35.149605,35.149676,35.149939,35.150034,35.150792,35.151115,35.151297,35.151404,35.151758,35.153312,35.153466,35.153704,35.155035,35.156845,35.15749,35.157903,35.158405,35.158612,35.158779,35.158873,35.15892,35.159791,35.160078,35.160319,35.161054,35.161538,35.162543,35.162928,35.163035,35.163162,35.163554,35.163968,35.164056,35.164666,35.164939,35.165123,35.165672,35.166205,35.166784,35.167183,35.16805,35.168639,35.168697,35.168988,35.169214,35.169705,35.169985,35.170756,35.171204,35.17194,35.172229,35.172641,35.172782,35.17333,35.174273,35.1748,35.175211,35.175632,35.175702,35.175799,35.17591,35.176203,35.176283,35.176698,35.178189,35.178592,35.178955,35.179288,35.179659,35.179918,35.180391,35.180823,35.180931,35.181465,35.181867,35.182152,35.182451,35.18272,35.182894,35.183172,35.183479,35.183831,35.183953,35.185339,35.185366,35.185426,35.185201,35.185065,35.184995,35.184826,35.184816,35.18476,35.184716,35.184623,35.183756,35.182508,35.181326,35.180144,35.178971,35.177883,35.177808,35.176635,35.175364,35.174812,35.174707,35.174591,35.174402,35.174147,35.173274,35.173012,35.171777,35.170551,35.169343,35.16689,35.166115,35.163771,35.163736,35.16371,35.163484,35.162064,35.161068,35.160852,35.159869,35.158661,35.156732,35.155614,35.155109,35.153455,35.152785,35.152576,35.151655,35.151521,35.150286,35.149059,35.147833,35.146598,35.145372,35.144806,35.144618,35.141703,35.141153,35.140855,35.140459,35.139974,35.139296,35.138088,35.136844,35.13601,35.135948,35.135696,35.135413,35.135385,35.135347,35.1349,35.133615,35.132928,35.132666,35.132812,35.133203,35.133555,35.134203,35.134503,35.134879,35.135026,35.135114,35.13521,35.135252,35.135292,35.135268,35.135254,35.135306,35.135272,35.13529,35.135313,35.135384,35.135539,35.135592,35.135865,35.135881,35.135969,35.136097,35.136425,35.136641,35.137469]}]],[[{"lng":[-106.606461,-106.606416,-106.606105,-106.606045,-106.605818,-106.60577,-106.60545,-106.605267,-106.605104,-106.604765,-106.604386,-106.604187,-106.604131,-106.604073,-106.603941,-106.60392,-106.603857,-106.603748,-106.603629,-106.603494,-106.60332,-106.603266,-106.60315,-106.602984,-106.602884,-106.602829,-106.602809,-106.60276,-106.602746,-106.602702,-106.602641,-106.602558,-106.602522,-106.602454,-106.602339,-106.602112,-106.601923,-106.60158,-106.601486,-106.601452,-106.601443,-106.601424,-106.60138,-106.601311,-106.601303,-106.601277,-106.601262,-106.601259,-106.601258,-106.601441,-106.601469,-106.601474,-106.601445,-106.60138,-106.601267,-106.601233,-106.60094,-106.600827,-106.600783,-106.600776,-106.600735,-106.600693,-106.600638,-106.600521,-106.600189,-106.600146,-106.599871,-106.599678,-106.599124,-106.598899,-106.59868,-106.598489,-106.594629,-106.578488,-106.578396,-106.578279,-106.578255,-106.578024,-106.577899,-106.577939,-106.578101,-106.578112,-106.578551,-106.578692,-106.57935,-106.579465,-106.579844,-106.580337,-106.580472,-106.580794,-106.580481,-106.580539,-106.581326,-106.581337,-106.581352,-106.581507,-106.58185,-106.58229,-106.582348,-106.582638,-106.582979,-106.583722,-106.583752,-106.584062,-106.584431,-106.58454,-106.585245,-106.585716,-106.586388,-106.586776,-106.58693,-106.587276,-106.58734,-106.587368,-106.587809,-106.588408,-106.588513,-106.58933,-106.589803,-106.589889,-106.589928,-106.589995,-106.590116,-106.590708,-106.591398,-106.591956,-106.592176,-106.592984,-106.59357,-106.594165,-106.594955,-106.598255,-106.598918,-106.603838,-106.60511,-106.605122,-106.605125,-106.605126,-106.605134,-106.605148,-106.605183,-106.605183,-106.605183,-106.605191,-106.605186,-106.605197,-106.605201,-106.605202,-106.605203,-106.605216,-106.605219,-106.605232,-106.605234,-106.605247,-106.605245,-106.605235,-106.60524,-106.605245,-106.605263,-106.605259,-106.605251,-106.605289,-106.605268,-106.605277,-106.60527,-106.605281,-106.605296,-106.605289,-106.605364,-106.605422,-106.605413,-106.605428,-106.605411,-106.605423,-106.605448,-106.605461,-106.605433,-106.605463,-106.605472,-106.605473,-106.605475,-106.60548,-106.605507,-106.605543,-106.605511,-106.605507,-106.605457,-106.605382,-106.605328,-106.605241,-106.605024,-106.604866,-106.60484,-106.604829,-106.604814,-106.604864,-106.60562,-106.605806,-106.606211,-106.606806,-106.606461],"lat":[35.185764,35.18582,35.186208,35.186293,35.186616,35.186684,35.187148,35.187435,35.187691,35.188283,35.18921,35.189777,35.189984,35.190199,35.190928,35.191043,35.19137,35.191936,35.192379,35.192714,35.193041,35.193118,35.193282,35.193472,35.193646,35.193816,35.193904,35.194122,35.194345,35.19461,35.194868,35.195222,35.195322,35.195512,35.19576,35.196214,35.196592,35.197279,35.197602,35.197921,35.198058,35.198359,35.198706,35.198988,35.199039,35.199191,35.199285,35.199443,35.199587,35.200177,35.200373,35.200409,35.200632,35.200799,35.201032,35.201106,35.201742,35.202136,35.202378,35.202456,35.202727,35.202852,35.202998,35.203197,35.203571,35.203613,35.20388,35.204061,35.204011,35.203991,35.203971,35.203952,35.203604,35.20169,35.201666,35.201643,35.201642,35.201636,35.201633,35.201307,35.20018,35.200135,35.198158,35.197522,35.194561,35.194045,35.192337,35.19012,35.189588,35.188319,35.188291,35.18804,35.184758,35.184714,35.184649,35.183984,35.182513,35.180413,35.180171,35.178968,35.177548,35.174352,35.174217,35.172843,35.171201,35.170716,35.167623,35.165556,35.162607,35.160935,35.16027,35.158717,35.158432,35.158307,35.156329,35.153595,35.153115,35.149551,35.147489,35.147183,35.147044,35.146806,35.146377,35.145245,35.14431,35.143693,35.143511,35.14286,35.142471,35.142119,35.141615,35.139606,35.139203,35.136192,35.135413,35.135696,35.135948,35.13601,35.136844,35.138088,35.139296,35.139974,35.140459,35.140855,35.141153,35.141703,35.144618,35.144806,35.145372,35.146598,35.147833,35.149059,35.150286,35.151521,35.151655,35.152576,35.152785,35.153455,35.155109,35.155614,35.156732,35.158661,35.159869,35.160852,35.161068,35.162064,35.163484,35.16371,35.163736,35.163771,35.166115,35.16689,35.169343,35.170551,35.171777,35.173012,35.173274,35.174147,35.174402,35.174591,35.174707,35.174812,35.175364,35.176635,35.177808,35.177883,35.178971,35.180144,35.181326,35.182508,35.183756,35.184623,35.184716,35.18476,35.184816,35.184826,35.184995,35.185065,35.185201,35.185426,35.185764]}]],[[{"lng":[-106.517347,-106.516253,-106.515821,-106.515598,-106.514922,-106.514039,-106.513604,-106.512489,-106.511731,-106.511559,-106.510728,-106.509867,-106.509666,-106.506894,-106.506901,-106.506905,-106.506898,-106.506886,-106.506876,-106.506883,-106.506905,-106.506906,-106.506913,-106.506922,-106.506923,-106.506924,-106.506927,-106.506869,-106.506286,-106.505697,-106.504526,-106.503356,-106.502907,-106.502186,-106.500429,-106.499822,-106.497869,-106.49729,-106.497064,-106.497064,-106.497066,-106.497071,-106.4971,-106.497181,-106.49738,-106.497804,-106.497908,-106.497914,-106.497901,-106.497888,-106.497892,-106.49791,-106.497893,-106.498097,-106.498262,-106.498491,-106.49862,-106.498935,-106.499483,-106.49969,-106.499789,-106.499878,-106.500068,-106.500535,-106.500748,-106.500837,-106.501029,-106.501274,-106.501478,-106.501894,-106.502153,-106.502381,-106.502587,-106.502841,-106.502933,-106.503046,-106.503246,-106.503358,-106.503456,-106.503664,-106.503775,-106.503998,-106.504178,-106.504261,-106.504319,-106.504474,-106.504567,-106.504807,-106.50501,-106.505345,-106.505556,-106.506102,-106.506258,-106.506336,-106.506457,-106.506545,-106.506962,-106.507149,-106.507502,-106.507536,-106.508187,-106.508352,-106.508463,-106.508989,-106.509166,-106.509442,-106.510103,-106.51043,-106.510606,-106.511233,-106.511367,-106.511492,-106.511603,-106.511878,-106.512056,-106.512326,-106.513123,-106.513968,-106.514193,-106.514641,-106.514704,-106.514741,-106.514852,-106.514962,-106.515039,-106.515344,-106.515421,-106.515511,-106.515649,-106.515775,-106.515805,-106.515892,-106.516002,-106.516751,-106.516935,-106.517102,-106.51725,-106.517347],"lat":[35.141879,35.142317,35.142489,35.142564,35.142792,35.143154,35.143302,35.143682,35.143887,35.143933,35.144146,35.144366,35.144416,35.1451,35.145884,35.14633,35.146539,35.146878,35.147156,35.147365,35.14798,35.148972,35.149145,35.149382,35.149772,35.150159,35.151047,35.152329,35.152331,35.152334,35.15231,35.152299,35.152312,35.152333,35.152325,35.152323,35.152352,35.15236,35.152364,35.152217,35.151887,35.151113,35.150446,35.149882,35.149337,35.147962,35.147175,35.146211,35.145665,35.145109,35.144645,35.142771,35.140737,35.140773,35.140803,35.140904,35.140983,35.141152,35.14131,35.141393,35.141414,35.141418,35.141407,35.141407,35.141435,35.141438,35.1414,35.141391,35.141354,35.141298,35.141251,35.141178,35.141078,35.140931,35.140888,35.140857,35.140865,35.140875,35.140883,35.140889,35.140867,35.140795,35.140702,35.140595,35.140536,35.140315,35.140229,35.14005,35.139948,35.139836,35.139788,35.139817,35.139788,35.139763,35.139752,35.139744,35.139741,35.13973,35.139689,35.139684,35.139598,35.139586,35.139563,35.139367,35.139337,35.139302,35.139265,35.139286,35.139283,35.139242,35.139202,35.139126,35.139104,35.139078,35.139031,35.138915,35.138583,35.138164,35.138064,35.137901,35.13788,35.137868,35.137846,35.13784,35.137844,35.137874,35.137866,35.137834,35.137712,35.13765,35.137862,35.138098,35.138397,35.140418,35.140801,35.14119,35.141606,35.141879]}]],[[{"lng":[-106.526702,-106.525415,-106.524927,-106.524818,-106.524805,-106.524618,-106.52458,-106.524543,-106.524502,-106.524468,-106.524521,-106.523315,-106.52262,-106.521995,-106.520735,-106.520587,-106.520084,-106.519327,-106.518784,-106.518428,-106.518263,-106.51703,-106.516072,-106.515186,-106.514045,-106.513446,-106.513287,-106.512314,-106.511827,-106.510978,-106.510806,-106.510077,-106.510026,-106.50923,-106.50905,-106.508272,-106.506869,-106.506927,-106.506924,-106.506923,-106.506922,-106.506913,-106.506906,-106.506905,-106.506883,-106.506876,-106.506886,-106.506898,-106.506905,-106.506901,-106.506894,-106.509666,-106.509867,-106.510728,-106.511559,-106.511731,-106.512489,-106.513604,-106.514039,-106.514922,-106.515598,-106.515821,-106.516253,-106.517347,-106.518197,-106.518477,-106.518803,-106.519492,-106.520048,-106.520425,-106.520723,-106.521195,-106.521328,-106.52191,-106.522683,-106.52345,-106.523982,-106.524568,-106.525471,-106.526928,-106.526702],"lat":[35.149068,35.150724,35.151734,35.151959,35.152002,35.152625,35.152881,35.153133,35.153403,35.153634,35.154364,35.154275,35.154156,35.153892,35.153178,35.153056,35.15272,35.152204,35.151833,35.151591,35.151494,35.150995,35.150849,35.150834,35.150809,35.150796,35.150793,35.15085,35.150879,35.151198,35.151263,35.151677,35.151699,35.152046,35.152093,35.152295,35.152329,35.151047,35.150159,35.149772,35.149382,35.149145,35.148972,35.14798,35.147365,35.147156,35.146878,35.146539,35.14633,35.145884,35.1451,35.144416,35.144366,35.144146,35.143933,35.143887,35.143682,35.143302,35.143154,35.142792,35.142564,35.142489,35.142317,35.141879,35.14336,35.143751,35.144205,35.144738,35.145091,35.14533,35.145488,35.145723,35.145798,35.146129,35.146559,35.14695,35.147228,35.147536,35.14801,35.148778,35.149068]}]],[[{"lng":[-106.418652,-106.416427,-106.415684,-106.415218,-106.415053,-106.414885,-106.414745,-106.413742,-106.413625,-106.413408,-106.413032,-106.411903,-106.411528,-106.403224,-106.402991,-106.4024,-106.402251,-106.386154,-106.379305,-106.37872,-106.369252,-106.369086,-106.36885,-106.36829,-106.367268,-106.366638,-106.366394,-106.363081,-106.362263,-106.359809,-106.358992,-106.352796,-106.346546,-106.33421,-106.328015,-106.319879,-106.314987,-106.303793,-106.30148,-106.301447,-106.299033,-106.298979,-106.297482,-106.292829,-106.291279,-106.290526,-106.28827,-106.287579,-106.287518,-106.284337,-106.28318,-106.274797,-106.27168,-106.271617,-106.271596,-106.271535,-106.271515,-106.270726,-106.268362,-106.267964,-106.26758,-106.267339,-106.266619,-106.26638,-106.26596,-106.2647,-106.26428,-106.26298,-106.25908,-106.25778,-106.255189,-106.244827,-106.244826,-106.24478,-106.244553,-106.243999,-106.243991,-106.24398,-106.244009,-106.244031,-106.244044,-106.244077,-106.244078,-106.244161,-106.243983,-106.243898,-106.243883,-106.243876,-106.243853,-106.243854,-106.243754,-106.243735,-106.243711,-106.24372,-106.243619,-106.243638,-106.24368,-106.243675,-106.243677,-106.243677,-106.243679,-106.24368,-106.243686,-106.243688,-106.243691,-106.243695,-106.243701,-106.243708,-106.243733,-106.243753,-106.243773,-106.243771,-106.243769,-106.243767,-106.243752,-106.243742,-106.243713,-106.243706,-106.243706,-106.243699,-106.243681,-106.243679,-106.24368,-106.24368,-106.24368,-106.24368,-106.24368,-106.243649,-106.243558,-106.243528,-106.243527,-106.243527,-106.243523,-106.243528,-106.24353,-106.243541,-106.243536,-106.243695,-106.244095,-106.24542,-106.2457,-106.246451,-106.247455,-106.247634,-106.24873,-106.248946,-106.250093,-106.25087,-106.251242,-106.252154,-106.253413,-106.254414,-106.25564,-106.256822,-106.258063,-106.259067,-106.260659,-106.261109,-106.262398,-106.263738,-106.26577,-106.266217,-106.266914,-106.267939,-106.269083,-106.270134,-106.270146,-106.270917,-106.271128,-106.271331,-106.272476,-106.273235,-106.273554,-106.274816,-106.275947,-106.276896,-106.2788,-106.279224,-106.280523,-106.28155,-106.281775,-106.282395,-106.282472,-106.282543,-106.284277,-106.285302,-106.285577,-106.285774,-106.286675,-106.287295,-106.288562,-106.288979,-106.289196,-106.289484,-106.289717,-106.29011,-106.290335,-106.290694,-106.291855,-106.292459,-106.292632,-106.293556,-106.293849,-106.294599,-106.295296,-106.295986,-106.296464,-106.296947,-106.297183,-106.297575,-106.298072,-106.298833,-106.30036,-106.300604,-106.30094,-106.301161,-106.301467,-106.301806,-106.301976,-106.302132,-106.302381,-106.302563,-106.302675,-106.302801,-106.302829,-106.30298,-106.303159,-106.303215,-106.303303,-106.303401,-106.303518,-106.303609,-106.303705,-106.303762,-106.303795,-106.30388,-106.303979,-106.304091,-106.304452,-106.304485,-106.304539,-106.304595,-106.304616,-106.304627,-106.304638,-106.304644,-106.304653,-106.30467,-106.304668,-106.304688,-106.304715,-106.304767,-106.304844,-106.304921,-106.305023,-106.305118,-106.305314,-106.305923,-106.306112,-106.306305,-106.306581,-106.307329,-106.307425,-106.308473,-106.308853,-106.30916,-106.309297,-106.309462,-106.309538,-106.309643,-106.309841,-106.309942,-106.310212,-106.310405,-106.310705,-106.311112,-106.311165,-106.311346,-106.311533,-106.311661,-106.312096,-106.312327,-106.312392,-106.312899,-106.313752,-106.314204,-106.31453,-106.314665,-106.314858,-106.315263,-106.315388,-106.315516,-106.315648,-106.315728,-106.315868,-106.316065,-106.316266,-106.316433,-106.31661,-106.316911,-106.317943,-106.318146,-106.318341,-106.318538,-106.3188,-106.318862,-106.318964,-106.319043,-106.319283,-106.319455,-106.319904,-106.320458,-106.320573,-106.321099,-106.321481,-106.321836,-106.322039,-106.322292,-106.322704,-106.322947,-106.323134,-106.323924,-106.324262,-106.3249,-106.325783,-106.326453,-106.327232,-106.327772,-106.327928,-106.32804,-106.328294,-106.328382,-106.328468,-106.328676,-106.328769,-106.328947,-106.329258,-106.329676,-106.330583,-106.331776,-106.331977,-106.332355,-106.332782,-106.332809,-106.332965,-106.333527,-106.333794,-106.333999,-106.334869,-106.335079,-106.33535,-106.335819,-106.335975,-106.337348,-106.337521,-106.337582,-106.337781,-106.338286,-106.338888,-106.339332,-106.33979,-106.340008,-106.340135,-106.340235,-106.340452,-106.340869,-106.341138,-106.341629,-106.341839,-106.342044,-106.342154,-106.342304,-106.342743,-106.342908,-106.343319,-106.343735,-106.344512,-106.345862,-106.347066,-106.347528,-106.347672,-106.347876,-106.348034,-106.348203,-106.349119,-106.349478,-106.349798,-106.349875,-106.349987,-106.350207,-106.350515,-106.350743,-106.350987,-106.351098,-106.351366,-106.352035,-106.352794,-106.355138,-106.355143,-106.355154,-106.355191,-106.355314,-106.355414,-106.355726,-106.356066,-106.356176,-106.356286,-106.356599,-106.356752,-106.356901,-106.356989,-106.357093,-106.357181,-106.357345,-106.357505,-106.357858,-106.357987,-106.358137,-106.358346,-106.358624,-106.35868,-106.358695,-106.358786,-106.358927,-106.359078,-106.359178,-106.359406,-106.359991,-106.36133,-106.361522,-106.361666,-106.361726,-106.361787,-106.361884,-106.362005,-106.362137,-106.36223,-106.362298,-106.362378,-106.362558,-106.362679,-106.362759,-106.362863,-106.362949,-106.363029,-106.363156,-106.36434,-106.364844,-106.365355,-106.365875,-106.366181,-106.367024,-106.367364,-106.367554,-106.367839,-106.367982,-106.368192,-106.368333,-106.368501,-106.368845,-106.369195,-106.369407,-106.36963,-106.369866,-106.370125,-106.370389,-106.371764,-106.372078,-106.372132,-106.372512,-106.372649,-106.372776,-106.372914,-106.373124,-106.37336,-106.373558,-106.373801,-106.374047,-106.374323,-106.374524,-106.374777,-106.374904,-106.374963,-106.374992,-106.375112,-106.375217,-106.375327,-106.375416,-106.375531,-106.375597,-106.375619,-106.375631,-106.375621,-106.375605,-106.375605,-106.375628,-106.375678,-106.375733,-106.375815,-106.375915,-106.376034,-106.376133,-106.376205,-106.376278,-106.376388,-106.37654,-106.376603,-106.37667,-106.376708,-106.376771,-106.376808,-106.376836,-106.376853,-106.376853,-106.376865,-106.376898,-106.376927,-106.376966,-106.377033,-106.377066,-106.377083,-106.377088,-106.377083,-106.377072,-106.377033,-106.377028,-106.376968,-106.376935,-106.376924,-106.376936,-106.376968,-106.37704,-106.377107,-106.377187,-106.377281,-106.377383,-106.37749,-106.377596,-106.377689,-106.377771,-106.377837,-106.377898,-106.37793,-106.377936,-106.377936,-106.377897,-106.377886,-106.377896,-106.377942,-106.3782,-106.378277,-106.378348,-106.378447,-106.378567,-106.378683,-106.378804,-106.37893,-106.37904,-106.379128,-106.37926,-106.379373,-106.379962,-106.380572,-106.381395,-106.381576,-106.381756,-106.381869,-106.382083,-106.38219,-106.382314,-106.382416,-106.382499,-106.382714,-106.382857,-106.383002,-106.383118,-106.383282,-106.383494,-106.383612,-106.383729,-106.383816,-106.38396,-106.384102,-106.384341,-106.384588,-106.384885,-106.385171,-106.385462,-106.385644,-106.385963,-106.386167,-106.386331,-106.386508,-106.386679,-106.387039,-106.387231,-106.387397,-106.387534,-106.387671,-106.387832,-106.387958,-106.388052,-106.388162,-106.388513,-106.388651,-106.3887,-106.388728,-106.388728,-106.388761,-106.388867,-106.388955,-106.389059,-106.389086,-106.389153,-106.389268,-106.389367,-106.389467,-106.389593,-106.389686,-106.389785,-106.389862,-106.389971,-106.389993,-106.389998,-106.389993,-106.389948,-106.38992,-106.389887,-106.389854,-106.389854,-106.389876,-106.389914,-106.389969,-106.390067,-106.390176,-106.390335,-106.390411,-106.39046,-106.390504,-106.390515,-106.390514,-106.390482,-106.390421,-106.39036,-106.390234,-106.390162,-106.390134,-106.390145,-106.390189,-106.390255,-106.390331,-106.39043,-106.390581,-106.390693,-106.390804,-106.390883,-106.390975,-106.391076,-106.391162,-106.391236,-106.391297,-106.391352,-106.391339,-106.391341,-106.39132,-106.391321,-106.391348,-106.391377,-106.391416,-106.391471,-106.391521,-106.391587,-106.391604,-106.391593,-106.391565,-106.391505,-106.391369,-106.391325,-106.391314,-106.391316,-106.391339,-106.391383,-106.39145,-106.391538,-106.391818,-106.391929,-106.392133,-106.39222,-106.392348,-106.392511,-106.392587,-106.392624,-106.392628,-106.392604,-106.392619,-106.392656,-106.392712,-106.392895,-106.392966,-106.392994,-106.393,-106.392982,-106.392945,-106.392934,-106.393053,-106.393198,-106.393431,-106.393599,-106.393811,-106.393979,-106.394169,-106.394307,-106.3945,-106.394678,-106.394828,-106.394953,-106.395084,-106.395205,-106.395361,-106.39555,-106.3957,-106.396025,-106.396236,-106.396423,-106.396594,-106.396735,-106.39728,-106.397295,-106.397484,-106.397612,-106.397689,-106.397755,-106.39781,-106.397888,-106.397948,-106.398031,-106.39812,-106.398327,-106.398465,-106.398599,-106.398671,-106.398771,-106.399007,-106.399217,-106.39931,-106.399473,-106.399903,-106.400043,-106.40015,-106.400212,-106.40023,-106.400309,-106.400416,-106.400492,-106.400592,-106.400694,-106.400809,-106.400914,-106.401021,-106.401125,-106.401284,-106.401524,-106.401626,-106.401909,-106.402027,-106.40217,-106.402434,-106.402733,-106.402907,-106.403036,-106.403147,-106.403267,-106.403404,-106.403498,-106.403597,-106.403682,-106.403762,-106.403839,-106.403896,-106.403939,-106.403972,-106.403994,-106.404,-106.404021,-106.404057,-106.404101,-106.404167,-106.404282,-106.404446,-106.404583,-106.40471,-106.404843,-106.404865,-106.404974,-106.405112,-106.405243,-106.405371,-106.405486,-106.405547,-106.40558,-106.405586,-106.40557,-106.405504,-106.405417,-106.405307,-106.405153,-106.404675,-106.404542,-106.404455,-106.404423,-106.404423,-106.404518,-106.404654,-106.404772,-106.405007,-106.405135,-106.405311,-106.405615,-106.405716,-106.405796,-106.405856,-106.40589,-106.405967,-106.405972,-106.405968,-106.405888,-106.405634,-106.405541,-106.40553,-106.405542,-106.405636,-106.405658,-106.405653,-106.405636,-106.405576,-106.405466,-106.405427,-106.405434,-106.405511,-106.405539,-106.405605,-106.405727,-106.405865,-106.406018,-106.406194,-106.406354,-106.406547,-106.406707,-106.407112,-106.407276,-106.407446,-106.407859,-106.408062,-106.408271,-106.408454,-106.408701,-106.409053,-106.409389,-106.409559,-106.409651,-106.409687,-106.409769,-106.409813,-106.409825,-106.409803,-106.409748,-106.409654,-106.409521,-106.409351,-106.40895,-106.408587,-106.40839,-106.408187,-106.408143,-106.408138,-106.408139,-106.408096,-106.408041,-106.408014,-106.408037,-106.408081,-106.408218,-106.408339,-106.408471,-106.408659,-106.408906,-106.409241,-106.409545,-106.409775,-106.409962,-106.410128,-106.410298,-106.41064,-106.410769,-106.411034,-106.411187,-106.411363,-106.411601,-106.412036,-106.412243,-106.413048,-106.413202,-106.413258,-106.413286,-106.413264,-106.413198,-106.413105,-106.412616,-106.412478,-106.412365,-106.412228,-106.412124,-106.412015,-106.41191,-106.411805,-106.411701,-106.411614,-106.411284,-106.411113,-106.410954,-106.410838,-106.410713,-106.410389,-106.410246,-106.410043,-106.409853,-106.409744,-106.409655,-106.409601,-106.409519,-106.409469,-106.409222,-106.409063,-106.408937,-106.408794,-106.408696,-106.408663,-106.408677,-106.408664,-106.408518,-106.408438,-106.408367,-106.408447,-106.408522,-106.408785,-106.408829,-106.408945,-106.409093,-106.409417,-106.409562,-106.409666,-106.409759,-106.409826,-106.409848,-106.409865,-106.409865,-106.409904,-106.409964,-106.41003,-106.410246,-106.410334,-106.410444,-106.410537,-106.410647,-106.410818,-106.411406,-106.411916,-106.412021,-106.41212,-106.412235,-106.412334,-106.412428,-106.412499,-106.412532,-106.412544,-106.412577,-106.412594,-106.412616,-106.412649,-106.41271,-106.412799,-106.412948,-106.413228,-106.413641,-106.413785,-106.4139,-106.413993,-106.414175,-106.414412,-106.414599,-106.414807,-106.414966,-106.415077,-106.415616,-106.415808,-106.415958,-106.416156,-106.416337,-106.416485,-106.416608,-106.416758,-106.416833,-106.416921,-106.416987,-106.417033,-106.417061,-106.417111,-106.417199,-106.417298,-106.417425,-106.417585,-106.417777,-106.417997,-106.4182,-106.41833,-106.418455,-106.418532,-106.418603,-106.418647,-106.418652],"lat":[35.217428,35.217461,35.217432,35.217442,35.217445,35.217449,35.217445,35.217419,35.217416,35.217417,35.217417,35.21742,35.217422,35.217429,35.21742,35.217396,35.21739,35.217399,35.217414,35.217415,35.217435,35.217436,35.217435,35.217437,35.217435,35.217432,35.217431,35.217444,35.217435,35.217411,35.217403,35.217323,35.217243,35.217041,35.216941,35.216842,35.216816,35.216429,35.216327,35.216326,35.216342,35.216342,35.216303,35.216182,35.216142,35.216101,35.215979,35.215942,35.215941,35.215868,35.215842,35.215623,35.215542,35.215539,35.215538,35.215535,35.215535,35.215499,35.215394,35.215377,35.215442,35.215422,35.215362,35.215342,35.215342,35.215342,35.215342,35.215281,35.215101,35.215042,35.215074,35.215204,35.215193,35.207942,35.20378,35.193593,35.193461,35.193243,35.193067,35.192937,35.192858,35.192664,35.19257,35.180493,35.17409,35.173291,35.172922,35.172581,35.171995,35.171976,35.171087,35.170677,35.170298,35.170238,35.167162,35.167111,35.165613,35.164956,35.163883,35.163555,35.162572,35.162555,35.162245,35.162105,35.161928,35.16169,35.161343,35.160931,35.159578,35.158638,35.157737,35.157558,35.157039,35.157021,35.156843,35.15673,35.156391,35.156296,35.156278,35.15518,35.151887,35.151345,35.15079,35.150069,35.147906,35.147243,35.147186,35.146796,35.145629,35.14524,35.144533,35.144415,35.142868,35.142508,35.142414,35.14209,35.141708,35.141709,35.141721,35.14179,35.141789,35.141776,35.141771,35.141776,35.141753,35.141754,35.141758,35.141759,35.14176,35.141762,35.141752,35.141749,35.141762,35.141762,35.141764,35.141766,35.14178,35.141778,35.141769,35.14178,35.141779,35.141782,35.141786,35.141793,35.141797,35.141805,35.141806,35.141802,35.141801,35.141813,35.14182,35.141823,35.141835,35.141841,35.141825,35.141835,35.141846,35.141843,35.141835,35.141857,35.141852,35.141861,35.141862,35.141862,35.141874,35.141896,35.14191,35.141907,35.141896,35.141899,35.141914,35.141925,35.14193,35.141931,35.141933,35.141935,35.141958,35.141935,35.141949,35.141948,35.141949,35.141957,35.141965,35.141983,35.142001,35.142025,35.142042,35.142042,35.142052,35.142055,35.142059,35.142065,35.142087,35.142087,35.142055,35.142019,35.141952,35.141866,35.141818,35.141785,35.141756,35.141759,35.141769,35.141795,35.141803,35.141847,35.141926,35.141951,35.142003,35.142085,35.142191,35.142302,35.142439,35.142551,35.142615,35.142816,35.143047,35.143296,35.1441,35.144185,35.144322,35.144514,35.144717,35.144821,35.145009,35.145281,35.145731,35.146272,35.147611,35.147737,35.147858,35.147989,35.148139,35.148271,35.148399,35.148498,35.148673,35.149101,35.149255,35.14937,35.149564,35.15009,35.150161,35.150931,35.151222,35.151532,35.151694,35.151911,35.15204,35.152182,35.15242,35.152526,35.152721,35.152806,35.152927,35.153104,35.153131,35.153223,35.15335,35.153446,35.153773,35.153947,35.153997,35.15439,35.155041,35.155397,35.155643,35.155758,35.155905,35.15614,35.156188,35.156237,35.156285,35.156309,35.15635,35.156398,35.156438,35.156463,35.156482,35.156498,35.156522,35.156538,35.156558,35.156596,35.156659,35.156683,35.156724,35.156742,35.156836,35.156913,35.157149,35.157438,35.157499,35.157735,35.157893,35.158019,35.158097,35.158178,35.15829,35.158363,35.158419,35.158635,35.158718,35.158858,35.15905,35.159176,35.159323,35.159417,35.159452,35.159477,35.159549,35.159578,35.159607,35.159689,35.159746,35.159808,35.159961,35.160179,35.160631,35.161217,35.161304,35.161457,35.161585,35.161593,35.161637,35.161752,35.161799,35.161829,35.16191,35.161933,35.161954,35.162001,35.162017,35.162142,35.162151,35.162155,35.16216,35.162156,35.1621,35.162029,35.161961,35.161941,35.161933,35.161928,35.161925,35.161929,35.161943,35.161978,35.161996,35.162014,35.162046,35.162048,35.162106,35.162133,35.16221,35.162317,35.162528,35.162832,35.163093,35.163194,35.163224,35.163261,35.16329,35.16332,35.163467,35.163531,35.163595,35.163619,35.163653,35.1637,35.163753,35.163782,35.163804,35.16382,35.16385,35.163939,35.164061,35.164392,35.164432,35.164534,35.164671,35.164759,35.164813,35.16498,35.165151,35.165214,35.165255,35.165325,35.165371,35.165406,35.165415,35.165442,35.165442,35.165419,35.165383,35.165269,35.165244,35.165226,35.165216,35.165224,35.165247,35.165281,35.16526,35.165278,35.165327,35.165366,35.165366,35.165366,35.165788,35.165842,35.165891,35.165918,35.165945,35.165999,35.16608,35.166206,35.166315,35.166417,35.166582,35.166954,35.167181,35.167295,35.167414,35.167501,35.167564,35.167652,35.168143,35.1684,35.168672,35.168922,35.169057,35.169476,35.16963,35.169711,35.169804,35.169844,35.169895,35.169923,35.169949,35.16998,35.169995,35.169988,35.169976,35.169953,35.169917,35.169876,35.169663,35.169618,35.169615,35.169594,35.169597,35.169606,35.169621,35.169671,35.169774,35.169873,35.170017,35.170155,35.170287,35.170348,35.170462,35.170552,35.1706,35.170624,35.17075,35.170908,35.171246,35.171404,35.171629,35.171832,35.171976,35.172098,35.172246,35.172481,35.172711,35.172927,35.173139,35.17331,35.173504,35.173711,35.173914,35.174143,35.174332,35.174644,35.175009,35.175451,35.175635,35.175816,35.175919,35.176196,35.176405,35.176613,35.176946,35.177163,35.177514,35.177857,35.179037,35.179384,35.179736,35.179966,35.180137,35.180286,35.180398,35.180511,35.180741,35.180858,35.181129,35.181318,35.181431,35.181534,35.181638,35.181724,35.181769,35.181807,35.181834,35.181845,35.181849,35.181827,35.181786,35.181741,35.181673,35.181583,35.181506,35.181425,35.181344,35.181155,35.180979,35.180884,35.180695,35.179947,35.179784,35.179676,35.17959,35.179513,35.179459,35.179419,35.179396,35.179396,35.179405,35.179427,35.179459,35.179607,35.179741,35.179975,35.180058,35.18015,35.180229,35.180479,35.180594,35.180686,35.180734,35.18076,35.180803,35.180841,35.180909,35.180987,35.181152,35.181351,35.181454,35.181518,35.181554,35.181604,35.181635,35.181662,35.181716,35.181801,35.181909,35.182044,35.182093,35.182165,35.182228,35.182295,35.182389,35.182488,35.182772,35.182889,35.182974,35.183028,35.183064,35.183123,35.183222,35.183334,35.183478,35.1841,35.18437,35.184523,35.184641,35.18474,35.184843,35.185006,35.185068,35.185122,35.185134,35.185163,35.185181,35.185185,35.185171,35.185144,35.185113,35.185054,35.184982,35.184815,35.184725,35.18463,35.184508,35.184175,35.184004,35.183837,35.183607,35.183485,35.183364,35.183265,35.183165,35.183057,35.182926,35.182777,35.182678,35.182588,35.182466,35.182326,35.182191,35.182056,35.181894,35.181763,35.181538,35.181398,35.181272,35.181119,35.180979,35.180875,35.180808,35.18074,35.180721,35.180718,35.180725,35.18074,35.180778,35.180838,35.180901,35.180976,35.181084,35.18128,35.181469,35.181528,35.181929,35.182086,35.182294,35.182447,35.1826,35.182744,35.182907,35.183087,35.183186,35.183299,35.183407,35.183542,35.183808,35.18393,35.184074,35.184241,35.184376,35.184516,35.184619,35.184732,35.185007,35.185128,35.185398,35.185528,35.185661,35.185865,35.186025,35.186113,35.186377,35.186641,35.186774,35.186904,35.187025,35.187283,35.187414,35.187512,35.18764,35.18776,35.187901,35.188132,35.188351,35.188549,35.188832,35.189046,35.189254,35.189402,35.189542,35.18962,35.189715,35.18979,35.189863,35.189938,35.190006,35.190083,35.190156,35.190214,35.190249,35.190301,35.190321,35.190363,35.190428,35.190491,35.190794,35.190808,35.190941,35.191049,35.191152,35.191274,35.191422,35.191684,35.191837,35.191985,35.192164,35.192542,35.192714,35.192867,35.192943,35.19303,35.193186,35.193309,35.193352,35.19342,35.19359,35.193668,35.19375,35.193809,35.193826,35.193911,35.194059,35.194137,35.194212,35.194263,35.19431,35.194335,35.194344,35.194348,35.194348,35.194229,35.194162,35.193914,35.193801,35.193678,35.193421,35.193147,35.192998,35.192908,35.19284,35.192784,35.192731,35.192689,35.192655,35.192608,35.192549,35.192472,35.192406,35.192319,35.192217,35.192131,35.19208,35.191883,35.191771,35.191683,35.191604,35.191509,35.191419,35.191369,35.191342,35.191332,35.191334,35.191341,35.191368,35.191426,35.191494,35.191611,35.191728,35.19185,35.19199,35.192107,35.192242,35.192346,35.192449,35.192562,35.192874,35.192996,35.19314,35.193267,35.193388,35.193797,35.194174,35.194479,35.194825,35.194978,35.195131,35.195434,35.195559,35.195698,35.195857,35.19603,35.196584,35.19683,35.196938,35.197166,35.197615,35.197791,35.197948,35.198111,35.198394,35.198512,35.198633,35.198759,35.198931,35.199183,35.199346,35.199521,35.199864,35.199919,35.200053,35.200211,35.200355,35.200476,35.200566,35.200638,35.200692,35.200728,35.200745,35.200727,35.200682,35.200523,35.200478,35.200469,35.200482,35.200531,35.200639,35.20076,35.200873,35.200957,35.20099,35.201116,35.201242,35.201382,35.201526,35.201666,35.201815,35.201932,35.202054,35.202356,35.202668,35.202875,35.203241,35.203435,35.203624,35.203921,35.20416,35.204404,35.204629,35.204782,35.204931,35.205066,35.205138,35.205201,35.205228,35.205232,35.205223,35.205227,35.205262,35.205321,35.205397,35.205523,35.205861,35.206041,35.206311,35.206423,35.206536,35.206662,35.206927,35.207071,35.207715,35.207899,35.208048,35.20821,35.208354,35.208525,35.208647,35.208927,35.20904,35.209153,35.209311,35.20946,35.209627,35.209744,35.209835,35.209907,35.209961,35.210106,35.210209,35.210322,35.210453,35.210571,35.210846,35.21095,35.211049,35.211176,35.211298,35.211419,35.211546,35.211857,35.211974,35.212285,35.212471,35.212633,35.212786,35.212908,35.213039,35.213184,35.213195,35.213336,35.213414,35.213458,35.213614,35.213583,35.213497,35.213544,35.213606,35.213669,35.213772,35.213849,35.213925,35.214024,35.214137,35.214254,35.214394,35.21456,35.214701,35.214808,35.214885,35.214966,35.214975,35.214957,35.214934,35.214875,35.214771,35.214378,35.214058,35.214026,35.214012,35.214017,35.214043,35.214111,35.214197,35.214309,35.214476,35.214674,35.214836,35.214985,35.215093,35.215183,35.21526,35.215341,35.215458,35.215611,35.215655,35.215669,35.215659,35.215619,35.215555,35.215497,35.21546,35.215442,35.215437,35.215517,35.215562,35.215583,35.215593,35.215611,35.215633,35.215678,35.215775,35.215836,35.215953,35.216097,35.21625,35.216412,35.216561,35.216678,35.216777,35.21684,35.216871,35.216885,35.216893,35.21692,35.216976,35.217037,35.217118,35.21723,35.217374,35.217428]}]],[[{"lng":[-106.381712,-106.381701,-106.381685,-106.381658,-106.38156,-106.381396,-106.381276,-106.381129,-106.381068,-106.380828,-106.380714,-106.380527,-106.380495,-106.380402,-106.380359,-106.380326,-106.380267,-106.380067,-106.380017,-106.379881,-106.379761,-106.379658,-106.379603,-106.379521,-106.379038,-106.378897,-106.378675,-106.378515,-106.378412,-106.378264,-106.37816,-106.378107,-106.377992,-106.377942,-106.377887,-106.377761,-106.377646,-106.377378,-106.377207,-106.377076,-106.377,-106.376926,-106.376503,-106.376168,-106.37581,-106.375581,-106.375413,-106.375221,-106.375051,-106.374859,-106.374832,-106.3746,-106.374577,-106.374469,-106.374338,-106.374245,-106.374162,-106.37412,-106.374087,-106.374052,-106.374049,-106.374027,-106.374016,-106.374023,-106.374045,-106.374064,-106.374089,-106.374104,-106.374108,-106.374113,-106.374114,-106.374119,-106.374117,-106.374114,-106.374084,-106.374028,-106.374017,-106.374,-106.374018,-106.374024,-106.374019,-106.374036,-106.374042,-106.374021,-106.373999,-106.373951,-106.373921,-106.373896,-106.37371,-106.373623,-106.373523,-106.373508,-106.373435,-106.373415,-106.373427,-106.373366,-106.373345,-106.373318,-106.373314,-106.373263,-106.37322,-106.373208,-106.373175,-106.373104,-106.373065,-106.372989,-106.372909,-106.372739,-106.372591,-106.372508,-106.372465,-106.372321,-106.372168,-106.372029,-106.371955,-106.371773,-106.371734,-106.371581,-106.37144,-106.371303,-106.371203,-106.371188,-106.371101,-106.371056,-106.371018,-106.371,-106.37099,-106.370979,-106.370979,-106.370979,-106.37098,-106.370958,-106.370936,-106.370888,-106.370772,-106.370749,-106.370696,-106.370262,-106.369889,-106.369467,-106.369109,-106.368958,-106.368856,-106.368628,-106.368506,-106.368491,-106.368254,-106.36791,-106.367812,-106.367742,-106.367638,-106.367471,-106.36742,-106.367253,-106.366842,-106.366758,-106.366607,-106.366558,-106.36647,-106.366378,-106.366331,-106.366324,-106.366335,-106.366364,-106.366381,-106.366392,-106.366376,-106.366365,-106.366349,-106.366327,-106.366307,-106.366262,-106.366081,-106.366038,-106.365923,-106.365852,-106.365825,-106.365781,-106.365765,-106.365728,-106.365733,-106.365728,-106.365712,-106.365674,-106.365587,-106.365488,-106.365378,-106.365271,-106.365198,-106.364902,-106.364774,-106.364645,-106.364543,-106.364508,-106.364405,-106.364295,-106.364175,-106.363782,-106.363447,-106.363156,-106.362959,-106.362702,-106.362477,-106.362337,-106.362087,-106.361482,-106.360776,-106.360277,-106.360256,-106.360108,-106.359796,-106.359551,-106.359281,-106.359159,-106.358937,-106.358533,-106.357512,-106.357251,-106.35717,-106.357077,-106.356979,-106.356947,-106.356858,-106.356722,-106.356568,-106.356387,-106.356206,-106.356076,-106.35596,-106.355603,-106.355026,-106.354834,-106.354662,-106.35446,-106.354249,-106.353963,-106.353576,-106.353328,-106.353102,-106.352684,-106.35253,-106.352388,-106.35226,-106.352123,-106.351997,-106.351866,-106.351745,-106.351662,-106.351436,-106.351267,-106.351189,-106.351127,-106.351077,-106.351025,-106.350927,-106.35089,-106.350821,-106.350705,-106.350564,-106.350343,-106.350078,-106.349872,-106.349713,-106.349575,-106.349339,-106.349045,-106.348484,-106.34839,-106.34811,-106.347753,-106.347672,-106.347528,-106.347066,-106.345862,-106.344512,-106.343735,-106.343319,-106.342908,-106.342743,-106.342304,-106.342154,-106.342044,-106.341839,-106.341629,-106.341138,-106.340869,-106.340452,-106.340235,-106.340135,-106.340008,-106.33979,-106.339332,-106.338888,-106.338286,-106.337781,-106.337582,-106.337521,-106.337348,-106.335975,-106.335819,-106.33535,-106.335079,-106.334869,-106.333999,-106.333794,-106.333527,-106.332965,-106.332809,-106.332782,-106.332355,-106.331977,-106.331776,-106.330583,-106.329676,-106.329258,-106.328947,-106.328769,-106.328676,-106.328468,-106.328382,-106.328294,-106.32804,-106.327928,-106.327772,-106.327232,-106.326453,-106.325783,-106.3249,-106.324262,-106.323924,-106.323134,-106.322947,-106.322704,-106.322292,-106.322039,-106.321836,-106.321481,-106.321099,-106.320573,-106.320458,-106.319904,-106.319455,-106.319283,-106.319043,-106.318964,-106.318862,-106.3188,-106.318538,-106.318341,-106.318146,-106.317943,-106.316911,-106.31661,-106.316433,-106.316266,-106.316065,-106.315868,-106.315728,-106.315648,-106.315516,-106.315388,-106.315263,-106.314858,-106.314665,-106.31453,-106.314204,-106.313752,-106.312899,-106.312392,-106.312327,-106.312096,-106.311661,-106.311533,-106.311346,-106.311165,-106.311112,-106.310705,-106.310405,-106.310212,-106.309942,-106.309841,-106.309643,-106.309538,-106.309462,-106.309297,-106.30916,-106.308853,-106.308473,-106.307425,-106.307329,-106.306581,-106.306305,-106.306112,-106.305923,-106.305314,-106.305118,-106.305023,-106.304921,-106.304844,-106.304767,-106.304715,-106.304688,-106.304668,-106.30467,-106.304653,-106.304644,-106.304638,-106.304627,-106.304616,-106.304595,-106.304539,-106.304485,-106.304452,-106.304091,-106.303979,-106.30388,-106.303795,-106.303762,-106.303705,-106.303609,-106.303518,-106.303401,-106.303303,-106.303215,-106.303159,-106.30298,-106.302829,-106.302801,-106.302675,-106.302563,-106.302381,-106.302132,-106.301976,-106.301806,-106.301467,-106.301161,-106.30094,-106.300604,-106.30036,-106.298833,-106.298072,-106.297575,-106.297183,-106.296947,-106.296464,-106.295986,-106.295296,-106.294599,-106.293849,-106.293556,-106.292632,-106.292459,-106.291855,-106.290694,-106.290335,-106.29011,-106.289717,-106.289484,-106.289196,-106.288979,-106.288562,-106.287295,-106.286675,-106.285774,-106.285577,-106.285302,-106.284277,-106.282543,-106.282472,-106.282395,-106.281775,-106.28155,-106.280523,-106.279224,-106.2788,-106.276896,-106.275947,-106.274816,-106.273554,-106.273235,-106.272476,-106.271331,-106.271128,-106.270917,-106.270146,-106.270134,-106.269083,-106.267939,-106.266914,-106.266217,-106.26577,-106.263738,-106.262398,-106.261109,-106.260659,-106.259067,-106.258063,-106.256822,-106.25564,-106.254414,-106.253413,-106.252154,-106.251242,-106.25087,-106.250093,-106.248946,-106.24873,-106.247634,-106.247455,-106.246451,-106.2457,-106.24542,-106.244095,-106.243695,-106.243536,-106.243537,-106.243571,-106.243679,-106.243715,-106.243721,-106.243742,-106.243749,-106.243751,-106.243759,-106.243762,-106.243774,-106.243772,-106.243772,-106.243769,-106.243767,-106.24375,-106.243733,-106.243745,-106.243747,-106.243754,-106.243757,-106.24376,-106.243765,-106.243776,-106.243779,-106.24379,-106.243794,-106.243791,-106.243783,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243781,-106.243793,-106.243797,-106.243799,-106.243808,-106.243811,-106.243812,-106.243817,-106.243819,-106.243722,-106.243648,-106.243637,-106.243648,-106.243656,-106.243666,-106.243678,-106.243705,-106.243718,-106.243711,-106.243689,-106.243689,-106.243705,-106.243711,-106.243711,-106.243702,-106.243694,-106.243691,-106.243702,-106.243703,-106.243705,-106.243746,-106.243828,-106.243826,-106.243817,-106.243814,-106.243807,-106.243805,-106.243787,-106.243776,-106.243777,-106.243778,-106.243758,-106.243755,-106.243752,-106.243756,-106.243753,-106.243752,-106.243765,-106.243763,-106.243762,-106.24376,-106.24376,-106.243759,-106.243759,-106.243759,-106.243757,-106.243756,-106.243757,-106.243765,-106.243769,-106.243769,-106.243769,-106.24377,-106.24377,-106.243771,-106.243772,-106.243773,-106.243777,-106.243779,-106.243787,-106.243779,-106.243782,-106.243783,-106.243791,-106.243793,-106.243794,-106.24379,-106.2438,-106.243799,-106.243799,-106.243809,-106.243803,-106.243802,-106.2438,-106.2438,-106.2438,-106.243802,-106.243803,-106.243804,-106.243802,-106.243801,-106.243796,-106.243796,-106.243796,-106.243796,-106.243798,-106.243799,-106.243803,-106.243803,-106.243805,-106.243806,-106.243807,-106.243806,-106.243805,-106.243805,-106.243804,-106.243803,-106.243803,-106.243798,-106.243792,-106.243798,-106.243794,-106.243794,-106.243801,-106.243801,-106.243802,-106.243803,-106.243805,-106.243806,-106.243812,-106.243839,-106.243853,-106.243849,-106.243837,-106.243833,-106.244279,-106.245497,-106.246413,-106.247943,-106.250022,-106.250817,-106.251535,-106.252226,-106.252836,-106.253269,-106.256438,-106.257201,-106.257755,-106.258292,-106.259285,-106.260174,-106.26092,-106.261038,-106.261252,-106.262116,-106.270656,-106.274558,-106.277782,-106.278269,-106.27832,-106.278859,-106.279311,-106.279947,-106.28054,-106.280984,-106.281846,-106.281942,-106.282312,-106.28337,-106.283773,-106.283916,-106.284667,-106.28503,-106.285943,-106.286446,-106.286953,-106.287325,-106.28762,-106.287929,-106.28839,-106.288872,-106.28972,-106.289975,-106.290289,-106.290692,-106.290988,-106.291538,-106.29184,-106.292383,-106.292942,-106.293518,-106.294368,-106.29463,-106.295584,-106.297172,-106.297413,-106.297808,-106.298184,-106.298563,-106.298982,-106.299248,-106.299464,-106.299862,-106.300096,-106.300277,-106.30105,-106.301583,-106.301973,-106.302498,-106.30265,-106.303118,-106.303354,-106.303646,-106.304009,-106.304233,-106.304683,-106.304973,-106.305292,-106.305575,-106.305842,-106.306392,-106.306618,-106.307048,-106.307587,-106.307866,-106.308294,-106.30853,-106.308958,-106.309081,-106.309293,-106.310039,-106.310418,-106.31076,-106.310993,-106.311196,-106.311412,-106.311565,-106.312596,-106.314905,-106.315386,-106.315783,-106.31623,-106.316311,-106.316557,-106.316712,-106.316976,-106.317233,-106.31771,-106.318004,-106.31829,-106.318596,-106.318905,-106.319239,-106.319544,-106.319811,-106.320085,-106.320269,-106.320689,-106.320898,-106.321154,-106.321284,-106.321669,-106.321901,-106.322539,-106.323268,-106.32397,-106.324487,-106.325555,-106.325947,-106.326294,-106.326564,-106.327001,-106.327026,-106.32713,-106.327537,-106.327925,-106.328265,-106.328551,-106.328815,-106.329085,-106.329448,-106.329705,-106.33009,-106.330408,-106.33077,-106.331256,-106.331818,-106.332492,-106.333375,-106.334805,-106.335441,-106.336148,-106.336861,-106.337486,-106.338434,-106.338998,-106.339486,-106.340374,-106.341032,-106.341263,-106.341304,-106.341777,-106.342654,-106.343422,-106.343888,-106.344304,-106.345116,-106.345807,-106.347889,-106.34926,-106.35011,-106.350988,-106.35138,-106.352051,-106.352909,-106.353431,-106.353975,-106.354096,-106.354564,-106.355504,-106.355897,-106.357049,-106.358592,-106.359398,-106.359987,-106.361756,-106.363155,-106.363273
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment